diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble.h new file mode 100644 index 0000000..da1a06b --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble.h @@ -0,0 +1,667 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the BLE SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_err.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific base UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ + SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ + SD_BLE_UUID_VS_REMOVE, /**< Remove a Vendor Specific base UUID. */ +}; + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ + BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ +}; + +/**@brief BLE Connection Configuration IDs. + * + * IDs that uniquely identify a connection configuration. + */ +enum BLE_CONN_CFGS +{ + BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ + BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ + BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ + BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ + BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ +}; + +/**@brief BLE Common Configuration IDs. + * + * IDs that uniquely identify a common configuration. + */ +enum BLE_COMMON_CFGS +{ + BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific base UUID configuration */ +}; + +/**@brief Common Option IDs. + * IDs that uniquely identify a common option. + */ +enum BLE_COMMON_OPTS +{ + BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ + BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ + BLE_COMMON_OPT_EXTENDED_RC_CAL = BLE_OPT_BASE + 2, /**< Extended RC calibration option */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVT_PTR_ALIGNMENT 4 + +/** @brief Leaves the maximum of the two arguments. +*/ +#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) + +/** @brief Maximum possible length for BLE Events. + * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. + * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. +*/ +#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ + offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ +) + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific base UUID counts + * @{ + */ +#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ +#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ +/** @} */ + +/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. + * @{ + */ +#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ + +/** @} */ + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ + union + { + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; /**< Event parameter union. */ +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE__EVT series. */ + uint16_t evt_len; /**< Length in octets including this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + } evt; /**< Event union. */ +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/** + * @brief Configuration parameters for the PA and LNA. + */ +typedef struct +{ + uint8_t enable :1; /**< Enable toggling for this amplifier */ + uint8_t active_high :1; /**< Set the pin to be active high */ + uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ +} ble_pa_lna_cfg_t; + +/** + * @brief PA & LNA GPIO toggle configuration + * + * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or + * a low noise amplifier. + * + * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided + * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences + * and must be avoided by the application. + */ +typedef struct +{ + ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ + ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ + + uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ + uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ + uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ +} ble_common_opt_pa_lna_t; + +/** + * @brief Configuration of extended BLE connection events. + * + * When enabled the SoftDevice will dynamically extend the connection event when possible. + * + * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. + * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, + * and if there are no conflicts with other BLE roles requesting radio time. + * + * @note @ref sd_ble_opt_get is not supported for this option. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ +} ble_common_opt_conn_evt_ext_t; + +/** + * @brief Enable/disable extended RC calibration. + * + * If extended RC calibration is enabled and the internal RC oscillator (@ref NRF_CLOCK_LF_SRC_RC) is used as the SoftDevice + * LFCLK source, the SoftDevice as a peripheral will by default try to increase the receive window if two consecutive packets + * are not received. If it turns out that the packets were not received due to clock drift, the RC calibration is started. + * This calibration comes in addition to the periodic calibration that is configured by @ref sd_softdevice_enable(). When + * using only peripheral connections, the periodic calibration can therefore be configured with a much longer interval as the + * peripheral will be able to detect and adjust automatically to clock drift, and calibrate on demand. + * + * If extended RC calibration is disabled and the internal RC oscillator is used as the SoftDevice LFCLK source, the + * RC oscillator is calibrated periodically as configured by @ref sd_softdevice_enable(). + * + * @note @ref sd_ble_opt_get is not supported for this option. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable extended RC calibration, enabled by default. */ +} ble_common_opt_extended_rc_cal_t; + +/**@brief Option structure for common options. */ +typedef union +{ + ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ + ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ + ble_common_opt_extended_rc_cal_t extended_rc_cal; /**< Parameters for enabling extended RC calibration. */ +} ble_common_opt_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ + ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ +} ble_opt_t; + +/**@brief BLE connection configuration type, wrapping the module specific configurations, set with + * @ref sd_ble_cfg_set. + * + * @note Connection configurations don't have to be set. + * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, + * the default connection configuration will be automatically added for the remaining connections. + * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in + * place of @ref ble_conn_cfg_t::conn_cfg_tag. + * + * @sa sd_ble_gap_adv_start() + * @sa sd_ble_gap_connect() + * + * @mscs + * @mmsc{@ref BLE_CONN_CFG} + * @endmscs + + */ +typedef struct +{ + uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the + @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls + to select this configuration when creating a connection. + Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ + union { + ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ + ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ + ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ + ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ + ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ + } params; /**< Connection configuration union. */ +} ble_conn_cfg_t; + +/** + * @brief Configuration of Vendor Specific base UUIDs, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. + */ +typedef struct +{ + uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific base UUID bases to allocate memory for. + Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is + @ref BLE_UUID_VS_COUNT_MAX. */ +} ble_common_cfg_vs_uuid_t; + +/**@brief Common BLE Configuration type, wrapping the common configurations. */ +typedef union +{ + ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor Specific base UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ +} ble_common_cfg_t; + +/**@brief BLE Configuration type, wrapping the module specific configurations. */ +typedef union +{ + ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ + ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ + ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ + ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ +} ble_cfg_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the BLE stack + * + * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the + * application RAM region (APP_RAM_BASE). On return, this will + * contain the minimum start address of the application RAM region + * required by the SoftDevice for this configuration. + * + * @note The memory requirement for a specific configuration will not increase between SoftDevices + * with the same major version number. + * + * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located + * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between + * APP_RAM_BASE and the start of the call stack. + * + * @details This call initializes the BLE stack, no BLE related function other than @ref + * sd_ble_cfg_set can be called before this one. + * + * @mscs + * @mmsc{@ref BLE_COMMON_ENABLE} + * @endmscs + * + * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. + * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_NO_MEM One or more of the following is true: + * - The amount of memory assigned to the SoftDevice by *p_app_ram_base is not + * large enough to fit this configuration's memory requirement. Check *p_app_ram_base + * and set the start address of the application RAM region accordingly. + * - Dynamic part of the SoftDevice RAM region is larger then 64 kB which + * is currently not supported. + * @retval ::NRF_ERROR_RESOURCES The total number of L2CAP Channels configured using @ref sd_ble_cfg_set is too large. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); + +/**@brief Add configurations for the BLE stack + * + * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref + * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. + * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. + * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). + * See @ref sd_ble_enable for details about APP_RAM_BASE. + * + * @note The memory requirement for a specific configuration will not increase between SoftDevices + * with the same major version number. + * + * @note If a configuration is set more than once, the last one set is the one that takes effect on + * @ref sd_ble_enable. + * + * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default + * configuration. + * + * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref + * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref + * sd_ble_enable). + * + * @note Error codes for the configurations are described in the configuration structs. + * + * @mscs + * @mmsc{@ref BLE_COMMON_ENABLE} + * @endmscs + * + * @retval ::NRF_SUCCESS The configuration has been added successfully. + * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. + * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not + * large enough to fit this configuration's memory requirement. + */ +SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); + +/**@brief Get an event from the pending events queue. + * + * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. + * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. + * The buffer should be interpreted as a @ref ble_evt_t struct. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that + * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. + * The application is free to choose whether to call this function from thread mode (main context) or directly from the + * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher + * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) + * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so + * could potentially leave events in the internal queue without the application being aware of this fact. + * + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to + * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, + * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. + * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length + * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: + * + * \code + * uint16_t len; + * errcode = sd_ble_evt_get(NULL, &len); + * \endcode + * + * @mscs + * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} + * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); + + +/**@brief Add a Vendor Specific base UUID. + * + * @details This call enables the application to add a Vendor Specific base UUID to the BLE stack's table, for later + * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t + * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code + * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses + * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to + * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field + * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to + * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in + * p_uuid_type along with an @ref NRF_SUCCESS error code. + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific base UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @retval ::NRF_SUCCESS Successfully added the Vendor Specific base UUID. + * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); + + +/**@brief Remove a Vendor Specific base UUID. + * + * @details This call removes a Vendor Specific base UUID that has been added with @ref sd_ble_uuid_vs_add. This function allows + * the application to reuse memory allocated for Vendor Specific base UUIDs. + * + * @note Currently this function can only be called with a p_uuid_type set to @ref BLE_UUID_TYPE_UNKNOWN or the last added UUID type. + * + * @param[in] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t::type corresponds to the UUID type that + * shall be removed. If the type is set to @ref BLE_UUID_TYPE_UNKNOWN, or the pointer is NULL, the last + * Vendor Specific base UUID will be removed. + * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponds to the UUID type that was + * removed. If function returns with a failure, it contains the last type that is in use by the ATT Server. + * + * @retval ::NRF_SUCCESS Successfully removed the Vendor Specific base UUID. + * @retval ::NRF_ERROR_INVALID_ADDR If p_uuid_type is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If p_uuid_type points to a non-valid UUID type. + * @retval ::NRF_ERROR_FORBIDDEN If the Vendor Specific base UUID is in use by the ATT Server. + */ + +SVCALL(SD_BLE_UUID_VS_REMOVE, uint32_t, sd_ble_uuid_vs_remove(uint8_t *p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of Vendor Specific base UUIDs populated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @retval ::NRF_SUCCESS Successfully encoded into the buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[out] p_version Pointer to a ble_version_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Version information stored successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @endmscs + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ +#ifdef __cplusplus +} +#endif +#endif /* BLE_H__ */ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_err.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_err.h new file mode 100644 index 0000000..1b4820d --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_err.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ +#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ +#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_.h or ble_error_.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif + + +/** + @} + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gap.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gap.h new file mode 100644 index 0000000..692a38e --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gap.h @@ -0,0 +1,2679 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ + SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ + SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ + SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ + SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ + SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ + SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ + SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ + SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ + SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ + SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ + SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ + SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ + SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ + SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ + SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ + SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ + SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ + SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ + SD_BLE_GAP_QOS_CHANNEL_SURVEY_START = BLE_GAP_SVC_BASE + 37, /**< Start Quality of Service (QoS) channel survey module. */ + SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP = BLE_GAP_SVC_BASE + 38, /**< Stop Quality of Service (QoS) channel survey module. */ + SD_BLE_GAP_ADV_ADDR_GET = BLE_GAP_SVC_BASE + 39, /**< Get the Address used on air while Advertising. */ +}; + +/**@brief GAP Event IDs. + * IDs that uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connected to peer. \n See @ref ble_gap_evt_connected_t */ + BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ + BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ + BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ + BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ + BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ + BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ + BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ + BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ + BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ + BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ + BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ + BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ + BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ + BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ + BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ + BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ + BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ + BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT = BLE_GAP_EVT_BASE + 21, /**< Channel survey report. \n See @ref ble_gap_evt_qos_channel_survey_report_t. */ + BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ +}; + +/**@brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ + BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ + BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ + BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 3, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ + BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ + BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ +}; + +/**@brief GAP Configuration IDs. + * + * IDs that uniquely identify a GAP configuration. + */ +enum BLE_GAP_CFGS +{ + BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ + BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ +}; + +/**@brief GAP TX Power roles. + */ +enum BLE_GAP_TX_POWER_ROLES +{ + BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ + BLE_GAP_TX_POWER_ROLE_SCAN_INIT = 2, /**< Scanner and initiator role. */ + BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ +}; + +/** @} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ +#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ +#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ +#define BLE_GAP_ADDR_TYPE_ANONYMOUS 0x7F /**< An advertiser may advertise without its address. + This type of advertising is called anonymous. */ +/**@} */ + + +/**@brief The default interval in seconds at which a private address is refreshed. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ +/**@brief The maximum interval in seconds at which a private address can be refreshed. */ +#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ + + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN (6) + +/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes + * @{ */ +#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ +#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ +#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, + and will not accept a peer using identity address as sender address when + the peer IRK is exchanged, non-zero and added to the identity list. */ +/**@} */ + +/** @brief Invalid power level. */ +#define BLE_GAP_POWER_LEVEL_INVALID 127 + +/** @brief Advertising set handle not set. */ +#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) + +/** @brief The default number of advertising sets. */ +#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) + +/** @brief The maximum number of advertising sets supported by this SoftDevice. */ +#define BLE_GAP_ADV_SET_COUNT_MAX (1) + +/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. + * @{ */ +#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. + If more advertising data is required, use extended advertising instead. */ +#define BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED (255) /**< Maximum supported data length for an extended advertising set. */ + +#define BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED (238) /**< Maximum supported data length for an extended connectable advertising set. */ +/**@}. */ + +/** @brief Set ID not available in advertising report. */ +#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF + +/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons + * @{ */ +#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ +#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ +/**@} */ + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ +#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ +#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min + * @{ */ +#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_INTERVAL_MAX 0xFFFF /**< Maximum Scan interval in 625 us units, i.e. 40,959.375 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min + * @{ */ +#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_WINDOW_MAX 0xFFFF /**< Maximum Scan window in 625 us units, i.e. 40,959.375 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min + * @{ */ +#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in 10 ms units, i.e 10 ms. */ +#define BLE_GAP_SCAN_TIMEOUT_UNLIMITED 0x0000 /**< Continue to scan forever. */ + /** @} */ + +/**@defgroup BLE_GAP_SCAN_BUFFER_SIZE GAP Minimum scanner buffer size + * + * Scan buffers are used for storing advertising data received from an advertiser. + * If ble_gap_scan_params_t::extended is set to 0, @ref BLE_GAP_SCAN_BUFFER_MIN is the minimum scan buffer length. + * else the minimum scan buffer size is @ref BLE_GAP_SCAN_BUFFER_EXTENDED_MIN. + * @{ */ +#define BLE_GAP_SCAN_BUFFER_MIN (31) /**< Minimum data length for an + advertising set. */ +#define BLE_GAP_SCAN_BUFFER_MAX (31) /**< Maximum data length for an + advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MIN (255) /**< Minimum data length for an + extended advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX (1650) /**< Maximum data length for an + extended advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX_SUPPORTED (255) /**< Maximum supported data length for + an extended advertising set. */ +/** @} */ + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * + * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. + * + * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. + * The maximum supported data length for an extended advertiser is defined by + * @ref BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED + * Note that some of the advertising types do not support advertising data. Non-scannable types do not support + * scan response data. + * + * @{ */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising + events. Advertising interval is less that 3.75 ms. + Use this type for fast reconnections. + @note Advertising data is not supported. */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising + events. + @note Advertising data is not supported. */ +#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED 0x06 /**< Connectable non-scannable undirected advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x08 /**< Non-connectable scannable undirected advertising + events using extended advertising PDUs. + @note Only scan response data is supported. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_DIRECTED 0x09 /**< Non-connectable scannable directed advertising + events using extended advertising PDUs. + @note Only scan response data is supported. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising + events using extended advertising PDUs. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_DATA_STATUS GAP Advertising data status + * @{ */ +#define BLE_GAP_ADV_DATA_STATUS_COMPLETE 0x00 /**< All data in the advertising event have been received. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA 0x01 /**< More data to be received. + @note This value will only be used if + @ref ble_gap_scan_params_t::report_incomplete_evts and + @ref ble_gap_adv_report_type_t::extended_pdu are set to true. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. + @note This value will only be used if + @ref ble_gap_adv_report_type_t::extended_pdu is set to true. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. + @note This value will only be used if + @ref ble_gap_adv_report_type_t::extended_pdu is set to true. */ +/**@} */ + +/**@defgroup BLE_GAP_SCAN_FILTER_POLICIES GAP Scanner filter policies + * @{ */ +#define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00 /**< Accept all advertising packets except directed advertising packets + not addressed to this device. */ +#define BLE_GAP_SCAN_FP_WHITELIST 0x01 /**< Accept advertising packets from devices in the whitelist except directed + packets not addressed to this device. */ +#define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_ACCEPT_ALL. + In addition, accept directed advertising packets, where the advertiser's + address is a resolvable private address that cannot be resolved. */ +#define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_WHITELIST. + In addition, accept directed advertising packets, where the advertiser's + address is a resolvable private address that cannot be resolved. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. + For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + + +/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types + * @{ */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ +#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ +#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ +#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@defgroup BLE_GAP_DEVNAME GAP device name defines. + * @{ */ +#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ +#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ +#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ +/**@} */ + + +/**@brief Disable RSSI events for connections */ +#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF + +/**@defgroup BLE_GAP_PHYS GAP PHYs + * @{ */ +#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ +#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ +#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ +#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ +#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ + +/**@brief Supported PHYs in connections, for scanning, and for advertising. */ +#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS) /**< All PHYs except @ref BLE_GAP_PHY_CODED are supported. */ + +/**@} */ + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Random Number Length. */ +#define BLE_GAP_SEC_RAND_LEN 8 + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ +#define BLE_GAP_LESC_P256_PK_LEN 64 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ +#define BLE_GAP_LESC_DHKEY_LEN 32 + + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + + +/**@brief Maximum amount of addresses in the whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + + +/**@brief Maximum amount of identities in the device identities list. */ +#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) + + +/**@brief Default connection count for a configuration. */ +#define BLE_GAP_CONN_COUNT_DEFAULT (1) + + +/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. + * @{ */ +#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ +#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. + * @{ */ +#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ +#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ +#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ +#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ + +/**@} */ + +/**@brief Automatic data length parameter. */ +#define BLE_GAP_DATA_LENGTH_AUTO 0 + +/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. + * @{ */ +#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ +#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ +/**@} */ + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ + +/**@brief The total number of channels in Bluetooth Low Energy. */ +#define BLE_GAP_CHANNEL_COUNT (40) + +/**@defgroup BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS Quality of Service (QoS) Channel survey interval defines + * @{ */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS (0) /**< Continuous channel survey. */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MIN_US (7500) /**< Minimum channel survey interval in microseconds (7.5 ms). */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MAX_US (4000000) /**< Maximum channel survey interval in microseconds (4 s). */ + /**@} */ + +/** @} */ + + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Advertising event properties. */ +typedef struct +{ + uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ + uint8_t anonymous : 1; /**< Omit advertiser's address from all PDUs. + @note Anonymous advertising is only available for + @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and + @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED. */ + uint8_t include_tx_power : 1; /**< This feature is not supported on this SoftDevice. */ +} ble_gap_adv_properties_t; + + +/**@brief Advertising report type. */ +typedef struct +{ + uint16_t connectable : 1; /**< Connectable advertising event type. */ + uint16_t scannable : 1; /**< Scannable advertising event type. */ + uint16_t directed : 1; /**< Directed advertising event type. */ + uint16_t scan_response : 1; /**< Received a scan response. */ + uint16_t extended_pdu : 1; /**< Received an extended advertising set. */ + uint16_t status : 2; /**< Data status. See @ref BLE_GAP_ADV_DATA_STATUS. */ + uint16_t reserved : 9; /**< Reserved for future use. */ +} ble_gap_adv_report_type_t; + +/**@brief Advertising Auxiliary Pointer. */ +typedef struct +{ + uint16_t aux_offset; /**< Time offset from the beginning of advertising packet to the auxiliary packet in 100 us units. */ + uint8_t aux_phy; /**< Indicates the PHY on which the auxiliary advertising packet is sent. See @ref BLE_GAP_PHYS. */ +} ble_gap_aux_pointer_t; + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. + This bit is set by the SoftDevice to indicate whether the address has been resolved from + a Resolvable Private Address (when the peer is using privacy). + If set to 1, @ref addr and @ref addr_type refer to the identity address of the resolved address. + + This bit is ignored when a variable of type @ref ble_gap_addr_t is used as input to API functions. */ + uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. + @ref addr is not used if @ref addr_type is @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + * + * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: + * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval + * that corresponds to the following Bluetooth Spec requirement: + * The Supervision_Timeout in milliseconds shall be larger than + * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP connection security modes. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Channel mask (40 bits). + * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, + * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents + * channel index 39. If a bit is set to 1, the channel is not used. + */ +typedef uint8_t ble_gap_ch_mask_t[5]; + + +/**@brief GAP advertising parameters. */ +typedef struct +{ + ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ + ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. + @note ble_gap_addr_t::addr_type cannot be + @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. + - When privacy is enabled and the local device uses + @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, + the device identity list is searched for a matching entry. If + the local IRK for that device identity is set, the local IRK + for that device will be used to generate the advertiser address + field in the advertising packet. + - If @ref ble_gap_adv_properties_t::type is directed, this must be + set to the targeted scanner or initiator. If the peer address is + in the device identity list, the peer IRK for that device will be + used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE + target addresses used in the advertising event PDUs. */ + uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. + @note If @ref ble_gap_adv_properties_t::type is set to + @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE + advertising, this parameter is ignored. */ + uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, + an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. + @sa BLE_GAP_ADV_TIMEOUT_VALUES. + @note The SoftDevice will always complete at least one advertising + event even if the duration is set too low. */ + uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling + advertising. Setting the value to 0 disables the limitation. When + the count of advertising events specified by this parameter + (if not 0) is reached, advertising will be automatically stopped + and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised + @note If @ref ble_gap_adv_properties_t::type is set to + @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, + this parameter is ignored. */ + ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. + At least one of the primary channels, that is channel index 37-39, must be used. + Masking away secondary advertising channels is not supported. */ + uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ + uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets + are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS + will be used. + The only supported value by this SoftDevice is @ref BLE_GAP_PHY_1MBPS. */ + uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising channel packets + are transmitted. + If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS will be used. + Valid values are + @ref BLE_GAP_PHY_1MBPS and @ref BLE_GAP_PHY_2MBPS. @ref BLE_GAP_PHY_CODED + is not supported by this SoftDevice. + If @ref ble_gap_adv_properties_t::type is an extended advertising type + and connectable, this is the PHY that will be used to establish a + connection and send AUX_ADV_IND packets on. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t set_id:4; /**< The advertising set identifier distinguishes this advertising set from other + advertising sets transmitted by this and other devices. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a + scan request is received and the scanner address is allowed + by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is a non-scannable + advertising type. */ +} ble_gap_adv_params_t; + + +/**@brief GAP advertising data buffers. + * + * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and + * shall never be modified while advertising. The data shall be kept alive until either: + * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. + * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding + * advertising handle. + * - Advertising is stopped. + * - Advertising data is changed. + * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ +typedef struct +{ + ble_data_t adv_data; /**< Advertising data. + @note + Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type + that is allowed to contain advertising data. */ + ble_data_t scan_rsp_data; /**< Scan response data. + @note + Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type + that is scannable. */ +} ble_gap_adv_data_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t extended : 1; /**< If 1, the scanner will accept extended advertising packets. + If set to 0, the scanner will not receive advertising packets + on secondary advertising channels, and will not be able + to receive long advertising PDUs. */ + uint8_t report_incomplete_evts : 1; /**< If 1, events of type @ref ble_gap_evt_adv_report_t may have + @ref ble_gap_adv_report_type_t::status set to + @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. + This parameter is ignored when used with @ref sd_ble_gap_connect + @note This may be used to abort receiving more packets from an extended + advertising event, and is only available for extended + scanning, see @ref sd_ble_gap_scan_start. + @note This feature is not supported by this SoftDevice. */ + uint8_t active : 1; /**< If 1, perform active scanning by sending scan requests. + This parameter is ignored when used with @ref sd_ble_gap_connect. */ + uint8_t filter_policy : 2; /**< Scanning filter policy. @sa BLE_GAP_SCAN_FILTER_POLICIES. + @note Only @ref BLE_GAP_SCAN_FP_ACCEPT_ALL and + @ref BLE_GAP_SCAN_FP_WHITELIST are valid when used with + @ref sd_ble_gap_connect */ + uint8_t scan_phys; /**< Bitfield of PHYs to scan on. If set to @ref BLE_GAP_PHY_AUTO, + scan_phys will default to @ref BLE_GAP_PHY_1MBPS. + - If @ref ble_gap_scan_params_t::extended is set to 0, the only + supported PHY is @ref BLE_GAP_PHY_1MBPS. + - When used with @ref sd_ble_gap_scan_start, + the bitfield indicates the PHYs the scanner will use for scanning + on primary advertising channels. The scanner will accept + @ref BLE_GAP_PHYS_SUPPORTED as secondary advertising channel PHYs. + - When used with @ref sd_ble_gap_connect, the + bitfield indicates the PHYs on where a connection may be initiated. + If scan_phys contains @ref BLE_GAP_PHY_1MBPS and/or @ref BLE_GAP_PHY_2MBPS, + the primary scan PHY is @ref BLE_GAP_PHY_1MBPS. */ + uint16_t interval; /**< Scan interval in 625 us units. @sa BLE_GAP_SCAN_INTERVALS. */ + uint16_t window; /**< Scan window in 625 us units. @sa BLE_GAP_SCAN_WINDOW. */ + uint16_t timeout; /**< Scan timeout in 10 ms units. @sa BLE_GAP_SCAN_TIMEOUT. */ + ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. + At least one of the primary channels, that is channel index 37-39, must be + set to 0. + Masking away secondary channels is not supported. */ +} ble_gap_scan_params_t; + + +/**@brief Privacy. + * + * The privacy feature provides a way for the device to avoid being tracked over a period of time. + * The privacy feature, when enabled, hides the local device identity and replaces it with a private address + * that is automatically refreshed at a specified interval. + * + * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). + * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, + * and devices can establish connections without revealing their real identities. + * + * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) + * are supported. + * + * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all + * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. + * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. + */ +typedef struct +{ + uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ + uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ + uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ + ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. + When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. + By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ +} ble_gap_privacy_params_t; + + +/**@brief PHY preferences for TX and RX + * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. + * @code + * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; + * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; + * @endcode + * + */ +typedef struct +{ + uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ + uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ +} ble_gap_phys_t; + +/** @brief Keys that can be exchanged during a bonding procedure. */ +typedef struct +{ + uint8_t enc : 1; /**< Long Term Key and Master Identification. */ + uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ + uint8_t sign : 1; /**< Connection Signature Resolving Key. */ + uint8_t link : 1; /**< Derive the Link Key from the LTK. */ +} ble_gap_sec_kdist_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ + uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ + uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< The OOB data flag. + - In LE legacy pairing, this flag is set if a device has out of band authentication data. + The OOB method is used if both of the devices have out of band authentication data. + - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. + The OOB method is used if at least one device has the peer device's OOB data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ + ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ + ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 6; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP LE Secure Connections P-256 Public Key. */ +typedef struct +{ + uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ +} ble_gap_lesc_p256_pk_t; + + +/**@brief GAP LE Secure Connections DHKey. */ +typedef struct +{ + uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ +} ble_gap_lesc_dhkey_t; + + +/**@brief GAP LE Secure Connections OOB data. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address of the device. */ + uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ + uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ +} ble_gap_lesc_oob_data_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ + uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ + uint8_t adv_handle; /**< Advertising handle in which advertising has ended. + This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ + ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated + advertising set. The advertising buffers provided in + @ref sd_ble_gap_adv_set_configure are now released. + This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ +} ble_gap_evt_connected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ +typedef struct +{ + uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ +} ble_gap_evt_phy_update_request_t; + +/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ +typedef struct +{ + uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ + uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ + uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ +} ble_gap_evt_phy_update_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ + uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply + with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or + @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ +} ble_gap_evt_passkey_display_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ +typedef struct +{ + uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ +} ble_gap_evt_key_pressed_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ +typedef struct +{ + ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory + inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ + uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ +} ble_gap_evt_lesc_dhkey_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ + uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Encryption Key. */ +typedef struct +{ + ble_gap_enc_info_t enc_info; /**< Encryption Information. */ + ble_gap_master_id_t master_id; /**< Master Identification. */ +} ble_gap_enc_key_t; + + +/**@brief Identity Key. */ +typedef struct +{ + ble_gap_irk_t id_info; /**< Identity Resolving Key. */ + ble_gap_addr_t id_addr_info; /**< Identity Address. */ +} ble_gap_id_key_t; + + +/**@brief Security Keys. */ +typedef struct +{ + ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ + ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ + ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ + ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined + in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ +} ble_gap_sec_keys_t; + + +/**@brief Security key set for both local and peer keys. */ +typedef struct +{ + ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ + ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ +} ble_gap_sec_keyset_t; + + +/**@brief Data Length Update Procedure parameters. */ +typedef struct +{ + uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ + uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ + uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ + uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ +} ble_gap_data_length_params_t; + + +/**@brief Data Length Update Procedure local limitation. */ +typedef struct +{ + uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ + uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ + uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ +} ble_gap_data_length_limitation_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + uint8_t bonded : 1; /**< Procedure resulted in a bond. */ + uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ + ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ + union + { + ble_data_t adv_report_buffer; /**< If source is set to @ref BLE_GAP_TIMEOUT_SRC_SCAN, the released + scan buffer is contained in this field. */ + } params; /**< Event Parameters. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ + uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ +} ble_gap_evt_rssi_changed_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ +typedef struct +{ + uint8_t reason; /**< Reason for why the advertising set terminated. See + @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ + uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ + uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, + this field indicates the number of completed advertising events. */ + ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated + advertising set. The advertising buffers provided in + @ref sd_ble_gap_adv_set_configure are now released. */ +} ble_gap_evt_adv_set_terminated_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. + * + * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, + * not all fields in the advertising report may be available. + * + * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, + * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. + */ +typedef struct +{ + ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: + @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the + peer's identity address. */ + ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if + @ref ble_gap_adv_report_type_t::directed is set to 1. If the + SoftDevice was able to resolve the address, + @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr + contains the local identity address. If the target address of the + advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, + and the SoftDevice was unable to resolve it, the application may try + to resolve this address to find out if the advertising event was + directed to us. */ + uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received. + See @ref BLE_GAP_PHYS. */ + uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received. + See @ref BLE_GAP_PHYS. This field is set to @ref BLE_GAP_PHY_NOT_SET if no packets + were received on a secondary advertising channel. */ + int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. + This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the + last received packet did not contain the Tx Power field. + @note TX Power is only included in extended advertising packets. */ + int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. */ + uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ + uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present + if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ + uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID + is not present if @ref ble_gap_evt_adv_report_t::set_id is set to + @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ + ble_data_t data; /**< Received advertising or scan response data. If + @ref ble_gap_adv_report_type_t::status is not set to + @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided + in @ref sd_ble_gap_scan_start is now released. */ + ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising + event. @note This field is only set if @ref ble_gap_adv_report_type_t::status + is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ +} ble_gap_evt_adv_report_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection requested. */ + uint8_t lesc : 1; /**< LE Secure Connections requested. */ + uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ +} ble_gap_evt_sec_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ +typedef struct +{ + uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ +} ble_gap_evt_scan_req_report_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ +} ble_gap_evt_data_length_update_request_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ +typedef struct +{ + ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ +} ble_gap_evt_data_length_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT. */ +typedef struct +{ + int8_t channel_energy[BLE_GAP_CHANNEL_COUNT]; /**< The measured energy on the Bluetooth Low Energy + channels, in dBm, indexed by Channel Index. + If no measurement is available for the given channel, channel_energy is set to + @ref BLE_GAP_POWER_LEVEL_INVALID. */ +} ble_gap_evt_qos_channel_survey_report_t; + +/**@brief GAP event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ + ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ + ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ + ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ + ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ + ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ + ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ + ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ + ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ + ble_gap_evt_qos_channel_survey_report_t qos_channel_survey_report; /**< Quality of Service (QoS) Channel Survey Report Parameters. */ + } params; /**< Event Parameters. */ +} ble_gap_evt_t; + + +/** + * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. + * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. + */ +typedef struct +{ + uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. + The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ + uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. + The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. + The event length and the connection interval are the primary parameters + for setting the throughput of a connection. + See the SoftDevice Specification for details on throughput. */ +} ble_gap_conn_cfg_t; + + +/** + * @brief Configuration of maximum concurrent connections in the different connected roles, set with + * @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too + * large. The maximum supported sum of concurrent connections is + * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. + * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. + * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum + * supported advertising handles is + * @ref BLE_GAP_ADV_SET_COUNT_MAX. + */ +typedef struct +{ + uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ + uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ + uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ + uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ + uint8_t qos_channel_survey_role_available:1; /**< If set, the Quality of Service (QoS) channel survey module is available to the + application using @ref sd_ble_gap_qos_channel_survey_start. */ +} ble_gap_cfg_role_count_t; + + +/** + * @brief Device name and its properties, set with @ref sd_ble_cfg_set. + * + * @note If the device name is not configured, the default device name will be + * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be + * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name + * will have no write access. + * + * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, + * the attribute table size must be increased to have room for the longer device name (see + * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). + * + * @note If vloc is @ref BLE_GATTS_VLOC_STACK : + * - p_value must point to non-volatile memory (flash) or be NULL. + * - If p_value is NULL, the device name will initially be empty. + * + * @note If vloc is @ref BLE_GATTS_VLOC_USER : + * - p_value cannot be NULL. + * - If the device name is writable, p_value must point to volatile memory (RAM). + * + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - Invalid device name location (vloc). + * - Invalid device name security mode. + * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: + * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). + * - The device name length is too long for the given Attribute Table. + * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. + */ +typedef struct +{ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ + uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ + uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ +} ble_gap_cfg_device_name_t; + + +/**@brief Configuration structure for GAP configurations. */ +typedef union +{ + ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ + ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ +} ble_gap_cfg_t; + + +/**@brief Channel Map option. + * + * @details Used with @ref sd_ble_opt_get to get the current channel map + * or @ref sd_ble_opt_set to set a new channel map. When setting the + * channel map, it applies to all current and future connections. When getting the + * current channel map, it applies to a single connection and the connection handle + * must be supplied. + * + * @note Setting the channel map may take some time, depending on connection parameters. + * The time taken may be different for each connection and the get operation will + * return the previous channel map until the new one has taken effect. + * + * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. + * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. + * + * @retval ::NRF_SUCCESS Get or set successful. + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - Less then two bits in @ref ch_map are set. + * - Bits for primary advertising channels (37-39) are set. + * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. + * + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ + uint8_t ch_map[5]; /**< Channel Map (37-bit). */ +} ble_gap_opt_ch_map_t; + + +/**@brief Local connection latency option. + * + * @details Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * @details Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is disabled by default, and needs to be enabled for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + +/**@brief Disable slave latency + * + * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection + * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the + * peripheral will ignore the slave_latency set by the central. + * + * @note Shall only be called on peripheral links. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ +} ble_gap_opt_slave_latency_disable_t; + +/**@brief Passkey Option. + * + * @details Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication + * instead of generating a random one. + * + * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Compatibility mode 1 option. + * + * @details This can be used with @ref sd_ble_opt_set to enable and disable + * compatibility mode 1. Compatibility mode 1 is disabled by default. + * + * @note Compatibility mode 1 enables interoperability with devices that do not support a value of + * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a + * limited set of legacy peripheral devices from another vendor. Enabling this compatibility + * mode will only have an effect if the local device will act as a central device and + * initiate a connection to a peripheral device. In that case it may lead to the connection + * creation taking up to one connection interval longer to complete for all connections. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable compatibility mode 1.*/ +} ble_gap_opt_compat_mode_1_t; + + +/**@brief Authenticated payload timeout option. + * + * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other + * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. + * + * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated + * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted + * link. + * + * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance + * to reset the timer. In addition the stack will try to prioritize running of LE ping over other + * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects + * on other activities, it is recommended to use high timeout values. + * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ +} ble_gap_opt_auth_payload_timeout_t; + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ + ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ + ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ + ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ + ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set the local Bluetooth identity address. + * + * The local Bluetooth identity address is the address that identifies this device to other peers. + * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * + * @note The identity address cannot be changed while advertising, scanning or creating a connection. + * + * @note This address will be distributed to the peer during bonding. + * If the address changes, the address stored in the peer device will not be valid and the ability to + * reconnect using the old address will be lost. + * + * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being + * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged + * for the lifetime of each IC. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @endmscs + * + * @param[in] p_addr Pointer to address structure. + * + * @retval ::NRF_SUCCESS Address successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, + * scanning or creating a connection. + */ +SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); + + +/**@brief Get local Bluetooth identity address. + * + * @note This will always return the identity address irrespective of the privacy settings, + * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * + * @param[out] p_addr Pointer to address structure to be filled in. + * + * @retval ::NRF_SUCCESS Address successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); + + +/**@brief Get the Bluetooth device address used by the advertiser. + * + * @note This function will return the local Bluetooth address used in advertising PDUs. When + * using privacy, the SoftDevice will generate a new private address every + * @ref ble_gap_privacy_params_t::private_addr_cycle_s configured using + * @ref sd_ble_gap_privacy_set. Hence depending on when the application calls this API, the + * address returned may not be the latest address that is used in the advertising PDUs. + * + * @param[in] adv_handle The advertising handle to get the address from. + * @param[out] p_addr Pointer to address structure to be filled in. + * + * @retval ::NRF_SUCCESS Address successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. + * @retval ::NRF_ERROR_INVALID_STATE The advertising set is currently not advertising. + */ +SVCALL(SD_BLE_GAP_ADV_ADDR_GET, uint32_t, sd_ble_gap_adv_addr_get(uint8_t adv_handle, ble_gap_addr_t *p_addr)); + + +/**@brief Set the active whitelist in the SoftDevice. + * + * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. + * The whitelist cannot be set if a BLE role is using the whitelist. + * + * @note If an address is resolved using the information in the device identity list, then the whitelist + * filter policy applies to the peer identity address and not the resolvable address sent on air. + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @endmscs + * + * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. + * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. + * + * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. + * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when + * pp_wl_addrs is not NULL. + */ +SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); + + +/**@brief Set device identity list. + * + * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. + * The device identity list cannot be set if a BLE role is using the list. + * + * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. + * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. + * To fill in the list with the currently set device IRK for all peers, set to NULL. + * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. + * This code may be returned if the local IRK list also has an invalid entry. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can + * only return when pp_id_keys is not NULL. + */ +SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); + + +/**@brief Set privacy settings. + * + * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. + * + * @param[in] p_privacy_params Privacy settings. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. + * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. + * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning + * or creating a connection. + */ +SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); + + +/**@brief Get privacy settings. + * + * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. + * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. + * + * @param[in,out] p_privacy_params Privacy settings. + * + * @retval ::NRF_SUCCESS Privacy settings read. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. + * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + */ +SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); + + +/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. + * + * @note The format of the advertising data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertising data and scan response data. + * + * @note In order to update advertising data while advertising, new advertising buffers must be provided. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure + * a new advertising set. On success, a new handle is then returned through the pointer. + * Provide a pointer to an existing advertising handle to configure an existing advertising set. + * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. + * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, + * this parameter must be NULL. See @ref ble_gap_adv_params_t. + * + * @retval ::NRF_SUCCESS Advertising set successfully configured. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: + * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. + * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. + * - Use of whitelist requested but whitelist has not been set, + * see @ref sd_ble_gap_whitelist_set. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - It is invalid to provide non-NULL advertising set parameters while advertising. + * - It is invalid to provide the same data buffers while advertising. To update + * advertising data, provide new advertising buffers. + * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to + * configure a new advertising handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification + * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an + * existing advertising handle instead. + * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + */ +SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @note Only one advertiser may be active at any time. + * + * @events + * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} + * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} + * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. + * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or + * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable + * advertising, this is ignored. + * + * @retval ::NRF_SUCCESS The BLE stack has started advertising. + * @retval ::NRF_ERROR_INVALID_STATE adv_handle is not configured or already advertising. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. + * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: + * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. + * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. + * @retval ::NRF_ERROR_RESOURCES Either: + * - adv_handle is configured with connectable advertising, but the event_length parameter + * associated with conn_cfg_tag is too small to be able to establish a connection on + * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. + * - Not enough BLE role slots available. + Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again. + * - p_adv_params is configured with connectable advertising, but the event_length parameter + * associated with conn_cfg_tag is too small to be able to establish a connection on + * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] adv_handle The advertising handle that should stop advertising. + * + * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. + * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(uint8_t adv_handle)); + + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CPU_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected + * + * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress or link has not been established. + * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a @ref BLE_GAP_EVT_DISCONNECTED event. + * + * @events + * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CONN_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). + * + * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress or link has not been established. + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for + * possible roles. + * @param[in] handle The handle parameter is interpreted depending on role: + * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. + * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, + * will use the specified transmit power, and include it in the advertising packet headers if + * @ref ble_gap_adv_properties_t::include_tx_power set. + * - For all other roles handle is ignored. + * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). + * + * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +3dBm and +4dBm. + * @note The initiator will have the same transmit power as the scanner. + * @note When a connection is created it will inherit the transmit power from the initiator or + * advertiser leading to the connection. + * + * @retval ::NRF_SUCCESS Successfully changed the transmit power. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(uint8_t role, uint16_t handle, int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); + + +/**@brief Set GAP device name. + * + * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), + * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. + * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @retval ::NRF_SUCCESS GAP device name retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); + + +/**@brief Initiate the GAP Authentication procedure. + * + * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), + * otherwise in the peripheral role, an SMP Security Request will be sent. + * + * @events + * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} + * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} + * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} + * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} + * @event{@ref BLE_GAP_EVT_KEY_PRESSED} + * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} + * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} + * @event{@ref BLE_GAP_EVT_AUTH_STATUS} + * @event{@ref BLE_GAP_EVT_TIMEOUT} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. + * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. + * In the central role, this pointer may be NULL to reject a Security Request. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - No link has been established. + * - An encryption is already executing or queued. + * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have + * already been provided during a previous call to @ref sd_ble_gap_authenticate. + * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure + * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application + * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. + * Note that the SoftDevice expects the application to provide memory for storing the + * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key + * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the + * @ref BLE_GAP_EVT_AUTH_STATUS event. + * + * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Security parameters has not been requested. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); + + +/**@brief Reply with an authentication key. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) + * or NULL when confirming LE Secure Connections Numeric Comparison. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. + * + * @retval ::NRF_SUCCESS Authentication key successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Authentication key has not been requested. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); + + +/**@brief Reply with an LE Secure connections DHKey. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dhkey LE Secure Connections DHKey. + * + * @retval ::NRF_SUCCESS DHKey successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - The peer is not authenticated. + * - The application has not pulled a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); + + +/**@brief Notify the peer of a local keypress. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. + * + * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Authentication key not requested. + * - Passkey has not been entered. + * - Keypresses have not been enabled by both peers. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); + + +/**@brief Generate a set of OOB data to send to a peer out of band. + * + * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, + * the one used during connection setup). The application may manually overwrite it with an updated value. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. + * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. + * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. + * + * @retval ::NRF_SUCCESS OOB data successfully generated. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); + +/**@brief Provide the OOB data sent/received out of band. + * + * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. + * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. + * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. + * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. + * Must correspond to @ref ble_gap_sec_params_t::oob flag + * in @ref sd_ble_gap_authenticate in the central role or + * in @ref sd_ble_gap_sec_params_reply in the peripheral role. + * + * @retval ::NRF_SUCCESS OOB data accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Authentication key not requested + * - Not expecting LESC OOB data + * - Have not actually exchanged passkeys. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); + + +/**@brief Initiate GAP Encryption procedure. + * + * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. + * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. + */ +SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); + + +/**@brief Reply with GAP security information. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @retval ::NRF_SUCCESS Successfully accepted security information. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - No link has been established. + * - No @ref BLE_GAP_EVT_SEC_REQUEST pending. + * - LE long term key requested command not allowed. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Current connection security successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @events + * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is + * dependent on the settings of the threshold_dbm + * and skip_count input parameters.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. + * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. + * + * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); + + +/**@brief Stop reporting the received signal strength. + * + * @note An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * + * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); + + +/**@brief Get the received signal strength for the last connection event. + * + * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND + * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. + * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. + * + * @retval ::NRF_SUCCESS Successfully read the RSSI. + * @retval ::NRF_ERROR_NOT_FOUND No sample is available. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. + */ +SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); + + +/**@brief Start or continue scanning (GAP Discovery procedure, Observer Procedure). + * + * @note A call to this function will require the application to keep the memory pointed by + * p_adv_report_buffer alive until the buffer is released. The buffer is released when the scanner is stopped + * or when this function is called with another buffer. + * + * @note The scanner will automatically stop in the following cases: + * - @ref sd_ble_gap_scan_stop is called. + * - @ref sd_ble_gap_connect is called. + * - A @ref BLE_GAP_EVT_TIMEOUT with source set to @ref BLE_GAP_TIMEOUT_SRC_SCAN is received. + * - When a @ref BLE_GAP_EVT_ADV_REPORT event is received and @ref ble_gap_adv_report_type_t::status is not set to + * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. In this case scanning is only paused to let the application + * access received data. The application must call this function to continue scanning, or call @ref sd_ble_gap_scan_stop + * to stop scanning. + * + * @note If a @ref BLE_GAP_EVT_ADV_REPORT event is received with @ref ble_gap_adv_report_type_t::status set to + * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the scanner will continue scanning, and the application will + * receive more reports from this advertising event. The following reports will include the old and new received data. + * + * @events + * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] p_scan_params Pointer to scan parameters structure. When this function is used to continue + * scanning, this parameter must be NULL. + * @param[in] p_adv_report_buffer Pointer to buffer used to store incoming advertising data. + * The memory pointed to should be kept alive until the scanning is stopped. + * See @ref BLE_GAP_SCAN_BUFFER_SIZE for minimum and maximum buffer size. + * If the scanner receives advertising data larger than can be stored in the buffer, + * a @ref BLE_GAP_EVT_ADV_REPORT will be raised with @ref ble_gap_adv_report_type_t::status + * set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED. + * + * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Scanning is already ongoing and p_scan_params was not NULL + * - Scanning is not running and p_scan_params was NULL. + * - The scanner has timed out when this function is called to continue scanning. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. See @ref ble_gap_scan_params_t. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported parameters supplied. See @ref ble_gap_scan_params_t. + * @retval ::NRF_ERROR_INVALID_LENGTH The provided buffer length is invalid. See @ref BLE_GAP_SCAN_BUFFER_MIN. + * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. + */ +SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params, ble_data_t const * p_adv_report_buffer)); + + +/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). + * + * @note The buffer provided in @ref sd_ble_gap_scan_start is released. + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. + * @retval ::NRF_ERROR_INVALID_STATE Not in the scanning state. + */ +SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); + + +/**@brief Create a connection (GAP Link Establishment). + * + * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. + * The scanning procedure will be stopped even if the function returns an error. + * + * @events + * @event{@ref BLE_GAP_EVT_CONNECTED, A connection was established.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Failed to establish a connection.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @param[in] p_peer_addr Pointer to peer identity address. If @ref ble_gap_scan_params_t::filter_policy is set to use + * whitelist, then p_peer_addr is ignored. + * @param[in] p_scan_params Pointer to scan parameters structure. + * @param[in] p_conn_params Pointer to desired connection parameters. + * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or + * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. + * + * @retval ::NRF_SUCCESS Successfully initiated connection procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * - Invalid parameter(s) in p_scan_params or p_conn_params. + * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. + * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. + * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. + * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an + * existing locally initiated connect procedure, which must complete before initiating again. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. + * @retval ::NRF_ERROR_RESOURCES Either: + * - Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Observer) and try again. + * - The event_length parameter associated with conn_cfg_tag is too small to be able to + * establish a connection on the selected @ref ble_gap_scan_params_t::scan_phys. + * Use @ref sd_ble_cfg_set to increase the event length. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. + */ +SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); + + +/**@brief Cancel a connection establishment. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. + * @retval ::NRF_ERROR_INVALID_STATE No locally initiated connect procedure started or connection + * completed occurred. + */ +SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); + + +/**@brief Initiate or respond to a PHY Update Procedure + * + * @details This function is used to initiate or respond to a PHY Update Procedure. It will always + * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. + * If this function is used to initiate a PHY Update procedure and the only option + * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the + * currently active PHYs in the respective directions, the SoftDevice will generate a + * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the + * procedure in the Link Layer. + * + * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, + * then the stack will select PHYs based on the peer's PHY preferences and the local link + * configuration. The PHY Update procedure will for this case result in a PHY combination + * that respects the time constraints configured with @ref sd_ble_cfg_set and the current + * link layer data length. + * + * When acting as a central, the SoftDevice will select the fastest common PHY in each direction. + * + * If the peer does not support the PHY Update Procedure, then the resulting + * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to + * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. + * + * If the PHY procedure was rejected by the peer due to a procedure collision, the status + * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or + * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. + * If the peer responds to the PHY Update procedure with invalid parameters, the status + * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. + * If the PHY procedure was rejected by the peer for a different reason, the status will + * contain the reason as specified by the peer. + * + * @events + * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} + * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} + * @endmscs + * + * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. + * @param[in] p_gap_phys Pointer to PHY structure. + * + * @retval ::NRF_SUCCESS Successfully requested a PHY Update. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. + * + */ +SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); + + +/**@brief Initiate or respond to a Data Length Update Procedure. + * + * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of + * p_dl_params, the SoftDevice will choose the highest value supported in current + * configuration and connection parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update + * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let + * the SoftDevice automatically decide the value for that member. + * Set to NULL to use automatic values for all members. + * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not + * have enough resources or does not support the requested Data Length + * Update parameters. Ignored if NULL. + * + * @mscs + * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. Inspect + * p_dl_limitation to see which parameter is not supported. + * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. + * Use @ref sd_ble_cfg_set with @ref BLE_CONN_CFG_GAP to increase the connection event length. + * Inspect p_dl_limitation to see where the limitation is. + * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the + * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. + */ +SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); + +/**@brief Start the Quality of Service (QoS) channel survey module. + * + * @details The channel survey module provides measurements of the energy levels on + * the Bluetooth Low Energy channels. When the module is enabled, @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT + * events will periodically report the measured energy levels for each channel. + * + * @note The measurements are scheduled with lower priority than other Bluetooth Low Energy roles, + * Radio Timeslot API events and Flash API events. + * + * @note The channel survey module will attempt to do measurements so that the average interval + * between measurements will be interval_us. However due to the channel survey module + * having the lowest priority of all roles and modules, this may not be possible. In that + * case fewer than expected channel survey reports may be given. + * + * @note In order to use the channel survey module, @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available + * must be set. This is done using @ref sd_ble_cfg_set. + * + * @param[in] interval_us Requested average interval for the measurements and reports. See + * @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS for valid ranges. If set + * to @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS, the channel + * survey role will be scheduled at every available opportunity. + * + * @retval ::NRF_SUCCESS The module is successfully started. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter supplied. interval_us is out of the + * allowed range. + * @retval ::NRF_ERROR_INVALID_STATE Trying to start the module when already running. + * @retval ::NRF_ERROR_RESOURCES The channel survey module is not available to the application. + * Set @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available using + * @ref sd_ble_cfg_set. + */ +SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START, uint32_t, sd_ble_gap_qos_channel_survey_start(uint32_t interval_us)); + +/**@brief Stop the Quality of Service (QoS) channel survey module. + * + * @retval ::NRF_SUCCESS The module is successfully stopped. + * @retval ::NRF_ERROR_INVALID_STATE Trying to stop the module when it is not running. + */ +SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP, uint32_t, sd_ble_gap_qos_channel_survey_stop(void)); + + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GAP_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gatt.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gatt.h new file mode 100644 index 0000000..9cb577c --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gatt.h @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default ATT MTU, in bytes. */ +#define BLE_GATT_ATT_MTU_DEFAULT 23 + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/**@brief First Attribute Handle. */ +#define BLE_GATT_HANDLE_START 0x0001 + +/**@brief Last Attribute Handle. */ +#define BLE_GATT_HANDLE_END 0xFFFF + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_WRITE_REQ_REJECTED 0x01FC /**< ATT Common Profile and Service Error: Write request rejected. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. + */ +typedef struct +{ + uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. + The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + @mscs + @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + @endmscs + */ +} ble_gatt_conn_cfg_t; + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ + uint8_t read :1; /**< Reading the value permitted. */ + uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ + uint8_t write :1; /**< Writing the value with Write Request permitted. */ + uint8_t notify :1; /**< Notification of the value permitted. */ + uint8_t indicate :1; /**< Indications of the value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ +} ble_gatt_char_ext_props_t; + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATT_H__ + +/** @} */ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gattc.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gattc.h new file mode 100644 index 0000000..7fb3920 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gattc.h @@ -0,0 +1,715 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" +#include "ble_gatt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ + SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ +}; + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ + BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ + BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ + BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ + BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ +/** @} */ + +/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats + * @{ */ +#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ +#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ +/** @} */ + +/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults + * @{ */ +#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. + */ +typedef struct +{ + uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. + The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ +} ble_gattc_conn_cfg_t; + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t const *p_value; /**< Pointer to the value data. */ +} ble_gattc_write_params_t; + +/**@brief Attribute Information for 16-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ +} ble_gattc_attr_info16_t; + +/**@brief Attribute Information for 128-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ +} ble_gattc_attr_info128_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Attribute count. */ + uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ + union { + ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + } info; /**< Attribute information union. */ +} ble_gattc_evt_attr_info_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ +typedef struct +{ + uint16_t server_rx_mtu; /**< Server RX MTU size. */ +} ble_gattc_evt_exchange_mtu_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ +typedef struct +{ + uint8_t count; /**< Number of write without response transmissions completed. */ +} ble_gattc_evt_write_cmd_tx_complete_t; + +/**@brief GATTC event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ + ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. + * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @events + * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @events + * @event{@ref BLE_GATTC_EVT_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note Only one write with response procedure can be ongoing per connection at a time. + * If the application tries to write with response while another write with response procedure is ongoing, + * the function call will return @ref NRF_ERROR_BUSY. + * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. + * + * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size + * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. + * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. + * + * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: + * - Store initial queue element count in a variable. + * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. + * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. + * + * @events + * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} + * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @retval ::NRF_SUCCESS Successfully started the Write procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. + * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. + * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @mscs + * @mmsc{@ref BLE_GATTC_HVI_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); + +/**@brief Discovers information about a range of attributes on a GATT server. + * + * @events + * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} + * @endevents + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range The range of handles to request information about. + * + * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); + +/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value, and + * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. + * + * @events + * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] client_rx_mtu Client RX MTU size. + * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration + used for this connection. + * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent request to the server. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); + +/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * + * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * @note If the buffer contains different event, behavior is undefined. + * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with + * the next Handle-Value pair in each iteration. If the function returns other than + * @ref NRF_SUCCESS, it will not be changed. + * - To start iteration, initialize the structure to zero. + * - To continue, pass the value from previous iteration. + * + * \code + * ble_gattc_handle_value_t iter; + * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); + * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) + * { + * app_handle = iter.handle; + * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); + * } + * \endcode + * + * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. + * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. + */ +__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); + +/** @} */ + +#ifndef SUPPRESS_INLINE_IMPLEMENTATION + +__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) +{ + uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; + uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; + uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; + + if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) + { + p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; + p_iter->p_value = p_next + sizeof(uint16_t); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_NOT_FOUND; + } +} + +#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ + +#ifdef __cplusplus +} +#endif +#endif /* BLE_GATTC_H__ */ + +/** + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gatts.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gatts.h new file mode 100644 index 0000000..394d8d1 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_gatts.h @@ -0,0 +1,845 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" +#include "ble_gatt.h" +#include "ble_gap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ + SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ + SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ + SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ +}; + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ + BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ + BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ + BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ +}; + +/**@brief GATTS Configuration IDs. + * + * IDs that uniquely identify a GATTS configuration. + */ +enum BLE_GATTS_CFGS +{ + BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ + BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + +/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags + * @{ */ +#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ +#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ +/** @} */ + +/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values + * @{ + */ +#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size + * @{ + */ +#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ +#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ +/** @} */ + +/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults + * @{ + */ +#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. + */ +typedef struct +{ + uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. + The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ +} ble_gatts_conn_cfg_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ +} ble_gatts_attr_t; + +/**@brief GATT Attribute Value. */ +typedef struct +{ + uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ + uint16_t offset; /**< Attribute value offset. */ + uint8_t *p_value; /**< Pointer to where value is stored or will be stored. + If value is stored in user memory, only the attribute length is updated when p_value == NULL. + Set to NULL when reading to obtain the complete length of the attribute value */ +} ble_gatts_value_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ + ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ + uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. + Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, + as the data to be written needs to be stored and later provided by the application. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ + } params; /**< Reply Parameters. */ +} ble_gatts_rw_authorize_reply_params_t; + +/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ +typedef struct +{ + uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ +} ble_gatts_cfg_service_changed_t; + +/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: + * - The specified Attribute Table size is too small. + * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. + * - The specified Attribute Table size is not a multiple of 4. + */ +typedef struct +{ + uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ +} ble_gatts_cfg_attr_tab_size_t; + +/**@brief Config structure for GATTS configurations. */ +typedef union +{ + ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ + ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ +} ble_gatts_cfg_t; + + +/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the received data. */ + uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gatts_evt_write_t; + +/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; /**< Request Parameters. */ +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; /**< Hint (currently unused). */ +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ +typedef struct +{ + uint16_t client_rx_mtu; /**< Client RX MTU size. */ +} ble_gatts_evt_exchange_mtu_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ +typedef struct +{ + uint8_t count; /**< Number of notification transmissions completed. */ +} ble_gatts_evt_hvn_tx_complete_t; + +/**@brief GATTS event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ + } params; /**< Event Parameters. */ +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the Attribute Table. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the Attribute Table. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a service declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); + + +/**@brief Add an include declaration to the Attribute Table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). + * + * @note The included service must already be present in the Attribute Table prior to this call. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added an include declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, + * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a characteristic. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); + + +/**@brief Add a descriptor to the Attribute Table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a descriptor. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); + +/**@brief Set the value of a given attribute. + * + * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully set the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Get the value of a given attribute. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. + * The application may use this information to allocate a suitable buffer size. + * + * @note When retrieving system attribute values with this function, the connection handle + * may refer to an already disconnected connection. Refer to the documentation of + * @ref sd_ble_gatts_sys_attr_get for further information. + * + * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, + * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. + * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). + * + * @note Only one indication procedure can be ongoing per connection at a time. + * If the application tries to indicate an attribute value while another indication procedure is ongoing, + * the function call will return @ref NRF_ERROR_BUSY. + * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. + * + * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size + * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. + * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. + * + * @note The application can keep track of the available queue element count for notifications by following the procedure below: + * - Store initial queue element count in a variable. + * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. + * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. + * + * @events + * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} + * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_HVN_MSC} + * @mmsc{@ref BLE_GATTS_HVI_MSC} + * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data + * contains a non-NULL pointer the attribute value will be updated with the contents + * pointed by it before sending the notification or indication. If the attribute value + * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to + * contain the number of actual bytes written, else it will be set to 0. + * + * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. + * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute + * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @events + * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_SC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref + * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @retval ::NRF_ERROR_BUSY Procedure already in progress. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond + * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update + * is set to 0. + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, + * handle supplied does not match requested handle, + * or invalid data to be written provided by the application. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply information about persistent system attributes to the stack, + * previously obtained using @ref sd_ble_gatts_sys_attr_get. + * This call is only allowed for active connections, and is usually + * made immediately after a connection is established with an known bonded device, + * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the system attributes + * obtained using @ref sd_ble_gatts_sys_attr_get. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved system attribute data for this device. + * + * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully set the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored persistently by the application + * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, + * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. + * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for + * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. + * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes + * may be written to at any time by the peer during a connection's lifetime. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. + * + * @mscs + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described + * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); + + +/**@brief Retrieve the first valid user attribute handle. + * + * @param[out] p_handle Pointer to an integer where the handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully retrieved the handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); + +/**@brief Retrieve the attribute UUID and/or metadata. + * + * @param[in] handle Attribute handle + * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. + * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. + * + * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. + * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. + */ +SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); + +/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. + * + * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and + * - The Server RX MTU value. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. + * + * @mscs + * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] server_rx_mtu Server RX MTU size. + * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration + * used for this connection. + * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent response to the client. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATTS_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_hci.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_hci.h new file mode 100644 index 0000000..f0dde9a --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_hci.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ +#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +*/ +#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ +/* +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ + +/** @} */ + + +#ifdef __cplusplus +} +#endif +#endif // BLE_HCI_H__ + +/** @} */ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_l2cap.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_l2cap.h new file mode 100644 index 0000000..edaf664 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_l2cap.h @@ -0,0 +1,506 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology + * @{ + * @details + * + * L2CAP SDU + * - A data unit that the application can send/receive to/from a peer. + * + * L2CAP PDU + * - A data unit that is exchanged between local and remote L2CAP entities. + * It consists of L2CAP protocol control information and payload fields. + * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. + * + * L2CAP MTU + * - The maximum length of an L2CAP SDU. + * + * L2CAP MPS + * - The maximum length of an L2CAP PDU payload field. + * + * Credits + * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. + * @} */ + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ + SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ + SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ + SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ + SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ +}; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. + \n See @ref ble_l2cap_evt_ch_setup_request_t. */ + BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. + \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ + BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. + \n See @ref ble_l2cap_evt_ch_setup_t. */ + BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. + \n No additional event structure applies. */ + BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. + \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ + BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. + \n See @ref ble_l2cap_evt_ch_credit_t. */ + BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. + \n See @ref ble_l2cap_evt_ch_rx_t. */ + BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. + \n See @ref ble_l2cap_evt_ch_tx_t. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@brief Maximum number of L2CAP channels per connection. */ +#define BLE_L2CAP_CH_COUNT_MAX (64) + +/**@brief Minimum L2CAP MTU, in bytes. */ +#define BLE_L2CAP_MTU_MIN (23) + +/**@brief Minimum L2CAP MPS, in bytes. */ +#define BLE_L2CAP_MPS_MIN (23) + +/**@brief Invalid CID. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ +#define BLE_L2CAP_CREDITS_DEFAULT (1) + +/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources + * @{ */ +#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ +#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ + /** @} */ + + /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes + * @{ */ +#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ +#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ +#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ +#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ +#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ +#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ +#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ +#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ +/** @} */ + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @note These parameters are set per connection, so all L2CAP channels created on this connection + * will have the same parameters. + * + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. + * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. + * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. + * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. + */ +typedef struct +{ + uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall + be able to receive on L2CAP channels on connections with this + configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ + uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall + be able to transmit on L2CAP channels on connections with this + configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ + uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per + L2CAP channel. The minimum value is one. */ + uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission + per L2CAP channel. The minimum value is one. */ + uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection + with this configuration. The default value is zero, the maximum + value is @ref BLE_L2CAP_CH_COUNT_MAX. + @note if this parameter is set to zero, all other parameters in + @ref ble_l2cap_conn_cfg_t are ignored. */ +} ble_l2cap_conn_cfg_t; + +/**@brief L2CAP channel RX parameters. */ +typedef struct +{ + uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to + receive on this L2CAP channel. + - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ + uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be + able to receive on this L2CAP channel. + - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. + - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ + ble_data_t sdu_buf; /**< SDU data buffer for reception. + - If @ref ble_data_t::p_data is non-NULL, initial credits are + issued to the peer. + - If @ref ble_data_t::p_data is NULL, no initial credits are + issued to the peer. */ +} ble_l2cap_ch_rx_params_t; + +/**@brief L2CAP channel setup parameters. */ +typedef struct +{ + ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ + uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting + setup of an L2CAP channel, ignored otherwise. */ + uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. + Used when replying to a setup request of an L2CAP + channel, ignored otherwise. */ +} ble_l2cap_ch_setup_params_t; + +/**@brief L2CAP channel TX parameters. */ +typedef struct +{ + uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to + transmit on this L2CAP channel. */ + uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is + able to receive on this L2CAP channel. */ + uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able + to transmit on this L2CAP channel. This is effective tx_mps, + selected by the SoftDevice as + MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ + uint16_t credits; /**< Initial credits given by the peer. */ +} ble_l2cap_ch_tx_params_t; + +/**@brief L2CAP Channel Setup Request event. */ +typedef struct +{ + ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ + uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ +} ble_l2cap_evt_ch_setup_request_t; + +/**@brief L2CAP Channel Setup Refused event. */ +typedef struct +{ + uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ + uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ +} ble_l2cap_evt_ch_setup_refused_t; + +/**@brief L2CAP Channel Setup Completed event. */ +typedef struct +{ + ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ +} ble_l2cap_evt_ch_setup_t; + +/**@brief L2CAP Channel SDU Data Buffer Released event. */ +typedef struct +{ + ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice + returns SDU data buffers supplied by the application, which have + not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or + @ref BLE_L2CAP_EVT_CH_TX event. */ +} ble_l2cap_evt_ch_sdu_buf_released_t; + +/**@brief L2CAP Channel Credit received event. */ +typedef struct +{ + uint16_t credits; /**< Additional credits given by the peer. */ +} ble_l2cap_evt_ch_credit_t; + +/**@brief L2CAP Channel received SDU event. */ +typedef struct +{ + uint16_t sdu_len; /**< Total SDU length, in bytes. */ + ble_data_t sdu_buf; /**< SDU data buffer. + @note If there is not enough space in the buffer + (sdu_buf.len < sdu_len) then the rest of the SDU will be + silently discarded by the SoftDevice. */ +} ble_l2cap_evt_ch_rx_t; + +/**@brief L2CAP Channel transmitted SDU event. */ +typedef struct +{ + ble_data_t sdu_buf; /**< SDU data buffer. */ +} ble_l2cap_evt_ch_tx_t; + +/**@brief L2CAP event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which the event occured. */ + uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or + @ref BLE_L2CAP_CID_INVALID if not present. */ + union + { + ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ + ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ + ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ + ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ + ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ + ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ + ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ + } params; /**< Event Parameters. */ +} ble_l2cap_evt_t; + +/** @} */ + +/**@addtogroup BLE_L2CAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set up an L2CAP channel. + * + * @details This function is used to: + * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. + * - Reply to a setup request of an L2CAP channel (if called in response to a + * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection + * Response packet to a peer. + * + * @note A call to this function will require the application to keep the SDU data buffer alive + * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or + * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} + * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: + * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP + * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST + * event when replying to a setup request of an L2CAP channel. + * - As output: local_cid for this channel. + * @param[in] p_params L2CAP channel parameters. + * + * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, + * see @ref ble_l2cap_conn_cfg_t::ch_count. + */ +SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); + +/**@brief Release an L2CAP channel. + * + * @details This sends a Disconnection Request packet to a peer. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * + * @retval ::NRF_SUCCESS Successfully queued request for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for the L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + */ +SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); + +/**@brief Receive an SDU on an L2CAP channel. + * + * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. + * + * @note A call to this function will require the application to keep the memory pointed by + * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX + * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers + * for reception per L2CAP channel. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * @param[in] p_sdu_buf Pointer to the SDU data buffer. + * + * @retval ::NRF_SUCCESS Buffer accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for an L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a + * @ref BLE_L2CAP_EVT_CH_RX event and retry. + */ +SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); + +/**@brief Transmit an SDU on an L2CAP channel. + * + * @note A call to this function will require the application to keep the memory pointed by + * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX + * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for + * transmission per L2CAP channel. + * + * @note The application can keep track of the available credits for transmission by following + * the procedure below: + * - Store initial credits given by the peer in a variable. + * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) + * - Decrement the variable, which stores the currently available credits, by + * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns + * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) + * - Increment the variable, which stores the currently available credits, by additional + * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * @param[in] p_sdu_buf Pointer to the SDU data buffer. + * + * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for the L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than + * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in + * @ref BLE_L2CAP_EVT_CH_SETUP event. + * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a + * @ref BLE_L2CAP_EVT_CH_TX event and retry. + */ +SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); + +/**@brief Advanced SDU reception flow control. + * + * @details Adjust the way the SoftDevice issues credits to the peer. + * This may issue additional credits to the peer using an LE Flow Control Credit packet. + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set + * the value that will be used for newly created channels. + * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every + * time it starts using a new reception buffer. + * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will + * use if this function is not called. + * - If set to zero, the SoftDevice will stop issuing credits for new reception + * buffers the application provides or has provided. SDU reception that is + * currently ongoing will be allowed to complete. + * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be + * written by the SoftDevice with the number of credits that is or will be + * available to the peer. If the value written by the SoftDevice is 0 when + * credits parameter was set to 0, the peer will not be able to send more + * data until more credits are provided by calling this function again with + * credits > 0. This parameter is ignored when local_cid is set to + * @ref BLE_L2CAP_CID_INVALID. + * + * @note Application should take care when setting number of credits higher than default value. In + * this case the application must make sure that the SoftDevice always has reception buffers + * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have + * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic + * on the connection handle may be stalled until the SoftDevice again has an available + * reception buffer. This applies even if the application has used this call to set the + * credits back to default, or zero. + * + * @retval ::NRF_SUCCESS Flow control parameters accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for an L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + */ +SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_L2CAP_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_ranges.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_ranges.h new file mode 100644 index 0000000..0935bca --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_ranges.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC, event and option number subranges + @{ + + @brief Definition of SVC, event and option number subranges for each API module. + + @note + SVCs, event and option numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC, event and option values are defined in each module's ble_.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ +#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ + +#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ +#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ + +#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ +#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ + +#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ +#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ + +#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */ +#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ + + +#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ + +#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ +#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ + +#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ +#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ + +#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ +#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ + +#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ +#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ + +#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ +#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ + + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ + +#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ +#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ + +#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ + +#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ + +#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ + + +#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ + +#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ +#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ + +#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ +#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ + +#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ +#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ + +#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ +#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ + +#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ +#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ + +#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ +#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ + +#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ +#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ + + + + + +#ifdef __cplusplus +} +#endif +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_types.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_types.h new file mode 100644 index 0000000..88c9318 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/ble_types.h @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the BLE SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_TYPES_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/**@brief Data structure. */ +typedef struct +{ + uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ + uint16_t len; /**< Length of the data buffer, in bytes. */ +} ble_data_t; + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf52/nrf_mbr.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf52/nrf_mbr.h new file mode 100644 index 0000000..ea231b3 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf52/nrf_mbr.h @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @defgroup nrf_mbr_api Master Boot Record API + @{ + + @brief APIs for updating SoftDevice and BootLoader + +*/ + +#ifndef NRF_MBR_H__ +#define NRF_MBR_H__ + +#include "nrf_svc.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup NRF_MBR_DEFINES Defines + * @{ */ + +/**@brief MBR SVC Base number. */ +#define MBR_SVC_BASE (0x18) + +/**@brief Page size in words. */ +#define MBR_PAGE_SIZE_IN_WORDS (1024) + +/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. +This is the offset where the first byte of the SoftDevice hex file is written.*/ +#define MBR_SIZE (0x1000) + +/** @} */ + +/** @addtogroup NRF_MBR_ENUMS Enumerations + * @{ */ + +/**@brief nRF Master Boot Record API SVC numbers. */ +enum NRF_MBR_SVCS +{ + SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ +}; + +/**@brief Possible values for ::sd_mbr_command_t.command */ +enum NRF_MBR_COMMANDS +{ + SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ + SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ + SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ + SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ + SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ + SD_MBR_COMMAND_RESERVED, + SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ +}; + +/** @} */ + +/** @addtogroup NRF_MBR_TYPES Types + * @{ */ + +/**@brief This command copies part of a new SoftDevice + * + * The destination area is erased before copying. + * If dst is in the middle of a flash page, that whole flash page will be erased. + * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. + * + * The user of this function is responsible for setting the BPROT registers. + * + * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. + * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. + */ +typedef struct +{ + uint32_t *src; /**< Pointer to the source of data to be copied.*/ + uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ + uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ +} sd_mbr_command_copy_sd_t; + + +/**@brief This command works like memcmp, but takes the length in words. + * + * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. + * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. + */ +typedef struct +{ + uint32_t *ptr1; /**< Pointer to block of memory. */ + uint32_t *ptr2; /**< Pointer to block of memory. */ + uint32_t len; /**< Number of 32 bit words to compare.*/ +} sd_mbr_command_compare_t; + + +/**@brief This command copies a new BootLoader. + * + * With this command, destination of BootLoader is always the address written in + * NRF_UICR->BOOTADDR. + * + * Destination is erased by this function. + * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. + * + * This function will use PROTENSET to protect the flash that is not intended to be written. + * + * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. + * + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. + * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. + * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) + */ +typedef struct +{ + uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ + uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ +} sd_mbr_command_copy_bl_t; + +/**@brief Change the address the MBR starts after a reset + * + * Once this function has been called, this address is where the MBR will start to forward + * interrupts to after a reset. + * + * To restore default forwarding this function should be called with @ref address set to 0. The + * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the + * SoftDevice if the BOOTADDR is not set. + * + * On success, this function will not return. It will reset the device. + * + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. + * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +} sd_mbr_command_vector_table_base_set_t; + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR + * + * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not + * change where the MBR starts after reset. + * + * @retval ::NRF_SUCCESS + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +} sd_mbr_command_irq_forward_address_set_t; + +/**@brief Input structure containing data used when calling ::sd_mbr_command + * + * Depending on what command value that is set, the corresponding params value type must also be + * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command + * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. + */ +typedef struct +{ + uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ + union + { + sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ + sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ + sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ + sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ + sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ + } params; /**< Command parameters. */ +} sd_mbr_command_t; + +/** @} */ + +/** @addtogroup NRF_MBR_FUNCTIONS Functions + * @{ */ + +/**@brief Issue Master Boot Record commands + * + * Commands used when updating a SoftDevice and bootloader. + * + * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires + * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash + * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address + * corresponding to a page in the application flash space. This page will be cleared by the MBR and + * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers + * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) + * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. + * + * @param[in] param Pointer to a struct describing the command. + * + * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, + * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, + * ::sd_mbr_command_irq_forward_address_set_t + * + * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). + * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. +*/ +SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // NRF_MBR_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error.h new file mode 100644 index 0000000..6badee9 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy +#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. +#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error_sdm.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error_sdm.h new file mode 100644 index 0000000..530959b --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error_sdm.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + + /** + @addtogroup nrf_sdm_api + @{ + @defgroup nrf_sdm_error SoftDevice Manager Error Codes + @{ + + @brief Error definitions for the SDM API +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SDM_H__ +#define NRF_ERROR_SDM_H__ + +#include "nrf_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. +#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). +#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_SDM_H__ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error_soc.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error_soc.h new file mode 100644 index 0000000..1e784b8 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_error_soc.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup nrf_soc_api + @{ + @defgroup nrf_soc_error SoC Library Error Codes + @{ + + @brief Error definitions for the SoC library + +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SOC_H__ +#define NRF_ERROR_SOC_H__ + +#include "nrf_error.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* Mutex Errors */ +#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken + +/* NVIC errors */ +#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available +#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed +#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return + +/* Power errors */ +#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown +#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown +#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return + +/* Rand errors */ +#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values + +/* PPI errors */ +#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel +#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_SOC_H__ +/** + @} + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_nvic.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_nvic.h new file mode 100644 index 0000000..1f79cc3 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_nvic.h @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + * @defgroup nrf_nvic_api SoftDevice NVIC API + * @{ + * + * @note In order to use this module, the following code has to be added to a .c file: + * \code + * nrf_nvic_state_t nrf_nvic_state = {0}; + * \endcode + * + * @note Definitions and declarations starting with __ (double underscore) in this header file are + * not intended for direct use by the application. + * + * @brief APIs for the accessing NVIC when using a SoftDevice. + * + */ + +#ifndef NRF_NVIC_H__ +#define NRF_NVIC_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "nrf_error_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup NRF_NVIC_DEFINES Defines + * @{ */ + +/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions + * @{ */ + +#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ + +#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ + +/**@brief Interrupt priority levels used by the SoftDevice. */ +#define __NRF_NVIC_SD_IRQ_PRIOS ((uint8_t)( \ + (1U << 0) /**< Priority level high .*/ \ + | (1U << 1) /**< Priority level medium. */ \ + | (1U << 4) /**< Priority level low. */ \ + )) + +/**@brief Interrupt priority levels available to the application. */ +#define __NRF_NVIC_APP_IRQ_PRIOS ((uint8_t)~__NRF_NVIC_SD_IRQ_PRIOS) + +/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ +#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ + (1U << POWER_CLOCK_IRQn) \ + | (1U << RADIO_IRQn) \ + | (1U << RTC0_IRQn) \ + | (1U << TIMER0_IRQn) \ + | (1U << RNG_IRQn) \ + | (1U << ECB_IRQn) \ + | (1U << CCM_AAR_IRQn) \ + | (1U << TEMP_IRQn) \ + | (1U << __NRF_NVIC_NVMC_IRQn) \ + | (1U << (uint32_t)SWI5_IRQn) \ + )) + +/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ +#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) + +/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ +#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) + +/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ +#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) + +/**@} */ + +/**@} */ + +/**@addtogroup NRF_NVIC_VARIABLES Variables + * @{ */ + +/**@brief Type representing the state struct for the SoftDevice NVIC module. */ +typedef struct +{ + uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ + uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ +} nrf_nvic_state_t; + +/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an + * application source file. */ +extern nrf_nvic_state_t nrf_nvic_state; + +/**@} */ + +/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions + * @{ */ + +/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. + * + * @retval The value of PRIMASK prior to disabling the interrupts. + */ +__STATIC_INLINE int __sd_nvic_irq_disable(void); + +/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. + */ +__STATIC_INLINE void __sd_nvic_irq_enable(void); + +/**@brief Checks if IRQn is available to application + * @param[in] IRQn IRQ to check + * + * @retval 1 (true) if the IRQ to check is available to the application + */ +__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); + +/**@brief Checks if priority is available to application + * @param[in] priority priority to check + * + * @retval 1 (true) if the priority to check is available to the application + */ +__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); + +/**@} */ + +/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions + * @{ */ + +/**@brief Enable External Interrupt. + * @note Corresponds to NVIC_EnableIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was enabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); + +/**@brief Disable External Interrupt. + * @note Corresponds to NVIC_DisableIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was disabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); + +/**@brief Get Pending Interrupt. + * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. + * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. + * + * @retval ::NRF_SUCCESS The interrupt is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); + +/**@brief Set Pending Interrupt. + * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt is set pending. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); + +/**@brief Clear Pending Interrupt. + * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); + +/**@brief Set Interrupt Priority. + * @note Corresponds to NVIC_SetPriority in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * @pre Priority is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. + * @param[in] priority A valid IRQ priority for use by the application. + * + * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); + +/**@brief Get Interrupt Priority. + * @note Corresponds to NVIC_GetPriority in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. + * @param[out] p_priority Return value from NVIC_GetPriority. + * + * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); + +/**@brief System Reset. + * @note Corresponds to NVIC_SystemReset in CMSIS. + * + * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN + */ +__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); + +/**@brief Enter critical region. + * + * @post Application interrupts will be disabled. + * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each + * execution context + * @sa sd_nvic_critical_region_exit + * + * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. + * + * @retval ::NRF_SUCCESS + */ +__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); + +/**@brief Exit critical region. + * + * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. + * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. + * + * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. + * + * @retval ::NRF_SUCCESS + */ +__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); + +/**@} */ + +#ifndef SUPPRESS_INLINE_IMPLEMENTATION + +__STATIC_INLINE int __sd_nvic_irq_disable(void) +{ + int pm = __get_PRIMASK(); + __disable_irq(); + return pm; +} + +__STATIC_INLINE void __sd_nvic_irq_enable(void) +{ + __enable_irq(); +} + +__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) +{ + if (IRQn < 32) + { + return ((1UL<= (1 << __NVIC_PRIO_BITS)) + || (((1 << priority) & __NRF_NVIC_APP_IRQ_PRIOS) == 0) + ) + { + return 0; + } + return 1; +} + + +__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) +{ + if (!__sd_nvic_app_accessible_irq(IRQn)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } + if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; + } + + if (nrf_nvic_state.__cr_flag) + { + nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); + } + else + { + NVIC_EnableIRQ(IRQn); + } + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) +{ + if (!__sd_nvic_app_accessible_irq(IRQn)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } + + if (nrf_nvic_state.__cr_flag) + { + nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); + } + else + { + NVIC_DisableIRQ(IRQn); + } + + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + *p_pending_irq = NVIC_GetPendingIRQ(IRQn); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + NVIC_SetPendingIRQ(IRQn); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + NVIC_ClearPendingIRQ(IRQn); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if (!__sd_nvic_app_accessible_irq(IRQn)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } + + if (!__sd_nvic_is_app_accessible_priority(priority)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; + } + + NVIC_SetPriority(IRQn, (uint32_t)priority); + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) +{ + NVIC_SystemReset(); + return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; +} + +__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) +{ + int was_masked = __sd_nvic_irq_disable(); + if (!nrf_nvic_state.__cr_flag) + { + nrf_nvic_state.__cr_flag = 1; + nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); + NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; + nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); + NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; + *p_is_nested_critical_region = 0; + } + else + { + *p_is_nested_critical_region = 1; + } + if (!was_masked) + { + __sd_nvic_irq_enable(); + } + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) +{ + if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) + { + int was_masked = __sd_nvic_irq_disable(); + NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; + NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; + nrf_nvic_state.__cr_flag = 0; + if (!was_masked) + { + __sd_nvic_irq_enable(); + } + } + + return NRF_SUCCESS; +} + +#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ + +#ifdef __cplusplus +} +#endif + +#endif // NRF_NVIC_H__ + +/**@} */ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_sdm.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_sdm.h new file mode 100644 index 0000000..df42edc --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_sdm.h @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @defgroup nrf_sdm_api SoftDevice Manager API + @{ + + @brief APIs for SoftDevice management. + +*/ + +#ifndef NRF_SDM_H__ +#define NRF_SDM_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "nrf_error_sdm.h" +#include "nrf_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ +#ifdef NRFSOC_DOXYGEN +/// Declared in nrf_mbr.h +#define MBR_SIZE 0 +#warning test +#endif + +/** @brief The major version for the SoftDevice binary distributed with this header file. */ +#define SD_MAJOR_VERSION (6) + +/** @brief The minor version for the SoftDevice binary distributed with this header file. */ +#define SD_MINOR_VERSION (1) + +/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ +#define SD_BUGFIX_VERSION (0) + +/** @brief The SoftDevice variant of this firmware. */ +#define SD_VARIANT_ID 132 + +/** @brief The full version number for the SoftDevice binary this header file was distributed + * with, as a decimal number in the form Mmmmbbb, where: + * - M is major version (one or more digits) + * - mmm is minor version (three digits) + * - bbb is bugfix version (three digits). */ +#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) + +/** @brief SoftDevice Manager SVC Base number. */ +#define SDM_SVC_BASE 0x10 + +/** @brief SoftDevice unique string size in bytes. */ +#define SD_UNIQUE_STR_SIZE 20 + +/** @brief Invalid info field. Returned when an info field does not exist. */ +#define SDM_INFO_FIELD_INVALID (0) + +/** @brief Defines the SoftDevice Information Structure location (address) as an offset from +the start of the SoftDevice (without MBR)*/ +#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) + +/** @brief Defines the absolute SoftDevice Information Structure location (address) when the + * SoftDevice is installed just above the MBR (the usual case). */ +#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) + +/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the + * SoftDevice base address. The size value is of type uint8_t. */ +#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) + +/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. + * The size value is of type uint32_t. */ +#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) + +/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value + * is of type uint16_t. */ +#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) + +/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID + * is of type uint32_t. */ +#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) + +/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in + * the same format as @ref SD_VERSION, stored as an uint32_t. */ +#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) + +/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. + * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. + */ +#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) + +/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value + * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is + * installed just above the MBR (the usual case). */ +#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) + +/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base + * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above + * the MBR (the usual case). */ +#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) + +/** @brief Defines the amount of flash that is used by the SoftDevice. + * Add @ref MBR_SIZE to find the first available flash address when the SoftDevice is installed + * just above the MBR (the usual case). + */ +#define SD_FLASH_SIZE 0x25000 + +/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use + * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual + * case). */ +#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) + +/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use + * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the + * usual case). */ +#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ + ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) + +/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. + * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR + * (the usual case). */ +#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ + ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) + +/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. + * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR + * (the usual case). */ +#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ + ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) + +/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges + * @{ */ +#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ +#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ +/**@} */ + +/**@defgroup NRF_FAULT_IDS Fault ID types + * @{ */ +#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ +#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, + in case of SoftDevice RAM access violation. In case of SoftDevice peripheral + register violation the info parameter will contain the sub-region number of + PREGION[0], on whose address range the disallowed write access caused the + memory access fault. */ +/**@} */ + +/** @} */ + +/** @addtogroup NRF_SDM_ENUMS Enumerations + * @{ */ + +/**@brief nRF SoftDevice Manager API SVC numbers. */ +enum NRF_SD_SVCS +{ + SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ + SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ + SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ + SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ + SVC_SDM_LAST /**< Placeholder for last SDM SVC */ +}; + +/** @} */ + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ + +/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy + * @{ */ + +#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ +#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ +#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ +#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ +#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ +#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ +#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ +#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ +#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ +#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ +#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ +#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ + +/** @} */ + +/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources + * @{ */ + +#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ +#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ +#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ + +/** @} */ + +/** @} */ + +/** @addtogroup NRF_SDM_TYPES Types + * @{ */ + +/**@brief Type representing LFCLK oscillator source. */ +typedef struct +{ + uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ + uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second + units (nRF52: 1-32). + @note To avoid excessive clock drift, 0.5 degrees Celsius is the + maximum temperature change allowed in one calibration timer + interval. The interval should be selected to ensure this. + + @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ + uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration + intervals) the RC oscillator shall be calibrated if the temperature + hasn't changed. + 0: Always calibrate even if the temperature hasn't changed. + 1: Only calibrate if the temperature has changed (legacy - nRF51 only). + 2-33: Check the temperature and only calibrate if it has changed, + however calibration will take place every rc_temp_ctiv + intervals in any case. + + @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. + + @note For nRF52, the application must ensure calibration at least once + every 8 seconds to ensure +/-500 ppm clock stability. The + recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is + rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at + least once every 8 seconds and for temperature changes of 0.5 + degrees Celsius every 4 seconds. See the Product Specification + for the nRF52 device being used for more information.*/ + uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing + windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ +} nrf_clock_lf_cfg_t; + +/**@brief Fault Handler type. + * + * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. + * The protocol stack will be in an undefined state when this happens and the only way to recover will be to + * perform a reset, using e.g. CMSIS NVIC_SystemReset(). + * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). + * + * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. + * + * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. + * @param[in] pc The program counter of the instruction that triggered the fault. + * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. + * + * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when + * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. + */ +typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); + +/** @} */ + +/** @addtogroup NRF_SDM_FUNCTIONS Functions + * @{ */ + +/**@brief Enables the SoftDevice and by extension the protocol stack. + * + * @note Some care must be taken if a low frequency clock source is already running when calling this function: + * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new + * clock source will be started. + * + * @note This function has no effect when returning with an error. + * + * @post If return code is ::NRF_SUCCESS + * - SoC library and protocol stack APIs are made available. + * - A portion of RAM will be unavailable (see relevant SDS documentation). + * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). + * - Interrupts will not arrive from protected peripherals or interrupts. + * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. + * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). + * - Chosen low frequency clock source will be running. + * + * @param p_clock_lf_cfg Low frequency clock source and accuracy. + If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 + In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. + * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. + * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. + * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. + */ +SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); + + +/**@brief Disables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to disable the SoftDevice. + * + * @post SoC library and protocol stack APIs are made unavailable. + * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). + * @post All peripherals used by the SoftDevice will be reset to default values. + * @post All of RAM become available. + * @post All interrupts are forwarded to the application. + * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); + +/**@brief Check if the SoftDevice is enabled. + * + * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice + * + * This function is only intended to be called when a bootloader is enabled. + * + * @param[in] address The base address of the interrupt vector table for forwarded interrupts. + + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // NRF_SDM_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_soc.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_soc.h new file mode 100644 index 0000000..d599576 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_soc.h @@ -0,0 +1,1007 @@ +/* + * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + * @defgroup nrf_soc_api SoC Library API + * @{ + * + * @brief APIs for the SoC library. + * + */ + +#ifndef NRF_SOC_H__ +#define NRF_SOC_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "nrf_error_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup NRF_SOC_DEFINES Defines + * @{ */ + +/**@brief The number of the lowest SVC number reserved for the SoC library. */ +#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ +#define SOC_SVC_BASE_NOT_AVAILABLE (0x2C) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ + +/**@brief Guaranteed time for application to process radio inactive notification. */ +#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) + +/**@brief The minimum allowed timeslot extension time. */ +#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) + +/**@brief The maximum processing time to handle a timeslot extension. */ +#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) + +/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ +#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) + +#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ +#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ +#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ + +#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ +#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. + The default interrupt priority for this handler is set to 6 */ +#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ +#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. + The default interrupt priority for this handler is set to 6 */ +#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ +#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ + +#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ + +#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ + +#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ + +/**@brief Mask of PPI channels reserved by the SoftDevice when the SoftDevice is disabled. */ +#define NRF_SOC_SD_PPI_CHANNELS_SD_DISABLED_MSK ((uint32_t)(0)) + +/**@brief Mask of PPI channels reserved by the SoftDevice when the SoftDevice is enabled. */ +#define NRF_SOC_SD_PPI_CHANNELS_SD_ENABLED_MSK ((uint32_t)( \ + (1U << 17) \ + | (1U << 18) \ + | (1U << 19) \ + | (1U << 20) \ + | (1U << 21) \ + | (1U << 22) \ + | (1U << 23) \ + | (1U << 24) \ + | (1U << 25) \ + | (1U << 26) \ + | (1U << 27) \ + | (1U << 28) \ + | (1U << 29) \ + | (1U << 30) \ + | (1U << 31) \ + )) + +/**@brief Mask of PPI channels available to the application when the SoftDevice is disabled. */ +#define NRF_SOC_APP_PPI_CHANNELS_SD_DISABLED_MSK (~NRF_SOC_SD_PPI_CHANNELS_SD_DISABLED_MSK) + +/**@brief Mask of PPI channels available to the application when the SoftDevice is enabled. */ +#define NRF_SOC_APP_PPI_CHANNELS_SD_ENABLED_MSK (~NRF_SOC_SD_PPI_CHANNELS_SD_ENABLED_MSK) + +/**@brief Mask of PPI groups reserved by the SoftDevice when the SoftDevice is disabled. */ +#define NRF_SOC_SD_PPI_GROUPS_SD_DISABLED_MSK ((uint32_t)(0)) + +/**@brief Mask of PPI groups reserved by the SoftDevice when the SoftDevice is enabled. */ +#define NRF_SOC_SD_PPI_GROUPS_SD_ENABLED_MSK ((uint32_t)( \ + (1U << 4) \ + | (1U << 5) \ + )) + +/**@brief Mask of PPI groups available to the application when the SoftDevice is disabled. */ +#define NRF_SOC_APP_PPI_GROUPS_SD_DISABLED_MSK (~NRF_SOC_SD_PPI_GROUPS_SD_DISABLED_MSK) + +/**@brief Mask of PPI groups available to the application when the SoftDevice is enabled. */ +#define NRF_SOC_APP_PPI_GROUPS_SD_ENABLED_MSK (~NRF_SOC_SD_PPI_GROUPS_SD_ENABLED_MSK) + +/**@} */ + +/**@addtogroup NRF_SOC_ENUMS Enumerations + * @{ */ + +/**@brief The SVC numbers used by the SVC functions in the SoC library. */ +enum NRF_SOC_SVCS +{ + SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, + SD_PPI_CHANNEL_ENABLE_SET = SOC_SVC_BASE + 1, + SD_PPI_CHANNEL_ENABLE_CLR = SOC_SVC_BASE + 2, + SD_PPI_CHANNEL_ASSIGN = SOC_SVC_BASE + 3, + SD_PPI_GROUP_TASK_ENABLE = SOC_SVC_BASE + 4, + SD_PPI_GROUP_TASK_DISABLE = SOC_SVC_BASE + 5, + SD_PPI_GROUP_ASSIGN = SOC_SVC_BASE + 6, + SD_PPI_GROUP_GET = SOC_SVC_BASE + 7, + SD_FLASH_PAGE_ERASE = SOC_SVC_BASE + 8, + SD_FLASH_WRITE = SOC_SVC_BASE + 9, + SD_FLASH_PROTECT = SOC_SVC_BASE + 10, + SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, + SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, + SD_MUTEX_ACQUIRE = SOC_SVC_BASE_NOT_AVAILABLE + 1, + SD_MUTEX_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 2, + SD_RAND_APPLICATION_POOL_CAPACITY_GET = SOC_SVC_BASE_NOT_AVAILABLE + 3, + SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, + SD_RAND_APPLICATION_VECTOR_GET = SOC_SVC_BASE_NOT_AVAILABLE + 5, + SD_POWER_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 6, + SD_POWER_SYSTEM_OFF = SOC_SVC_BASE_NOT_AVAILABLE + 7, + SD_POWER_RESET_REASON_GET = SOC_SVC_BASE_NOT_AVAILABLE + 8, + SD_POWER_RESET_REASON_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 9, + SD_POWER_POF_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 10, + SD_POWER_POF_THRESHOLD_SET = SOC_SVC_BASE_NOT_AVAILABLE + 11, + SD_POWER_RAM_POWER_SET = SOC_SVC_BASE_NOT_AVAILABLE + 13, + SD_POWER_RAM_POWER_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 14, + SD_POWER_RAM_POWER_GET = SOC_SVC_BASE_NOT_AVAILABLE + 15, + SD_POWER_GPREGRET_SET = SOC_SVC_BASE_NOT_AVAILABLE + 16, + SD_POWER_GPREGRET_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 17, + SD_POWER_GPREGRET_GET = SOC_SVC_BASE_NOT_AVAILABLE + 18, + SD_POWER_DCDC_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 19, + SD_APP_EVT_WAIT = SOC_SVC_BASE_NOT_AVAILABLE + 21, + SD_CLOCK_HFCLK_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 22, + SD_CLOCK_HFCLK_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 23, + SD_CLOCK_HFCLK_IS_RUNNING = SOC_SVC_BASE_NOT_AVAILABLE + 24, + SD_RADIO_NOTIFICATION_CFG_SET = SOC_SVC_BASE_NOT_AVAILABLE + 25, + SD_ECB_BLOCK_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 26, + SD_ECB_BLOCKS_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 27, + SD_RADIO_SESSION_OPEN = SOC_SVC_BASE_NOT_AVAILABLE + 28, + SD_RADIO_SESSION_CLOSE = SOC_SVC_BASE_NOT_AVAILABLE + 29, + SD_RADIO_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 30, + SD_EVT_GET = SOC_SVC_BASE_NOT_AVAILABLE + 31, + SD_TEMP_GET = SOC_SVC_BASE_NOT_AVAILABLE + 32, + SVC_SOC_LAST = SOC_SVC_BASE_NOT_AVAILABLE + 37 +}; + +/**@brief Possible values of a ::nrf_mutex_t. */ +enum NRF_MUTEX_VALUES +{ + NRF_MUTEX_FREE, + NRF_MUTEX_TAKEN +}; + +/**@brief Power modes. */ +enum NRF_POWER_MODES +{ + NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ + NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ +}; + + +/**@brief Power failure thresholds */ +enum NRF_POWER_THRESHOLDS +{ + NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ +}; + + + +/**@brief DC/DC converter modes. */ +enum NRF_POWER_DCDC_MODES +{ + NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ + NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ +}; + +/**@brief Radio notification distances. */ +enum NRF_RADIO_NOTIFICATION_DISTANCES +{ + NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ + NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ +}; + + +/**@brief Radio notification types. */ +enum NRF_RADIO_NOTIFICATION_TYPES +{ + NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ +}; + +/**@brief The Radio signal callback types. */ +enum NRF_RADIO_CALLBACK_SIGNAL_TYPE +{ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ +}; + +/**@brief The actions requested by the signal callback. + * + * This code gives the SOC instructions about what action to take when the signal callback has + * returned. + */ +enum NRF_RADIO_SIGNAL_CALLBACK_ACTION +{ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current + timeslot. Maximum execution time for this action: + @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. + This action must be started at least + @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before + the end of the timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ +}; + +/**@brief Radio timeslot high frequency clock source configuration. */ +enum NRF_RADIO_HFCLK_CFG +{ + NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the + external crystal for the whole duration of the timeslot. This should be the + preferred option for events that use the radio or require high timing accuracy. + @note The SoftDevice will automatically turn on and off the external crystal, + at the beginning and end of the timeslot, respectively. The crystal may also + intentionally be left running after the timeslot, in cases where it is needed + by the SoftDevice shortly after the end of the timeslot. */ + NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. + The RC oscillator may be the clock source in part or for the whole duration of the timeslot. + The RC oscillator's accuracy must therefore be taken into consideration. + @note If the application will use the radio peripheral in timeslots with this configuration, + it must make sure that the crystal is running and stable before starting the radio. */ +}; + +/**@brief Radio timeslot priorities. */ +enum NRF_RADIO_PRIORITY +{ + NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ + NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ +}; + +/**@brief Radio timeslot request type. */ +enum NRF_RADIO_REQUEST_TYPE +{ + NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ + NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ +}; + +/**@brief SoC Events. */ +enum NRF_SOC_EVTS +{ + NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ + NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ + NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ + NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ + NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ + NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ + NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ + NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ + NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ + NRF_EVT_NUMBER_OF_EVTS +}; + +/**@} */ + + +/**@addtogroup NRF_SOC_STRUCTURES Structures + * @{ */ + +/**@brief Represents a mutex for use with the nrf_mutex functions. + * @note Accessing the value directly is not safe, use the mutex functions! + */ +typedef volatile uint8_t nrf_mutex_t; + +/**@brief Parameters for a request for a timeslot as early as possible. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ + uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ +} nrf_radio_request_earliest_t; + +/**@brief Parameters for a normal radio timeslot request. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ + uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ +} nrf_radio_request_normal_t; + +/**@brief Radio timeslot request parameters. */ +typedef struct +{ + uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ + union + { + nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ + nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ + } params; /**< Parameter union. */ +} nrf_radio_request_t; + +/**@brief Return parameters of the radio timeslot signal callback. */ +typedef struct +{ + uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ + union + { + struct + { + nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ + } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ + struct + { + uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ + } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ + } params; /**< Parameter union. */ +} nrf_radio_signal_callback_return_param_t; + +/**@brief The radio timeslot signal callback type. + * + * @note In case of invalid return parameters, the radio timeslot will automatically end + * immediately after returning from the signal callback and the + * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. + * @note The returned struct pointer must remain valid after the signal callback + * function returns. For instance, this means that it must not point to a stack variable. + * + * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. + * + * @return Pointer to structure containing action requested by the application. + */ +typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); + +/**@brief AES ECB parameter typedefs */ +typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ +typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ +typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ + +/**@brief AES ECB data structure */ +typedef struct +{ + soc_ecb_key_t key; /**< Encryption key. */ + soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ + soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ +} nrf_ecb_hal_data_t; + +/**@brief AES ECB block. Used to provide multiple blocks in a single call + to @ref sd_ecb_blocks_encrypt.*/ +typedef struct +{ + soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ + soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ + soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ +} nrf_ecb_hal_data_block_t; + +/**@} */ + +/**@addtogroup NRF_SOC_FUNCTIONS Functions + * @{ */ + +/**@brief Initialize a mutex. + * + * @param[in] p_mutex Pointer to the mutex to initialize. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); + +/**@brief Attempt to acquire a mutex. + * + * @param[in] p_mutex Pointer to the mutex to acquire. + * + * @retval ::NRF_SUCCESS The mutex was successfully acquired. + * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. + */ +SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); + +/**@brief Release a mutex. + * + * @param[in] p_mutex Pointer to the mutex to release. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); + +/**@brief Query the capacity of the application random pool. + * + * @param[out] p_pool_capacity The capacity of the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); + +/**@brief Get number of random bytes available to the application. + * + * @param[out] p_bytes_available The number of bytes currently available in the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); + +/**@brief Get random bytes from the application pool. + * + * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. + * @param[in] length Number of bytes to take from pool and place in p_buff. + * + * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. + * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. +*/ +SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); + +/**@brief Gets the reset reason register. + * + * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); + +/**@brief Clears the bits of the reset reason register. + * + * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); + +/**@brief Sets the power mode when in CPU sleep. + * + * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait + * + * @retval ::NRF_SUCCESS The power mode was set. + * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. + */ +SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); + +/**@brief Puts the chip in System OFF mode. + * + * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN + */ +SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); + +/**@brief Enables or disables the power-fail comparator. + * + * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); + + +/**@brief Sets the power failure comparator threshold value. + * + * + * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); + + +/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. + * + * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. + * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); + +/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. + * + * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. + * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); + +/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. + * + * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. + * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); + +/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). + * + * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. + * @param[in] gpregret_msk Bits to be set in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); + +/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). + * + * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. + * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); + +/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). + * + * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. + * @param[out] p_gpregret Contents of the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); + +/**@brief Enable or disable the DC/DC regulator. + * + * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. + */ +SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); + + +/**@brief Request the high frequency crystal oscillator. + * + * Will start the high frequency crystal oscillator, the startup time of the crystal varies + * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_release + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); + +/**@brief Releases the high frequency crystal oscillator. + * + * Will stop the high frequency crystal oscillator, this happens immediately. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_request + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); + +/**@brief Checks if the high frequency crystal oscillator is running. + * + * @see sd_clock_hfclk_request + * @see sd_clock_hfclk_release + * + * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); + +/**@brief Waits for an application event. + * + * An application event is either an application interrupt or a pended interrupt when the interrupt + * is disabled. + * + * When the application waits for an application event by calling this function, an interrupt that + * is enabled will be taken immediately on pending since this function will wait in thread mode, + * then the execution will return in the application's main thread. + * + * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M + * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets + * pended, this function will return to the application's main thread. + * + * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ + * in order to sleep using this function. This is only necessary for disabled interrupts, as + * the interrupt handler will clear the pending flag automatically for enabled interrupts. + * + * @note If an application interrupt has happened since the last time sd_app_evt_wait was + * called this function will return immediately and not go to sleep. This is to avoid race + * conditions that can occur when a flag is updated in the interrupt handler and processed + * in the main loop. + * + * @post An application interrupt has happened or a interrupt pending flag is set. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); + +/**@brief Get PPI channel enable register contents. + * + * @param[out] p_channel_enable The contents of the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); + +/**@brief Set PPI channel enable register. + * + * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); + +/**@brief Clear PPI channel enable register. + * + * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); + +/**@brief Assign endpoints to a PPI channel. + * + * @param[in] channel_num Number of the PPI channel to assign. + * @param[in] evt_endpoint Event endpoint of the PPI channel. + * @param[in] task_endpoint Task endpoint of the PPI channel. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); + +/**@brief Task to enable a channel group. + * + * @param[in] group_num Number of the channel group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); + +/**@brief Task to disable a channel group. + * + * @param[in] group_num Number of the PPI group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); + +/**@brief Assign PPI channels to a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[in] channel_msk Mask of the channels to assign to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); + +/**@brief Gets the PPI channels of a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[out] p_channel_msk Mask of the channels assigned to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); + +/**@brief Configures the Radio Notification signal. + * + * @note + * - The notification signal latency depends on the interrupt priority settings of SWI used + * for notification signal. + * - To ensure that the radio notification signal behaves in a consistent way, the radio + * notifications must be configured when there is no protocol stack or other SoftDevice + * activity in progress. It is recommended that the radio notification signal is + * configured directly after the SoftDevice has been enabled. + * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice + * will interrupt the application to do Radio Event preparation. + * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have + * to shorten the connection events to have time for the Radio Notification signals. + * + * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio + * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is + * recommended (but not required) to be used with + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. + * + * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. + * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or + * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. + * + * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. + * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all + * running activities and retry. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); + +/**@brief Encrypts a block according to the specified parameters. + * + * 128-bit AES encryption. + * + * @note: + * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while + * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application + * main or low interrupt level. + * + * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input + * parameters and one output parameter). + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); + +/**@brief Encrypts multiple data blocks provided as an array of data block structures. + * + * @details: Performs 128-bit AES encryption on multiple data blocks + * + * @note: + * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while + * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application + * main or low interrupt level. + * + * @param[in] block_count Count of blocks in the p_data_blocks array. + * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of + * @ref nrf_ecb_hal_data_block_t structures. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); + +/**@brief Gets any pending events generated by the SoC API. + * + * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. + * + * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. + * + * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. + * @retval ::NRF_ERROR_NOT_FOUND No pending events. + */ +SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); + +/**@brief Get the temperature measured on the chip + * + * This function will block until the temperature measurement is done. + * It takes around 50 us from call to return. + * + * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. + * + * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp + */ +SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); + +/**@brief Flash Write +* +* Commands to write a buffer to flash +* +* If the SoftDevice is enabled: +* This call initiates the flash access command, and its completion will be communicated to the +* application with exactly one of the following events: +* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. +* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. +* +* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the + * write has been completed +* +* @note +* - This call takes control over the radio and the CPU during flash erase and write to make sure that +* they will not interfere with the flash access. This means that all interrupts will be blocked +* for a predictable time (depending on the NVMC specification in the device's Product Specification +* and the command parameters). +* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS +* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. +* - This call will make the SoftDevice trigger a hardfault when the page is written, if it is +* protected. +* +* +* @param[in] p_dst Pointer to start of flash location to be written. +* @param[in] p_src Pointer to buffer with data to be written. +* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one +* flash page. See the device's Product Specification for details. +* +* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. +* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. +* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. +* @retval ::NRF_ERROR_FORBIDDEN Tried to write to an address outside the application flash area. +* @retval ::NRF_SUCCESS The command was accepted. +*/ +SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); + + +/**@brief Flash Erase page +* +* Commands to erase a flash page +* If the SoftDevice is enabled: +* This call initiates the flash access command, and its completion will be communicated to the +* application with exactly one of the following events: +* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. +* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. +* +* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the +* erase has been completed +* +* @note +* - This call takes control over the radio and the CPU during flash erase and write to make sure that +* they will not interfere with the flash access. This means that all interrupts will be blocked +* for a predictable time (depending on the NVMC specification in the device's Product Specification +* and the command parameters). +* - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is +* protected. +* +* +* @param[in] page_number Page number of the page to erase +* +* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. +* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. +* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. +* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a page outside the application flash area. +* @retval ::NRF_SUCCESS The command was accepted. +*/ +SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); + + +/**@brief Flash Protection set + * + * Commands to set the flash protection configuration registers. + This sets the CONFIGx registers of the BPROT peripheral. + * + * @note Not all parameters are valid for all products. Some bits in each parameter may not be + * valid for your product. Please refer your Product Specification for more details. + * + * @note To read the values read them directly. They are only write-protected. + * + * @note It is possible to use @ref sd_protected_register_write instead of this function. + * + * @param[in] block_cfg0 Value to be written to the configuration register. + * @param[in] block_cfg1 Value to be written to the configuration register. + * @param[in] block_cfg2 Value to be written to the configuration register. + * @param[in] block_cfg3 Value to be written to the configuration register. + * + * @retval ::NRF_ERROR_NOT_SUPPORTED Non-zero value supplied to one or more of the unsupported parameters. + * @retval ::NRF_SUCCESS Values successfully written to configuration registers. + */ +SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); + +/**@brief Opens a session for radio timeslot requests. + * + * @note Only one session can be open at a time. + * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot + * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed + * by the application. + * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 + * interrupt occurs. + * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO + * interrupt occurs. + * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This + * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). + * + * @param[in] p_radio_signal_callback The signal callback. + * + * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. + * @retval ::NRF_ERROR_BUSY If session cannot be opened. + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); + +/**@brief Closes a session for radio timeslot requests. + * + * @note Any current radio timeslot will be finished before the session is closed. + * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. + * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED + * event is received. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened. + * @retval ::NRF_ERROR_BUSY If session is currently being closed. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); + +/**@brief Requests a radio timeslot. + * + * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST + * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. + * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by + * p_request->distance_us and is given relative to the start of the previous timeslot. + * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. + * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. + * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. + * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this + * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. + * The application may then try to schedule the first radio timeslot again. + * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). + * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. + * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. + * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the + * specified radio timeslot start, but this does not affect the actual start time of the timeslot. + * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency + * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is + * guaranteed to be clocked from the external crystal. + * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral + * during the radio timeslot. + * + * @param[in] p_request Pointer to the request parameters. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. + * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); + +/**@brief Write register protected by the SoftDevice + * + * This function writes to a register that is write-protected by the SoftDevice. Please refer to your + * SoftDevice Specification for more details about which registers that are protected by SoftDevice. + * This function can write to the following protected peripheral: + * - BPROT + * + * @note Protected registers may be read directly. + * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in + * the register has not changed. See the Product Specification for more details about register + * properties. + * + * @param[in] p_register Pointer to register to be written. + * @param[in] value Value to be written to the register. + * + * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. + * @retval ::NRF_SUCCESS Value successfully written to register. + * + */ +SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); + +/**@} */ + +#ifdef __cplusplus +} +#endif +#endif // NRF_SOC_H__ + +/**@} */ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_svc.h b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_svc.h new file mode 100644 index 0000000..292c692 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_API/include/nrf_svc.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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 NRF_SVC__ +#define NRF_SVC__ + +#include "stdint.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef SVCALL_AS_NORMAL_FUNCTION +#define SVCALL(number, return_type, signature) return_type signature +#else + +#ifndef SVCALL +#if defined (__CC_ARM) +#define SVCALL(number, return_type, signature) return_type __svc(number) signature +#elif defined (__GNUC__) +#ifdef __cplusplus +#define GCC_CAST_CPP (uint16_t) +#else +#define GCC_CAST_CPP +#endif +#define SVCALL(number, return_type, signature) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ + __attribute__((naked)) \ + __attribute__((unused)) \ + static return_type signature \ + { \ + __asm( \ + "svc %0\n" \ + "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ + ); \ + } \ + _Pragma("GCC diagnostic pop") + +#elif defined (__ICCARM__) +#define PRAGMA(x) _Pragma(#x) +#define SVCALL(number, return_type, signature) \ +PRAGMA(swi_number = (number)) \ + __swi return_type signature; +#else +#define SVCALL(number, return_type, signature) return_type signature +#endif +#endif // SVCALL + +#endif // SVCALL_AS_NORMAL_FUNCTION + +#ifdef __cplusplus +} +#endif +#endif // NRF_SVC__ diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_license-agreement.txt b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_license-agreement.txt new file mode 100644 index 0000000..2d1bc12 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_license-agreement.txt @@ -0,0 +1,35 @@ +Copyright (c) 2007 - 2018, Nordic Semiconductor ASA +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, except as embedded into a Nordic + Semiconductor ASA integrated circuit in a product or a software update for + such product, 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 Nordic Semiconductor ASA nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +4. This software, with or without modification, must only be used with a + Nordic Semiconductor ASA integrated circuit. + +5. Any software provided in binary form under this license must not be reverse + engineered, decompiled, modified and/or disassembled. + +THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. diff --git a/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_softdevice.hex b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_softdevice.hex new file mode 100644 index 0000000..02054b8 --- /dev/null +++ b/lib/softdevice/s132_nrf52_6.1.0/s132_nrf52_6.1.0_softdevice.hex @@ -0,0 +1,9426 @@ +:020000040000FA +:1000000000040020E90800007D050000C908000088 +:1000100087050000910500009B050000000000001E +:100020000000000000000000000000000D090000BA +:10003000A505000000000000AF050000B9050000A4 +:10004000C3050000CD050000D7050000E105000054 +:10005000EB050000F5050000FF05000009060000A3 +:10006000130600001D0600002706000031060000F0 +:100070003B060000450600004F0600005906000040 +:10008000630600006D060000770600008106000090 +:100090008B060000950600009F060000A9060000E0 +:1000A000B3060000BD060000C7060000D106000030 +:1000B000DB060000E5060000EF060000F906000080 +:1000C000030700000D0700001707000021070000CC +:1000D0002B070000350700003F070000490700001C +:1000E000530700005D07000067070000710700006C +:1000F0007B070000850700008F07000099070000BC +:10010000A30700001FB500F003F88DE80F001FBD26 +:1001100000F0E0BB1FB56FF00100009040100390AD +:10012000029001904FF010208069000B420900F00E +:100130001F045DF822300120A04083434DF8223097 +:10014000684600F045F91FBDF0B54FF6FF734FF458 +:10015000B4751A466E1E11E0A94201D3344600E080 +:100160000C46091B30F8027B641E3B441A44F9D14B +:100170009CB204EB134394B204EB12420029EBD17E +:1001800098B200EB134002EB124140EA0140F0BD8F +:10019000DE4992B00446D1E90001CDE91001FF2209 +:1001A0004021684600F03CFB94E80F008DE80F000A +:1001B000684610A902E004C841F8042D8842FAD12B +:1001C00010216846FFF7C0FF1090AA208DF8440068 +:1001D000FFF7A0FF00F0F3F84FF01024A069102201 +:1001E0006946803000F002F9A069082210A900F0E9 +:1001F000FDF800F0D8F84FF080510A6949690068AD +:100200004A43824201D8102070470020704710B541 +:10021000D0E900214FF0805002EB8103026944696C +:100220006243934209D84FF01022536903EB8103D4 +:100230000169406941438B4201D9092010BD5069D1 +:10024000401C01D0002010BD0F2010BD70B501680A +:100250000446AF4D4FF01020072952D2DFE801F0DD +:10026000330419293C1E2500D4E902656468294637 +:10027000304600F0CDF82A462146304600F0B6F868 +:10028000AA002146304600F09FFA002800D0032043 +:1002900070BD00F051FB4FF4805007E0201DFFF7C8 +:1002A000AAFF0028F4D100F047FB60682860002016 +:1002B00070BD241D94E80700920000F085FA002824 +:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 +:1002D0009EFF0028F6D109E08069401C09D0201D4E +:1002E000FFF789FF0028EDD1606820B12046FFF7B5 +:1002F0004FFF042070BDFFF70DFF00F060F800F025 +:1003000052F8072070BD10B50C46182802D0012005 +:10031000086010BD2068FFF799FF206010BD4FF006 +:100320001024A069401C05D0A569A66980353079E4 +:10033000AA2808D06069401C2DD060690068401C64 +:1003400029D060692CE010212846FFF7FDFE3168B6 +:1003500081421CD1A16901F18002C03105E030B1B8 +:1003600008CA51F8040D984201D1012000E0002094 +:100370008A42F4D158B1286810B1042803D0FEE7AE +:10038000284600F057F862496868086008E000F005 +:1003900016F800F008F84FF480500168491C01D0AD +:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B +:1003B00001F4E06111430160BFF34F8FFEE74FF09E +:1003C00010208169491C02D0806900F0AEB87047E6 +:1003D000524A01681160121D416811604F4A8168DC +:1003E00010321160111DC068086070472DE9F0419E +:1003F00017460D460646002406E03046296800F000 +:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 +:1004100070B50C4605464FF4806608E0284600F0AB +:1004200084F8B44205D3A4F5806405F58055002C0A +:10043000F4D170BD4168044609B1012500E00025F2 +:100440004FF010267069A268920000F0BDF9C8B1A3 +:10045000204600F01AF89DB17669A56864684FF4EB +:10046000002084420AD2854208D229463046FFF74E +:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 +:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 +:100490001024616980680D0B01EB800000F6FF708D +:1004A000010B0020009001900290024603906846E4 +:1004B00001230BE0560902F01F0C50F8267003FAD6 +:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 +:1004D0000AE04A0901F01F0650F8225003FA06F616 +:1004E000354340F82250491C8029F2D3A169090BF9 +:1004F0004A0901F01F0150F822408B409C4340F80C +:100500002240FFF765FFBDE8FF8100005C090000A5 +:10051000000000200CED00E00400FA050006004099 +:10052000144801680029FCD07047134A0221116069 +:1005300010490B68002BFCD00F4B1B1D186008687E +:100540000028FCD00020106008680028FCD070470C +:10055000094B10B501221A60064A1468002CFCD021 +:10056000016010680028FCD0002018601068002886 +:10057000FCD010BD00E4014004E5014008208F4993 +:1005800009680958084710208C4909680958084724 +:1005900014208A49096809580847182087490968BA +:1005A0000958084730208549096809580847382004 +:1005B00082490968095808473C2080490968095858 +:1005C000084740207D4909680958084744207B496D +:1005D00009680958084748207849096809580847B0 +:1005E0004C20764909680958084750207349096822 +:1005F0000958084754207149096809580847582084 +:100600006E490968095808475C206C49096809580F +:100610000847602069490968095808476420674904 +:100620000968095808476820644909680958084753 +:100630006C20624909680958084770205F490968B9 +:100640000958084774205D49096809580847782007 +:100650005A490968095808477C20584909680958C7 +:10066000084780205549096809580847842053499C +:1006700009680958084788205049096809580847F7 +:100680008C204E4909680958084790204B49096851 +:10069000095808479420494909680958084798208B +:1006A00046490968095808479C204449096809587F +:1006B0000847A0204149096809580847A4203F4934 +:1006C000096809580847A8203C490968095808479B +:1006D000AC203A49096809580847B02037490968E9 +:1006E00009580847B4203549096809580847B8200F +:1006F0003249096809580847BC2030490968095837 +:100700000847C0202D49096809580847C4202B49CB +:10071000096809580847C82028490968095808473E +:10072000CC202649096809580847D0202349096880 +:1007300009580847D4202149096809580847D82092 +:100740001E49096809580847DC201C4909680958EE +:100750000847E0201949096809580847E420174963 +:10076000096809580847E8201449096809580847E2 +:10077000EC201249096809580847F0200F49096818 +:1007800009580847F4200D49096809580847F82016 +:100790000A49096809580847FC20084909680958A6 +:1007A00008475FF480700549096809580847000048 +:1007B00003480449024A034B704700000000002030 +:1007C000680900006809000040EA010310B59B07B2 +:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB +:1007E00020BA19BA884201D9012010BD4FF0FF305C +:1007F00010BD1AB1D30703D0521C07E0002010BD72 +:1008000010F8013B11F8014B1B1B07D110F8013BFD +:1008100011F8014B1B1B01D1921EF1D1184610BDDE +:1008200002F0FF0343EA032242EA024200F005B865 +:100830007047704770474FF000020429C0F01280E3 +:1008400010F0030C00F01B80CCF1040CBCF1020F83 +:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 +:1008600000F00DB85FEAC17C24BF00F8012B00F84E +:10087000012B48BF00F8012B70474FF0000200B574 +:10088000134694469646203922BFA0E80C50A0E8B3 +:100890000C50B1F12001BFF4F7AF090728BFA0E861 +:1008A0000C5048BF0CC05DF804EB890028BF40F82D +:1008B000042B08BF704748BF20F8022B11F0804F6F +:1008C00018BF00F8012B7047014B1B68DB68184705 +:1008D0000000002009480A497047FFF7FBFFFFF7B7 +:1008E00011FC00BD20BFFDE7064B1847064A10600B +:1008F000016881F30888406800470000680900002B +:10090000680900001F030000000000201EF0040F13 +:100910000CBFEFF30881EFF3098188690238007892 +:10092000182803D100E00000074A1047074A126860 +:100930002C3212681047000000B5054B1B68054AB1 +:100940009B58984700BD00000703000000000020EE +:100950005809000004000000001000000000000022 +:0809600000FFFFFF0090D0032F +:1010000078130020394D0200EDBF00009F4C020014 +:10101000EDBF0000EDBF0000EDBF000000000000CC +:10102000000000000000000000000000954D0200DC +:10103000EDBF000000000000EDBF0000EDBF0000AC +:10104000FD4D0200034E0200EDBF0000EDBF0000A9 +:10105000EDBF0000EDBF0000EDBF0000EDBF0000E0 +:10106000094E0200EDBF0000EDBF00000F4E020070 +:10107000EDBF0000154E02001B4E0200214E020083 +:10108000EDBF0000EDBF0000EDBF0000EDBF0000B0 +:10109000EDBF0000EDBF0000EDBF0000EDBF0000A0 +:1010A000EDBF0000274E0200EDBF0000EDBF0000C5 +:1010B000EDBF0000EDBF0000EDBF0000EDBF000080 +:1010C0002D4E0200EDBF0000EDBF0000EDBF00009F +:1010D000EDBF0000EDBF0000EDBF0000EDBF000060 +:1010E000EDBF0000EDBF0000EDBF0000EDBF000050 +:1010F000EDBF0000EDBF0000EDBF0000EDBF000040 +:10110000EDBF0000EDBF000000F002F823F003FE89 +:101110000AA090E8000C82448344AAF10107DA4552 +:1011200001D123F0F8FDAFF2090EBAE80F0013F079 +:10113000010F18BFFB1A43F001031847DC410200FE +:10114000FC4102000A444FF0000C10F8013B13F080 +:10115000070408BF10F8014B1D1108BF10F8015B10 +:10116000641E05D010F8016B641E01F8016BF9D103 +:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A +:101180006D1E58BF01F801CBFAD505E014F8016BCC +:1011900001F8016B6D1EF9D59142D6D3704700005E +:1011A0000023002400250026103A28BF78C1FBD870 +:1011B000520728BF30C148BF0B6070471FB500F011 +:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC +:1011D0000880EFF30980014A104700002FBF00008C +:1011E000F0B44046494652465B460FB402A0013077 +:1011F00001B50648004700BF01BC86460FBC8046CB +:10120000894692469B46F0BC7047000009110000D9 +:101210008269034981614FF001001044704700006A +:101220002512000001B41EB400B514F01FFD01B476 +:101230000198864601BC01B01EBD000023F068BDC8 +:1012400070B51A4C054609202070A01C00F0D1F89A +:101250005920A08029462046BDE8704008F0B0B86B +:1012600008F0B9B870B50C461149097829B1A0F158 +:1012700060015E2908D3012013E0602804D06928AA +:1012800002D043F201000CE020CC0A4E94E80E009C +:1012900006EB8000A0F58050241FD0F8806E284611 +:1012A000B047206070BD012070470000080000209A +:1012B00018000020784E02003249884201D20120F5 +:1012C00070470020704770B50446A0F500002E4E10 +:1012D000B0F1786F02D23444A4F500042948844266 +:1012E00001D2012500E0002500F043F848B125B9FE +:1012F000B44204D32548006808E0012070BD0020F6 +:1013000070BD002DF9D1B442F9D321488442F6D200 +:10131000F3E710B50446A0F50000B0F1786F03D2F2 +:1013200019480444A4F5000400F023F84FF080416C +:1013300030B11648006804E08C4204D2012003E07A +:1013400013488442F8D2002080F0010010BD10B58F +:1013500020B1FFF7DEFF08B1012010BD002010BD55 +:1013600010B520B1FFF7AFFF08B1012010BD00207C +:1013700010BD084808490068884201D10120704723 +:101380000020704700600200000000201C000020C8 +:101390000800002054000020BEBAFECA10B5044662 +:1013A0000021012000F03DF800210B2000F039F869 +:1013B0000421192000F035F804210D2000F031F847 +:1013C00004210E2000F02DF804210F2000F029F850 +:1013D0000421C84300F025F80621162000F021F86A +:1013E0000621152000F01DF82046FFF729FF0020F8 +:1013F00010BDAF2101807047FFF732BF1148704721 +:1014000010487047104A10B514680F4B0F4A083344 +:101410001A60FFF727FF0C48001D046010BD7047DD +:1014200070474907090E002804DB00F1E02080F82E +:101430000014704700F00F0000F1E02080F8141D48 +:101440007047000003F9004210050240010000014E +:10145000FE48002101604160018170472DE9F7439A +:10146000044692B091464068FFF771FF40B1606852 +:10147000FFF776FF20B9607800F00300022801D062 +:10148000012000E00020F14E30724846FFF71BFFBC +:1014900018B1102015B0BDE8F0834946012001F0D5 +:1014A0008EFE0028F6D101258DF842504FF4C05031 +:1014B000ADF84000002210A9284606F0F7FB0028EE +:1014C000E8D18DF842504FF428504FF00008ADF8A5 +:1014D000400047461C216846CDF81C8023F0B3FB32 +:1014E0009DF81C0008AA20F00F00401C20F0F0001E +:1014F00010308DF81C0020788DF81D0061789DF863 +:101500001E0061F3420040F001008DF81E009DF8BE +:1015100000000AA940F002008DF800002089ADF813 +:101520003000ADF83270608907AFADF834000B972A +:10153000606810AC0E900A94684606F0AAF900287C +:10154000A8D1BDF8200030808DF8425042F601202D +:10155000ADF840009DF81E0008AA20F00600801C8F +:1015600020F001008DF81E000220ADF83000ADF82B +:10157000340013A80E900AA9684606F08AF90028DC +:1015800088D1BDF820007080311D484600F033F945 +:10159000002887D18DF8425042F6A620ADF84000D1 +:1015A0001C216846CDF81C8023F04DFB9DF81C00E3 +:1015B000ADF8345020F00F00401C20F0F000103047 +:1015C0008DF81C009DF81D0008AA20F0FF008DF882 +:1015D0001D009DF81E000AA920F0060040F0010041 +:1015E000801C8DF81E009DF800008DF8445040F0DE +:1015F00002008DF80000CDE90A4711A80E90ADF861 +:101600003050684606F045F9002899D1BDF8200011 +:10161000F08000203EE73EB504460820ADF800000B +:101620002046FFF750FE08B110203EBD21460120A4 +:1016300001F0C5FD0028F8D12088ADF804006088CD +:10164000ADF80600A088ADF80800E088ADF80A0003 +:101650007E4801AB6A468088002106F023FDBDF874 +:1016600000100829E1D003203EBD1FB5044600202C +:1016700002900820ADF80800CDF80CD02046FFF706 +:1016800022FE10B1102004B010BD704802AA81885B +:101690004FF6FF7006F048FF0028F4D1BDF808109F +:1016A000082901D00320EEE7BDF800102180BDF825 +:1016B00002106180BDF80410A180BDF80610E18021 +:1016C000E1E701B582B00220ADF800005F4802AB4F +:1016D0006A464088002106F0E5FCBDF800100229AA +:1016E00000D003200EBD1CB5002100910221ADF8F1 +:1016F00000100190FFF70DFE08B110201CBD5348EB +:101700006A4641884FF6FF7006F00EFFBDF80010E4 +:101710000229F3D003201CBDFEB54C4C06461546ED +:10172000207A0F46C00705D00846FFF7CCFD18B158 +:101730001020FEBD0F20FEBDF82D01D90C20FEBDEE +:101740003046FFF7C0FD18BB208801A905F0A6FDB3 +:101750000028F4D130788DF80500208801A906F022 +:101760007FFC0028EBD100909DF800009DF805104B +:1017700040F002008DF80000090703D040F0080097 +:101780008DF800002088694606F007FC0028D6D1B5 +:10179000ADF8085020883B4602AA002106F082FCE2 +:1017A000BDF80810A942CAD00320FEBD7CB505468D +:1017B0000020009001900888ADF800000C462846F3 +:1017C0000195FFF7C4FD18B92046FFF7A2FD08B147 +:1017D00010207CBD15B1BDF8000050B11B486A4611 +:1017E00001884FF6FF7006F09FFEBDF800102180C3 +:1017F0007CBD0C207CBD30B593B0044600200D4666 +:101800000090142101A823F01EFA1C2108A823F03F +:101810001AFA9DF80000CDF808D020F00F00401C07 +:1018200020F0F00010308DF800009DF8010020F04D +:10183000FF008DF801009DF8200040F002008DF8B7 +:10184000200001208DF8460002E000001C0200206C +:1018500042F60420ADF8440011A801902088ADF8AC +:101860003C006088ADF83E00A088ADF84000E088FC +:10187000ADF842009DF8020006AA20F00600801C88 +:1018800020F001008DF802000820ADF80C00ADF842 +:1018900010000FA8059001A908A805F0FAFF00287C +:1018A00003D1BDF818002880002013B030BD00001F +:1018B000F0B5007B059F1E4614460D46012800D05A +:1018C000FFDF0C2030803A203880002C08D0287AA6 +:1018D000032806D0287B012800D0FFDF1720608175 +:1018E000F0BDA889FBE72DE9F04786B0144691F8D2 +:1018F0000C900E9A0D46B9F1010F0BD01021007B10 +:101900002E8A8846052807D0062833D0FFDF06B088 +:10191000BDE8F0870221F2E7E8890C2100EB4000E6 +:1019200001EB4000188033201080002CEFD0E889B4 +:10193000608100271AE00096688808F1020301AA76 +:10194000696900F084FF06EB0800801C07EB470183 +:1019500086B204EB4102BDF8040090810DF106014E +:1019600040460E3212F02FFC7F1CBFB26089B84295 +:10197000E1D8CCE734201080E889B9F1010F11D00B +:10198000122148430E301880002CC0D0E8896081B5 +:101990004846B9F1010F00D00220207300270DF155 +:1019A000040A1FE00621ECE70096688808F10203AC +:1019B00001AA696900F04BFF06EB0800801C86B2A3 +:1019C000B9F1010F12D007EBC70004EB4000BDF8DE +:1019D0000410C18110220AF10201103023F092F8A4 +:1019E0007F1CBFB26089B842DED890E707EB4701A1 +:1019F00004EB4102BDF80400D0810AF10201404627 +:101A0000103212F0E0FBEBE72DE9F0470E4688B00C +:101A100090F80CC096F80C80378AF5890C20109944 +:101A200002F10C044FF0000ABCF1030F08D0BCF126 +:101A3000040F3ED0BCF1070F7DD0FFDF08B067E791 +:101A400005EB850C00EB4C00188031200880002A43 +:101A5000F4D0A8F1060000F0FF09558125E0182117 +:101A600001A823F0F0F800977088434601AA716935 +:101A700000F0EDFEBDF804002080BDF80600E08017 +:101A8000BDF808002081A21C0DF10A01484612F0A1 +:101A90009AFBB9F1000F00D018B184F804A0A4F8A3 +:101AA00002A007EB080087B20A346D1EADB2D6D291 +:101AB000C4E705EB850C00EB4C0018803220088051 +:101AC000002ABBD0A8F1050000F0FF09558137E0DE +:101AD00000977088434601AA716900F0B8FE9DF82E +:101AE0000600BDF80410E1802179420860F300018E +:101AF00062F34101820862F38201C20862F3C3010A +:101B0000020962F30411420962F34511820962F38A +:101B100086112171C0096071BDF80700208122463D +:101B20000DF10901484612F04EFB18B184F802A0ED +:101B3000A4F800A000E007E007EB080087B20A3431 +:101B40006D1EADB2C4D279E7A8F1020084B205FBE4 +:101B500008F000F10E0CA3F800C035230B80002A1A +:101B6000A6D055819481009783B270880E32716936 +:101B700000F06DFE62E72DE9F84F1E460A9D0C4607 +:101B800081462AB1607A00F58070D080E0891081AA +:101B900099F80C000C274FF000084FF00E0A0D28A2 +:101BA00073D2DFE800F09E070E1C28303846556AD5 +:101BB00073737300214648460095FFF779FEBDE830 +:101BC000F88F207B9146082802D0032800D0FFDF41 +:101BD000378030200AE000BFA9F80A80EFE7207BB9 +:101BE0009146042800D0FFDF378031202880B9F1EA +:101BF000000FF1D1E3E7207B9146042800D0FFDFFE +:101C000037803220F2E7207B9146022800D0FFDFA8 +:101C100037803320EAE7207B1746022800D0FFDF19 +:101C20003420A6F800A02880002FC8D0A7F80A808A +:101C3000C5E7207B1746042800D0FFDF3520A6F833 +:101C400000A02880002FBAD04046A7F80A8012E0F2 +:101C5000207B1746052802D0062800D0FFDF102081 +:101C6000308036202880002FA9D0E0897881A7F81D +:101C70000E80B9F80E00B881A1E7207B91460728B5 +:101C800000D0FFDF37803720B0E72AE04FF01200A6 +:101C900018804FF038001700288090D0E0897881B4 +:101CA000A7F80E80A7F8108099F80C000A2805D034 +:101CB0000B2809D00C280DD0FFDF80E7207B0A28F5 +:101CC00000D0FFDF01200AE0207B0B2800D0FFDFDF +:101CD000042004E0207B0C2800D0FFDF05203873AF +:101CE0006DE7FFDF6BE770B50C46054601F0ABFB17 +:101CF00020B10078222804D2082070BD43F20200EF +:101D000070BD0521284610F0D1FC206008B10020EC +:101D100070BD032070BD30B44880087820F00F00FB +:101D2000C01C20F0F000903001F8080B1DCA81E8BB +:101D30001D0030BC07F0C5BB2DE9FF4784B000276C +:101D40008246029707989046894612300AF09EF91B +:101D5000401D20F00306079828B907A95046FFF751 +:101D6000C2FF002854D1B9F1000F05D00798017BBC +:101D700019BB052504681BE098F80000092803D06A +:101D80000D2812D0FFDF46E0079903254868B0B35D +:101D9000497B42887143914239D98AB2B3B2011D5D +:101DA00010F0F7FA0446078002E0079C0425083487 +:101DB0000CB1208810B1032D29D02CE00798012107 +:101DC00012300AF095F9ADF80C00024602AB294634 +:101DD000504608F0E4F9070001D1A01C02900798D2 +:101DE0003A461230C8F80400A8F802A003A94046F9 +:101DF000029B0AF08AF9D8B10A2817D200E006E05F +:101E0000DFE800F007091414100B0D14141213204E +:101E100014E6002012E6112010E608200EE643F238 +:101E200003000BE6072009E60D2007E6032005E680 +:101E3000BDF80C002346CDE900702A4650460799AC +:101E400000F015FD57B9032D08D10798B3B2417BB7 +:101E5000406871438AB2011D10F0AFFAB9F1000F6A +:101E6000D7D0079981F80C90D3E72DE9FE4F914622 +:101E70001A881C468A468046FAB102AB494608F0E9 +:101E80008EF9050019D04046A61C278810F052FD97 +:101E90003246072629463B46009610F060F9208816 +:101EA0002346CDE900504A465146404600F0DFFC4B +:101EB000002020800120BDE8FE8F0020FBE710B548 +:101EC00086B01C46AAB104238DF800301388ADF803 +:101ED00008305288ADF80A208A788DF80E200988DB +:101EE000ADF80C1000236A462146FFF725FF06B027 +:101EF00010BD1020FBE770B50D46052110F0D6FB94 +:101F0000040000D1FFDF294604F11200BDE8704053 +:101F10000AF0D7B82DE9F8430D468046002607F0B1 +:101F2000CDFA04462878102878D2DFE800F0773B15 +:101F30003453313112313131083131313131287975 +:101F4000001FC0B2022801D0102810D114BBFFDF3F +:101F500035E004B9FFDF0521404610F0A7FB007B08 +:101F6000032806D004280BD0072828D0FFDF072637 +:101F700055E02879801FC0B2022820D050B1F6E782 +:101F80002879401FC0B2022819D0102817D0EEE7D8 +:101F900004B9FFDF13E004B9FFDF287901280ED16F +:101FA000172137E00521404610F080FB070000D1E3 +:101FB000FFDF07F1120140460AF060F82CB12A4613 +:101FC00021464046FFF7A7FE29E01321404602F0D4 +:101FD000F1FC24E004B9FFDF0521404610F066FB68 +:101FE000060000D1FFDF694606F112000AF050F842 +:101FF000060000D0FFDFA988172901D2172200E0D0 +:102000000A46BDF80000824202D9014602E005E01E +:102010001729C5D3404600F03AFCD0E7FFDF304631 +:10202000BDE8F883401D20F0030219B102FB01F066 +:10203000001D00E000201044704713B5009848B11F +:102040000024684610F04FF9002C02D1F74A00999D +:1020500011601CBD01240020F4E72DE9F0470C4677 +:1020600015462421204622F0EEFD05B9FFDFA878B1 +:1020700060732888DFF8B4A3401D20F00301AF7817 +:102080008946DAF8000010F04CF9060000D1FFDFB5 +:102090004FF000082660A6F8008077B109FB07F131 +:1020A000091D0AD0DAF8000010F03BF9060000D153 +:1020B000FFDF6660C6F8008001E0C4F8048029886C +:1020C00004F11200BDE8F04709F0CABF2DE9F0475E +:1020D000804601F112000D46814609F0D7FF401DF0 +:1020E000D24F20F003026E7B14462968386810F046 +:1020F00043F93EB104FB06F2121D03D0696838684B +:1021000010F03AF9052010F079FA0446052010F095 +:102110007DFA201A012802D1386810F0F7F84946F4 +:102120004046BDE8F04709F0B0BF70B5054605214F +:1021300010F0BCFA040000D1FFDF04F112012846C0 +:10214000BDE8704009F09ABF2DE9F04F91B04FF013 +:10215000000BADF834B0ADF804B047880C46054626 +:1021600092460521384610F0A1FA060000D1FFDFA3 +:1021700024B1A780A4F806B0A4F808B029780922F1 +:102180000B20B2EB111F7DD12A7A04F11001382700 +:102190004FF00C084FF001090391102A73D2DFE8C9 +:1021A00002F072F2F1F07F08D2888D9F3DDBF3EEF2 +:1021B000B6B6307B022800D0FFDFA88908EBC0014B +:1021C000ADF804103021ADF83410002C25D060811A +:1021D000B5F80E9000271DE004EBC708317C88F8A5 +:1021E0000E10F189A8F80C10CDF80090688804232F +:1021F00004AA296900F02BFBBDF81010A8F81010F4 +:1022000009F10400BDF812107F1C1FFA80F9A8F82C +:102210001210BFB26089B842DED80DE1307B0228CF +:1022200000D0FFDFE98908EBC100ADF804003020E1 +:10223000ADF83400287B0A90001FC0B20F90002C2C +:10224000EBD06181B5F81090002725E0CDF8009023 +:102250006888696903AA0A9B00F0F9FA0A9804EBF6 +:10226000C70848441FFA80F908F10C0204A90F9826 +:1022700011F0A9FF18B188F80EB0A8F80CB0BDF89D +:102280000C1001E0D4E0CFE0A8F81010BDF80E105B +:102290007F1CA8F81210BFB26089B842D6D8CBE034 +:1022A0000DA8009001AB224629463046FFF71BFBE4 +:1022B000C2E0307B082805D0FFDF03E0307B082830 +:1022C00000D0FFDFE8891030ADF804003620ADF80B +:1022D0003400002C3FD0A9896181F189A18127E0D8 +:1022E000307B092800D0FFDFA88900F10C01ADF890 +:1022F00004103721ADF83410002C2CD06081E8890F +:102300000090AB89688804F10C02296956E0E889DD +:102310003921103080B2ADF80400ADF83410002C33 +:1023200074D0A9896181287A0E280AD002212173EC +:10233000E989E181288A0090EB8968886969039AB4 +:102340003CE00121F3E70DA8009001AB22462946AD +:102350003046FFF759FB6FE0307B0A2800D0FFDFE3 +:102360001220ADF80400ADF834704CB3A989618136 +:10237000A4F810B0A4F80EB084F80C905CE020E053 +:1023800002E031E039E042E0307B0B2800D0FFDF93 +:10239000288AADF834701230ADF8040084B10421FD +:1023A0002173A9896181E989E181298A2182688A69 +:1023B00000902B8A688804F11202696900F047FADC +:1023C0003AE0307B0C2800D0FFDF1220ADF804008B +:1023D000ADF834703CB305212173A4F80AB0A4F819 +:1023E0000EB0A4F810B027E00DA8009001AB224673 +:1023F00029463046FFF75CFA1EE00DA8009001ABBD +:10240000224629463046FFF7B6FB15E034E03B2173 +:10241000ADF80400ADF8341074B3A4F80690A4F835 +:1024200008B084F80AB007E0FFDF05E010000020E4 +:10243000297A012917D0FFDFBDF80400AAF80000AF +:102440006CB1BDF834002080BDF804006080BDF898 +:102450003400392803D03C2801D086F80CB011B0E4 +:102460000020BDE8F08F3C21ADF80400ADF8341039 +:1024700014B1697AA172DFE7AAF80000EFE72DE94D +:10248000F84356880F46804615460521304610F021 +:102490000DF9040000D1FFDF123400943B464146A1 +:1024A00030466A6809F065FFBAE570B50D4605214A +:1024B00010F0FCF8040000D1FFDF294604F11200FF +:1024C000BDE8704009F0EFBD70B50D46052110F074 +:1024D000EDF8040000D1FFDF294604F11200BDE849 +:1024E000704009F00DBE70B50546052110F0DEF80C +:1024F000040000D1FFDF04F1080321462846BDE8AF +:1025000070400422B1E470B50546052110F0CEF804 +:10251000040000D1FFDF214628462368BDE8704053 +:102520000522A2E470B50646052110F0BFF80400AC +:1025300000D1FFDF04F1120009F0A8FD401D20F0DA +:10254000030511E0011D008803224318214630468F +:10255000FFF78BFC00280BD0607BABB2684382B2E4 +:102560006068011D0FF05FFF606841880029E9D1B4 +:1025700070BD70B50E46054606F0A0FF040000D100 +:10258000FFDF0120207266726580207820F00F0046 +:10259000C01C20F0F00030302070BDE8704006F024 +:1025A00090BF2DE9F0438BB00D461446814606A935 +:1025B000FFF799FB002814D14FF6FF7601274FF45F +:1025C00020588CB103208DF800001020ADF81000C9 +:1025D00007A8059007AA204604A911F013FE78B1B8 +:1025E00007200BB0BDE8F0830820ADF808508DF847 +:1025F0000E708DF80000ADF80A60ADF80C800CE0AC +:102600000698A17801742188C1818DF80E70ADF80B +:102610000850ADF80C80ADF80A606A4602214846C1 +:10262000069BFFF789FBDCE708B501228DF8022045 +:1026300042F60202ADF800200A4603236946FFF77E +:102640003EFC08BD08B501228DF8022042F60302C7 +:10265000ADF800200A4604236946FFF730FC08BDA8 +:1026600000B587B079B102228DF800200A88ADF854 +:1026700008204988ADF80A1000236A460521FFF7B3 +:102680005BFB07B000BD1020FBE709B1072316E490 +:102690000720704770B588B00D461446064606A957 +:1026A000FFF721FB00280ED17CB10620ADF80850C1 +:1026B0008DF80000ADF80A40069B6A460821DC81CF +:1026C0003046FFF739FB08B070BD05208DF80000DB +:1026D000ADF80850F0E700B587B059B107238DF881 +:1026E0000030ADF80820039100236A460921FFF766 +:1026F00023FBC6E71020C4E770B588B00C46064639 +:10270000002506A9FFF7EFFA0028DCD10698012181 +:10271000123009F0EDFC9CB12178062921D2DFE8C6 +:1027200001F0200505160318801E80B2C01EE28845 +:1027300080B20AB1A3681BB1824203D90C20C2E760 +:102740001020C0E7042904D0A08850B901E0062079 +:10275000B9E7012913D0022905D004291CD0052985 +:102760002AD00720AFE709208DF800006088ADF877 +:102770000800E088ADF80A00A068039023E00A2072 +:102780008DF800006088ADF80800E088ADF80A0018 +:10279000A0680A25039016E00B208DF800006088E1 +:1027A000ADF80800A088ADF80A00E088ADF80C008C +:1027B000A0680B25049006E00C208DF800006078DE +:1027C0008DF808000C256A4629463046069BFFF71F +:1027D000B3FA78E700B587B00D228DF80020ADF888 +:1027E000081000236A461946FFF7A6FA49E700B524 +:1027F00087B071B102228DF800200A88ADF8082058 +:102800004988ADF80A1000236A460621FFF794FABA +:1028100037E7102035E770B586B0064601200D4633 +:10282000ADF808108DF80000014600236A463046D6 +:10283000FFF782FA040008D12946304605F04CFC27 +:102840000021304605F066FC204606B070BDF8B5A4 +:102850001C4615460E46069F10F05AF82346FF1DEB +:10286000BCB231462A4600940FF045FCF8BD30B4A6 +:102870001146DDE902423CB1032903D0002330BCFC +:1028800008F018BB0123FAE71A8030BC704770B516 +:102890000C460546FFF72FFB2146284605F02BFC8A +:1028A0002846BDE87040012105F034BC4FF0E0221D +:1028B0004FF400400021C2F88001BFF34F8FBFF3F7 +:1028C0006F8F1748016001601649900208607047D9 +:1028D000134900B500220A600A60124B4FF0607283 +:1028E0001A60002808BF00BD0F4A104BDFF840C037 +:1028F00001280CD002281CBFFFDF00BD03200860A8 +:102900001A604FF4000000BFCCF8000000BD0220A8 +:1029100008601A604FF04070F6E700B5FFDF00BDB9 +:1029200000F5004008F501409C02002014F500402D +:1029300004F5014070B50B2000F0BDF9082000F04F +:10294000BAF900210B2000F0D4F90021082000F092 +:10295000D0F9F44C01256560A5600020C4F8400161 +:10296000C4F84401C4F848010B2000F0B5F9082070 +:1029700000F0B2F90B2000F091F9256070BD10B5A0 +:102980000B2000F098F9082000F095F9E5480121A6 +:1029900041608160E4490A68002AFCD10021C0F846 +:1029A0004011C0F84411C0F848110B2000F094F910 +:1029B000BDE81040082000F08FB910B50B2000F0E2 +:1029C0008BF9BDE81040082000F086B900B530B1A1 +:1029D000012806D0022806D0FFDF002000BDD34822 +:1029E00000BDD34800BDD248001D00BD70B5D1491F +:1029F0004FF000400860D04DC00BC5F80803CF4829 +:102A000000240460C5F840410820C43500F053F9A3 +:102A1000C5F83C41CA48047070BD08B5C14A0021E0 +:102A200028B1012811D002281CD0FFDF08BD4FF4C7 +:102A30008030C2F80803C2F84803BB483C3001604C +:102A4000C2F84011BDE80840D0E74FF40030C2F8AA +:102A50000803C2F84803B44840300160C2F844118A +:102A6000B3480CE04FF48020C2F80803C2F84803D2 +:102A7000AD4844300160C2F84811AD48001D0068FF +:102A8000009008BD70B516460D460446022800D9D0 +:102A9000FFDF0022A348012304F110018B4000EB6B +:102AA0008401C1F8405526B1C1F84021C0F8043373 +:102AB00003E0C0F80833C1F84021C0F8443370BDCA +:102AC0002DE9F0411D46144630B1012833D00228CB +:102AD00038D0FFDFBDE8F081891E002221F07F4160 +:102AE0001046FFF7CFFF012D23D00020944D924FC9 +:102AF000012668703E61914900203C39086002203F +:102B0000091D08608D490420303908608B483D3428 +:102B1000046008206C6000F0DFF83004C7F804039C +:102B2000082000F0BBF88349F007091F08602E70E9 +:102B3000D0E70120DAE7012B02D00022012005E0D6 +:102B40000122FBE7012B04D000220220BDE8F04166 +:102B500098E70122F9E774480068704770B500F003 +:102B6000D8F8704C0546D4F840010026012809D158 +:102B7000D4F80803C00305D54FF48030C4F8080327 +:102B8000C4F84061D4F8440101280CD1D4F80803FA +:102B9000800308D54FF40030C4F80803C4F844613A +:102BA000012012F0FCFAD4F8480101280CD1D4F825 +:102BB0000803400308D54FF48020C4F80803C4F884 +:102BC0004861022012F0EBFA5E48056070BD70B5F6 +:102BD00000F09FF85A4D0446287850B1FFF706FFE1 +:102BE000687818B10020687012F0D9FA554804606E +:102BF00070BD0320F8E74FF0E0214FF40010C1F85A +:102C000000027047152000F067B84B4901200861A9 +:102C1000082000F061B848494FF47C10C1F808035F +:102C20000020024601EB8003C3F84025C3F8402191 +:102C3000401CC0B20628F5D37047410A43F609523A +:102C40005143C0F3080010FB02F000F5807001EB67 +:102C50005020704710B5430B48F2376463431B0C98 +:102C60005C020C60384C03FB0400384B4CF2F72438 +:102C700043435B0D13FB04F404EB402000F580702C +:102C80004012107008681844086010BD2C48406855 +:102C9000704729490120C1F800027047002809DB6C +:102CA00000F01F02012191404009800000F1E02066 +:102CB000C0F80011704700280DDB00F01F02012151 +:102CC00091404009800000F1E020C0F88011BFF37E +:102CD0004F8FBFF36F8F7047002809DB00F01F0292 +:102CE000012191404009800000F1E020C0F88012ED +:102CF00070474907090E002804DB00F1E02080F846 +:102D00000014704700F00F0000F1E02080F8141D5F +:102D100070470C48001F00680A4A0D49121D1160D7 +:102D20007047000000B0004004B500404081004002 +:102D300044B1004008F5014000800040408500405B +:102D40003400002014050240F7C2FFFF6F0C0100A1 +:102D5000010000010A4810B5046809490948083112 +:102D6000086012F0B0FA0648001D046010BD064964 +:102D7000002008604FF0E0210220C1F88002704777 +:102D80001005024001000001FC1F004010B50D209D +:102D900000F077F8C4B26FF0040000F072F8C0B22F +:102DA000844200D0FFDF3E490120086010BD70B5AD +:102DB0000D2000F048F83B4C0020C4F8000101252C +:102DC000C4F804530D2000F04FF825604FF0E021C7 +:102DD0006014C1F8000170BD10B50D2000F033F88B +:102DE0003048012141600021C0F80011BDE81040C9 +:102DF0000D2000F039B82C4810B504682A492B483A +:102E0000083108602749D1F80001012804D0FFDF0C +:102E10002548001D046010BD2148001D00680022E7 +:102E2000C0B2C1F8002112F09BFEF1E710B51D48B9 +:102E3000D0F800110029FBD0FFF7DDFFBDE81040FE +:102E40000D2000F011B800280DDB00F01F02012159 +:102E500091404009800000F1E020C0F88011BFF3EC +:102E60004F8FBFF36F8F7047002809DB00F01F0200 +:102E7000012191404009800000F1E020C0F880125B +:102E80007047002804DB00F1E02090F8000405E022 +:102E900000F00F0000F1E02090F8140D4009704799 +:102EA00004D5004000D000401005024001000001A0 +:102EB0004FF0E0214FF00070C1F8800101F5C071C2 +:102EC000BFF34F8FBFF36F8FC1F80001384B8022E3 +:102ED00083F8002441F8800C704700B502460420B6 +:102EE000344903E001EBC0031B792BB1401EC0B293 +:102EF000F8D2FFDFFF2000BD41F8302001EBC00118 +:102F000000224A718A7101220A7100BD294A0021FA +:102F100002EBC0000171704710B50446042800D3CD +:102F2000FFDF244800EBC4042079012800D0FFDF34 +:102F30006079A179401CC0B2814200D060714FF02D +:102F4000E0214FF00070C1F8000210BD2DE9F04102 +:102F500019480568184919480831086014480426BA +:102F600090F80004134F4009154C042818D0FFDFD7 +:102F700016E0217807EBC1000279012A08D14279D5 +:102F800083799A4204D04279827157F831008047A0 +:102F90002078401CC0B22070042801D3002020708B +:102FA000761EF6B2E5D20448001D0560BDE8F0814A +:102FB00019E000E0D40500201005024001000001E6 +:102FC000500000200548064A0168914201D10021C5 +:102FD000016004490120086070470000540000208F +:102FE000BEBAFECA40E5014070B50C46054609F080 +:102FF0005DFB21462846BDE870400AF042BC7047A0 +:103000002CFFFFFFDBE5B15100600200AF00FFFFC6 +:103010008400000068915B008308DF2FACFED63986 +:1030200029D64B9DC15EF1868A16B47C30B5F84D29 +:103030000446062CA9780ED2DFE804F0030E0E0E2B +:103040000509FFDF08E0022906D0FFDF04E00329BD +:1030500002D0FFDF00E0FFDFAC7030BD30B50446CA +:103060001038EB4D07280CD2DFE800F0040C060CFA +:103070000C0C0C00FFDF05E0287E112802D0FFDFDA +:1030800000E0FFDF2C7630BD2DE9F04111F024FA8D +:10309000044612F0F5FB201AC5B206200FF0AEFA76 +:1030A000044606200FF0B2FA211AD94C207E1228CD +:1030B00018D000200F1807200FF0A0FA06460720AE +:1030C0000FF0A4FA301A3918207E13280CD00020F3 +:1030D0000144A078042809D000200844281AC0B26E +:1030E000BDE8F0810120E5E70120F1E70120F4E7E8 +:1030F000C74810B590F825004108C54800F12600E2 +:1031000005D00DF09CFABDE8104005F0F9BF0DF0B8 +:1031100077FAF8E730B50446A1F120000D460A28F9 +:103120004AD2DFE800F005070C1C2328353A3F445B +:10313000FFDF42E0207820283FD1FFDF3DE0B448A8 +:103140008178052939D0007E122836D020782428AD +:1031500033D0252831D023282FD0FFDF2DE0207851 +:1031600022282AD0232828D8FFDF26E0207822280A +:1031700023D0FFDF21E0207822281ED024281CD075 +:1031800026281AD0272818D0292816D0FFDF14E0C7 +:103190002078252811D0FFDF0FE0207825280CD0DB +:1031A000FFDF0AE02078252807D0FFDF05E0207840 +:1031B000282802D0FFDF00E0FFDF257030BD1FB5FB +:1031C00004466A46002001F02FFEB4B1BDF802208B +:1031D0004FF6FF700621824201D1ADF80210BDF812 +:1031E0000420824201D1ADF80410BDF808108142DC +:1031F00003D14FF44860ADF8080068460DF090FF29 +:1032000005F07EFF04B010BD70B514460D460646AD +:10321000FEF759F858B90DB1A54201D90C2070BD7F +:10322000002408E056F82400FEF74DF808B11020FD +:1032300070BD641CE4B2AC42F4D3002070BD2DE933 +:10324000F04105461F4690460E4600240068FEF7F2 +:1032500087F830B9A98828680844401EFEF780F82E +:1032600008B110203CE728680028A88802D0B8429E +:1032700002D850E00028F5D0092031E72968085D20 +:10328000B8B1671CCA5D152A2ED03CDC152A3AD28B +:10329000DFE802F03912222228282A2A313139396E +:1032A00039393939393939392200085D30BB641C64 +:1032B000A4B2A242F9D833E00228DDD1A01C085CF8 +:1032C00088F80000072801D2400701D40A2007E748 +:1032D000307840F0010015E0C143C90707E001283C +:1032E00007D010E00620FBE60107A1F1805100297C +:1032F000F5D01846F4E63078810701D50B20EFE6CB +:1033000040F0020030702868005D384484B2A8881C +:10331000A04202D2B0E74FF4485382B2A242ADD8E5 +:103320000020DDE610B5027843F2022354080122A2 +:10333000022C12D003DC3CB1012C16D106E0032C88 +:1033400010D07F2C11D112E0002011E080790324ED +:10335000B4EB901F09D10A700BE08079B2EB901F9B +:1033600003D1F8E780798009F5D0184610BDFF2019 +:103370000870002010BD08B500208DF8000024481A +:1033800090F82E1049B190F82F0002280ED0032893 +:103390000ED0FFDF9DF8000008BD1D4869462530AE +:1033A00001F091FD0028F5D0FFDFF3E7032000E0F6 +:1033B00001208DF80000EDE738B50C46054669465A +:1033C00001F081FD00280DD19DF80010207861F3F7 +:1033D0004700207055F8010FC4F80100A888A4F830 +:1033E0000500002038BD38B51378A8B1022813D0E5 +:1033F000FF281AD007A46D46246800944C7905EB89 +:103400009414247864F347031370032809D00FE061 +:10341000E80100200302FF0123F0FE0313700228DD +:10342000F3D1D8B240F0010005E043F0FE00107087 +:10343000107820F0010010700868C2F80100888838 +:10344000A2F8050038BD02210FF030B938B50C469E +:103450000978222901D2082038BDADF800008DF886 +:10346000022068460DF02DF905F04AFE050003D153 +:1034700021212046FFF74EFE284638BD1CB500200E +:103480008DF80000CDF80100ADF80500FE4890F879 +:103490002E00022801D0012000E000208DF8070056 +:1034A00068460DF069FA002800D0FFDF1CBD00223D +:1034B0000A80437892B263F3451222F040020A80F8 +:1034C00000780C282BD2DFE800F02A06090E11162E +:1034D000191C1F220C2742F0110009E042F01D00C8 +:1034E00008800020704742F0110012E042F0100006 +:1034F00040F00200F4E742F01000F1E742F0010072 +:10350000EEE742F0010004E042F00200E8E742F09A +:10351000020040F00400E3E742F00400E0E7072087 +:1035200070472DE9FF478AB00025BDF82C60824620 +:103530001C4690468DF81C50700703D56068FDF757 +:10354000C2FE68B9D04F4FF0010997F82E0058B16C +:1035500097F82F00022807D16068FDF701FF18B126 +:1035600010200EB0BDE8F087300702D5A089802872 +:1035700016D8700705D4B8F1000F02D097F82400D0 +:1035800070B1E07DC0F300108DF81B00617D072055 +:1035900041B1012906D00229E3D00429E1D12CE070 +:1035A0000720DEE749468DF81790F00609D4A27D82 +:1035B000072032B1012A04D0022A05D0042AD0D132 +:1035C0001BE08DF8191002E002208DF819008DF82B +:1035D00015806068B0B107A9FFF7A4FE0028C0D12C +:1035E0009DF81C00FF280AD0606850F8011FCDF834 +:1035F0000F108088ADF8130008E00620B1E743F211 +:103600000220AEE7CDF80F50ADF81350E07B002854 +:10361000F3D1207C0028F0D1607C0028EDD1A07C83 +:103620000028EAD1E07CC006E7D18DF800A0BDF803 +:103630002C00ADF80200A0680190A068029004F18F +:103640000F0001F034FC8DF80C00FFF794FE8DF8AC +:103650000D009DF81C008DF80E008DF816508DF8A9 +:103660001850E07D08A900F00F008DF81A00684698 +:103670000DF09DFE05F044FD73E7F0B58FB0002519 +:103680008DF830508DF814508DF8345006468DF872 +:103690002850019502950395049519B10FC901AC05 +:1036A00084E80F00784CA078052801D004280CD1BC +:1036B00001986168884200D120B90398E168884286 +:1036C00003D110B108200FB0F0BD207DC00601D598 +:1036D0001F2700E0FF273B460DAA05A903A8FFF717 +:1036E000AEFD0028EFD1A08AC10702D0C00600D4E9 +:1036F000EE273B460AAA0CA901A8FFF7A0FD002867 +:10370000E1D19DF81400C00701D00A20DBE7A08AB0 +:10371000410708D4A17D31B19DF82810890702D056 +:1037200043F20120CFE79DF82810C90709D04007D0 +:1037300007D4208818B144F25061884201D907208B +:10374000C1E78DF818508DF81960BDF80800ADF884 +:103750001A000198079006A80DF043FE05F0D0FC72 +:103760000028B0D18DF820508DF82160BDF81000F0 +:10377000ADF822000398099008A80DF051FE05F05D +:10378000BFFC00289FD101AD241D95E80F0084E8FF +:103790000F00002097E770B586B00D46040005D0F5 +:1037A000FDF7DEFD20B1102006B070BD0820FBE75C +:1037B0002078C107A98802D0FF2902D303E01F297E +:1037C00001D20920F0E780073BD4FFF75DFC38B158 +:1037D0002178C1F3C100012804D0032802D005E0FC +:1037E0001320E1E7284890F82400C8B1C8074FF03B +:1037F00001064FF0000502D08DF80F6001E08DF852 +:103800000F50FFF7B8FD8DF8000020786946C0F32F +:10381000C1008DF8010060788DF80250C20801D017 +:103820000720C1E778B1C20701D08DF80260820796 +:1038300005D59DF8022042F002028DF802204007D3 +:1038400003D50620B0E78DF80260002022780B181F +:10385000C2F38002DA7001EB40026388D380401C1F +:10386000A388C0B253810228F0D3207A0028E8D17F +:10387000607A0028E5D1A07A0028E2D1E07A002819 +:10388000DFD1207BC00601E0E8010020D9D104F19E +:10389000080001F00CFB8DF80E0068460DF097F95A +:1038A00005F02EFC00288DD18DF810608DF8115098 +:1038B000E088ADF81200ADF8145004A80DF0DAF964 +:1038C00005F01EFC00288CD12078C00701D01520FF +:1038D00000E01320FFF7C2FB002065E72DE9FF475A +:1038E0000220FC4E8DF804000027708EADF8060013 +:1038F000B84643F202094CE001A80EF03EFE050076 +:1039000006D0708EA8B3A6F83280ADF806803EE0EF +:10391000039CA07F01072DD504F124000090A28E06 +:10392000BDF80800214604F1360301F054FC0500FF +:1039300005D04D452AD0112D3CD0FFDF3AE0A07FC5 +:1039400020F00801E07F420862F3C711A1778108E7 +:1039500061F30000E07794F8210000F01F0084F884 +:1039600020002078282826D129212046FFF7D2FBE5 +:1039700021E014E040070AD5BDF8080004F10E016B +:1039800001F0ABFA05000DD04D4510D100257F1C8C +:10399000FFB202200EF032FE401CB842ACD8052D1A +:1039A00011D008E0A07F20F00400A07703E0112DE3 +:1039B00000D0FFDF0025BDF806007086052D04D07D +:1039C000284604B0CEE5A6F832800020F9E770B5AD +:1039D0000646FFF738FD054605F070FD040000D1EE +:1039E000FFDF6680207820F00F00801C20F0F000C0 +:1039F000203020700320207295F83E006072BDE8F0 +:103A0000704005F05EBD2DE9F04786B0040000D19E +:103A1000FFDF2078AF4D20F00F00801C20F0F00079 +:103A20007030207060680178491F1B2933D2DFE8AD +:103A300001F0FC32323255FB320EFBFB42FA3232DD +:103A40003278FAFAF9F83232FAFAF7F6FA00C6885A +:103A50003046FFF7F8FC0546304607F029F9E0B19B +:103A60006068007A85F83E0021212846FFF752FB66 +:103A70003046FEF75AFB304603F050FE3146012037 +:103A800012F02EFBA87F20F01000A877FFF726FF8A +:103A9000002800D0FFDF06B064E5207820F0F000B9 +:103AA000203020700320207266806068007A607287 +:103AB00005F007FDD8E7C5882846FFF7C4FC00B924 +:103AC000FFDF60680079012800D0FFDF6068017ABD +:103AD00006B02846BDE8F04707F0C9BCC6883046A6 +:103AE000FFF7B1FC050000D1FFDF05F0EAFC6068DC +:103AF00031460089288160684089688160688089D2 +:103B0000A881012012F0ECFA0020A875A87F00F02F +:103B100003000228BFD1FFF7E1FE0028BBD0FFDF82 +:103B2000B9E700790228B6D000B1FFDF05F0C9FC83 +:103B30006668B6F806A0307A361D012806D0687E81 +:103B4000814605F049FA070003D101E0E878F7E77C +:103B5000FFDF0022022150460EF09FFD040000D13D +:103B6000FFDF22212046FFF7D5FA3079012800D067 +:103B70000220A17F804668F30101A177308B20816C +:103B8000708B6081B08BA08184F822908DF80880C2 +:103B9000B8680090F86801906A46032150460EF01C +:103BA0007CFD00B9FFDFB888ADF81000B8788DF85B +:103BB000120004AA052150460EF06FFD00B9FFDF88 +:103BC000B888ADF80C00F8788DF80E0003AA04212F +:103BD00050460EF062FD00B9FFDF062106F112002B +:103BE00001F099F940B37079800700D5FFDF717952 +:103BF000E07D61F34700E075D6F80600A0617089AA +:103C0000A083062106F10C0001F085F9F0B195F8CA +:103C100025004108607861F34700607006E040E0ED +:103C200038E070E058E04DE02EE042E0D5F82600A4 +:103C3000C4F80200688D12E0E07D20F0FE00801CD8 +:103C4000E075D6F81200A061F08AD9E7607820F01C +:103C5000FE00801C6070F068C4F80200308AE080CA +:103C6000B8F1010F04D0B8F1020F05D0FFDF12E761 +:103C70000320FFF7DBF90EE7287E122800D0FFDFD4 +:103C80001120FFF7EBF906E706B02046BDE8F04744 +:103C900001F02ABD05F015FC15F8300F40F00200C8 +:103CA00005E005F00EFC15F8300F40F00400287018 +:103CB000F1E6287E13280AD01528D8D15FF0160027 +:103CC000FFF7CCF906B0BDE8F04705F0FABB1420C9 +:103CD000F6E70000E8010020A978052909D00429A9 +:103CE000C5D105F0EEFB022006B0BDE8F047FFF7B6 +:103CF0009DB900790028BAD0E87801F0BFF805F046 +:103D0000E0FB0320F0E7287E122802D1687E01F054 +:103D1000B5F81120D4E72DE9F047054600784FF0BB +:103D200000080009DFF8C0A891460C464646012865 +:103D300075D0022874D007280AD00A2871D0FFDF76 +:103D4000A9F8006014B1A4F800806680002009E49E +:103D50006968012704F108000A784FF0020C4FF659 +:103D6000FF73172A7ED00EDC142A32D006DC052A17 +:103D700068D0092A10D0102A75D120E0152A73D0F6 +:103D8000162AF9D1F8E0183A082A6CD2DFE802F0D6 +:103D9000F36B6B0ACAF2DFF1C8884FF012081026E5 +:103DA00021468DE14FF01C080A26BCB38888A0800C +:103DB0006868807920726868C0796072C0E74FF0E7 +:103DC0001B08142654B30320207268688088A080E2 +:103DD000B6E70A793C2AB3D00D1D4FF010082C2607 +:103DE000E4B16988A180298B6182298B2182698B4A +:103DF000A182A98BE1826B790246A91D1846FFF7C3 +:103E0000F2FA2979002001290CD084F80FC0FF2193 +:103E10002176E06120626062A06291E70FE02EE10E +:103E200051E18CE1E77320760AF1040090E80E007E +:103E3000DAF81000C4E90930C4E9071280E7A9F8EC +:103E4000006083E72C264FF01D08002CF7D00546B4 +:103E5000A380887B2A880F1D60F300022A80887B5C +:103E6000400802E09DE007E1BEE060F341022A80E5 +:103E7000887B800860F382022A80887BB91CC00896 +:103E800060F3C3022A80B87A0011401C60F3041268 +:103E900002F07F0028807878AA1CFFF7A4FA387D0A +:103EA00005F1090207F11501FFF79DFA387B01F0D2 +:103EB00041F82874787B01F03DF86874F87EA874A6 +:103EC000787AE874387F2875B87B6875388AE88214 +:103ED000DAF81C00A861B87A524697F808A0C0F337 +:103EE0004111012904D0108C504503D2824609E0CB +:103EF000FFDF10E0022903D0288820F0600009E0ED +:103F0000504504D1288820F06000403002E0288825 +:103F100040F060002880A4F824A0524607F11D015B +:103F2000A86996E011264FF02008002C87D0A380C6 +:103F3000686804F10A02007920726868007B607288 +:103F400069688B1D48791946FFF74DFAF8E60A268D +:103F50004FF02108002CE9D08888A080686880791B +:103F600020726868C07960729AF8301021F00401FC +:103F70009FE065E04CE06FE00B264FF02208002C3C +:103F8000D4D0C888A0806868007920726868007AF8 +:103F900000F0D0FF60726868407A00F0CBFFA0723A +:103FA000CEE61C264FF02608002CBFD0A380686800 +:103FB000407960726868007AA0720AF1040090E8A3 +:103FC0000E00DAF81000C4E90530C4E9031268688D +:103FD00000793C2803D0432803D0FFDFB0E62772E6 +:103FE000AEE684F808C0ABE610264FF02408002C9B +:103FF0009CD08888A0806868807920816868807AF1 +:10400000608168680089A08168688089E08197E69E +:1040100010264FF02308002C88D08888A08068687C +:10402000C088208168680089608168684089A081B3 +:1040300068688089E0819AF8301021F0020138E048 +:1040400030264FF02508002C85D0A38069682822EF +:10405000496820F057FD73E614264FF01B08002C2A +:104060008ED0A380686800790128BAD02772DAE977 +:104070000710C4E9031063E64A46214660E0287A47 +:10408000012803D0022817D0FFDF59E610264FF091 +:104090001F08002C89D06888A080A8892081E88921 +:1040A0006081288AA081688AE0819AF8301021F026 +:1040B00001018AF8301043E64FF012081026688894 +:1040C00000F016FF3CE6287AC8B3012838D0022851 +:1040D00036D0032801D0FFDF32E609264FF0110861 +:1040E000002C85D06F883846FFF7ADF990F822A0F4 +:1040F000A780687A2072042138460EF0E9FA05217B +:1041000038460EF0E5FA002138460EF0E1FA0121BA +:1041100038460EF0DDFA032138460EF0D9FA0221B6 +:1041200038460EF0D5FA062138460EF0D1FA0721AE +:1041300038460EF0CDFA504600F0A0FE00E6FFE74C +:104140002846BDE8F04701F059BC70B5012803D0FE +:10415000052800D0FFDF70BD8DB22846FFF773F948 +:10416000040000D1FFDF20782128F4D005F0A6F963 +:1041700080B1017821F00F01891C21F0F00110318C +:1041800001700221017245800020A075BDE87040D9 +:1041900005F097B921462846BDE870401322FFF785 +:1041A00055B92DE9F04116460C00804600D1FFDFDD +:1041B000307820F00F00801C20F0F00010303070BC +:1041C0002078012804D0022818D0FFDFBDE8F08154 +:1041D0004046FFF738F9050000D1FFDF0320A8753E +:1041E00005F06FF994E80F00083686E80F00FE48E6 +:1041F00010F8301F41F001010170E7E74046FFF77A +:1042000022F9050000D1FFDFA1884FF6FF700027DB +:10421000814202D1E288824203D0814201D1E0880A +:1042200040B105F04EF994E80F00083686E80F001B +:10423000AF75CBE7A87D0128C8D17823002241467D +:1042400011F0A4FE0220A875C0E738B505460C465B +:104250000846FDF738F818BB203D062D4AD2DFE8A6 +:1042600005F0031B373C42300021052011F00EFF02 +:1042700008B1112038BDA01C0CF0A5FF04F040FFD0 +:10428000050038D1002208231146052011F07EFEDA +:10429000052830D0FFDF2EE06068FDF758F808B140 +:1042A000102038BD618820886A460DF03AFA04F083 +:1042B00027FF05001FD16068E8B1BDF8001001803C +:1042C00019E0A07800F0010120880DF05BFA0EE003 +:1042D000206801F03FFE05460DE0207800F0010067 +:1042E0000CF076F903E0618820880DF096F904F06F +:1042F00007FFF0E70725284638BD70B505460C4690 +:104300000846FDF706F808B1102070BD202D07D033 +:10431000212D0DD0222D0BD0252D09D0072070BDC9 +:104320002088A11C0CF02AFABDE8704004F0E8BE19 +:10433000062070BDAC482530704708B53421AA4826 +:1043400020F081FC0120FEF771FE1120FEF786FEB1 +:10435000A5496846263105F047F8A3489DF8002096 +:1043600010F8251F62F3470121F0010101700021BF +:1043700041724FF46171A0F8071002218172FEF7BB +:10438000B7FE00B1FFDFFDF763F801F078F908BD73 +:1043900010B50C464021204620F033FCA07F20F0D1 +:1043A0000300A077202020700020A07584F823004F +:1043B00010BD70472DE9FC410746FCF784FF10B1A2 +:1043C0001020BDE8FC81884E06F12501D6F82500B5 +:1043D0000090B6F82950ADF8045096F82B408DF8AF +:1043E00006403846FEF7E8FF0028EAD1FEF780FED7 +:1043F0000028E6D0009946F8251FB580B471E0E7A3 +:1044000010B50446FCF785FF08B1102010BD7648B2 +:104410007549224690F8250026314008FEF7E3FF53 +:10442000002010BD3EB504460D460846FCF771FF5E +:1044300008B110203EBD14B143F204003EBD6A48ED +:104440008078052803D0042801D008203EBD6946A5 +:1044500002A80AF05DFA2A4669469DF80800FEF7B0 +:10446000C2FF00203EBDFEB50D4604004FF0000720 +:1044700011D00822FEF7C8FE002811D1002608E05E +:1044800054F826006946FEF74DFF002808D1761C37 +:10449000F6B2AE42F4D30BF0E5FF10B143F20320C5 +:1044A000FEBD514E86F824700CB300271BE000BF00 +:1044B00054F8270002A9FEF735FF00B1FFDF9DF891 +:1044C00008008DF8000054F8270050F8011FCDF8BF +:1044D00001108088ADF8050068460BF0E8FF00B1D8 +:1044E000FFDF7F1CFFB2AF42E2D386F824500020EA +:1044F000FEBD2DE9F0478AB01546894604001ED05E +:104500000F4608222946FEF77FFE002811D100261B +:1045100013E000BF54F826006946103000F0D3FCC9 +:10452000002806D13FB157F82600FCF7CCFE10B1A9 +:1045300010200AB00BE4761CF6B2AE42EAD3002695 +:10454000A5F101081CE000BF06F1010A0AF0FF070F +:1045500012E000BF54F82600017C4A0854F82710E6 +:104560000B7CB2EB530F05D106221130113120F034 +:104570009DFA58B17F1CFFB2AF42EBD30AF0FF06A1 +:104580004645E1DB4E4624B1012003E043F205201D +:10459000CFE700200BF0B0FF10B90BF0B9FF10B15E +:1045A00043F20420C5E774B300270DF1170828E093 +:1045B00054F827006946103000F085FC00B1FFDF99 +:1045C00054F82700102250F8111FCDF801108088F0 +:1045D000ADF8050054F827100DF1070020F092FA0D +:1045E000AEB156F8271001E0E80100201022404645 +:1045F00020F088FA68460BF03FFF00B1FFDF7F1C18 +:10460000FFB2AF42D4D3FEF739FF002091E7404616 +:1046100001F094FCEEE730B585B00446FCF753FE9C +:1046200018B96068FCF79CFE10B1102005B030BDD1 +:1046300060884AF2B811884206D82078F84D28B12F +:10464000012806D0022804D00720EFE7FEF750FD2E +:1046500018E06078022804D0032802D043F2022038 +:10466000E4E785F82F00C1B200200090ADF8040007 +:1046700002292CD0032927D0FFDF68460BF0DFFF8B +:1046800004F03EFD0028D1D1606801F04AFC20789A +:1046900058B101208DF800000DF1010001F04EFC31 +:1046A00068460DF0D3F800B1FFDF207885F82E00C2 +:1046B000FEF7E4FE608860B1A88580B20BF014FFBD +:1046C00000B1FFDF0020B1E78DF80500D5E74020FD +:1046D000FAE74FF46170EFE710B50446FCF719FEF6 +:1046E00020B9606838B1FCF732FE08B1102010BD67 +:1046F000606801F023FCCA4830F82C1F6180C17843 +:10470000617080782070002010BD2DE9F8431446B8 +:1047100089460646FCF7FDFDA0B94846FCF720FE99 +:1047200080B92046FCF71CFE60B9BD4DA878012871 +:1047300000D13CB13178FF2906D049B143F20400E1 +:10474000BDE8F8831020FBE7012801D00420F7E73B +:10475000CCB3052811D004280FD069462046FEF7B7 +:10476000A6FE0028ECD1217D49B1012909D00229FA +:1047700009D0032909D00720E2E70820E0E7024634 +:1047800004E0012202E0022200E0032280462346E8 +:10479000174600200099FEF7C4FE0028D0D1A0895A +:1047A0002880A07BE875BDF80000A882AF75BDF831 +:1047B0000010090701D5A18931B1A1892980C0075D +:1047C00004D0032003E006E08021F7E70220FEF793 +:1047D0002DFC86F800804946BDE8F8430020FEF72E +:1047E0004CBF7CB58E4C05460E46A078022803D0FF +:1047F000032801D008207CBD15B143F204007CBD24 +:1048000007200DF003FF10B9A078032806D0FEF7AB +:104810003BFC28B1A078032804D009E012207CBD1D +:1048200013207CBD304600F00CFB0028F9D1E67067 +:10483000FEF7A1FD09F0A9FF01208DF800008DF819 +:1048400001008DF802502088ADF80400E07D8DF85D +:10485000060068460CF0A4FE04F052FC0028E0D1EB +:10486000A078032804D00420FEF7E0FB00207CBDE4 +:10487000E07800F0F6FA0520F6E71CB510B143F237 +:1048800004001CBD664CA078042803D0052801D084 +:1048900008201CBD00208DF8000001218DF80110BA +:1048A0008DF8020068460CF07BFE04F029FC00281D +:1048B000EFD1A078052805D05FF00200FEF7B6FB27 +:1048C00000201CBDE07800F0D9FA0320F6E72DE9BE +:1048D000FC4180460E4603250846FCF741FD0028B2 +:1048E00066D14046FEF7AFFD040004D020782228B0 +:1048F00004D2082065E543F2020062E5A07F00F0E3 +:1049000003073EB1012F0CD000203146FEF757FCC3 +:104910000500EFD1012F06D0022F1AD0FFDF284665 +:104920004FE50120F1E7A07D3146022801D011B109 +:1049300007E0112045E56846FCF797FE0028D9D12D +:104940006946404606F056FD0500E8D10120A075F5 +:10495000E5E7A07D032804D1314890F83000C00776 +:1049600001D02EB30EE026B1A07F40071ED4002157 +:1049700000E00121404606F05DFD0500CFD1A075A5 +:10498000002ECCD03146404600F0A7FA054611284B +:10499000C5D1A07F4107C2D4316844F80E1F7168A9 +:1049A000616040F0040020740025B8E71125B6E7E7 +:1049B000102006E570B50C460546FEF744FD0100E3 +:1049C00005D022462846BDE87040FEF73FBD43F2C1 +:1049D000020070BD10B5012807D1114B9B78012B47 +:1049E00000D011B143F2040010BD0BF0AFFDBDE8E3 +:1049F000104004F085BB012300F04ABA00231A4698 +:104A0000194600F045BA70B506460C460846FCF754 +:104A10005AFC18B92068FCF77CFC18B1102070BD56 +:104A2000E8010020F94D2A7E112A04D0132A00D370 +:104A30003EB10820F3E721463046FEF7ACFE60B1F8 +:104A4000EDE70920132A0DD0142A0BD0A188FF29E5 +:104A5000E5D31520FEF702FB0020D4E90012C5E9DA +:104A60000712DCE7A1881F29D9D31320F2E71CB570 +:104A7000E648007E132801D208201CBD00208DF8D6 +:104A8000000068460CF0F6F804F03AFB0028F4D178 +:104A90001120FEF7E3FA00201CBD2DE9F04FDFF8EE +:104AA0006CA3814691B09AF818009B4615460C46B7 +:104AB000132803D3FFF7DBFF00281FD12046FCF7A4 +:104AC00002FC78BB2846FCF7FEFB58BB20784FF071 +:104AD0000107C0074FF0000102D08DF83A7001E0E5 +:104AE0008DF83A1020788846C0F3C1008DF8000098 +:104AF00060788DF80910C10803D0072011B0BDE817 +:104B0000F08F80B1C10701D08DF80970810705D5FC +:104B10009DF8091041F002018DF80910400704D5F5 +:104B20000620EBE718E08DF8097000206E4606EBD2 +:104B3000400162884A81401CA288C0B20A820328D0 +:104B4000F5D32078C0F3C100012821D003281FD05D +:104B50004846FCF7B8FB08B11020CFE799F80000F1 +:104B6000400808D0012809D0022807D0032805D022 +:104B700043F20220C2E78DF8028001E08DF8027056 +:104B8000484650F8011FCDF803108088ADF80700A3 +:104B9000FEF7F1FB8DF801000020424606EB4001D4 +:104BA0002B88CB826B888B83AB884B84EB880B85FF +:104BB000401CCA85C0B28A860328EFD3E088ADF8CE +:104BC0003C0068460CF074F9002896D19AF8180059 +:104BD0005546112801D0082090E706200DF016FD5B +:104BE00038B12078C0F3C100012804D0032802D0D6 +:104BF00006E0122082E795F8240000283FF47DAFFC +:104C0000FEF742FA022801D2132077E7584600F057 +:104C100018F9002885D185F819B068460CF05AFAC1 +:104C200004F06EFA040098D1687E00F01AF91220A0 +:104C3000FEF714FA204661E770B5744D287E1228FD +:104C400001D00820EBE60CF048FA04F059FA040011 +:104C500005D1687E00F012F91120FEF7FFF9204619 +:104C6000DDE670B5064615460C460846FCF751FBD6 +:104C700018B92846FCF74DFB08B11020CFE62A46AC +:104C8000214630460CF02DFD04F03AFA0028F5D10B +:104C900021787F29F2D10520C1E67CB505460C4676 +:104CA0000846FCF710FB08B110207CBD2846FEF733 +:104CB000CAFB20B10078222804D208207CBD43F230 +:104CC00002007CBD514890F83000400701D511200A +:104CD0007CBD2178C80802D16078C20801D00720C5 +:104CE0007CBD890801D1800801D006207CBDADF8CB +:104CF000005020788DF8020060788DF803000220C3 +:104D0000ADF8040068460BF0D1FE04F0F9F97CBD63 +:104D100070B586B014460D460646FEF794FB28B1E2 +:104D20000078222805D2082006B078E643F2020077 +:104D3000FAE72846FCF714FB20B944B12046FCF7FB +:104D400006FB08B11020EFE700202060A0802F486C +:104D500090F83000800701D51120E5E703A930461F +:104D60000BF058FD18B100BF04F0CAF9DCE7ADF84C +:104D70000060BDF81400ADF80200BDF81600ADF8F3 +:104D80000400BDF81000BDF81210ADF80600ADF833 +:104D900008107DB1298809B1ADF80610698809B1FC +:104DA000ADF80210A98809B1ADF80810E98809B179 +:104DB000ADF80410DCB1BDF80610814201D9081A23 +:104DC0002080BDF80210BDF81400814201D9081AF4 +:104DD0006080BDF80800BDF80410BDF8162001443D +:104DE000BDF812001044814201D9081AA08068461B +:104DF0000BF0C1FDB8E71CB505490968CDE9001005 +:104E000068460CF057F804F07BF91CBDE80100205F +:104E1000EC4F02001CB500200090019068460CF099 +:104E200049F804F06DF9F0E7108008885080488850 +:104E30009080C88810818888D0800020508190811F +:104E4000704710B5044604F0C7F830B1407830B16F +:104E5000204604F0DAFB002010BD052010BD122012 +:104E600010BD10B504F0B8F8040000D1FFDF607881 +:104E700000B9FFDF6078401E607010BD10B504F00F +:104E8000ABF8040000D1FFDF6078401C607010BDFB +:104E90001CB5ADF800008DF802308DF803108DF8C8 +:104EA000042068460CF0E0FB04F02AF9ADE70CB5ED +:104EB00026A2D2E90012CDE900120079694601EB81 +:104EC000501000780CBD0278520804D0012A02D09C +:104ED00043F202207047FEF725BA1FB56A46FFF776 +:104EE000A3FF68460CF02CF904F00AF904B010BDD9 +:104EF00070B50C0006460DD0FEF7A5FA050000D1EE +:104F0000FFDFA68028892081288960816889A081A7 +:104F1000A889E08183E510B500231A4603E0845C8C +:104F20002343521CD2B28A42F9D30BB1002010BDE8 +:104F3000012010BD00B530B1012803D0022801D0F6 +:104F4000FFDF002000BDFF2000BD000007060504B4 +:104F50000302010010B50446FCF7B5F908B11020B2 +:104F600010BD2078C0F30210042807D86078072805 +:104F700004D3A178102901D8814201D2072010BDA5 +:104F8000E078410706D421794A0703D4000701D409 +:104F9000080701D5062010BD002010BD10B51378FC +:104FA0005C08837F64F3C713837713789C08C37FFF +:104FB00064F30003C3771078C309487863F34100B2 +:104FC000487013781C090B7864F347130B7013783F +:104FD000DB0863F3000048705078487110BD10B5CD +:104FE000C4780B7864F300030B70C478640864F32E +:104FF00041030B70C478A40864F382030B70C47877 +:10500000E40864F3C3030B700379117863F30001C0 +:10501000117003795B0863F34101117003799B08F8 +:1050200063F3820111700079C00860F3C30111704D +:1050300010BD70B514460D46064604F03FFA80B127 +:105040000178182221F00F01891C21F0F001A03114 +:1050500000F8081B21461FF09AFDBDE8704004F0DF +:1050600030BA29463046BDE870401322FEF7EEB94B +:105070002DE9F047064608A8894690E830041F4607 +:105080009046142128461FF0DEFD0021CAF80010CA +:10509000B8F1000F03D0B9F1000F03D114E0387854 +:1050A000C00711D02068FCF734F9C0BBB8F1000F7D +:1050B00007D12068123028602068143068602068AA +:1050C000A8602168CAF800103878800724D5606885 +:1050D000FCF73DF918BBB9F1000F21D0FFF72AF911 +:1050E0000168C6F868118188A6F86C11807986F885 +:1050F0006E0101F0F8FCF94FEF60626862B196F85A +:10510000680106F2691140081032FEF76CF91022AE +:10511000394660681FF0F6FC0020BDE8F08706E025 +:10512000606820B1E8606068C6F86401F4E71020A8 +:10513000F3E730B5054608780C4620F00F00401C18 +:1051400020F0F001103121700020607095F82300EC +:1051500030B104280FD0052811D0062814D0FFDF65 +:1051600020780121B1EB101F04D295F8200000F047 +:105170001F00607030BD21F0F000203002E021F00F +:10518000F00030302070EBE721F0F0004030F9E71C +:10519000F0B591B0022715460C4606463A46ADF8E2 +:1051A0000870092103AB04F0FAFF0490002810D026 +:1051B00004208DF804008DF80170E0340996059400 +:1051C0008DF818500AA968460EF060FF00B1FFDFA5 +:1051D000012011B0F0BD10B588B00C460A99ADF8A9 +:1051E0000000C3B11868CDF802005868CDF8060079 +:1051F000ADF80A20102203A81FF084FC68460CF0CA +:105200000FF803F07DFF002803D1A17F41F01001CA +:10521000A17708B010BD0020CDF80200E6E72DE927 +:10522000F84F0646808A0D4680B28246FEF70BF99B +:1052300004463078DFF8A48200274FF00209A8F175 +:1052400020080F2870D2DFE800F06FF23708387DB1 +:105250008CC8F1F0EFF35FF3F300A07F00F00300E0 +:10526000022809D05FF0000080F0010150460DF0E7 +:105270001DFA050003D101E00120F5E7FFDF98F8F2 +:105280005C10C90702D0D8F860000BE0032105F1DB +:105290001D0010F046FCD5F81D009149B0FBF1F25D +:1052A00001FB1200C5F81D0070686867B068A86748 +:1052B0002078252800D0FFDFCAE0A07F00F003009F +:1052C000022809D05FF0000080F0010150460DF087 +:1052D000EDF9060003D101E00120F5E7FFDF3078AA +:1052E000810702D52178252904D040F001003070D3 +:1052F000BDE8F88F85F80090307F287106F11D0019 +:105300002D36C5E90206F3E7A07F00F0030002286E +:1053100008D0002080F0010150460DF0C7F90400CC +:1053200004D102E00120F5E7A7E1FFDF2078C10604 +:1053300004D5072028703D346C60D9E740F00800A0 +:105340002070D5E7E07F000700D5FFDF307CB28812 +:1053500000F0010301B05046BDE8F04F092105F00F +:10536000A9BD04B9FFDF716821B1102204F1240046 +:105370001FF0C8FB28212046FDF7CCFEA07F00F0DF +:10538000030002280ED104F12400002300901A46E5 +:1053900021465046FFF71FFF112807D0292120463C +:1053A000FDF7B8FE307A84F82000A1E7A07F00075F +:1053B00000D5FFDF14F81E0F40F008002070E782D0 +:1053C000A761E761C109607861F34100014660F3BC +:1053D00082016170307AE0708AE7A07F00F00300FC +:1053E000022809D05FF0000080F0010150460DF066 +:1053F0005DF9040003D101E00120F5E7FFDF0221A0 +:1054000004F1850010F08DFB0420287004F5B470C1 +:105410006860B4F885002882304810387C346C61AC +:10542000C5E9028064E703E024E15BE02DE015E0DC +:10543000A07F00F00300022807D0002080F00101C7 +:1054400050460DF033F918B901E00120F6E7FFDF0F +:10545000324621465046BDE8F84FEAE504B9FFDF81 +:1054600020782128A1D93079012803D1E07F40F0AC +:105470000800E077324621465046FFF7DAFD204625 +:10548000BDE8F84F2321FDF745BE3279AA8005F12A +:1054900008030921504604F082FEE86010B105209F +:1054A000287025E7A07F00F00300022808D0002024 +:1054B00080F0010150460DF0F9F8040003D101E03D +:1054C0000120F5E7FFDF04F1620102231022081F2B +:1054D0000CF073FF07703179417009E74802002032 +:1054E00040420F00A07F00F00300022808D00020F7 +:1054F00080F0010150460DF0D9F8050003D101E01C +:105500000120F5E7FFDF95F8840000F00300012893 +:105510007AD1A07F00F00307E07F10F0010602D0EF +:10552000022F04D133E095F8A000C0072BD0D5F8A6 +:10553000601121B395F88320087C62F3870008741A +:10554000A17FCA09D5F8601162F341000874D5F84B +:10555000601166F300000874AEB1D5F86001102246 +:1055600004F1240188351FF0CDFA287E40F00100B7 +:105570002876287820F0010005F8880900E016B1A7 +:10558000022F04D02DE095F88800C00727D0D5F869 +:105590005C1121B395F88320087C62F387000874BE +:1055A000A17FCA09D5F85C1162F341000874D5F8EF +:1055B0005C1166F3000008748EB1D5F85C0110220E +:1055C00004F1240188351FF09DFA287840F001008D +:1055D00005F8180B287820F0010005F8A009022F23 +:1055E00044D0002000EB400005EBC00090F888009C +:1055F000800709D595F87C00D5F86421400805F1AD +:105600007D011032FDF7EFFE8DF8009095F88400D3 +:105610006A4600F003008DF8010095F888108DF8B7 +:10562000021095F8A0008DF803002146504601F0C5 +:1056300043FA2078252805D0212807D0FFDF2078DD +:10564000222803D922212046FDF764FDA07F00F027 +:10565000030002280CD0002080F0010150460DF01C +:1056600037F800283FF44FAEFFDF41E60120B9E7ED +:105670000120F1E7706847703AE6FFDF38E670B561 +:10568000FE4C002584F85C5025660EF0CCFC04F13D +:105690001001204603F0CEFE84F8305070BD70B586 +:1056A0000D46FDF7D0FE040000D1FFDF4FF4B871C6 +:1056B00028461FF0C8FA04F124002861A07F00F0FA +:1056C0000300022808D0012105F1E0000EF0ACFC37 +:1056D000002800D0FFDF70BD0221F5E70A46014631 +:1056E00002F1E0000EF0C0BC70B50546406886B01F +:1056F00001780A2906D00D2933D00E292FD0FFDFDB +:1057000006B070BD86883046FDF79DFE040000D1CE +:10571000FFDF20782128F3D028281BD168680221D8 +:105720000E3001F0BEF9A8B168680821801D01F0B3 +:10573000B8F978B104F1240130460BF033FF03F0DF +:10574000DFFC00B1FFDF06B02046BDE87040292134 +:10575000FDF7E0BC06B0BDE8704003F0B2BE012129 +:1057600001726868C6883046FDF76DFE040000D1FE +:10577000FFDFA07F00F00301022902D120F010001A +:10578000A077207821280AD06868017A09B10079C9 +:1057900080B1A07F00F00300022862D0FFDFA07F6D +:1057A00000F003000228ABD1FEF798F80028A7D03C +:1057B000FFDFA5E703F085FEA17F08062BD5E07F7C +:1057C000C00705D094F8200000F01F00102820D05A +:1057D0005FF0050084F82300207829281DD02428B4 +:1057E000DDD13146042010F07BFC22212046FDF75C +:1057F00091FCA07F00F00300022830D05FF0000091 +:1058000080F0010130460CF063FF0028C7D0FFDFB5 +:10581000C5E70620DEE70420DCE701F003000228EC +:1058200008D0002080F0010130460CF03FFF050059 +:1058300003D101E00120F5E7FFDF25212046FDF738 +:1058400069FC03208DF80000694605F1E0000EF0C8 +:1058500002FC0228A3D00028A1D0FFDF9FE701208F +:10586000CEE703F02EFE9AE72DE9F04387B0994684 +:10587000164688460746FDF7E6FD04004BD0207823 +:10588000222848D3232846D0E07F000743D4A07FB6 +:1058900000F00300022809D05FF0000080F0010151 +:1058A00038460CF003FF050002D00CE00120F5E7BC +:1058B000A07F00F00300022805D001210022384615 +:1058C0000CF0EBFE05466946284601F01CF90098ED +:1058D00000B9FFDF45B10098E03505612078222846 +:1058E00006D0242804D007E000990020086103E0D6 +:1058F00025212046FDF70EFC0098012141704762EA +:10590000868001A9C0E902890EF0C0FB022802D0FE +:10591000002800D0FFDF07B0BDE8F08370B586B087 +:105920000546FDF790FD017822291ED9807F00F001 +:105930000300022808D0002080F0010128460CF066 +:10594000B5FE04002FD101E00120F5E7FFDF2AE0DA +:10595000B4F85E0004F1620630440178427829B15F +:1059600021462846FFF714FCB0B9C9E6ADF804207B +:105970000921284602AB04F012FC03900028F4D061 +:1059800005208DF80000694604F1E0000EF063FB8D +:10599000022801D000B1FFDF02231022314604F1BA +:1059A0005E000CF040FDB4F860000028D0D1A7E6FE +:1059B00010B586B00446FDF746FD017822291BD9B3 +:1059C000807F00F00300022808D0002080F0010151 +:1059D00020460CF06BFE040003D101E00120F5E746 +:1059E000FFDF06208DF80000694604F1E0000EF0AC +:1059F00032FB002800D0FFDF06B010BD2DE9F05FBC +:105A000005460C4600270078904601093E4604F101 +:105A1000080BBA4602297DD0072902D00A2909D1EC +:105A200046E0686801780A2905D00D2930D00E2992 +:105A30002ED0FFDFBBE114271C26002C6BD0808802 +:105A4000A080FDF700FD5FEA000900D1FFDF99F8B3 +:105A500017005A46400809F11801FDF7C4FC6868B0 +:105A6000C0892082696851F8060FC4F8120048689E +:105A7000C4F81600A07E20F0060001E028020020F5 +:105A800040F00100A07699F81E0040F020014DE0A2 +:105A90001A270A26002CD1D0C088A080FDF7D3FC9D +:105AA000050000D1FFDF59462846FFF742FB7EE1A3 +:105AB0000CB1A88BA080287A0B287DD006DC0128A9 +:105AC0007BD0022808D0032804D135E00D2875D0FA +:105AD0000E2874D0FFDF6AE11E270926002CADD006 +:105AE000A088FDF7B0FC5FEA000900D1FFDF287B4A +:105AF00000F003000128207A1BD020F00100207262 +:105B0000297B890861F341002072297BC90861F370 +:105B1000820001E041E1F2E02072297B090961F392 +:105B2000C300207299F81E0040F0400189F81E1051 +:105B30003DE140F00100E2E713270D26002CAAD03A +:105B4000A088FDF780FC8146807F00F003000228DA +:105B500008D0002080F00101A0880CF0A7FD05000E +:105B600003D101E00120F5E7FFDF99F81E0000F006 +:105B70000302022A50D0686F817801F003010129E5 +:105B8000217A4BD021F00101217283789B0863F3C5 +:105B9000410121728378DB0863F3820121728378EB +:105BA0001B0963F3C3012172037863F306112172A9 +:105BB000437863F3C71103E061E0A9E090E0A1E05E +:105BC000217284F809A0C178A172022A29D0027931 +:105BD000E17A62F30001E1720279520862F3410155 +:105BE000E1720279920862F38201E1720279D208CD +:105BF00062F3C301E1724279217B62F300012173F8 +:105C00004279520862F3410121734279920862F3AA +:105C100082012173407928E0A86FADE741F00101CE +:105C2000B2E74279E17A62F30001E1724279520807 +:105C300062F34101E1724279920862F38201E172FA +:105C40004279D20862F3C301E1720279217B62F3E7 +:105C5000000121730279520862F341012173027934 +:105C6000920862F3820121730079C00860F3C301D6 +:105C7000217399F80000232831D9262140E0182704 +:105C80001026E4B3A088FDF7DEFB8346807F00F09A +:105C90000300022809D0002080F00101A0880CF048 +:105CA00005FD5FEA000903D101E00120F4E7FFDF11 +:105CB000E868A06099F8000040F0040189F800103D +:105CC00099F80100800708D5012020739BF8000097 +:105CD00023286CD92721584651E084F80CA066E0AF +:105CE00015270F265CB1A088FDF7ADFB8146062283 +:105CF0005946E86808F093FA0120A073A0E041E05B +:105D000048463CE016270926E4B3287B20724EE083 +:105D1000287B19270E26ACB3C4F808A0A4F80CA061 +:105D2000012807D0022805D0032805D0042803D075 +:105D3000FFDF0DE0207207E0697B042801F00F010E +:105D400041F0800121721ED0607A20F00300607261 +:105D5000A088FDF778FB05460078212827D0232866 +:105D600000D0FFDFA87F00F00300022813D000203E +:105D700080F00101A0880CF0ABFC22212846FDF741 +:105D8000C9F914E004E0607A20F00300401CDEE76B +:105D9000A8F8006010E00120EAE70CB16888A08054 +:105DA000287A68B301280AD002284FD0FFDFA8F86C +:105DB00000600CB1278066800020BDE8F09F1527A9 +:105DC0000F26002CE4D0A088FDF73DFB807F00F07B +:105DD0000300022808D0002080F00101A0880CF008 +:105DE00065FC050003D101E00120F5E7FFDFD5F8F0 +:105DF0001D000622594608F012FA84F80EA0D6E7D4 +:105E000017270926002CC3D0A088FDF71CFB81466C +:105E1000807F00F00300022808D0002080F00101FC +:105E2000A0880CF043FC050003D101E00120F5E758 +:105E3000FFDF6878800701D5022000E00120207292 +:105E400099F800002328B2D9272159E719270E26EF +:105E5000002C9DD0A088FDF7F6FA5FEA000900D17A +:105E6000FFDFC4F808A0A4F80CA084F808A0A07A6A +:105E700040F00300A07299F81E10C90961F3820076 +:105E8000A07299F81F2099F81E1012EAD11F05D0B0 +:105E900099F8201001F01F0110292BD020F00800E4 +:105EA000A07299F81F10607A61F3C3006072697A7A +:105EB00001F003010129A2D140F00400607299F8B9 +:105EC0001E0000F003000228E87A16D0217B60F360 +:105ED00000012173AA7A607B62F300006073EA7AA2 +:105EE000520862F341012173A97A490861F3410024 +:105EF00060735CE740F00800D2E7617B60F300016B +:105F00006173AA7A207B62F300002073EA7A520858 +:105F100062F341016173A97A490861F3410020737A +:105F200045E710B5FE4C30B10146102204F12000C7 +:105F30001EF0E8FD012084F8300010BD10B50446C5 +:105F400000F0D1FDF64920461022BDE81040203176 +:105F50001EF0D8BD70B5F24D06004FF0000413D00E +:105F6000FBF7B1F908B110240CE00621304608F027 +:105F70003DF9411C05D028665FF0010085F85C0002 +:105F800000E00724204670BD0020F7E7007810F0FD +:105F90000F0204D0012A05D0022A0CD110E000091A +:105FA00009D10AE00009012807D0022805D00328FA +:105FB00003D0042801D007207047087000207047E4 +:105FC0000620704705282AD2DFE800F003070F17E4 +:105FD0001F00087820F0FF001EE0087820F00F0076 +:105FE000401C20F0F000103016E0087820F00F0080 +:105FF000401C20F0F00020300EE0087820F00F0068 +:10600000401C20F0F000303006E0087820F00F004F +:10601000401C20F0F000403008700020704707203E +:1060200070472DE9F041804688B00D4600270846AC +:10603000FBF796F9A8B94046FDF705FA040003D02E +:106040002078222815D104E043F2020008B0BDE810 +:10605000F08145B9A07F410603D500F00300022876 +:1060600001D01020F2E7A07FC10601D4010702D5BC +:106070000DB10820EAE7E17F090701D50D20E5E72A +:1060800000F00300022805D125B12846FEF762FF83 +:106090000700DBD1A07F00F00300022808D0002019 +:1060A00080F0010140460CF001FB060002D00FE039 +:1060B0000120F5E7A07F00F0030002280ED00020A9 +:1060C00080F00101002240460CF0E7FA060007D0FC +:1060D000A07F00F00300022804D009E00120EFE7D0 +:1060E0000420B3E725B12A4631462046FEF756FF85 +:1060F0006946304600F007FD009800B9FFDF0099BF +:10610000022006F1E0024870C1F824804A610022B2 +:106110000A81A27F02F00302022A1CD0012008712A +:10612000287800F00102087E62F3010008762A78E0 +:10613000520862F3820008762A78920862F3C3005C +:1061400008762A78D20862F30410087624212046C3 +:10615000FCF7E0FF33E035B30871301D886130781B +:10616000400908777078C0F340004877287800F03D +:106170000102887F62F301008877A27FD20962F36F +:1061800082008877E27F62F3C3008877727862F3D7 +:1061900004108877A878C87701F1210228462031B9 +:1061A000FEF71DFF03E00320087105200876252176 +:1061B0002046FCF7AFFFA07F20F04000A07701A9A8 +:1061C00000980DF063FF022801D000B1FFDF3846D0 +:1061D0003CE72DE9FF4F534A0D4699B09A4607CA4E +:1061E0000AAB002783E807001998FDF72CF9060091 +:1061F00006D03078262806D008201DB0BDE8F08FE4 +:1062000043F20200F9E7B07F00F00309B9F1020F91 +:106210000AD05DB91B98FEF79DFE0028EDD1B07F36 +:1062200000F00300022801D11B9890BBB07F00F062 +:106230000300022808D0002080F0010119980CF01A +:1062400035FA040003D101E00120F5E7FFDF852DD9 +:1062500028D007DCF5B1812D1ED0822D1ED0832DD4 +:1062600008D11DE0862D1FD0882D1FD0892D1FD06D +:106270008A2D1FD00F2020710F281DD003F01EF98A +:10628000E0B101208DF83C00201D10902079B8B1BC +:106290005BE111E00020EEE70120ECE70220EAE7F5 +:1062A0000320E8E70520E6E70620E4E70820E2E728 +:1062B0000920E0E70A20DEE707209EE711209CE79F +:1062C000B9F1020F03D0A56F03D1A06F02E0656F93 +:1062D000FAE7606F804632D04FF0010001904FF036 +:1062E00002000090214630461B9AFEF757FE1B988D +:1062F000007800F00101A87861F30100A870B17F77 +:10630000C90961F38200A870F17F61F3C300A8702E +:10631000617861F30410A87020784009287003E0C8 +:1063200028020020F44F02006078C0F3400068703B +:106330001B988078E87000206871287103E00220C3 +:10634000019001200090A87898F80210C0F3C000D6 +:10635000C1F3C00108405FEA000B2DD05046FAF7A8 +:10636000B2FF78BBDAF80C00FAF7ADFF50BBDAF8F1 +:106370001C00FAF7A8FF28BBDAF80C00A060DAF8D6 +:106380001C00E060607898F8012042EA500100BFEC +:1063900061F34100607098F80210C0B200EA111178 +:1063A00061F30000607000202077009906F117006B +:1063B000022908D0012107E0607898F8012002EA5C +:1063C0005001E5E732E0002104EB810148610199C9 +:1063D000701C022901D0012100E0002104EB8101A1 +:1063E0004861A87800F00300012857D198F802000E +:1063F00000F00300012851D1B9F1020F04D02A1D89 +:10640000691D1B98FEF7EBFD287998F804100840E9 +:106410008DF83400697998F8052011408DF838100E +:1064200008433BD05046FAF74EFF08B11020E4E68F +:106430000AF110010491B9F1020F17D008460021AA +:1064400004F18C03CDE9000304F5AE7202920DABAA +:106450005A462046FEF70CFE0028E8D1B9F1020F9B +:1064600008D0504608D14FF0010107E050464FF0E8 +:106470000101E5E70498F5E74FF0000104F1A403FA +:10648000CDE9000304F5B072029281F001010EAB78 +:106490005A462046FEF7ECFD0028C8D160788007F8 +:1064A00034D4A87898F80210C0F38000C1F38001BA +:1064B00008432BD0297898F800000AAAB9F1020FF6 +:1064C00006D032F811204300DA4002F003070AE058 +:1064D00032F810204B00DA4012F0030705D0012FEC +:1064E0000BD0022F0BD0032F07D0BBF1000F0DD024 +:1064F000012906D0042904D008E00227F5E7012786 +:10650000F3E7012801D0042800D10427B07F40F030 +:106510008000B077F17F6BF30001F177607880073E +:1065200006D50320A071BBF1000F0ED1002028E09A +:106530000220022F18D0012F18D0042F29D00020BC +:10654000A071B07F20F08000B07725213046FCF7A5 +:10655000E1FD0FA904F1E0000DF07DFD10B102286E +:1065600000D0FFDF002048E6A071DFE7A0710D2119 +:1065700004F120001EF067FB207840F0020020703C +:1065800001208DF85C0017AA3146199800F094FAA2 +:10659000DBE70120A071D8E72DE9F04387B09046F2 +:1065A000894604460025FCF74EFF060006D03078E9 +:1065B000272806D0082007B0BDE8F08343F2020088 +:1065C000F9E7B07F00F00300022809D05FF0000077 +:1065D00080F0010120460CF069F8040003D101E0CD +:1065E0000120F5E7FFDFA7795FEA090005D0012860 +:1065F00021D0B9F1020F26D110E0B8F1000F22D15D +:10660000012F05D0022F05D0032F05D0FFDF2DE08D +:106610000C252BE0012529E0022527E04046FAF76A +:1066200052FEB0B9032F0ED11022414604F11D00D5 +:106630001EF068FA1AE0012F02D0022F03D104E005 +:10664000B8F1000F12D00720B5E74046FAF73BFE3D +:1066500008B11020AFE7102104F11D001EF0D1FA9F +:106660000621404607F0C2FDC4F81D002078252110 +:1066700040F0020020703046FCF74CFD2078C10746 +:1066800013D020F00100207002208DF8000004F1EA +:106690001D0002908DF804506946C3300DF0DBFCFC +:1066A000022803D010B1FFDF00E02577002082E749 +:1066B00030B587B00D460446FCF7C5FEA0B1807F1B +:1066C00000F00300022812D05FF0000080F001010A +:1066D00020460BF0EBFF04000ED02846FAF7F3FD3E +:1066E00038B1102007B030BD43F20200FAE70120B4 +:1066F000ECE72078400701D40820F3E7294604F1AD +:106700003D00202205461EF0FDF9207840F01000E3 +:10671000207001070FD520F00800207007208DF8A9 +:106720000000694604F1E00001950DF094FC022898 +:1067300001D000B1FFDF0020D4E770B50D4606465A +:10674000FCF781FE18B10178272921D102E043F23C +:10675000020070BD807F00F00300022808D00020F6 +:1067600080F0010130460BF0A1FF040003D101E0ED +:106770000120F5E7FFDFA079022809D16078C00782 +:1067800006D02A4621463046FEF702FD10B10FE042 +:10679000082070BDB4F860000E280BD204F162012D +:1067A00002231022081F0BF008FE01210170457022 +:1067B000002070BD112070BD70B5064614460D4610 +:1067C0000846FAF780FD18B92046FAF7A2FD08B18D +:1067D000102070BDA6F57F40FF380ED03046FCF784 +:1067E00032FE38B1417822464B08811C1846FCF72E +:1067F000FAFD07E043F2020070BD2046FDF700FEFF +:106800000028F9D11021E01D0FF08BF9E21D294677 +:1068100004F1170000F087F9002070BD2DE9F04168 +:1068200004468AB01546884600270846FAF798FDC0 +:1068300018B92846FAF794FD10B110200AB006E402 +:106840002046FCF700FE060003D0307827281AD136 +:1068500002E043F20200F1E7B07F00F003000228FB +:1068600008D0002080F0010120460BF01FFF04003B +:1068700003D101E00120F5E7FFDF2078400702D5D2 +:106880006078800701D40820D8E7B07F00F00300CB +:10689000022803D0A06F03D1A16F02E0606FFAE776 +:1068A000616F407800B19DB1487810B1B8F1000F28 +:1068B0000ED0ADB1EA1D06A8E16800F034F910224F +:1068C00006A905F117001EF0F1F818B1042707E03A +:1068D0000720B3E71022E91D04F12D001EF012F984 +:1068E000B8F1000F06D0102208F1070104F11D00D5 +:1068F0001EF008F92078252140F002002070304673 +:10690000FCF708FC2078C10715D020F001002070AA +:1069100002208DF8000004F11D0002901030039059 +:106920008DF804706946B3300DF095FB022803D052 +:1069300010B1FFDF00E0277700207FE7F8B51546AC +:106940000E460746FCF77FFD040004D0207822287D +:1069500004D00820F8BD43F20200F8BDA07F00F08B +:106960000300022802D043F20500F8BD3046FAF7D2 +:10697000AAFC18B92846FAF7A6FC08B11020F8BD01 +:1069800000953288B31C21463846FEF724FC1128B6 +:1069900015D00028F3D1297C4A08A17F62F3C711E2 +:1069A000A177297CE27F61F30002E277297C8908E4 +:1069B00084F82010A17F21F04001A177F8BDA17FCC +:1069C0000907FBD4D6F80200C4F83600D6F8060052 +:1069D000C4F83A003088A0861022294604F1240029 +:1069E0001EF090F8287C4108E07F61F34100E077D9 +:1069F000297C61F38200E077287C800884F82100FC +:106A0000A07F40F00800A0770020D3E770B50D46C6 +:106A100006460BB1072070BDFCF715FD040007D03A +:106A20002078222802D3A07F800604D4082070BDDD +:106A300043F2020070BDADB1294630460AF0B2FD06 +:106A400002F05EFB297C4A08A17F62F3C711A1779F +:106A5000297CE27F61F30002E277297C890884F8CF +:106A6000201004E030460AF0C0FD02F049FBA17F8F +:106A700021F02001A17770BD70B50D46FCF7E3FC55 +:106A8000040005D02846FAF744FC20B1102070BD60 +:106A900043F2020070BD29462046FEF74AFB002063 +:106AA00070BD04E010F8012B0AB100207047491EA8 +:106AB00089B2F7D20120704770B51546064602F03C +:106AC000FDFC040000D1FFDF207820F00F00801CC7 +:106AD00020F0F0002030207066802868A060BDE8BB +:106AE000704002F0EEBC10B5134C94F83000002852 +:106AF00008D104F12001A1F110000DF0EEFA0120FF +:106B000084F8300010BD10B190F8B9202AB10A48BD +:106B100090F8350018B1002003E0B83001E00648D5 +:106B200034300860704708B50023009313460A46C6 +:106B30000BF0B7FF08BD00002802002018B18178D3 +:106B4000012938D101E010207047018842F6011276 +:106B5000881A914231D018DC42F60102A1EB020002 +:106B600091422AD00CDC41B3B1F5C05F25D06FF45F +:106B7000C050081821D0A0F57060FF381BD11CE070 +:106B800001281AD002280AD117E0B0F5807F14D06E +:106B900008DC012811D002280FD003280DD0FF28CF +:106BA00009D10AE0B0F5817F07D0A0F580700338E5 +:106BB00003D0012801D0002070470F2070470A2819 +:106BC0001FD008DC0A2818D2DFE800F0191B1F1FAD +:106BD000171F231D1F21102815D008DC0B2812D0E9 +:106BE0000C2810D00D2816D00F2806D10DE0112842 +:106BF0000BD084280BD087280FD0032070470020AB +:106C0000704705207047072070470F207047042009 +:106C10007047062070470C20704743F2020070470F +:106C200038B50C46050041D06946FFF7AFF900289A +:106C300019D19DF80010607861F302006070694618 +:106C4000681CFFF7A3F900280DD19DF800106078AB +:106C500061F3C5006070A978C1F34101012903D037 +:106C6000022905D0072038BD217821F0200102E05B +:106C7000217841F020012170410704D0A978C9088A +:106C800061F386106070607810F0380F07D0A97833 +:106C9000090961F3C710607010F0380F02D16078F5 +:106CA000400603D5207840F040002070002038BD19 +:106CB00070B504460020088015466068FFF7B0FFF5 +:106CC000002816D12089A189884211D8606880786F +:106CD000C0070AD0B1F5007F0AD840F20120B1FB0D +:106CE000F0F200FB1210288007E0B1F5FF7F01D918 +:106CF0000C2070BD01F201212980002070BD10B56B +:106D00000478137864F3000313700478640864F360 +:106D1000410313700478A40864F3820313700478A9 +:106D2000E40864F3C30313700478240964F30413C0 +:106D300013700478640964F34513137000788009B4 +:106D400060F38613137031B10878C10701D1800751 +:106D500001D5012000E0002060F3C713137010BDBF +:106D60004278530702D002F0070306E012F0380F12 +:106D700002D0C2F3C20300E001234A7863F30202A7 +:106D80004A70407810F0380F02D0C0F3C20005E01E +:106D9000430702D000F0070000E0012060F3C502C5 +:106DA0004A7070472DE9F04F95B00D00824612D021 +:106DB000122128461DF025FF4FF6FF7B05AA012171 +:106DC000584607F03AF80024264637464FF4205834 +:106DD0006FF4205973E0102015B0BDE8F08F00BFAC +:106DE0009DF81E0001280AD1BDF81C1041450BD0AA +:106DF00011EB09000AD001280CD002280CD0042C79 +:106E00000ED0052C0FD10DE0012400E00224BDF8C6 +:106E10001A6008E0032406E00424BDF81A7002E0BA +:106E2000052400E00624BDF81A10514547D12C7402 +:106E3000BEB34FF0000810AA4FF0070ACDE9028256 +:106E4000CDE900A80DF13C091023CDF81090424681 +:106E50003146584607F0A4F808BBBDF83C002A4666 +:106E6000C0B210A90DF0AFF9C8B9AE81CFB1CDE96C +:106E700000A80DF1080C0AAE40468CE8410213232D +:106E800000223946584607F08BF840B9BDF83C005F +:106E9000F11CC01EC0B22A1D0DF095F910B10320DF +:106EA0009AE70AE0BDF82900E881062C05D19DF893 +:106EB0001E00A872BDF81C00288100208CE705A8E0 +:106EC00006F0C7FF00288BD0FFF779FE84E72DE995 +:106ED000F0471C46DDE90978DDF8209015460E00E4 +:106EE000824600D1FFDF0CB1208818B1D5B1112046 +:106EF000BDE8F087022D01D0012100E0002106F15C +:106F0000140005F089FEA8F8000002463B46294619 +:106F1000504603F044F9C9F8000008B9A41C3C60CD +:106F20000020E5E71320E3E7F0B41446DDE904525E +:106F30008DB1002314B1022C09D101E0012306E038 +:106F40000D7CEE0703D025F0010501230D742146C9 +:106F5000F0BC03F0AFBF1A80F0BC70472DE9FE4FC4 +:106F600091461A881C468A468046FAB102AB4946C9 +:106F700003F015F9050019D04046A61C27880BF030 +:106F8000D9FC3246072629463B4600960BF0E7F827 +:106F900020882346CDE900504A4651464046FFF737 +:106FA000C3FF002020800120BDE8FE8F0020FBE70A +:106FB0002DE9F04786B082460EA8904690E8B000D2 +:106FC000894604AA05A903A88DE807001E462A469B +:106FD00021465046FFF77BFF039901B1012139702B +:106FE000002818D1F94904F1140204AB0860039891 +:106FF00005998DE8070042464946504606F0C3F918 +:10700000A8B1092811D2DFE800F005080510100A20 +:107010000C0C0E00002006B06AE71120FBE70720E9 +:10702000F9E70820F7E70D20F5E70320F3E7BDF8BF +:1070300010100398CDE9000133462A4621465046F8 +:10704000FFF772FFE6E72DE9F04389B00D46DDE971 +:10705000108781461C461646142103A81DF0F3FD37 +:10706000012002218DF810108DF80C008DF81170A0 +:10707000ADF8146064B1A278D20709D08DF816007B +:10708000E088ADF81A00A088ADF81800A068079055 +:1070900008A80095CDE90110424603A948466B684F +:1070A000FFF786FF09B0BDE8F083F0B58BB0002490 +:1070B0000646069407940727089405A809940194A6 +:1070C00000970294CDE903400D4610232246304636 +:1070D00006F066FF78B90AA806A901940097029401 +:1070E000CDE90310BDF8143000222946304606F0E1 +:1070F0002DFD002801D0FFF762FD0BB0F0BD06F0BA +:10710000CDBB2DE9FC410C468046002602F0D6F9A5 +:10711000054620780D287DD2DFE800F0BC0713B3C8 +:1071200025BD49496383AF959B00A848006820B1FD +:10713000417841F010014170ADE0404602F0EEF9B7 +:10714000A9E0042140460BF0B1FA070000D1FFDFAF +:1071500007F11401404605F0F3FCA5BB132140469E +:10716000FDF728FC97E0042140460BF09FFA07004A +:1071700000D1FFDFE088ADF800000020B8819DF865 +:107180000000010704D5C00602D5A088B88105E03B +:107190009DF8010040067ED5A088F88105B9FFDF83 +:1071A00022462946404601F0BDFC022673E0E188F4 +:1071B000ADF800109DF8011009060FD5072803D07F +:1071C00006280AD00AE024E0042140460BF06EFABB +:1071D000060000D1FFDFA088F0810226CDB9FFDFD5 +:1071E00017E0042140460BF061FA070000D1FFDFF1 +:1071F00007F1140006F089FB90F0010F02D1E0794D +:10720000000648D5387C022640F00200387405B9E3 +:10721000FFDF00E03EE022462946404601F082FCC6 +:1072200039E0042140460BF041FA017C002D01F0C9 +:107230000206C1F340016171017C21F00201017479 +:10724000E7D1FFDFE5E702260121404602F098F989 +:1072500021E0042140460BF029FA054660680090C1 +:107260002089ADF8040001226946404602F0A9F9E0 +:10727000287C20F0020028740DE0002DC9D1FFDF2A +:10728000C7E7022600214046FBF71EF9002DC0D1BA +:10729000FFDFBEE7FFDF3046BDE8FC813EB50C00F6 +:1072A00009D001466B4601AA002006F0FBFE20B182 +:1072B000FFF785FC3EBD10203EBD00202080A07061 +:1072C0009DF8050002A900F00700FEF77BFE50B90B +:1072D0009DF8080020709DF8050002A9C0F3C200C7 +:1072E000FEF770FE08B103203EBD9DF808006070F7 +:1072F0009DF80500C109A07861F30410A0709DF805 +:107300000510890961F3C300A0709DF80410890677 +:1073100001D5022100E0012161F342009DF8001037 +:1073200061F30000A07000203EBD70B51446064613 +:107330000D4651EA040005D075B10846FAF707F882 +:1073400078B901E0072070BD2946304606F00BFFF2 +:1073500010B1BDE8704032E454B12046F9F7F7FFB0 +:1073600008B1102070BD21463046BDE8704095E759 +:10737000002070BD2DE9FC5F0C46904605460027B5 +:1073800001780822007A3E46B2EB111F7ED104F14B +:107390000A0100910A31821E4FF0020A04F1080B23 +:1073A0000191092A73D2DFE802F0ECDF05F4272708 +:1073B0007AA9CD00688804210BF078F9060000D185 +:1073C000FFDFB08920B152270726C2E08C020020DF +:1073D00051271026002C7DD06888A0800120A07144 +:1073E000A88900220099FFF7A0FF002873D1A8897F +:1073F0002081288AE081D1E0B5F81290072824D1B5 +:10740000E87B000621D5512709F1140086B2002C33 +:10741000E1D0A88900220099FFF787FF00285AD100 +:107420006888A08084F806A0A88920810120A07324 +:10743000288A2082A4F81290A88A009068884B4677 +:10744000A969019A01F04BFBA8E0502709F112004D +:1074500086B2002C3ED0A88900225946FFF765FF6E +:10746000002838D16888A080A889E080287A072879 +:1074700013D002202073288AE081E87BC009607362 +:10748000A4F81090A88A0090688801E083E080E06A +:107490004B4604F11202A969D4E70120EAE7B5F8E6 +:1074A0001290512709F1140086B2002C66D068882A +:1074B00004210BF0FBF883466888A080A88900228D +:1074C0000099FFF732FF00286ED184F806A0A88942 +:1074D000208101E052E067E00420A073288A208226 +:1074E000A4F81290A88A009068884B46A969019A6E +:1074F00001F0F5FAA989ABF80E104FE06888FBF7A8 +:10750000A2FF0746688804210BF0D0F8064607B9A9 +:10751000FFDF06B9FFDF687BC00702D051271426C2 +:1075200001E0502712264CB36888A080502F06D067 +:1075300084F806A0287B594601F0E1FA2EE0287B6A +:10754000A11DF9E7FE49A8894989814205D154273F +:1075500006269CB16888A08020E053270BE068884D +:10756000A080A889E08019E0688804210BF09EF8CB +:1075700000B9FFDF55270826002CF0D1A8F80060DD +:1075800011E056270726002CF8D06888A08000203C +:1075900013E0FFDF02E0012808D0FFDFA8F8006059 +:1075A0000CB1278066800020BDE8FC9F5727072686 +:1075B000002CE3D06888A080687AA071EEE7401DB7 +:1075C00020F0030009B14143091D01EB4000704761 +:1075D00013B5DB4A00201071009848B100246846BA +:1075E0000AF081FE002C02D1D64A009911601CBD20 +:1075F00001240020F4E770B50D46064686B0144617 +:107600005C2128461DF01FFB04B9FFDFA0786874D9 +:10761000A2782188284601F09CFA0020A881E88100 +:10762000228805F11401304605F06FFA6A460121FF +:10763000304606F002FC19E09DF80300000715D55E +:10764000BDF806103046FFF730FD9DF80300BDF889 +:10765000061040F010008DF80300BDF80300ADF8EF +:107660001400FF233046059A06F048FD684606F0F0 +:10767000F0FB0028E0D006B070BD10B50C4601F15B +:10768000140005F079FA0146627C2046BDE81040FE +:1076900001F094BA30B50446A94891B04FF6FF7591 +:1076A000C18905AA284606F0C8FB30E09DF81E00F7 +:1076B000A0422AD001282AD1BDF81C00B0F5205FD5 +:1076C00003D042F60101884221D1002002AB0AAA70 +:1076D0000CA9019083E8070007200090BDF81A105C +:1076E00010230022284606F05BFC38B9BDF82800BC +:1076F0000BAAC0B20CA90CF066FD10B1032011B0AA +:1077000030BD9DF82E00A04201D10020F7E705A86A +:1077100006F09FFB0028C9D00520F0E770B50546AC +:1077200004210AF0C3FF040000D1FFDF04F11401BB +:107730000C46284605F004FA21462846BDE870406C +:1077400005F005BA70B58AB00C460646FBF77BFE1D +:10775000050014D02878222827D30CB1A08890B136 +:1077600001208DF80C0003208DF8100000208DF80A +:10777000110054B1A088ADF81800206807E043F26A +:1077800002000AB070BD0920FBE7ADF818000590B3 +:10779000042130460AF08AFF040000D1FFDF04F123 +:1077A000140005F000FA000701D40820E9E701F011 +:1077B00085FE60B108A802210094CDE9011095F87A +:1077C000232003A930466368FFF7F2FBD9E71120B5 +:1077D000D7E72DE9F04FB2F802A0834689B01546ED +:1077E00089465046FBF72FFE0746042150460AF013 +:1077F0005DFF0026044605964FF002080696ADF898 +:107800001C6007B9FFDF04B9FFDF4146504603F0B3 +:10781000BCFE50B907AA06A905A88DE80700424694 +:10782000214650466368FFF752FB454807AB0660A8 +:10783000DDE9051204F11400CDF80090CDE9032034 +:10784000CDE9013197F82320594650466B6805F081 +:10785000F3F906000AD0022E04D0032E14D0042E11 +:1078600000D0FFDF09B03046BDE8F08FBDF81C0046 +:107870000028F7D00599CDE9001042462146504630 +:107880006368FFF751FBEDE7687840F00800687027 +:10789000E8E72DE9F04F99B004464FF0000828487A +:1078A000ADF81C80ADF82080ADF82480A0F80880E9 +:1078B000ADF81480ADF81880ADF82C80ADF82880B4 +:1078C000007916460D464746012808D0022806D002 +:1078D000032804D0042802D0082019B0C4E72046A9 +:1078E000F9F7F1FC80BB2846F9F7EDFC60BB606856 +:1078F000F9F736FD40BB606848B16089218988424C +:1079000002D8B1F5007F01D90C20E6E780460EAA27 +:1079100006A92846FFF7CCF90028DED168688078F0 +:10792000C0F34100022808D19DF8190010F0380F6B +:1079300003D02869F9F70BFD30B905A9206904E0E7 +:107940008C0200201400002020E0FFF769F90028D5 +:10795000C3D1206948B1607880079DF8150000F018 +:10796000380001D5F0B300E0E0BB9DF814008006BC +:107970000ED59DF8150010F0380F03D06068F9F7A8 +:10798000E6FC18B96068F9F7EBFC08B11020A4E731 +:107990000AA96069FFF744F900289ED1606940B1E7 +:1079A0009DF8290000F0070101293CD110F0380FA3 +:1079B00039D00BA9A069FFF733F900288DD19DF8C4 +:1079C000280080062FD49DF82C0080062BD4A069B7 +:1079D00050B19DF82D0000F00701012923D110F0CE +:1079E000380F00E01FE01ED0E06818B10078D0B179 +:1079F0001C2818D20FAA611C2046FFF780F901212C +:107A0000384661F30F2082468DF85210B94642F68F +:107A100003000F46ADF850000DF13F0218A9286889 +:107A20000CF0F0FB08B1072057E79DF8600015A99E +:107A3000CDF80090C01CCDE9019100F0FF0B0023B0 +:107A40000BF20122514614A806F03AF9F0BBBDF83A +:107A500054000C90FD492A8928690092CDE9010162 +:107A60006B89BDF838202868069906F029F90100CD +:107A70007ED120784FF0020AC10601D480062BD5B2 +:107A8000ADF80C90606950B90AA906A8FFF768F92B +:107A90009DF8290020F00700401C8DF829009DF872 +:107AA000280008A940F0C8008DF828008DF8527011 +:107AB00042F60210ADF8500003AACDF800A0CDE9BF +:107AC0000121002340F2032214A800E01EE00A99DD +:107AD00006F0F6F801004BD1DC484D4608385B460D +:107AE0000089ADF83D000FA8CDE90290CDF80490D3 +:107AF000CDF810904FF007090022CDF80090BDF8A6 +:107B000054104FF6FF7006F021F810B1FFF757F848 +:107B1000E3E69DF83C00000625D52946012060F3E8 +:107B20000F218DF852704FF42450ADF85000ADF88D +:107B30000C5062789DF80C00002362F300008DF871 +:107B40000C006278CDF800A0520862F341008DF875 +:107B50000C0003AACDE9012540F2032214A806F087 +:107B6000AFF8010004D1606888B32069A8B900E0CB +:107B700086E005A906A8FFF7F3F86078800706D429 +:107B80009DF8150020F038008DF8150005E09DF8EF +:107B9000140040F040008DF814008DF8527042F649 +:107BA0000110ADF85000208940F20121B0FBF1F244 +:107BB00001FB1202606809ABCDF80080CDE901033A +:107BC000002314A8059906F07BF8010058D120780D +:107BD000C00729D0ADF80C50A06950B90BA906A870 +:107BE000FFF7BEF89DF82D0020F00700401C8DF82F +:107BF0002D009DF82C008DF8527040F040008DF85B +:107C00002C0042F60310ADF8500007A903AACDF8E6 +:107C100000A0CDE90121002340F2032214A80B9912 +:107C200006F04EF801002BD1E06868B32946012028 +:107C300060F30F218DF8527042F60410ADF8500039 +:107C4000E068002302788DF8582040788DF85900BC +:107C5000E06816AA4088ADF85A00E06800798DF80F +:107C60005C00E068C088ADF85D00CDF80090CDE91B +:107C700001254FF4027214A806F022F8010003D087 +:107C80000C9800F0C7FF28E67048032108380171FE +:107C900056B100893080BDF824007080BDF8200006 +:107CA000B080BDF81C00F080002016E670B50125FC +:107CB0008AB016460B46012802D0022816D104E0ED +:107CC0008DF80E504FF4205003E08DF80E5042F620 +:107CD0000100ADF80C005BB10024601C60F30F24C0 +:107CE00004AA08A918460CF08DFA18B1072048E537 +:107CF000102046E504A99DF820205448CDE9002134 +:107D0000801E02900023214603A802F2012205F002 +:107D1000D7FF10B1FEF753FF33E54C4808380EB1DA +:107D2000C1883180057100202BE5F0B593B007467E +:107D300001268DF83E6041F60100ADF83C0012AA24 +:107D40000FA93046FFF7B2FF002848D13F4C00256D +:107D5000083CE7B31C2102A81CF075FF9DF8080041 +:107D60008DF83E6040F020008DF8080042F60520B6 +:107D7000ADF83C000E959DF83A00119520F00600F4 +:107D8000801C8DF83A009DF838006A4620F0FF000C +:107D90008DF838009DF8390009A920F0FF008DF812 +:107DA00039000420ADF82C00ADF830000EA80A9080 +:107DB00011A80D900FA80990ADF82E5002A8FFF75A +:107DC00068FD00280BD1BDF80000608100E008E0EC +:107DD000BDF80400A081401CE0812571002013B093 +:107DE000F0BD6581A581BDF84800F4E72DE9F74FA6 +:107DF0001649A0B00024083917940A79A146012A2F +:107E000004D0022A02D0082023B02DE5CA8882427D +:107E100001D00620F8E721988A46824201D1072046 +:107E2000F2E701202146ADF848004FF6FF788DF8C3 +:107E30006E0042F6020B60F30F21ADF84A80ADF8F8 +:107E40006CB006918DF8724002E0000094020020B0 +:107E50001CA9ADF870401391ADF8508012A806F03F +:107E60001CF800252E462F460DAB072212A94046CE +:107E700006F016F878B10A285DD195B38EB3ADF847 +:107E80006450ADF866609DF85E008DF8144019AC42 +:107E9000012864D06BE09DF83A001FB3012859D146 +:107EA000BDF8381059451FD118A809A901940294AA +:107EB000CDE9031007200090BDF8361010230022F2 +:107EC000404606F06DF8B0BBBDF86000042801D054 +:107ED00006284AD1BDF82410219881423AD10F20BA +:107EE00092E73AE0012835D1BDF83800B0F5205FBF +:107EF00003D042F6010188422CD1BAF80600BDF841 +:107F00003610884201D1012700E0002705B19EB15B +:107F1000219881421ED118A809AA01940294CDE9A2 +:107F20000320072000900D4610230022404606F053 +:107F300037F800B902E02DE04E460BE0BDF86000D6 +:107F4000022801D0102810D1C0B217AA09A90CF03C +:107F50003AF950B9BDF8369086E7052054E705A9EF +:107F600017A8221D0CF04EF908B103204CE79DF82C +:107F700014000023001DC2B28DF814202298009234 +:107F8000CDE901401BA8069905F09AFE10B902221E +:107F90008AF80420FEF713FE36E710B50B46401EA4 +:107FA00088B084B205AA00211846FEF7A8FE00207A +:107FB0000DF1080C06AA05A901908CE8070007201E +:107FC00000900123002221464FF6FF7005F0BEFD10 +:107FD0000446BDF81800012800D0FFDF2046FEF758 +:107FE000EEFD08B010BDF0B5F74F044687B0387904 +:107FF0000E46032804D0042802D0082007B0F0BDA4 +:1080000004AA03A92046FEF753FE0500F6D16068D6 +:108010008078C0F3410002280AD19DF80D0010F0CD +:10802000380F05D02069F9F792F908B11020E5E77B +:10803000208905AA21698DE807006389BDF8102011 +:108040002068039905F03CFE10B1FEF7B8FDD5E7B6 +:1080500016B1BDF814003080042038712846CDE7F1 +:10806000F8B50C0006460CD001464FF6FF7500230C +:108070006A46284606F016F828B100BFFEF79FFDB5 +:10808000F8BD1020F8BD69462046FEF7C9FD00285E +:10809000F8D1A078314600F001032846009A06F096 +:1080A0002DF8EBE730B587B0144600220DF1080C2F +:1080B00005AD01928CE82C00072200920A46014689 +:1080C00023884FF6FF7005F041FDBDF814102180A4 +:1080D000FEF775FD07B030BD70B50D4604210AF0FE +:1080E000E5FA040000D1FFDF294604F11400BDE8E1 +:1080F000704004F051BD70B50D4604210AF0D6FA67 +:10810000040000D1FFDF294604F11400BDE87040EF +:1081100004F065BD70B50D4604210AF0C7FA0400ED +:1081200000D1FFDF294604F11400BDE8704004F0DF +:108130007DBD70B5054604210AF0B8FA040000D1EF +:10814000FFDF214628462368BDE870400122FEF784 +:1081500005BF70B5064604210AF0A8FA040000D154 +:10816000FFDF04F1140004F007FD401D20F00305BB +:1081700011E0011D00880022431821463046FEF719 +:10818000EDFE00280BD0607CABB2684382B2A068E1 +:10819000011D0AF048F9A06841880029E9D170BDA5 +:1081A00070B5054604210AF081FA040000D1FFDF12 +:1081B000214628466368BDE870400222FEF7CEBE25 +:1081C00070B50E46054601F079F9040000D1FFDFD5 +:1081D0000120207266726580207820F00F00001D5B +:1081E00020F0F00040302070BDE8704001F069B927 +:1081F00010B50446012900D0FFDF2046BDE810403D +:108200000121FAF761B92DE9F04F97B04FF0000A5C +:108210000C008346ADF814A0D04619D0E06830B108 +:10822000A068A8B10188ADF81410A0F800A05846C5 +:10823000FBF709F9070043F2020961D038782228D8 +:108240005CD3042158460AF031FA050005D103E059 +:10825000102017B0BDE8F08FFFDF05F1140004F027 +:108260008BFC401D20F00306A078012803D00228D3 +:1082700001D00720EDE7218807AA584605F0DDFD6B +:1082800030BB07A805F0E5FD10BB07A805F0E1FD30 +:1082900048B99DF82600012805D1BDF82400A0F5B5 +:1082A0002451023902D04FF45050D2E7E068B0B107 +:1082B000CDE902A00720009005AACDF804A0049201 +:1082C000A2882188BDF81430584605F03FFC10B153 +:1082D000FEF775FCBDE7A168BDF8140008809DF8A5 +:1082E0001F00C00602D543F20140B2E70B9838B137 +:1082F000A1780078012905D080071AD40820A8E7C2 +:108300004846A6E7C007F9D002208DF83C00A868CF +:108310004FF00009A0B1697C4288714391420FD9A6 +:108320008AB2B3B2011D0AF034F88046A0F800A06A +:1083300006E003208DF83C00D5F800804FF00109DD +:108340009DF8200010F0380F00D1FFDF9DF82000CD +:108350001E49C0F3C200084497F8231010F8010C1E +:10836000884201D90F2074E72088ADF8400014A995 +:108370000095CDE90191434607220FA95846FEF723 +:1083800017FE002891D19DF8500050B9A07801281F +:1083900007D1687CB3B2704382B2A868011D0AF0AD +:1083A0000CF8002055E770B5064615460C46084601 +:1083B000FEF7C4FB002805D12A4621463046BDE819 +:1083C000704073E470BD11E58C020020FE4F020086 +:1083D00070B51E4614460D0009D044B1616831B134 +:1083E00038B1FC49C988814203D0072070BD1020F4 +:1083F00070BD2068FEF7A2FB0028F9D13246214665 +:108400002846BDE87040FFF744BA70B515460C0029 +:1084100006D038B1EF490989814203D0072070BDE9 +:10842000102070BD2068FEF789FB0028F9D129468D +:108430002046BDE87040D6E570B5064686B00D46CC +:1084400014461046F8F765FFD0BB6068F8F788FF60 +:10845000B0BBA6F57F40FF3803D03046FAF7F3FFF4 +:1084600080B128466946FEF79DFC00280CD19DF896 +:1084700010100F2008293DD2DFE801F0080606069B +:10848000060A0A0843F2020006B070BD0320FBE7AB +:108490009DF80210012908D1BDF80010B1F5C05FA8 +:1084A000F2D06FF4C052D142EED09DF806100129EF +:1084B0000DD1BDF80410A1F52851062907D200E01E +:1084C00029E0DFE801F0030304030303DCE79DF880 +:1084D0000A1001290FD1BDF80810B1F5245FD3D0DF +:1084E000A1F60211B1F50051CED00129CCD002295C +:1084F00001D1C9E7FFDF606878B9002305AA2946E2 +:10850000304605F0CFFD10B1FEF759FBBCE79DF8F2 +:108510001400800601D41020B6E761882246284660 +:108520006368FFF7BFFDAFE72DE9F043814687B0F1 +:10853000884614461046F8F7ECFE18B1102007B034 +:10854000BDE8F083002306AA4146484605F0AAFD8F +:1085500018B100BFFEF733FBF1E79DF81800C00625 +:1085600002D543F20140EAE70025072705A8019557 +:1085700000970295CDE9035062884FF6FF7341469C +:10858000484605F00DFD060013D16068F8F7C1FEFE +:1085900060B960680195CDE9025000970495238881 +:1085A00062884146484605F0FBFC0646BDF81400CB +:1085B00020803046CEE739B1864B0A889B899A42A3 +:1085C00002D843F2030070471DE610B586B0814C17 +:1085D0000423ADF81430638943B1A4898C4201D2DD +:1085E000914205D943F2030006B010BD0620FBE717 +:1085F000ADF81010002100910191ADF8003002217A +:108600008DF8021005A9029104A90391ADF812207A +:108610006946FFF7F8FDE7E72DE9FC4781460D467F +:108620000846F8F750FE88BB4846FAF70CFF5FEAA9 +:1086300000080AD098F80000222829D304214846CF +:108640000AF034F8070005D103E043F20200BDE868 +:10865000FC87FFDF07F1140004F0A5FA064628782E +:10866000012803D0022804D00720F0E7B0070FD577 +:1086700002E016F01C0F0BD0A8792C1DC00709D002 +:10868000E08838B1A068F8F71EFE18B11020DEE7C8 +:108690000820DCE721882A780720B1F5847F35D0CF +:1086A0001EDC40F20315A1F20313A94226D00EDC12 +:1086B000B1F5807FCBD003DCF9B1012926D1C6E723 +:1086C000A1F58073013BC2D0012B1FD113E0012B18 +:1086D000BDD0022B1AD0032BB9D0042B16D112E037 +:1086E000A1F20912082A11D2DFE802F00B040410EB +:1086F00010101004ABE7022AA9D007E0012AA6D087 +:1087000004E0320700E0F206002AA0DACDB200F061 +:10871000D5FE50B198F82300CDE90005FA8923462B +:1087200039464846FEF78FFC91E711208FE72DE987 +:10873000F04F8BB01F4615460C4683460026FAF7CD +:1087400082FE28B10078222805D208200BB081E5EE +:1087500043F20200FAE7B80801D00720F6E7032F3A +:1087600000D100274FF6FF79CCB1022D73D32046FC +:10877000F8F7F6FD30B904EB0508A8F10100F8F7A9 +:10878000EFFD08B11020E1E7AD1EAAB22146484630 +:1087900005F057FD38F8021C88425CD1ADB20D4996 +:1087A000B80702D58889401C00E001201FFA80F834 +:1087B000F80701D08F8900E04F4605AA4146584688 +:1087C00005F03BFB4FF0070A4FF00009DCB32046F1 +:1087D0000BE000008C020020408810283BD8361D9A +:1087E000304486B2AE4236D2A01902884245F3D355 +:1087F00051E000BF9DF8170002074CD594B304EB7D +:108800000608361DB8F80230B6B2102B23D89A19D4 +:10881000AA4220D8B8F8002091421CD1C0061CD52D +:10882000CDE900A90DF1080C0AAAA11948468CE867 +:108830000700B8F800100022584605F087F920B16B +:10884000FEF7BDF982E726E005E0B8F80200BDF8C2 +:108850002810884201D00B2078E7B8F80200304495 +:1088600086B207E0FFE7C00604D55846FEF71DFCB8 +:10887000002888D19DF81700BDF81A1020F01000CC +:108880008DF81700BDF81700ADF80000FF2358461B +:10889000009A05F033FC05A805F0DBFA18B9BDF81D +:1088A0001A10B942A6D90421584609F0FFFE040067 +:1088B00000D1FFDFA2895AB1CDE900A94D460023BE +:1088C00021465846FEF7BFFB0028BBD1A5813DE7F6 +:1088D00000203BE72DE9FF4F8BB01E4617000D46E9 +:1088E0004FF0000412D0B00802D007200FB0B1E45E +:1088F000032E00D100265DB10846F8F728FD28B9FF +:108900003888691E0844F8F722FD08B11020EDE709 +:10891000C64AB00701D5D18900E00121F0074FF622 +:10892000FF7802D0D089401E00E0404686B206AAF9 +:108930000B9805F082FA4FF000094FF0070B0DF18C +:10894000140A38E09DF81B00000734D5CDF80490D8 +:10895000CDF800B0CDF80890CDE9039A4346002247 +:108960000B9805F01DFB60BB05B3BDF814103A88E9 +:1089700021442819091D8A4230D3BDF81E2020F851 +:10898000022BBDF8142020F8022BCDE900B9CDE967 +:108990000290CDF810A0BDF81E10BDF814300022D2 +:1089A0000B9805F0FDFA08B103209FE7BDF814000D +:1089B0002044001D84B206A805F04BFA20B10A2815 +:1089C00006D0FEF7FCF891E7BDF81E10B142B9D908 +:1089D00034B17DB13888A11C884203D20C2085E7D0 +:1089E000052083E722462946404605F02AFC014639 +:1089F00028190180A41C3C80002077E710B50446AC +:108A0000F8F787FC08B1102010BD8848C089208085 +:108A1000002010BDF0B58BB00D460646142103A80A +:108A20001CF011F901208DF80C008DF810000020C9 +:108A30008DF81100ADF814503046FAF704FD48B136 +:108A40000078222812D30421304609F02FFE0400BA +:108A500005D103E043F202000BB0F0BDFFDF04F1EB +:108A60001400074604F09FF8800601D40820F3E7BD +:108A7000207C022140F00100207409A80094CDE977 +:108A80000110072203A930466368FEF791FA20B16E +:108A9000217C21F001012174DEE729463046F9F7F7 +:108AA00004FD08A9384604F06DF800B1FFDFBDF8F9 +:108AB0002040172C01D2172000E02046A84201D9FF +:108AC0002C4602E0172C00D2172421463046FFF72F +:108AD00012FB21463046F9F70EFA0020BCE7F8B544 +:108AE0001C4615460E46069F09F012FF2346FF1D41 +:108AF000BCB231462A46009409F0FDFAF8BD70B5C3 +:108B00000C4605460E2120461CF07BF800202080F4 +:108B10002DB1012D01D0FFDF70BD062000E0052042 +:108B2000A07170BD10B548800878134620F00F0082 +:108B3000001D20F0F00080300C4608701422194609 +:108B400004F108001CF023F800F0BBFC3748046077 +:108B500010BD2DE9F047DFF8D890491D064621F0F9 +:108B6000030117460C46D9F8000009F0DAFB0500AE +:108B700000D1FFDF4FF000083560A5F800802146E6 +:108B8000D9F8000009F0CDFB050000D1FFDF7560CA +:108B9000A5F800807FB104FB07F1091D0BD0D9F8BF +:108BA000000009F0BEFB040000D1FFDFB460C4F890 +:108BB0000080BDE8F087C6F80880FAE72DE9F041AB +:108BC0001746491D21F00302194D06460168144657 +:108BD000286809F0D1FB22467168286809F0CCFBAF +:108BE0003FB104FB07F2121D03D0B168286809F0F9 +:108BF000C3FB042009F002FD0446042009F006FD31 +:108C0000201A012804D12868BDE8F04109F07EBB94 +:108C1000BDE8F08110B50C4605F0DBF800B1FFDFD0 +:108C20002046BDE81040FDF7CABF00008C020020BE +:108C30001400002038B50C468288817B19B1418927 +:108C4000914200D90A462280C188121D90B26A461C +:108C500008F0D0FDBDF80000032800D30320C1B206 +:108C6000208800F0D7FF38BD38B50C468288817B5C +:108C700019B10189914200D90A462280C188121D8A +:108C800090B26A4608F0B6FDBDF80000022800D395 +:108C90000220C1B2208800F0BDFF401CC0B238BD28 +:108CA0002DE9FE4F82468B46F94814460BF103022C +:108CB000D0E90010CDE9011022F0030268464FF41C +:108CC0009071009209F00FFBF24E002C02D1F24A93 +:108CD00000999160009901440091357F05F10105EB +:108CE00004D1E8B20BF008FA00B1FFDF009800EB06 +:108CF0000510C01C20F0030100915CB9707AB27AB3 +:108D00001044C2B200200870308C80B204F0E9FE3A +:108D100000B1FFDF0098316A0844009021466846A0 +:108D200000F03BFF80460098C01C20F0030000903C +:108D3000B37AF27A717A04B1002009F0CAFB009983 +:108D4000084400902146684600F06FFFD148002794 +:108D50003D4690F801900CE0284600F001FF0646E1 +:108D600081788088F9F75EF971786D1C00FB0177D6 +:108D7000EDB24D45F0D10098C01C20F003000090EA +:108D800004B100203946F9F758F900990027084442 +:108D90000090C0483D4690F801900CE0284600F055 +:108DA000DFFE0646C1788088FEF709FC71786D1CED +:108DB00000FB0177EDB24D45F0D10098C01C20F0CA +:108DC0000300009004B100203946FEF701FC009931 +:108DD0004FF0000908440090AE484D4647780EE039 +:108DE000284600F0BDFE0646807B30B106F1080043 +:108DF00001F00FFF727800FB02996D1CEDB2BD42CD +:108E0000EED10098C01C20F00300009004B10020B7 +:108E1000494601F002FF0099084400902146684647 +:108E200000F075FE0098C01D20F007000090DAF8F1 +:108E30000010814204D3A0EB0B01B1F5803F04DBAD +:108E40004FF00408CAF8000004E0CAF80000B8F1C6 +:108E5000000F02D04046BDE8FE8F34BB8F49002092 +:108E6000009A03F057F8FBF768FA8A4801AA002134 +:108E70001030F8F7F3FA00B1FFDF8648407FFEF7C5 +:108E800054FF00B1FFDF83484FF4F67140301BF010 +:108E9000DAFE80480421403080F8E91180F8EA11B8 +:108EA000062180F8EB11032101710020D3E770B592 +:108EB000784C06464034207804EB4015E0780835BD +:108EC00090B9A01990F8E80100280ED0A0780F28DA +:108ED00000D3FFDF202128461BF0B5FE687866F33B +:108EE000020068700120E070284670BD2DE9F04155 +:108EF00005460C4600270078052190463E46B1EB1A +:108F0000101F00D0FFDF287A50B101280ED0FFDFFC +:108F1000A8F800600CB1278066800020BDE8F081D1 +:108F20000127092674B16888A08008E0022714266A +:108F300044B16888A0802869E060A88A2082287BE4 +:108F40002072E5E7A8F80060E7E730B5514C012052 +:108F5000002120706170207260720322A272E072A0 +:108F600021732174052121831F21618360744CA129 +:108F700061610A2121776077474D4FF4B06020622C +:108F80006868C11C21F00301814200D0FFDF6868DE +:108F9000606030BD30B5404C1568636810339D4249 +:108FA00002D20420136030BD3A4B5D785A6802EB60 +:108FB0000512107051700320D0801720908001207E +:108FC000D0709070002090735878401C5870606882 +:108FD00010306060002030BD70B506462D4800247A +:108FE000457807E0204600F0BBFD0178B14204D08F +:108FF000641CE4B2AC42F5D1002070BDF7B5074661 +:1090000008780C4610B3FFF7E7FF0546A7F12006E6 +:10901000202F06D0052E19D2DFE806F00F2B2B15D6 +:109020001A0000F0A8FD0DB1697800E00021401A97 +:10903000A17880B20844FF2808D8A07830B1A08871 +:10904000022831D202E0608817282DD20720FEBD09 +:10905000207AE0B161881729F8D3A1881729F5D3C0 +:10906000A1790029F2D0E1790029EFD0402804D974 +:10907000ECE7242F18D1207A48B161884FF6FB70B5 +:10908000814202D8A18881420ED90420FEBD0BE0A6 +:1090900004500200A8030020180000200000002057 +:1090A0006E5246357800000065B9207802AA012189 +:1090B000FFF770FF0028E9D12078FFF78DFF05004A +:1090C00000D1FFDF052E18D2DFE806F0030B0E08F3 +:1090D0001100A0786870A088E8800FE06088A88000 +:1090E0000CE0A078A87009E0A078E87006E054F8D9 +:1090F000020FA8606068E86000E0FFDF0020C5E7BD +:109100001A2835D00DDC132832D2DFE800F01B31ED +:10911000203131272723252D313129313131312F8C +:109120000F00302802D003DC1E2821D10720704711 +:109130003A3809281CD2DFE800F0151B0F1B1B1B57 +:109140001B1B07000020704743F20400704743F2E6 +:1091500002007047042070470D2070470F207047B1 +:109160000820704711207047132070470620704771 +:109170000320704710B5007800F0010008F02CFBC8 +:10918000BDE81040BCE710B5007800F0010008F021 +:109190002CFBBDE81040B3E70EB5017801F00101EA +:1091A0008DF80010417801F001018DF8011001786F +:1091B000C1F340018DF802104178C1F340018DF8F0 +:1091C0000310017889088DF80410417889088DF81A +:1091D000051081788DF80610C1788DF80710007998 +:1091E0008DF80800684607F037FAFFF789FF0EBDD3 +:1091F0002DE9F84FDFF8F883FE4C00264FF4907706 +:109200001FE0012000F054FD0120FFF750FE05464D +:109210003946D8F8080009F084F8686000B9FFDF23 +:10922000686807F0AAF8B0B12846FAF7ECFB2846C0 +:1092300000F044FD28B93A466968D8F8080009F0FA +:109240009BF894F9E9010428DBDA022009F0D6F949 +:1092500007460025A5E03A466968D8F8080009F0F5 +:109260008BF8F2E7B8F802104046491C89B2A8F81A +:109270000210B94201D3002141800221B8F8020056 +:1092800009F014FA002864D0B8F80200694608F022 +:1092900015FAFFF735FF00B1FFDF9DF8000078B148 +:1092A000B8F8020009F046FB5FEA000900D1FFDFD1 +:1092B000484608F0B4FD18B1B8F8020002F054F9BD +:1092C000B8F8020009F024FB5FEA000900D1FFDFD3 +:1092D000484608F09CFDE0BB0321B8F8020009F005 +:1092E000E5F95FEA000B47D1FFDF45E0DBF810004E +:1092F00010B10078FF2849D0022000F0D9FC0220EC +:10930000FFF7D5FD8246484608F08DFECAF80400F6 +:1093100000B9FFDFDAF8040008F055FF00210090E3 +:109320000170B8F802105046AAF8021001F01EFEB3 +:10933000484608F04AFF00B9FFDF504600F0BEFC87 +:1093400018B99AF80100000704D50098CBF810006E +:1093500012E024E0DBF8100038B10178491C11F06C +:10936000FF01017008D1FFDF06E0002211464846E8 +:1093700000F0CBFB00B9FFDF94F9EA01022805DB1E +:10938000B8F8020001F0B7FD0028AFD194F9E90167 +:10939000042804DB484608F07CFF00B101266D1C60 +:1093A000EDB2BD4204D294F9EA010228BFF65AAFE9 +:1093B000002E7FF422AFBDE8F84F032000F078BC08 +:1093C00010B58B4CE06008682061AFF2DB10F9F754 +:1093D00084FD607010BD87480021403801708448CA +:1093E000017085494160704770B505464FF0805067 +:1093F0000C46D0F8A410491C05D1D0F8A810C943D8 +:109400000904090C0BD050F8A01F01F001012970CC +:10941000416821608068A080287830B970BD06213D +:1094200020460CF07EFB01202870607940F0C000DF +:10943000607170BD70B54FF080540D46D4F8801047 +:10944000491C0BD1D4F88410491C07D1D4F88810DA +:10945000491C03D1D4F88C10491C0CD0D4F88010CE +:109460000160D4F884104160D4F888108160D4F889 +:109470008C10C16002E010210CF053FBD4F8900076 +:10948000401C0BD1D4F89400401C07D1D4F89800AC +:10949000401C03D1D4F89C00401C09D054F8900F14 +:1094A000286060686860A068A860E068E86070BDD7 +:1094B0002846BDE8704010210CF033BB4D480079C0 +:1094C000F5E470B54B4CE07830B3207804EB4010F5 +:1094D000407A00F00700204490F9E801002800DC01 +:1094E000FFDF2078002504EB4010407A00F00700F1 +:1094F000011991F8E801401E81F8E8012078401C2C +:10950000C0B220700F2800D12570A078401CA07038 +:109510000CF0FEF9E57070BDFFDF70BD3EB505468D +:10952000032109F0C3F80446284609F0F1F905467D +:1095300004B9FFDF206918B10078FF2800D1FFDFF0 +:1095400001AA6946284600F0E0FA60B9FFDF0AE0A8 +:10955000002202A9284600F0D8FA00B9FFDF9DF8E2 +:10956000080000B1FFDF9DF80000411E8DF80010DB +:10957000EED220690199884201D1002020613EBDD0 +:1095800070B50546A0F57F400C46FF3800D1FFDFDF +:10959000012C01D0FFDF70BDFFF790FF040000D168 +:1095A000FFDF207820F00F00401D20F0F000503049 +:1095B000207065800020207201202073BDE870407B +:1095C0007FE72DE9F04116460D460746FFF776FF87 +:1095D000040000D1FFDF207820F00F00401D20F0B4 +:1095E000F00050302070678001202072286805E06C +:1095F00018000020E8030020F81300202061A8884C +:10960000A0822673BDE8F0415BE77FB5FFF7E4FC7D +:10961000040000D1FFDF02A92046FFF70BFB05463F +:1096200003A92046FFF720FB8DF800508DF80100BC +:10963000BDF80800001DADF80200BDF80C00001DCB +:10964000ADF80400E088ADF80600684608F0ACF814 +:10965000002800D0FFDF7FBD2DE9F041FB4C06461E +:10966000207808B1082059E43046F7F752FE08B1D7 +:10967000102053E4F64D287808B9FFF766FCA87A65 +:10968000697A0844C7B200F076FAB84207D2381AAD +:10969000C1B232460020FFF77DFC0028E3D16068AC +:1096A000C01C20F00300606000F05DFB61680122D7 +:1096B0000844804601463046FFF7F2FA070012D010 +:1096C0000020FFF789FC06000BD006F1130061684B +:1096D00020F00300884200D0FFDF6878401E6870E9 +:1096E000666038461AE4002241463046FFF7D8FA51 +:1096F00000B1FFDF306860604FF6FF7060800120CE +:10970000207000200AE42DE9F0410446CF481746B6 +:109710000E46007808B10820A5E70846F7F7D3FD04 +:1097200008B110209FE7CA4D287808B9FFF70DFC53 +:10973000601E1E2807D8012C22D13078FE281FD8A1 +:10974000287700208FE7A4F120001F2805D8E0B279 +:109750003A463146BDE8F04150E4A4F140001F28EC +:1097600005D831462046BDE8F04100F0CFBAA4F15B +:10977000A0001F2804D80020A02C03D0A12C06D0C4 +:10978000072070E7317801F0010169776BE73168F4 +:109790000922F82901D38B0701D0104663E76B7CBF +:1097A00003F00303012B04D16B8BD7339CB28C42A3 +:1097B000F3D8296257E72DE9F04781460E4608465F +:1097C000F7F7A7FD48B94846F7F7C1FD28B909F1F1 +:1097D000030020F00301494502D01020BDE8F087C6 +:1097E0009B484FF0000A4030817869B1417880464B +:1097F00000EB41140834378832460021204600F03F +:109800006BFA050004D027E0A6F800A00520E5E7E4 +:10981000B9F1000F24D03088B84201D90C251FE0DF +:10982000607800F00705284600F042FA08EB0507CB +:10983000324697F8E8014946401C87F8E80120467F +:1098400007F5F47700F048FA05463878401E38707E +:10985000032000F02DFA2DB10C2D01D0A6F800A0A8 +:109860002846BBE76078794E00F00701012923D034 +:1098700002290CD0032934D0FFDF98F801104046AC +:10988000491CC9B288F801100F2935D036E061684B +:1098900021B1000702D46088FFF740FE98F8EA0182 +:1098A0004746012802D17078F9F736FB97F9EA01AB +:1098B0000428E2DBFFDFE0E7616821B14FF490723A +:1098C000B06808F059FD98F8E9014746032802D12D +:1098D0007078F9F721FB97F9E9010428CDDBFFDF68 +:1098E000CBE7C00602D56088FFF718FE98F9EB01B8 +:1098F0000628C2DBFFDFC0E780F801A08178491E9F +:109900008170617801F0070101EB080090F8E8111F +:10991000491C80F8E811A3E770B50D460446F7F737 +:10992000D2FC18B92846F7F7F4FC08B1102070BD36 +:1099300029462046BDE870400AF015BC70B50546C2 +:109940000AF034FCC4B22846F7F701FD08B1102034 +:1099500070BD35B128782C7018B1A04201D0072015 +:1099600070BD2046FDF796FE052805D10AF022FCC1 +:10997000012801D0002070BD0F2070BD70B50446D5 +:1099800015460E460846F7F79EFC18B92846F7F725 +:10999000C0FC08B1102070BD022C03D0102C01D0E7 +:1099A000092070BD2A46314620460AF00CFC0028EA +:1099B000F7D0052070BD70B514460D460646F7F782 +:1099C00082FC38B92846F7F7A4FC18B92046F7F707 +:1099D000BEFC08B1102070BD2246294630460AF070 +:1099E00011FC0028F7D0072070BD3EB50446F7F7FC +:1099F00090FC08B110203EBD684606F096FDFFF7CA +:109A00007FFB0028F7D19DF806002070BDF8080004 +:109A10006080BDF80A00A08000203EBD70B50546FC +:109A20000C460846F7F793FC20B93CB12068F7F7DD +:109A300070FC08B1102070BDA08828B121462846CE +:109A4000BDE87040FDF77EBE092070BD1800002003 +:109A5000A803002070B504460D460846F7F733FC0E +:109A600030B9601E1E2814D82846F7F72CFC08B120 +:109A70001020EAE7032C01D90720E6E704B9FFDF4D +:109A8000FC4800EB840050F8041C2846BDE87040F8 +:109A90000847A4F120001F2805D829462046BDE824 +:109AA0007040FAF7D2BBF02CE6D1A868F7F70BFCB0 +:109AB0000028DDD1284607F0DFFEBDE87040FFF743 +:109AC0001FBB70B504460D460846F7F722FC30B9B7 +:109AD000601E1E280FD82846F7F7F5FB08B11020A6 +:109AE000B3E7012C03D0022C01D0032C01D10620B6 +:109AF000ABE70720A9E7A4F120001F28F9D82946E1 +:109B00002046BDE87040FAF7F8BB08F04FB938B509 +:109B10000446D948007B00F00105D9B904F042FBA6 +:109B20000DB1226800E00022D4484178C06806F0F8 +:109B3000EAFBD2481030C0788DF8000010B101283F +:109B400002D004E0012000E000208DF8000068460B +:109B500006F063FD002D02D020682830206038BD5B +:109B600030B5C54D04466878A04200D8FFDF68686C +:109B700000EB041030BD70B5BF4800252C46467878 +:109B800007E02046FFF7ECFF4078641C2844C5B28C +:109B9000E4B2B442F5D1284657E72DE9F0410C462E +:109BA00007464FF0000800F00CF90646FF2801D9DF +:109BB0004FF013083868C01C20F003023A6054EAE2 +:109BC000080421D1AC48F3B2072124300CF0AEF9DF +:109BD00009E0072C10D2DFE804F0060408080A04A4 +:109BE0000600A74804E0A74802E0A74800E0A7480D +:109BF0000CF0BCF9054600E0FFDFA54200D0FFDF16 +:109C0000641CE4B2072CE4D3386800EB061038601B +:109C1000404628E5021D5143452900D2452108440C +:109C2000C01CB0FBF2F0C0B270472DE9FC5F0646E5 +:109C300091484FF000088B464746444690F8019003 +:109C400022E02046FFF78CFF050000D1FFDF687897 +:109C500069463844C7B22846FEF7ECFF824601A9A0 +:109C60002846FFF701F80346BDF804005246001DE0 +:109C700081B2BDF80000001D80B208F095FD6A7841 +:109C8000641C00FB0288E4B24C45DAD13068C01C89 +:109C900020F003003060BBF1000F00D000204246EE +:109CA000394608F08FFD316808443060BDE8FC9FFC +:109CB0007149403108710020C87070476E494031C9 +:109CC000CA782AB10A7801EB42110831814201D0E9 +:109CD00001207047002070472DE9F04106460078CA +:109CE000154600F00F0400201080601E0F46052866 +:109CF00000D3FFDF5F482A46183800EB840039465E +:109D000050F8043C3046BDE8F041184770B50C46A9 +:109D1000402802D0412806D120E0A07861780D18B3 +:109D2000E178814201D907208FE62078012801D906 +:109D300013208AE6FF2D08D80AF0CEFB06460BF06A +:109D40009FFD301A801EA84201DA12207DE64A48A3 +:109D50002168816021790173002076E6BDE87040BA +:109D6000084600F059B82DE9F0470027DFF808A1B0 +:109D70003E463D46B9463C469AF801800AE02046F8 +:109D8000FFF7EEFE4178807B0E4410FB0155641C0A +:109D9000E4B27F1C4445F2D109EB8700C6EBC60153 +:109DA00000EB81009AF8092000EB850101EBC2016C +:109DB0009AF80A209AF80B0001EBC20101EB80002F +:109DC0000CE52DE9F047DFF8B0900026344699F80D +:109DD000090099F80A2099F801700244D5B299F85F +:109DE0000B20104400F0FF0808E02046FFF7B8FE03 +:109DF000817B407811FB0066641CE4B2BC42F4D164 +:109E000099F8091099F80A0029442944414400B1FD +:109E1000012008443044E1E438B50446407800F0BD +:109E20000300012803D002280BD0072038BD60684A +:109E300058B1F7F795FAD0B96068F7F788FA20B902 +:109E400015E06068F7F73FFA88B969462046FCF7E5 +:109E50009DF80028EAD1607800F00300022817D1AD +:109E60009DF80000A0B16068F7F771FA80B110208A +:109E700038BD000024500200A80300201800002074 +:109E80004B410000E7AC0000E92F0000EB3E010071 +:109E90006189F8290DD8208988420AD8607800F0B5 +:109EA00003020A48012A06D1D731026A89B28A42DE +:109EB00001D20920DCE794E80E0000F1100585E8E6 +:109EC0000E000AB9002101830020D1E7A803002079 +:109ED0002DE9F041074614468846084601F022FD68 +:109EE000064608EB88001C22796802EBC0000D18BA +:109EF000688C58B14146384601F01CFD014678682F +:109F00000078C200082305F120000CE0E88CA8B11D +:109F10004146384601F015FD01467868082340782F +:109F2000C20005F1240008F07EFA38B10621217242 +:109F30006681D0E90010C4E9031009E028780928F7 +:109F40000BD00520207266816868E06000202870D0 +:109F50002046BDE8F04101F0DBBC0720207266819D +:109F6000F4E72DE9F04116460D460746406801EB3F +:109F700085011C2202EBC1014418204601F003FDBB +:109F800040B10021708865F30F2160F31F41062066 +:109F90000CF0A6F809202070324629463846BDE864 +:109FA000F04195E72DE9F0410E46074600241C21BB +:109FB000F07816E004EB8403726801EBC303D25C13 +:109FC0006AB1FFF77BFA050000D1FFDF6F802A46F8 +:109FD00021463046FFF7C5FF0120BDE8F081641C33 +:109FE000E4B2A042E6D80020F7E770B506460024A8 +:109FF0001C21C0780AE000BF04EB8403726801EB07 +:10A00000C303D5182A782AB1641CE4B2A042F3D85D +:10A01000402070BD282128461AF0F3FD7068808921 +:10A020002881204670BD70B5034600201C25DC78D1 +:10A030000DE000BF00EB80065A6805EBC60632440F +:10A04000167816B1128A8A4204D0401CC0B28442EB +:10A05000F0D8402070BDF0B5044600201C26E578FD +:10A060000EE000BF00EB8007636806EBC7073B44C8 +:10A070001F788F4202D15B78934204D0401CC0B25B +:10A080008542EFD84020F0BD0078032801D00020A1 +:10A090007047012070470078022801D000207047E7 +:10A0A000012070470078072801D000207047012068 +:10A0B00070472DE9F041064688461078F17815463C +:10A0C000884200D3FFDF2C781C27641CF078E4B2B0 +:10A0D000A04201D8201AC4B204EB8401706807EBD7 +:10A0E000C1010844017821B14146884708B12C706C +:10A0F00073E72878A042E8D1402028706DE770B55A +:10A1000014460B880122A240134207D113430B804F +:10A1100001230A22011D08F050F9047070BD2DE9D9 +:10A12000FF4F81B00878DDE90E7B9A4691460E46D6 +:10A1300040072CD4019808F0FDFB040000D1FFDF9C +:10A1400007F1040820461FFA88F107F03CFD0500DE +:10A1500000D1FFDF204629466A4607F086FF0098B7 +:10A16000A0F80370A0F805A0284608F02CF80178A4 +:10A1700069F306016BF3C711017020461FFA88F1DD +:10A1800007F064FD00B9FFDF019806F02EF806EB3A +:10A190000900017F491C017705B0BDE8F08F2DE96A +:10A1A000F84F0E469A4691460746032108F07EFA7C +:10A1B0000446008DDFF8B885002518B198F8000036 +:10A1C000B0421ED1384608F0B5FB070000D1FFDFD2 +:10A1D00009F10401384689B207F0F5FC050010D0FA +:10A1E000384629466A4607F040FF009800210A4693 +:10A1F0000180817006F0B2F80098C01DCAF8000016 +:10A2000021E098F80000B04216D104F1260734F896 +:10A21000341F012000FA06F911EA090F00D0FFDF10 +:10A220002088012340EA090020800A22391D38468F +:10A2300008F0DEF8067006E0324604F1340104F15D +:10A240002600FFF75CFF0A2188F800102846BDE8C9 +:10A25000F88FFEB515460C46064602AB0C220621C9 +:10A26000FFF79DFF002827D00299607812220A701C +:10A27000801C487008224A80A07002982988052313 +:10A2800081806988C180A9880181E9884181002590 +:10A290000C20CDE90005062221463046FFF73FFF9E +:10A2A0002946002266F31F41F02310460BF06EFE94 +:10A2B0006078801C60700120FEBDFEB514460D461E +:10A2C0000622064602AB1146FFF769FF002812D0AE +:10A2D000029B132000211870A87858700220588023 +:10A2E0009C800620CDE90001024605232946304620 +:10A2F000FFF715FF0120FEBD2DE9FE430C46804609 +:10A3000044E002AB0E2207214046FFF748FF002839 +:10A3100041D060681C2267788678BF1C06EB8601F6 +:10A3200002EBC101451802981421017047700A21FF +:10A330004180698A0181E98A4181A9888180A9894E +:10A340008181304601F0EEFA029905230722C88088 +:10A350006F700420287000250E20CDE900052146ED +:10A360004046FFF7DCFE294666F30F2168F31F41E4 +:10A37000F023002206200BF009FE6078FD49801CC6 +:10A38000607062682046921CFFF793FE60688078D8 +:10A390004028B6D10120BDE8FE83FEB50D46064635 +:10A3A00038E002AB0E2207213046FFF7F8FE002806 +:10A3B00035D068681C23C17801EB810203EBC2022F +:10A3C0008418029815220270627842700A22428034 +:10A3D000A2894281A2888281084601F0A3FA01463F +:10A3E00002988180618AC180E18A0181A088B8B128 +:10A3F0000020207000210E20CDE900010523072256 +:10A4000029463046FFF78BFE6A68DB492846D21C96 +:10A41000FFF74FFE6868C0784028C2D10120FEBD1A +:10A420000620E6E72DE9FE430C46814644E020463F +:10A4300001F093FAD0B302AB082207214846FFF798 +:10A44000AEFE0028A7D060681C2265780679AD1C96 +:10A4500006EB860102EBC10147180298B7F810809D +:10A4600006210170457004214180304601F05AFAFE +:10A470000146029805230722C180A0F804807D7060 +:10A48000082038700025CDE9000521464846FFF731 +:10A4900046FE294666F30F2169F31F41F02300228F +:10A4A00006200BF073FD6078801C60706268B34911 +:10A4B0002046121DFFF7FDFD606801794029B6D1E5 +:10A4C000012068E72DE9F34F83B00E4680E0304667 +:10A4D00001F043FA002875D071681C2091F80680BD +:10A4E00008EB880200EBC2000C184146304601F030 +:10A4F00028FA0146A078C30070684078C20004F1D1 +:10A50000240007F0ACFF07468088E18B401A80B238 +:10A51000002581B3AA46218B814200D80846814696 +:10A52000024602AB07210398FFF739FE010028D04D +:10A53000BAF1000F03D0029AB888022510808B462A +:10A54000E28B3968A9EB05001FFA80FA0A440398E8 +:10A55000009208F0EFF9ED1D009A59465346009518 +:10A5600007F0FDFDE08B504480B2E083B98888425B +:10A5700009D1012508E0FFE7801C4FF0010A80B2F5 +:10A58000C9E7002008E60025CDE90095238A0722C7 +:10A5900031460398FFF7C3FDE089401EE0818DB18D +:10A5A000A078401CA0707068F178427811FB02F12D +:10A5B000CAB2816901230E3007F0FFFE80F80080E7 +:10A5C0000020E08372686E493046921DFFF771FDEE +:10A5D0007068817940297FF47AAF0120DCE570B59D +:10A5E000064648680D4614468179402910D104EB8F +:10A5F00084011C2202EBC101084401F0E5F90028A6 +:10A6000006D06868294684713046BDE8704059E735 +:10A6100070BDFEB50C460746002645E0204601F019 +:10A620009CF9D8B360681C22417901EB810102EBEF +:10A63000C1014518688900B9FFDF02AB0822072174 +:10A640003846FFF7ACFD002833D002996078162217 +:10A650000A70801C4870042048806068407901F0CE +:10A6600061F9014602980523072281806989C1802A +:10A670000820CDE9000621463846FFF750FD6078F6 +:10A68000801C6070A88969890844B0F5803F00D3B8 +:10A69000FFDFA88969890844A8816E816268394909 +:10A6A0002046521DFFF705FD606841794029B5D16C +:10A6B0000120FEBD30B5438C458BC3F3C704002396 +:10A6C00045B1838B641EED1AC38A6D1E1D4495FB34 +:10A6D000F3F3E4B22CB1008918B1A04200D82046AF +:10A6E00003444FF6FF70834200D3034613800C707F +:10A6F00030BD2DE9FC41074616460D46486802EB81 +:10A7000086011C2202EBC10144186A4601A92046B9 +:10A71000FFF7D0FFA089618901448AB2BDF800101B +:10A72000914212D0081A00D50020608168684079F3 +:10A7300040280AD1204601F03DF9002805D068687C +:10A74000294646713846FFF764FFBDE8FC812DE9D4 +:10A75000FE4F8946804615465088032107F0A6FF24 +:10A760008346B8F8020040280ED240200DE00000D9 +:10A770002C00002089A0000097A00000A5A00000E8 +:10A78000C9B90000B5B90000403880B28246014620 +:10A79000584601F0E2F800287ED00AEB8A001C221D +:10A7A000DBF8041002EBC0000C18204601F0EBF8B7 +:10A7B000002877D1B8F80000E18A88423CD8A18906 +:10A7C000D1B348456ED100265146584601F0B2F843 +:10A7D000218C0F18608B48B9B9F1020F62D3B8F819 +:10A7E00004006083618A884226D80226A9EB06000D +:10A7F0001FFA80F9B888A28B801A002814DD494618 +:10A80000814500DA084683B2688869680291396830 +:10A810000A44CDE9003208F07BF8DDE90121F61D9C +:10A82000009B009607F067FCA18B01EB090080B24A +:10A83000A083618B884207D9688803B05246594685 +:10A84000BDE8F04F01F0DDB81FD14FF009002872CC +:10A85000B8F802006881D7E90001C5E90401608BFE +:10A86000A881284601F054F85146584601F062F894 +:10A870000146DBF8040008230078C20004F1200040 +:10A8800007F0D1FD0020A0836083A0890AF0FF02B9 +:10A89000401EA081688800E004E003B05946BDE88E +:10A8A000F04F26E7BDE8FE8F2DE9F041064615463C +:10A8B0000F461C461846F6F706FD18B92068F6F74D +:10A8C00028FD08B1102013E47168688C0978B0EB9A +:10A8D000C10F01D313200BE43946304601F02AF8AA +:10A8E0000146706808230078C20005F1200007F0D7 +:10A8F00064FDD4E90012C0E900120020E3E710B5BE +:10A900000446032107F0D2FE0146007800F0030060 +:10A91000022805D02046BDE8104001F1140298E459 +:10A920008A8A2046BDE81040C7E470B5044603217A +:10A9300007F0BCFE054601462046FFF773FD0028E0 +:10A9400016D029462046FFF764FE002810D029467D +:10A950002046FFF722FD00280AD029462046FFF7AF +:10A96000CBFC002804D029462046BDE87040A9E56C +:10A9700070BD2DE9F0410C4680461EE0E17842783A +:10A9800011FB02F1CAB2816901230E3007F04BFDC1 +:10A99000077860681C22C179491EC17107EB8701E5 +:10A9A000606802EBC10146183946204600F0D5FF29 +:10A9B00018B1304600F0E0FF20B16068C17900298D +:10A9C000DCD180E7FEF77AFD050000D1FFDF0A2029 +:10A9D0002872384600F0A6FF68813946204600F00C +:10A9E000B0FF0146606808234078C20006F12400E9 +:10A9F00007F019FDD0E90010C5E90310A5F80280A1 +:10AA0000284600F085FFB07800B9FFDFB078401E1F +:10AA1000B07058E770B50C460546032107F046FEB6 +:10AA200001464068C2792244C2712846BDE87040A0 +:10AA30009FE72DE9FE4F8246507814460F464FF0AF +:10AA4000000800284FD0012807D0022822D0FFDFBD +:10AA50002068B8606068F86024E702AB0E22082125 +:10AA60005046FFF79CFB0028F2D0029815210523E1 +:10AA70000170217841700A214180C0F80480C0F83B +:10AA80000880A0F80C80628882810E20CDE9000841 +:10AA9000082221E0A678304600F044FF054606EB88 +:10AAA00086012C22786802EBC1010822465A02ABCB +:10AAB00011465046FFF773FB0028C9D002980721C2 +:10AAC0000170217841700421418008218580C68071 +:10AAD000CDE9001805230A4639465046FFF71FFB0B +:10AAE00087F80880DEE6A678022516B1022E13D07C +:10AAF000FFDF2A1D914602AB08215046FFF74FFBAE +:10AB00000028A5D002980121022E01702178417001 +:10AB10004580868002D005E00625EAE7A188C1804D +:10AB2000E1880181CDE90098052308223946504685 +:10AB3000D4E710B50446032107F0B8FD014600F143 +:10AB400008022046BDE8104073E72DE9F05F0C468F +:10AB500001281DD0957992F80480567905EB85017E +:10AB60001F2202EBC10121F0030B08EB060111FBD0 +:10AB700005F14FF6FF7202EAC10909F1030115FB65 +:10AB80000611F94F21F0031A40B101283DD124E00C +:10AB90006168E57891F800804E78DFE7594678687B +:10ABA00007F0BFFB606000B9FFDF594660681AF02C +:10ABB0004AF8E5705146786807F0B3FB6168486170 +:10ABC00000B9FFDF6068426902EB090181616068DA +:10ABD00080F800806068467017E0606852464169FE +:10ABE000786807F0C9FB5A466168786807F0C4FBCB +:10ABF000032007F003FD0446032007F007FD201A99 +:10AC0000012802D1786807F081FB0BEB0A00BDE850 +:10AC1000F09F02460021022097E773B5D24D0A202B +:10AC20002870009848B100244FEA0D0007F05BFB44 +:10AC3000002C01D1009969607CBD01240020F5E75A +:10AC400070B50C4615463821204619F0FCFF012648 +:10AC500066700A2104F11C0019F0F5FF05B9FFDF49 +:10AC6000297A207861F301002070A879002817D094 +:10AC70002A4621460020FFF768FF6168402088705F +:10AC80006168C8706168087161684871616888713D +:10AC90006168288808816168688848816068868161 +:10ACA00070BDC878002802D0002201204DE770470F +:10ACB00070B50546002165F31F4100200BF010FA26 +:10ACC0000321284607F0F2FC040000D1FFDF2146F3 +:10ACD0002846FFF767F9002804D0207840F01000DC +:10ACE0002070012070BD2DE9FF4180460E460F0CFB +:10ACF000FEF7E4FB050007D06F800321384607F01C +:10AD0000D5FC040008D106E004B03846BDE8F041A7 +:10AD10001321F9F74FBEFFDF5FEA080005D0B8F155 +:10AD2000060F18D0FFDFBDE8FF8120782A4620F00B +:10AD3000080020700020ADF8020002208DF800000D +:10AD40004FF6FF70ADF80400ADF8060069463846CE +:10AD5000F9F727FAE7E7C6F3072101EB81021C2385 +:10AD6000606803EBC202805C042803D008280AD084 +:10AD7000FFDFD8E7012000904FF440432A462046E9 +:10AD800000F008FECFE704B02A462046BDE8F041B7 +:10AD9000FFF7E7B82DE9F05F0027B0F80A9090467A +:10ADA0000C4605463E46B9F1400F01D2402001E075 +:10ADB000A9F140001FFA80FA287AC01E08286BD239 +:10ADC000DFE800F00D04192058363C4772271026A2 +:10ADD000002C6CD0D5E90301C4E902015CE07027C6 +:10ADE0001226002C63D00A2205F10C0104F10800A0 +:10ADF00019F0CDFE50E071270C26002C57D0E868E2 +:10AE0000A06049E0742710269CB3D5E90301C4E98A +:10AE100002016888032107F049FC8346FEF74EFBD8 +:10AE200002466888508051465846FFF751F833E093 +:10AE300075270A26ECB1A88920812DE076271426F3 +:10AE4000BCB105F10C0004F1080307C883E8070052 +:10AE500022E07727102664B1D5E90301C4E9020195 +:10AE60006888032107F022FC01466888FFF781FD0E +:10AE700012E01CE073270826CCB16888032107F094 +:10AE800015FC01460078C00606D56888FFF78AF8E9 +:10AE900010B96888F8F79BFDA8F800602CB12780EE +:10AEA000A4F8069066806888A0800020AFE6A8F825 +:10AEB0000060FAE72DE9FC410C461E461746804625 +:10AEC000032107F0F3FB05460A2C0AD2DFE804F061 +:10AED00005050505050509090907042303E00623FF +:10AEE00001E0FFDF0023CDE90076224629464046F7 +:10AEF000FFF715F929E438B50546A0F57F40FF387E +:10AF000030D0284607F004FD040000D1FFDF2046C2 +:10AF100007F089F8002815D001466A46204607F058 +:10AF2000A4F800980321B0F80540284607F0BEFBBE +:10AF30000546052C03D0402C05D2402404E0007ABD +:10AF400080B1002038BD403CA4B2214600F005FD90 +:10AF500040B1686804EB84013E2202EBC101405A13 +:10AF60000028EFD0012038BD2C0000202DE9F04F43 +:10AF7000054689B0408807F0CBFC040000D1FFDF14 +:10AF800006AA2046696800F0C1FC069C001F34F840 +:10AF9000031F218063886380228881B28A4205D1A1 +:10AFA000042B0AD0052B1DD0062B15D02A4620468F +:10AFB000FFF7CDFB09B0BDE8F08F1646241D2A46E9 +:10AFC00021463046F7F75BFA0828F3D12A46214696 +:10AFD0003046FCF7FEFBEDE76888211D6B68FAF749 +:10AFE00043FCE7E717466888032107F05FFB4FF053 +:10AFF00000088DF804800646ADF80680042FD9D3EA +:10B000006279002AD6D020794FF6FF794FF01C0ADA +:10B0100013282CD008DC012878D0062847D0072830 +:10B0200075D0122874D106E0142872D0152871D07A +:10B0300016286DD1ACE10C2F6AD1307800F00301F5 +:10B04000022965D140F0080030706079B0700120AD +:10B050008DF804002089ADF808006089ADF80A0079 +:10B06000A089ADF80C00E089ADF80E0019E0B078C9 +:10B0700090429FD1307801079CD5062F9AD120F0BD +:10B08000080030706888414660F31F4100200BF0D3 +:10B0900027F802208DF80400ADF808902089ADF85B +:10B0A0000A0068882A4601A9F9F77BF882E7082F89 +:10B0B00080D12789B4F80A90402F01D2402001E0C6 +:10B0C000A7F1400080B280460146304600F045FCC2 +:10B0D00008B3716808EB88002C2202EBC000095A03 +:10B0E0004945E3D1FE4807AAD0E90210CDE907108F +:10B0F00060798DF81C0008F0FF048DF81E40688808 +:10B100003146FFF796FC2A46214639E0B6E014E0C6 +:10B110003CE039E0E6E0F248D0E90010CDE9071064 +:10B120006079ADF820708DF81C00ADF82290688829 +:10B1300007AA3146FFF77DFC3CE7082FB6D16089AE +:10B14000B4F80880402801D2402000E0403887B29F +:10B150003946304600F001FC0028A7D007EB8702F3 +:10B1600071680AEBC2000844028A42459ED1017808 +:10B1700008299BD140786179884297D1F9B22A4653 +:10B180003046FEF7EEFE15E70E2F07D0CDF81C80F7 +:10B19000CDF8208060798DF81C00C8E76189E789C7 +:10B1A0008B46B4F80C903046FEF73DFFABF1400102 +:10B1B000402901D309204AE0B9F1170F01D3172F15 +:10B1C00001D20B2043E040280ED000EB80027168D2 +:10B1D0000AEBC20008440178012903D14078617963 +:10B1E0008842A9D00A2032E03046FEF7FEFE014632 +:10B1F00040282BD001EB810372680AEBC30002EBFD +:10B200000008012288F80020627988F8012070681F +:10B2100022894089B84200D93846248A03232B72F8 +:10B22000AA82EF812882A5F80C906C82084600F073 +:10B2300079FB6881A8F81490A8F81870A8F80E4057 +:10B24000A8F810B0284600F063FBB3E604200521FF +:10B250002972A5F80A80E88101212973A049D1E962 +:10B260000421CDE9072161798DF81C10ADF81E008D +:10B27000688807AA3146FFF7DCFBE3E7062FE4D333 +:10B28000B078904215D13078010712D520F008002F +:10B2900030706888414660F31F4100200AF020FFAB +:10B2A00002208DF804002089ADF80800ADF80A905E +:10B2B000F7E604213046FEF7CEFE04464028C4D00F +:10B2C0000220830300902A462146304600F062FBAC +:10B2D0004146688864F30F2160F31F4106200AF09D +:10B2E000FFFE67E60E2FB0D104213046FEF7B3FE15 +:10B2F00081464028A9D04146688869F30F2160F350 +:10B300001F4106200AF0ECFE208A0790E089009099 +:10B310007068A7894089B84200D938468346B4F896 +:10B320000A8020890590484600F0FCFA6881079859 +:10B3300040B10220079B00902A464946304600F063 +:10B3400029FB37E6B8F1170F1ED3172F1CD30420A3 +:10B35000287200986882EF81A5F810B0A5F80C80DB +:10B3600009EB89020AEBC2007168009A0C18059873 +:10B37000A4F81480A4F818B0E2812082284600F0D6 +:10B38000C7FA0620207015E601200B230090D3E7B2 +:10B39000082FA6D121893046FEF745FE07464028F2 +:10B3A0009FD007EB870271680AEBC2000844804611 +:10B3B00000F0E9FA002894D16489B8F80E0020441E +:10B3C000B0F5803F05D368883A46314600F019FB56 +:10B3D000F0E5002C85D0A8F80E0068883A46314682 +:10B3E000FFF7FDF808202872384600F09BFA6881C4 +:10B3F000AC8127E770B50D460646032107F056F9E4 +:10B40000040004D02078000704D5112070BD43F259 +:10B41000020070BD2A4621463046FEF71AFF18B9D1 +:10B42000286860616868A061207840F0080020709A +:10B43000002070BD70B50D460646032107F036F9B1 +:10B44000040004D02078000704D4082070BD43F223 +:10B45000020070BD2A4621463046FEF72EFF00B995 +:10B46000A582207820F008002070002070BD2DE912 +:10B47000F04F0E4691B08046032107F017F90446BD +:10B48000404607F057FA07460020079008900990B9 +:10B49000ADF830000A9002900390049004B9FFDFE9 +:10B4A0000DF108091FBBFFDF21E038460BA9002280 +:10B4B00006F07CFC9DF82C0000F07F050A2D00D3DF +:10B4C000FFDF6019017F491E01779DF82C000006FF +:10B4D0000DD52A460CA907A8FEF711FE02E00000D0 +:10B4E0003050020019F80510491C09F80510761EA5 +:10B4F000F6B2DAD204F13400FA4D04F1260BDFF88B +:10B50000E8A304F12A07069010E05846069900F0D7 +:10B510006AFA064628700A2800D3FFDF5AF8261078 +:10B5200040468847E08CC05DB04202D0208D0028A4 +:10B53000EBD10A202870EC4D4E4628350EE00CA9C0 +:10B5400007A800F050FA0446375D55F8240000B90A +:10B55000FFDF55F82420394640469047BDF81E00CD +:10B560000028ECD111B026E510B5032107F09EF8B4 +:10B57000040000D1FFDF0A2104F11C0019F063FB75 +:10B58000207840F00400207010BD10B50C46032157 +:10B5900007F08CF82044007F002800D0012010BD67 +:10B5A0002DE9F84F894615468246032107F07EF8BB +:10B5B000070004D02846F5F786FE40B903E043F2C1 +:10B5C0000200BDE8F88F4846F5F7A3FE08B1102049 +:10B5D000F7E7786828B169880089814201D9092094 +:10B5E000EFE7B9F800001C2418B1402809D2402028 +:10B5F00008E03846FEF7F9FC8046402819D11320B0 +:10B60000DFE7403880B280460146384600F0A5F9B1 +:10B6100048B108EB8800796804EBC000085C012899 +:10B6200003D00820CDE70520CBE7FDF747FF060054 +:10B630000BD008EB8800796804EBC0000C18B9F84F +:10B64000000020B1E88910B113E01120B9E7288883 +:10B65000172802D36888172801D20720B1E7686845 +:10B6600038B12B1D224641463846FFF71DF9002808 +:10B67000A7D104F10C0269462046FFF71BF8288881 +:10B6800060826888E082B9F8000030B10220207042 +:10B69000E889A080E889A0B12BE003202070A88968 +:10B6A000A08078688178402905D180F802803946E9 +:10B6B0005046FEF721FE404600F034F9A9F800009C +:10B6C00021E07868218B4089884200D90846208390 +:10B6D000A6F802A004203072B9F800007081E08959 +:10B6E0007082F181208B3082A08AB081304600F0D8 +:10B6F0000FF97868C178402905D180F80380394670 +:10B700005046FEF74AFE00205BE770B50D46064640 +:10B71000032106F0CBFF040003D0402D04D24025C6 +:10B7200003E043F2020070BD403DADB2294600F097 +:10B7300014F958B105EB85011C22606802EBC101C8 +:10B74000084400F020F918B1082070BD052070BD34 +:10B750002A462146304600F054F9002070BD2DE9FC +:10B76000F0410D4616468046032106F09FFF044631 +:10B77000402D01D2402500E0403DADB28CB12946BC +:10B7800000F0EBF880B105EB85011C22606802EB4C +:10B79000C1014718384600F0F6F838B10820BDE876 +:10B7A000F08143F20200FAE70520F8E733463A4613 +:10B7B00029462046FFF778F80028F0D1EAB2214662 +:10B7C0004046FEF796FF0020E9E72DE9F0410D46DF +:10B7D00016468046032106F069FF0446402D01D23B +:10B7E000402500E0403DAFB224B13046F5F76BFD97 +:10B7F00038B902E043F20200D1E73068F5F763FDA3 +:10B8000008B11020CBE73946204600F0A6F860B119 +:10B8100007EB87011C22606802EBC101451828462E +:10B8200000F0B1F818B10820B9E70520B7E7B088F3 +:10B83000A98A884201D90C20B1E76168E88C49786F +:10B84000B0EBC10F01D31320A9E73946204600F021 +:10B8500078F80146606808234078C20005F12400AA +:10B8600006F0ABFDD6E90012C0E90012FAB221469B +:10B870004046FEF7B4FE002091E72DE9F0470D4663 +:10B880001F4690468146032106F010FF0446402DD6 +:10B8900001D2402001E0A5F1400086B23CB14DB19B +:10B8A0003846F5F754FD50B11020BDE8F08743F25B +:10B8B0000200FAE76068C8B1A0F80C8024E03146C5 +:10B8C000204600F04AF888B106EB86011C22606829 +:10B8D00002EBC1014518284600F055F840B1082098 +:10B8E000E3E700002C000020485002000520DCE7C0 +:10B8F000A5F80880F2B221464846FEF7FAFE1FB1CD +:10B90000A8896989084438800020CEE706F0ADBBDD +:10B91000017821F00F01491C21F0F0011031017074 +:10B92000FDF7CFBD10B50446402800D9FFDF4034F5 +:10B93000A0B210BD406842690078484302EBC000E5 +:10B940007047C2784068037812FB03F2437840697D +:10B9500001FB032100EBC1007047C2788A4209D97C +:10B96000406801EB81011C2202EBC101405C08B17F +:10B9700001207047002070470078062801D9012077 +:10B980007047002070470078062801D001207047DA +:10B9900000207047F0B401EB81061C27446807EBD8 +:10B9A000C6063444049D05262670E3802571F0BC4C +:10B9B000FEF78EBA10B5418911B1FFF7DDFF08B16E +:10B9C000002010BD012010BD10B5C18C8278B1EBF4 +:10B9D000C20F04D9C18911B1FFF7CEFF08B1002011 +:10B9E00010BD012010BD10B50C4601230A22011D17 +:10B9F00006F019FD007821880122824091432180C0 +:10BA000010BDF0B402EB82051C264C6806EBC505A0 +:10BA1000072363554B681C79402C03D11A71F0BC85 +:10BA2000FEF700BDF0BC704710B5EFF3108000F0DA +:10BA3000010472B6F7484178491C417040780128EA +:10BA400001D109F08DFF002C00D162B610BD70B598 +:10BA5000F04CA07848B90125A570FFF7E5FF09F083 +:10BA600090FF20B1002009F05AFF002070BD4FF078 +:10BA70008040E570C0F80453F7E770B5EFF310802D +:10BA800000F0010572B6E34C607800B9FFDF607822 +:10BA9000401E6070607808B909F066FF002D00D183 +:10BAA00062B670BDDB4810B5817821B10021C1704C +:10BAB0008170FFF7E2FF002010BD10B5044609F0C9 +:10BAC00060FFD4498978084000D001202060002020 +:10BAD00010BD10B5FFF7A8FF09F053FF02220123A4 +:10BAE000CC49540728B1CC48026023610320087276 +:10BAF00002E00A72C4F804330020887110BD2DE9F9 +:10BB0000F84FDFF810934278817889F804200026F6 +:10BB100089F80510074689F806600078DFF8FCB25E +:10BB2000354620B1012811D0022811D0FFDF09F0DD +:10BB30003AFF4FF0804498B109F03CFFB0420FD17A +:10BB4000304609F03BFF0028FAD041E00126EEE73D +:10BB5000FFF76AFF58460168C907FCD00226E6E7EE +:10BB60000120E060C4F80451AD490E600107D1F82E +:10BB70004412AB4AC1F3423124321160A849343136 +:10BB800008604FF0020AC4F804A3A060A548016849 +:10BB9000C94341F3001101F10108016841F01001AE +:10BBA000016000E020BFD4F804010028FAD030463C +:10BBB00009F004FF0028FAD0B8F1000F04D1994829 +:10BBC000016821F010010160C4F808A3C4F8045111 +:10BBD00099F805004E4680B1387870B909F0D1FE69 +:10BBE00080460AF065F86FF00042B8F1000F02D00D +:10BBF000C6E9032001E0C6E90302DBF80000C00744 +:10BC000001D009F0BAFE387810B13572BDE8F88F6E +:10BC10004FF01808C4F808830127A7614FF4A070FB +:10BC2000ADF80000BDF80000411EADF80010F9D2DB +:10BC3000C4F80C51C4F810517648C01D09F0D0FE6C +:10BC40003570FFF746FF676175493079203108602C +:10BC5000C4F80483DAE770B5050000D1FFDF4FF0C8 +:10BC600080424FF0FF30C2F808030021C2F80011F3 +:10BC7000C2F80411C2F80C11C2F81011654C6170C1 +:10BC800009F08BFE10B10120A0706070634800685D +:10BC9000C00701D009F071FE2846BDE870402EE7CC +:10BCA0005C48007A002800D0012070472DE9FC5F35 +:10BCB0005D48D0F800905C4A5C4908321160840607 +:10BCC000D4F8080100B10120D4F8001111B14FF0EF +:10BCD000010801E04FF00008D4F8041101B101217E +:10BCE0000191D4F80C1101B101210091D4F8101187 +:10BCF00001B10121474D8A4695F800B0002620B1D8 +:10BD0000C4F80861012009F00AFE4248C01D09F08C +:10BD10006FFE00B1FFDF0127B8F1000F10D0C4F8AB +:10BD20000873E87818B1EE70002009F0F8FD287A61 +:10BD3000022805D1032028723748022101602761BB +:10BD4000019808B1C4F80461009850B1C4F80C61BE +:10BD5000287A032800D0FFDF2F4806602F72FFF7F4 +:10BD60008CFEBAF1000F07D0C4F81061287A0128C0 +:10BD700001D100F05DF86761BBF1000F07D02E70B4 +:10BD8000287A012801D1FFF7A4FEFFF776FE2148AB +:10BD9000C01D09F043FE2449091DC1F80090BDE80B +:10BDA000FC9F1C4810B5C01D09F022FE194940B186 +:10BDB000012008704FF0E021C1F80002BDE81040FA +:10BDC00032E6087A012801D1FFF783FE1148BDE869 +:10BDD0001040C01D09F022BE70B50E4CA07808B905 +:10BDE00009F0C2FD01208507A861207A00260328FA +:10BDF0000AD100BFD5F80C0120B9002009F0DEFD02 +:10BE00000028F7D1C5F80C6126724FF0FF30C5F855 +:10BE1000080370BD3C000020340C00400C040040BE +:10BE20001805004010ED00E010050240010000017F +:10BE300070B5134C6079F0B1012803D0A179401E90 +:10BE4000814218DA09F09DFD054609F031FF61795C +:10BE5000012902D9A179491CA1710DB1216900E024 +:10BE6000E168411A022902DA11F1020FD1DC0DB1A9 +:10BE7000206100E0E060BDE870402AE6C9E700000C +:10BE80003C00002010B5202000F07FF8202000F0BA +:10BE90008DF84D49202081F80004F5F7AFFA4B49A1 +:10BEA00008604B48D0F8041341F00101C0F80413B6 +:10BEB000D0F8041341F08071C0F804134249012006 +:10BEC0001C39C1F8000110BD10B5202000F05DF84C +:10BED0003E480021C8380160001D01603D4A481EEF +:10BEE00010603B4AC2F80803384B1960C2F80001E1 +:10BEF000C2F8600138490860BDE81040202000F019 +:10BF000055B834493548091F0860704731493348EE +:10BF1000086070472D48C8380160001D521E02603D +:10BF200070472C4901200860BFF34F8F70472DE9FF +:10BF3000F0412849D0F8188028480860244CD4F8EB +:10BF400000010025244E6F1E28B14046F5F7B4F9D4 +:10BF500040B9002111E0D4F8600198B14046F5F7EE +:10BF6000ABF948B1C4F80051C4F860513760BDE87E +:10BF7000F041202000F01AB831684046BDE8F04199 +:10BF800018F08CBEFFDFBDE8F08100280DDB00F06B +:10BF90001F02012191404009800000F1E020C0F81B +:10BFA0008011BFF34F8FBFF36F8F7047002809DBFD +:10BFB00000F01F02012191404009800000F1E020C3 +:10BFC000C0F880127047000020E000E0C806024080 +:10BFD0000000024018050240000402400100000178 +:10BFE0000F4A12680D498A420CD118470C4A126850 +:10BFF0000A4B9A4206D101B509F02CFEFFF781FFEA +:10C00000BDE801400749096809580847064807493B +:10C01000054A064B7047000000000000BEBAFECA89 +:10C020005400002004000020781300207813002022 +:10C03000F8B51D46DDE906470E000AD006F07AFC89 +:10C040002346FF1DBCB231462A46009406F087F80D +:10C05000F8BDD0192246194618F054FD2046F8BD07 +:10C0600070B50D460446102118F0CBFD2581172030 +:10C070006081A07B40F00A00A07370BD4FF6FF7294 +:10C080000A80014602200AF02BB8704700897047E9 +:10C09000827BD30701D1920703D4808908800020D6 +:10C0A000704705207047827B920700D581817047D9 +:10C0B00001460020098841F6FE52114200D00120BD +:10C0C000704700B50346807BC00701D0052000BD46 +:10C0D00059811846FFF7ECFFC00703D0987B40F06A +:10C0E00004009873987B40F001009873002000BD15 +:10C0F000827B520700D509B14089704717207047ED +:10C10000827B61F3C302827370472DE9FC5F0E46A8 +:10C11000044601789646012000FA01F14DF6FF52DF +:10C1200001EA020962684FF6FF7B1188594502D186 +:10C130000920BDE8FC9FB9F1000F05D041F6FE557E +:10C14000294201D00120F4E741EA090111801D00D4 +:10C1500014D000232B7094F800C0052103221F4641 +:10C160004FF0020ABCF10E0F76D2DFE80CF0F909AD +:10C17000252F47646B77479193B4D1D80420D8E733 +:10C18000616820898B7B9B0767D517284AD30B8969 +:10C19000834247D38989172901D3814242D185F847 +:10C1A00000A0A5F801003280616888816068817B09 +:10C1B00021F002018173C6E0042028702089A5F8CF +:10C1C00001006089A5F803003180BCE0208A318835 +:10C1D000C01D1FFA80F8414524D30620287020890D +:10C1E000A5F801006089A5F80300A089A5F805005D +:10C1F0000721208ACDE90001636941E00CF0FF00CE +:10C20000082810D0082028702089A5F8010060892E +:10C21000A5F8030031806A1D694604F10C0007F09F +:10C22000F1FF10B15EE01020EDE730889DF80010BE +:10C230000844308087E00A2028702089A5F8010092 +:10C24000328044E00C2028702089A5F80100608924 +:10C25000A5F8030031803AE082E064E02189338868 +:10C2600000EB41021FFA82F843453BD3B8F1050FBA +:10C2700038D30E222A700BEA4101CDE90010E368A1 +:10C2800060882A467146FFF7D3FEA6F800805AE080 +:10C290004020287060893188C01C1FFA80F8414511 +:10C2A00020D32878714620F03F0012302870208972 +:10C2B000A5F801006089CDE9000260882A46E3689C +:10C2C000FFF7B6FEA6F80080287840063BD46168E8 +:10C2D0002089888037E0A0893288401D1FFA80F8C5 +:10C2E000424501D204273DE0162028702089A5F898 +:10C2F00001006089A5F80300A089CDE900016088EC +:10C300002A4671462369FFF793FEA6F80080DEE710 +:10C3100018202870207A6870A6F800A013E06168E1 +:10C320000A88920401D405271CE0C9882289914219 +:10C3300001D0062716E01E21297030806068018830 +:10C3400021F400510180B9F1000F0BD061887823EE +:10C350000022022009F01AFE61682078887006E049 +:10C36000338003276068018821EA0901018038468B +:10C37000DFE62DE9FF4F85B01746129C0D001E46E3 +:10C380001CD03078C10703D000F03F00192801D934 +:10C39000012100E000212046FFF7AAFEA8420DD3AC +:10C3A0002088A0F57F41FF3908D03078410601D4BC +:10C3B000000605D5082009B0BDE8F08F0720FAE790 +:10C3C00000208DF800008DF8010030786B1E00F021 +:10C3D0003F0C0121A81E4FF0050A4FF002094FF053 +:10C3E000030B9AB2BCF1200F75D2DFE80CF08B1072 +:10C3F000745E7468748C749C74B674BB74C974D5A0 +:10C4000074E2747474F274F074EF74EE748B052D2E +:10C4100078D18DF80090A0788DF804007088ADF880 +:10C42000060030798DF80100707800F03F000C288C +:10C4300029D00ADCA0F10200092863D2DFE800F06D +:10C44000126215621A621D622000122824D004DCD8 +:10C450000E281BD01028DBD11BE016281FD018286F +:10C46000D6D11FE02078800701E02078400700281F +:10C4700048DAEFE020780007F9E72078C006F6E711 +:10C4800020788006F3E720784006F0E72078000661 +:10C49000EDE72088C005EAE720884005E7E7208827 +:10C4A0000005E4E72088C004E1E72078800729D56B +:10C4B000032D27D18DF800B0B6F8010082E0217875 +:10C4C00049071FD5062D1DD381B27078012803D0EE +:10C4D000022817D102E0CAE0022000E01020042266 +:10C4E0008DF8002072788DF80420801CB1FBF0F2EA +:10C4F000ADF8062092B242438A4203D10397ADF8C9 +:10C500000890A7E07AE02078000777D598B28208F3 +:10C510008DF800A0ADF80420B0EB820F6ED1029729 +:10C52000ADF8061096E02178C90667D5022D65D3CF +:10C5300081B206208DF80000707802285ED300BF1B +:10C54000B1FBF0F28DF80400ADF8062092B2424340 +:10C550008A4253D1ADF808907BE0207880064DD513 +:10C56000072003E0207840067FD508208DF80000E2 +:10C57000A088ADF80400ADF80620ADF8081068E01A +:10C580002078000671D50920ADF804208DF8000050 +:10C59000ADF8061002975DE02188C90565D5022D2A +:10C5A00063D381B20A208DF80000707804285CD330 +:10C5B000C6E72088400558D5012D56D10B208DF8AF +:10C5C0000000A088ADF8040044E021E026E016E079 +:10C5D000FFE72088000548D5052D46D30C208DF8AF +:10C5E0000000A088ADF80400B6F803006D1FADF898 +:10C5F0000850ADF80600ADF80AA02AE035E0208822 +:10C60000C00432D5012D30D10D208DF8000021E07D +:10C610002088800429D4B6F80100E080A07B0007C0 +:10C6200023D5032D21D3307800F03F001B2818D0EC +:10C630000F208DF80000208840F40050A4F800007E +:10C64000B6F80100ADF80400ED1EADF80650ADF8E7 +:10C6500008B0039769460598F5F75CFC050008D01B +:10C6600016E00E208DF80000EAE7072510E0082507 +:10C670000EE0307800F03F001B2809D01D2807D0BD +:10C680000220059909F02CFD208800F4005020803C +:10C69000A07B400708D52046FFF70AFDC00703D15D +:10C6A000A07B20F00400A073284684E61FB5022872 +:10C6B00006D101208DF8000088B26946F5F72AFC02 +:10C6C0001FBD0000F8B51D46DDE906470E000AD083 +:10C6D00006F030F92346FF1DBCB231462A460094CD +:10C6E00005F03DFDF8BDD0192246194618F00AFAAA +:10C6F0002046F8BD2DE9FF4F8DB09B46DDE91B5765 +:10C70000DDF87CA00C46082B05D0E06901F002F9A9 +:10C7100050B11020D2E02888092140F01000288074 +:10C720008AF80010022617E0E16901208871E269A9 +:10C730004FF420519180E1698872E06942F601016D +:10C740000181E069002181732888112140F02000D7 +:10C7500028808AF80010042638780A900A20387059 +:10C760004FF0020904F118004D460C9001F095FBC2 +:10C77000B04681E0BBF1100F0ED1022D0CD0A9EB19 +:10C780000800801C80B20221CDE9001005AB5246A2 +:10C790001E990D98FFF796FFBDF816101A98814262 +:10C7A00003D9F74800790F9004E003D10A9808B143 +:10C7B00038702FE04FF00201CDE900190DF116039A +:10C7C00052461E990D98FFF77DFF1D980088401B6B +:10C7D000801B83B2C6F1FF00984200D203461E9927 +:10C7E0000BA8D9B15FF00002DDF878C0CDE90320D5 +:10C7F00009EB060189B2CDE901C10F980090BDF89F +:10C80000161000220D9801F0CBFB387070B1C0B249 +:10C81000832807D0BDF8160020833AE00AEB09010F +:10C820008A19E1E7022011B0BDE8F08FBDF82C00B5 +:10C83000811901F0FF08022D0DD09AF80120424520 +:10C8400006D1BDF82010814207D0B8F1FF0F04D007 +:10C850009AF801801FE08AF80180C94800680178D1 +:10C86000052902D1BDF81610818009EB08001FFAD6 +:10C8700080F905EB080085B2DDE90C1005AB0F9AD5 +:10C8800001F00EFB28B91D980088411B4145BFF6F9 +:10C8900071AF022D13D0BBF1100F0CD1A9EB080022 +:10C8A000801C81B20220CDE9000105AB52461E99E1 +:10C8B0000D98FFF707FF1D980580002038700020B5 +:10C8C000B1E72DE9F8439C46089E13460027B26B5A +:10C8D0009AB3491F8CB2F18FA1F57F45FF3D05D07A +:10C8E0005518AD882944891D8DB200E0002529190D +:10C8F000B6F83C800831414520D82A44BCF80110E4 +:10C9000022F8021BBCF8031022F8021B984622F8FA +:10C91000024B914605F0FCFF4FF00C0C41464A4695 +:10C920002346CDF800C005F0E6FBF587B16B00208B +:10C930002944A41D2144088003E001E0092700E008 +:10C9400083273846BDE8F88310B50B88848F9C4256 +:10C950000CD9846BE018048844B1848824F4004422 +:10C96000A41D23440B801060002010BD0A2010BDC0 +:10C970002DE9F0478AB00025904689468246ADF8F9 +:10C98000185007274BE0059806888088000446D495 +:10C99000A8F8006007A8019500970295CDE903501B +:10C9A0004FF4007300223146504601F0F9FA0400BA +:10C9B0003CD1BDF81800ADF82000059804888188A6 +:10C9C000B44216D10A0414D401950295039521F4BA +:10C9D00000410097049541F4804342882146504627 +:10C9E00001F0B4F804000BD10598818841F40041AE +:10C9F000818005AA08A94846FFF7A6FF0400DCD0FD +:10CA00000097059802950195039504950188BDF856 +:10CA10001C300022504601F099F80A2C06D105AAD4 +:10CA200006A94846FFF790FF0400ACD0ADF81850B7 +:10CA300004E00598818821F40041818005AA06A9B7 +:10CA40004846FFF781FF0028F3D00A2C03D0204688 +:10CA50000AB0BDE8F0870020FAE710B50C46896BF4 +:10CA600086B051B10C218DF80010A18FADF80810DF +:10CA7000A16B01916946FAF744FB00204FF6FF7164 +:10CA8000A063E187A08706B010BD2DE9F0410D46F7 +:10CA90000746896B0020069E1446002911D0012B01 +:10CAA0000FD1324629463846FFF762FF002808D1E9 +:10CAB000002C06D0324629463846BDE8F04100F049 +:10CAC00038BFBDE8F0812DE9FC411446DDE9087C62 +:10CAD0000E46DDE90A15521DBCF800E092B29645FB +:10CAE00002D20720BDE8FC81ACF8002017222A7092 +:10CAF000A5F80160A5F803300522CDE900423B46C8 +:10CB00002A46FFF7DFFD0020ECE770B50C4615461E +:10CB10004821204618F097F804F1080044F81C0F4B +:10CB200000204FF6FF71E06161842084A584172006 +:10CB3000E08494F82A0040F00A0084F82A0070BDCE +:10CB40004FF6FF720A800146032009F0C9BA30B5DA +:10CB500085B00C460546FFF780FFA18E284629B117 +:10CB600001218DF800106946FAF7CBFA0020E06247 +:10CB70002063606305B030BDB0F84000704700002E +:10CB80005800002090F84620920703D4408808807F +:10CB90000020F3E70620F1E790F846209207EDD554 +:10CBA000A0F84410EAE70146002009880A0700D5EA +:10CBB000012011F0F00F01D040F00200CA0501D5AC +:10CBC00040F004008A0501D540F008004A0501D56F +:10CBD00040F010000905D1D540F02000CEE700B5A7 +:10CBE000034690F84600C00701D0062000BDA3F818 +:10CBF00042101846FFF7D7FF10F03E0F05D093F80C +:10CC0000460040F0040083F8460013F8460F40F059 +:10CC100001001870002000BD90F84620520700D592 +:10CC200011B1B0F84200A9E71720A7E710F8462F86 +:10CC300061F3C3020270A1E72DE9FF4F9BB00E0024 +:10CC4000DDE92B34DDE92978289D24D02878C10737 +:10CC500003D000F03F00192801D9012100E0002194 +:10CC60002046FFF7D9FFB04215D32878410600F0DF +:10CC70003F010CD41E290CD0218811F47F6F0AD1FA +:10CC80003A8842B1A1F57F42FF3A04D001E012296F +:10CC900001D1000602D504201FB0C5E5F9491D9851 +:10CCA0004FF0000A08718DF818A08DF83CA00FAA6B +:10CCB0000A60ADF81CA0ADF850A02978994601F0A3 +:10CCC0003F02701F5B1C04F1180C4FF0060E4FF072 +:10CCD000040BCDF858C01F2A7ED2DFE802F07D7D1C +:10CCE000107D267DAC7DF47DF37DF27DF17DF47DBC +:10CCF000F07D7D7DEF7DEE7D7D7D7D7DED0094F889 +:10CD00004610B5F80100890701D5032E02D08DF831 +:10CD100018B022E34FF40061ADF850106080032199 +:10CD20008DF83C10ADF84000D8E2052EEFD1B5F8F3 +:10CD300001002083ADF81C00B5F80310618308B131 +:10CD4000884201D901207FE10020A07220814FF6A6 +:10CD5000FF702084169801F0A0F8052089F80000E3 +:10CD60000220029083460AAB1D9A16991B9801F087 +:10CD700097F890BB9DF82E00012804D0022089F876 +:10CD80000100102003E0012089F801000220059035 +:10CD9000002203A90BA807F035FAE8BB9DF80C00A8 +:10CDA000059981423DD13A88801CA2EB0B0181425A +:10CDB00037DB02990220CDE900010DF12A034A4632 +:10CDC00041461B98FFF77EFC02980BF1020B801C7A +:10CDD00080B217AA03A901E0A0E228E002900BA804 +:10CDE00007F010FA02999DF80C00CDE9000117AB8D +:10CDF0004A4641461B98FFF765FC9DF80C100AABAC +:10CE00000BEB01001FFA80FB02981D9A084480B2C8 +:10CE1000029016991B9800E003E001F041F8002809 +:10CE2000B6D0BBF1020F02D0A7F800B053E20A203F +:10CE30008DF818004FE200210391072EFFF467AF31 +:10CE4000B5F801002083ADF81C00B5F8032062831B +:10CE500000283FF477AF90423FF674AF0120A072F4 +:10CE6000B5F8050020810020A073E06900F052FDB4 +:10CE700078B9E16901208871E2694FF4205191800D +:10CE8000E1698872E06942F601010181E0690021EF +:10CE90008173F01F20841E986062072060841698BA +:10CEA00000F0FBFF072089F80000012004900290A9 +:10CEB0000020ADF82A0028E01DE2A3E13AE1EAE013 +:10CEC00016E2AEE086E049E00298012814D0E0695D +:10CED0008079012803D1BDF82800ADF80E00049830 +:10CEE00003ABCDE900B04A4641461B98FFF7EAFB89 +:10CEF0000498001D80B20490BDF82A00ADF80C0023 +:10CF0000ADF80E00059880B202900AAB1D9A1699F2 +:10CF10001B9800F0C5FF28B902983988001D0590BC +:10CF20008142D1D20298012881D0E069807901281C +:10CF300005D0BDF82810A1F57F40FF3803D1BDF81A +:10CF40002800ADF80E00049803ABCDE900B04A46C6 +:10CF500041461B98FFF7B6FB0298BBE1072E02D0B3 +:10CF6000152E7FF4D4AEB5F801102183ADF81C1056 +:10CF7000B5F80320628300293FF4E4AE91423FF606 +:10CF8000E1AE0121A1724FF0000BA4F808B084F8C3 +:10CF90000EB0052E07D0C0B2691DE26907F013F983 +:10CFA00000287FF444AF4FF6FF70208401A906AA41 +:10CFB00014A8CDF800B081E885032878214600F058 +:10CFC0003F031D9A1B98FFF795FB8246208BADF817 +:10CFD0001C0080E10120032EC3D14021ADF8501088 +:10CFE000B5F801102183ADF81C100AAAB8F1000FA2 +:10CFF00000D00023CDE9020304921D98CDF80480EF +:10D00000009038880022401E83B21B9800F0C8FFB1 +:10D010008DF8180090BB0B2089F80000BDF828009F +:10D0200037E04FF0010C052E9BD18020ADF8500069 +:10D03000B5F801102183B5F803002084ADF81C1069 +:10D04000B0F5007F03D907208DF8180085E140F482 +:10D050007C4222840CA8B8F1000F00D00023CDE957 +:10D060000330CDE9018C1D9800903888401E83B2B2 +:10D070001B9800F095FF8DF8180028B18328A8D1DF +:10D080000220BDE0580000200D2189F80010BDF8F5 +:10D090003000401C1EE1032E04D248067FF537AE57 +:10D0A000002017E1B5F80110ADF81C1028784006F3 +:10D0B00002D58DF83CE002E007208DF83C004FF0EF +:10D0C00000080320CDE902081E9BCDF810801D98B2 +:10D0D0000193A6F1030B00901FFA8BF342461B98B5 +:10D0E00000F034FD8DF818008DF83C802978490651 +:10D0F0000DD52088C00506D5208BBDF81C108842B0 +:10D1000001D1C4F8248040468DF81880E2E08328DD +:10D1100001D14FF0020A4FF48070ADF85000BDF815 +:10D120001C002083A4F820B01E9860620320608455 +:10D130001321CCE0052EFFF4EAADB5F80110ADF8EF +:10D140001C10A28F62B3A2F57F43FE3B28D00822B9 +:10D150008DF83C204FF0000B0523CDE9023BDDF8B4 +:10D1600078C0CDF810B01D9A80B2CDF804C040F45C +:10D1700000430092B5F803201B9800F0E7FC8DF8FF +:10D180003CB04FF400718DF81800ADF850108328B2 +:10D1900010D0F8B1A18FA1F57F40FE3807D0DCE0B8 +:10D1A0000B228DF83C204FF6FE72A287D2E7A4F83E +:10D1B0003CB0D2E000942B4631461E9A1B98FFF7F4 +:10D1C00080FB8DF8180008B183284BD1BDF81C00F6 +:10D1D000208355E700942B4631461E9A1B98FFF793 +:10D1E00070FB8DF81800E8BBE18FA06B0844811D2F +:10D1F0008DE882034388828801881B98FFF763FCCF +:10D20000824668E095F80180022E70D15FEA08003E +:10D2100002D0B8F1010F6AD109208DF83C0007A8AF +:10D2200000908DF840804346002221461B98FFF76E +:10D230002CFC8DF842004FF0000B8DF843B050B934 +:10D24000B8F1010F12D0B8F1000F04D1A18FA1F5F0 +:10D250007F40FF380AD0A08F40B18DF83CB04FF42A +:10D26000806000E037E0ADF850000DE00FA91B989A +:10D27000F9F747FF82468DF83CB04FF48060ADF877 +:10D280005000BAF1020F06D0FC480068C07928B1FE +:10D290008DF8180027E0A4F8188044E0BAF1000FD8 +:10D2A00003D081208DF818003DE007A80090434688 +:10D2B000012221461B98FFF7E8FB8DF81800214654 +:10D2C0001B98FFF7CAFB9DF8180020B9192189F8AF +:10D2D0000010012038809DF83C0020B10FA91B9858 +:10D2E000F9F70FFF8246BAF1000F33D01BE018E0C8 +:10D2F0008DF818E031E02078000712D5012E10D10A +:10D300000A208DF83C00E088ADF8400003201B990E +:10D3100008F0E6FE0820ADF85000C1E648067FF5AB +:10D32000F6AC4FF0040A2088BDF850100843208066 +:10D33000BDF8500080050BD5A18FA1F57F40FE38C8 +:10D3400006D11E98E06228982063A6864FF0030A53 +:10D350005046A1E49DF8180078B1012089F800003A +:10D36000297889F80110BDF81C10A9F802109DF861 +:10D37000181089F80410052038802088BDF8501056 +:10D3800088432080E4E72DE9FF4F8846087895B070 +:10D39000012181404FF20900249C0140ADF820108A +:10D3A0002088DDF88890A0F57F424FF0000AFF3A10 +:10D3B00006D039B1000705D5012019B0BDE8F08FBE +:10D3C0000820FAE7239E4FF0000B0EA886F800B065 +:10D3D00018995D460988ADF83410A8498DF81CB03D +:10D3E000179A0A718DF838B0086098F80000012883 +:10D3F0003BD0022809D003286FD1307820F03F00BD +:10D400001D303070B8F80400E08098F80010032058 +:10D41000022904D1317821F03F011B31317094F899 +:10D420004610090759D505ABB9F1000F13D00021FB +:10D4300002AA82E80B000720CDE90009BDF83400FC +:10D44000B8F80410C01E83B20022159800F0A8FDA1 +:10D450000028D1D101E0F11CEAE7B8F80400A6F8F1 +:10D460000100BDF81400C01C04E198F805108DF807 +:10D470001C1098F80400012806D04FF4007A022806 +:10D480002CD00328B8D16CE12188B8F8080011F439 +:10D490000061ADF8201020D017281CD3B4F840103C +:10D4A000814218D3B4F84410172901D3814212D114 +:10D4B000317821F03F01C91C3170A6F80100032129 +:10D4C000ADF83410A4F8440094F8460020F00200AF +:10D4D00084F8460065E105257EE177E1208808F1C2 +:10D4E000080700F4FE60ADF8200010F0F00F1BD02C +:10D4F00010F0C00F03D03888228B9042EBD199B93D +:10D50000B878C00710D0B9680720CDE902B1CDF8CE +:10D5100004B00090CDF810B0FB88BA88398815980F +:10D5200000F014FB0028D6D12398BDF82010401C31 +:10D5300080294ED006DC10290DD020290BD040299F +:10D5400087D124E0B1F5807F6ED051457ED0B1F512 +:10D55000806F97D1DEE0C80601D5082000E01020DA +:10D5600082460DA907AA0520CDE902218DF83800D1 +:10D57000ADF83CB0CDE9049608A93888CDE90001A2 +:10D580005346072221461598FFF7B4F8A8E09DF806 +:10D590001C2001214FF00A0A002A9BD105ABB9F1EA +:10D5A000000F00D00020CDE902100720CDE90009CE +:10D5B000BDF834000493401E83B2218B00221598DD +:10D5C00000F0EEFC8DF81C000B203070BDF814004C +:10D5D00020E09DF81C2001214FF00C0A002A22D1E6 +:10D5E00013ABB9F1000F00D00020CDE902100720E5 +:10D5F000CDE900090493BDF83400228C401E83B2AB +:10D60000218B159800F0CCFC8DF81C000D2030709B +:10D61000BDF84C00401CADF8340005208DF83800F2 +:10D62000208BADF83C00BCE03888218B88427FF429 +:10D6300052AF9DF81C004FF0120A00281CD1606AFE +:10D64000A8B1B878C0073FF446AF00E018E0BA6868 +:10D650000720CDE902B2CDF804B00090CDF810B0AB +:10D66000FB88BA88159800F071FA8DF81C00132019 +:10D6700030700120ADF8340093E000005800002025 +:10D680003988208B8142D2D19DF81C004FF0160AB8 +:10D690000028A06B08D0E0B34FF6FF7000215F4672 +:10D6A000ADF808B0019027E068B1B978C907BED1DC +:10D6B000E18F0DAB0844821D03968DE80C02438870 +:10D6C0008288018809E0B878C007BCD0BA680DAB81 +:10D6D00003968DE80C02BB88FA881598FFF7F3F9DA +:10D6E00005005ED0072D72D076E0019005AA02A950 +:10D6F0002046FFF729F90146E28FBDF80800824273 +:10D7000001D00029F1D0E08FA16B08440780019877 +:10D71000E08746E09DF81C004FF0180A40B1208BCE +:10D72000C8B13888208321461598FFF796F938E06C +:10D7300004F118000090237E012221461598FFF77E +:10D74000A4F98DF81C000028EDD1192030700120BB +:10D75000ADF83400E7E7052521461598FFF77DF978 +:10D760003AE0208800F40070ADF8200050452DD13B +:10D77000A08FA0F57F41FE3901D006252CE0D8F816 +:10D7800008004FF0160A48B1A063B8F80C10A18742 +:10D790004FF6FF71E187A0F800B002E04FF6FF708E +:10D7A000A087BDF8200030F47F611AD078230022D2 +:10D7B0000320159908F0EAFB98F8000020712088F2 +:10D7C000BDF82010084320800EE000E007252088E7 +:10D7D000BDF8201088432080208810F47F6F1CD073 +:10D7E0003AE02188814321809DF8380020B10EA9BC +:10D7F0001598F9F786FC05469DF81C000028EBD02B +:10D8000086F801A001203070208B70809DF81C00EC +:10D8100030710520ADF83400DEE7A18EE1B1189833 +:10D820000DAB0088ADF834002398CDE90304CDE9B1 +:10D830000139206B0090E36A179A1598FFF7FCF9FD +:10D84000054601208DF838000EA91598F9F759FC06 +:10D8500000B10546A4F834B094F8460040070AD554 +:10D860002046FFF7A0F910F03E0F04D114F8460F40 +:10D8700020F0040020701898BDF83410018028466C +:10D880009BE500B585B0032806D102208DF8000085 +:10D8900088B26946F9F735FC05B000BD10B5384CC3 +:10D8A0000B782268012B02D0022B2AD111E01378C9 +:10D8B0000BB1052B01D10423137023688A889A8049 +:10D8C0002268CB88D38022680B89138149895181D2 +:10D8D0000DE08B8893802268CB88D38022680B89E7 +:10D8E00013814B8953818B89938109691161216867 +:10D8F000F9F707FC226800210228117003D00028E4 +:10D9000000D0812010BD832010BD806B002800D086 +:10D91000012070478178012909D10088B0F5205F86 +:10D9200003D042F60101884201D100207047072050 +:10D930007047F0B587B0002415460E460746ADF88F +:10D94000184011E005980088288005980194811DF1 +:10D95000CDE902410721049400918388428801881F +:10D96000384600F0F3F830B905AA06A93046FEF7AC +:10D97000EBFF0028E6D00A2800D1002007B0F0BD58 +:10D980005800002010B58B7883B102789A4205D1F7 +:10D990000B885BB102E08B79091D4BB18B789A4201 +:10D9A000F9D1B0F801300C88A342F4D1002010BDA9 +:10D9B000812010BD072826D012B1012A27D103E00B +:10D9C000497801F0070102E04978C1F3C201052955 +:10D9D0001DD2DFE801F00318080C12000AB1032081 +:10D9E00070470220704704280DD250B10DE0052881 +:10D9F00009D2801E022808D303E0062803D003289A +:10DA000003D005207047002070470F207047812009 +:10DA10007047C0B282060BD4000607D5FE48807A54 +:10DA20004143C01D01EBD00080B2704708467047EB +:10DA30000020704770B513880B800B781C0625D525 +:10DA4000F54CA47A844204D843F0100008700020FA +:10DA500070BD956800F0070605EBD0052D78F54000 +:10DA600065F304130B701378D17803F0030341EAD4 +:10DA7000032140F20123B1FBF3F503FB151192687A +:10DA8000E41D00FB012000EBD40070BD906870BD68 +:10DA900037B51446BDF8041011809DF804100A062D +:10DAA0001ED5C1F30013DC49A568897A814208D8E4 +:10DAB000FE2811D1C91DC9085A42284617F099F805 +:10DAC0000AE005EBD00100F0070201250878954037 +:10DAD000A843934018430870207820F0100020706D +:10DAE0003EBD2DE9F0410746C81C0E4620F003005C +:10DAF000B04202D08620BDE8F081C74D00203446F8 +:10DB00002E60AF802881AA72E8801AE0E988491C5B +:10DB1000E980810614D4E17800F0030041EA002096 +:10DB200040F20121B0FBF1F201FB12012068FFF786 +:10DB300070FF2989084480B22881381A3044A060D7 +:10DB40000C3420784107E1D40020D4E72DE9FF4FC1 +:10DB500089B01646DDE9168A0F46994623F44045FA +:10DB6000084600F00DFB04000FD0099804F064FD96 +:10DB70000290207800060AD5A748817A029881424F +:10DB800005D887200DB0BDE8F08F0120FAE72246C6 +:10DB900001A90298FFF74EFF834600208DF80C0084 +:10DBA0004046B8F1070F1AD001222146FFF702FFC5 +:10DBB0000028E7D12078400611D502208DF80C000E +:10DBC000ADF81070BDF80400ADF81200ADF81460A7 +:10DBD0001898ADF81650CDF81CA0ADF818005FEA03 +:10DBE000094004D500252E46A84601270CE02178DF +:10DBF000E07801F0030140EA012040F20121B0FB8E +:10DC0000F1F2804601FB12875FEA494009D5B84529 +:10DC100007D1A178207901F0030140EA0120B04248 +:10DC200001D3BE4201D90720ACE7A8191FFA80F939 +:10DC3000B94501D90D20A5E79DF80C0028B103A92D +:10DC40000998F9F75CFA00289CD1B84507D1A0786B +:10DC50004FEA192161F30100A07084F804901A982A +:10DC600000B10580199850EA0A0027D0199830B100 +:10DC70000BEB06002A46199916F044FF0EE00BEB59 +:10DC800006085746189E099804F042FE2B46F61DDA +:10DC9000B5B239464246009504F02DFA224601A954 +:10DCA0000298FFF7C7FE9DF80400224620F01000FE +:10DCB0008DF80400DDE90110FFF7EAFE002061E7BE +:10DCC0002DE9FF4FDFF8509182461746B9F806104C +:10DCD000D9F8000001EB410100EB810440F2012082 +:10DCE000B2FBF0F185B000FB11764D46DDF84C80BB +:10DCF00031460698FFF78DFE29682A898B46611AFE +:10DD00000C3101441144AB8889B28B4202D8842083 +:10DD100009B038E70699CDB2290603D5A90601D581 +:10DD20000620F5E7B9F806C00CF1010C1FFA8CFCCF +:10DD3000A9F806C0149909B1A1F800C0A90602D536 +:10DD4000C4F8088007E0104480B2A9F80800191A46 +:10DD500001EB0B00A0602246FE200699FFF798FE1B +:10DD6000E77026712078390A61F30100320AA17840 +:10DD700040F0040062F30101A17020709AF80200E3 +:10DD80006071BAF80000E08000262673280602D5EC +:10DD900099F80A7000E00127A80601D54FF00008A5 +:10DDA0004D4600244FF007090FE0CDE902680196C7 +:10DDB000CDF800900496E9882046129B089AFFF758 +:10DDC000C5FE0028A4D1641CE4B2BC42EDD30020FF +:10DDD0009EE72DE9F047804600F0D2F9070005D014 +:10DDE000002644460C4D40F2012919E00120BDE80F +:10DDF000F087204600F0C4F90278C17802F00302EF +:10DE000041EA0222B2FBF9F309FB13210068FFF794 +:10DE100000FE304486B201E0F4050020641CA4B288 +:10DE2000E988601E8142E4DCA8F10100E8802889CD +:10DE3000801B288100203870D9E710B5144631B115 +:10DE4000491E218004F0F8FBA070002010BD0120C5 +:10DE500010BD10B5D24904460088CA88904201D34B +:10DE60000A2010BD096800EB400001EB80025079E8 +:10DE7000A072D08820819178107901F0030140EAE6 +:10DE80000120A081A078E11CFFF7D4FD206120884B +:10DE9000401C2080E080002010BD012101827047DD +:10DEA0002DE9FF4F85B04FF6FF788246A3F800803A +:10DEB00048681F460D4680788DF80600486800883F +:10DEC000ADF8040000208DF80A00088A0C88A042F2 +:10DED00000D304462C8241E0288A401C2882701D11 +:10DEE0006968FFF74FFDB8BB3988414501D1601E15 +:10DEF00038806888A04236D3B178307901F00301C8 +:10DF000040EA012901A9701DFFF73CFD20BB2989CA +:10DF100041452CD0002231460798FFF74BFDD8B978 +:10DF20002989494518D1E9680391B5F80AC0D6F89E +:10DF300008B05046CDF800C004F0EAFCDDF800C09F +:10DF40005A460CF1070C1FFA8CFC4B460399CDF88E +:10DF500000C004F09AF850B1641CA4B2204600F04E +:10DF60000FF90600B8D1641E2C820A20D0E67C800E +:10DF70007079B871F088B8803178F07801F00301D9 +:10DF800040EA01207881A7F80C90504604F054FB39 +:10DF9000324607F10801FFF74DFD38610020B7E672 +:10DFA0002DE9FF4F87B081461C469246DDF860B0F0 +:10DFB000DDF85480089800F0E3F805000CD04846DE +:10DFC00004F03AFB2978090608D57549897A814217 +:10DFD00004D887200BB0D6E50120FBE7CAF3090679 +:10DFE0002A4601A9FFF726FD0746149807281CD0EA +:10DFF00000222946FFF7DEFC0028EBD128784006F6 +:10E0000013D501208DF808000898ADF80C00BDF874 +:10E010000400ADF80E00ADF81060ADF8124002A992 +:10E020004846F9F76CF80028D4D12978E87801F04F +:10E03000030140EA0121AA78287902F0030240EAAC +:10E040000220564507D0B1F5007F04D9611E8142F8 +:10E0500001DD0B20BEE7864201D90720BAE7801B0D +:10E0600085B2A54200D92546BBF1000F01D0ABF81F +:10E070000050179818B1B9192A4616F043FDB8F1A7 +:10E08000000F0DD03E4448464446169F04F052FC13 +:10E090002146FF1DBCB232462B46009404F05FF8C7 +:10E0A000002097E72DE9F04107461D461646084631 +:10E0B00000F066F804000BD0384604F0BDFA217871 +:10E0C000090607D53649897A814203D8872012E5A7 +:10E0D000012010E522463146FFF7ACFC65B12178FE +:10E0E000E07801F0030140EA0120B0F5007F01D89B +:10E0F000012000E0002028700020FCE42DE9F04120 +:10E1000007461D461646084600F03AF804000BD0B4 +:10E11000384604F091FA2178090607D52049897A12 +:10E12000814203D88720E6E40120E4E42246314618 +:10E13000FFF7AEFCFF2D14D02178E07801F0030248 +:10E1400040EA022040F20122B0FBF2F302FB13008E +:10E1500015B900F2012080B2E070000A60F30101FD +:10E1600021700020C7E410B50C4600F009F828B172 +:10E17000C18821804079A070002010BD012010BD11 +:10E180000749CA88824209D340B1096800EB4000C0 +:10E190006FF00B0202EB80000844704700207047CC +:10E1A000F405002010B508F05DF9F4F77FFB07F0E7 +:10E1B000E3FFBDE8104008F0ABB8202834BF0120D1 +:10E1C00000207047012303FA00F04FF0A04200291D +:10E1D00014BFC2F80C05C2F8080570474FF0A04103 +:10E1E000012202FA00F0C1F81805704770B5034625 +:10E1F000002002466FF02F050EE09C5CA4F1300673 +:10E200000A2E02D34FF0FF3070BD00EB800005EB0B +:10E210004000521C2044D2B28A42EED370BD30B5C9 +:10E220000A230BE0B0FBF3F403FB1404B0FBF3F0A0 +:10E230008D183034521E05F8014CD2B2002AF1D1AB +:10E2400030BD30B500234FF6FF7510E0040A44EAF4 +:10E25000002084B2C85C6040C0F30314604005EA4B +:10E2600000344440E0B25B1C84EA40109BB293420D +:10E27000ECD330BD2DE9F041FE4B0026012793F889 +:10E2800060501C7893F864C0B8B183F88D40A3F84F +:10E290008E1083F88C2083F88A70BCF1000F0CBFBD +:10E2A00083F8906083F89050F3488068008804F009 +:10E2B0002FFBBDE8F04103F0C5BF4FF6FF7083F8B8 +:10E2C0008D40A3F88E0083F88C2083F88A70BCF10F +:10E2D000000F14BF83F8905083F89060BDE8F08180 +:10E2E00070B5E54E0446306890F898100025012975 +:10E2F00019D090F89210012924D090F868100129C3 +:10E300002AD090F88A1001291CBF002070BD6570CA +:10E3100017212170D0F88C106160B0F89010218125 +:10E3200080F88A5016E065701C212170D0F8991091 +:10E330006160D0F89D10A16090F8A110217380F861 +:10E34000985007E0657007212170D0F89410616043 +:10E3500080F89250012070BD65701421217000F189 +:10E360006A012022201D16F0CDFB012121723068A8 +:10E3700080F86850BF48B0F86C20A0F89420B268CC +:10E38000537B80F8963080F89210108804F0C0FA21 +:10E3900003F067FFDEE7B848006890F868100029CE +:10E3A00014BFB0F86C004FF6FF70704770B5B24CF8 +:10E3B00006462068002808BFFFDF0025206845705A +:10E3C0006660002808BFFFDF2068417800291CBF75 +:10E3D000FFDF70BDA42116F036FC2068FF2101701C +:10E3E0007F2180F8361013214184282180F86510A0 +:10E3F000012180F8581080F85D5008F0ACFCBDE8B1 +:10E40000704007F0E6BE9C490968097881420CBF5C +:10E410000120002070479848006890F82200C0F35F +:10E42000400070479448006890F8220000F0010016 +:10E4300070479148006890F82200C0F300107047C0 +:10E440002DE9F0438C48D0F800C09CF82400BCF8BB +:10E450002240C0F38001C0F34002114400F00100EB +:10E460000144C4F30010F0B1132C17D009DC102CB8 +:10E4700002BF824830F81100BDE8F083122C0DD0A5 +:10E4800008E0152C08BF7E4809D01D2C04BF7D482C +:10E49000BDE8F083FFDF0020BDE8F0837A4830F864 +:10E4A0001100BDE8F0839CF85A209CF85B002E26F2 +:10E4B00000234FF47A774FF014084FF04009022AF6 +:10E4C00004BF4AF2D745B5FBF7F510D0012A04BFC7 +:10E4D0004AF22F75B5FBF7F510D04AF62315B5FBB8 +:10E4E000F7F5082A08BF4E4613D0042A18D01E4656 +:10E4F000082A0ED0042A13D0022A49D003F1280694 +:10E50000042A0FD0082A1CBF4FF01908082204D093 +:10E510000AE04FF0140806F5A8764FF0400203E039 +:10E5200006F5A8764FF0100218FB026212FB0152AA +:10E53000C1EB0111554D01EB810105EB8101114446 +:10E5400014F0010F4FF4C8724FF4BF7504BFC4F349 +:10E550004006002E6FD0C4F3400601F5A571EEB160 +:10E56000082804BF164640270CD0042804BF2E46B6 +:10E57000102707D0022807BF03F11806042703F16C +:10E580002806082707EB870706EB870631441CE0BF +:10E5900003F118064FF019080422C5E7082804BF44 +:10E5A000164640270CD0042804BF2E46102707D05B +:10E5B000022807BF03F11806042703F128060827DD +:10E5C00007EB871706EB870631449C31082804BF08 +:10E5D000164640270CD0042804BF2E46102707D02B +:10E5E000022807BF03F11806042703F128060827AD +:10E5F000C7EBC70707EB470706EB470631449831DF +:10E6000014F0010F18D0082808BF40200CD00428AF +:10E6100004BF2A46102007D0022807BF03F11802C2 +:10E62000042003F12802082000EB400303EB001054 +:10E63000104401444FE052E0082804BF144640262D +:10E640000CD0042804BF2C46102607D0022807BF90 +:10E6500003F11804042603F12804082606EB8616A5 +:10E66000BCF83CC004EB86042144BCF1EB0F32D96A +:10E670000EE000000006002060000020AC50020008 +:10E68000B45002008E891300A4500200D4FEFFFF94 +:10E6900044F255240CF10B0C0CFB04FC4FEA9C5C7F +:10E6A000082807D0042802D0022805D008E02A460E +:10E6B000102008E0402006E003F11802042002E0E8 +:10E6C00003F12802082000EB801002EB800000F527 +:10E6D000A5700CFB001101F26510BDE8F08301F597 +:10E6E000A571082804BF144640260CD0042804BF96 +:10E6F0002C46102607D0022807BF03F11804042671 +:10E7000003F12804082606EB8616BCF844C004EB87 +:10E7100086042144BCF1EB0FDDD944F255240CF101 +:10E720000B0C0CFB04FC4FEA9C5C0828C2D00428AC +:10E73000BDD00228C4D1BFE7FE4840F27121006875 +:10E74000806A48437047FB48006890F8350000280D +:10E7500018BF0120704710B5F74C207B022818BF66 +:10E76000032808D1207D04F115010DF024F90828B3 +:10E770001CBF012010BD207B002816BF02280020EE +:10E780000120BDE8104008F0FDBEEB49087370475A +:10E79000E849096881F8300070472DE9F047E54CF9 +:10E7A0002168087B002816BF02280020012048733A +:10E7B00001F10E0108F0D0FE2168087B022816BF87 +:10E7C00003280122002281F82F204FF0080081F851 +:10E7D0002D00487B01F10E034FF001064FF00007BA +:10E7E000012804BF5B7913F0C00F0AD001F10E03BA +:10E7F000012804D1587900F0C000402801D0002041 +:10E8000000E0012081F82E00002A04BF91F82200C8 +:10E8100010F0040F07D0087D01F115010DF0CBF8C1 +:10E82000216881F82D002068476006F081F8216892 +:10E83000C14D4FF00009886095F82D000DF0D7F814 +:10E84000804695F82F00002818BFB8F1000F04D0BB +:10E8500095F82D000CF092FE68B195F83000002874 +:10E860001CBF95F82E0000281DD0697B05F10E0015 +:10E8700001290ED012E06E734A4605F10E014046A2 +:10E8800008F0BFFE95F82D1005F10E000DF0A6F969 +:10E8900009E0407900F0C000402831D0394605F148 +:10E8A0000E0008F0E5FE2068C77690F8220010F010 +:10E8B000040F08BFBDE8F087002795F82D000CF085 +:10E8C00011FF050008BFBDE8F08710210DF015FF0E +:10E8D000002818BFBDE8F08720683A4600F11C0107 +:10E8E000C676284608F08DFE206800F11C0160689D +:10E8F0000EF012FA6068BDE8F04701210EF027BA69 +:10E900000DF0A9F94A4605F10E0108F07AFECAE7B2 +:10E91000884A1268137B0370D2F80E000860508A90 +:10E920008880704778B584490446824D407B0873DF +:10E930002A68207810706088ADF8000080B200F07E +:10E940000101C0F3400341EA4301C0F3800341EAFF +:10E950008301C0F3C00341EAC301C0F3001341EADD +:10E960000311C0F3401341EA4311C0F3801041EAA0 +:10E9700080105084E07D012808BF012603D00228C2 +:10E9800014BFFFDF0226286880F85A60607E0128E5 +:10E9900008BF012603D0022814BFFFDF0226286823 +:10E9A00080F85B60217B80F82410418C1D290CBF0E +:10E9B000002161688162617D80F83510A17B0029AA +:10E9C00016BF0229002101210175D4F80F10C0F8EB +:10E9D0001510B4F81310A0F81910A17EB0F8662035 +:10E9E00061F30302A0F86620E17E012918BF00212F +:10E9F00080F83410002078BD4E480068408CC0F389 +:10EA0000001131B1C0F38000002804BF1F207047FF +:10EA100002E0C0F3400109B10020704710F0010F7F +:10EA200014BFEE20FF20704742480068408CC0F3BE +:10EA3000001119B1C0F3800028B102E0C0F340001A +:10EA400008B100207047012070473A490022096848 +:10EA50000A664B8C1D2B0CBF81F8642081F8640082 +:10EA600070470023334A126882F859309164A2F843 +:10EA70004C00012082F8590070472E4A002312688A +:10EA800082F85830A2F854000120116582F858002D +:10EA900070472849096881F85D007047254800687B +:10EAA00090F95D0070472348006890F82200C0F399 +:10EAB000401070471F48006890F82200C0F3C00063 +:10EAC0007047012070471B48006890F85B00704752 +:10EAD00070B508F0F8F808F0D7F807F0C9FF08F0AB +:10EAE00051F8144C2068016E491C016690F83300FF +:10EAF000002530B108F02FF907F06BFB206880F893 +:10EB000033502068457090F8371021B1BDE870404F +:10EB1000042009F001BA90F8641001B3006E81423C +:10EB20001DD8042009F0F8F9206890F8220010F0B0 +:10EB3000010F03E0600000200006002007D0A0685D +:10EB400043220188BDE870400120FFF793BBBDE878 +:10EB5000704043224FF6FF710020FFF78BBBBDE8EA +:10EB60007040002009F0D8B92DE9F047FF4E8146EA +:10EB700082B030680F464FF00008458C15F0030F47 +:10EB800010D015F0010F05F0020005D0002808BFD5 +:10EB90004FF0010806D004E0002818BF4FF002082B +:10EBA00000D1FFDF4FF0000A544615F0010F05F0C9 +:10EBB00002000DD080B915F0040F0DD04AF0080006 +:10EBC000002F1CBF40F0010040F0020440D090E054 +:10EBD00010B115F0040F0DD015F0070F10D015F07F +:10EBE000010F05F0020036D0002808BF15F0040F11 +:10EBF00027D03DE0002F18BF4AF0090479D134E056 +:10EC00002FB14AF0080415F0200F14D071E03168DC +:10EC100005F02002B1F84400104308BF4AF0010497 +:10EC200067D04AF0180415F0200F62D191F85A10FD +:10EC300008295AD156E0316891F85A10082951D163 +:10EC400053E04AF00800002F18BF40F0010450D1F3 +:10EC500040F010044DE0002818BF15F0040F07D055 +:10EC6000002F18BF4AF00B0443D14AF0180440E0CB +:10EC700015F0030F3CD115F0040F39D077B131688E +:10EC80004AF0080091F85A1008290CBF40F002041D +:10EC900020F0020415F0200F22D02AE0316805F0A0 +:10ECA0002002B1F84400104308BF4AF0030420D00A +:10ECB0004AF0180015F0200F09D000BF91F85A1043 +:10ECC000082914BF40F0020420F0020411E091F87A +:10ECD0005A20082A14BF40F0010020F00100EDE79F +:10ECE000082902D024F0010403E044F0010400E00C +:10ECF000FFDF15F0400F1BD0C7B93168B1F84400F1 +:10ED0000002804BF488C10F0010F0BD110F0020F47 +:10ED100008BF10F0200F05D115F0010F08BF15F046 +:10ED2000020F03D091F85A00082801D044F04004A3 +:10ED30007068A0F800A0017821F02001017007217F +:10ED40000DF0B6FF414670680EF0A9F921467068D3 +:10ED50000EF0B1F914F0010F0AD006230022844905 +:10ED600070680EF082F93068417B70680DF0E2FF48 +:10ED700014F0020F18D0D6E90010B9F1000F4FF0CF +:10ED800006034FF0010207D01C310EF06EF901218D +:10ED900070680DF0DCFF07E015310EF066F93068A1 +:10EDA000017D70680DF0D3FF14F0040F18BFFFDF72 +:10EDB00014F0080F17D0CDF800A03068BDF800108F +:10EDC0000223B0F86600020962F30B01ADF80010EF +:10EDD0009DF80110032260F307118DF801106946B8 +:10EDE00070680EF042F9012F61D13068B0F844101C +:10EDF000E9B390F82200C0F34000C0BB70680EF089 +:10EE00004AF9401CC7B23068B0F84420B0F8561038 +:10EE1000551AC7F1FF018D42A8BF0D46AA423AD943 +:10EE200090F8220010F0010F35D144F01004214673 +:10EE300070680EF040F9F81CC0B2ED1E284482B292 +:10EE40003068B0F86610036E090951FA83F190F842 +:10EE50005C30484F1944BC460023E1FB07C31B0943 +:10EE60006FF0240C03FB0C1180F85C1000E01EE036 +:10EE700090F85B00012101F025F80090BDF800003A +:10EE80009DF80210032340EA01400190042201A9E9 +:10EE900070680EF0EAF83068AAB2016C70680EF083 +:10EEA00038F93068B0F856102944A0F8561014F01C +:10EEB000400F06D0D6E90010012306225D310EF086 +:10EEC000D4F814F0200F18BFFFDF0020002818BF6F +:10EED000FFDF02B0BDE8F0872DE9F843234C20683E +:10EEE000002808BFFFDF2068417839BB0178FF297F +:10EEF00024D0002680F83160A0F85660867080F833 +:10EF00003760304607F052FE07F046FB206890F964 +:10EF10005D0007F002FC184807F005FC174807F0F1 +:10EF20002BFE606807F045FE206890F8240010F082 +:10EF3000010F06D0252007F0FEFB09E00C20BDE8FC +:10EF4000F88310F0020F18BF262076D007F0F3FBED +:10EF5000206890F85A10252007F0EAFA206880F817 +:10EF60002C6007F01DFE20680AE000006000002011 +:10EF70000E06002053E4B36EA05002009D50020024 +:10EF800090F85A10002007F02DFC0F21052007F003 +:10EF900098FB206890F82E10002901BF90F82F10E0 +:10EFA000002990F8220010F0040F75D005F0C0FC85 +:10EFB000054620682946806806F0D6F9DFF82C84DB +:10EFC000074690FBF8F008FB10704142284605F018 +:10EFD000B0F92168886097FBF8F04A6810444860EF +:10EFE0000CF0E6FC01462068426891426FD8C0E907 +:10EFF0000165FF4D4FF0010895F82D000CF0F7FC6E +:10F00000814695F82F000127002818BFB9F1000F9D +:10F0100004D095F82D000CF0B1FAA8B195F83000A5 +:10F0200000281CBF95F82E00002825D0697B05F12B +:10F030000E00012916D01AE0FFE710F0040F14BFEC +:10F040002720FFDF82D183E73A466F7305F10E0177 +:10F05000484608F0D6FA95F82D1005F10E000CF090 +:10F06000BDFD09E0407900F0C000402815D04146C0 +:10F0700005F10E0008F0FCFA206890F8220010F06C +:10F08000040F24D095F82D000CF02CFB05001ED0A9 +:10F0900010210DF032FB40B119E00CF0DCFD3A46D6 +:10F0A00005F10E0108F0ADFAE6E720683A4600F1F6 +:10F0B0001C01C776284608F0A4FA206800F11C015C +:10F0C00060680DF029FE012160680DF040FE2068A7 +:10F0D000417B0E3007F0D9FA206890F8581059B3E8 +:10F0E000B0F85410A0F84410016D016490F822109B +:10F0F000C1F30011E9B9B0F8660002210509ADF8C5 +:10F100000050684606F0EEFC28B1BDF80000C0F3E0 +:10F110000B00A84204D1BDF80000401CADF800006F +:10F120002168BDF80000B1F8662060F30F12A1F865 +:10F130006620206880F85860206890F8591031B136 +:10F14000B0F84C108187816C816380F85960B0F809 +:10F150006610026E090951FA82F190F85C20DFF81E +:10F1600094C2114463460022E1FB0C3212096FF095 +:10F17000240302FB031180F85C100CF09CFC0321BB +:10F1800060680CF01BFD216881F833000020BDE8A9 +:10F19000F8839949886070472DE9F043964C83B015 +:10F1A000226892F831303BB1508C1D2808BFFFDF38 +:10F1B00003B0BDE8F0438BE401260027F1B105461A +:10F1C00092F85C0007F0B7FA206890F85B10FF2017 +:10F1D00007F0AEF920684FF4A57190F85B2000208D +:10F1E00007F009FC206890F8221011F0030F00F0DE +:10F1F0002D81002D00F0248100F028B992F8221012 +:10F200008046D07EC1F30011002956D005466068C3 +:10F210000780017821F020010170518C132937D02B +:10F220001FDC102908BF022144D0122908BF062183 +:10F2300040D0FFDF6E4D606805F10E010DF05EFD00 +:10F24000697B60680DF076FD2068418C1D2918BF30 +:10F25000152965D0B0F84420016C60680DF083FD7D +:10F260005EE0152918BF1D29E3D14FF001010DF013 +:10F270001FFD6068017841F020010170216885B1AF +:10F280001C310DF049FD012160680DF060FDD1E7F2 +:10F2900000210DF00DFD6068017841F02001017042 +:10F2A000C8E715310DF038FD2068017D60680DF06C +:10F2B0004EFDBFE70DF0FCFCBCE70021FFF754FC5E +:10F2C0006068C17811F03F0F2AD0017911F0100F5A +:10F2D00026D00DF0EBFC2368024693F82410C1F30E +:10F2E0008000C1F3400C604401F0010100EB010C0F +:10F2F00093F82C10C1F38000C1F34005284401F0BD +:10F3000001010844ACEB0000C1B293F85A0000F0D0 +:10F31000D9FD009003230422694660680DF0A5FE24 +:10F320002068002590F8241090F82C0021EA0002B3 +:10F3300012F0010F18BF01250ED111F0020F04D0F9 +:10F3400010F0020F08BF022506D011F0040F03D001 +:10F3500010F0040F08BF0425B8F1000F2BD0012DC9 +:10F360001BD0022D08BF26201BD0042D14BFFFDFA9 +:10F37000272016D0206890F85A10252007F0D8F8DA +:10F38000206890F82210C1F3001169B101224FF4F6 +:10F390009671002007F02FFB0DE0252007F0CBF938 +:10F3A000E8E707F0C8F9E5E790F85A204FF49671BE +:10F3B000002007F020FB206890F82C10294380F8EB +:10F3C0002C1090F8242032EA01011CD04670418CA8 +:10F3D00013292BD026DC102904BF03B0BDE8F0832D +:10F3E000122923D0C1F30010002807E040420F008B +:10F3F0000006002053E4B36E6000002018BFFFDF5A +:10F4000003B0BDE8F083418C1D2908BF80F82C7043 +:10F41000DCD0C1F30011002914BF80F8316080F8FE +:10F420003170D3E7152918BF1D29DBD190F85A2078 +:10F4300003B04FF00101BDE8F043084607F0C8BC37 +:10F4400090F85B200121084607F0C2FC2168002DDE +:10F45000C87E7CD04A8C3D46C2F34000002808BFDD +:10F4600047F0080512F0400F18BF45F0400500288E +:10F4700019BFD1F83890B1F83C80D1F84090B1F87C +:10F4800044806068072107800DF012FC002160684D +:10F490000DF005FE294660680DF00DFE15F0080F11 +:10F4A00015D02068BDF800100223B0F866000209EC +:10F4B00062F30B01ADF800109DF80110032260F318 +:10F4C00007118DF80110694660680DF0CEFD606887 +:10F4D0000DF0AAFC2168C0F1FE00B1F85620A8EB9F +:10F4E00002018142A8BF0146CFB2D019404542D2A5 +:10F4F00045F0100160680DF0DEFD60680DF094FCD1 +:10F500002168C0F1FE00B1F85610A8EB010181425C +:10F51000A8BF0146CFB260680DF0BDFD3844421C63 +:10F520002068B0F86610036E090951FA83F190F86B +:10F530005C30FF4D1944AC460023E1FB05C31B09B9 +:10F540006FF0240C03FB0C1180F85C1000E038E035 +:10F5500090F85B00012100F0B5FC0090BDF80000C0 +:10F560009DF80210032340EA01400190042201A902 +:10F5700060680DF07AFD216891F8220010F0400FCC +:10F5800005D0012306225D3160680DF06EFD206814 +:10F590003A46B0F8560000EB090160680DF0B9FD7D +:10F5A0002068B0F856103944A0F8561007F0AEFEA7 +:10F5B000002818BFFFDF20684670867003B0BDE8E2 +:10F5C000F0830121FFF7D0FAF0E7DA4810B50068C0 +:10F5D000417841B90078FF2805D000210846FFF79F +:10F5E000DBFD002010BD07F06EFB07F04DFB07F0C0 +:10F5F0003FFA07F0C7FA0C2010BD10B5CD4C2068BB +:10F6000090F8220010F0010F1CBFA06801884FF095 +:10F610003C0212BF01204FF6FF710020FEF72AFEC8 +:10F620002168012081F8370010BDC249096881F8BE +:10F63000320070472DE9F041002608F039FC00281F +:10F6400000F0F380BB4C2068417800270125012998 +:10F6500006D0022901D003297BD0FFDFBDE8F0816D +:10F66000817802270029418C37D0C1F34002002A5B +:10F6700008BF11F0010F6DD090F85B204FF0010131 +:10F680004FF0000007F0A4FB216891F82200C0F3BE +:10F690004000002814BF0C20222091F85B1006F0D7 +:10F6A00047FF2068477090F8330020B106F07DFDD9 +:10F6B000402007F03DFB206890F83400002818BF78 +:10F6C00007F063FB0021962007F0A2FA07F015FE71 +:10F6D000002818BFFFDFBDE8F081C1F3001282B13E +:10F6E00010293ED090F8330020B106F05EFD402096 +:10F6F00007F01EFB206890F8221011F0040F35D09F +:10F7000042E090F8242090F82C309A4229D1B0F8A9 +:10F710004400002808BF11F0010F05D111F0020FBD +:10F7200008BF11F0200F7DD04FF001014FF0000015 +:10F73000FFF732FD2068418C11F0010F04BFC1F3C7 +:10F74000400100290AD1B0F85610B0F84420914287 +:10F7500001E032E026E018BFBDE8F08180F83150CA +:10F76000B9E7BDE8F0410021012015E590F835101A +:10F77000012914BF0329102646F00E0190F85A20E3 +:10F780004FF0000007F024FB206890F834000028B8 +:10F7900018BF07F0FAFA0021962007F039FA20681E +:10F7A000477098E7B0F85610B0F8440081423CD05A +:10F7B000BDE8F04101210846EEE48178D9B1418CE1 +:10F7C00011F0010F1CD080F8685090F86A20B0F852 +:10F7D0006C100120FEF74EFD2068477007F073FAA9 +:10F7E00007F052FA07F044F907F0CCF9BDE8F04110 +:10F7F000032008F091BB8178BDE8F0410120CBE403 +:10F8000011F0020F08BFFFDF3FF465AFB0F85610EC +:10F81000808F814209D001210846FFF7BDFC0320FB +:10F82000216800E001E0487055E7BDE8F041FFF7CE +:10F830004FB9FFF74DB910B53E4C206890F8341021 +:10F8400049B1363007F0ACFA18B921687F2081F849 +:10F85000360007F090FA206890F8330018B107F0EE +:10F860007AFA06F0B6FC08F023FBA8B1206890F8FD +:10F870002210C1F3001179B14078022818BFFFDFD0 +:10F8800000210120FFF788FC2068417800291EBF75 +:10F8900040780128FFDF10BDBDE81040FFF718B920 +:10F8A0002DE9F047234C0F4680462168B8F1030F3D +:10F8B000488C08BFC0F3400508D000F0010591F85E +:10F8C0003200002818BF4FF0010901D14FF00009A4 +:10F8D00006F025FF0646B8F1030F0CBF4FF00208F3 +:10F8E0004FF0010835EA090008BFBDE8F08720683D +:10F8F00090F8330068B10CF0C1F838700146FF2869 +:10F9000007D06068C01C0CF092F838780CF0C3F88F +:10F91000064360680178C1F3801221680B7D9A422A +:10F920000DD10622C01C153115F0C0F8002803E0E7 +:10F9300053E4B36E6000002008BF012000D0002017 +:10F940003978FF2906D0C8B9206890F82D00884280 +:10F9500016D113E0A0B1616811F8030BC0F3801059 +:10F960000CF029F805460CF089F938B128460BF05F +:10F97000B9FE18B110210CF0C0FE08B1012000E062 +:10F980000020216891F8221011F0040F01D0F0B18D +:10F990001AE0CEB9FE4890F83500002818BF40455F +:10F9A00015D1616811F8030BC0F380100CF003F857 +:10F9B00004460CF063F938B120460BF093FE18B101 +:10F9C00010210CF09AFE10B10120BDE8F087002054 +:10F9D000BDE8F0872DE9F04FEE4D074683B028686B +:10F9E00000264078022818BFFFDF28684FF07F0903 +:10F9F00090F8341049B1363007F0D2F9002804BF2E +:10FA0000286880F8369007F0B6F968680DF072F94A +:10FA10000446002F00F0048268680DF0F6FA002812 +:10FA200000F0FE8106F049FE002800F0F981FF2079 +:10FA3000DFF864B3DFF8588300274FF0010A062C83 +:10FA400080F00082DFE804F0EFEFEF03EFF78DF8CE +:10FA5000000069460320FFF723FF002800F0E48040 +:10FA6000296891F8340010B191F89800D0B1286855 +:10FA7000817801294CD06868042107800DF018F9BD +:10FA800008F10E0168680DF039F998F80D106868F2 +:10FA90000DF050F92868828F816B68680DF087F946 +:10FAA00000F04DB99DF8000081F898A00A7881F81F +:10FAB0009920FF280FD001F19B029A310BF0A0FF93 +:10FAC000002808BFFFDF286890F89A1041F0020173 +:10FAD00080F89A100DE068680278C2F3801281F80D +:10FAE0009A20D0F80320C1F89B20B0F80700A1F8B5 +:10FAF0009F00286800F1A10490F836007F2808BF15 +:10FB0000FFDF286890F83610217080F83690AEE755 +:10FB100090F822009BF80490C0F38014686864F3A6 +:10FB20008619072107800DF0C3F8002168680DF0E1 +:10FB3000B6FA494668680DF0BEFA0623002208F1BD +:10FB40000E0168680DF091FA2868417B68680DF035 +:10FB5000F1F868680DF068F929688A8FC0F1FE0134 +:10FB60008A42B8BF1146CFB2BA423DD9F81EC7B2D9 +:10FB700049F0100A514668680DF09DFA68680DF06A +:10FB80008AFA3844431C2868B0F86610026E0909E6 +:10FB900051FA82F190F85C20DFF800920A44C846DE +:10FBA0004FF0000CE2FB098C4FEA1C116FF0240CA3 +:10FBB00001FB0C2180F85C1090F85B001A460121D3 +:10FBC00000F080F90190BDF804009DF806100323B1 +:10FBD00040EA01400290042202A968680DF045FA4B +:10FBE000514668680DF067FA34B1D5E90010012379 +:10FBF00006225D310DF039FA28683A46816B686853 +:10FC00000DF087FA2868A0F85670818F8F420CBFDC +:10FC10000121002180F8311007F078FB002818BF7F +:10FC2000FFDF8CE007E00DE128688078002840F0D5 +:10FC3000F98000F0F5B88DF8000068680178C1F32C +:10FC40008019D0F803100191B0F80700ADF8080052 +:10FC500069460520FFF724FE0028286873D08178C4 +:10FC6000002972D090F85BA0D5E90104D0F80F10FC +:10FC7000C4F80E10B0F813106182417D2175817DAA +:10FC80006175B0F81710E182B0F819106180B0F812 +:10FC90001B10A180B0F81D10E18000F11F0104F1DC +:10FCA000080015F0E4F8686890F8241001F01F01CE +:10FCB000217690F82400400984F86C0184F854A05F +:10FCC00084F855A0286890F8651084F8561090F8CC +:10FCD0005D0084F857009DF80010A86800F050F906 +:10FCE000022008F019F96868DBF800400DF1040AF9 +:10FCF000078008210CF0DCFF002168680DF0CFF9C7 +:10FD0000214668680DF0D7F90623002208F10E019C +:10FD100068680DF0AAF92868417B68680DF00AF858 +:10FD2000494668680DF013F80623012251466868B9 +:10FD30000DF09BF907F0EAFA002818BFFFDF032057 +:10FD40002968487070E066E0FFE76868AC684FF0CB +:10FD500001080278617BC2F3401211406173D0F850 +:10FD60000F10C4F80E10B0F813106182417D217598 +:10FD7000817D6175B0F81710E182B0F819106180CB +:10FD8000B0F81B10A180B0F81D10E18008E0000061 +:10FD900000060020600000209850020053E4B36E7B +:10FDA00000F11F0104F1080015F061F8686890F88F +:10FDB000241001F01F01217690F82400400984F8F6 +:10FDC0006C0184F8548084F85580286890F8651098 +:10FDD00084F8561090F85D0084F857009DF80010E4 +:10FDE000A86800F0CDF8286880F868A090F86A202C +:10FDF000B0F86C100120FEF73DFA2868477006F055 +:10FE000062FF06F041FF06F033FE06F0BBFE012064 +:10FE100008F082F808E090F82200C0F3001008B162 +:10FE2000012601E0FEF754FE286890F8330018B16F +:10FE300006F091FF06F0CDF966B100210120FFF731 +:10FE4000ABF910E0286890F82200C0F300100028F9 +:10FE5000E8D0E5E728688178012904D190F85B10A3 +:10FE6000FF2006F065FB28684178002919BF41781A +:10FE7000012903B0BDE8F08F4078032818BFFFDFE9 +:10FE800003B0BDE8F08F70B5794C06460D4620688A +:10FE9000807858B106F014FB21680346304691F88B +:10FEA0005B202946BDE8704008F0DDBD06F008FB88 +:10FEB00021680346304691F85A202946BDE8704033 +:10FEC00008F0D1BD78B50C4600210091082804BF88 +:10FED0004FF4C87040210DD0042804BF4FF4BF7008 +:10FEE000102107D0022807BF01F11800042101F1F9 +:10FEF00028000821521D02FB01065D489DF80010F4 +:10FF0000006890F85C2062F3050141F040058DF82F +:10FF1000005090F85B00012804BF9DF8020020F01B +:10FF2000E0002AD0022818BFFFDF21D025F0800092 +:10FF30008DF80000C4EB041000EB80001E2101EBE3 +:10FF4000800006FB04044B48844228BFFFDF4A4878 +:10FF5000A0FB0410BDF80110000960F30C01ADF81E +:10FF60000110BDF800009DF8021040EA014078BD84 +:10FF70009DF8020020F0E00020308DF80200D5E767 +:10FF80002DE9F0413A4D04460E46286890F8680085 +:10FF9000002818BFFFDF0027286880F86A702188D2 +:10FFA000A0F86C106188A0F88210A188A0F88410D5 +:10FFB000E188A0F8861094F86C1180F8881090F809 +:10FFC0002F1049B1427B00F10E01012A04D1497979 +:10FFD00001F0C001402934D090F8301041B1427B8B +:10FFE00000F10E01012A04BF497911F0C00F28D099 +:10FFF00000F1760014F032FF6868FF2E0178C1F33B +:020000040001F9 +:1000000080116176D0F80310C4F81A10B0F8070018 +:10001000E08328681DD0C167E18BA0F8801000F153 +:100020007002511E30460BF0EBFC002808BFFFDFCA +:10003000286890F86F1041F0020180F86F10BDE859 +:10004000F081D0F80E10C0F87610418AA0F87A102E +:10005000D2E7C767A0F88070617E80F86F10D4F88F +:100060001A100167E18BA0F87410BDE8F081000060 +:1000700060000020C4BF0300898888880178406838 +:1000800029B190F80C1190F8730038B901E001F033 +:10009000ABBC19B1042901D0012070470020704782 +:1000A00070B50C460546062102F000FB606008B101 +:1000B000002006E00721284602F0F8FA606018B137 +:1000C00001202070002070BD022070BD2DE9FC478A +:1000D0000C4606466946FFF7E3FF00287DD19DF8F0 +:1000E000000050B1FEF757F9B0427CD021463046AF +:1000F00009F038FE002873D12DE00DF089FAB042E6 +:1001000071D02146304612F02BFB002868D1019DAA +:1001100095F8D00022E0012000E00020804695F80C +:1001200037004FF0010A4FF00009F0B195F83800A0 +:1001300080071AD584F8019084F800A084F8049010 +:10014000E68095F839102172698F6181A98FA181AC +:1001500085F8379044E0019D95F80C01583500284A +:10016000DBD1E87E0028D8D0D5E7304602F0E2FBAC +:10017000070000D1FFDF384601F0F2FD40B184F8FE +:1001800001900F212170E680208184F804A027E0EF +:10019000304602F0BDFB070000D1FFDFB8F1000FD1 +:1001A00021D0384601F033FEB8B19DF8000038B9CF +:1001B0000198D0F8F8004188B14201D180F8009050 +:1001C000304607F048F984F801900C21217084F83A +:1001D0000490E680297F217200E004E085F81B90FE +:1001E0000120BDE8FC870020FBE71CB56946FFF74E +:1001F00057FF00B1FFDF684601F002FCFA4900201A +:100200008968A1F8D2001CBD2DE9FC4104460E46C8 +:10021000062002F0F3F90546072002F0EFF9284422 +:10022000C7B20025A8463E4417E02088401C80B293 +:100230002080B04202D34046A4F8008080B2B84289 +:1002400004D3B04202D20020BDE8FC816946FFF72A +:1002500027FF0028F8D06D1CEDB2AE42E5D84FF66E +:10026000FF7020801220EFE738B54FF6FF70ADF831 +:1002700000000DE00621BDF8000002F029FA044656 +:100280000721BDF8000002F023FA0CB100B1FFDF36 +:1002900000216846FFF7B8FF0028EBD038BD70B5E5 +:1002A00007F046F90BF073F9D04C4FF6FF760025B6 +:1002B0006683A683CEA0257001680079A4F1400270 +:1002C000657042F8421FA11C1071601C12F014FCF2 +:1002D00025721B2060814FF4A471A181E0812182ED +:1002E0000321A1740422E274A082E082A4F13E0002 +:1002F000218305704680BC480C300570A4F11000C5 +:100300000570468070BD70B5B74C16460D466060EE +:10031000217007F087F8FFF7A7FFFFF7C0FF2078ED +:1003200010F073FAB4480DF0E7FD2178606812F020 +:10033000F6FA20780AF0B6FB284608F049F9AE48EC +:10034000FEF734F82178606809F0F2FD3146207834 +:1003500013F094F9BDE870400BF019B910B5012401 +:100360000AB1002010BD21B1012903D0002420468C +:1003700010BD02210CF00AFFF9E72DE9F047040057 +:1003800000D1FFDF994802211C308146FFF73CFF76 +:1003900000B1FFDF954D0620B5F81C8002F02EF964 +:1003A0000646072002F02AF93044C6B2701CC7B2D4 +:1003B000A88BB04228D120460DF0A0F8B0B120782B +:1003C00018283FD1207901283CD1E088062102F08D +:1003D0006DF9040000D1FFDF208807F03CF8208889 +:1003E000062102F075F940B3FFDF2BE0287860B3F7 +:1003F00000266670142020702021201D14F023FC9C +:10040000022020712E701DE0B84217D12046FDF762 +:1004100067FFD0B12078172814D1207968B1E0881F +:10042000072102F043F940B1008807F014F8E08892 +:10043000072102F04DF900B1FFDF03E02146FFF78D +:1004400045FE10B10120BDE8F08702214846FFF7C4 +:10045000DBFE10B9A98B4145AAD12046BDE8F04783 +:1004600013F052B910B501F067FA08B10C2010BDB5 +:100470000BF0E0F8002010BD10B50446007818B16C +:10048000012801D0122010BD01F067FA20B10BF055 +:1004900081FA08B10C2010BD207801F00FFAE21D9E +:1004A00004F11703611CBDE810400BF068B910B5EA +:1004B000044601F041FA08B10C2010BD207828B1A3 +:1004C000012803D0FF280BD0122010BD01F0F6F94F +:1004D000611C0BF06FF808B1002010BD072010BDA3 +:1004E00001200BF0A1F8F7E710B50BF056FA08B1B0 +:1004F000002010BD302010BD10B5044601F02DFACB +:1005000008B10C2010BD20460BF041FA002010BDB0 +:1005100010B501F022FA20B10BF03CFA08B10C2022 +:1005200010BD0BF091F9002010BDFF2181704FF636 +:10053000FF7181802C4949680A7882718A8802811A +:100540004988418101214170002070471CB5002479 +:1005500012F1080F15D00CDC12F1280F11D012F196 +:10056000140F0ED012F1100F0BD012F10C0F0ED190 +:1005700007E012F1040F04D01AB1032A01D0042AB3 +:1005800005D1012806D0022808D003280AD0122459 +:1005900020461CBD1046FEF77CFAF9E710460DF028 +:1005A00051FCF5E7084614466946FFF779FD08B1A6 +:1005B0000224EDE79DF80000019880F857400024E0 +:1005C000E6E710B5134601220CF0D4F8002010BD68 +:1005D00010B5044610F0FCFE05280FD0204610F0A0 +:1005E00003F9002010BD00006C000020E40700208B +:1005F000FFFFFFFF1F000000A40600200C20F1E712 +:1006000010B5044601F0A9F908B10C20EAE721462B +:10061000002006F08EFF0020E4E710B5044610F03D +:1006200071F950B108F04DFA38B1207807F0F5FFB4 +:1006300020780DF0F3FE0020D4E70C20D2E710B5AF +:10064000044601F08AF908B10C20CBE721460120CD +:1006500006F06FFF0020C5E738B504464FF6FF707F +:10066000ADF80000A079E179884216D02079FDF735 +:10067000A4FD90B16079FDF7A0FD70B10022A079D2 +:10068000114613F011FC40B90022E079114613F035 +:100690000BFC10B9207A072801D9122038BD08F0C8 +:1006A0001DFA60B910F094FE48B900216846FFF7C2 +:1006B000ABFD20B1204605F016FF002038BD0C2010 +:1006C00038BD2DE9FC41817805461A2925D00EDC7C +:1006D00016292DD2DFE801F02C2C2C2C2C212C2CCF +:1006E0002C2C2C2C2C2C2C2C2C2C2C2121212A2970 +:1006F0001ED00BDCA1F11E010C2919D2DFE801F09C +:1007000018181818181818181818180D3A39042934 +:100710000ED2DFE801F00D020D022888B0F5706FEF +:1007200006D201276946FFF7BBFC18B102208BE512 +:10073000122089E59DF8000001F0CCF8019C08B179 +:10074000F43401E004F5B8749DF8000001F0C2F83B +:10075000019E08B1F53601E006F271166846FFF712 +:100760008DFC08B1207808B10C206DE52770A878C1 +:100770003070684601F044F9002065E57CB50D460F +:100780006946FFF78DFC002618B12E602E710220FD +:100790007CBD9DF8000001F09DF8019C9DF80000D3 +:1007A000583401F097F8019884F840608168296016 +:1007B000017B297194F840100029F5D100207CBDFF +:1007C00070B50D4604460189002380880CF031F98C +:1007D000696A81421DD2401A401CA1884008091A4A +:1007E0008AB2A2802189081A2081668895F854105F +:1007F00010460CF0F8F8864200D230466080E68859 +:1008000095F8551020890CF0EEF8864200D230465B +:10081000E08070BDF0B585B00D46064603A9FFF730 +:100820003FFC00282DD19DF80C0060B300220499F4 +:10083000FB20B1F84A30FB2B00D30346B1F84C4003 +:10084000FB20FB2C00D30446DFF890CA9CE8811003 +:1008500000900197CDF808C0ADF80230ADF8064021 +:100860006846FFF7ADFF6E80BDF80400E880BDF874 +:1008700008006881BDF80200A880BDF80600288144 +:10088000002005B0F0BD0122D1E72DE9F04186B08E +:10089000044600886946FFF703FC002868D12189D7 +:1008A000E08801F0BCF8002862D1A188608801F0DE +:1008B000B6F800285CD12189E08801F0BEF8002854 +:1008C00056D1A188608801F0B8F8070050D120887F +:1008D00002A9FFF79FFF00B1FFDFBDF8101062888B +:1008E0000920914244D3BDF80C10E28891423FD3D5 +:1008F000BDF81210BDF80E2023891144A2881A44B5 +:10090000914235D39DF80000019D4FF0000801266B +:1009100040B185F89B61019890F8DE0105F5CD7531 +:1009200040B914E085F80561019890F8280105F5B3 +:10093000827508B13A2718E0E08868806088E8800E +:100940002089A880A08828810122019909E0E088F7 +:1009500068806088E8802089A880A0882881019923 +:1009600000222846FFF72CFF2E7085F801803846BC +:1009700006B0BDE8F08188E710B5044600F0EDFF51 +:1009800020B10BF007F808B10C202BE6207800F01E +:1009900095FFE279611C0BF07EF908B1002021E699 +:1009A00002201FE610B503780446002B406813466A +:1009B0000A46014608D001200CF06BF96168496ACB +:1009C000884203D901200DE60020F5E7002009E662 +:1009D000887800B90320C97801B903211070197013 +:1009E0000020704710B586B00446008803A9FFF7C1 +:1009F00057FB002806D1A08830B1012804D0022876 +:100A000002D0122006B0EDE56B4602AA214603A8EB +:100A1000FFF7DEFF0028F5D19DF80C300022012100 +:100A2000002B049B06D083F8A511049B93F8F231A8 +:100A30004BBB20E083F80F11049B93F834313BB992 +:100A4000049B93F80E311BB9049B93F87D300BB1D6 +:100A50003A200CE0049B83F80E11049B9DF80810CB +:100A600083F81011049B9DF8001083F8111104996C +:100A700081F80F21C6E7049B93F8A4311BB9049BAE +:100A800093F87D300BB13A200CE0049B83F8A4115D +:100A9000049B9DF8081083F8A611049B9DF8001094 +:100AA00083F8A711049981F8A521ABE710B5044696 +:100AB0000020A17801B90120E2780AB940F00200D3 +:100AC00000F0C5FF002803D12046BDE8104089E7AB +:100AD00088E52DE9F04104460078012804D018B1DA +:100AE000022801D003281ED1607828B1012803D044 +:100AF000022801D0032816D1E07B10B9A078012884 +:100B000011D1A07830F005020DD110F0050F0AD0F8 +:100B1000400801D011202CE7E078E68862890F4672 +:100B200018B1012801D0122023E7104600F09FFFE2 +:100B3000302558B13946304600F0A3FF30B1A07BD4 +:100B40000028F0D00728EED8002012E7284610E74A +:100B50001FB5044600F0E3FE10B10C2004B041E5DF +:100B6000022104F10A0000F096FFA0788DF8080039 +:100B7000A0788DF8000060788DF8040020788DF85A +:100B80000300A07B8DF80500E07B00B101208DF80B +:100B90000600A078C0070DD0E078012813D0A0B1DE +:100BA0005FF000008DF80100E088ADF80A00608970 +:100BB000ADF80C0002A80FF0B1FE0028CED16846B7 +:100BC0000DF031FCCAE70220ECE70120EAE710B59E +:100BD00004460121FFF77DFF002803D12046BDE830 +:100BE0001040B5E7FEE40278012A01D0BAB118E05E +:100BF00042783AB1012A05D0022A12D189B18188FE +:100C000079B100E059B1418849B1808838B101EB30 +:100C10008101490000EB8000B1EB002F01D20020E0 +:100C200070471220704770B5044600780D460128C1 +:100C300009D010F0CDFB052803D00FF080FD00286F +:100C400000D00C2070BD0DF0CFFA88B10DF0E1FAA4 +:100C50000DF0C6FB0028F5D125B160780DF076FBCC +:100C60000028EFD1A1886088BDE870400FF071BE08 +:100C7000122070BD10B504460121FFF7B4FF002813 +:100C800004D12046BDE810400121CCE7AAE42DE9BB +:100C9000F0470746B0F84C50FB2092460E46FB2D1D +:100CA00000D30546DFF83886B8F80A00A84200D21B +:100CB000054697F85510284600F020FEB8F80C10AD +:100CC000814200D208468146B7F84A40FB20FB2CFF +:100CD00000D30446B8F80E00A04200D2044697F8AC +:100CE0005410204600F00AFEB8F81010814200D2DD +:100CF00008464FF4A4721B2C01D0904203D11B2D47 +:100D000025D0914523D0F580A6F808907480B08056 +:100D1000524639463046FFF753FD01203070F088C7 +:100D20001B38E02800D9FFDF70881B38E02800D985 +:100D3000FFDF30894FF4E064A0F5A470A04200D931 +:100D4000FFDFB088A0F5A470A04200D9FFDFBDE8A6 +:100D5000F087F0B5871FDDE9056540F67B44A742C3 +:100D600013D28F1FA74210D288420ED8B2F5FA7F55 +:100D70000BD2A3F10A00241FA04206D2521C4A4300 +:100D8000B2EB830F01DAAE4201D90020F0BD0120A1 +:100D9000F0BD2DE9FC41477A04468846780778D0B3 +:100DA000F80876D1780701D51120C0E494F83A000C +:100DB00008B9012F78D100252E46F8071BD088F0FE +:100DC0000105208A294600F052FE48B36089294671 +:100DD00000F057FE20B3208A6189884264D8A18E32 +:100DE000E08DCDE90001238D628CA18BE08AFFF7B5 +:100DF000B0FFA8B10125B8070ED504EB4500828EDF +:100E0000C18DCDE90012038D428C818BC08AFFF722 +:100E1000A0FF28B16D1C2E46B8F1000F02D027E0CC +:100E2000302084E4228A01211DE0B14203D004EB8A +:100E30004100008A024404EB4100C38A878ABB4216 +:100E400032D1838B478BBB422ED1438C078CBB4264 +:100E50002AD1038DC78CBB4226D1438900898342A6 +:100E600022D1491CC9B2A942DFD3608990421BD369 +:100E7000207810B1012817D10EE0A078B8F1000F4A +:100E800008D048B1012807D0022805D003280BD18B +:100E900002E009E00028EDD1607838B1012805D0E2 +:100EA000022803D0032801D0122040E400203EE4B1 +:100EB00000216EE70178C90702D0406812F0F7BB45 +:100EC00012F0C4BB2DE9F0438DB00D46AFF6E00241 +:100ED000D2E9008701462846FFF75BFF00280CD1C6 +:100EE00000F01DFD40B9FE4E307828B90CF090FBA3 +:100EF000A0F57F41FF3903D00C200DB0BDE8F08391 +:100F0000032105F1100000F0C6FDF54808AA3E389F +:100F10000890F4480990F248062110380A900BA86E +:100F200001F092FB040035D003210BF0C2F9B18A25 +:100F3000A4F84A10F28AA4F84C20F37C0093B1463E +:100F4000B37C208801F06DFC00B1FFDF208806F043 +:100F500081FA218804F10E0000F009FDE2A004F1FD +:100F6000120600680490032104A804F0B1FD0020DB +:100F700004A90A5C3254401CC0B20328F9D3A88BE0 +:100F80006080688CA080288DE080687AC10703D0DB +:100F9000012106E00920B0E7800701D5022100E029 +:100FA0000021B9F818000A460FF068FD0146A0625A +:100FB00020460FF071FD002684F85E6084F85F60C3 +:100FC000A87800F07BFC6076D5F80300C4F81A001E +:100FD000B5F80700E083C4F808802773012084F87F +:100FE0000001024604F582712046FFF750FE8DF89D +:100FF00000600121684604F06BFD9DF8000000F0E0 +:101000000701C0F3C1021144C0F3401008448DF839 +:101010000000401D2076092801D2083020760021EA +:1010200020460BF046F968780DF0E9F8A9782878A1 +:10103000EA1C0DF0B7F848B10DF0EBF8A978287864 +:10104000EA1C0DF05DF9060002D038E0122636E009 +:10105000687A00F001010020CA0700D0012089074A +:1010600001D540F002000DF086F8060027D1214698 +:1010700003200DF06FF9060021D1687A00F001011C +:101080008DF80810C00705D06889ADF80A00288AD5 +:10109000ADF80C0002A80FF041FC064695F83A00A6 +:1010A00000B101200DF079F84EB90DF099F9060064 +:1010B00005D1A98F20460FF0D3FB060008D0208869 +:1010C00006F0C9F92088062101F002FB00B1FFDF1C +:1010D000304612E701460020F4E638B58048007833 +:1010E00078B910F075F9052805D00CF091FAA0F543 +:1010F0007F41FF3905D068460FF06FFC040002D035 +:101100000CE00C2038BD0098008806F0A4F9009887 +:101110000621008801F0DCFA00B1FFDF204638BD6F +:101120001CB582894189CDE900120389C288818872 +:101130004088FFF70EFE08B100201CBD30201CBD0A +:1011400070B50546FFF7ECFF00280ED12888062170 +:1011500001F0ACFA040007D000F046FC20B1D4F84E +:10116000F800017831B901E0022070BDD4F84411D3 +:10117000097809B13A2070BD05218171D4F8F810C1 +:1011800000200881D4F8F810A8884881D4F8F81015 +:10119000E8888881D4F8F8102889C881D4F8F80044 +:1011A000028941898A4204D88279082A01D88A4270 +:1011B00001D3122070BD29884180D4F8F810022094 +:1011C0000870002070BD3EB504460BF065FAB0B162 +:1011D00043480125A0F140024570236842F8423F90 +:1011E00023790021137141706946062001F0E7F967 +:1011F00000B1FFDF684601F0C0F910B10EE0122027 +:101200003EBDBDF80440029880F80051684601F0E8 +:10121000B4F918B9BDF80400A042F4D100203EBDD5 +:1012200070B505460088062101F040FA040007D099 +:1012300000F0DAFB20B1D4F8F810087830B901E0FA +:10124000022070BDD4F84401007808B13A2070BD86 +:101250009620005D10F0010F18D0D5F8020048600C +:10126000D5F80600886054F8F80F6989102281814A +:10127000206805F10C010E3013F044FC21680320B6 +:101280000870216828884880002070BD0C2070BD3F +:1012900038B504460078EF2856D86088ADF80000CD +:1012A000009800F009FCD0B36188080708D4D4E99D +:1012B0000120824248D8202A46D3B0F5804F43D837 +:1012C000207B60B307283FD8607B28B1012803D07A +:1012D000022801D0032837D14A0707E0BC5002009A +:1012E000E4070020780000201122330003D40228F4 +:1012F00001D0032805D1A07B08B1012824D14807DB +:1013000007D4607D28B1012803D0022801D003282A +:101310001AD1C806E07D03D5012815D110E013E0ED +:10132000012801D003280FD1C80609D4607E012806 +:1013300003D0022801D0032806D1A07E0F2803D8AD +:10134000E07E18B1012801D0122038BD002038BD40 +:10135000F8B515460E46044607F0C0FB08B10C2050 +:10136000F8BD2046FFF794FF0028F9D1E07D03285F +:101370000BD0A078C00602D4607E032805D0FDF70C +:101380008DFB3070A07515B10CE01120F8BDFF2069 +:101390008DF8000069460020FDF76FFB69460020CC +:1013A000FDF75FFB2046BDE8F840FDF7BBBA002221 +:1013B000CEE770B50C46054612B11F2907D80CE0E0 +:1013C000FF2C04D8FDF735F818B11F2C01D91220D5 +:1013D00070BD2846FDF717F808B1002070BD422007 +:1013E00070BD10B50446408810B1FDF71DFB78B103 +:1013F0002078618800F001026078FFF7DAFF0028AA +:1014000005D1FDF7F9FA6288824203D907203DE44D +:1014100012203BE410466168FDF72FFB002035E405 +:1014200010B50446408810B1FCF7F5FF70B1207884 +:10143000618800F001026078FFF7BBFF002804D14B +:1014400060886168FDF70DFB00201FE412201DE499 +:101450007CB5054640784224012808D8A878FCF7D6 +:10146000D2FF20B128781224012802D090B1204662 +:101470007CBDFDF71FFB20B1A8880028F7D080288D +:10148000F5D8FDF71EFB60B168780028EFD028780A +:10149000012808D006F0FEF8044606F0F6FF002802 +:1014A00072D00C207CBDFDF756F910B9FDF7FBFAA0 +:1014B00090B307F013FB0028F3D1FCF76CFFA0F505 +:1014C0007F41FF39EDD1FDF768F9AE8842F2107027 +:1014D0004643A879FDF7B9FAFCF7A4FFF8B100225A +:1014E000072101A801F0B0F804001FD0F74803213C +:1014F000846020460AF098FD2046FDF74AFEF44D30 +:10150000A88AA4F84A00E88AA4F84C00FCF791FFE6 +:1015100070B1288B01210FE0FFE712207CBD31461E +:10152000002007F07DF868B3FFDF37E009207CBDBD +:10153000FDF7C9FA0146288B07F01DF90146A062A4 +:101540000022204606F0A9F8FCF773FF08B9FDF762 +:10155000BAFAE87C0090AB7CEA8AA98A208801F07C +:1015600060F900B1FFDF208805F074FF31462046A6 +:1015700007F056F800B1FFDF002204F5CD712046D8 +:10158000FFF785FB0AE0FFE744B1208805F063FF21 +:101590002088072101F09CF800B1FFDF00207CBD0E +:1015A000002155E770B50D46072101F07FF80400D2 +:1015B00003D094F8730110B10AE0022070BD94F8D2 +:1015C0006500142801D0152802D194F8C00108B193 +:1015D0000C2070BD1022294604F5BA7013F092FA5F +:1015E000012084F87301002070BD10B5072101F0BF +:1015F0005DF818B190F8731111B107E0022006E709 +:1016000090F86510142903D0152901D00C20FEE6AE +:10161000022180F873110020F9E62DE9FC410C4607 +:101620004BF68032122194421CD8DCB16946FEF799 +:1016300037FD002815D19DF8000000F04BF9019E00 +:101640009DF80000583600F045F9019DAD1C2F882B +:101650002246394630460AF0A2FC2888B842F6D124 +:10166000002022E4084620E47CB504460088694650 +:10167000FEF716FD002810D19DF8000000F02AF9B1 +:10168000019D9DF80000583500F024F90198A278DA +:1016900090F82C10914201D10C207CBD7F21297241 +:1016A000A9720021E972E17880F82D10217980F883 +:1016B0002E10A17880F82C1000207CBD1CB50C46A3 +:1016C0006946FEF7EDFC00280AD19DF8000000F005 +:1016D00001F9019890F8730000B1012020700020FA +:1016E0001CBD7CB50D4614466946FEF7D9FC0028A2 +:1016F00009D19DF8000000F0EDF8019890F82C0059 +:10170000012801D00C207CBD9DF8000000F0E2F81B +:10171000019890F86010297090F861002070002006 +:101720007CBD70B50D461646072100F0BFFF18B30B +:1017300081880124C388428804EB4104AC4217D855 +:1017400042F210746343A4106243B3FBF2F2521EE0 +:1017500094B24FF4FA72944200D91446A54200D2D2 +:101760002C46491C641CB4FBF1F24A43521E91B250 +:1017700090F8AC211AB901E0022070BD01843180DB +:10178000002070BD10B50C46072100F08FFF48B156 +:1017900080F8DF4024B190F8DD1009B107F001F8BE +:1017A000002034E6022032E6017899B1417889B10F +:1017B00041881B290ED381881B290BD3C18802299C +:1017C00008D343490268403941F8522F40684860C5 +:1017D000002070471220704710B504460FF04AF9F8 +:1017E000204606F097FF002011E610B506F095FFA1 +:1017F00000200CE62DE9F04115460F460646012271 +:10180000114638460FF03AF904460121384606F0F1 +:10181000B2FF844200D2044601213046653C00F00C +:101820005EF806460121002000F059F830440121FD +:101830009630844206D900F19601201AB0FBF1F0EF +:10184000401C81B229800020BDE8F08110B504461B +:1018500000F083F808B10C20D9E5601C0AF0F6F915 +:10186000207800F00100FCF793FF207800F00100E1 +:101870000CF0CAFC0020CAE510B50446072000F0B1 +:10188000AFFE08B10C20C2E52078C00710D00022BE +:101890006078114612F008FB08B11220B7E5A06885 +:1018A00008F0A3FE6078616808F0A8FE0020AEE5AD +:1018B000002008F09AFE00210846F5E718B102283A +:1018C00001D0012070470020704700006C0000200C +:1018D000E407002008B10020F6E70120F4E710B586 +:1018E000012904D0022905D0FFDF20468FE5C00082 +:1018F000503001E080002C3084B2F6E711F00C0F7C +:1019000004D04FF4747101EB801006E0022902D07C +:10191000C000703001E080003C3080B2D4E710B5E8 +:101920000FF056FD042805D00FF052FD052801D018 +:1019300000206CE501206AE510B5FFF7F0FF10B15B +:101940000CF012FD28B907F0C9F820B1FCF7FBFE36 +:1019500008B101205BE5002059E510B5FFF7DFFF76 +:1019600018B907F0BBF8002800D001204FE52DE999 +:10197000FE4300250F4680460A260421404604F017 +:10198000D0F840460AF064FE062000F037FE044618 +:1019900015E06946062000F012FE0AE0BDF80400DA +:1019A000B84206D00298042241460E3013F07EF869 +:1019B00050B1684600F0E1FD0500EFD0641E002C38 +:1019C00006DD002DE5D005E040460AF04AFEF5E7C9 +:1019D00005B9FFDFD8F800000AF0EBFA761E01D057 +:1019E0000028CAD0BDE8FE8390F8D01090F87300AC +:1019F00020B919B1042901D0012065E7002063E76F +:101A0000017800290AD0416891F8DD20002A05D02C +:101A1000002281F8DD20406806F0C3BE54E71B3881 +:101A2000E12806D2B1F5A47F03D344F2902081428D +:101A300001D9122048E7002046E7FB2803D840F6EA +:101A40004800814201D911203EE700203CE770B5F3 +:101A500014460546012200F053F8002806D121461D +:101A60002846BDE87040002200F04AB870BD042846 +:101A700003D321B9B0F5804F01D9002024E701201C +:101A800022E7042803D321B9B0F5804F01D9002003 +:101A90001AE7012018E710B500224FF4C84408E007 +:101AA00030F81230A34200D9234620F81230521CDD +:101AB000D2B28A42F4D3AAE480B2C1060BD40107A1 +:101AC0001CD481064FEAC07101D5B9B900E099B1C3 +:101AD000800713D410E0410610D481060ED4C1074C +:101AE0004FEA807104D0002902DB400704D405E0EE +:101AF000010703D4400701D40120E5E60020E3E616 +:101B00000AB1012200E00222024202D1880802D179 +:101B100009B10020D8E61120D6E6000030B50588CE +:101B200025F4004421448CB24FF4004194420AD27F +:101B3000121B92B21B339A4201D2A94307E005F46B +:101B40000041214303E0A21A92B2A943114301804C +:101B500030BD0844083050434A31084480B27047D1 +:101B600070B51D4616460B46044629463046049A73 +:101B7000FFF7EFFF0646B34200D2FFDF28212046E1 +:101B800013F061F84FF6FF70A082283EB0B265777F +:101B90006080B0F5004F00D9FFDF618805F13C009F +:101BA000814200D2FFDF60880835401B343880B2A4 +:101BB00020801B2800D21B2020800020A07770BD31 +:101BC0008161886170472DE9F05F0D46C188044648 +:101BD00000F12809008921F4004620F4004800F0B3 +:101BE00062FB10B10020BDE8F09F4FF0000A4FF0FB +:101BF000010BB0450CD9617FA8EB0600401A0838EC +:101C0000854219DC09EB06000021058041801AE0BD +:101C10006088617F801B471A083F0DD41B2F00DAB4 +:101C2000FFDFBD4201DC294600E0B9B2681A0204B8 +:101C3000120C04D0424502DD84F817A0D2E709EB6C +:101C400006000180428084F817B0CCE770B50446E6 +:101C500000F12802C088E37D20F400402BB110443D +:101C60000288438813448B4201D2002070BD0025B6 +:101C70008A4202D30180458008E0891A0904090CD0 +:101C8000418003D0A01D00F01EFB08E0637F0088A8 +:101C90000833184481B26288A01DFFF73FFFE57545 +:101CA000012070BD70B5034600F12804C588808806 +:101CB00020F400462644A84202D10020188270BDBC +:101CC00098893588A84206D3401B75882D1A204470 +:101CD000ADB2C01E05E02C1AA5B25C7F2044304492 +:101CE000401D0C88AC4200D90D809C8924B1002491 +:101CF00014700988198270BD0124F9E770B5044693 +:101D000000F12801808820F400404518208A00282E +:101D100025D0A189084480B2A08129886A8811440D +:101D2000814200D2FFDF2888698800260844A18903 +:101D3000884212D1A069807F2871698819B1201D5D +:101D400000F0C1FA08E0637F28880833184481B2A4 +:101D50006288201DFFF7E2FEA6812682012070BD69 +:101D60002DE9F041418987880026044600F12805C5 +:101D7000B94218D004F10A0821F4004028444188EF +:101D800019B1404600F09FFA08E0637F00880833ED +:101D9000184481B262884046FFF7C0FE761C618914 +:101DA000B6B2B942E8D13046BDE8F0812DE9F04144 +:101DB00004460B4627892830A68827F40041B4F84A +:101DC0000A8001440D46B74201D10020ECE70AB178 +:101DD000481D106023B1627F691D184612F092FE03 +:101DE0002E88698804F1080021B18A1996B200F0A2 +:101DF0006AFA06E0637F62880833991989B2FFF7AF +:101E00008DFE474501D1208960813046CCE781882D +:101E1000C088814201D101207047002070470189AC +:101E20008088814201D1012070470020704770B541 +:101E30008588C38800F1280425F4004223F400417A +:101E400014449D421AD08389058A5E1925886388C7 +:101E5000EC18A64214D313B18B4211D30EE0437F8A +:101E600008325C192244408892B2801A80B223332F +:101E7000984201D211B103E08A4201D1002070BD25 +:101E8000012070BD2DE9F0478846C18804460089CD +:101E900021F4004604F1280720F4004507EB060969 +:101EA00000F001FA002178BBB54204D9627FA81B7B +:101EB000801A002503E06088627F801B801A083842 +:101EC00023D4E28962B1B9F80020B9F802303BB1FD +:101ED000E81A2177404518DBE0893844801A09E088 +:101EE000801A217740450ADB607FE1890830304461 +:101EF00039440844C01EA4F81280BDE8F087454567 +:101F000003DB01202077E7E7FFE761820020F4E7A9 +:101F10002DE9F74F044600F12805C088884620F4D3 +:101F2000004A608A05EB0A0608B1404502D200204B +:101F3000BDE8FE8FE08978B13788B6F8029007EBEC +:101F40000901884200D0FFDF207F4FF0000B50EAEC +:101F5000090106D088B33BE00027A07FB946307165 +:101F6000F2E7E18959B1607F2944083050440844C0 +:101F7000B4F81F1020F8031D94F821108170E28935 +:101F800007EB080002EB0801E1813080A6F802B0FF +:101F900002985F4650B1637F30880833184481B29D +:101FA0006288A01DFFF7BAFDE78121E0607FE1892B +:101FB00008305044294408442DE0FFE7E089B4F894 +:101FC0001F102844C01B20F8031D94F821108170B5 +:101FD00009EB0800E28981B202EB0800E08137805A +:101FE00071800298A0B1A01D00F06DF9A4F80EB0A8 +:101FF000A07F401CA077A07D08B1E088A08284F873 +:1020000016B000BFA4F812B084F817B001208FE713 +:10201000E0892844C01B30F8031DA4F81F10807805 +:1020200084F82100EEE710B5818800F1280321F43F +:1020300000442344848AC288A14212D0914210D025 +:10204000818971B9826972B11046FFF7E8FE50B913 +:102050001089283220F40040104419790079884210 +:1020600001D1002010BD184610BD00F12803407FAB +:1020700008300844C01E1060088808B9DB1E1360D1 +:1020800008884988084480B270472DE9F04100F182 +:102090002806407F1C4608309046431808884D8823 +:1020A000069ADB1EA0B1C01C80B2904214D9801ADF +:1020B000A04200DB204687B298183A46414612F00B +:1020C000F5FC002816D1E01B84B2B844002005E0DE +:1020D000ED1CADB2F61EE8E7101A80B20119A94254 +:1020E00006D8304422464146BDE8F04112F0DEBC3D +:1020F0004FF0FF3058E62DE9F04100F12804407F11 +:102100001E46083090464318002508884F88069AD6 +:10211000DB1E90B1C01C80B2904212D9801AB0422E +:1021200000DB304685B299182A46404612F0EAFC98 +:10213000701B86B2A844002005E0FF1CBFB2E41E5D +:10214000EAE7101A80B28119B94206D8211832463E +:10215000404612F0D7FCA81985B2284624E62DE99E +:10216000F04100F12804407F1E4608309046431895 +:10217000002508884F88069ADB1E90B1C01C80B2EB +:10218000904212D9801AB04200DB304685B29818CE +:102190002A46414612F0B6FC701B86B2A8440020C5 +:1021A00005E0FF1CBFB2E41EEAE7101A80B28119F5 +:1021B000B94206D820443246414612F0A3FCA81981 +:1021C00085B22846F0E5401D704710B5044600F181 +:1021D0002801C288808820F400431944904206D028 +:1021E000A28922B9228A12B9A28A904201D1002082 +:1021F00010BD0888498831B1201D00F064F8002026 +:102200002082012010BD637F62880833184481B2A8 +:10221000201DFFF783FCF2E70021C1810177418295 +:10222000C1758175704703881380C28942B1C28825 +:1022300022F4004300F128021A440A60C089704762 +:102240000020704710B50446808AA0F57F41FF3911 +:1022500000D0FFDFE088A082E08900B10120A075F6 +:1022600010BD4FF6FF71818200218175704710B556 +:102270000446808AA0F57F41FF3900D1FFDFA07DB1 +:1022800028B9A088A18A884201D1002010BD012070 +:1022900010BD8188828A914201D1807D08B10020E1 +:1022A00070470120704720F4004221F400439A4215 +:1022B00007D100F4004001F40041884201D0012020 +:1022C00070470020704730B5044600880D4620F462 +:1022D0000040A84200D2FFDF21884FF4004088432D +:1022E0002843208030BD70B50C00054609D0082C6D +:1022F00000D2FFDF1DB1A1B2286800F044F8201D14 +:1023000070BD0DB100202860002070BD0021026862 +:1023100003E093881268194489B2002AF9D100F0C9 +:1023200032B870B500260D460446082900D2FFDFFA +:10233000206808B91EE0044620688188A94202D0BE +:1023400001680029F7D181880646A94201D10068B9 +:102350000DE005F1080293B20022994209D3284406 +:10236000491B02608180216809682160016020604A +:1023700000E00026304670BD00230B608A800268B2 +:102380000A600160704700234360021D0181026002 +:102390007047F0B50F460188408815460C181E4658 +:1023A000AC4200D3641B3044A84200D9FFDFA0191F +:1023B000A84200D9FFDF3819F0BD2DE9F041884669 +:1023C00006460188408815460C181F46AC4200D3CB +:1023D000641B3844A84200D9FFDFE019A84200D9A5 +:1023E000FFDF70883844708008EB0400BDE8F0819E +:1023F0002DE9F041054600881E461746841B884695 +:10240000BC4200D33C442C8068883044B84200D998 +:10241000FFDFA019B84200D9FFDF68883044688028 +:1024200008EB0400E2E72DE9F04106881D4604466A +:10243000701980B2174688462080B84201D3C01B6D +:1024400020806088A84200D2FFDF7019B84200D90E +:10245000FFDF6088401B608008EB0600C6E730B5F0 +:102460000D460188CC18944200D3A41A40889842A3 +:1024700000D8FFDF281930BD2DE9F041C84D0446D2 +:102480009046A8780E46A04200D8FFDF05EB8607ED +:10249000B86A50F8240000B1FFDFB868002816D0F1 +:1024A000304600F044F90146B868FFF73AFF0500EE +:1024B0000CD0B86A082E40F8245000D3FFDFB9488A +:1024C0004246294650F82630204698472846BDE81F +:1024D000F0812DE9F8431E468C1991460F460546BA +:1024E000FF2C00D9FFDFB14500D9FFDFE4B2009532 +:1024F0004DB300208046E81C20F00300A84200D025 +:10250000FFDF4946DFF89892684689F8001089F89D +:10251000017089F8024089F8034089F8044089F87D +:10252000054089F8066089F80770414600F008F90F +:10253000002142460F464B460098C01C20F0030085 +:10254000009012B10EE00120D4E703EB8106B062E7 +:10255000002005E0D6F828C04CF82070401CC0B21E +:10256000A042F7D30098491C00EB8400C9B2009048 +:102570000829E1D3401BBDE8F88310B50446EEF707 +:10258000C8FE08B1102010BD2078854A618802EB92 +:10259000800092780EE0836A53F8213043B14A1CE0 +:1025A0006280A180806A50F82100A060002010BDE8 +:1025B000491C89B28A42EED86180052010BD70B5F1 +:1025C00005460C460846EEF7A4FE08B1102070BD83 +:1025D000082D01D3072070BD25700020608070BDDC +:1025E0000EB56946FFF7EBFF00B1FFDF6846FFF766 +:1025F000C4FF08B100200EBD01200EBD10B5044679 +:10260000082800D3FFDF6648005D10BD3EB50546D3 +:1026100000246946FFF7D3FF18B1FFDF01E0641C17 +:10262000E4B26846FFF7A9FF0028F8D02846FFF774 +:10263000E5FF001BC0B23EBD59498978814201D9EE +:10264000C0B27047FF2070472DE9F041544B062976 +:1026500003D007291CD19D7900E0002500244FF606 +:10266000FF7603EB810713F801C00AE06319D7F87E +:1026700028E09BB25EF823E0BEF1000F04D0641C9A +:10268000A4B2A445F2D8334603801846B34201D120 +:1026900000201CE7BDE8F041EEE6A0F57F43FF3BDC +:1026A00001D0082901D300207047E5E6A0F57F425C +:1026B000FF3A0BD0082909D2394A9378834205D9C9 +:1026C00002EB8101896A51F82000704700207047B1 +:1026D0002DE9F04104460D46A4F57F4143F2020086 +:1026E000FF3902D0082D01D30720F0E62C494FF026 +:1026F00000088A78A242F8D901EB8506B26A52F83E +:102700002470002FF1D027483946203050F825207A +:1027100020469047B16A284641F8248000F007F827 +:1027200002463946B068FFF727FE0020CFE61D4974 +:10273000403131F810004FF6FC71C01C0840704762 +:102740002DE9F843164E8846054600242868C01C2B +:1027500020F0030028602046FFF7E9FF315D484381 +:10276000B8F1000F01D0002200E02A680146009273 +:1027700032B100274FEA0D00FFF7B5FD1FB106E0AB +:1027800001270020F8E706EB8401009A8A60296897 +:10279000641C0844E4B22860082CD7D3EBE60000A0 +:1027A00004080020C850020070B50E461D461146B0 +:1027B00000F0D4F804462946304600F0D8F820440A +:1027C000001D70BD2DE9F04190460D4604004FF00C +:1027D000000610D00027E01C20F00300A04200D02B +:1027E000FFDFDDB141460020FFF77DFD0C3000EB3F +:1027F000850617B112E00127EDE7614F04F10C00E7 +:10280000A9003C602572606000EB85002060606874 +:1028100012F019FA41463868FFF765FD3046BDE809 +:10282000F0812DE9FF4F564C804681B020689A46D2 +:10283000934600B9FFDF2068027A424503D9416818 +:1028400051F8280020B143F2020005B0BDE8F08F36 +:102850005146029800F082F886B258460E9900F070 +:1028600086F885B27019001D87B22068A1463946E6 +:102870000068FFF756FD04001FD0678025802946B9 +:10288000201D0E9D07465A4601230095FFF768F963 +:102890002088314638440123029ACDF800A0FFF782 +:1028A0005FF92088C1193846FFF78AF9D9F8000086 +:1028B0004168002041F82840C7E70420C5E770B50B +:1028C0002F4C0546206800B9FFDF2068017AA94235 +:1028D0000ED9426852F8251051B1002342F8253034 +:1028E0004A880068FFF748FD216800200A7A08E05E +:1028F00043F2020070BD4B6853F8203033B9401CDE +:10290000C0B28242F7D80868FFF700FD002070BD12 +:1029100070B51B4E05460024306800B9FFDF3068F3 +:10292000017AA94204D9406850F8250000B1041D7D +:10293000204670BD70B5124E05460024306800B9BF +:10294000FFDF3068017AA94206D9406850F82510A7 +:1029500011B131F8040B4418204670BD10B50A4679 +:102960000121FFF7F6F8C01C20F0030010BD10B5E0 +:102970000A460121FFF7EDF8C01C20F0030010BD4E +:102980008000002070B50446C2F11005281912F02D +:10299000B9F815F0FF0108D0491EC9B28020605473 +:1029A0002046BDE8704012F02CB970BD30B505E08E +:1029B0005B1EDBB2CC5CD55C6C40C454002BF7D101 +:1029C00030BD10B5002409E00B78521E44EA4303E1 +:1029D00000F8013B11F8013BD2B2DC09002AF3D127 +:1029E00010BD2DE9F04389B01E46DDE9107990460F +:1029F0000D00044622D002460846F949FDF7E1FDE4 +:102A0000102221463846FFF7DCFFE07B000606D5A2 +:102A1000F34A3946102310320846FFF7C7FF102249 +:102A200039464846FFF7CDFFF87B000606D5EC4A4D +:102A30004946102310320846FFF7B8FF1021204600 +:102A400012F0DFF80DE0103EB6B208EB06011023DD +:102A500022466846FFF7AAFF224628466946FDF748 +:102A6000B0FD102EEFD818D0F2B241466846FFF7FD +:102A700089FF10234A46694604A8FFF797FF1023F1 +:102A8000224604A96846FFF791FF22462846694678 +:102A9000FDF797FD09B0BDE8F08310233A464146A3 +:102AA000EAE770B59CB01E460546134620980C46D2 +:102AB0008DF80800202219460DF1090012F022F8C5 +:102AC000202221460DF1290012F01CF817A913A8A5 +:102AD000CDE90001412302AA31462846FFF781FFD4 +:102AE0001CB070BD2DE9FF4F9FB014AEDDE92D5431 +:102AF00010AFBB49CDE90076202320311AA8FFF79B +:102B000070FF4FF000088DF808804FF001098DF834 +:102B1000099054F8010FCDF80A00A088ADF80E0016 +:102B200014F8010C1022C0F340008DF8100055F885 +:102B3000010FCDF81100A888ADF8150015F8010CAB +:102B40002C99C0F340008DF8170006A8824611F0BA +:102B5000D9FF0AA883461022229911F0D3FFA0487A +:102B60003523083802AA40688DF83C80CDE900760C +:102B70000E901AA91F98FFF734FF8DF808808DF882 +:102B800009902068CDF80A00A088ADF80E0014F86E +:102B9000010C1022C0F340008DF810002868CDF819 +:102BA0001100A888ADF8150015F8010C2C99C0F398 +:102BB00040008DF81700504611F0A4FF584610222F +:102BC000229911F09FFF86483523083802AA4068F1 +:102BD0008DF83C90CDE900760E901AA92098FFF769 +:102BE00000FF23B0BDE8F08FF0B59BB00C46054662 +:102BF000DDE922101E461746DDE92032D0F801C07B +:102C0000CDF808C0B0F805C0ADF80CC00078C0F32E +:102C100040008DF80E00D1F80100CDF80F00B1F89A +:102C20000500ADF8130008781946C0F340008DF890 +:102C300015001088ADF8160090788DF818000DF189 +:102C40001900102211F05EFF0DF12900102231460B +:102C500011F058FF0DF139001022394611F052FFE2 +:102C600017A913A8CDE90001412302AA214628464D +:102C7000FFF7B7FE1BB0F0BDF0B5A3B017460D4689 +:102C800004461E46102202A8289911F03BFF06A810 +:102C90002022394611F036FF0EA82022294611F0D5 +:102CA00031FF1EA91AA8CDE90001502302AA31461E +:102CB00016A8FFF796FE1698206023B0F0BDF0B579 +:102CC00089B00446DDE90E070D463978109EC1F340 +:102CD00040018DF8001031789446C1F340018DF821 +:102CE00001101968CDF802109988ADF8061099798D +:102CF0008DF808100168CDF809108188ADF80D1025 +:102D000080798DF80F0010236A46614604A8FFF70A +:102D10004DFE2246284604A9FDF753FCD6F80100D3 +:102D20000090B6F80500ADF80400D7F80100CDF822 +:102D30000600B7F80500ADF80A0000200390102344 +:102D40006A46214604A8FFF731FE2246284604A918 +:102D5000FDF737FC09B0F0BD1FB51C6800945B6837 +:102D6000019313680293526803920246084669462B +:102D7000FDF727FC1FBD10B588B00446106804900D +:102D80005068059000200690079008466A4604A9FE +:102D9000FDF717FCBDF80000208008B010BD1FB57E +:102DA0001288ADF800201A88ADF8022000220192A6 +:102DB00002920392024608466946FDF702FC1FBDD7 +:102DC0007FB5074B14460546083B9A1C6846FFF73B +:102DD000E6FF224669462846FFF7CDFF7FBD00008B +:102DE0002051020070B5044600780E46012813D029 +:102DF000052802D0092813D10EE0A0686169057882 +:102E0000042003F06DF9052D0AD078230022042058 +:102E1000616903F0BBF803E00420616903F060F925 +:102E200031462046BDE8704001F084B810B500F18D +:102E30002D03C2799C78411D144064F30102C271D4 +:102E4000D2070DD04A795C7922404A710A791B7900 +:102E50001A400A718278C9788A4200D9817010BDFF +:102E600000224A71F5E74178012900D00C21017058 +:102E700070472DE9F04F93B04FF0000B0C690D46F1 +:102E80008DF820B0097801260C2017464FF00D0868 +:102E90004FF0110A4FF008091B2975D2DFE811F035 +:102EA0001B00C20205031D035C036F03A103B603ED +:102EB000F7031804600492049F04EB04290533050A +:102EC00051055C05ED053006330662067E06F80600 +:102ED0001C07E506EA0614B120781D282AD0D5F88B +:102EE00008805FEA08004FD001208DF82000686A52 +:102EF00002220D908DF824200A208DF82500A86963 +:102F00000A90A8880028EED098F8001091B10F29F7 +:102F100010D27DD2DFE801F07C1349DEFCFBFAF928 +:102F2000F8F738089CF6F50002282DD124B1207856 +:102F30000C2801D00026EEE38DF82020CAE1042001 +:102F4000696A03F0CDF8A8880728EED1204600F082 +:102F5000ECFF022809D0204600F0E7FF032807D93C +:102F6000204600F0E2FF072802D20120207004E092 +:102F7000002CB8D020780128D7D198F80400C11FC0 +:102F80000A2902D30A2061E0C3E1A070D8F800103A +:102F9000E162B8F80410218698F8060084F832003F +:102FA000012028700320207044E00728BDD1002CA8 +:102FB00099D020780D28B8D198F8031094F82F20D4 +:102FC000C1F3C000C2F3C002104201D0062000E0ED +:102FD0000720890707D198F805100142D2D198F847 +:102FE00006100142CED194F8312098F8051020EA5D +:102FF00002021142C6D194F8322098F8061090438C +:103000000142BFD198F80400C11F0A29BAD200E0DA +:1030100006E2617D81427CD8D8F800106160B8F882 +:103020000410218198F80600A072012028700E205B +:10303000207003208DF82000686A0D9004F12D00A7 +:103040000990601D0A900F300B9021E12875FDE377 +:10305000412891D1204600F068FF042802D1E07891 +:10306000C00704D1204600F060FF0F2884D1A88C4F +:10307000D5F80C8080B24FF0400BE669FFF748FCB2 +:10308000324641465B464E46CDF80090FFF733F896 +:103090000B208DF82000686A0D90E06909900021EE +:1030A00008A8FFF79FFE2078042806D0A07D58B11D +:1030B000012809D003280AD048E305202070032006 +:1030C00028708DF82060CCE184F800A032E712204F +:1030D0002070E8E11128BCD1204600F026FF04282A +:1030E00002D1E078C00719D0204600F01EFF062864 +:1030F00005D1E078C00711D1A07D02280ED020466E +:1031000008E0CBE084E070E14FE122E102E1E8E099 +:1031100019E0AEE100F009FF11289AD1102208F160 +:10312000010104F13C0011F0EDFC607801286ED043 +:1031300012202070E078C00760D0A07D0028C8D0A1 +:103140000128C6D05AE0112890D1204600F0EDFEAB +:10315000082804D0204600F0E8FE132886D104F1A8 +:103160006C00102208F10101064611F0CBFC20781A +:1031700008280DD014202070E178C8070DD0A07D5C +:1031800002280AD06278022A04D00328A1D035E0B0 +:103190000920F0E708B1012837D1C80713D0A07D76 +:1031A00002281DD000200090D4E9062133460EA845 +:1031B000FFF777FC10220EA904F13C0011F076FC19 +:1031C000C8B1042042E7D4E90912201D8DE80700A8 +:1031D00004F12C0332460EA8616BFFF770FDE9E79E +:1031E000606BC1F34401491E0068C84000F0010053 +:1031F00040F08000D7E72078092806D185F80090B4 +:103200008DF8209032E32870EBE30920FBE79CE186 +:10321000112899D1204600F088FE0A2802D1E078D2 +:10322000C00704D1204600F080FE15288CD104F19F +:103230003C00102208F10101064611F063FC2078E1 +:103240000A2816D016202070D4E90932606B611D5F +:103250008DE80F0004F15C0304F16C0247310EA805 +:10326000FFF7C2FC10220EA9304611F01FFC18B166 +:10327000F6E20B20207071E22046FFF7D7FDA07820 +:10328000216A0A18C0F11001104611F0BAFC23E3BC +:10329000394608A8FFF7A6FD06463BE20228B8D14A +:1032A000204600F042FE042804D3204600F03DFEF4 +:1032B000082809D3204600F038FE0E2829D32046DE +:1032C00000F033FE122824D2A07D0228A1D10E20C6 +:1032D0008DF82000686A0D9098F801008DF82400A0 +:1032E000F0E3022895D1204600F01FFE002810D000 +:1032F000204600F01AFE0128F9D0204600F015FE05 +:103300000C28F4D004208DF8240098F801008DF8E2 +:1033100025005EE21128FCD1002CFAD02078172875 +:10332000F7D16178606A022911D0002101EB4101D7 +:10333000182606EBC1011022405808F1010111F0D6 +:10334000E1FB0420696A00F0E3FD2670F2E501214B +:10335000ECE70B28DDD1002CDBD020781828D8D161 +:103360006078616A02281CD05FF0000000EB400228 +:10337000102000EBC2000958B8F8010008806078FE +:10338000616A02280FD0002000EB4002142000EBFD +:10339000C2000958404650F8032F0A604068486050 +:1033A00039E00120E2E70120EEE71128B1D1002C3D +:1033B000AFD020781928ACD16178606A022912D088 +:1033C0005FF0000101EB41011C2202EBC101102260 +:1033D000405808F1010111F095FB0420696A00F0E2 +:1033E00097FD1A20B6E00121ECE7082891D1002CC6 +:1033F0008FD020781A288CD1606A98F80120017843 +:1034000062F347010170616AD8F8022041F8012F88 +:10341000B8F8060088800420696A00F079FD8EE221 +:10342000072013E63878012894D1182204F11400FB +:10343000796811F0ACFBE079C10894F82F0001EA3B +:10344000D001E07861F30000E070217D002974D1A3 +:103450002178032909D0C00725D0032028708DF8D2 +:103460002090686A0D90412004E3607DA178884235 +:1034700001D90620EAE502262671E179204621F0ED +:10348000E001E171617A21F0F0016172A17A21F02D +:10349000F001A172FFF7CAFC2E708DF82090686AC7 +:1034A0000D900720E6E20420ADE6387805289DD18E +:1034B0008DF82000686A0D90B8680A900720ADF872 +:1034C00024000A988DF830B06168016021898180FC +:1034D000A17A817104202070F4E23978052985D120 +:1034E0008DF82010696A0D91391D09AE0EC986E864 +:1034F0000E004121ADF824108DF830B01070A88C6A +:10350000D7F80C8080B24026A769FFF713FA41462E +:103510003A463346C846CDF80090FEF720FE00211B +:1035200008A8FFF75FFCE07820F03E00801CE07008 +:103530002078052802D00F200CE049E1A07D20B1C1 +:10354000012802D0032802D002E10720C0E584F858 +:103550000080EFE42070EDE4102104F15C0002F043 +:10356000E0FA606BB0BBA07D18B1012801D0052046 +:10357000FDE006202870F7486063A063BEE238785B +:10358000022894D1387908B12875B3E3A07D0228C8 +:1035900002D0032805D022E0B8680028F5D0606387 +:1035A0001CE06078012806D0A07994F82E1001283C +:1035B00005D0E84806E0A17994F82E00F7E7B8684E +:1035C0000028E2D06063E078C00701D0012902D072 +:1035D000E04803E003E0F8680028D6D0A0630620A6 +:1035E00011E68DF82090696A0D91E1784846C90787 +:1035F00009D06178022903D1A17D29B1012903D025 +:10360000A17D032900D00720287031E138780528F2 +:10361000BBD1207807281ED084F800A005208DF8A3 +:103620002000686A0D90B8680A90ADF824A08DF863 +:1036300030B003210170E178CA070FD0A27D022AC1 +:103640001AD000210091D4E9061204F15C03401C59 +:10365000FFF727FA67E384F80090DFE7D4E909234E +:10366000211D8DE80E0004F12C0304F15C02401CC6 +:10367000616BFFF724FB56E3626BC1F34401491E03 +:103680001268CA4002F0010141F08001DAE738789F +:103690000528BDD18DF82000686A0D90B8680A90A1 +:1036A000ADF824A08DF830B0042100F8011B1022E1 +:1036B00004F15C0111F026FA002108A8FFF792FB43 +:1036C0002078092801D0132044E70A2020709CE5C7 +:1036D000E078C10742D0A17D012902D0022927D07C +:1036E00038E0617808A8012916D004F16C01009136 +:1036F000D4E9061204F15C03001DFFF7BDFA0A20AD +:10370000287003268DF82080686A0D90002108A893 +:10371000FFF768FBDDE2C3E204F15C010091D4E94C +:10372000062104F16C03001DFFF7A6FA0026E9E765 +:10373000C0F3440114290DD24FF0006101EBB01029 +:103740004FEAB060E0706078012801D01020BFE43B +:103750000620FFE6607801283FF4B8AC0A2052E565 +:10376000E178C90708D0A17D012903D10B20287079 +:1037700004202FE028702DE00E2028706078616B07 +:10378000012817D004F15C0304F16C020EA8FFF7C6 +:10379000E3FA2046FFF74AFBA0780EAEC0F1100115 +:1037A000304411F02EFA06208DF82000686A099640 +:1037B0000D909AE004F16C0304F15C020EA8FFF78F +:1037C000CBFAE9E73978022903D139790029D1D038 +:1037D00029758FE28DF82000686A0D9058E53878D9 +:1037E0000728F6D1D4E909216078012809D000BF63 +:1037F00004F16C00CDE90002029105D104F16C03E3 +:1038000004E004F15C00F5E704F15C0304F14C0012 +:103810007A680646216AFFF765F96078012821D1A8 +:10382000A078216A0A18C0F11001104611F0E9F9D8 +:10383000D4E90923606B04F12D018DE80F0004F138 +:103840005C0304F16C0231460EA800E054E2FFF77D +:10385000CBF910220EA904F13C0011F027F908B1B0 +:103860000B20AFE485F800808DF82090686A0D90F9 +:103870008DF824A00CE538780528AAD18DF8200011 +:10388000686A0D90B8680A90ADF824A08DF830B041 +:1038900080F80080617801291AD0D4E9093204F156 +:1038A0002D01A66B03920096CDE9011304F16C0380 +:1038B00004F15C0204F14C01401CFFF795F9002172 +:1038C00008A8FFF78FFA6078012805D0152041E697 +:1038D000D4E90923611DE4E70E20287006208DF845 +:1038E0002000686ACDF824B00D90A0788DF82800EB +:1038F000CEE438780328C0D1E079C00770D00F201B +:103900002870072066E7387804286BD11422391D07 +:1039100004F1140011F03BF9616A208CA1F8090050 +:10392000616AA078C871E179626A01F003011172DD +:10393000616A627A0A73616AA07A81F824001620AB +:1039400061E485F800A08DF82090696A50460D91D9 +:1039500090E00000205102003878052842D1B86874 +:10396000A8616178606A022901D0012100E000218C +:1039700001EB4101142606EBC1014058082102F079 +:10398000D0F86178606A022901D0012100E00021AD +:1039900001EB410106EBC101425802A8E169FFF7C2 +:1039A0000FFA6078626A022801D0012000E000204E +:1039B00000EB4001102000EBC1000223105802A9C7 +:1039C0000932FEF7F3FF626AFD4B0EA80932A169C6 +:1039D000FFF7E5F96178606A022904D0012103E06C +:1039E00042E18BE0BDE0002101EB4101182606EB2E +:1039F000C101A27840580EA911F084F86178606A7C +:103A0000022901D0012100E0002101EB410106EB78 +:103A1000C1014058A1780844C1F1100111F0F1F83A +:103A200005208DF82000686A0D90A8690A90ADF80D +:103A300024A08DF830B0062101706278616A022AF4 +:103A400001D0012200E0002202EB420206EBC2029A +:103A5000401C8958102211F055F8002108A8FFF7E2 +:103A6000C1F91220C5F818B028708DF82090686A46 +:103A70000D900B208DF824000AE43878052870D1C9 +:103A80008DF82000686A0D90B8680A900B20ADF898 +:103A900024000A98072101706178626A022901D026 +:103AA000012100E0002101EB4103102101EBC301E2 +:103AB00051580988A0F801106178626A022902D081 +:103AC000012101E02FE1002101EB4103142101EB71 +:103AD000C30151580A6840F8032F4968416059E012 +:103AE0001920287001208DF8300077E61620287004 +:103AF0008DF830B0002108A8FFF774F9032617E10C +:103B000014202870B0E6387805282AD18DF82000D6 +:103B1000686A0D90B8680A90ADF824A08DF830B0AE +:103B200080F800906278616A4E46022A01D0012234 +:103B300000E0002202EB42021C2303EBC202401C05 +:103B40008958102210F0DEFF002108A8FFF74AF97B +:103B5000152028708DF82060686A0D908DF824601B +:103B60003CE680E0387805287DD18DF82000686A31 +:103B70000D90B8680A90ADF8249009210170616930 +:103B8000097849084170616951F8012FC0F8022095 +:103B90008988C18020781C28A8D1A1E7E078C007D7 +:103BA00002D04FF0060C01E04FF0070C60780228BD +:103BB0000AD000BF4FF0000000EB040101F1090141 +:103BC00005D04FF0010004E04FF00100F4E74FF0A2 +:103BD00000000B78204413EA0C030B7010F8092F37 +:103BE00002EA0C02027004D14FF01B0C84F800C0F2 +:103BF000D2B394F801C0BCF1010F00D09BB990F88A +:103C000000C0E0465FEACC7C04D028F001060670D4 +:103C1000102606E05FEA887C05D528F002060670CB +:103C200013262E70032694F801C0BCF1020F00D0B9 +:103C300092B991F800C05FEACC7804D02CF001066C +:103C40000E70172106E05FEA8C7805D52CF002068D +:103C50000E701921217000260078D0BBCAB3C3BBF7 +:103C60001C20207035E012E002E03878062841D1AF +:103C70001A2019E4207801283CD00C283AD020469C +:103C8000FFF7F1F809208DF82000686A0D9031E007 +:103C90003878052805D006203870032618202870AB +:103CA00046E005218DF82010686A0D90B8680A90EA +:103CB0000220ADF8240001208DF830000A98017030 +:103CC000297D4170394608A8FFF78CF80646182070 +:103CD0002870012E0ED02BE001208DF82000686A9C +:103CE0000D9003208DF82400287D8DF8250085F89F +:103CF00014B012E0287D80B11D202070172028709C +:103D00008DF82090686A0D9002208DF824003946C5 +:103D100008A8FFF767F806460AE00CB1FE202070FD +:103D20009DF8200020B1002108A8FFF75BF810E4FF +:103D300013B03046BDE8F08F2DE9F04387B00C4654 +:103D40004E6900218DF804100120257803460227D2 +:103D50004FF007094FF0050C85B1012D53D0022D0E +:103D600039D1FE2030708DF80030606A0590032054 +:103D70008DF80400207E8DF8050063E0217901298B +:103D800025D002292DD0032928D0042923D1B17DA3 +:103D9000022920D131780D1F042D04D30A3D032DB3 +:103DA00001D31D2917D12189022914D38DF804705C +:103DB000237020899DF8041088421BD2082001E05E +:103DC000185102008DF80000606A059057E0707885 +:103DD0000128EBD0052007B0BDE8F0831D2030702E +:103DE000E4E771780229F5D131780C29F3D18DF807 +:103DF0000490DDE7083402F804CB94E80B0082E875 +:103E00000B000320E7E71578052DE4D18DF800C0FD +:103E1000656A0595956802958DF8101094F80480F0 +:103E2000B8F1010F13D0B8F1020F2DD0B8F1030F84 +:103E30001CD0B8F1040FCED1ADF804700E2028705C +:103E4000207E687000216846FEF7CCFF0CE0ADF8DC +:103E500004700B202870207E002100F01F00687085 +:103E60006846FEF7BFFF37700020B4E7ADF8047076 +:103E70008DF8103085F800C0207E687027701146DC +:103E80006846FEF7AFFFA6E7ADF804902B70207FE1 +:103E90006870607F00F00100A870A07F00F01F0034 +:103EA000E870E27F2A71C0071CD094F8200000F06F +:103EB0000700687194F8210000F00700A871002144 +:103EC0006846FEF78FFF2868F062A8883086A879D8 +:103ED00086F83200A069407870752879B0700D209E +:103EE0003070C1E7A9716971E9E700B587B00428AE +:103EF0000CD101208DF800008DF804000020059100 +:103F00008DF8050001466846FEF76CFF07B000BD5E +:103F100070B50C46054602F0E3F821462846BDE898 +:103F200070407823002202F031B808B10078704761 +:103F30000C20704770B50C0005784FF000010CD0D4 +:103F400021702146F1F76BF969482178405D88427C +:103F500001D1032070BD022070BDF1F760F900208F +:103F600070BD0279012A05D000220A704B78012B1E +:103F700002D003E0042070470A758A610279930039 +:103F8000521C0271C15003207047F0B587B00F4634 +:103F900005460124287905EB800050F8046C707800 +:103FA000411E02290AD252493A46083901EB8000E3 +:103FB000314650F8043C2846984704460CB1012C81 +:103FC00011D12879401E10F0FF00287101D0032480 +:103FD000E0E70A208DF80000706A05900021019644 +:103FE0006846FFF7A7FF032CD4D007B02046F0BDEA +:103FF00070B515460A46044629461046FFF7C5FF28 +:10400000064674B12078FE280BD1207C30B1002008 +:104010002870294604F10C00FFF7B7FF2046FEF791 +:1040200022FF304670BD704770B50E4604467C21B5 +:1040300010F009FE0225012E03D0022E04D0052027 +:1040400070BD0120607000E065702046FEF70BFF38 +:10405000A575002070BD28B1027C1AB10A4600F196 +:104060000C01C5E70120704710B5044686B0042056 +:1040700002F036F82078FE2806D000208DF80000E7 +:1040800069462046FFF7E7FF06B010BD7CB50E4637 +:1040900000218DF804104178012903D0022903D0B2 +:1040A000002405E0046900E044690CB1217C89B179 +:1040B0006D4601462846FFF754FF032809D13246D2 +:1040C00029462046FFF794FF9DF80410002900D0F0 +:1040D00004207CBD04F10C05EBE730B40C4601462E +:1040E000034A204630BC034B0C3AFEF758BE000092 +:1040F0005C5102001851020070B50D46040011D049 +:1041000085B12101284610F07CFD10225449284633 +:1041100010F0F8FC524801210838018044804560C5 +:10412000002070BD012070BD70B54D4E00240546C5 +:10413000083E10E07068AA7B00EB0410817B91427E +:1041400008D1C17BEA7B914204D10C22294610F0B0 +:10415000ADFC30B1641C30888442EBDB4FF0FF30A3 +:1041600070BD204670BD70B50D46060006D02DB15D +:10417000FFF7DAFF002803DB401C14E0102070BDBD +:10418000374C083C20886288411C914201D90420A8 +:1041900070BD6168102201EB0010314610F0B2FCD6 +:1041A0002088401C20802870002070BD2C480838D2 +:1041B000008870472A4908390888012802D0401E23 +:1041C00008800020704770B514460D0018D0BCB1AF +:1041D0000021A170022802D0102811D105E0288802 +:1041E00070B10121A170108008E02846FFF79CFF04 +:1041F000002805DB401CA070A8892080002070BD2D +:10420000012070BD70B5054614460E000BD000208D +:104210003070A878012808D005D91149A1F108010A +:104220000A8890420AD9012070BD24B128782070F4 +:104230002888000A5070022008700FE064B14968B5 +:10424000102201EB00112046103910F05BFC287899 +:1042500020732888000A607310203070002070BD21 +:104260008C0000202DE9F04190460C4607460025C1 +:10427000FE48072F00EB881607D2DFE807F0070794 +:10428000070704040400012500E0FFDF06F81470AE +:10429000002D13D0F548803000EB880191F82700FD +:1042A000202803D006EB4000447001E081F826404E +:1042B00006EB44022020507081F82740BDE8F081D1 +:1042C000F0B51F4614460E460546202A00D1FFDFF2 +:1042D000E649E648803100EB871C0CEB440001EB1B +:1042E0008702202E07D00CEB460140784B784870AF +:1042F000184620210AE092F82530407882F82500FF +:10430000F6E701460CEB410005704078A142F8D178 +:1043100092F82740202C03D00CEB4404637001E09A +:1043200082F826300CEB41042023637082F82710BA +:10433000F0BD30B50D46CE4B44190022181A72EB71 +:10434000020100D2FFDFCB48854200DDFFDFC94814 +:104350004042854200DAFFDFC548401C844207DA4C +:10436000002C01DB204630BDC148401C201830BD68 +:10437000BF48C043FAE710B504460168407ABE4A18 +:1043800052F82020114450B10220084420F07F4010 +:10439000EEF753FC94F90810BDE81040C9E704207B +:1043A000F3E72DE9F047B14E803696F82D50DFF84F +:1043B000BC9206EB850090F8264034E009EB8517A7 +:1043C0004FF0070817F81400012806D004282ED053 +:1043D00005282ED0062800D0FFDF01F000F90146A5 +:1043E00007EB4400427806EB850080F8262090F821 +:1043F0002720A24202D1202280F82720084601F07F +:10440000F9F82A4621460120FFF72CFF9B48414638 +:1044100000EB041002682046904796F82D5006EBFA +:10442000850090F82640202CC8D1BDE8F0870220F6 +:1044300000E003208046D0E710B58C4C202180346A +:1044400084F8251084F8261084F82710002084F8BA +:10445000280084F82D0084F82E10411EA16044F835 +:10446000100B2074607420736073A0738449E0772C +:1044700020750870487000217C4A103C02F8110039 +:10448000491CC9B22029F9D30120EEF7C6FA002051 +:10449000EEF7C3FA012084F82200EEF709FD79480F +:1044A000EEF71BFD764CA41E20707748EEF715FD45 +:1044B0006070BDE81040EEF73DBA10B5EEF75FFA58 +:1044C0006F4CA41E2078EEF721FD6078EEF71EFDFC +:1044D000BDE8104001F0BBB8202070472DE9F34F34 +:1044E000624C0025803404EB810A89B09AF82500DB +:1044F000202821D0691E02916049009501EB001728 +:10450000391D03AB07C983E80700A18BADF81C1068 +:10451000A07F8DF81E009DF81500A046C8B10226A8 +:10452000554951F820400399A219114421F07F41C7 +:10453000019184B102210FE00120EEF76EFA002014 +:10454000EEF76BFAEEF739FA01F081F884F82F50A4 +:10455000A7E00426E4E700218DF81810022801D016 +:10456000012820D1039801190998081A801C9DF888 +:104570001C1020F07F4001B10221353181420BD265 +:1045800003208DF815000398C4F13201401A20F081 +:104590007F40322403900CE098F8240018B901F011 +:1045A000F0F900284DD0322C03D214B101F043F8B9 +:1045B00001E001F04CF8324A107820B3934652786B +:1045C000039B121B00219DF81840994601281BD01F +:1045D000032819D05FF000008DF81E00002A04DDCA +:1045E000981A039001208DF818009DF81C0000B166 +:1045F00002210398254A20F07F40039003AB0998DD +:1046000001F031F810B110E00120E5E79DF81D0040 +:1046100018B99BF80000032812D08DF81C50CDF873 +:104620000C908DF818408DF81E509DF8180058B168 +:1046300003980123811900221846EEF741FA06E09B +:1046400000200BB0BDE8F08F0120EEF7E6F997F9F6 +:104650000C20012300200199EEF732FAF87BC00705 +:1046600001D0EEF716FB012112E000004C0A0020F9 +:10467000FF7F841E0020A1076C5102004C0800201F +:104680009E0000203B5E0100A3430100FFFF3F00AE +:1046900088F82F108AF8285020226946F74810F031 +:1046A00076FA0120CDE72DE9F05FDFF8D0830646EA +:1046B00008EB860090F82550202D1FD0A8F180002F +:1046C0002C4600EB8617A0F50079DFF8B4B305E0BF +:1046D000A24607EB4A004478202C0AD0EEF73BFABA +:1046E00009EB04135A4601211B1D00F0BCFF0028F2 +:1046F000EED0AC4202D0334652461EE0E14808B14B +:10470000AFF30080EEF727FA98F82F206AB1D8F8B7 +:104710000C20411C891A0902CA1701EB1261091207 +:10472000002902DD0020BDE8F09F3146FFF7D6FEEC +:1047300008B10120F7E733462A4620210420FFF77D +:10474000BFFDEFE72DE9F041CC4C2569EEF703FA08 +:10475000401B0002C11700EB1160001200D4FFDF04 +:1047600094F8220000B1FFDF012784F8227094F84A +:104770002E00202800D1FFDF94F82E60202084F83E +:104780002E00002584F82F5084F8205084F8215002 +:10479000BD4825600078022833D0032831D000209E +:1047A0002077A068401C05D04FF0FF30A0600120AA +:1047B000EEF733F90020EEF730F9EEF72CFAEEF7CA +:1047C00024FAEEF7FAF80FF00BFCB048056005602C +:1047D0004FF0E0214FF40040B846C1F88002EEF7F8 +:1047E000C6FA94F82D703846FFF75DFF0028FAD01E +:1047F000A248803800EB871010F81600022802D07B +:1048000006E00120CCE73A4631460620FFF72AFDB4 +:1048100084F8238004EB870090F82600202804D039 +:104820009948801E4078EEF777FB207F002803D060 +:10483000EEF7E1F92577657740E5904910B591F8F5 +:104840002D200024803901EB821100BF11F81430B3 +:104850002BB1641CE4B2202CF8D3202010BD8C496D +:1048600001EB041108600020C87321460120FFF706 +:10487000F9FC204610BD10B5012801D0032800D155 +:1048800071B37E4A92F82D307C4C0022803C04EBC0 +:10489000831300BF13F812400CB1082010BD521C46 +:1048A000D2B2202AF6D3784A48B1022807D0072985 +:1048B00016D2DFE801F01506080A0C0E10000021E0 +:1048C0000AE01B2108E03A2106E0582104E07721A4 +:1048D00002E0962100E0B52151701070002010BD5B +:1048E000072010BD684810B54078EEF7A6F980B2F1 +:1048F00010BD10B5202811D2604991F82D30A1F1DA +:10490000800202EB831414F810303BB191F82D3083 +:1049100002EB831212F81020012A01D0002010BDF2 +:1049200091F82D2001460020FFF79CFC012010BDCE +:1049300010B5EEF710F9BDE81040EEF77EB92DE99D +:10494000F0410E464D4F01782025803F0C4607EB85 +:10495000831303E0254603EB45046478944202D0B8 +:10496000202CF7D108E0202C06D0A14206D103EB81 +:1049700041014978017007E000209FE403EB440007 +:1049800003EB450140784870424F7EB127B10021CA +:1049900040F2DD30AFF300803078A04206D127B17D +:1049A00000214FF47870AFF30080357027B10021FB +:1049B00040F2E530AFF3008001207FE410B542689B +:1049C0000B689A1A1202D41702EB1462121216D450 +:1049D000497A91B1427A82B92F4A006852F821107F +:1049E000126819441044001D891C081A0002C117DE +:1049F00000EB11600012322801DB012010BD002005 +:104A000010BD2DE9F04781461C48214E00EB810086 +:104A1000984690F825402020107006F50070154645 +:104A200000EB81170BE000BF06EB04104946001DA8 +:104A3000FFF7C4FF28B107EB44002C704478202C0A +:104A4000F2D1297888F8001013E000BF06EB0415B6 +:104A5000291D4846FFF7B2FF68B988F80040A97BD6 +:104A600099F80A00814201D80020DEE407EB4400F7 +:104A70004478202CEAD10120D7E40000CC0A0020A1 +:104A8000FFFF3F00000000009E00002000F50040F6 +:104A90004C080020000000006C5102002DE9FC4190 +:104AA0000E4607460024FE4D09E000BF9DF80000B9 +:104AB00005EB00108168384600F0E9FD01246B46E3 +:104AC00001AA31463846FFF79CFF0028EED0204669 +:104AD000BDE8FC8170B50446F2480125A54300EB12 +:104AE000841100EB8510402210F00CF8EE4E26B138 +:104AF000002140F25F40AFF30080EA48803000EBD5 +:104B0000850100EB8400D0F82500C1F8250026B10E +:104B1000002140F26340AFF30080284670BD2DE9CC +:104B2000FC418446DF481546089C00EB85170E467D +:104B300017F81400012803D0022801D00020C7E78D +:104B40000B46DA4A0121604600F08DFDA8B101ABA9 +:104B50006A4629463046FFF754FF70B1D1489DF8A8 +:104B600004209DF80010803000EB85068A4208D0B2 +:104B70002B460520FFF7A4FB0BE02A462146042024 +:104B800014E0202903D007EB4100407801E096F8BB +:104B9000250007EB440148709DF80000202809D04B +:104BA00007EB400044702A4621460320FFF75AFBDA +:104BB00001208DE706F8254F0120F070F3E7B84992 +:104BC00001EB0010001DFFF7D6BB7CB51D46134658 +:104BD00004460E4600F1080221461846EEF73AF860 +:104BE00094F908000F2804DD1F3820722068401C4B +:104BF000206096B10220AE4951F826104618206870 +:104C00006946801B20F07F40206094F9080028440A +:104C1000C01C1F2803DA012009E00420EBE701AAE9 +:104C2000EEF718F89DF8040010B10098401C0090B1 +:104C30000099206831440844C01C20F07F40606027 +:104C40007CBD2DE9FE430C460646097860799072DA +:104C5000207998461546507241B19248803090F8BC +:104C60002E1020290AD00069401D0BE0D4E9022350 +:104C7000217903B02846BDE8F043A6E78D48417886 +:104C8000701D084420F07F47217900222846A36840 +:104C9000FFF79BFF3946284600F0F9FCD4E90232C1 +:104CA00021796846FFF791FF41462846019CFFF7AE +:104CB000F5FE2B4622460021304600F0D4FC0028A9 +:104CC00003D13146284600F0E2FCBDE8FE832DE921 +:104CD000FE4F814600F097FC30B1002799F80000A4 +:104CE00020B10020BDE8FE8F0127F7E76D4D6E4C27 +:104CF0004FF0000A803524B1002140F2D640AFF3D6 +:104D0000008095F82D8085F823A0002624B100218D +:104D100040F2DB40AFF300801FB94046FFF7DAFEF8 +:104D2000804624B1002140F2E340AFF30080EDF76C +:104D300012FF43466A464946FFF783FF24B100212C +:104D400040F2E940AFF3008095F82E0020280CD007 +:104D500029690098401A0002C21700EB1260001285 +:104D600003D5684600F093FC012624B1002140F2EF +:104D7000F340AFF3008095F823000028BBD124B1A5 +:104D8000002140F2F940AFF30080EDF7E4FE6B46FE +:104D9000464A002100F067FC0028A3D027B941460D +:104DA0006846FFF77BFE064326B16846FFF7E3FA45 +:104DB000C9F8080024B1002140F20C50AFF3008084 +:104DC00001208FE72DE9FF5F8A46814600F01BFC3A +:104DD000344C803410B39AF80000002710B1012839 +:104DE00000D0FFDF304D25B1002140F28250AFF3FB +:104DF00000800120A84600905FEA080604D0002148 +:104E000040F28A50AFF30080009800F0F3FB94F872 +:104E10002D50002084F8230067B119E094F82E008B +:104E20000127202800D1FFDF9AF800000028D9D000 +:104E3000FFDFD7E72846FFF74DFE054626B10021E4 +:104E400040F29450AFF3008094F823000028D3D1AF +:104E500026B1002140F29E50AFF30080EDF77BFEBB +:104E600083462B4601AA5146FFF7EBFE5FEA060890 +:104E700004D0002140F2A550AFF300803B462A4603 +:104E800001A95846CDF80090FFF749FE064604EB0D +:104E9000850090F828B0B8F1000F11D000210BE088 +:104EA0004C0800204C0A002000000000FFFF3F00DB +:104EB0006C5102009E00002040F2AC50AFF3008025 +:104EC00000F08DFB0090B8F1000F04D0002140F2FB +:104ED000B250AFF3008094F8230000288CD1B8F1D1 +:104EE000000F04D0002140F2BA50AFF30080FE4919 +:104EF0000DF1040C01EB09109CE80E0000F1040018 +:104F000080E80E004EB35FEA080604D0002140F2AC +:104F1000C750AFF300803BEA070012D094F82E0090 +:104F200020280ED126B1002140F2CC50AFF30080F2 +:104F30002846FFF7B8FB20B99AF80000D8B301283B +:104F400049D0B8F1000F04D0002140F2E950AFF38E +:104F50000080284600F03CFB01265FEA080504D0EB +:104F6000002140F2F250AFF30080009800F042FBC5 +:104F700025B1002140F2F650AFF300808EB194F8D5 +:104F80002D0004EB800090F82600202809D025B1E0 +:104F9000002140F2FD50AFF30080D4484078EDF797 +:104FA000BBFF25B1002140F20260AFF3008004B0E6 +:104FB0003046BDE8F09FFFE7B8F1000F04D00021B4 +:104FC00040F2D450AFF3008094F82D2049460420DD +:104FD000FFF748F9C0E7002E3FF40EAF002140F282 +:104FE000DF50AFF3008007E72DE9F84FC04D814651 +:104FF00095F82D004FF00008BE4C4FF0010B4746CE +:1050000024B100214FF4C260AFF30080584600F095 +:10501000F1FA85F8237024B1002140F21560AFF356 +:10502000008095F82D00FFF755FD064695F8230002 +:1050300028B1002CE4D0002140F21B604BE024B1E9 +:10504000002140F21F60AFF30080A948803800EBD8 +:10505000861111F81900032856D1334605EB830A4F +:105060004A469AF82500904201D1012000E0002034 +:1050700000900AF125000021FFF761FC014600982D +:10508000014203D001228AF82820AF77E1B324B18E +:10509000002140F22460AFF30080324649460120EF +:1050A000FFF7E0F89AF828A024B1002140F22F6021 +:1050B000AFF3008000F093FA834624B1002140F260 +:1050C0003460AFF3008095F8230038B1002C97D0FE +:1050D00000214FF4C760AFF3008091E7BAF1000FF1 +:1050E00007D095F82E00202803D13046FFF7DBFAD1 +:1050F000E0B124B1002140F24C60AFF300803046B3 +:1051000000F066FA4FF0010824B1002140F255602A +:10511000AFF30080584600F06DFA24B1002140F250 +:105120005960AFF300804046BDE8F88F002CF1D005 +:10513000002140F24760AFF30080E6E70020EDF782 +:1051400045BC0120EDF742BC6848007870472DE966 +:10515000F041674C94F82E0020281FD194F82D6060 +:1051600004EB860797F82550202D00D1FFDF60491A +:10517000803901EB861000EB4500407807F8250FD9 +:105180000120F87084F82300294684F82E50324616 +:1051900002202234FFF766F8002020700DE42DE98C +:1051A000F041514E524C012538B1012821D002283E +:1051B00079D003287DD0FFDFF0E700F03CFAFFF75D +:1051C000C6FF207E00B1FFDF84F821500020EDF7FC +:1051D00024FCA168481C04D0012300221846EDF7E6 +:1051E0006FFC14F82E0F217806EB01110A680121DB +:1051F00054E0FFF7ACFF0120EDF70FFC94F821001D +:1052000050B1A068401C07D014F82E0F217806EB8F +:1052100001110A68062141E0207EDFF8D0800027D6 +:1052200008F10208012803D002281ED0FFDFB5E7ED +:10523000A777EDF7E0FC98F80000032801D1657727 +:105240002577607D2C4951F8200094F8201051B941 +:1052500048B161680123091A00221846EDF730FCB5 +:10526000022020769AE7277698E784F8205000F00D +:10527000E2F9A07F50B198F8010061680123091A92 +:1052800000221846EDF71CFC257600E0277614F87E +:105290002E0F217806EB01110A680021BDE8F041CC +:1052A000104700E005E011480078BDE8F041EDF757 +:1052B00033BEFFF74CFF14F82E0F217806EB0111D7 +:1052C0000A680521EAE710B5094C94F82E00202859 +:1052D00000D1FFDF14F82E0F2178034A02EB0111F1 +:1052E0000A6804210AE000004C0800209C0000200D +:1052F000CC0A0020000000006C510200BDE8104004 +:1053000010477CB5E74C054694F82E00202800D1C4 +:10531000FFDFA068401C00D0FFDF94F82E00E249B8 +:1053200001AA01EB0010694690F90C002844EDF742 +:1053300091FC9DF904000F2801DD012000E0002010 +:10534000009908446168084420F07F41A16094F806 +:105350002100002807D002B00123BDE870400022E0 +:105360001846EDF7ADBB7CBD30B5D04A0B1A541CC6 +:10537000B3EB940F12D3451AB5EB940F0ED39342AF +:1053800003D9101A43185B1C08E0954204D9511A3E +:105390000844401C434201E0FFDF0023184630BDB3 +:1053A0000123002201460220EDF78ABB0220EDF71F +:1053B00034BBEDF7D0BB2DE9FC47BA4C054694F859 +:1053C0002E00202800D1FFDF642D58D3B84A0021D9 +:1053D000521B71EB010052D394F82E20A0462046B8 +:1053E000DFF8C49290F82D7009EB0214D8F8000091 +:1053F00001AA28446946EDF72DFC9DF90400002818 +:1054000002DD0098401C0090A06800996268461870 +:10541000B21A22F07F42B2F5800F30D208EB870239 +:10542000444692F82520202A0AD009EB021252683D +:10543000101A0002C21700EB1260001288421EDB35 +:10544000A068401C10D0EDF786FBA168081A000286 +:10545000C11700EB11600012022810DD0120EDF7EA +:10546000DCFA4FF0FF30A06020682844206026F06E +:105470007F402061012084F82300BDE8FC870020E4 +:10548000FBE72DE9F047874C074694F82D00A4F17F +:10549000800606EB801010F8170000B9FFDF94F8C3 +:1054A0002D50A046834C24B1002140F66D00AFF38F +:1054B000008040F6790940F6820A06EB851600BFA7 +:1054C00016F81700012818D0042810D005280ED08F +:1054D00006280CD01CB100214846AFF3008020BF45 +:1054E000002CEDD000215046AFF30080E8E72A46BB +:1054F00039460120FEF7B6FEF2E74FF0010A4FF001 +:105500000009454624B1002140F68900AFF3008030 +:10551000504600F06FF885F8239024B1002140F642 +:105520008E00AFF3008095F82D00FFF7D3FA064602 +:1055300095F8230028B1002CE4D0002140F6940017 +:105540001FE024B1002140F69800AFF3008005EB86 +:10555000860000F1270133463A462630FFF7EFF97F +:1055600024B1002140F69C00AFF3008000F037F832 +:10557000824695F8230038B1002CC3D0002140F6B4 +:10558000A200AFF30080BDE785F82D60012085F80B +:105590002300504600F02EF8002C04D0002140F6E5 +:1055A000AF00AFF30080BDE8F08730B504463D485A +:1055B0000D4690F82D003B49803901EB801010F822 +:1055C000140000B9FFDF384800EB0410C57330BD8C +:1055D000344981F82D00012081F82300704710B56F +:1055E000354808B1AFF30080EFF3108000F0010000 +:1055F00072B610BD10B5002804D1304808B1AFF321 +:10560000008062B610BD2E480068C005C00D10D0E5 +:10561000103840B2002804DB00F1E02090F80004CC +:1056200005E000F00F0000F1E02090F8140D4009B3 +:1056300070470820704710B51A4C94F824000028D1 +:1056400004D1F6F7F1F9012084F8240010BD10B55B +:10565000144C94F82400002804D0F6F70EFA002029 +:1056600084F8240010BD10B51C685B68241A181A51 +:1056700024F07F4420F07F40A14206D8B4F5800F8B +:1056800003D2904201D8012010BD002010BDD0E906 +:105690000032D21A21F07F43114421F07F41C0E94A +:1056A00000317047CC0A00204C080020FF7F841E88 +:1056B000FF1FA10700000000000000000000000024 +:1056C00004ED00E02DE9F041044680074FF00005AD +:1056D0004FF001060CD56B48056006600EF009FB23 +:1056E00020B16948016841F48061016024F002043E +:1056F000E0044FF0FF3705D564484660C0F80873F2 +:1057000024F48054600003D56148056024F080448F +:10571000E0050FD55F48C0F80052C0F808735E4935 +:105720000D60091D0D605C4A04210C321160066198 +:1057300024F48074A00409D558484660C0F800528B +:10574000C0F808735648056024F40054C4F3803050 +:10575000C4F3C031884200D0FFDF14F4404F14D0AE +:1057600050484660C0F808734F488660C0F8005241 +:10577000C0F808734D490D600A1D16608660C0F8B8 +:1057800008730D60166024F4404420050AD548488B +:1057900046608660C0F80873C0F8487345480560E5 +:1057A00024F400640EF0F6FB4348044200D0FFDF0F +:1057B000BDE8F081F0B50022202501234FEA020464 +:1057C00020FA02F1C9072DD051B2002910DB00BF29 +:1057D0004FEA51174FEA870701F01F0607F1E0274C +:1057E00003FA06F6C7F88061BFF34F8FBFF36F8FE0 +:1057F0000CDB00BF4FEA51174FEA870701F01F0685 +:1058000007F1E02703FA06F6C7F8806204DB01F12E +:10581000E02181F8004405E001F00F0101F1E021F1 +:1058200081F8144D02F10102AA42C9D3F0BD10B5AE +:10583000224C20600846F6F70EFA2068FFF742FF78 +:105840002068FFF7B7FF0DF0E9FF00F01AF90EF03E +:10585000A1FB0EF0ECFAEDF72BFBBDE810400EF0CB +:105860008DB810B5154C2068FFF72CFF2068FFF7A6 +:10587000A1FF0EF08FFBF6F7AFFA0020206010BDFD +:105880000A207047FC1F00403C17004000C0004049 +:1058900004E50140008000400485004000D0004045 +:1058A00004D5004000E0004000F0004000F500405A +:1058B00000B0004008B50040FEFF0FFDA000002032 +:1058C00070B526490A680AB30022154601244B68C0 +:1058D0005B1C4B60092B00D34D600E7904FA06F374 +:1058E0000E681E420FD0EFF3108212F0010272B662 +:1058F00000D001220C689C430C6002B962B6496872 +:105900000160002070BD521C092AE0D3052070BD43 +:105910004FF0E0214FF48000C1F800027047EFF330 +:10592000108111F0010F72B64FF0010202FA00F27D +:105930000A48036842EA0302026000D162B6E7E760 +:105940000648002101604160704701218140034801 +:105950000068084000D0012070470000A40000202B +:1059600001208107086070470121880741600021FC +:10597000C0F80011184801707047174901200870DD +:1059800070474FF08040D0F80001012803D0124842 +:105990000078002800D00120704710480068C00738 +:1059A00000D0012070470D480C300068C00700D0BF +:1059B00001207047094814300068704707491031CA +:1059C0000A68D20306D5096801F00301814201D1BA +:1059D0000120704700207047AC0000200804004000 +:1059E000002101700846704701460020087070478A +:1059F000EFF3108101F0010172B60278012A01D0A3 +:105A0000012200E000220123037001B962B60AB14D +:105A1000002070474FF400507047E9E7EFF3108122 +:105A200011F0010F72B64FF00002027000D162B6A1 +:105A300000207047F2E700002DE9F04115460E46C0 +:105A40000446002700F0E7F8A84215D300234120C0 +:105A50000FE000BF94F84220A25CF25494F8421088 +:105A6000491CB1FBF0F200FB12115B1C84F84210E0 +:105A7000DBB2AB42EED3012700F0D9F83846BDE8DF +:105A8000F081704910B5802081F800046E49002033 +:105A900081F8420081F84100433181F8420081F8E9 +:105AA0004100433181F8420081F841006748FFF727 +:105AB00097FF6648401CFFF793FFEDF767F9BDE8D5 +:105AC000104000F0B4B8402070475F4800F0A3B821 +:105AD0000A4601465C48AFE7402070475A484330C9 +:105AE00000F099B80A46014657484330A4E74021E0 +:105AF00001700020704710B504465348863000F00E +:105B00008AF82070002010BD0A4601464E4810B5A4 +:105B10008630FFF791FF08B1002010BD42F2070068 +:105B200010BD70B50C460546412900D9FFDF484835 +:105B30000068103840B200F050F8C6B20D2000F0F6 +:105B40004CF8C0B2864203D2FFDF01E0EDF76EF9F8 +:105B5000224629463C48FFF76FFF0028F6D070BD6B +:105B60002DE9F041394F002506463F1D57F82540E5 +:105B7000204600F041F810B36D1CEDB2032DF5D3B3 +:105B80003148433000F038F8002825D02E4800F086 +:105B900033F8002820D02C48863000F02DF800285B +:105BA0001AD0EDF719F92948FFF722FFB0F5005F89 +:105BB00000D0FFDFBDE8F0412448FFF72FBF94F885 +:105BC00041004121265414F8410F401CB0FBF1F272 +:105BD00001FB12002070D3E751E7002804DB00F13D +:105BE000E02090F8000405E000F00F0000F1E02054 +:105BF00090F8140D4009704710F8411F4122491CCC +:105C0000B1FBF2F302FB13114078814201D1012074 +:105C100070470020704710F8411F4078814201D33F +:105C2000081A02E0C0F141000844C0B2704710B544 +:105C30000648FFF7DDFE002803D1BDE81040EDF770 +:105C4000B6B810BD0DE000E0FC0A0020B000002056 +:105C500004ED00E070B5154D2878401CC4B268789A +:105C6000844202D0F6F75DF92C7070BD2DE9F04149 +:105C70000E4C4FF0E02600BFF6F748F920BF40BFBA +:105C800020BF677820786070D6F80052EBF7B8FB39 +:105C9000854305D1D6F8040210B92078B842EBD07C +:105CA000F6F72FF90020BDE8F0810000C0000020C9 +:105CB0002DE9F041012528034FF0E0210026C1F82D +:105CC0008001BFF34F8FBFF36F8F1F4CC4F800618B +:105CD0000C2000F02CF81D4801680268C94341F30C +:105CE000001142F010020260C4F804532560491C00 +:105CF00000E020BFD4F80021002AFAD019B90168C9 +:105D000021F010010160124807686560C4F808536B +:105D1000C4F800610C2000F00AF83846BDE8F081B4 +:105D200010B50446FFF7C4FF2060002010BD002816 +:105D300009DB00F01F02012191404009800000F1C1 +:105D4000E020C0F88012704700C0004010ED00E075 +:105D500008C500402DE9F047FF4C0646FF21A0682A +:105D600000EB061211702178FF2910D04FF00809BE +:105D700009EB011109EB06174158C05900F0F4F97D +:105D8000002807DDA168207801EB06110870267055 +:105D9000BDE8F08794F8008045460DE0A06809EB67 +:105DA00005114158C05900F0DFF9002806DCA06851 +:105DB000A84600EB08100578FF2DEFD1A06800EB96 +:105DC000061100EB08100D700670E1E7F0B5E24B2C +:105DD0000446002001259A680C269B780CE000BF41 +:105DE00005EB0017D75DA74204D106EB0017D75982 +:105DF0008F4204D0401CC0B28342F1D8FF20F0BDD6 +:105E000070B5FFF7D6FAD44C08252278A16805EBC7 +:105E10000212895800F0A8F9012808DD2178A0684D +:105E200005EB01114058BDE87040FFF7B9BAFFF724 +:105E30008BF9BDE87040EDF76FB82DE9F041C64C25 +:105E40002578FFF7B6FAFF2D6ED04FF00808A2684C +:105E500008EB0516915900F087F90228A06801DDCA +:105E600080595DE000EB051109782170022101EBFA +:105E70000511425C5AB1521E4254815901F580010C +:105E800021F07F4181512846FFF764FF34E004236D +:105E9000012203EB051302EB051250F803C0875CE7 +:105EA000BCF1000F10D0BCF5007F10D9CCF3080274 +:105EB00050F806C00CEB423C2CF07F4C40F806C07A +:105EC000C3589A1A520A09E0FF2181540AE0825904 +:105ED00002EB4C3222F07F4282510022425428468B +:105EE000FFF738FF0C21A06801EB05114158E0686D +:105EF00050F82720384690472078FF2814D0FFF725 +:105F000058FA2278A16808EB02124546895800F039 +:105F10002BF9012893DD2178A06805EB0111405889 +:105F2000BDE8F041FFF73CBABDE8F081F0B51D4691 +:105F300014460E460746FF2B00D3FFDFA00700D014 +:105F4000FFDF8548FF210022C0E90247C5700671C6 +:105F50000170427082701046012204E002EB0013CF +:105F6000401CE154C0B2A842F8D3F0BD70B57A4CE1 +:105F7000064665782079854200D3FFDFE06840F867 +:105F800025606078401C6070284670BD2DE9FF5F79 +:105F90001D468B460746FF24FFF70BFADFF8B89142 +:105FA000064699F80100B84200D8FFDF00214FF003 +:105FB00001084FF00C0A99F80220D9F808000EE009 +:105FC00008EB0113C35CFF2B0ED0BB4205D10AEBDB +:105FD000011350F803C0DC450CD0491CC9B28A42F9 +:105FE000EED8FF2C02D00DE00C46F6E799F803102E +:105FF0008A4203D1FF2004B0BDE8F09F1446521C32 +:1060000089F8022008EB04110AEB0412475440F807 +:1060100002B00421029B0022012B01EB04110CD0E1 +:1060200040F801204FF4007808234FF0020C45455A +:1060300013D9E905C90D02D002E04550F2E7414607 +:1060400006EB413203EB041322F07F42C250691A7F +:106050000CEB0412490A81540BE005B9012506EB4B +:10606000453103EB041321F07F41C1500CEB0411C7 +:10607000425499F800502046FFF76CFE99F8000052 +:10608000A84201D0FFF7BCFE3846B4E770B50C4615 +:106090000546FFF78EF9064621462846FFF796FE8D +:1060A0000446FF281AD02C4D082101EB0411A868E2 +:1060B0004158304600F058F800F58050C11700EB09 +:1060C000D14040130221AA6801EB0411515C09B1CF +:1060D00000EB4120002800DC012070BD002070BDD5 +:1060E0002DE9F04788468146FFF770FE0746FF28F6 +:1060F0001BD0194D2E78A8683146344605E0BC42C5 +:1061000006D0264600EB06121478FF2CF7D10CE0DF +:10611000FF2C0AD0A6420CD100EB011000782870A9 +:10612000FF2804D0FFF76CFE03E0002030E6FFF705 +:106130003DF941464846FFF7A9FF0123A9680246F9 +:1061400003EB0413FF20C854A878401EB84200D1C6 +:10615000A87001EB041001E0C80B002001EB061150 +:1061600000780870104613E6081A0002C11700EB09 +:1061700011600012704700005E48002101704170FC +:1061800010218170704770B5054616460C460220F6 +:10619000ECF79EFB5749012008705749F01E086034 +:1061A00056480560001F046070BD10B50220ECF772 +:1061B0008FFB50490120087051480021C0F80011A0 +:1061C000C0F80411C0F808114E494FF400000860EF +:1061D00010BD48480178D9B14B4A4FF40001116015 +:1061E0004749D1F800310022002B1CBFD1F80431FF +:1061F000002B02D0D1F8081119B142704FF01001F4 +:1062000004E04FF00101417040490968817002705B +:106210004FF00000ECF75CBB10B50220ECF758FB28 +:1062200034480122002102703548C0F80011C0F83E +:106230000411C0F80811026010BD2E480178002931 +:1062400004BF407870472E48D0F80011002904BFE1 +:1062500002207047D0F8001100291CBFD0F80411AB +:10626000002905D0D0F80801002804BF012070479C +:10627000002070471F4800B50278214B4078C821A4 +:10628000491EC9B282B1D3F800C1BCF1000F10D0D1 +:10629000D3F8000100281CBFD3F8040100280BD05C +:1062A000D3F8080150B107E0022802D0012805D038 +:1062B00002E00029E4D1FFDF002000BD012000BD85 +:1062C0000C480178002904BF807870470C48D0F84A +:1062D000001100291CBFD0F80411002902D0D0F809 +:1062E000080110B14FF01000704708480068C0B2B4 +:1062F00070470000C200002010F5004008F5004083 +:1063000000F0004004F5014008F5014000F40040B1 +:106310004C48002101704170704770B50646144624 +:106320000D460120ECF7D4FA47480660001D0460D2 +:10633000001D056070BD70B5424901250D7040EA31 +:106340000241424A41F080711160414C0026C4F87C +:106350000461404A4FF040711160002802BFC4F848 +:106360000052256070BD012818BFFFDFC4F800622D +:1063700025604FF000703849086070BD31480178E1 +:1063800079B1344A4FF0407111603149D1F804219C +:106390000021002A08BF417002D0304A12684270C2 +:1063A00001700020ECF794BA26480178002904BF58 +:1063B000407870472648D0F80401002808BF70478D +:1063C00026480068C0B27047002808BF704730B543 +:1063D0001C480078002808BFFFDF1D48D0F80411D2 +:1063E000002918BF30BD0224C0F80443DFF870C094 +:1063F000DCF80010C1F30015DCF8001041F01001CA +:10640000CCF80010D0F80411002904BF4FF400416B +:106410004FF0E02207D100BFC2F8801220BFD0F8B1 +:106420000431002BF8D02DB9DCF8001021F0100158 +:10643000CCF80010C0F8084330BD05490120886041 +:1064400070470000C500002008F5004004F500403A +:1064500000F0004008F5014004F5014000F4004060 +:1064600010ED00E010B5FA480024012144700470DA +:1064700044728472C17280F82540C462846318300B +:106480000EF0F0FCF349601E0860091D0860091D4C +:106490000C60091D0860091D0C60091D0860091DBC +:1064A0000860091D0860091D0860091D0860091DB4 +:1064B0000860091D0860091D0860091D086010BDFD +:1064C000E548016801F00F01032904BF012070476E +:1064D000006800F00F00042804BF0220704700B5D8 +:1064E000FFDF012000BD10B5D94C0168A1614168F2 +:1064F000E161007A84F82000207E48B1207FF7F720 +:106500006DFEA07E011C18BF0121207FF7F75AFE07 +:10651000607E002808BF10BD607FF7F75FFEE07E59 +:10652000011C18BF0121607FBDE81040F7F74ABE8B +:1065300030B500250446012904D002290CBF4FF0D4 +:106540008075FFDF45F4847040F48010C349086013 +:1065500044F44030091D40F00070086030BD30B593 +:1065600000250446012904D002290CBF4FF0807594 +:10657000FFDF45F4847040F48010B849086044F4AB +:106580004030091D40F000700860B548D0F80001A7 +:10659000002818BFFFDF30BD2DE9F04102254FF084 +:1065A000E02801240026C8F88051BFF34F8FBFF3C5 +:1065B0006F8FAC48066004600DF09BFBAA4F18B1CA +:1065C000386840F4806038600DF069FB38B1386895 +:1065D00020F0770040F0880040F0004038600DF077 +:1065E00076FB30B1A148016821F47F4141F4B051FC +:1065F0000160A0499E4808600DF069FB944948B1CC +:106600009D4881F8215005609D4A9C481060121FEA +:106610009C4810609C4A40F25B601060121F40F280 +:1066200003101060101F04608B4A0320106097480D +:10663000046091F82120002A14BF4FF4C022944A2C +:1066400042F44022934B1A60944B934A1A601B1FEA +:10665000934A1A60026822F440720260026842F4AF +:1066600080720260C8F880527D4A1020C2F804038C +:1066700081F83160CE62BDE8F0818A48016821F07E +:10668000010141F0807101607047714A0368C2F8EE +:1066900002308088D080117270476D4B10B51A7A25 +:1066A0008A4208D101460622981C0EF0FFF9002804 +:1066B00004BF012010BD002010BD654890F82500E2 +:1066C0007047634A517010707047F0B505468000FE +:1066D00000F1804000F580508B88C0F820360B78A0 +:1066E000D1F8011043EA0121C0F8001605F10800B5 +:1066F000012707FA00F66C4C002A04BF2068B0435B +:1067000004D0012A18BFFFDF2068304320602068D2 +:1067100007FA05F108432060F0BD0DF091BD4C482B +:1067200090F832007047614AC17811600068604992 +:10673000000208607047252808BF02210ED02628D5 +:1067400008BF1A210AD0272808BF502106D00A28DE +:1067500094BF0422062202EB4001C9B2554A1160DF +:106760005549086070472DE9F0413D4E80460320B1 +:106770000D46C6F80002364F97F82100002814BFD6 +:106780004FF4C02042484D49086028460DF086FD70 +:106790000124B8F1000F03D0B8F1010F16D018E0B2 +:1067A0000DF095FA78B1464A11685006022DD0F8DE +:1067B00020030CBFC0F30660C0F3062021F4FE41A5 +:1067C00041EA00201060BC72346002E00220B8721E +:1067D00074603C48C4643C4800682946BDE8F04108 +:1067E00000F09DBD2DE9F0410D461D4907460320EF +:1067F000C1F80002164C94F82100002814BF4FF491 +:10680000C02023482D4E306028460DF047FD17B1BB +:10681000012F5BD063E00DF05AFA78B128490A687D +:106820004806022DD0F820030CBFC0F30660C0F369 +:10683000062022F4FE4242EA002008600120A072F5 +:10684000A06B40F48010A0634FF4801046E000007D +:10685000D80B0020000E0040101500401415004019 +:1068600000100040FC1F00403C1700404017004053 +:106870002C000089781700406015004044800040DB +:106880009CF501402811004038150040501600408A +:106890000000040408F5014040800040A4F50140D8 +:1068A00010110040741700404016004024150040AD +:1068B0001C150040081500405415004004F5014027 +:1068C00088150040008000404C8500400220A072E6 +:1068D000A06B40F40010A0634FF400103060ECF7A0 +:1068E000D5F92946BDE8F04100F019BD2DE9F74F73 +:1068F000FB4C804682B003200E46C4F80002F94DDE +:1069000095F82100002814BF4FF4C020F648F74F37 +:10691000386004980DF0C2FCDFF8D4A34FF00109F1 +:10692000B8F1000F48D0B8F1010F18BFFFDF5CD0FD +:10693000F0480660F149F0480860A86B40F4002078 +:10694000A863D4F800824FF0100AC4F808A3002509 +:10695000C4F80052EA484FF4802BC0F800B0C4F8E5 +:106960000051C4F80C51C4F81051C4F80451C4F8D3 +:106970001451C4F818510DF0AAF9002818BFC4F832 +:106980002851E04800680090C4F80082C7F800B0C1 +:10699000C4F804A34FF400203860DB48C0F84C90E2 +:1069A000DA480068B04228BFFFDF3046049905B0DE +:1069B000BDE8F04F00F0B3BC0DF089F980B1D44AC6 +:1069C0000498116853060228D3F820030CBFC0F3C3 +:1069D0000660C0F3062021F4FE4141EA0020106069 +:1069E000CAF8004085F80A90A2E7CA48CAF8000031 +:1069F0000220A8729CE72DE9F041BA4C064600251A +:106A000094F8310017468846002808BFFFDF16B10A +:106A1000012E16D021E094F83100012808D094F816 +:106A20003020394640460DF046FCE16A451814E036 +:106A300094F830103A4640460DF07BFCE16A451868 +:106A40000BE094F8310094F8301001283A464046A3 +:106A500009D00DF096FCE16A45183A4629463046C1 +:106A6000BDE8F04142E70DF046FCE16A4518F4E765 +:106A70002DE9F84F9A4CD4F8000220F00B09D4F815 +:106A800004034FF0100AC0F30018C4F808A300264E +:106A9000C4F80062934D95F82100002814BF4FF40C +:106AA000C020914840F4402195480160A97A01270F +:106AB000012902D0022903D015E0297E11B912E084 +:106AC000697E81B1A97FEA7F07FA01F107FA02F234 +:106AD0001143016095F82000800000F1804000F52E +:106AE000C040C0F81065FF208DF80000C4F81061A8 +:106AF000276104E09DF80000401E8DF800009DF81D +:106B0000000018B1D4F810010028F3D09DF800005F +:106B1000002808BFFFDFC4F810610DF0D8F8002886 +:106B200018BFC4F828616E72AE72EF72C4F800929A +:106B3000B8F1000F18BFC4F804A3BDE8F88FFF2018 +:106B400008B58DF8000066480021C0F81011012139 +:106B5000016104E09DF80010491E8DF800109DF8B9 +:106B6000001019B1D0F810110029F3D09DF80000E1 +:106B7000002808BFFFDF08BD0068674920F07F409C +:106B8000086070474FF0E0200221C0F8801100F546 +:106B9000C070BFF34F8FBFF36F8FC0F80011704705 +:106BA0004FF0E0210220C1F8000170475B490870F6 +:106BB00070475B490860704770B50546ECF766F8AA +:106BC000484C2844E16A884298BFFFDF01202074C6 +:106BD000ECF75CF84119616194F8210040B1084478 +:106BE00060613F48D0F8001241F04001C0F8001247 +:106BF00045490020C1F844014A4960690860A06B1A +:106C00003A4940F48000A0634FF48000086070BDF2 +:106C100070B5344C05460220207443480E46016886 +:106C200001F00F01032908BF012207D0006800F01E +:106C30000F0004280EBF0222FFDF012294F831006A +:106C400094F8301001281AD028460DF0E1FB60615D +:106C500094F8210048B16169084460612048D0F887 +:106C6000001241F04001C0F8001227490020C1F88D +:106C700044016169E06A08442A49086070BD3346EE +:106C800028460DF093FBE2E71D494FF480000860B1 +:106C90001448816B21F480018163002101747047E5 +:106CA000C20002F1804202F5F832204BC2F81035E2 +:106CB000C2F81415012181400C4801600948826B1B +:106CC000114381637047104801214160C160002178 +:106CD000C0F84411134801600248C16270470000C7 +:106CE00000100040D80B00200000040404F501400F +:106CF000ACF501404885004048810040A8F50140BE +:106D000008F5014018110040008000404C8500400B +:106D100088150040041000403C150040C7000020CA +:106D20000415004044850040101500400411004047 +:106D300010B504460CF0CBFF00281CBFFC4880F8BF +:106D40002140FC480460FC48D0F8001241F04001AA +:106D5000C0F8001210BDF84810B5D0F8001221F0AC +:106D60004001C0F800120CF0B2FFF249002818BF31 +:106D70000220086010BDF048D0F8001221F0100188 +:106D8000C0F80012012181617047EB480021C0F872 +:106D90001C11D0F8001241F01001C0F80012704729 +:106DA000E54981B0D1F81C21012A1EBF002001B0A5 +:106DB0007047E24A126802F07F02524202700020DD +:106DC000C1F81C01DE4800680090012001B0704746 +:106DD000F0B517460C00064608BFFFDFD44D14F08F +:106DE000010F2F731CBF012CFFDF002E0CBF0120F1 +:106DF00002206872EC7201281CBF0228FFDFF0BD80 +:106E00002DE9F84FDFF83C9399F80000042828BFDB +:106E1000FFDFDFF834A3DAF84C11CC48C44C00266D +:106E20004FF00108D9B1A17A012902D0022903D07B +:106E300015E0217E11B912E0617E81B1A17FE27F70 +:106E400008FA01F108FA02F21143016094F82010E7 +:106E5000890001F1804101F5C041C1F81065BB48CE +:106E6000A16B0160A663217C002019B1DAF84411FE +:106E7000012900D00021A27AAF4F012A6DD0022A49 +:106E800073D000BFD7F8101101290CBF10210021C9 +:106E900041EA0005AE48016811F0FF0F03D0D7F8B2 +:106EA0001411012900D0002184F83210006810F07C +:106EB000FF0F03D0D7F81801012800D0002084F874 +:106EC0003300A448006884F83400FFF7B6F90128BD +:106ED00018BF002084F83500C7F80061C7F80C61BE +:106EE000C7F81061C7F80461C7F81461C7F81861E2 +:106EF0000CF0EDFE002818BFC7F82861964800681E +:106F000000909148C0F8446194480068DFF850A2AE +:106F10000090DAF80000A06294F8211000291CBF4C +:106F2000401AA0628F480068E0628F48016801F053 +:106F30000F01032908BF012007D0006800F00F00EF +:106F400004280EBF0220FFDF012084F83000A07A61 +:106F500084F83100022824D116E0D7F80C0101286A +:106F600014BF002008208DE7FFE7D7F80C010128A7 +:106F700014BF002002207D4A1268012A14BF042297 +:106F80000022104308437DE7607850B178490968D2 +:106F900009780840217831EA000008BF84F824808D +:106FA00001D084F8246015F0020F0AD0EBF76EFED2 +:106FB000A16A704A081A99F80010490852F821107D +:106FC000884715F0010F18BF4FF0000B12D000BF1B +:106FD000EBF75CFEE16A99F80020081A664951F85F +:106FE00022205946904700BF99F8000010F0010F89 +:106FF0002FD10CE015F0020F18BF4FF0010BE7D1B5 +:1070000015F0080F18BF4FF0020BE1D1ECE7DFF8E5 +:1070100060B1DBF80000007800F00F00072828BFFF +:1070200084F8256015D2DBF80000062200F1090182 +:10703000A01C0DF03BFD40B9207ADBF80010097868 +:10704000B0EBD11F08BF012001D04FF0000084F841 +:107050002500E17A4FF0000011F0020F1CBF15F07F +:10706000020F15F0040F19D111F0100F1CBF94F886 +:107070003320002A02D094F835207AB111F0080F9D +:107080001CBF94F82420002A08D111F0040F02D06C +:1070900094F8251011B115F0010F01D04FF0010047 +:1070A000617A19B1A0B1FFF7E3FC17E094F8210071 +:1070B000002814BF4FF4C021304924480160D7F89C +:1070C000000220F00300C7F8000284F80B8005E0FE +:1070D00001290DD0022918BFFFDF12D015F0010FD2 +:1070E0001AD0274899F8001050F82100804760E036 +:1070F000667284F80B8084F80A809621227B002037 +:1071000007E0667284F80B800220A072227B962131 +:107110000120FFF770FCE1E715F0020F34D01949A8 +:1071200099F8002028EA950051F82210884740E09D +:10713000D80B0020601500400010004048150040AA +:107140001C110040C70000200080004008F50140ED +:1071500040160040101400401811004044810040C7 +:107160004485004040850040101500400014004058 +:107170000415004084510200CC51020000000404B8 +:107180008C5102009C51020015F0080F06D0924865 +:1071900099F8001050F8210080470AE015F0100F10 +:1071A00008BFFFDF05D08D4899F8001050F8210086 +:1071B0008047A07A022818BFBDE8F88F207C0028FD +:1071C00008BFBDE8F88F8649C1F84461022815D090 +:1071D000012818BFFFDFE16A6069884298BFFFDFBE +:1071E000D4F81400CAF80000A06B7E4940F4800077 +:1071F000A0634FF480000860BDE8F88F6169E06A21 +:107200000844EFE738B50025774C002818BFC4F8CC +:107210000052C4F80051C4F80C51C4F81051C4F81D +:107220000451C4F81451C4F818510CF050FD002852 +:1072300018BFC4F828516D480068009038BD012877 +:1072400004BF28207047022804BF1820704700B5EB +:10725000FFDF282000BD012804BF41F6A47070475D +:10726000022804BF41F28830704700B5FFDF41F6C5 +:10727000A47000BD10B5022807D001280EBF42F649 +:10728000CE30FFDF41F66A0010BD0CF0FBFC30B9D8 +:107290000CF005FD002808BF41F6583001D041F23E +:1072A000643041F29A01084410BD012812BF02283F +:1072B0000020704700B5FFDF002000BD4A490820CC +:1072C000C1F800024A4890F82100002814BF4FF48A +:1072D000C020484848490860494948480860091D95 +:1072E00048480860091D48480860091D474808606B +:1072F0003C494FF440200860704745480168032925 +:107300001BBF006802280120002070474048016828 +:107310000B291BBF00680A28012000207047344950 +:107320008A7A012A49D0022A18BF70474B7E002B67 +:1073300008BF7047012A44D0CB7E4A7F13F1000C6E +:1073400018BF4FF0010C24231844324B1860244B13 +:107350000020C3F84C0110028CF0010240EA0250F8 +:1073600040F0031291F82000830003F1804303F5FD +:10737000C043C3F81025284A8B7F02EB8000DA0057 +:1073800002F1804202F5F832C2F81405DFF88CC031 +:10739000C2F810C5C97FCA0002F1804202F5F83276 +:1073A000C2F814051E48C2F81005012000FA03F2C5 +:1073B00088400C491043086070470B7E002BB9D100 +:1073C00070478B7E0A7F002B14BF4FF0010C4FF0EB +:1073D000000C1123B8E70000AC510200BC510200C0 +:1073E0000080004004F501400010004018110040EA +:1073F000D80B00200000040408F5014000110040F3 +:10740000A0F50140141000401C1100401010004075 +:10741000501500404C850040006000404C81004009 +:107420001011004010B53F4822210DF0EAFB3D4805 +:107430000024017821F010010170012105F0A6FE61 +:1074400039494FF6FF7081F8224088843749088017 +:10745000488010BD704734498A8C824218BF7047FB +:10746000002081F822004FF6FF70888470472D4974 +:10747000016070472D49088070472B498A8CA2F51E +:107480007F43FF3B03D0002101600846704791F81D +:1074900022202549012A1ABF0160012000207047DF +:1074A000214901F1220091F82220012A04BF002085 +:1074B0007047012202701D4800888884104670477A +:1074C0001A49488070471849184B8A8C5B889A4241 +:1074D00006D191F82220002A1EBF016001207047CA +:1074E000002070471048114A818C5288914209D17E +:1074F0004FF6FF71818410F8221F19B1002101702D +:1075000001207047002070470748084A818C528844 +:10751000914205D190F8220000281CBF002070473E +:10752000012070473A0C0020140C0020C8000020F5 +:107530007047574A012340B1012818BF70471370A4 +:107540000868906088889081704753700868C2F816 +:1075500002008888D08070474D4A10B1012807D0BA +:107560000EE0507860B1D2F802000860D08804E0E4 +:10757000107828B190680860908988800120704751 +:1075800000207047424910B1012803D006E0487836 +:1075900010B903E0087808B1012070470020704757 +:1075A00030B58DB00C4605460D2104A80DF04BFBFF +:1075B000E0788DF81F0020798DF81E0060798DF835 +:1075C0001D002868009068680190A8680290E8682B +:1075D000039068460CF0BCF920789DF82F10884283 +:1075E0000CD160789DF82E10884207D1A0789DF8C4 +:1075F0002D10884202BF01200DB030BD00200DB01B +:1076000030BD30B50C4605468DB04FF0030104F196 +:10761000030012B1FEF766FA01E0FEF782FA607924 +:107620000D2120F0C00040F04000607104A80DF072 +:107630000AFBE0788DF81F0020798DF81E00607934 +:107640008DF81D002868009068680190A868029075 +:10765000E868039068460CF07BF99DF82F002070D5 +:107660009DF82E0060709DF82D00A0700DB030BD0B +:1076700010B5002904464FF0060102D0FEF732FA99 +:1076800001E0FEF74EFA607920F0C000607110BD95 +:10769000CC000020FE48406870472DE9F0410F46BD +:1076A000064601461446012005F0CCF9054696F839 +:1076B0005500FFF7D0FD4AF2B12108444FF47A712A +:1076C000B0FBF1F0718840F271225143C0EB4100F0 +:1076D000001BA0F2653402F08BFF002818BF1E3C8F +:1076E000AF4234BF28463846A04203D2AF422CBF37 +:1076F0003C462C467462BDE8F0812DE9FF4F95B001 +:10770000044690F8550089461090DDE917100843AB +:107710001190E048002605780C2D28BFFFDFDE4FD2 +:1077200037F8158094F86C510C2D28BFFFDFDA482C +:1077300030F8150040441FFA80F894F865000D28D1 +:107740000CBF012000200B901798002804BF94F86C +:107750000C0103282BD10B9848B3B4F88E0148458F +:1077600025D1D4F81401C4F80001608840F2E24148 +:107770004843C4F80401B4F85A01B4F8E6100844C8 +:10778000C4F80801204602F03DFFB4F89201E082FF +:1077900094F890016075B4F894016080B4F8960193 +:1077A000A080B4F89801E080022084F80C01D4F89D +:1077B00064010F90D4F860010D90B4F8E670B4F84D +:1077C0005801D4F854110591179921B194F820115A +:1077D00051B100F0DDB804F1E001099174310A9172 +:1077E00004F5A075091D07E004F59A710991091DBA +:1077F0000A9104F59275091D0C91B4F85810A9EB83 +:107800000000A9EB01010FFA80FA0FFA81FBBAF12F +:10781000000F05DAD4F8500105900120DA461190E6 +:10782000002004909B480079E8B3F4F739FAD0B30C +:10783000B4F8F800022836D394F80C01022832D0AC +:1078400094F8230178BB94F86C81B8F10C0F28BF31 +:10785000FFDF914830F8180000F5C8601FFA80F883 +:1078600094F80C0101287DD0608840F2E241414348 +:107870000020B8F1000F05D0884808FB01F1B1FBEA +:10788000F0F0401C07EB0B01A1EB0A02D4F8141135 +:1078900080B2431A049902FB03110491C4F8140145 +:1078A000012084F8230194F80C01002874D00128E9 +:1078B00000F03B82022800F08E81032818BFFFDF12 +:1078C00000F068820498311A0598FCF732FD0A9995 +:1078D000012640F2712208600C98A0F80090002068 +:1078E00028702E710A980068A8606188D4F8140185 +:1078F0005143C0EB41006749A0F23530C861896946 +:10790000814287BF09990860099801600998616AF6 +:107910000068084400F2A510E86002F069FE10B1AA +:10792000E8681E30E8606E71B4F8D000A0EB090082 +:1079300000B20028C4BF032068710B980028189873 +:1079400000F07F82D8B100BFB4F8F81000290CBF56 +:107950000020B4F8FA00A4F8FA0094F8FC20401CC7 +:10796000504300E019E0884209D26879401E00289F +:1079700005DD6E71B4F8FA00401CA4F8FA001798FF +:10798000002800F0818294F82001002800F078821D +:1079900019B00220BDE8F08F65E094F86800032874 +:1079A00057D03B4894F8551090F8300005F05FF937 +:1079B000E18A40F27122514300EB41010020D4F8EA +:1079C0000421B8F1000F06D0344808FB02F2B2FBE4 +:1079D000F0F000F10100D4F80031D4F80821A0EB58 +:1079E000030C049BC4F8000102FB0C334FF00000B1 +:1079F00007D000BF294808FB01F1B1FBF0F000F10E +:107A00000100D4F81011C4F81001A0EB01011944D1 +:107A1000608840F2E24300FB03F34FF0000006D021 +:107A20001E4808FB03F3B3FBF0F000F1010007EB85 +:107A30000B03A3EB0A03A3EB0202D4F81431A2F167 +:107A40000102A0EB030302FB03110491C4F814012B +:107A500026E7E18A40F27122D4F8040101FB02F129 +:107A600000EB4101AAE70D98002808BFFFDF94F85A +:107A70005510074890F8300005F0F9F80790E18AB2 +:107A800040F271204143079800EB4101002007E0DC +:107A90005C0C0020DC000020DC51020040420F00A2 +:107AA000B8F1000F07D000BFFF4808FB01F1B1FBA0 +:107AB000F0F000F10100C4F81001618840F2E240EA +:107AC00001FB00F14FF0000006D0F74808FB01F180 +:107AD000B1FBF0F000F10100C4F8140186B22146B8 +:107AE0004FF00100D4F828A004F0ACFF074694F84A +:107AF0005500FFF7B0FB4AF2B12B58444FF47A78A7 +:107B0000B0FBF8F0618840F271225143C0EB4100B4 +:107B1000801BA0F2653602F06BFD002818BF1E3EE8 +:107B2000BA4534BF38465046B04203D2BA452CBF9E +:107B300056463E46666294F85500FFF7B6FB00F2E3 +:107B4000E140B0FBF8F10D980E1894F85500FFF7DE +:107B5000ACFB074694F85500FFF77DFB38444AF22A +:107B6000AB310844B0FBF8F1E28A40F271204243A5 +:107B70000798D4F8107100EB4200401AC01B304443 +:107B8000A0F12006617D40F2E24011FB00FA94F87A +:107B900055000090FFF75FFB5844B0FBF8F000EB96 +:107BA000470000EB0A070098FFF749FB384400F153 +:107BB0006201BE48816194F85500FFF776FB00F240 +:107BC000E140B0FBF8F10D980844301AB0F53D7F64 +:107BD00098BFFFDF76E6E18A40F27122D4F8040113 +:107BE000514300EB41010020B8F1000F07D000BF66 +:107BF000AD4808FB01F1B1FBF0F000F10100C4F861 +:107C00001001608840F2E24100FB01F14FF00000FA +:107C100006D0A54808FB01F1B1FBF0F000F101002E +:107C2000C4F8140186B221464FF00100D4F828A010 +:107C300004F008FF804694F85500FFF70CFB4AF269 +:107C4000B12B00EB0B014FF47A70B1FBF0F06188BF +:107C500040F271225143C0EB4100801BA0F2653617 +:107C600002F0C6FC002818BF1E3EC24534BF404685 +:107C70005046B04203D2C2452CBF564646466662C5 +:107C80000FBB1898F8B194F855603046FFF7E3FA47 +:107C900000EB0B014FF47A70B1FBF0F0D4F8101147 +:107CA000E28A084440F27123D4F804115A4301EBEC +:107CB00042010F1A3046FFF7C2FA0F99081A3844EA +:107CC000A0F120060AE0E28A40F27121D4F8040112 +:107CD000514300EB4100D4F81011461AD4F80821A2 +:107CE000D4F80011D4F8100101FB020A607D40F2C3 +:107CF000E24110FB01F894F855000746FFF7ABFA94 +:107D000000EB0B014FF47A70B1FBF0F000EB4A008E +:107D100080443846FFF793FA404400F1600163481D +:107D20008161012084F80C01CCE5618840F2712268 +:107D3000D4F814015143C0EB410101FB0AF6D4F819 +:107D4000081107EB0B02521AD4F800C1D4F8103115 +:107D5000521E0CFB013102FB001A607D40F2E24131 +:107D600010FB01F894F855000746FFF774FA4AF241 +:107D7000B12101444FF47A70B1FBF0F000EB4A00FE +:107D800080443846FFF75BFA404400F16001474801 +:107D9000816197E5618840F27122D4F81401514362 +:107DA000C0EB410000FB0AF694F8640024281CBFD5 +:107DB00094F8650024280BD1B4F88E01A9EB0000DB +:107DC00000B2002804DB94F89101002818BF10903D +:107DD0001198D8B1D7B90F9800281ABF0D9800286C +:107DE000FFDF94F85500FFF736FA4AF2B12101445B +:107DF0004FF47A70B1FBF0F0361A94F85500FFF7A3 +:107E00001EFA0F99081A3044A0F12006D4F8141174 +:107E100007EB0B0000FB01F71098FFF71CFA4AF282 +:107E2000B12101444FF47A70B1FBF0F000EB470749 +:107E30001098FFF704FA384400F160011B48816193 +:107E400040E500287FF480AD94F80C0100283FF451 +:107E500096AD618840F27122D4F814015143C0EB11 +:107E60004101284604F076FD0004000C3FF487AD84 +:107E70002299002918BF0880012019B0BDE8F08FB1 +:107E800094F85C01FDF7B0F894F85C012946FCF722 +:107E900099FF20B1179880F0010084F8210119B0F2 +:107EA0000020BDE8F08F000040420F00DC00002001 +:107EB00070B5FE4C607A00281CBF002070BD94F89D +:107EC000340038B1A16B606A884203D9F7F795FB9B +:107ED000002070BDA06AE8B1F6F72EFC0546F6F763 +:107EE000AFFA284442F210714618FCF721FD05460E +:107EF0002946E06AFDF738FAE562A16A82199142E3 +:107F000024BF081AA06205D20120A062F7F775FB12 +:107F1000002070BD012070BDF8B5E44C0246E44F6E +:107F200000256168606A052A48D2DFE802F0032F65 +:107F300034373E00A07A002660B101216846FDF783 +:107F4000D1FD9DF8000042F210710002B0FBF1F289 +:107F500001FB1206F6F7F0FB8119A069FCF7E9F9BD +:107F6000A061257403206075607A38B9207B04F124 +:107F70001001FCF727FF002808BFFFDF2584FCF76E +:107F8000E1FB7879BDE8F840EAF7C6BFBDE8F84004 +:107F9000002100F0A9BDC1F86001F8BDD1F8600171 +:107FA000BDE8F840012100F09FBD84F83450FCF793 +:107FB000C9FB7879BDE8F840EAF7AEBFFFDFF8BD4E +:107FC0002DE9F04FDFF8E492044683B099F8000001 +:107FD0008B4601270025B64E4FF00208032804BF48 +:107FE00099F80C00A0427CD1D9F80400706199F88E +:107FF0000000032818BFFFDF0324BBF1080F71D274 +:10800000DFE80BF0040F31312CD1D1C8C9F824506E +:10801000F6F762FF002818BFFFDFB47003B0BDE8B9 +:10802000F08FF6F70DFA0446D9F81C00A04228BFDD +:10803000C9F81C4005D2201AFDF7BDF9C9F81C404B +:1080400038B1F7F7C2FA002818BFFFDF03B0BDE868 +:10805000F08F03B00020BDE8F04F5DE703B0BDE84E +:10806000F04FFEF7CDBE89F8144089F8105099F80A +:1080700034004FF0010A42F2107B68B14FF47A717C +:10808000D9F81800FCF755F9C9F81800002109F1D2 +:10809000100004F05FFC1BE001216846FDF718FDAD +:1080A0009DF800000002B0FBFBF10BFB110AF6F794 +:1080B00043FB82445146D9F81800FCF73AF9C9F855 +:1080C0001800514609F1100004F044FC00F1010AC7 +:1080D000B9F82000411C0A293CBF5044A9F82000EF +:1080E00001E064E05FE0D9F8040038B1B9F820009D +:1080F000401C0A2828BF89F8158001D289F815404C +:1081000099F8090070BB99F8340040B1D9F83810DB +:10811000D9F82400884202D9F7F76FFA22E0D9F89B +:10812000280058B3F6F708FB0446F6F789F920440F +:1081300000EB0B08FCF7FCFB04462146D9F82C00A9 +:10814000FDF712F9C9F82C40D9F8281000EB080205 +:10815000914224BF081AC9F828000FD2C9F8287024 +:10816000F7F74BFA99F80C00FCF7C3FB89F80050BD +:10817000707903B0BDE8F04FEAF7CEBE99F80C0075 +:1081800009F11001FCF71EFE002808BFFFDF03B055 +:10819000BDE8F08F99F80C00FCF7ABFB89F80050B4 +:1081A00003B0BDE8F08FFFDF03B0BDE8F08F202CF7 +:1081B00028BFFFDFDFF8FC90072139F81400FAF739 +:1081C00075FA5FEA000A08BFFFDF202C28BFFFDF37 +:1081D00039F81400BAF80010884218BFFFDF54467F +:1081E000C6F814A04FF0200ABBF1080F80F04981B7 +:1081F000DFE80BF0049EA8A8A1F3F2F1C4F86051E7 +:10820000F580C4F8645194F8210138B9FCF790FB6B +:10821000D4F82C11FDF7A8F800281BDCB4F81E11C7 +:10822000B4F85800814206D1B4F8D410081AA4F862 +:10823000D600204605E0081AA4F8D600B4F81E11AE +:108240002046A4F85810D4F84811C4F82C11C0F8EE +:1082500050111DE0B4F81C11B4F85800081AA4F825 +:10826000D600B4F81C112046A4F85810D4F82C11EC +:10827000C4F84811C4F85011D4F83411C4F8E0100F +:10828000D4F83811C4F85411B4F83C11A4F85811BA +:1082900002F095F8FCF726FB814694F85500FEF7AE +:1082A000DAFF4AF2B121084406E000005C0C00202D +:1082B000DC000020980C00204FF47A71B0FBF1F044 +:1082C000D4F8141140F27122084461885143C0EB84 +:1082D0004100A0F1300AB9F1B70F98BF4FF0B709CC +:1082E0002146012004F0AEFB4844AAEB0000A0F2B6 +:1082F0001A39A2462146012004F0A4FBDAF8241022 +:108300009C30814288BF0D1AC6F80C904D4528BF9D +:108310004D46B560D4F84C01A0F2A5103061FCF7D1 +:10832000F0FF84F8207186F8028003B0BDE8F08F7A +:1083300002F059F901E0FEF763FD84F8207103B003 +:10834000BDE8F08FFCF7F4FAD4F85021014610464E +:10835000FDF70AF848B1628840F27123D4F814118D +:108360005A43C1EB4201B0FBF1F094F865100D29BE +:108370000FD0B4F85820B4F81E1113189942AEBFAC +:10838000481C401C1044A4F81E0194F8220178B93E +:1083900005E0B4F81E01401CA4F81E0108E0B4F882 +:1083A0001E01B4F8D410884204BF401CA4F81E017A +:1083B000B4F85A010DF1040B401CA4F85A01B4F8AA +:1083C0008000B4F87E10401AB4F85810401E0844DB +:1083D0001FFA80F812E046E03EE052E000231A4621 +:1083E0002046CDF800B0FFF788F9002804BF03B09D +:1083F000BDE8F08F012818BFFFDF25D0B4F81E11AB +:10840000A8EB010000B20028E8DA082084F8740024 +:1084100084F87370204601F095FD84F80C5194F8AF +:108420005C514FF6FF77202D00D3FFDF29F8157040 +:1084300094F85C01FCF75DFA84F85CA1707903B0F4 +:10844000BDE8F04FEAF768BDB4F81E01BDF80410AE +:108450000844A4F81E01D1E7FEF771FB03B0BDE8A4 +:10846000F04FFEF7CDBC94F80C01042818BFFFDFD5 +:1084700084F80C5194F85C514FF6FF77202DD5D33A +:10848000D3E7FFDF03B0BDE8F08F10B5F84C2078DC +:1084900050B101206072F7F7C8F82078032805D0A2 +:1084A000207A002808BF10BD0C2010BD207BFCF7EF +:1084B0009BFD207BFCF7E5FF207BFCF71AFA0028E8 +:1084C00008BFFFDF0020207010BD2DE9F04FE84FFE +:1084D00083B0387801244FF0000840B17C7201204D +:1084E000F7F7A3F83878032818BF387A0DD0DFF8EB +:1084F000849389F8034069460720FAF760F800285A +:1085000018BFFFDF4FF6FF7440E0387BFCF76CFDCF +:10851000387BFCF7B6FF387BFCF7EBF9002808BF87 +:10852000FFDF87F80080E2E7029800281CBF90F880 +:108530000C1100292AD00088A0421CBFDFF838A304 +:108540004FF0200B3AD00721FAF7B0F8040008BF2B +:10855000FFDF94F85C01FCF794FF84F80C8194F839 +:108560005C514FF6FF76202D28BFFFDF2AF81560FB +:1085700094F85C01FCF7BDF984F85CB1694607200A +:10858000FAF71DF8002818BFFFDF12E06846F9F778 +:10859000F4FF0028C8D011E0029800281CBF90F812 +:1085A0000C11002905D00088A0F57F41FF39CAD100 +:1085B00004E06846F9F7E1FF0028EDD089F8038070 +:1085C00087F8348087F80B8003B00020BDE8F08F77 +:1085D00070B50446A94890F80004A94D400995F8E3 +:1085E00000144909884218BFFFDF95F8140D4009AF +:1085F000A44991F800144909884218BFFFDF9D493A +:10860000002001224C7188700A7048700A71C8708D +:1086100097490870BDE8704057E796490870704761 +:108620002DE9F843924C064688462078002860D110 +:108630009548FCF702F9207320285AD0032766607A +:108640002770002565722572AEB1012106F1FC008C +:10865000FDF767FA0620F9F7D1FF81460720F9F701 +:10866000CDFF96F8FC104844B1FBF0F200FB12106D +:10867000401C86F8FC00FCF735F940F2F6518842C0 +:1086800038BF40F2F65000F59F7086B2F5F7D8FE7D +:10869000E061F6F751F84FF0010968B384F80A90E9 +:1086A000FCF746F9814601216846FDF711FA9DF86D +:1086B000000042F210710002B0FBF1F201FB120067 +:1086C00081194846FBF735FEA061C4E90A89277580 +:1086D00067752574207B04F11001FCF773FB0028FB +:1086E00008BFFFDF25840020F6F79FFF0020BDE8CC +:1086F000F8830C20BDE8F883FCF71AF93146FBF744 +:1087000018FEA061A57284F83490A8F28B50A5627F +:10871000A063DCE7574948707047564908717047B5 +:108720002DE9F041534C0646E088401CE080D4E936 +:1087300002516078D6F8607120B13A46284604F0BC +:108740003DF90546A068854205D02169281A0844EC +:108750002061FCF7D6FDA560AF4209D896F80C0160 +:10876000012805D0E078002804BF0120BDE8F08191 +:108770000020BDE8F08110B504460846FEF76BFD09 +:108780004AF2B12108444FF47A71B0FBF1F040F2A3 +:10879000E241614300F2353081428CBF081A00206B +:1087A00010BD70B5044682B0002084F8200194F812 +:1087B000DE00002807BF94F80C01032802B070BD4A +:1087C000FCF7B6F8D4F8502101461046FCF7CCFD72 +:1087D0000028DCBF02B070BD628840F27123D4F87B +:1087E00014115A43C1EB4201B0FBF1F0B4F8581038 +:1087F000401C0844A4F81C01B4F8D400B4F81C21AF +:10880000801A00B20028DCBF02B070BD012084F8DD +:108810002201B4F88000B4F87E2001AE801A401E18 +:10882000084485B212E00096B4F81C11002301221E +:108830002046FEF762FF002804BF02B070BD012889 +:108840000DD0022812BFFFDF02B070BDB4F81C01CA +:10885000281A00B20028BCBF02B070BDE3E7B4F82C +:108860001C01BDF804100844A4F81C01EEE7000048 +:108870005C0C0020DC000020980C002001E000E0EF +:108880000BE000E019E000E0C17F0100F8B5042230 +:10889000002506295BD2DFE801F007260319192A13 +:1088A000044680F80C2107E00446B748C078002849 +:1088B00018BF84F80C210AD0FBF744FFA4F85A51E2 +:1088C000B4F85800A4F81E0184F82251F8BD0095B0 +:1088D000B4F8D410012300222046FEF70EFF002832 +:1088E00018BFFFDFE8E7032180F80C11F8BD06464A +:1088F000876AB0F81401314685B2012004F0A2F86D +:10890000044696F85500FEF7A6FC4AF2B121084449 +:108910004FF47A71B0FBF1F0718840F2712251434B +:10892000C0EB4100401BA0F2653501F061FE00285C +:1089300018BF1E3DA74234BF20463846A84228BF74 +:108940002C4602D2A74228BF3C467462F8BDFFDF26 +:10895000F8BD2DE9F0478C4CA178022906BFE188CB +:108960000029BDE8F0876569C5F8640195F85500F0 +:10897000FEF765FCD5F86411081AA1680144A160EE +:10898000E1680844E060656995F82301002808BFA4 +:10899000BDE8F08795F80C01032818BFBDE8F08703 +:1089A00095F8558024780C2C28BFFFDF774E36F8D9 +:1089B000147095F86C410C2C28BFFFDF36F81400BA +:1089C000384495F86C7184B20C2F28BFFFDF36F85D +:1089D000170000F5C86087B24046FEF730FCD5F8B6 +:1089E00064110E1A4046FEF736FC4FF47A7900F215 +:1089F000E730B0FBF9F0361A4046FEF720FCD5F818 +:108A0000E010A1EB000A4046FEF725FC4AF2B12136 +:108A10000844B0FBF9F0AAEB0000A0F1600161434B +:108A2000B1FBF7F1292202EB50006031A0EB5102BB +:108A300000EB5100B24201D8B04201D8F3F7B1F9CE +:108A4000688840F2E241414300202CB104FB01F070 +:108A50004F49B0FBF1F0401CC5F81401002085F827 +:108A60002301BDE8F08770B50546474890F802C07D +:108A7000BCF1020F07BF406900F5B074454800F132 +:108A80002404002904BF256070BD4FF47A760129C3 +:108A90000DD002291CBFFFDF70BD1046FEF7EAFBB8 +:108AA00000F2E140B0FBF6F0281A206070BD1846D5 +:108AB000FEF7FBFB00F2E140B0FBF6F0281A206065 +:108AC00070BD3448007800281CBF0020704710B5E6 +:108AD0000720F9F785FD80F0010010BD2D480078D2 +:108AE000002818BF012070472DE9F843294C0025C4 +:108AF000814684F83450D4F8188084F83010E57238 +:108B00002570012727722946606803F08DFA616895 +:108B1000C1F85081267B81F85C61C1F86091C1F891 +:108B20005481B1F80080202E28BFFFDF1A4820F8BA +:108B30001680646884F80C510023A4F858511A4632 +:108B4000194620460095FEF7D8FD002818BFFFDF24 +:108B5000C4F80851C4F8005184F80C71A4F81E51EF +:108B6000A4F81C5184F82251B4F85800401EA4F80F +:108B70005800A4F85A51FBF7E5FD03484079BDE8D9 +:108B8000F843EAF7C9B90000DC000020DC5102001C +:108B900040420F005C0C0020980C00202DE9F041B1 +:108BA0000E46044604F00FFC0546204604F00FFC78 +:108BB000044603F082FFF94F010015D0386990F8A0 +:108BC00054208A4210D090F8A4311BB190F8A631FD +:108BD00023421FD02EB990F85130234201D18A424E +:108BE00018D890F8A401A8B1284603F066FF70B128 +:108BF000396991F85520824209D091F8A40118B141 +:108C000091F8A701284205D091F8A40110B10120E4 +:108C1000BDE8F0810020FBE730B5E04C85B0E069AD +:108C200000285ED0142168460CF00DF8206990F8F9 +:108C30005500FEF710FB4FF47A7100F5FA70B0FBA7 +:108C4000F1F5206990F85500FEF7F9FA2844ADF8DF +:108C5000060020690188ADF80010B0F85810ADF892 +:108C600004104188ADF8021090F8860130B1A06977 +:108C7000C11C039104F088FA8DF81000206990F867 +:108C800085018DF80800E169684688472069002160 +:108C900080F8861180F885110399002921D090F879 +:108CA000841100291DD190F86410272919D09DF84E +:108CB0001010039A002914D013780124FF2B12D02E +:108CC000072B0ED102290CD15178FF2909D100BF01 +:108CD00080F884410399C0F888119DF8101080F83D +:108CE000871105B030BD1B29F2D9FAE770B5AB4C3E +:108CF000206990F865001B2800D0FFDF206900255F +:108D000080F88D5090F8B80100B1FFDF206990F82D +:108D10008E1041B180F88E500188A0F8BC1180F807 +:108D2000BA510E2108E00188A0F8BC1180F8BA51B0 +:108D3000012180F8BE110D2180F8B8110088F9F7E3 +:108D4000E7FDF9F77FFA2079EAF7E6F8206980F87D +:108D5000655070BD70B5914CA07980072CD5A07876 +:108D6000002829D162692046D37801690D2B01F1D1 +:108D700058005FD00DDCA3F102034FF001050B2B6F +:108D800019D2DFE803F01A1844506127182C183A5A +:108D90006400152B6FD008DC112B4BD0122B5AD04E +:108DA000132B62D0142B06D166E0162B71D0172B33 +:108DB00070D0FF2B6FD0FFDF70BD91F867200123CB +:108DC000194603F05DFD0028F6D12169082081F8DD +:108DD000670070BD1079BDE8704001F0AEBC91F83D +:108DE0006600C00700D1FFDF01F066FC206910F8C3 +:108DF000661F21F00101017070BD91F86500102817 +:108E000000D0FFDF2069112180F88D5008E091F833 +:108E10006500142800D0FFDF2069152180F88D50EF +:108E200080F8651070BD91F86500152800D0FFDF4F +:108E3000172005E091F86500152800D0FFDF192004 +:108E4000216981F8650070BDBDE870404EE7BDE85E +:108E5000704001F046BC91F864200123002103F02A +:108E60000FFD00B9FFDF0E200FE011F8660F20F0B4 +:108E7000040008701DE00FE091F864200123002138 +:108E800003F0FEFC00B9FFDF1C20216981F86400BB +:108E900070BD12E01BE022E091F86600C0F3011003 +:108EA000012800D0FFDF206910F8661F21F01001B3 +:108EB0000170BDE8704001F0FFBB91F86420012310 +:108EC000002103F0DDFC00B9FFDF1F20DDE791F892 +:108ED0006500212801D000B1FFDF2220B0E7BDE806 +:108EE000704001F0F5BB2D48016991F86620130729 +:108EF00002D501218170704742F0080281F8662096 +:108F00008069C07881F8C90001F0CDBB10B5234C51 +:108F100021690A88A1F8FC2181F8FA0191F854002E +:108F200001F0B5FB216981F8FE0191F8550001F0CF +:108F3000AEFB216981F8FF01012081F8F8010020D2 +:108F400081F8A4012079BDE81040E9F7E5BF10B52C +:108F5000124C01230921206990F86420583003F055 +:108F60008FFC38B12169002001F87C0F087301F8EB +:108F7000180C10BD0120A07010BD70B5074D012365 +:108F800029462869896990F8642009790E2A01D157 +:108F9000122905D000241C2A05D006E0FC00002080 +:108FA000BDE87040D3E7142902D0202A08D009E098 +:108FB00080F8644080F88840BDE8704001F0E0BB74 +:108FC000162906D0262A01D1162902D0172909D040 +:108FD0000CE000F8644F80F82440407821280CD041 +:108FE0001A2017E090F86520222A07D0EA69002AA3 +:108FF00003D0FF2901D180F8863149E780F8654028 +:1090000001F05AFB286980F87D4090F8A4010028FF +:10901000F3D00020BDE8704078E72DE9F843FD4C1F +:10902000206990F86410202908D0002790F8651076 +:10903000222905D07FB300F1640503E00127F5E79D +:1090400000F1650510F8961F41F004010170A06958 +:1090500004F0C5F94FF00108002608B33946A069AD +:10906000FFF79CFDE0B16A46A169206903F034FD79 +:1090700090B3A06904F0B1F92169A1F88E01B1F8AB +:10908000581001F0EAFA40B32069282180F87410E2 +:1090900080F8738048E0FFE70220A070BDE8F88305 +:1090A000206990F8A40110B11E20FFF72FFFAFB187 +:1090B000A0692169C07881F8CA0008FA00F1C1F3FB +:1090C000006000B9FFDF20690A2180F8641090F881 +:1090D000880040B9FFDF06E009E01AE02E7001F0D9 +:1090E000EBFAFFF700FF206980F87D60D6E7206982 +:1090F00090F8A40118B10020FFF708FF2E70206936 +:1091000000F1650180F87D608D420DD180F86560C9 +:109110000AE020699DF8001080F890119DF8011078 +:1091200080F8911124202870206900F165018D429A +:1091300003D1BDE8F84301F0BFBA80F88860ADE71D +:1091400070B5B44C01230B21206990F8652058308C +:1091500003F096FB202650BB20690123002190F8E4 +:109160006520583003F08CFB0125F0B1206990F8A0 +:10917000640024281BD0A06904F00FF9C8B120694D +:1091800090F8961041F0040180F89610A1694A7990 +:1091900002F0070280F85120097901F0070180F8F8 +:1091A000501090F8A5311BBB06E0A57070E6A670C4 +:1091B0006EE6BDE8704096E690F8A431C3B900F1C0 +:1091C00054035E788E4205D11978914202D180F81D +:1091D0007D500DE000F5F9710D7002884A8090F81D +:1091E00050200A7190F8510048712079E9F794FEF7 +:1091F0002169212081F86500BDE8704001F053BA73 +:1092000070B58448006990F84E20448EC38E418F1B +:10921000B0F84050022A23D0A94200D32946018643 +:10922000C18FB0F84220914200D311468186018F50 +:10923000B0F84420914200D311464186818FB0F8A6 +:109240004620914200D31146C186418EA14200D9E9 +:109250000C464486C18E994200D90B46C38617E658 +:10926000028E914200D31146C68F828E964200D262 +:109270003246A94200D329460186B0F842108A42FC +:1092800000D30A468286002180F84E10CFE770B5E1 +:10929000604C206990F8660010F0300F04D0A07880 +:1092A00040F00100A070F3E5A06904F05BF848B35A +:1092B0002569A06904F052F828872569A06904F09F +:1092C00049F868872569A06904F04AF8A8872569E4 +:1092D000A06904F041F8E887A0794FF00102800707 +:1092E00003D56069C07814280FD0206990F8641005 +:1092F0001C290AD090F84E1001290DD090F89B112E +:1093000051B906E0BDE87040EDE5206980F84E20D7 +:1093100002E090F89A1131B1206910F8661F41F00F +:109320001001017016E090F8661041F0200180F8FD +:10933000661000F5D67103888B86038FCB86438F2A +:109340000B87838F4B87C08F888781F832202079E5 +:10935000E9F7E2FDBDE8704001F0A5B970B52D4C0C +:10936000206990F86610890707D590F864200123DA +:109370000821583003F084FAE8B1206990F8900091 +:10938000800712D4A06903F0C9FF216981F8910018 +:10939000A06930F8052FA1F892204088A1F8940028 +:1093A00011F8900F40F002000870206990F89010BA +:1093B000C90703D00FE00120A07069E590F86600AE +:1093C000800700D5FFDF206910F8661F41F0020119 +:1093D000017001F068F92069002590F864100629F1 +:1093E00006D180F8645080F888502079E9F794FD20 +:1093F000206990F88C110429DFD180F88C512079F4 +:10940000E9F78AFD206990F864100029D5D180F829 +:1094100088503DE5FC00002070B5FB4C0123002185 +:10942000206990F86520583003F02AFA012578B9B0 +:10943000206990F86520122A0AD0012305215830AE +:1094400003F01EFA10B10820A07021E5A5701FE5F9 +:10945000206990F88E0008B901F025F92169A0690A +:10946000E83103F03CFF2169A069C03103F042FFFD +:10947000206990F8C00100B1FFDF21690888A1F8D8 +:10948000C20101F5E271A06903F017FF2169A0692B +:1094900001F5E67103F019FF206980F8C05114212D +:1094A00080F865102079BDE87040E9F735BD70B5EA +:1094B000D54C01230021206990F86520583003F035 +:1094C000DFF90125A8B1A06903F0C3FE98B1A06936 +:1094D0002169B0F80D00A1F88E01B1F8581001F023 +:1094E000BCF858B12069282180F8741080F87350B6 +:1094F000CEE4A570CCE4BDE87040F4E4A069216935 +:10950000027981F89021B0F80520A1F8922103F0AA +:1095100093FE2169A1F89401A06903F090FE2169EE +:10952000A1F89601A06903F091FE2169A1F89801C4 +:109530000D2081F86500ABE47CB5B34CA079C00781 +:1095400038D0A06901230521C578206990F86520ED +:10955000583003F095F968B1AD1E0A2D06D2DFE848 +:1095600005F009090505090905050909A07840F074 +:109570000800A070A07800281CD1A06903F032FE7A +:1095800000286ED0A0690226C5781DB1012D01D03A +:10959000162D18D1206990F8640003F059F990B1A4 +:1095A000206990F864101F290DD0202903D0162DB2 +:1095B00016D0A6707CBD262180F86410162D02D02E +:1095C0002A20FFF7A3FC0C2D58D00CDC0C2D48D220 +:1095D000DFE805F033301D44A8A8489F57A8363966 +:1095E0002020A0707CBD0120152D6ED008DC112D2F +:1095F0006CD0122D6CD0132D64D0142D31D179E0A4 +:10960000162D7DD0182D7ED0FF2D2AD184E0206923 +:109610000123194690F86720583003F031F9F8B962 +:10962000A06903F043FE216981F87201072081F8E7 +:10963000670079E001F02BF976E0FFF738FF73E07F +:1096400001F005F970E0206990F86510112901D04A +:10965000A67069E0122180F8651065E0FFF7DCFE76 +:1096600062E05FE0206990F865001728F0D101F012 +:1096700023F821691B2081F8650055E0FFF76EFE95 +:1096800052E0206990F86600C00703D0A07840F04F +:10969000010022E06946A06903F047FE9DF8000042 +:1096A00000F02501206900F8961F9DF8011001F0D7 +:1096B0004101417000F0F7FF206910F8661F41F08A +:1096C000010113E0FFF743FC2EE016E01EE0FFE788 +:1096D000216991F86610490701D5A07024E000F0D7 +:1096E000E2FF206910F8661F41F0040101701BE0E1 +:1096F00006E008E0FFF7CBFD16E001F075F813E097 +:10970000FFF71EFD10E0FFF788FC0DE001F04BF8BD +:109710000AE0FFF732FC07E0E16919B1216981F83D +:10972000860101E0FFF7DFFB2069F0E92A12491CFE +:1097300042F10002C0E900127CBD70B5324CA07944 +:1097400000074AD5A078002847D1206990F8CB00BF +:10975000FE2800D1FFDF2069FE21002580F8CB1014 +:1097600090F86510192906D180F88D5000F0A4FFFB +:10977000206980F86550206990F864101F2902D094 +:10978000272921D119E090F8650003F061F878B13C +:1097900020692621012380F8641090F865200B21B0 +:1097A000583003F06DF878B92A20FFF7AFFB0BE0D3 +:1097B0002169202081F8640006E0012180F88511EC +:1097C00080F8645080F88850206990F86710082964 +:1097D00003D10221217080F8CB100EE40A490969F7 +:1097E00091F890210AB991F8542081F8542091F809 +:1097F00091210AB991F8552081F85520002802D00E +:109800000020FFF783BB7047FC00002070B5F84CC8 +:1098100006460D46206990F8CB00FE2800D0FFDFF9 +:109820002269002082F8CB6015B1A2F88A00BDE45D +:1098300022F8840F01201071B8E470B5EC4C0123BC +:109840000021206990F86420583003F019F80028AE +:1098500031D0206990F89A1111B190F89B1139B16B +:1098600090F8A41100295FD090F8A51121B35BE016 +:10987000B0F89C1120F8401FB0F85E114180B0F89C +:1098800060118180B0F86211C180002180F85A1106 +:1098900090F8260080060AD501F05DF8206910F8DE +:1098A000661F21F0200141F01001017002E000214B +:1098B00014203DE0012079E490F8652001230B217C +:1098C000583002F0DDFF78BB206990F8540000F0BA +:1098D000DEFE0546206990F8550000F0D8FE0646E9 +:1098E000206990F8A611284600F0C3FE50B1206907 +:1098F00090F8A711304600F0BCFE18B10020FFF729 +:1099000005FB11E020690123032190F86520583000 +:1099100002F0B6FF40B920690123022190F86520CA +:10992000583002F0ADFF08B100203FE400211620BE +:10993000FFF76CFFBEE710B548BBAD4C206990F84F +:109940006610CA0702D00121092018E08A070AD54B +:1099500001210C20FFF75AFF206910F8901F41F0F9 +:10996000010101702AE04A0702D50121132006E017 +:109970000A0707D510F8C91FC17001210720FFF79A +:1099800045FF1BE0C90602D590F89B1109B10020E4 +:1099900010BD90F89A1179B1B0F89C1120F8401FD1 +:1099A000B0F85E114180B0F860118180B0F86211AA +:1099B000C180002180F85A1100F0CDFF012010BDB8 +:1099C00070B58B4C206990F8CB10FE2978D1A17826 +:1099D000002975D190F8672001231946583002F00C +:1099E0004FFF00286CD1206990F8701149B1002117 +:1099F000A0F8821090F8711180F8CC10002102209C +:109A00005BE090F8652001230421583002F038FF14 +:109A10000546FFF790FF002852D1284600F0A6FF28 +:109A200000284DD120690123002190F8642058308E +:109A300002F026FF78B120690123042190F8652007 +:109A4000583002F01DFF30B9206990F87C0010B149 +:109A50000021122031E0206990F864200A2A0DD0FC +:109A6000002D2DD101230021583002F009FF78B1DB +:109A7000206990F88C1104290AD105E010F8CA1F5A +:109A800081700021072018E090F89000800718D01E +:109A9000FFF7D3FE002813D120690123002190F89D +:109AA0006420583002F0ECFE002809D0206990F8BC +:109AB0008401002804D00021FF20BDE87040A5E605 +:109AC00009E000210C20FFF7A1FE206910F8901F8B +:109AD00041F00101017070E43EB505466846FDF7AE +:109AE000CCFC00B9FFDF222100980BF08AF803219B +:109AF000009803F05FFB0098017821F010010170DD +:109B0000294603F07CFB3A4C0D2D40D00BDCA5F12F +:109B100002050B2D19D2DFE805F01F186019191F77 +:109B2000186D18192400152D78D008DC112D25D0BA +:109B3000122D0BD0132D09D0142D06D12BE0162D8C +:109B400042D0172D68D0FF2D67D0FFDFFDF7A8FCAE +:109B5000002800D1FFDF3EBD2169009891F8CC10AC +:109B600017E0E26800981178017191884171090A43 +:109B700081715188C171090A0172E7E703210098D8 +:109B800003F047FC0621009803F047FCDEE700984D +:109B900006210171DAE72069B0F84410009803F05B +:109BA000C9FB2069B0F84610009803F0C7FB206994 +:109BB000B0F84010009803F0C5FB2069B0F84210DF +:109BC000009803F0C3FBC1E70098216991F8A62132 +:109BD000027191F8A7114171B8E721690098F0313D +:109BE00003F08CFB21690098C43103F091FBADE7D1 +:109BF000FC000020F949D1E90001CDE9010120690B +:109C000001A990F8960000F025008DF80400009856 +:109C100003F0B9FB9AE701E019E023E02069B0F80E +:109C20004010009803F08EFB2069B0F842100098B5 +:109C300003F08CFB2069B0F84410009803F07AFB25 +:109C40002069B0F84610009803F078FB7EE72169A0 +:109C500091F8A40100280098B8D111F8542F02718E +:109C60004978B8E7206990F88721D0F888110098E2 +:109C700003F0D3FA6AE7DA4810B5006990F86A1081 +:109C800041B990F8652001230621583002F0F8FD13 +:109C9000002800D0012010BD70B5D14D286990F882 +:109CA000681039B1012905D0022906D0032904D052 +:109CB000FFDF1DE4B0F8D41037E090F867100829F2 +:109CC00036D0B0F87E10B0F8802000248B1C9A4269 +:109CD00006D3511A891E0C04240C01D0641EA4B2B0 +:109CE00090F87C1039B190F8642001230921583094 +:109CF00002F0C6FD40B3FFF7BEFF78B1296900202E +:109D0000B1F87820B1F876108B1C9A4203D3501A20 +:109D1000801E00D0401EA04200D284B20CB1641E4E +:109D2000A4B22869B0F8D4102144A0F8D01054E5AA +:109D3000B0F87E100329BDD330F8581F028D1144AE +:109D4000491CA0F8781048E50024EAE770B50C46F5 +:109D500005464FF4007120460AF075FF25803CE56A +:109D6000F8F7ADBD2DE9F0410D4607460721F8F79C +:109D70009DFC041E3CD094F8AC010026A8B16E7086 +:109D8000092028700BE0268484F8AC61D4F8AE0179 +:109D90006860D4F8B201A860B4F8B601A88194F85C +:109DA000AC010028EFD12E71BAE094F8B80190B35D +:109DB00094F8B8010D2813D00E2801D0FFDFAFE0D2 +:109DC0002088F8F7A5FD0746F8F751FA78B96E70C4 +:109DD0000E20287094F8BA0128712088E88014E0D9 +:109DE0002088F8F795FD0746F8F741FA10B10020F2 +:109DF000BDE8F0816E700D20287094F8BA012871CA +:109E00002088E88094F8BE01287284F8B86138464A +:109E1000F8F727FA84E0FFE794F8F00130B16E70AC +:109E20001020287084F8F061AF8079E094F8C001C8 +:109E300090B16E700A2028702088A880D4F8C411D0 +:109E4000C5F80610D4F8C811C5F80A10B4F8CC014A +:109E5000E88184F8C06163E094F8CE0140B16E708F +:109E60001A202870B4F8D001A88084F8CE6157E099 +:109E700094F8EA0170B16E701B20287005E000BFF5 +:109E800084F8EA61D4F8EC01686094F8EA010028EB +:109E9000F6D145E094F8D20190B16E70152028708B +:109EA00004F5EA7707E000BF84F8D2610A22394658 +:109EB000281D0AF06CFE94F8D2010028F4D12FE09E +:109EC00094F8DE0158B16E701D20287084F8DE61B0 +:109ED0000A2204F5F071281D0AF059FE20E094F8DA +:109EE000F20138B11E20287084F8F261D4F8F40130 +:109EF000686015E094F8F80100283FF479AF6E70BF +:109F00001620287008E000BF84F8F861D4F8FA0140 +:109F10006860B4F8FE01288194F8F8010028F3D1B4 +:109F2000012065E72E480021C161016208466AE40C +:109F300030B52B4D0C46E860FFF7F4FF00B1FFDFB2 +:109F40002C7130BD002180F8641080F8651080F815 +:109F5000681090F8DE1009B1022100E00321FEF73D +:109F600095BC2DE9F0411E4C0546206909B1002140 +:109F700004E0B0F8E610B0F8D6201144A0F8E610DE +:109F800090F8701139B990F86720012319465830BC +:109F900002F076FC30B1206930F8821FB0F854200E +:109FA00011440180206990F8883033B1B0F88410F2 +:109FB000B0F8D6201144A0F8841090F98C70002FCE +:109FC00006DDB0F88A10B0F8D6201144A0F88A1047 +:109FD00001213D2635B180F8746017E0F45102008C +:109FE000FC0000202278022A0AD0012A11D0A2788F +:109FF0002AB380F8731012F0140F0DD01E2113E055 +:10A0000090F8CC20062A3CD016223AE080F8731053 +:10A0100044E090F8722134E0110702D580F87460B2 +:10A020003CE0910603D5232180F8741036E09007B8 +:10A0300000D1FFDF21692A2081F874002AE02BB1CA +:10A04000B0F88420B0F886309A4210D2002F05DD97 +:10A05000B0F88A20B0F886309A4208D2B0F8823040 +:10A06000B0F88020934204D390F870310BB12222D3 +:10A0700007E090F868303BB1B0F87E30934209D3E6 +:10A08000082280F87420C1E7B0F87E20062A01D3A8 +:10A090003E22F6E7206990F8731019B12069BDE8F7 +:10A0A000F0414FE7BDE8F0410021FEF7EFBB2DE99D +:10A0B000F047F94C81460D4620690088F8F73AFCD4 +:10A0C000060000D1FFDFA0782843A070A0794FF0F0 +:10A0D00000058006206904D5A0F87E5080F8E45081 +:10A0E00003E030F87E1F491C0180FFF7C4FD012703 +:10A0F00040B3E088000506D5206990F86A1011B1D8 +:10A10000A0F876501EE02069B0F87610491C89B29C +:10A11000A0F87610B0F878208A4201D3531A00E0F4 +:10A120000023B4F808C00CF1050C634501D880F891 +:10A130007C70914206D3A0F8765080F8F0712079B7 +:10A14000E8F7EAFEA0794FF0020810F0600F0ED099 +:10A15000206990F8681011B1032908D102E080F855 +:10A16000687001E080F868800121FEF78FFB2069AC +:10A1700090F86810012904D1E188C90501D580F85B +:10A180006880B9F1000F70D1E188890502D5A0F887 +:10A19000F85003E030F8F81F491C018000F0A2FBE2 +:10A1A000FEF73AFDFFF70CFC00F054FF0028206991 +:10A1B00002D0A0F8D85003E030F8D81F491C018025 +:10A1C00000F04BFF38B1216991F8E400022807D86C +:10A1D000401C81F8E400206990F8E400022804D9CA +:10A1E000206920F8D85F458005732069012300218C +:10A1F00090F86520583002F043FB20B9206990F8B0 +:10A2000065000C2859D120690123002190F86420B1 +:10A21000583002F035FB48B320690123002190F843 +:10A220006720583002F02CFB00B3206990F86810CA +:10A23000022942D190F8E400C0B93046F7F7E7FDB3 +:10A24000A0B1216991F8CB00FE2836D1B1F8D20037 +:10A25000012832D981F8DD70B1F88000B1F87E2094 +:10A26000831E9A4203DB012004E032E025E0801ADD +:10A27000401E80B2B1F8D82023899A4201D301222E +:10A2800002E09A1A521C92B2904200D9104601285C +:10A2900001D181F8DD5091F8692192B1B1F8DA204D +:10A2A000B1F86A118A4201D3012102E0891A491CDE +:10A2B00089B2884205D9084603E02169012081F866 +:10A2C000DD502169B1F858201044A1F8D400FFF7FF +:10A2D000E3FCE088C0F340214846FFF742FE2069D6 +:10A2E00080F8DE50BDE8F047FDF7FCB86A49024649 +:10A2F0008878CB78184312D10846006942B1897931 +:10A30000090703D590F86700082808D001200EE659 +:10A31000B0F84810028E914201D8FEF701BA002031 +:10A3200005E670B55C4C05460E46E0882843E080A3 +:10A33000A80703D5E80700D0FFDF6661EA074FF002 +:10A3400000014FF001001AD0A661F278062A02D06F +:10A350000B2A14D10AE0226992F86530172B0ED12E +:10A360000023E2E9283302F8370C08E0226992F86A +:10A370006530112B03D182F8691082F88E00AA078C +:10A3800018D56269D278052A02D00B2A12D10AE0C8 +:10A39000216991F86520152A0CD10022E1E92A22D1 +:10A3A00001F83E0C06E0206990F86520102A01D1E2 +:10A3B00080F86A10280601D50820E07079E42DE9BC +:10A3C000F84F354C00254FF00108E580A570E57089 +:10A3D0004146257061F3070220619246814680F86C +:10A3E000DE800088F8F7A6FA070000D1FFDF2069B9 +:10A3F0000088FDF73FF820690088FDF761F82069C3 +:10A40000B0F8D21071B190F8CB10FE290FD190F8AE +:10A41000701189B190F8672001231946583002F075 +:10A420002FFA78B1206990F8CB00FE2804D020697B +:10A4300090F8CB00FFF750FB206990F8DF1089B14E +:10A44000258118E02069A0F8825090F8711180F8F9 +:10A45000CC1000210220FFF7D9F9206980F8DD50E7 +:10A460000220E7E790F8AC1119B9018C828891427B +:10A4700000D881882181B0F8D610491E8EB2B0F87C +:10A48000D8103144A0F8D81090F8DC1031B1A0F801 +:10A49000DA5080F8DC5006E0FC000020B0F8DA105A +:10A4A0003144A0F8DA1030F87E1F31440180FFF704 +:10A4B000E2FB20B1206930F8761F31440180206929 +:10A4C000B0F8D210012902D8491CA0F8D2100EB160 +:10A4D00080F8E45090F8DD10A1B1B0F8D8002189DF +:10A4E00088420FD23846F7F792FC58B1206990F8AD +:10A4F000691139B1B0F8DA10B0F86A01814201D3BC +:10A5000000F0AEFD206980F8DD5090F865100B2951 +:10A5100001D00C2916D1B0F85820B0F88E31D21ADB +:10A5200012B2002A0EDBD0F89011816090F89411DD +:10A530000173022101F078FD206980F8655080F8F0 +:10A54000988026E0242910D1B0F85810B0F88E2158 +:10A55000891A09B2002908DB90F8A401FFF73EF937 +:10A56000206900F8655F057613E090F864102429EF +:10A5700001D025290DD1B0F85810B0F88E01081A75 +:10A5800000B2002805DB0120FFF728F9206980F8D8 +:10A59000645020690146B0F8D620583001F066FFBB +:10A5A000206990F8691109B1A0F8DA50F7480090D5 +:10A5B000F74BF84A4946504600F0A4FC216A11B115 +:10A5C0006078FCF76DFB20690123052190F8652078 +:10A5D000583002F055F9002803D0BDE8F84F00F0DC +:10A5E0006ABABDE8F88F00F01BBDEB49C8619EE474 +:10A5F000E948C069002800D0012098E4E64A50707C +:10A60000116294E410B50446B0F894214388B0F880 +:10A610009611B0F898019A4205D1A388994202D1C7 +:10A62000E38898420FD02388A4F8B031A4F8B2216F +:10A63000A4F8B411A4F8B601012084F8AC01D648FE +:10A640000079E8F769FC0121204601F0EDFC0020CB +:10A6500004F8650F0320E07010BD401A00B247F601 +:10A66000FE71884201DC002801DC01205FE400204B +:10A670005DE4012802D0022805D102E0012904D0BE +:10A6800001E0022901D0002051E401204FE410B57F +:10A69000012804D0022804D0FFDF204610BD012489 +:10A6A000FBE70224F9E7BC480021006920F88A1F73 +:10A6B0008178491C81703AE4B74800B5016911F806 +:10A6C0008C0F401E40B20870002800DAFFDF00BD8A +:10A6D000B1482721006980F86410002180F88411B6 +:10A6E00025E410B5AC4C206990F88C11042916D1E2 +:10A6F00090F8642001230021583002F0C1F800B91D +:10A70000FFDF206990F89010890703D4062180F8B4 +:10A71000641004E0002180F8881080F88C11206912 +:10A7200090F86600800707D5FFF7C6FF206910F88C +:10A73000661F21F00201017010BD974910B509692B +:10A7400091F864200A2A09D191F8CA20824205D1E1 +:10A75000002081F8640081F8880010BD91F866201F +:10A76000130706D522F0080081F86600BDE8104006 +:10A77000A2E7FF2801D0FFDF10BDBDE81040A7E72A +:10A7800010B5854C05212069FEF780F8206990F806 +:10A790004E10012903D0BDE8104000F030B902216D +:10A7A00080F84E1010BD10B57B4C206910F8961F34 +:10A7B00041F004010170A06902F02DFE162806D1B7 +:10A7C000206990F86400202802D0262805D010BD0A +:10A7D000A06902F024FEFEF799FB2169002081F8B0 +:10A7E000640081F8880010BD70B56B4C01230A210C +:10A7F000206990F86420583002F042F810B3A06944 +:10A8000002F0B0FDA8B12569A06902F0A7FD288774 +:10A810002569A06902F09EFD68872569A06902F09C +:10A820009FFDA8872569A06902F096FDE887FEF7DD +:10A83000E7FC2169002081F8880081F86400BDE808 +:10A8400070409DE7A07840F00100A070B6E510B51B +:10A85000514C01230021206990F86520583002F006 +:10A860000FF830B1FFF71FFF2169102081F8650054 +:10A8700010BD20690123052190F86520583001F0B2 +:10A88000FFFF08B1082000E00120A07010BD70B5E6 +:10A89000414C01230021206990F86520583001F0D7 +:10A8A000EFFF012588B1A06902F0FDFC2169A1F844 +:10A8B0008E01B1F85810FFF7D0FE40B12069282171 +:10A8C00080F8741080F8735078E5A57076E52169FA +:10A8D000A06901F5C87102F0E1FC21690B2081F843 +:10A8E00065006BE510B5FEF728FFFEF725FE2A4C44 +:10A8F000A079400708D5A07830B9206990F86700A2 +:10A90000072801D101202070FEF724FAA079C006A3 +:10A9100009D5A07838B9206990F865100B2902D1C3 +:10A920000C2180F86510E07800070ED5206901231E +:10A93000052190F86520583001F0A2FF30B10820C1 +:10A94000A0702169002081F8B80110BDBDE8104059 +:10A95000002000F089BB10B5FEF752FCFFF710FF96 +:10A960000121BDE810401520FEF750BF10B50A4C7C +:10A97000216991F8652088B3102A0FD0142A10D0CD +:10A98000152A22D01B2A35D122E00000AFA00100F9 +:10A99000EDA2010023A30100FC00002001210B20F7 +:10A9A00018E0FBF79BF80C2816D320690821F0303B +:10A9B000FBF798F828B120690421C430FBF792F81E +:10A9C00000B9FFDF0121042004E000F038F803E0C3 +:10A9D00001210620FEF71AFF012010BDFFE7212A02 +:10A9E00008D191F87D0038B991F8A40110B191F81F +:10A9F000A50108B10020F0E701211720EAE7284B64 +:10AA000030B4186900F5D67201881185018E518520 +:10AA1000818E9185018FB0F84440A14200D3214638 +:10AA2000D185818FB0F84600814200D20846108659 +:10AA3000012082F82600187930BCE8F76DBA70B5AD +:10AA4000174C0025206990F8731101290AD00229BA +:10AA500025D190F88E10A9B1062180F8CC100121E3 +:10AA6000022017E090F8B811002918D100F1B003C6 +:10AA700000F1E801002200F5BA7001F07BFE01212F +:10AA8000052007E090F89600400701D5112000E06E +:10AA90000D200121FEF7BAFE206980F873518DE484 +:10AAA000FC00002030B5FF4C05462078002818BF78 +:10AAB000FFDF257230BDFB490120C87170472DE9C9 +:10AAC000F14FF94D2846297840680029044600F1E5 +:10AAD000580890F8551001F0AAFF94F85510668EAA +:10AAE00080B2082968D001F07EFF864238BF304628 +:10AAF000C7B2DFF8B093ED48C9F824006E68287833 +:10AB0000002896F86AA0B6F832B096F8551030468C +:10AB100001F08DFF96F8551080B2082950D001F051 +:10AB200062FF014658468B4528BF0846BAF1000F20 +:10AB30001CBF001D80B2C0B296F85510FBF70FFD88 +:10AB400098F81200002840D008F15801D74891E841 +:10AB50000E1000F5027686E80E10D8F86810C0F8DE +:10AB60002112D8F86C10C0F8251200F58170FCF79E +:10AB700020F8287800280CBF0120002080F0010177 +:10AB8000CB480176D8E91412C0E90412A0F583720B +:10AB9000D9F82410FBF7C1FB94F85500012808BF31 +:10ABA000002204D002281ABFFFDF0022012239460A +:10ABB0000120FBF7C0FB0EE0042101F014FF94E735 +:10ABC000042101F010FF0146ACE7D9F82400FBF79F +:10ABD000F0FFFBF7D3FB009818B900219620FCF793 +:10ABE00017F894F8542001210020FCF7F1F894F8AC +:10ABF0002C00012808BFFCF7C8F8022089F80000E3 +:10AC0000FCF77BFB002818BFFFDFBDE8F88F2DE9BC +:10AC1000F04FDFF894A283B050469AF800204068C5 +:10AC2000AAF11401009190F85D1000F15806044655 +:10AC30004FF00108AAF13407A9B3012900F0DB8025 +:10AC4000022900F0DD80032918BFFFDF00F0E68055 +:10AC5000386A0823017821F008010170B27903EA0B +:10AC6000C202114321F004010170F279042303EAC6 +:10AC70008202114321F01001017096F80590F86AE4 +:10AC8000F7F7D5F80546FCF73FFCB9F1020F00F0E5 +:10AC9000CC80B9F1010F00F0CB80B9F1030F00F0C7 +:10ACA000CA8000F0CBB8FFE7337B21464FF00209A2 +:10ACB0004FF0000B242B1CBF96F80DC0BCF1240FE5 +:10ACC00007D01F2B18BF202B19D0BCF1220F2ED07C +:10ACD00048E094F8545052B191F89001002846D0C1 +:10ACE000012D18BF012834D04FF002053FE091F844 +:10ACF000F20080B3012D18BF01282AD0F4E7BCF17F +:10AD0000220F14D072B391F8A60194F8545010F0A9 +:10AD1000010F18BF404604D0012D18BF012818D0DC +:10AD2000E2E710F0020F18BF4846F5D11FE0CAB1A4 +:10AD300090F8A61190F8510094F8545001EA0000E0 +:10AD400010F0010F18BF404606D0012D18BF012892 +:10AD5000CAD14FF001050AE010F0020F18BF4846B3 +:10AD6000F3D104E094F85450042D08BF0825294677 +:10AD7000204601F05AFE80B2294601F034FE218EB1 +:10AD8000814238BF0846ADF80800A4F84800009892 +:10AD9000FCF799FB68B1BA89396A42F48062BA81DA +:10ADA0007A694FF4806090470320707186F80380C1 +:10ADB0004EE701AA02A9F86AF6F774FF386210B1EB +:10ADC00096F8351029B10098FCF751FB86F80580FC +:10ADD0003EE79DF8041031B9A0F800B080F802B049 +:10ADE000012102F0E7F9BDF80810386A02F019FBFA +:10ADF00086F805902CE70098FCF739FB28E700BFA0 +:10AE0000B4F84800ADF8000001AA6946F86AF6F700 +:10AE100049FF3862002808BFFFDF19E70098FCF7F8 +:10AE200052FB002808BFFFDF12E7A84306D103E06A +:10AE3000A84303D100E00DB1012100E00021386AF0 +:10AE4000027842EA01110170717C00291CBF7179FE +:10AE500001293CD006F15801144891E80E1000F584 +:10AE6000027585E80E10B16EC0F82112F16EC0F8BF +:10AE7000251200F58170FBF79CFE9AF8000000286F +:10AE80000CBF012100210A480176D6E91212C0E95F +:10AE90000412A0F583713A6AFBF73FFA94F8540064 +:10AEA000012807E02001002054010020D80C0020D8 +:10AEB000E00E002008BF002204D002281ABFFFDFE6 +:10AEC00000220122FB210020FBF735FA03E0FBF70B +:10AED00070FEFBF753FA012194F855200846FBF762 +:10AEE00077FF87F80480386A018839828078B874DF +:10AEF00087F80080FCF70AFA002818BFFFDF03B0CC +:10AF0000BDE8F08F2DE9F0471D46174681460C46F7 +:10AF1000FE4EDDF82080307828B9002F1CBF002DB0 +:10AF2000B8F1000F00D1FFDFC6F81C80C6E90D9410 +:10AF3000C6E905754FF00000F071B071F070B070A7 +:10AF400030717071F24DB081F081287804F15807AA +:10AF50002088F7F7EFFCF0622088F7F7D9FC306320 +:10AF6000FBF71AFB94F95700FBF7D7FB04F112002B +:10AF7000FBF702FE04F10E00FBF7D5FB2878002852 +:10AF80000CBF03200120FBF711FEB87EFBF7D3FBBB +:10AF9000FBF706FE2878002804BFFF2094F85440F1 +:10AFA00019D0BF7C668E94F85510204601F03FFD05 +:10AFB00094F8551080B2082926D001F014FD0146FE +:10AFC00030468E4228BF0846002F1CBF001D80B2AD +:10AFD000C0B294F855402146FBF7C1FA2878C0B1B9 +:10AFE000686890F86801002818BFFBF746FB214607 +:10AFF0000120FBF7F7FB6868D0F8E000FBF7DCFD09 +:10B00000BDE8F04701205AE5042101F0ECFC0146BF +:10B01000D6E721460020FBF7E5FBBDE8F047F6E563 +:10B02000BB4800B501783438007819B1022818BF40 +:10B03000FFDF00BD012818BFFFDF00BDB34810B51A +:10B040000078022818BFFFDFBDE8104000F02FBADB +:10B0500000F02DBAAD4800797047AC48C078704711 +:10B06000AA490120487170472DE9F0470600A84819 +:10B07000A64D406800F15804686A90F8019018BF26 +:10B08000012E03D1296B09F0EDF96870687800276B +:10B090004FF00108A0B101283CD0022860D003285D +:10B0A0001CBFFFDFBDE8F087012E08BFBDE8F087B9 +:10B0B000286BF7F7B1F8287ABDE8F047E7F72CBF1F +:10B0C000012E14D0A86A002808BFFFDF6889C21CBF +:10B0D000D5E9091009F016FDA86A686201224946FF +:10B0E000286BF6F715FF022E08BFBDE8F087D4E9FC +:10B0F0001401401C41F10001C4E91401E079012868 +:10B1000001D1E77101E084F80780287ABDE8F047B3 +:10B11000E7F702BF012E14D0A86A002808BFFFDF9E +:10B120006889C21CD5E9091009F0ECFCA86A6862BC +:10B1300000224946286BF6F7EBFE022E08BFBDE859 +:10B14000F087D4E91410491C40F10000C4E9141040 +:10B15000E07901280CBFE77184F80780BDE8F0872B +:10B16000012E06D0286BF7F757F8022E08BFBDE86E +:10B17000F087D4E91410491C40F10000C4E9141010 +:10B18000E0790128BFD1BCE770B5614E3046A6F129 +:10B190003404406800F158052078012818BFFFDF0B +:10B1A000A87868B10021A970A289042042F00402A5 +:10B1B000A28162699047307800281CBF0120287165 +:10B1C000216A0322087832EA000009D1A28912F428 +:10B1D000806F05D042F00202A2816269022090478E +:10B1E0000121002000F082F918B1BDE8704000F0A4 +:10B1F0005EB9BDE87040002061E42DE9F14F444E96 +:10B2000000273046A6F134054068317800F1580A2D +:10B210002878B846022818BFFFDFE88940F400709C +:10B22000E88171683078FF2091F85410FBF797F9A6 +:10B23000009800289AF8120000F00181FBF7C4F88A +:10B24000FBF7B2F84FF0010990B99AF8120078B103 +:10B25000686A417861B100789AF80710C0F3C000BD +:10B26000884205D185F80290BDE8F84F00F01FB97B +:10B27000686A41786981002908BFAF6203D0286BF2 +:10B28000F6F700FEA862E88940F02000E881EF7040 +:10B290003078706800F15804834690F82C0001283B +:10B2A0001AD1FBF768FD2146584601F0A4FA98B17F +:10B2B0003078002870680CBF00F58A7000F5F570D2 +:10B2C000BBF800104180217A0171617A417180F8E8 +:10B2D0000090287AE7F720FE686A9AF8061000784E +:10B2E000C0F38000884240D03078706800F1580484 +:10B2F00090F85D00002834D0022850D06771307873 +:10B3000000281CBF207900280ED003E02001002077 +:10B31000540100202771AA89394642F01002AA81FF +:10B320006A694FF010009047E078A0B1E770FCF731 +:10B33000D9F8002808BFFFDF0820AA89002142F0C1 +:10B340000802AA816A699047D4E91202411C42F1BD +:10B350000000C4E91210A07901280CBFA77184F87D +:10B360000690E88940F48070E881696A9AF80730AD +:10B370000878C0F3C0029A424ED13278726800F069 +:10B38000030002F15804012818BF02282DD0032819 +:10B390001CBFA87940F0040012D0A8713CE0E86A14 +:10B3A000F6F7ACFC002808BFFFDFD4E91202411C0D +:10B3B00042F10000C4E91210287AE7F7ADFD9DE7DD +:10B3C00084F80290EA89484642F40062EA81AA8938 +:10B3D00042F00102AA816A699047E079012801D10F +:10B3E000E77119E084F8079016E0487818B3E98906 +:10B3F00041F40061E981A96A71B1FB2884BFA87991 +:10B4000040F01000C9D8E879002808BFC84603D02A +:10B4100080206A69002190470120009900F066F8B9 +:10B42000B0B1B8F1000F1CBF0020FFF71DFEBDE852 +:10B43000F84F00F03CB8E0790128D3D1D0E70028DC +:10B4400018BFFAF7FAFFE88940F04000E881E3E727 +:10B45000B8F1000F1CBF0120FFF706FEFFF7D7FB76 +:10B46000B8F1000F08BFBDE8F88F0220BDE8F84F23 +:10B47000FAE570B50D4606463C483C4900784C68F4 +:10B4800050B1FBF71DF8034694F854202946304686 +:10B49000BDE87040FDF7E7BAFBF712F8034694F8F1 +:10B4A000542029463046BDE8704005F074BF2F494E +:10B4B00010B54C68FBF707FCFBF7E6FBFBF7D8FA87 +:10B4C000FBF760FBFAF75AFF94F82C00012808BF3D +:10B4D000FBF751FC264C00216269E0899047E26944 +:10B4E000A179A07890470020207010BD70B5204C45 +:10B4F0000546002908BF012D06D1E07800F10100C2 +:10B50000C0B2E07001282ED8A169284688470028DB +:10B5100029D06179174839B1012D01BF417800293F +:10B52000017811F0100F1ED0A179E1B90F49097807 +:10B53000002908BF012D01D091B18DB90E490978BC +:10B5400011F0100F04BF007810F0100F0BD0A0897D +:10B5500048B9A06A20B9608910B111F0100F02D06B +:10B560004FF0000070BD4FF0010070BD540100208D +:10B5700020010020D80C002030010020FE498A78EC +:10B58000824286BF084490F843010020704710B5FE +:10B5900040F2D311F84809F034FBFF220821F748A4 +:10B5A00009F027FBF6480021417081704FF461716A +:10B5B000818010BD2DE9F0410E46054600F0ADFB3F +:10B5C000ED4C102816D004EBC00191F85A0110F090 +:10B5D000010F1CBF0120BDE8F081607808283CBF46 +:10B5E000012081F85A011CD26078401C6070012053 +:10B5F000BDE8F0816078082813D222780127501C1A +:10B60000207004EBC2083068C8F85401B088A8F86C +:10B610005801102A28BFFFDF88F8535188F85A7163 +:10B62000E2E70020BDE8F081D54988707047D44832 +:10B630008078704770B4D04800250178491E4BB21D +:10B64000002B46DB00EBC30191F85A1111F0010FFA +:10B650003BD04278D9B2521E427000EBC10282F850 +:10B660005A5190F802C00022BCF1000F0BD9841887 +:10B6700094F803618E4202D1102A26D103E0521CB5 +:10B68000D2B29445F3D80278521ED2B202708A42E6 +:10B690001BD000EBC20200EBC10CD2F85341CCF836 +:10B6A0005341D2F85721CCF85721847890F800C044 +:10B6B0000022002C09D9861896F8036166450CD142 +:10B6C000102A1CBF024482F80311591E4BB2002BF2 +:10B6D000B8DAAB48857070BC7047521CD2B2944245 +:10B6E000E9D8F2E7A4498A78824286BF01EB0010CC +:10B6F000C01C002070472DE9F04101261F469046EE +:10B700003446002500F009FB10282AD09A494FF052 +:10B71000000C01EBC00292F85A2102F001058A7870 +:10B72000002A1ED901EB0C0393F8033183421FD189 +:10B73000BCF1100F15D0002F18BF87F800C0887813 +:10B7400060450ED901EB0C1010F1030F09D001EB8D +:10B750000C0090F84B4190F83B0101280CBF0126EA +:10B76000002648EA050046EA04010840BDE8F081E9 +:10B770000CF1010303F0FF0C6245D3D8F1E72DE98A +:10B78000F05F1F4690460E46814600F0C6FA7A4D9D +:10B79000044610283CD00146AB780020002B0ED97F +:10B7A0002A1892F803218A4205D110281CBF1220C2 +:10B7B000BDE8F09F03E0401CC0B28342F0D8082BE4 +:10B7C0003FD2102C27D0AE781022701CA87005EB49 +:10B7D000061909F10300414600F0B2FF09F18300A8 +:10B7E0001022394600F0ACFF1021384600F085FFEA +:10B7F0003544102185F84301404600F07EFF85F86E +:10B800004B0185F80341002085F83B01BDE8F09F1E +:10B81000AB78082B15D22C78CA46601C287005EB33 +:10B82000C4093068C9F85401B0884FF0000BA9F87A +:10B830005801102C28BFFFDF89F853A189F85AB1AD +:10B84000C1E70720BDE8F09F70B44B488178491EDE +:10B850004BB2002BBCBF70BC704700BF817803F0B7 +:10B86000FF0C491ECAB2827050FA83F191F803119D +:10B8700094453ED000EB021500EB0C14D5F80360A4 +:10B88000C4F80360D5F80760C4F80760D5F80B600A +:10B89000C4F80B60D5F80F60C4F80F60D5F883606A +:10B8A000C4F88360D5F88760C4F88760D5F88B60EA +:10B8B000C4F88B60D5F88F50C4F88F50851800EB12 +:10B8C0000C0402EB420295F803610CEB4C0C00EB0C +:10B8D000420284F8036100EB4C0CD2F80B61CCF807 +:10B8E0000B61B2F80F21ACF80F2195F83B2184F8D9 +:10B8F0003B2100EBC10292F85A2112F0010F33D123 +:10B9000090F802C00022BCF1000F0BD9841894F803 +:10B9100003518D4202D1102A26D103E0521CD2B22B +:10B920009445F3D80278521ED2B202708A421BD0DC +:10B9300000EBC20200EBC10CD2F85341CCF85341EA +:10B94000D2F85721CCF85721847890F800C0002213 +:10B95000002C09D9851895F80351654512D1102A94 +:10B960001CBF024482F80311591E4BB2002BBFF6D4 +:10B9700075AF70BC70470000080F00206801002000 +:10B980005C010020521CD2B29442E3D8ECE7FE499D +:10B9900048707047FC484078704738B14AF2B81197 +:10B9A000884203D8F84988800120704700207047FA +:10B9B000F5488088704710B500F0AFF9102814D012 +:10B9C000F24A0146002092F802C0BCF1000F0CD9E7 +:10B9D000131893F803318B4203D1102818BF10BD00 +:10B9E00003E0401CC0B28445F2D8082010BDE749EE +:10B9F0008A78824286BF01EB0010833000207047B6 +:10BA0000E24B93F802C084459CBF00207047184465 +:10BA100090F8030103EBC00090F853310B70D0F89D +:10BA200054111160B0F85801908001207047D74A36 +:10BA3000114491F80321D4490A700268C1F8062024 +:10BA400080884881704770B516460C460546FBF75E +:10BA500082F9FAF7BEFBCC48407868B1CB488178D0 +:10BA600051B12A19002E0CBF8330C01CFAF78BFB92 +:10BA7000FAF7D2FB012070BD002070BD10B5FAF7B7 +:10BA8000F9FB002804BFFF2010BDBDE81040FAF705 +:10BA900017BCFAF7EFBBBD498A7882429CBF0020F1 +:10BAA0007047084490F8030101EBC00090F85A0178 +:10BAB00000F0010070472DE9F047B44E00273D46E5 +:10BAC000307800288CBFDFF8C882BDE8F0870024FA +:10BAD000B078002808D9311991F80321AA4204D07E +:10BAE000611CCCB2A042F6D81024A04286BF06EB5F +:10BAF0000410C01C002006EBC50999F85A1111F07A +:10BB0000010F16D050B1102C04D0311991F83B110F +:10BB1000012903D0102100F0F0FD50B108F80740D2 +:10BB200038467B1C99F8532109F5AA71DFB2FAF760 +:10BB3000CCFD681CC5B23078A842C8D8BDE8F087F3 +:10BB40002DE9F041914C00263546A07800288CBFA5 +:10BB50008F4FBDE8F0816119C0B291F80381A8420E +:10BB600086BF04EB0510C01C002091F83B11012991 +:10BB700003D0102100F0C1FD58B104EBC800BD5541 +:10BB800090F8532100F5AA713046731CDEB2FAF723 +:10BB90009CFD681CC5B2A078A842DCD8BDE8F08145 +:10BBA00001447A4810B500EB02100A4601218330A7 +:10BBB000FAF7E9FABDE81040FAF72EBB0A467249D7 +:10BBC00010B5497841B1714B997829B10244D81C1C +:10BBD000FAF7D9FA012010BD002010BD6B4A01EB25 +:10BBE000410102EB41010268C1F80B218088A1F8F4 +:10BBF0000F0170472DE9F041644D07460024A878F5 +:10BC0000002898BFBDE8F081C0B2A04217D905EB6B +:10BC1000041010F1830612D01021304600F06DFDA3 +:10BC200068B904EB440005EB400808F20B113A46F2 +:10BC30003046FBF7E6FCB8F80F01A8F80F01601CCE +:10BC4000C4B2A878A042DFD8BDE8F0810146102236 +:10BC5000504800F075BD4F4870474C498A78824281 +:10BC600003D90A1892F843210AB10020704700EB6B +:10BC7000400001EB400000F20B10704743498A7806 +:10BC8000824206D9084490F83B01002804BF0120F5 +:10BC90007047002070472DE9F0410E4607461546D3 +:10BCA0000621304600F029FD384C98B1A17871B1D9 +:10BCB00004F59D7011F0010F18BF00F8015FA17825 +:10BCC000490804D0457000F8025F491EFAD10120EE +:10BCD000BDE8F0813846314600F01FF8102819D031 +:10BCE000A3780021002B15D9621892F80321824213 +:10BCF0000BD1102918BF08290CD004EB010080F8E3 +:10BD00003B514FF00100BDE8F08101F10101C9B2E2 +:10BD10008B42E9D80020BDE8F0812DE9F0411B4DB0 +:10BD20000646002428780F46002811D905EBC400E8 +:10BD300090F85311B14206D10622394600F5AA7097 +:10BD400008F0B4FE38B1601CC4B22878A042EDD827 +:10BD50001020BDE8F0812046BDE8F0810B4910B409 +:10BD60004A7801EBC003521E4A70002283F85A2120 +:10BD700091F802C0BCF1000F16D98B1893F803415B +:10BD800084420DD1102A07E05C010020080F00203A +:10BD900068010020DB1000201CBF10BC704703E0CE +:10BDA000521CD2B29445E8D80A78521ED2B20A7018 +:10BDB00082421BD001EBC20201EBC003D2F853C197 +:10BDC000C3F853C1D2F85721C3F857218C7891F8A2 +:10BDD00000C00022002C09D98B1893F80331634569 +:10BDE00006D1102A1CBF114481F8030110BC704712 +:10BDF000521CD2B29442EFD810BC704770B449497B +:10BE00000D188A78521ED3B28B7095F80321984290 +:10BE10003DD001EB001401EB031C00EB4000DCF80B +:10BE20000360C4F80360DCF80760C4F80760DCF85E +:10BE30000B60C4F80B60DCF80F60C4F80F60DCF82E +:10BE40008360C4F88360DCF88760C4F88760DCF83E +:10BE50008B60C4F88B60DCF88FC0C4F88FC001EB36 +:10BE6000030C03EB43039CF8034101EB430385F808 +:10BE7000034101EB4000D3F80B41C0F80B41B3F88C +:10BE80000F31A0F80F319CF83B0185F83B0101EB25 +:10BE9000C20090F85A0110F0010F1CBF70BC70472F +:10BEA00000208C78002C0DD90B1893F803C1944511 +:10BEB00004D110281CBF70BC704703E0401CC0B206 +:10BEC0008442F1D80878401EC0B20870904204BF86 +:10BED00070BC704701EBC20301EBC000D0F853C146 +:10BEE000C3F853C1D0F85701C3F857018C780B78C9 +:10BEF0000020002C9CBF70BC704700BF01EB000C01 +:10BF00009CF803C19C4506D110281CBF084480F84A +:10BF1000032170BC7047401CC0B28442EED870BC94 +:10BF200070470000080F002010B50A7B02F01F02C6 +:10BF30000A73002202768B1893F808C00CF00103F4 +:10BF40004FEA5C0C0CF0010423444FEA5C0C0CF04B +:10BF5000010423444FEA5C0C0CF001041C444FEA3A +:10BF60005C0303F0010CA4445B0803F00104A44447 +:10BF70005B0803F00104A4440CEB530300EB020C38 +:10BF8000521C8CF8133090F818C0D2B26344037678 +:10BF9000052AD0D3D8B2252888BFFFDF10BD0023E3 +:10BFA000C383428401EBC202521EB2FBF1F1018451 +:10BFB000704770B46FF01F02010C02EA90251F2336 +:10BFC000A1F5AA4054381CBFA1F5AA40B0F1550014 +:10BFD00009D0A1F52850AA381EBFA1F52A40B0F11A +:10BFE000AA00012000D100204FF0000C62466446F8 +:10BFF0008CEA0106F6431643B6F1FF3F11D005F077 +:10C0000001064FEA5C0C4CEAC63C03F001065208FC +:10C010006D085B08641C42EAC632162CE8D370BC7B +:10C02000704770BC002070472DE9F04701270025BC +:10C03000044603290FD04FF4FA4300297CD001298C +:10C0400000F00681022918BFBDE8F0870146BDE86F +:10C05000F047583068E704F158067821304608F078 +:10C06000F2FDB571F57135737573F57335747571CE +:10C070007576B576212086F83E00412086F83F008F +:10C08000FE2086F8730084F82C50258484F85470C0 +:10C0900084F85570282084F856001B20208760877C +:10C0A0004FF4A470E087A0871B20208660864FF4A1 +:10C0B000A470E086A0861B20A4F84000A4F84400E9 +:10C0C0004FF4A470A4F84600A4F842001B20A4F882 +:10C0D0004A00A4F84C00A4F8480067734FF4486085 +:10C0E0006080A4F8D050A4F8D250A4F8D450A4F89A +:10C0F000D650A4F8D850A4F8DA5084F8DD5084F86B +:10C10000DF50A4F8E65084F8E450A4F8F850A4F8FE +:10C11000FA5084F89A5184F89B5184F8A45184F819 +:10C12000A55184F8695184F8705184F8735184F8EA +:10C130008C51BDE8F087FFE7A4F8E65084F8DE50A4 +:10C140006088FD490144B1FBF0F1A4F878104BF68A +:10C150008031A4F87A10E288A4F87E50B4F882C046 +:10C16000D2000CFB00FCB2FBF0F29CFBF0FC521C7A +:10C17000A4F882C092B202FB00FC04F15801A4F8BA +:10C180008020BCF5C84FC4BF521E0A85B3FBF0F235 +:10C19000521CCA8500F5802202F5EE32531EB3FB15 +:10C1A000F0F20A84CB8B03FB00F2B2FBF0F0C88301 +:10C1B000214604F15800FFF7B7FE07F088FDE8B309 +:10C1C000D4F80E006FF01F01020C01EA9026A2F5D0 +:10C1D000AA404FF01F0C54381CBFA2F5AA40B0F182 +:10C1E00055000AD0A2F52850AA381EBFA2F52A4051 +:10C1F000B0F1AA004FF0010901D14FF00009002071 +:10C200000146034680EA02086FEA080848EA010886 +:10C21000B8F1FF3F18D006F00108400840EAC830E6 +:10C2200049080CF0010876085B1C41EAC8314FEA66 +:10C230005C0C162BE6D3B9F1000F00E000E003D050 +:10C2400084F86851BDE8F08784F86871BDE8F0872C +:10C25000B4F89411B4F89821B4F802C004F158006D +:10C26000A4F87E50B4F88240D20004FB0CF4B2FB78 +:10C27000F1F294FBF1F4521C448592B202FB01F4FA +:10C280000285B4F5C84FC4BF521E0285B3FBF1F25C +:10C29000521CC285428C01EBC202521EB2FBF1F26B +:10C2A0000284C28B02FB0CF2B2FBF1F1C183BDE848 +:10C2B000F08770B50025044603290DD04FF4FA42EB +:10C2C000002963D001297DD0022918BF70BD014625 +:10C2D000BDE87040583027E604F158067821304612 +:10C2E00008F0B1FCB571F57135737573F57335747C +:10C2F00075717576B576212086F83E00412086F866 +:10C300003F00FE2086F8730084F82C50258401201D +:10C3100084F8540084F85500282184F856101B2115 +:10C32000218761874FF4A471E187A1871B212186B2 +:10C3300061864FF4A471E186A1861B21A4F8401008 +:10C34000A4F844104FF4A471A4F84610A4F84210C5 +:10C350001B21A4F84A10A4F84C10A4F848106073EC +:10C36000A4F8D850202084F8DA0084F8D050C4F81B +:10C37000D45084F8045184F8055184F80E5184F89F +:10C380000F5184F8F45084F8005170BD60886A49F8 +:10C390000144B1FBF0F1A4F878104BF68031A4F819 +:10C3A0007A10E388A4F87E50B4F882C0DB000CFB5E +:10C3B00000FC9CFBF0FCB3FBF0F304F15801A4F883 +:10C3C00082C000E022E05B1C9BB203FB00FCA4F8EF +:10C3D0008030BCF5C84FC4BF5B1E0B85B2FBF0F2CA +:10C3E000521CCA8500F5802202F5EE32531EB3FBC3 +:10C3F000F0F20A84CB8B03FB00F2B2FBF0F0C883AF +:10C40000214604F15800BDE870408DE5D4F8F830BD +:10C41000B4F802C004F158005989DB89A4F87E50B1 +:10C42000B4F88240DB0004FB0CF4B3FBF1F394FBA3 +:10C43000F1F45B1C44859BB203FB01F40385B4F566 +:10C44000C84FC4BF5B1E0385B2FBF1F2521CC2850C +:10C45000428C01EBC202521EB2FBF1F20284C28B8B +:10C4600002FB0CF2B2FBF1F1C18370BD2DE9F003C8 +:10C47000047E0CB1252C03D9BDE8F00312207047CF +:10C48000002A02BF0020BDE8F003704791F80DC0FC +:10C490001F260123294D4FF00008BCF1000F77D073 +:10C4A000BCF1010F1EBF1F20BDE8F0037047B0F8BC +:10C4B00000C00A7C8F7B91F80F907A404F7C87EA0E +:10C4C000090742EA072282EA0C0C00270CF0FF0958 +:10C4D0004FEA1C2C99FAA9F99CFAACFC4FEA1969AD +:10C4E0004FEA1C6C49EA0C2C0CEB0C1C7F1C94448E +:10C4F000FFB21FFA8CFC032FE8D38CEA020C0F4F1B +:10C500000022ECFB057212096FF0240502FB05C244 +:10C51000D2B201EBD207427602F007053F7A03FA66 +:10C5200005F52F4218BF82767ED104FB0CF2120C67 +:10C53000521CD2B2002403E0FFDB050053E4B36ECB +:10C5400000EB040C9CF813C094453CBFA2EB0C021A +:10C55000D2B212D30D194FF0000C2D7A03FA0CF75A +:10C560003D421CBF521ED2B2002A6AD00CF1010C0F +:10C570000CF0FF0CBCF1080FF0D304F1010C0CF02F +:10C58000FF04052CD7D33046BDE8F0037047FFE722 +:10C5900090F819C00C7E474604FB02C2FE4C4FF0D7 +:10C5A000000CE2FB054C4FEA1C1C6FF024040CFB52 +:10C5B0000422D2B201EBD204427602F0070C247AB4 +:10C5C00003FA0CFC14EA0C0F1FBF82764046BDE84C +:10C5D000F003704790F818C0B2FBFCF40CFB142277 +:10C5E000521CD2B25FF0000400EB040C9CF813C0A4 +:10C5F00094453CBFA2EB0C02D2B212D30D194FF0FE +:10C60000000C2D7A03FA0CF815EA080F1CBF521E15 +:10C61000D2B27AB10CF1010C0CF0FF0CBCF1080F96 +:10C62000F0D304F1010C00E00EE00CF0FF04052C47 +:10C63000DAD3A8E70CEBC40181763846BDE8F003F5 +:10C6400070470CEBC40181764046BDE8F0037047AB +:10C65000D24A016812681140D14A12681143016040 +:10C66000704730B4CF49CD4B00244FF0010C0A780D +:10C67000521CD2B20A70202A08BF0C700D781A68BA +:10C680000CFA05F52A42F2D0097802680CFA01F199 +:10C690005140016030BC7047017931F01F0113BF78 +:10C6A000002000221146704710B4435C491C03F07F +:10C6B000010C5B0803F00104A4445B0803F00104CF +:10C6C000A4445B0803F00104A4445B0803F00104E4 +:10C6D000A4445B0803F001045B08A44403F00104D4 +:10C6E000A4440CEB53031A44D2B20529DDDB012A22 +:10C6F0008CBF0120002010BC704730B40022A1F193 +:10C70000010CBCF1000F11DD431E11F0010F08BF39 +:10C7100013F8012F5C785FEA6C0C07D013F8025F06 +:10C7200022435C782A43BCF1010CF7D1491E5CBF5F +:10C73000405C0243002A0CBF0120002030BC70473F +:10C74000002A08BF70471144401E12F0010F03D0A9 +:10C7500011F8013D00F8013F520808BF704700BFC3 +:10C7600011F8013C437011F8023D00F8023F521EDF +:10C77000F6D1704770B58CB000F110041D46164616 +:10C780000DF1FF3C5FF0080014F8012C8CF801203B +:10C7900014F8022D0CF8022F401EF5D101F1100CF7 +:10C7A0006C460DF10F0108201CF8012C4A701CF892 +:10C7B000022D01F8022F401EF6D1204607F0C8F8DE +:10C7C0007EB16A1E04F130005FF0080110F8013CF0 +:10C7D000537010F8023D02F8023F491EF6D10CB02A +:10C7E00070BD08982860099868600A98A8600B983E +:10C7F000E8600CB070BD38B505460C466846FAF7DF +:10C80000CFFA002808BF38BD9DF900202272A07E13 +:10C81000607294F90A100020511A48BF494295F8F5 +:10C820002D308B42C8BF38BDFF2B08BF38BDE17A21 +:10C83000491CC9B2E17295F82E30994203D8A17A09 +:10C840007F2918BF38BDA2720020E072012038BDD8 +:10C850000C2818BF0B2810D00D2818BF1F280CD08B +:10C86000202818BF212808D0222818BF232804D048 +:10C8700024281EBF2628002070474FF00100704773 +:10C880000C2963D2DFE801F006090E13161B323CB7 +:10C89000415C484E002A5BD058E0072A18BF082A9E +:10C8A00056D053E00C2A18BF0B2A51D04EE00D2A67 +:10C8B0004ED04BE0A2F10F000C2849D946E023B13D +:10C8C000A2F110000B2843D940E0122A18BF112A08 +:10C8D0003ED090F8360020B1122A37D31A2A37D921 +:10C8E00034E0162A32D31A2A32D92FE0A2F10F01EE +:10C8F00003292DD990F8360008B31B2A28D925E042 +:10C90000002B08BF042A21D122E013B1062A1FD030 +:10C910001CE0012A1AD11BE01C2A1CBF1D2A1E2A5A +:10C9200016D013E01F2A18BF202A11D0212A18BFC1 +:10C93000222A0DD0232A1CBF242A262A08D005E04B +:10C9400013B10E2A04D001E0052A01D0002070475F +:10C95000012070472DE9F0410D4604468668F8F73E +:10C96000B6F958B9F7F7E4FF40F23471F7F7E1FC94 +:10C97000A0602046F8F7ABF90028F3D0DDB13046CF +:10C98000A168F8F7F1FC002815DD2844401EB0FB33 +:10C99000F5F707FB05F107E053E4B36EFC51020025 +:10C9A00000520200700100203046F7F7C2FCA06080 +:10C9B0003846BDE8F0810020BDE8F08170B504463E +:10C9C000904228BF70BD101B64280AD325188D42E1 +:10C9D00005D8F8F7F0FC00281CBF284670BD20469B +:10C9E00070BD6420F2E711F00C0F13D001F00401C8 +:10C9F00000290DBF4022102296214FF4167101F537 +:10CA0000BC71A0EB010388428CBF93FBF2F00020C5 +:10CA100080B27047022919BF6FF00D0101EBD00001 +:10CA20006FF00E0101EB9000F2E7808E7047C08E30 +:10CA30007047084418449830002A14BF042100218C +:10CA40000844704730B491F854300A8E13F00C0F3C +:10CA50004FF4747C1CBF0CEB821292B21DD08B8EF3 +:10CA6000934238BF1A464B8E91F8554014F00C0F84 +:10CA70001CBF0CEB83139BB217D0C98E994238BFF1 +:10CA80000B4600280CBF01200020D1189831002847 +:10CA900018BF0420084430BC7047022B07BF920027 +:10CAA0003C32D200703292B2D9E7022C07BF9B0011 +:10CAB0003C33DB0070339BB2DFE710F0010F1CBF8B +:10CAC0000120704710F0020F1CBF0220704710F0C9 +:10CAD000040018BF082070472DE9F04105461746AD +:10CAE00088460126084600F06EFC0446404600F0E9 +:10CAF0006EFC034610F0010F18BF012008D113F09F +:10CB0000020F18BF022003D113F0040018BF082041 +:10CB100014F0010F18BF4FF0010C20D050EA0C01A7 +:10CB200008BF002613F0030F08BF002014F0030F06 +:10CB300008BF4FF0000C95F85410814208BF002048 +:10CB4000387095F85510614508BF4FF0000C87F814 +:10CB500001C0002808BFBCF1000F1CD10DE014F08B +:10CB6000020F18BF4FF0020CD8D114F0040F14BFFD +:10CB70004FF0080C4FF0000CD0E7404600F02DFCC1 +:10CB8000B5F85810401A00B247F6FE71884201DC31 +:10CB9000002800DC00263046BDE8F08101281CBFDB +:10CBA00002280020704718B4CBB2C1F3072CC1B2E1 +:10CBB000C0F30720012B05D0022B08BFBCF1020FE8 +:10CBC0001BD002E0BCF1010F17D0012904D00229CB +:10CBD00008BF022811D001E001280ED001EA0C01A3 +:10CBE00061F3070210EA030060F30F22D0B210F0E5 +:10CBF000020F18BF02200BD106E0084003EA0C0127 +:10CC0000084060F30702EFE710F0010018BF0120B1 +:10CC10008DF80000C2F3072010F0020F18BF0220A9 +:10CC200003D110F0010018BF01208DF80100BDF8FC +:10CC3000000018BC7047162A10D12A220C2818BFF1 +:10CC40000D280FD04FF0230C1F280DD031B10878DC +:10CC5000012818BF002805D0162805D000207047ED +:10CC6000012070471A70FBE783F800C0F8E701293C +:10CC700002D0022905D007E0002804BF40F2E240BC +:10CC8000704740F6C410704700B5FFDF40F2E24045 +:10CC900000BD8A8EC98E00280CBF012000201144DF +:10CCA0009831002818BF0420084470474078704726 +:10CCB00030B50546007801F00F0220F00F00104358 +:10CCC0002870092912D2DFE801F0050705070509D8 +:10CCD000050B0F0006240BE00C2409E0222407E0DA +:10CCE00001240020E87003E00E2401E00024FFDFAF +:10CCF0006C7030BD007800F00F0070470A68C0F813 +:10CD000003208988A0F807107047D0F803200A6034 +:10CD1000B0F80700888070470A68C0F80920898841 +:10CD2000A0F80D107047D0F809200A60B0F80D0087 +:10CD3000888070470278402322F0400203EA811184 +:10CD40001143017070470078C0F38010704702787B +:10CD5000802322F0800203EAC11111430170704761 +:10CD60000078C009704770B514460E4605461F2A64 +:10CD700088BFFFDF2246314605F1090007F0C2FEF9 +:10CD8000A01D687070BD70B544780E460546062C2F +:10CD900038BFFFDFA01F84B21F2C88BF1F2422468C +:10CDA00005F10901304607F0ADFE204670BD70B5B3 +:10CDB00014460E4605461F2A88BFFFDF224631462D +:10CDC00005F1090007F09EFEA01D687070BD09689E +:10CDD000C0F80F1070470A88A0F8132089784175B1 +:10CDE000704790F8242001F01F0122F01F02114328 +:10CDF00080F824107047072988BF072190F8242065 +:10CE0000E02322F0E00203EA4111114380F82410EC +:10CE100070471F3008F02BB810B5044600F009FB2E +:10CE2000002818BF204410BDC17811F03F0F1BBF70 +:10CE3000027912F0010F0022012211F03F0F1BBFF7 +:10CE4000037913F0020F002301231A4402EB42027C +:10CE5000530011F03F0F1BBF027912F0080F0022A0 +:10CE6000012203EB420311F03F0F1BBF027912F0C6 +:10CE7000040F00220122134411F03F0F1BBF02795F +:10CE800012F0200F0022012202EBC20203EB420348 +:10CE900011F03F0F1BBF027912F0100F0022012288 +:10CEA00002EB42021A4411F03F0F1BBF007910F051 +:10CEB000400F00200120104410F0FF0014BF01219A +:10CEC00000210844C0B2704770B50278417802F082 +:10CED0000F02082A4DD2DFE802F004080B4C4C4C3C +:10CEE0000F14881F1F280AD943E00C2907D040E0FF +:10CEF000881F1F2803D93CE0881F1F2839D801202C +:10CF000070BD4A1EFE2A34D88446C07800258209A6 +:10CF1000032A09D000F03F04601C884204D8604610 +:10CF2000FFF782FFA04201D9284670BD9CF803009C +:10CF30004FF0010610F03F0F1EBF1CF104000078F7 +:10CF400010F0100F13D064460421604600F071FA0F +:10CF5000002818BF14EB0000E6D0017801F03F0173 +:10CF60002529E1D280780221B1EB501FDCD3304675 +:10CF700070BD002070BD70B50178012501F00F0172 +:10CF8000002404290AD007290DD008291CBF00203D +:10CF900070BD40780E2836D0204670BD4078801F86 +:10CFA0001F2830D9F8E7844640789CF803108A0996 +:10CFB000032AF1D001F03F06711C8142ECD8604693 +:10CFC000FFF732FFB042E7D89CF8030010F03F0FA4 +:10CFD0001EBF1CF10400007810F0100F13D066463D +:10CFE0000421604600F025FA002818BF16EB000067 +:10CFF000D2D0017801F03F012529CDD280780221DD +:10D00000B1EB501FC8D3284670BD10B4017801F0B1 +:10D010000F01032920D0052921D14478B0F8191037 +:10D02000B0F81BC0B0F81730827D222C17D106292A +:10D0300015D3B1F5486F98BFBCF5FA7F0FD272B126 +:10D04000082A98BF8A420AD28B429CBFB0F81D00C2 +:10D05000B0F5486F03D805E040780C2802D010BC2A +:10D060000020704710BC012070472DE9F0411F4699 +:10D0700014460D00064608BFFFDF2146304600F08B +:10D08000D8F9040008BFFFDF30193A462946BDE849 +:10D09000F04107F037BDC07800F03F007047C02274 +:10D0A00002EA8111C27802F03F021143C170704759 +:10D0B000C07880097047C9B201F00102C1F3400392 +:10D0C0001A4402EB4202C1F3800303EB4202C1F3B4 +:10D0D000C00302EB4302C1F3001303EB43031A4402 +:10D0E000C1F3401303EBC30302EB4302C1F380130C +:10D0F0001A4412F0FF0202D0521CD2B20171C3785E +:10D1000002F03F0103F0C0031943C170511C41708C +:10D1100070472DE9F0410546C078164600F03F04FF +:10D120001019401C0F46FF2888BFFFDF2819324620 +:10D130003946001D07F0E6FCA019401C6870BDE8E8 +:10D14000F081C178407801F03F01401A401E80B262 +:10D15000704710B590F803C00B460CF03F014478BF +:10D160000CF03F0CA4EB0C0CACF1010C1FFA8CF48E +:10D17000944288BF14462BB10844011D224618462C +:10D1800007F0C0FC204610BD4078704700B502781B +:10D1900001F0030322F003021A430270012914BFB5 +:10D1A0000229002104D0032916BFFFDF012100BDA1 +:10D1B000417000BD00B5027801F0030322F00302C4 +:10D1C0001A430270012914BF0229002104D0032947 +:10D1D00016BFFFDF012100BD417000BD007800F0E7 +:10D1E00003007047417841B1C078192803D2C04A82 +:10D1F000105C884201D1012070470020704730B593 +:10D2000001240546C17019293CBFB948445C02D3CA +:10D21000FF2918BFFFDF6C7030BD70B515460E4694 +:10D2200004461B2A88BFFFDF65702A463146E01C92 +:10D23000BDE8704007F066BCB0F807007047B0F872 +:10D2400009007047C172090A01737047B0F80B00FA +:10D25000704730B4B0F80720B0F809C0B0F8053016 +:10D260000179941F40F67A45AC4298BFBCF5FA7F2D +:10D270000ED269B1082998BF914209D293429FBF4B +:10D28000B0F80B00B0F5486F012030BC98BF704774 +:10D29000002030BC7047001D07F0E9BD021D0846A4 +:10D2A000114607F0E4BDB0F80900704700797047F7 +:10D2B0000A68426049688160704742680A60806815 +:10D2C000486070470988818170478089088070476D +:10D2D0000A68C0F80E204968C0F812107047D0F8EC +:10D2E0000E200A60D0F81200486070470968C0F844 +:10D2F00016107047D0F81600086070470A68426040 +:10D3000049688160704742680A6080684860704779 +:10D310000968C1607047C06808607047007970474D +:10D320000A68426049688160704742680A608068A4 +:10D33000486070470171090A417170478171090A9B +:10D34000C17170470172090A417270478172090AFE +:10D35000C172704780887047C088704700897047E5 +:10D360004089704701891B2924BF4189B1F5A47FF9 +:10D3700007D381881B2921BFC088B0F5A47F012075 +:10D380007047002070470A684260496881607047B2 +:10D3900042680A60806848607047017911F0070FA1 +:10D3A0001BBF407910F0070F002001207047017962 +:10D3B00011F0070F1BBF407910F0070F002001206C +:10D3C000704701717047007970474171704740792B +:10D3D00070478171090AC1717047C088704745A2C2 +:10D3E00082B0D2E90012CDE900120179407901F052 +:10D3F000070269461DF80220012A07D800F007003D +:10D40000085C01289EBF012002B07047002002B0D6 +:10D4100070470171704700797047417170474079DA +:10D42000704730B50C460546FB2988BFFFDF6C709E +:10D4300030BDC378024613F03F0008BF7047052097 +:10D44000127903F03F0312F0010F36D0002914BF08 +:10D450000B20704712F0020F32D0012914BF801D3B +:10D46000704700BF12F0040F2DD0022914BF401CDA +:10D47000704700BF12F0080F28D0032914BF801C8A +:10D48000704700BF12F0100F23D0042914BFC01C36 +:10D49000704700BF12F0200F1ED005291ABF1230AE +:10D4A000C0B2704712F0400F19D006291ABF401CB5 +:10D4B000C0B27047072918D114E00029CAD114E07E +:10D4C0000129CFD111E00229D4D10EE00329D9D10D +:10D4D0000BE00429DED108E00529E3D105E00629A7 +:10D4E000E8D102E0834288BF704700207047000007 +:10D4F0000452020000010102010202032DE9F04181 +:10D50000FE4E0446736893F828000127002528B1D1 +:10D5100093F8A001D8B993F84801C0B193F8480135 +:10D5200098B383F8A071D3F84C113C2269B36570AD +:10D53000201D07F0E7FA052020702771706890F829 +:10D54000A011002918BF80F8485107D034E083F8B3 +:10D55000A05103F12A014FF48E72E7E71D212A3012 +:10D5600007F04FFB70687F2180F84510FF2180F89D +:10D57000381080F82B1080F83E10818E21F0600169 +:10D580002031818680F8285016E0FFE793F82200CA +:10D59000012814D0187801281BD093F850010128D5 +:10D5A0001CBF0020BDE8F081657018202070D3F802 +:10D5B0005201606083F850510120BDE8F081657030 +:10D5C00007202070586A606083F822500120BDE86F +:10D5D000F0816570142020702022991C201D07F016 +:10D5E00091FA257271680D7081F85051C448828893 +:10D5F0008284D0F86421527B80F8262080F8227043 +:10D60000D1F864010088F5F783F9F4F72AFED3E72F +:10D61000BA4840680178002914BF80884FF6FF702F +:10D62000704770B5B54C0546606890F87411204697 +:10D630000629806803D0FFF73BFD38B117E0FFF7FC +:10D6400037FD90B9A068FFF733FD10E0616891F8ED +:10D650007401082809D025B191F83E00FF2806D0B2 +:10D6600003E091F82B00FF2801D0012070BD0020BD +:10D6700070BDF8B5A14C07460E46606890F82810BA +:10D68000002906BF90F848110029F8BD00F13305C4 +:10D6900020787F2808BFFFDF207828707F20207047 +:10D6A000606890F89A1100F5D470085C012808BFF2 +:10D6B000012503D0022814BFFFDF0225606880F82F +:10D6C000365090F8971180F8461090F87411072999 +:10D6D0000CD190F8A401012808BF012503D002282D +:10D6E00014BFFFDF0225606880F83750606890F84B +:10D6F00074010025062804D1A068FFF7D9FC002892 +:10D700003DD0606890F87411082904BF90F8A10119 +:10D7100002280ED04FF00301A068FFF77DFB40B157 +:10D7200041780A09616881F838200088C0F30B004D +:10D7300048870095A068FFF7DDFA01466068BDF8EC +:10D74000005090F83420520962F34615ADF80050AD +:10D75000072918BFFFDF1CD0BDF8000000906068EB +:10D76000BDF8001081860421A068FFF755FB002852 +:10D770007DD0B0F80100C004C00C79D0ABE0A06847 +:10D78000C17811F03F0F1CBF007910F0100FB8D115 +:10D79000CFE790F87411062916D0072936D008294A +:10D7A00073D00A2918BFFFDFD6D145F00A01ADF8C2 +:10D7B000001090F83E00FF2814BF0120002060F305 +:10D7C0008201ADF80010C7E7A068FFF771FC58B1FF +:10D7D000012808BF45F0010046D0022814BFFFDF32 +:10D7E00045F0020040D0B7E7A068C17811F03F0FC4 +:10D7F0001CBF007910F0020FAED00120FFF711FF1F +:10D80000002808BF45F004002ED0A5E7A068FFF768 +:10D810004FFCB0B1012804BF45F00100ADF8000095 +:10D820000FD0022898D145F00200ADF80000A168A1 +:10D83000CA7812F03F0F1CBF097911F0020F21D1F5 +:10D8400018E0A068C17811F03F0F1CBF007910F0FC +:10D85000020F05D1606890F83E00FF283FF47CAFCE +:10D86000BDF8000040F00400ADF8000074E726E0C9 +:10D870002AE00AE0616891F83E10FF2908BF20F015 +:10D880000400F1D040F00400EEE790F83E10FF29CC +:10D890001CBF45F00401ADF8001090F8A10102286A +:10D8A000BDF800000CBF40F0080020F00800ADF803 +:10D8B00000000CBF40F0020020F00200D4E76068D6 +:10D8C000818E21F0600105E06068818E21F06001A9 +:10D8D00001F140018186606890F87401A068C17808 +:10D8E00011F03F0F10D0017911F0400F0CD04FF024 +:10D8F0000601FFF791FA0078616803E074010020E7 +:10D90000EC10002081F84500606890F8740106284A +:10D9100004D00020FFF785FE18BB04E0022F18BFDB +:10D92000012FF6D1F8BDA068C17811F03F0F33D0B8 +:10D93000017911F0010F2FD0616801F12C0791F8E6 +:10D94000783101F12B05FF2B0CD03A4629461846B9 +:10D95000FEF756F8002808BFFFDF287840F00200E5 +:10D96000287019E0FFF7EFF92870A068FFF7C2F9F7 +:10D97000072804D23946A068FFF7C7F90CE0A06871 +:10D98000FFF7B8F9072807D10021A068FFF744FA8C +:10D99000016839608088B8800120FFF742FE80BBB3 +:10D9A000A068C17811F03F0F2BD0017911F0020F60 +:10D9B00027D0616801F13F0591F876216F1E1AB1F9 +:10D9C000022E18BF032E08D0FFF794F907280AD2B9 +:10D9D0002946A068FFF7A7F912E0D1F85A0128609C +:10D9E000B1F85E010BE0A068FFF784F9072807D1C2 +:10D9F0000121A068FFF710FA016829608088A880DB +:10DA00003E70606890F87401062808BFF8BD0728CA +:10DA100018BF082802D00A2806D0F8BDA068FFF772 +:10DA200047FB022808BFF8BD606800F14705A06801 +:10DA3000FFF787FB616891F83230C3F1FF02904233 +:10DA400028BF104605D98A8E22F0600202F14002FA +:10DA50008A86C2B203EB0501A068FFF77AFB616812 +:10DA600091F83220104481F83200F8BD2DE9F047DA +:10DA7000F74D06466C6894F82800002818BFBDE8EA +:10DA8000F0871D212A34204607F0BBF801272770B4 +:10DA9000A868FFF72FF920B3012827D002282AD041 +:10DAA000062818BFFFDF2BD004F11D01A868FFF77F +:10DAB0006AF92072686804F1020904F1010890F81B +:10DAC0007801FF2821D04A464146FDF799FF0028FA +:10DAD00008BFFFDF98F8000040F0020088F800005F +:10DAE00031E0608940F013006081DDE7608940F03B +:10DAF00015006081DEE7608940F010006081D3E7A7 +:10DB0000608940F012006081CEE7A868FFF71BF93A +:10DB100088F80000A868FFF7EDF8072804D2494606 +:10DB2000A868FFF7F2F80EE0A868FFF7E3F8072807 +:10DB300009D10021A868FFF76FF90168C9F8001042 +:10DB40008088A9F80400287804F109087F2808BF14 +:10DB5000FFDF287888F800004FF07F0985F80090F3 +:10DB6000277300206073FF20A073A17A11F0040FC7 +:10DB700008BF20752DD0686804F1150804F1140A57 +:10DB800090F8761119B1022E18BF032E09D0A8689B +:10DB9000FFF7B0F807280BD24146A868FFF7C3F893 +:10DBA00015E0D0F85A11C8F80010B0F85E010CE08A +:10DBB000A868FFF79FF8072809D10121A868FFF797 +:10DBC0002BF90168C8F800108088A8F804008AF8CA +:10DBD000006084F81B90686890F89711217780F8AE +:10DBE0002870BDE8F047062003F08BBB2DE9F0411B +:10DBF000974C606890F82810FF250026A1B91D21D8 +:10DC00002A3006F0FEFF60687F2180F8451080F81A +:10DC1000385080F82B5080F83E50818E21F0600102 +:10DC20002031818680F82860606800F5D47290F811 +:10DC30009A11895C80F8A411002002F082FFF8B1EB +:10DC4000F8F7AEFF6068834990F879010F5C3846B9 +:10DC5000F8F771FD606880F8977190F8A41125209D +:10DC6000F8F766FC606890F8A4110120F8F77BFDD6 +:10DC7000606890F86811032918BF022904D00FE0EA +:10DC8000BDE8F04100F064BF90F89A1100F5D4703F +:10DC9000085C012804D1012211460020F9F798F808 +:10DCA000F9F773F8606890F8A401012807BF01270D +:10DCB000032100270521A068FDF780FF616881F836 +:10DCC000760140B1002F0CBF50274027F8F76DFABE +:10DCD0003846F9F72DF86068D0F87C01F8F76CFF4A +:10DCE000606890F87811FF291CBF00F29110FDF7D1 +:10DCF0009EFE6068062180F8775180F8785180F8A0 +:10DD0000856180F8846180F8A16180F87411BDE8B4 +:10DD1000F08170B54E4C0646606800F5BA75204635 +:10DD2000806841B1D0F80510C5F81D10B0F80900A1 +:10DD3000A5F8210003E005F11D01FEF7E6FFA0684C +:10DD4000FFF701F885F82400A0680021032E018068 +:10DD500002D0052E04D046E00321FEF7A9FF42E0E1 +:10DD60000521FEF7A5FF6068D0F8640100F10E01FF +:10DD7000A068FFF72CF86068D0F8640100F1120188 +:10DD8000A068FFF728F8D4E90110D1F86421527D8A +:10DD90008275D1F86421D28AC275120A0276D1F84E +:10DDA000642152884276120A8276D1F864219288E0 +:10DDB000C276120A0277D1F86421D2884277120A19 +:10DDC0008277D1F864110831FFF723F86068D0F842 +:10DDD0006401017EA068FFF704F8606890F8AA115A +:10DDE000A068FFF708F805F11D01A068FEF794FF91 +:10DDF00095F82410A068FEF7AAFF606800F5AD75DD +:10DE000090F8596190F8751191B190F86811032953 +:10DE100006D190F86111002918BF90F87A0101D15C +:10DE200090F87701FDF719FF00281CBF0126054671 +:10DE30002946A068FEF762FF3146A068BDE8704041 +:10DE4000FEF778BF0249496881F873017047000006 +:10DE5000740100202052020070B5FE4D686890F8F1 +:10DE6000741102291FBF90F8741101290C2070BD94 +:10DE700000F166014FF00004C0F84C1180F84841F1 +:10DE80004FF01D0100F12A0006F0BBFE68687F21FB +:10DE900080F84510FF2180F8381080F82B1080F8AA +:10DEA0003E10818E21F060012031818680F828406B +:10DEB000047080F8224080F85041012680F8A0616B +:10DEC00090F8760130B1F8F746FFF8F782F9686804 +:10DED00080F876416868072180F8724180F86161B6 +:10DEE00080F8684180F8794180F8734180F8A14159 +:10DEF00080F86011002070BDD64910B58860486870 +:10DF00000021A0F8A51180F8A711012180F8741153 +:10DF1000FFF7A2FF002818BFFFDF10BD2DE9F04179 +:10DF2000CC4D0446686890F87401012818BF022897 +:10DF300004D003281CBF0C20BDE8F081607A0228C1 +:10DF400023D0F8F729FB0220F8F730FE686890F933 +:10DF50007301F8F7E2FBA868F8F72BFEBE48F8F764 +:10DF60000BFEBE48F8F7DFFB686890F8591100F522 +:10DF7000AD70F8F78AFB0F210720F8F7A2FB68685D +:10DF800090F86101F0B1FDF7DBFD6868217A00F5DA +:10DF9000D47280F89A11217A895C80F8A4116168A2 +:10DFA000C0F87C112168C0F88011627A6AB1012A38 +:10DFB00024D00526022A08BF80F8746176D0032A8F +:10DFC00075D0B5E0FDF777FDDFE7A54B90F860C1B0 +:10DFD000002100BF90F87921521CA3FB0264640861 +:10DFE000A4EB8404224480F879212CFA02F212F086 +:10DFF000010F03D1491CC9B20329EBD3002680F8D5 +:10E00000A16190F87111002904BF90F875010028F2 +:10E0100048D0F6F78DFC044668682146D0F86C01BC +:10E02000F7F7A2F9DFF83C82074690FBF8F008FB0F +:10E03000107041422046F6F77CF96968C1F86C011E +:10E0400097FBF8F0D1F89C211044C1F89C01FDF732 +:10E05000AFFC6A68D2F89C11884223D8C2F89C6150 +:10E06000C2F86C4192F8750100281CBF0120FDF731 +:10E07000C1FD0121686890F87221002A1CBF90F848 +:10E080007121002A0ED090F8593100F5AD72012BA4 +:10E0900004D1527902F0C002402A09D000F5AD70D7 +:10E0A000F9F7E6FA6968042081F8740140E009E0B4 +:10E0B0000124FDF7D0FD6968224601F5AD71F9F73D +:10E0C000A0FAEFE7002918BFFFDF686800F2A51487 +:10E0D00090F8A701400908BF012703D0012814BF09 +:10E0E00000270227F8F75CFD207800F03F04204667 +:10E0F000F8F721FB6868394680F89741FF20F8F768 +:10E1000017FA39460120F8F76DFBF8F73EFE0521B6 +:10E11000A868FDF753FD696881F8760128B150249D +:10E12000F8F743F82046F8F703FE686880F8746152 +:10E130000020BDE8F08110B5464C606890F874117D +:10E1400004290DD005291CBF0C2010BD90F8A10199 +:10E1500048B100F020FD6168082081F8740108E0F2 +:10E16000FFF744FD05E000F016FD6168072081F827 +:10E170007401002010BD3749002210F0010F4968DA +:10E1800002D0012281F8A82110F0080F03D0114419 +:10E19000082081F8A801002070472E49496881F8BD +:10E1A0007001704710B52B4C636893F85831022BFF +:10E1B00014BF032B00280BD100291ABF022901200C +:10E1C00000201146FDF7F7FB08281CBF012010BDF9 +:10E1D000606890F85801002816BF0228002001202E +:10E1E000BDE81040F9F7CEB91A48406890F85801D8 +:10E1F000002816BF022800200120F9F7C3B91549ED +:10E20000496881F8580170471249496881F87201DC +:10E21000704770B50F4C616891F85801002816BF1F +:10E2200002280020012081F8590101F5AD71F9F7AC +:10E2300093F9606890F85811022916BF032901214B +:10E24000002180F8751190F8592100F5AD734FF059 +:10E25000000509E0740100201D5202002352020053 +:10E26000ABAAAAAA40420F00012A04BF5B7913F0AF +:10E27000C00F0AD000F5AD73012A04D15A7902F01B +:10E28000C002402A01D0002200E0012280F8712162 +:10E29000002A04BF002970BDC0F89C51F6F748FB66 +:10E2A0006168C1F86C0191F8750100281CBF00205D +:10E2B000FDF7A0FC0026606890F8721100291ABFD3 +:10E2C00090F87111002970BD90F8592100F5AD71D9 +:10E2D000012A04D1497901F0C001402906D029461C +:10E2E000BDE8704000F5AD70F9F7C2B9FDF7B3FCB9 +:10E2F00061683246BDE8704001F5AD71F9F781B94A +:10E3000070B5FF4D0C4600280CBF0123002369683F +:10E3100081F8613181F86A014FF0080081F87A01D3 +:10E320000CD1002C1ABF022C012000201146FDF751 +:10E3300042FB6968082881F87A0101D0002070BD8D +:10E34000022C14BF032C1220F8D170BD002818BF76 +:10E35000112070470328EA4A526808BFC2F86411C6 +:10E3600082F8680100207047E548416891F868012B +:10E37000032804D0012818BF022807D004E091F830 +:10E380006A01012808BF70470020704791F86901B1 +:10E39000012814BF03280120F6D1704770B5F8F7A3 +:10E3A00092FCF8F771FCF8F763FBF8F7EBFBD44C41 +:10E3B0000025606890F8760130B1F8F7CCFCF7F7EB +:10E3C00008FF606880F8765160680121A0F8A551C7 +:10E3D00080F8A75180F8741180F85051002070BD6A +:10E3E000C74810B5406800F5C47006F0C2F80020B8 +:10E3F00010BDC3480121406890F86821032A03BF7B +:10E4000080F85211D0F864211288002218BF80F8D9 +:10E410005221A0F8542180F850117047B84949683A +:10E4200081F8AA0170470178002311F0010FB44967 +:10E4300049680AD04278032A08BFC1F8643181F8DC +:10E440006821012281F8A8211346027812F0040FF6 +:10E450000CD082784FF0000C032A08BFC1F864C1C9 +:10E4600081F868210B44082283F8A821C27881F83A +:10E4700058210279002A16BF022A0123002381F8BD +:10E48000613181F86921427981F86021807981F8D0 +:10E4900070014FF0000070479948406800F5D27055 +:10E4A00070472DE9F041964C05460E46606890F89D +:10E4B0007401032818BFFFDF022D1EBF032DFFDFED +:10E4C000BDE8F0814FF000074FF00105AEB1606884 +:10E4D00090F8371089B1818E21F0600101F140017F +:10E4E000818690F8282042B980F8285011F0080F52 +:10E4F00014BF0720062002F004FF6068A0F8A57191 +:10E5000080F8A77180F87451BDE8F08100F020BB5D +:10E510002DE9F0477A4C0646894660684FF00108BD +:10E52000072E90F8617138BF032533D3082E4FF0C2 +:10E53000000088BFBDE8F087FFF773F8002873D1AB +:10E54000A068C17811F03F0F12D0027912F0010FCC +:10E550000ED061684FF0050591F87621002A18BFAA +:10E56000B9F1000F16D091F8A411012909D011E0DA +:10E5700011F03F0F1ABF007910F0100F002F53D188 +:10E580004CE04FF001024FF00501FDF75CFA6168C5 +:10E5900081F87601A16808782944C0F3801030B171 +:10E5A000487900F0C000402808BF012000D00020BA +:10E5B000616891F87611002918BF002807D0FDF78F +:10E5C0005DFA0146606880F8771180F884816068A0 +:10E5D00090F87711FF292AD080F878110846FDF7C6 +:10E5E0005AFA40EA0705606890F87721FF2A18BFB9 +:10E5F000002D10D0072E0ED3A068C17811F03F0F68 +:10E6000009D0017911F0020F05D00B21FDF7C8FAEE +:10E61000606880F885812846BDE8F087FDF707F837 +:10E62000002808BFBDE8F0870120BDE8F087A36897 +:10E6300090F8612159191B78C3F3801C00F27713FD +:10E640006046FDF758F80546CDE7F0B52C4C074677 +:10E6500083B060686D460078002818BFFFDF002691 +:10E6600061688E70D1F8640102888A8042884A838A +:10E6700082888A83C088C88381F8206047B10121DD +:10E68000A068FEF7C9FB0546A0680078C10907E04D +:10E690006946A068FEF739FBA0680078C0F38011D6 +:10E6A0006068012790F87521002A18BF002904D05E +:10E6B0006A7902F0C002402A29D090F87221002A1B +:10E6C00018BF002903D0697911F0C00F1FD000F1E5 +:10E6D0000E0006F0C3FB616891F87801FF281CD09A +:10E6E00001F10802C91DFDF78BF9002808BFFFDF03 +:10E6F0006068C17941F00201C171D0F8911101E067 +:10E70000740100204161B0F89511018310E029687F +:10E71000C0F80E10A9884182DDE7D1F86401427E7D +:10E72000CA71D0F81A208A60C08B88814E610E832E +:10E7300060680770D0F8642190F8731182F8571060 +:10E74000D0F864010088F4F7E3F8F3F77BFD03B039 +:10E75000F0BD2DE9F041FC4C05460126606800271C +:10E7600090F86811012918BF022902D0032918BFA7 +:10E77000FFDF55B1A068FEF7A7FB18B9A068FEF748 +:10E78000FAFB10B100F085FA2DE0606890F8740192 +:10E790007F25801F062828BFBDE8F081DFE800F054 +:10E7A00003191930443EE848F8F7FAFA002808BF80 +:10E7B0002570F8F7E0FA606890F8760130B1F8F764 +:10E7C000CAFAF7F706FD606880F87671F8F750F935 +:10E7D00020E0DD48F8F7E4FA002808BF2570F8F7D4 +:10E7E000CAFA00F03CFA102880F0DE80DFE800F082 +:10E7F00036B6BFC3DCDC12CCD4DCDCDC249C38694C +:10E80000D148F8F7CDFA002808BF2570F8F7B3FA19 +:10E81000F8F72EF9BDE8F041FFF7E8B9CA48F8F774 +:10E82000BFFA30B9257004E0C748F8F7B9FA0028F4 +:10E83000F8D0F8F7A0FA9AE0032002F082F9002855 +:10E8400071D000210320FFF764FA0122114610461F +:10E85000F8F7BEFA61680C2081F87401BDE8F08118 +:10E86000606800F5BA75042002F06BF900287ED0CC +:10E870000E202870012002F044FDA0686168007835 +:10E88000C0F3401081F8990100210520FFF741FAFB +:10E89000AE49A0684FF0200CD1F864210378527B78 +:10E8A00023F020030CEA42121A430270D1F86401EB +:10E8B00095F82530427B1A4042732820D1F8641124 +:10E8C0002DE0062002F03DF9002850D09F4D0F208A +:10E8D00085F87401022002F014FD6068012190F8AF +:10E8E000A4210846F8F774FAA06861680078C0F3BC +:10E8F000401081F8990101210520FFF70AFAD5F8A7 +:10E9000064014673A068017821F020010170F8F7D6 +:10E91000FDFC002818BFFFDF2820D5F8641181F81E +:10E920005600BDE8F08122E0052002F00AF9F0B1BE +:10E9300001210320FFF7EDF9F8F7E8FC002818BFE4 +:10E94000FFDF6068012190F8A4210846F8F740FA3B +:10E9500061680D2081F87401BDE8F0816068A0F85D +:10E96000A57180F8A77180F87461BDE8F081BDE8F9 +:10E97000F04100F0EDB86168032081F87401BDE852 +:10E98000F041082002F0BDBC00F005F961680720E5 +:10E9900081F87401BDE8F08100F0FDF8616808209D +:10E9A00081F87401BDE8F081FFDFBDE8F08170B54A +:10E9B000654C606890F874110C2929D00D2932D06B +:10E9C0000E293BD00F291CBFFFDF70BD042002F0D1 +:10E9D00098FC606890F8A4110E20F7F7A9FD0021BB +:10E9E0009620F8F715F9F8F7D0F90521A068FDF79A +:10E9F000E5F8616881F8760128B15025F7F7D5FB75 +:10EA00002846F8F795F961680B2081F8740170BD0C +:10EA1000F8F7BBF900219620F8F7FAF861680920A9 +:10EA200081F8740170BD00219620F8F7F1F8F8F72D +:10EA3000ACF961680A2081F8740170BD0021A0F86A +:10EA4000A51180F8A711012180F874110020FFF7AB +:10EA5000FCFDBDE87040032002F053BC70B53A4C99 +:10EA6000606890F874117F25891F062928BF70BD42 +:10EA7000DFE801F017321D033D113348F8F790F934 +:10EA8000002808BF2570F8F776F9F7F7F1FFBDE821 +:10EA90007040FFF7ABB82C48F8F782F960BB2570DF +:10EAA0002AE02948F8F77CF9D8B9257019E090F8E0 +:10EAB000371089B1818E012221F0600140318186B9 +:10EAC00090F8283043B980F8282011F0080F14BFBF +:10EAD0000720062002F015FC1B48F8F761F9002812 +:10EAE000E3D0F8F748F9BDE8704000F031B81648B7 +:10EAF000F8F756F90028D2D0F8F73DF96068002100 +:10EB000000F5C47005F0E6FCBDE8704000F020B8E8 +:10EB100070B50D4C06460D46012908D0606890F886 +:10EB2000A4213046BDE87040134602F034BCF7F72C +:10EB3000C7FC61680346304691F8A4212946BDE828 +:10EB4000704002F028BC000074010020EC1000208E +:10EB500070B5F8F7B8F8F8F797F8F7F789FFF8F70E +:10EB600011F8F84C0025606890F8760130B1F8F79C +:10EB7000F2F8F7F72EFB606880F8765160680221A2 +:10EB800080F87411A0F8A55180F8A751BDE8704035 +:10EB9000002002F0B6BB2DE9F041EA4C616891F823 +:10EBA000A701400908BF012503D0012814BF002593 +:10EBB0000225D1F88021002A2FD001F2A5170028C4 +:10EBC00008BF012603D0012814BF00260226F7F74C +:10EBD000E7FF387800F03F073846F7F7ACFD60688C +:10EBE000314680F89771FF20F7F7A2FC6068324643 +:10EBF000D0F880110120F7F779FEF8F7C6F8052163 +:10EC0000A068FCF7DBFF616881F8760128B1502627 +:10EC1000F7F7CBFA3046F8F78BF86068D0F87C014C +:10EC2000F7F7CAFF606890F86811022906D0032937 +:10EC300004BF90F89001012804D008E090F89001FA +:10EC4000022804D12A4601210020F8F7C1F86068A3 +:10EC5000002180F8A45180F88411BDE8F081B94802 +:10EC600010B5406890F8371089B1818E012221F0EB +:10EC700060014031818690F8283043B980F828201F +:10EC800011F0080F14BF0720062002F03AFB022003 +:10EC900010BD2DE9F04FAB4D83B00024686890F8AB +:10ECA00074017F27801F26464FF00108062880F058 +:10ECB0003E82DFE800F003080893FDFC00F0ACFCA6 +:10ECC000044600F035BA9F48F8F76AF8002808BFF4 +:10ECD0002F70F8F750F8A868FEF70CF804460728DC +:10ECE0006AD1A868FEF7E4F9696891F89021824238 +:10ECF00062D191F87401062804D1A868FEF7D8F90A +:10ED0000002836D0686890F87411082904BF90F87C +:10ED1000A101022813D04FF00301A868FEF77CF888 +:10ED2000002849D06968437891F83820B2EB131F66 +:10ED300042D10088498FC0F30B0088423CD10021AA +:10ED40002046FFF7E5FBB0B38DF800608DF8046056 +:10ED50008DF80860A868FF24C17811F03F0F1CBF30 +:10ED6000007910F0020F1CD00120FEF75AFC50B1C0 +:10ED700017E0A868C17811F03F0F1CBF007910F0B0 +:10ED8000100FBFD1DBE702AA694601A800F0D4F951 +:10ED9000686890F859419DF80000002818BF44F0B9 +:10EDA000020423469DF808209DF804109DF80000F9 +:10EDB00000F0A0FA02E0FFE7FFF751FF04466868A1 +:10EDC00090F87601002800F0B381F7F7C4FFF7F759 +:10EDD00000FA686880F8766100F0AAB9A868FDF7C3 +:10EDE00089FF8146A9686868CA7890F891319A428B +:10EDF00021D10A7990F892319A421CD14A7990F83F +:10EE000093319A4217D18A7990F894319A4212D16B +:10EE1000CA7990F895319A420DD10A7A90F89631D4 +:10EE20009A4208D1097890F89801C1F38011814283 +:10EE300008BF012400D00024F7F71AFE4148F7F775 +:10EE4000AFFF002808BF2F70F7F795FFB9F1040F47 +:10EE500075D1002C73D0686890F8481100296ED1E4 +:10EE600090F8281021B190F8341011F0100F66D0EE +:10EE7000D0F84C411D21204605F0C3FE84F80080E7 +:10EE8000686804F1020A04F1010990F87801FF288A +:10EE90000FD052464946FCF7B3FD002808BFFFDFFC +:10EEA00099F8000040F0020089F800001FE04BE0F4 +:10EEB000FEE0A868FDF747FF89F80000A868FDF7A5 +:10EEC00019FF072804D25146A868FDF71EFF0EE07F +:10EED000A868FDF70FFF072809D10021A868FDF7F2 +:10EEE0009BFF0168CAF800108088AAF8040004F1AA +:10EEF0001D01A868FDF747FF2072287804F1090971 +:10EF00007F2808BFFFDF287889F800002F70686825 +:10EF1000618990F8A12162F3000141F01A01618139 +:10EF200084F80C806673FF21A1732175E77690F851 +:10EF30009711217780F84881072002F0E2F9062432 +:10EF400000F0F6B8740100204FF00208FD48F7F712 +:10EF500027FF002808BF2F70F7F70DFFA868FDF7FF +:10EF6000C9FE0446A868FEF7A3F8082C08BF0028CD +:10EF70007ED1A8684FF00301C27812F03F0F77D01E +:10EF8000007931EA000073D1686800F5BA7790F82B +:10EF90006101002814BFBE79FE784FF00009B878EF +:10EFA00078B1FCF76BFD0446FF280AD00146A8683B +:10EFB000401DFCF73CFDB4420CBF4FF001094FF07F +:10EFC00000090021A868FDF727FF062207F11D01AF +:10EFD00005F06CFD40B9A868FDF7B5FE97F8241060 +:10EFE000884208BF012000D0002059EA00095DD006 +:10EFF000686800F5AD7490F859A1787838B130465A +:10F00000FCF72BFE00281CBF04464FF0010A002726 +:10F01000A86801784FEAD11B0121FDF7FDFEBBF185 +:10F02000000F07D0407900F0C000402808BF4FF023 +:10F03000010B01D04FF0000B0121A868FDF7ECFE99 +:10F040000622214605F032FD30B9A868FDF788FE9A +:10F05000504508BF012401D04FF000043BEA0400F2 +:10F0600018BFFF2E0FD03046FCF7C1FC060000E0B1 +:10F070001CE008D00121A868FDF7CEFE014630460D +:10F08000F8F78EFA074644EA070019EA000F0DD098 +:10F090006868012100F5C47005F01CFA4FF0010802 +:10F0A0004046FFF7D2FA052002F02BF944463FE034 +:10F0B0000224A448F7F774FE002808BF2F70F7F762 +:10F0C0005AFEA868FDF716FE0646A868FDF7F0FF91 +:10F0D000072E08BF00282BD1A8684FF00101C27885 +:10F0E00012F03F0F24D00279914321D1696801F5D4 +:10F0F000BA760021FDF790FE062206F11D0105F00B +:10F10000D5FCA8B9A868FDF71EFE96F82410884221 +:10F110000ED16868012100F5C47005F0DBF9FF210C +:10F12000022000F099F8002818BF032400E0FFDF58 +:10F1300003B02046BDE8F08F2DE9F74F814C002544 +:10F14000914660688A4690F8750100280CBF4FF020 +:10F1500001084FF00008A0680178CE090121FDF7F1 +:10F160005BFE36B1407900F0C000402808BF0126A0 +:10F1700000D00026606890F87611002963D090F8DE +:10F1800068114FF0000B03291ED190F8611100297E +:10F1900018BF90F87A7117D0FF2F18BF082F22D010 +:10F1A0003846FCF7EBF9002818BF4FF00108002E95 +:10F1B00049D0606890F88501D0B1FCF76AFC05463B +:10F1C000606880F885B13EE0A168CA7812F03F0F10 +:10F1D00019BF097911F0010F90F82B10FF2918BF02 +:10F1E00090F87771D8D176B390F8840170B12AE0A5 +:10F1F0003846FCF7FCFB05460121A068FDF70CFE34 +:10F2000001462846F8F7CCF905461CE0A068C1780D +:10F2100011F03F0F05D0017911F0010F18BF0B213C +:10F2200001D14FF005014FF00002FCF70CFC6168C2 +:10F2300081F8760138B1FCF721FCFF2803D0616822 +:10F24000012581F877018AF800500098067089F846 +:10F25000008003B0BDE8F08F2DE9F041394C024643 +:10F260000025606890F8A1310BB3A0684FF000064C +:10F270004FF00107C37813F03F0F1CBF007910F067 +:10F28000100F1BD00020FEF7F4F9606890F83400EE +:10F29000C0F3411002281BD0022000F058FC88B1B6 +:10F2A0006068012580F89061F7F7E2FB1FE0002A13 +:10F2B00014BF0223012380F8A131D6E71046FEF7E0 +:10F2C000D8F905E06068818E21F0600140318186C7 +:10F2D000606890F8281051B980F8287090F83400D0 +:10F2E00010F0080F14BF0720062002F00AF8284685 +:10F2F000BDE8F0812DE9F047124C05461F469046C7 +:10F300000E46A068FDF7D4FE002800F0D280012848 +:10F3100005D0022800F00F81BDE8F0479FE4A06807 +:10F320000921C27812F03F0F00F043810279914326 +:10F3300040F03F81616891F86811032909D012F00B +:10F34000020F01E07401002008BFFF2119D065B150 +:10F3500016E00021FDF760FD61680622D1F8641116 +:10F360001A3105F0A3FB50BB1EE0FDF7F9FC054682 +:10F370000121A068FDF750FD2946F7F78EF918B175 +:10F380003946012000F038B9606890F86901032817 +:10F3900018BF022840F00D81002E1CBFFE21012065 +:10F3A00040F02A8100F005B9A068FDF7CCFC616847 +:10F3B000D1F86411497E884208BF012600D000269A +:10F3C000A068C17811F03F0F05D0017911F0020F4C +:10F3D00001D05DB338E0616891F86A21012A01D05B +:10F3E000A6B119E0C6B90021FDF716FD61680268F3 +:10F3F000D1F86411C1F81A208088C883A068FDF78D +:10F40000A2FC6168D1F86411487605E091F87701B3 +:10F4100091F87A1188424BD1606800F5C47005F00C +:10F420009DF8002844D00F20BDE8F087B8F1000F08 +:10F430000CD0FDF795FC05460121A068FDF7ECFC1A +:10F440002946F7F72AF908B1012200E00022616895 +:10F4500091F86A01012807D040B92EB991F87731A7 +:10F4600091F87A118B4201D1012100E000210A427A +:10F470001ED0012808BF002E13D14FF00001A06854 +:10F48000FDF7CAFC61680268D1F86411C1F81A205E +:10F490008088C883A068FDF756FC6168D1F86411C4 +:10F4A0004876606800F5C47005F058F80028BAD1B5 +:10F4B0007FE06068A8464FF0020990F868010328D1 +:10F4C0002AD0A068C17811F03F0F1BBF007910F05F +:10F4D000020F002001204FF0FF05A8B14FF00100FE +:10F4E000FEF79FF8002804BF3D46B8F1000F0BD18E +:10F4F000A068FDF735FC07460121A068FDF78CFCEC +:10F500003946F7F7CAF850B129460020FFF7A4FEA4 +:10F51000002818BF4FF003094846BDE8F08760682F +:10F5200090F86901032818BF0228F5D1002E18BFF2 +:10F53000FE25E9D1F0E7626892F86831032B38D0F4 +:10F54000A0684FF0090CC17811F03F0F31D001795C +:10F550003CEA010C2DD1022B01F0020105D000295B +:10F5600008BFFF2147D0CDB344E009B135B113E066 +:10F5700002F5C47004F0F2FFA0B91AE0B8F1000F70 +:10F580001AD0FDF7EDFB05460121A068FDF744FC0C +:10F590002946F7F782F878B1606800F5C47004F086 +:10F5A000DDFF30B139460220FEF763F80D20BDE8DB +:10F5B000F0870220BDE8F087606890F869010328B1 +:10F5C00018BF0228F5D1002EF3D04FF0FE014FF006 +:10F5D000020000F0A4FA0220BDE8F087FFE7FDF783 +:10F5E000BFFB05460121A068FDF716FC2946F7F789 +:10F5F00054F820B13946022000F091FAD9E760684A +:10F6000090F86901032818BF0228D2D1002E1CBF30 +:10F61000FE210220F0D1CCE72DE9F04F83B04FF06E +:10F620000008FE48F7F7BCFBFC4C002804BF7F2015 +:10F630002070F7F7A0FBA068FDF75CFB8246012174 +:10F64000FEF766FF05466068002690F8A4110129C0 +:10F6500018BFFFDF0ED0606890F8760130B1F7F781 +:10F660007AFBF6F7B6FD606880F8766103B0404635 +:10F67000BDE8F08FEA4F4FF006084FF00109BAF1EC +:10F68000080F1AD2DFE80AF0278C0419191912FEA4 +:10F69000F7F7EEF9002DDED0606890F868010128D8 +:10F6A00012BF0228FF20FEF7E1F9D4E72DB190F850 +:10F6B0006801022806D0012854D0F7F7D9F94FF095 +:10F6C0000608C8E7FF20FEF7D1F960684FF00C0884 +:10F6D00080F8A161BFE74FF00008002D00F02881FD +:10F6E00090F86811022934D001293BD00329B2D106 +:10F6F000A268D0F86411D37891F81AC0634521D17B +:10F70000137991F81BC063451CD1537991F81CC043 +:10F71000634517D1937991F81DC0634512D1D37910 +:10F7200091F81EC063450DD1137A91F81FC063454F +:10F7300008D1137891F819C0C3F38013634508BF4B +:10F74000012300D0002390F86A0101280ED0DBB11C +:10F75000EAE0FF20FEF78AF960684FF00C0880F8B5 +:10F76000A19178E7FF20FEF781F916E0002B70D118 +:10F7700010461A31FDF7C9FAA068FDF7E4FA61688E +:10F78000D1F864114876CFE097F87A0108287AD04A +:10F7900097F8771181425CD0CAE04FF006085AE72B +:10F7A00090F8751100290CBF4FF0010A4FF0000AC4 +:10F7B0004FF00008A16811F8092BD20907D0497948 +:10F7C00001F0C001402908BF4FF0010B01D04FF0FC +:10F7D000000B90F86811032906D190F861110029F7 +:10F7E00018BF90F87A0101D190F877010090FCF7EA +:10F7F000FEF85FEA00092DD00098FBF7BFFE002855 +:10F8000018BF4FF0010ABBF1000F23D0A06800F130 +:10F8100009014846F7F7C4FE5FEA0008606890F8FF +:10F82000599118BF49F00209606890F868110329DE +:10F8300014D0F7F71DF9002DAFD0F6F73EFF0028E2 +:10F840000CBFB8F1000F484675D000BFFEF70EF9A7 +:10F85000A3E769E0606890F85991E5E7A168D0F8FE +:10F860006401CA78837E9A421FD10A79C37E9A4284 +:10F870001BD14A79037F9A4217D18A79437F9A42F2 +:10F8800013D101E066E053E0CA79837F9A420CD13C +:10F890000A7AC37F9A4208D10978407EC1F3801169 +:10F8A000814208BF4FF0010901D04FF0000997F8DD +:10F8B0007701082806D097F87A11884208BF4FF0E0 +:10F8C000010B01D04FF0000BB8F1000F05D1BAF1D8 +:10F8D000000F04D0F6F7F1FE08B1012000E000208F +:10F8E0004DB197F86A11012903D021B959EA0B01EA +:10F8F00001D0012100E00021084219D0606890F891 +:10F900006A11012908BFB9F1000F0DD1D0F86401C7 +:10F9100000F11A01A068FDF7F8F9A068FDF713FAE5 +:10F920006168D1F8641148764FF00E0893E602E062 +:10F93000F7F79EF831E7606890F86901032818BF6F +:10F9400002287FF42AAFBBF1000F18BFFE207FF41E +:10F950007DAF22E790F87001002818BF002D3FF41A +:10F96000ACAEA068FDF7A4FB30B101287DD0022821 +:10F970007CD0F7F77DF86EE6F7F77AF8606890F8D4 +:10F98000680103283FF409AFA068C17811F03F0F68 +:10F9900005D0027912F0100F18BF012500D1002503 +:10F9A000002D14BF0822012211F03F0F3FF4F5AEE5 +:10F9B000007932EA00017FF4F0AE10F0020F06D0B9 +:10F9C0000120FDF72EFE002808BF012000D00020F6 +:10F9D0008DF800608DF804608DF80860FF27D0B1C5 +:10F9E00002AA694601A8FFF7A7FB606890F8597161 +:10F9F0009DF80000002818BF47F002070BD1A0684F +:10FA0000FDF7AEF980460121A068FDF705FA4146F1 +:10FA1000F6F743FEC0B195B1012003E07401002068 +:10FA2000EC10002000F093F800283FF4B6AE394601 +:10FA30000020FDF71EFE606880F890616CE039469A +:10FA4000002000F06CF8A8E6606890F869010328CF +:10FA500018BF02287FF4A1AE9DF8040000283FF4EF +:10FA60009CAE9DF80000002801E017E032E07FF432 +:10FA700094AE75B14FF0010000F069F800283FF432 +:10FA80008CAEFE210020FDF7F4FD606880F89061E7 +:10FA900042E0FE21002000F042F87EE6F6F7E8FFA3 +:10FAA000A0681821C27812F03F0F3FF476AE0079BB +:10FAB00031EA00007FF471AE012000F048F8002820 +:10FAC0003FF46BAEFF210120FDF7D3FD606880F8A5 +:10FAD000909121E0F6F7CCFF606890F86801032868 +:10FAE0003FF45BAEA0681821C27812F03F0F3FF4DC +:10FAF00054AE007931EA00007FF44FAE012000F0EF +:10FB000026F800283FF449AEFF210220FDF7B1FDA1 +:10FB10006168022081F890014FF003089BE510B561 +:10FB2000FDF7A7FD2448406890F82810002918BF69 +:10FB300010BD012280F8282090F8340010F0080F42 +:10FB400014BF07200620BDE8104001F0DABB70B5F5 +:10FB5000194D06460421A868FDF75EF90446807831 +:10FB60000221B1EB501F18D0686890F82800A0B9A6 +:10FB700000F0CAFF217811F0800F14BF4FF4967186 +:10FB80001E21B4F80120C2F30C0212FB01F10A1A83 +:10FB9000B2F5877F28BF814201D2002070BD68681E +:10FBA0002188A0F8A511A17880F8A7113046BDE8FA +:10FBB000704000F0C6BF000074010020D0F8E010D3 +:10FBC00049B1D0E939231A448B691A448A61D0E9D2 +:10FBD0003712D16003E0F74AD0F8DC101162D0E9A7 +:10FBE000371009B1086170470028FCD000218161FD +:10FBF00070472DE9FF4F06460C46488883B040F217 +:10FC0000E24148430190E08A002500FB01FA94F8A4 +:10FC1000640090460D2822D00C2820D024281ED025 +:10FC200094F8650024281AD000208346069818B15D +:10FC30000121204602F077FE94F8541094F8550004 +:10FC4000009094F8D0200F464FF47A794AB1012AF7 +:10FC500061D0022A44D0032A5DD0FFDFB5E0012045 +:10FC6000E3E7B8F1000F00D1FFDFD24814F8541FCA +:10FC7000243090F83800FCF7FAFF01902078F7F76D +:10FC8000F9FA4D4600F2E730B0FBF5F1DFF82493C6 +:10FC9000D9F80C0001EB00082078F7F7EBFA0146E1 +:10FCA00014F85409022816D0012816D040F6340062 +:10FCB00008444AF2EF010844B0FBF5F10198D9F885 +:10FCC0001C20411A514402EB08000D18012084F851 +:10FCD000D0002D1D78E02846EAE74FF4C860E7E73A +:10FCE000DFF8D092A8F10100D9F80810014300D143 +:10FCF000FFDFB148B8F1000F016801EB0A0506D03B +:10FD0000D9F8080000F22330A84200D9FFDF032011 +:10FD100084F8D00058E094F86420019D242A05D08E +:10FD200094F86530242B01D0252A3AD1B4F8582014 +:10FD3000B4F8F030D21A521C12B2002A31DB94F817 +:10FD4000F22072B3174694F8F32002B110460090E7 +:10FD5000022916D0012916D040F6340049F608527F +:10FD60008118022F12D0012F12D040F63400104417 +:10FD7000814210D9081A00F5FA70B0FBF9F0054479 +:10FD80000FE04846EAE74FF4C860E7E74846EEE789 +:10FD90004FF4C860EBE7401A00F5FA70B0FBF9F0D9 +:10FDA0002D1AB8F1000F0FD0DFF80882D8F808003C +:10FDB00018B9B8F8020000B1FFDFD8F8080000F267 +:10FDC0002330A84200D9FFDF05B9FFDF2946D4F868 +:10FDD000D400F4F7AEFAC4F8D400B060002030705C +:10FDE0004FF0010886F80480204602F089FEABF14E +:10FDF0000101084202D186F8058005E094F8D000A0 +:10FE000001282FD003207071606A3946009A01F0F2 +:10FE100005FBF060069830EA0B0020D029463046FA +:10FE2000FCF798FD87B2204602F06AFEB8420FD870 +:10FE3000074686F8058005FB07F1D4F8D400F4F7EF +:10FE400078FAB06029463046FCF784FD384487B222 +:10FE50003946204602F067FDB068C4F8D40007B008 +:10FE6000BDE8F08F0220CEE72DE9F04106460C46B2 +:10FE7000012001F0BAFAC5B20B2001F0B6FAC0B207 +:10FE8000854200D0FFDF0025082C7DD2DFE804F09A +:10FE90000461696965C98E96304601F0B5FA06219C +:10FEA000F2F704FC040000D1FFDF304601F0ACFAA9 +:10FEB0002188884200D0FFDF94F8D00000B9FFDF2E +:10FEC000204602F03FFA3B4E21460020B560758087 +:10FED000F561FCF7B7FD00F19807606AB84217D9E1 +:10FEE00094F85500F7F7B7F9014694F854004FF429 +:10FEF0007A72022828D0012828D040F6340008441D +:10FF00004AF247310844B0FBF2F1606A0844C51B6D +:10FF1000214600203561FCF795FD618840F2E24200 +:10FF200051439830081AA0F22330706194F855209C +:10FF300094F85410606A01F071FAA0F29310B06165 +:10FF4000BDE8F041F5F7DDB91046D8E74FF4C860D9 +:10FF5000D5E7BDE8F04102F0C2BBBDE8F041F6F7DD +:10FF60004FBF6FF0040001F040FAC4B2192001F055 +:10FF70003CFAC0B2844200D0FFDF304601F044FAC0 +:10FF80000621F2F793FB00E04BE0040000D1FFDF15 +:10FF9000304601F039FA2188884200D0FFDF204640 +:10FFA000BDE8F0410122002101F055BAF6F7C7FD86 +:10FFB000D3E700009812002084010020304601F0B1 +:10FFC00023FA0621F2F772FB040000D1FFDF30466E +:10FFD00001F01AFA2188884200D0FFDF94F8D0009F +:10FFE000042800D0FFDF84F8D05094F8DA504FF6A0 +:10FFF000FF76202D00D3FFDFFB4820F8156094F832 +:020000040002F8 +:10000000DA00F4F776FC00B9FFDF202084F8DA008C +:100010002046FFF7D3FDF5480078BDE8F041E2F750 +:100020007BBFFFDFBDE8F08170B5EF4C0025483C99 +:1000300084F82C50E07868B1E570FEF7DAF92078A2 +:10004000042803D0A06AFFF7B9FDA562E74800784D +:10005000E2F762FFBDE8704001F00EBA70B5E24C05 +:100060000146483C206AF5F77FF96568A27890FB65 +:10007000F5F172B140F27122B5FBF2F292B2E36B8C +:1000800001FB02F6B34202D901FB123200E000226A +:10009000E2634D43002800DAFFDF2946206AF4F7C7 +:1000A00048F9206270BD2DE9F05FFEF7F5F9824650 +:1000B000CD486C3800F1240881684646D8F81C0009 +:1000C000F4F737F90146306AF5F74EF94FF00009B9 +:1000D000074686F839903C464FF423754E461CE09F +:1000E0000AEB06000079F7F7B6F84AF2B1210144AD +:1000F0004FF47A70B1FBF0F108EB8602404692684B +:1001000011448C4207D3641A90F83910A4F5237473 +:10011000491C88F83910761CF6B298F83A00B042BB +:10012000DED8002C0FDD98F83910404608EB81012D +:100130008968A14207D24168C91BA94200D90D466E +:100140006C4288F8399098F83960C3460AEB060883 +:1001500098F80400F7F77FF801464AF2B12001440D +:100160004FF47A7AB1FBFAF298F80410082909D012 +:10017000042909D00020131804290AD0082908D01E +:10018000252007E0082000E0022000EB4000283096 +:10019000F1E70F20401D4FF4A872082913D004295D +:1001A00014D0022915D04FF0080C282210FB0C2087 +:1001B000184462190BEB860302449868D8468242C1 +:1001C0000BD8791925E04FF0400CEFE74FF0100CF9 +:1001D000ECE74FF0040C1822E8E798F8392098F87B +:1001E0003A604046B24210D2521C88F839203C1B7B +:1001F0009868621984180846F7F72DF84AF2B12179 +:100200000144B1FBFAF0011903E080F83990D8F805 +:100210000410D8F82000BDE8F05FF4F78AB82DE9A3 +:10022000FE4F14460546FEF737F9DFF8BCB10290E1 +:10023000ABF1480B58469BF839604FF0000A0BEBC6 +:1002400086018968CBF84010ECB30446007800279B +:10025000042827D0052840D0FFDFA0463946A069F2 +:10026000F4F767F80746F4F763FB81463946D8F898 +:100270000440F5F779F8401E90FBF4F0C143614368 +:100280003846F4F756F80146C8F820004846F5F716 +:100290006BF8002800DDFFDF012088F8140088F8E3 +:1002A00013008FE0D4F81890D4F8048001F04BF9D3 +:1002B000070010D0387800B9FFDF796978684A46BE +:1002C0000844414600E00EE001F029F907464045A8 +:1002D000C3D9FFDFC1E75746BFE7A06A01F0DAF8EC +:1002E00040F6B837B9E7016A0BEB46000191C08DC3 +:1002F00008B35C46DBF81800FFF7B0FE6168206ABF +:10030000F4F717F8074684F839A0019CD846204630 +:10031000DBF81810F5F728F8814639462046F5F73E +:1003200023F8D8F80420B9FBF2F3B0FBF2F08342D3 +:1003300043D0012142E0F4F7FBFAFFF78FFEFFF70D +:10034000B2FE9BF83910DBF804900BEB81010746F5 +:10035000896800913946DBF82000F5F705F800249C +:100360008046484504DB98FBF9F404FB09F41BE0E4 +:10037000002059469BF8392008E000BF01EB8003BC +:1003800004F523749B68401C1C44C0B28242F5D81B +:1003900052B10120F6F75FFF4AF2B12101444FF458 +:1003A0007A70B1FBF0F004440099A8EB04000C1A39 +:1003B00000D5FFDFCBF84040A7E7002188F81410F4 +:1003C00088F813A09BF802005C46B8B13946206A51 +:1003D000F4F7CAFF0146E26B40F2712042438A42C1 +:1003E00006D2C4F840A009E00413002080010020D8 +:1003F000206C511A884200D308462064AF6085F80B +:1004000000A001202871029F94F839003F1DC05DB3 +:10041000F6F721FF4AF23B5101444FF47A70B1FBE9 +:10042000F0F0216CFB300844E8602078042808D103 +:1004300094F8390004EB4000C08D0A2801D2032053 +:1004400000E00220687104EB4600C08DC0B1284670 +:100450006168FCF77FFA82B20020761C0CE000BFD6 +:1004600004EB4003B042D98D114489B2D98501D340 +:10047000491CD985401CC0B294F83A108142EFD291 +:10048000A868A061E06194F8390004EB4000C18DD8 +:10049000491CC18594F83900C05D082803D00428A0 +:1004A00003D000210BE0082100E0022101EB410113 +:1004B00028314FF4A872082804D0042802D002285A +:1004C00007D028220A44042805D0082803D0252173 +:1004D00002E01822F6E70F21491D08280CD0042855 +:1004E0000CD002280CD0082011FB0020216C88427F +:1004F00008D20120BDE8FE8F4020F5E71020F3E789 +:100500000420F1E70020F5E770B5FB4C061D14F858 +:10051000392F905DF6F79FFE4FF47A7100F2E730C5 +:10052000B0FBF1F0D4F8071045182078805DF6F79D +:1005300086FE2178895D082903D0042903D0002292 +:100540000BE0082200E0022202EB420228324FF4C4 +:10055000A873082904D0042902D0022907D028232F +:100560001344042905D0082903D0252202E01823CA +:10057000F6E70F22521D08290AD004290AD00229C1 +:100580000AD0082112FB0131081A281A293070BD3F +:100590004021F7E71021F5E70421F3E7FEB5044613 +:1005A0000F46012000F021FFC5B20B2000F01DFF17 +:1005B000C0B2854200D0FFDF01260025CE48082FBB +:1005C00050D2DFE807F004304747434F4F4C044612 +:1005D000467406744078002819D1FDF75DFF009538 +:1005E00094F839108DF808104188C90410D0606C57 +:1005F000019003208DF80900BF4824388560C5614B +:1006000025746846FDF78AFC002800D0FFDFFEBD98 +:10061000FFF77AFF0190207D10B18DF80950EBE7CC +:100620008DF80960E8E70446407840B1207C08B9BD +:10063000FDF7B4FE6574BDE8FE40F4F783B8A67418 +:10064000FDF779FD0028E2D0FFDFFEBDBDE8FE40EA +:10065000F6F7D6BB2046BDE8FE4000F07DBFBDE802 +:10066000FE40E1E4FFDFFEBDA34950B101228A70E4 +:100670004A6840F27123B2FBF3F202EB0010C86348 +:1006800070470020887070472DE9F05F894640F27E +:100690007121994E484300250446706090462F46CC +:1006A000D0074AF2B12A4FF47A7B0FD0B9F8000094 +:1006B0004843B0600120F6F7CEFD00EB0A01B1FB24 +:1006C000FBF0241AB7680125A4F523745FEA0870CB +:1006D00016D539F8151040F27120414306EB850814 +:1006E0000820C8F80810F6F7B6FD00EB0A01B1FBC8 +:1006F000FBF0241AD8F80800A4F5237407446D1CF5 +:10070000A7421AD9002D18D0391BB1FBF5F0B268F9 +:10071000101AB1FBF5F205FB1212801AB06001202D +:1007200009E000BFB1FBF5F306EB80029468E31A21 +:10073000401CC0B29360A842F4D3BDE8F09F2DE9FD +:10074000F0416D4C00262078042804D0207805283C +:1007500001D00C2066E401206070607C002538B177 +:10076000EFF3108010F0010F72B610D001270FE0E8 +:10077000FDF792FE074694F82400F4F735FC7888DC +:10078000C00411D000210320FDF78BFE0CE00027F0 +:10079000607C38B1A07C28B1FDF700FE6574A574BB +:1007A000F3F7D0FF07B962B694F82400F4F769FEB6 +:1007B00094F82C0030B184F82C502078052800D013 +:1007C000FFDF0C26657000F057FE30462AE44A48E9 +:1007D00010B5007808B1FFF7B2FF00F0EDFE464912 +:1007E00000202439086210BD10B5444C58B10128CE +:1007F00007D0FFDFA06841F66A01884200D3FFDF1F +:1008000010BD40F6C410A060F4E73C4908B508707C +:10081000394900200870487081F82C00C8700874AD +:10082000487488742022886281F824202439487012 +:100830004FF6FF7211F16C0121F81020401CC0B27C +:100840002028F9D30020FFF7CFFFFFF7C0FF1020CB +:10085000ADF80000012269460420FFF715FF08BD2E +:100860007FB5254C05460E46207810B10C2004B00B +:1008700070BD95F8552095F85410686A00F0E3FEB5 +:10088000C5F8E400A56295F8D00000B1FFDF1A4971 +:1008900000202439C86105212170607084F82C0083 +:1008A000014604E004EB4102491CD085C9B294F82A +:1008B0003A208A42F6D284F839003046FFF7D4FE57 +:1008C0000F48F3F7BAFF84F82400202800D1FFDF97 +:1008D000F4F72EF8A06194F8241001226846FFF77F +:1008E0009EFC00B9FFDF94F824006946F4F76AFA29 +:1008F00000B9FFDF0020BAE7BC1200208001002011 +:100900009D050200F84810B5007808B1002010BD20 +:100910000620F1F765FE80F0010010BD38B5F24DFC +:100920000446287800B1FFDF0020009023780246BB +:100930000146DB0705D06088A188ADF800100122D0 +:100940001146491E85F83A106946FFF79DFE0020C2 +:1009500038BD1FB511B1112004B010BDE24C217893 +:1009600009B10C20F8E700226270042121701146C1 +:1009700005E000BF04EB4103491CDA85C9B294F8D5 +:100980003A308B42F6D284F83920FFF76DFED74813 +:10099000F3F753FF84F82400202800D1FFDF00F094 +:1009A000D2FD10B1F3F7C4FF05E0F3F7C1FF40F645 +:1009B000B831F3F7BEFCA06194F824100122684618 +:1009C000FFF72DFC00B9FFDF94F824006946F4F727 +:1009D000F9F900B9FFDF0020BEE770B5C24CA16A8B +:1009E0000160FFF7ACFE050002D1A06AFFF7E6F850 +:1009F0000020A062284670BD7FB5BB4C2178052938 +:100A000001D00C2033E7B8492439C860A06A00B986 +:100A1000FFDFA06A90F8D00000B1FFDFA06A90F875 +:100A2000DA00202800D0FFDFB148F3F706FFA16A03 +:100A30000546202881F8DA000E8800D3FFDFAA4897 +:100A4000483020F81560A06A90F8DA00202800D11C +:100A5000FFDF002301226846A16AFFF7CAF8A06AF7 +:100A6000694690F8DA00F4F7ADF900B9FFDF00202D +:100A7000A062FCE69C4924394870704710B540F2EA +:100A8000E24300FB03F4002000F0DDFD844201D9C5 +:100A9000201A10BD002010BD70B50D460646014657 +:100AA0000020FBF7CFFF044696F85500F6F7D3FB7E +:100AB000014696F854004FF47A72022815D00128A6 +:100AC00015D040F6340008444AF247310844B0FBE0 +:100AD000F2F1708840F271225043C1EB4000A0F265 +:100AE0002330A54206D2214605E01046EBE74FF43D +:100AF000C860E8E72946814204D2A54201D22046D7 +:100B000000E02846706270BD70B5F5F7D9FC044668 +:100B1000F6F795FB01467448243882684068101A3D +:100B20000E18204600F058FC05462046F6F793FBC9 +:100B3000281A4FF47A7100F2E730B0FBF1F030443C +:100B400070BD70B50546FDF7A7FC674900782439EC +:100B50008C689834072D2CD2DFE805F0043030255E +:100B60002830300014214FF4A873042810D0082234 +:100B7000082809D02A2102280FD011FB02400022A8 +:100B80002823D118441815E0402211FB0240F8E751 +:100B9000102211FB02402E22F3E7042211FB024037 +:100BA00000221823EDE704F5317403E004F5B07476 +:100BB00000E0FFDF4C48006CA04201D9012070BD6D +:100BC000002070BD70B5484C243C607870B1D4E909 +:100BD00004512846A268FBF7F1FE2061A84205D027 +:100BE000A169401B0844A061F4F78BFB2169A06850 +:100BF000884201D8207808B1002070BD012070BD66 +:100C00002DE9FF47074615460E461C461846F6F7DF +:100C100016FB07EB46014618204600F0DDFB4AF2C2 +:100C2000C5714FF47A790144C846B1FBF8F0064427 +:100C30002D4860362438806800EB050A2046F6F718 +:100C4000FEFA371A204600F0C7FB05462046F6F7A5 +:100C500002FB291AB1FBF8F0A7EB000C18200225C3 +:100C60004FF4C8714FF4BF724FF02808082C2ED0F3 +:100C7000042C29D00027022C2CD0082317F1280798 +:100C800003EB830307EB83039C440023082C31D040 +:100C9000042C22D00027022C32D040464FF0080806 +:100CA00007F5B07708EB08184044874235D2082C86 +:100CB0002DD0042C28D00020022C2BD0082728303F +:100CC00007EB0717384436E017461023D8E70F46DE +:100CD0004023D5E704231837D2E7104640F2EE3719 +:100CE0004FF01008DEE70000BC1200209D05020056 +:100CF00069FE010008464FF435674FF04008D1E720 +:100D00004FF00408B437CDE710461027D8E708465F +:100D10004027D5E704271830D2E7082C46D0042C0A +:100D200041D00027022C44D008202837C0EBC0084F +:100D300008EB401038446044082C40D0042C3BD0D1 +:100D40000021022C3DD0082211F1280102EB821271 +:100D500001EB8201471801208DF804008DF8055041 +:100D6000FF4D8DF80030514607F22727E869F3F769 +:100D7000E0FACDE902072046F6F76DFA4AF23B5158 +:100D80000144B1FBF9F0381AFB38286402986E640C +:100D9000E86195F824006946F4F714F8002800D1BA +:100DA000FFDFBDE8FF8717461020BFE70F46402052 +:100DB000BCE704201837B9E711461022C6E74022E5 +:100DC000C4E704221831C1E72DE9FE4F04461D4651 +:100DD000174688464FF001091846F6F730FADFF853 +:100DE00080B30146ABF1240B07EB4802DBF80800A7 +:100DF0005E46204410440F18284600F0EDFA00F635 +:100E0000FB014FF47A7AB1FBFAF0384400F1200884 +:100E10002846F6F714FAB2680146A8EB0200001B58 +:100E2000461A284600F0D8FA07462846F6F713FA7D +:100E3000391AB1FBFAF0A6EB000C182028274FF462 +:100E4000C8714FF4BF72082D2CD0042D27D0002676 +:100E5000022D2AD00823283603EB830306EB8303F5 +:100E60000CEB0306082D28D0042D21D00023022DE1 +:100E700028D03846082703F5B07300BF07EB0717E3 +:100E8000384483422AD2082D22D0042D1DD00020C0 +:100E9000022D20D00823283003EB03132CE0164644 +:100EA0001023D9E70E464023D6E704231836D3E7AC +:100EB000104640F2EE331027E0E708464FF4356362 +:100EC0004027DBE70427B433D8E710461023E3E7D5 +:100ED00008464023E0E704231830DDE7082D47D01B +:100EE000042D42D00020022D45D0082310F1280007 +:100EF000C3EBC30707EB431318443044082D40D01D +:100F0000042D3BD00021022D3DD0082211F12801F3 +:100F100002EB821201EB8201451805F596750C98DB +:100F2000F6F799F94AF23B510144B1FBFAF08C4EC5 +:100F3000FB3004F1FB02316C5F460844DBF808101B +:100F40004B191A44824228D9621911440D1AFB35F3 +:100F5000E1F79CFEB968084461190844B0F1807F4C +:100F600036D2642D12D2642011E010461023BFE760 +:100F700008464023BCE704231830B9E71146102285 +:100F8000C6E74022C4E704221831C1E72846F4F737 +:100F900012FAE8B1306C28443064E1F777FEB968A2 +:100FA000293821440844CDE9000896F839008DF825 +:100FB000080002208DF809006846FCF7AFFF00B179 +:100FC000FFDFFDF7B8F800B1FFDF4846BDE8FE8F50 +:100FD0004FF00009F9E71FB500F03BFB604C60786B +:100FE00080B994F8241000226846FFF718F938B148 +:100FF00094F824006946F3F7E5FE18B9FFDF01E035 +:101000000120E070F3F79EFB00206074A0741FBD08 +:101010002DE9F84FFDF740FA0646451CC078400917 +:101020000AD001280AD000202978824608064FF409 +:10103000967405D41E2004E00120F5E70220F3E7B2 +:101040002046B5F80120C2F30C0212FB00F7C809D4 +:1010500001D010B103E01E2401E0FFDF0024FFF700 +:1010600053FDA7EB00092878B77909EB0408C0F312 +:10107000801010B120B1322504E04FF4FA7501E080 +:10108000FFDF00250C2F00D3FFDF3648364A30F84B +:101090001700291801FB0821501CB1FBF0F5F5F7EA +:1010A0000FFAF6F7D8F84FF47A7100F27160B0FBDE +:1010B000F1F1A9EB0100471BA7F15900103FB0F572 +:1010C000237F11D3264E717829B90246534629460B +:1010D0002046FFF795FD00F0BCFAF3F733FB002044 +:1010E0007074B074BDE8F88F307800905346224693 +:1010F00029463846FFF768FE0028F3D10121022077 +:10110000FDF7CFF9BDE8F84F65E710B504460129B2 +:1011100003D113482438007830B1042084F8D0007B +:10112000BDE81040F3F70EBB00220121204600F07D +:1011300092F934F8580F401C2080F1E72DE9F04176 +:101140000746FDF7A9F9050000D1FFDF29783846E9 +:10115000FBF78DFD024C0146A4F12406E06905E091 +:10116000BC120020285202003F420F00B268024425 +:101170006FB32878082803D0042803D000270BE099 +:10118000082300E0022303EB430728374FF4A8733A +:10119000082804D0042802D0022810D028233B4479 +:1011A00008280ED004280ED002280ED05FF00800C8 +:1011B000C0EBC00707EB40101844983009E0182333 +:1011C000EDE74020F4E71020F2E70420F0E74FF4C9 +:1011D000FC701044471828783F1DF6F73CF802468B +:1011E00028784FF47A7102281DD001281DD040F6CE +:1011F000340010444AF2EF021044B0FBF1F03A1A06 +:10120000A06A40F2E241B0464788D0304F43316A8D +:1012100081420DD03946606B00F081F90646B84234 +:1012200007D9FFDF05E00846E3E74FF4C860E0E7D1 +:101230000026FA488068864207D2A16A40F27122ED +:101240004888424306EB420604E040F2E240B6FB27 +:10125000F0F0A16AC882A06A297880F85410297831 +:1012600080F8551005214175C08A6FF41C71484300 +:1012700006EB400040F63541C8F81C00B0EB410FCA +:1012800000D3FFDFBDE8F08110B5052937D2DFE8D4 +:1012900001F00509030D3100002100E00121BDE846 +:1012A000104032E7032180F8D01010BD044640887A +:1012B00040F2E2414843D949091D0860D4F8F800DA +:1012C0000089E082D4F8F80080796075D4F8F800DD +:1012D00040896080D4F8F8008089A080D4F8F800B4 +:1012E000C089E0802046A16AFFF7D6FB022084F87F +:1012F000D00010BD816ABDE81040FFF7CDBBFFDF15 +:1013000010BD70B5C64C0928A1683FD2DFE800F0D7 +:10131000050B0B15131538380800BDE870405AE668 +:10132000BDE8704074E6022803D00020BDE870409C +:1013300004E70120FAE7E16070BD032802D0052828 +:101340001CD000E0E160002600F083F9B44D0120DC +:10135000243585F82C0085F83860A86AE9690026EC +:10136000C0F8D41080F8D060E068FFF745FB00B10A +:10137000FFDFF3F7E7F96E74AE7470BD0126E3E7A3 +:10138000A6480078BDE87040E1F7C6BDFFDF70BD3C +:10139000A3494860704770B5A14D0446B1B14FF400 +:1013A0007A76012903D0022905D0FFDF70BD1846E7 +:1013B000F5F77BFF05E06888401C68801046F5F76C +:1013C00059FF00F2E730B0FBF6F0201AA86070BDBC +:1013D0009348243000787047082803D0042801D0AF +:1013E000F5F739BF4EF628307047002804DB00F1CE +:1013F000E02090F8000405E000F00F0000F1E0208C +:1014000090F8140D4009704710B50446202800D309 +:10141000FFDF83486C3030F8140010BD70B505460E +:101420000C461046F5F717FF4FF47A71022C0DD0D9 +:10143000012C0DD040F6340210444AF247321044D9 +:10144000B0FBF1F0284400F2931070BD0A46F3E7B8 +:101450004FF4C862F0E71FB513460A46044601463A +:101460006846FEF7C6FB94F8DA006946F3F7AAFC73 +:10147000002800D1FFDF1FBD70B5694C0025243462 +:10148000257094F82400F3F734FA00B9FFDF84F8EC +:10149000245070BD2DE9F041050000D1FFDF604A06 +:1014A0000024D5F8E4602046631E116A08E08869CC +:1014B000B04203D3984201D203460C460846C9689D +:1014C0000029F4D104B904460021C5F8E040D03524 +:1014D000CCB1E068E560E86000B105612E6988463E +:1014E000A96156B1B06930B16F69B84200D2FFDF6F +:1014F000B069C01BA861C6F81880494D24355CB19D +:10150000207820B902E0E9601562E7E7FFDF616952 +:10151000606808446863B5E6C5F83480B2E610B583 +:101520000C4601461046F3F71FFF002806DA211A81 +:10153000491EB1FBF4F101FB040010BD90FBF4F176 +:1015400001FB140010BD3648016A002001E0084686 +:10155000C9680029FBD170477FB504466FF00400CD +:10156000FFF743FFC5B21920FFF73FFFC0B2854226 +:1015700000D0FFDFFCF790FF4088C00407D00121B6 +:101580000320FCF78EFF25480078E1F7C5FC002218 +:1015900021466846FEF743FE38B169462046F3F718 +:1015A00011FC002800D1FFDF7FBD1D49012024313F +:1015B000C870FEF739FD7FBD2DE9FE43184D0120AF +:1015C000287000264FF6FF7420E00621F1F76EF830 +:1015D000070000D1FFDF97F8DA00D037F3F751FFAB +:1015E00007F80A6BA14617F8DA89B8F1200F00D383 +:1015F000FFDF0B4A6C3222F8189097F8DA00F3F705 +:1016000078F900B9FFDF202087F8DA006946062064 +:10161000F0F7D5FF78B1FFDF0DE00000800100207A +:1016200098120020029830B190F8D01019B10088BB +:10163000A042CAD104E06846F0F79FFF0028F1D02D +:101640002E70BDE8FE8310B5FFF7E8FE00F5C87008 +:1016500010BD0548002190F8392000EB4200C185FB +:1016600002480078E1F758BCBC120020800100203D +:10167000F4490C28896881F8CB001ABF1328182870 +:1016800070474FF00002112810D0072808BF70479C +:1016900015280BD001281ABF002802287047A1F88E +:1016A00084204FF0010081F888007047A1F88A205B +:1016B000704770B5E34CA1680A88A1F83E2181F813 +:1016C0003C0191F85400012808BF012503D00228ED +:1016D00014BFFFDF0225A06880F8405190F8550044 +:1016E000012808BF012503D0022814BFFFDF02250F +:1016F000A068012180F8415180F83A11002180F85A +:101700000E11E078BDE87040E1F706BCCD4A012932 +:1017100092681BD0002302290FD0032922D030B3B6 +:1017200001282FD0032818BF704792F864001328AF +:101730001CBF1628182805D1704792F8CB00002846 +:1017400008BF7047D2F8F8000370704792F8CB00DA +:10175000012808BF704700BFD2F8FC000178491E7D +:101760000170704792F8CB000328EBD17047D2F894 +:10177000F800B2F858108288891A09B20029A8BF67 +:1017800003707047B2F85800B2F80211401A00B264 +:101790000028E1DA70472DE9F041AA4C0026032722 +:1017A000D4F808C0012590B12069C0788CF8CA002F +:1017B00005FA00F010F4000F08BFFFDFA06880F802 +:1017C0006470A0F8846080F88850BDE8F081002340 +:1017D0009CF8652019460CF15800FBF751F80028D9 +:1017E00004BF6570BDE8F0816078002818BFBDE8CF +:1017F000F0812069C178A06880F8C91080F8657010 +:10180000A0F88A6080F88C50BDE8F08170B58D4CEE +:1018100084B0207910F0010F04BF04B070BD2069BE +:1018200000230521C578A06890F864205830FBF7A4 +:1018300027F8002818BF062D09D026DC022D1CBF72 +:10184000042D052D03D0607840F0080060706078AA +:1018500000281CBF04B070BD2069FBF7C3FC002842 +:1018600000F01B832069C078801E162880F0158345 +:10187000DFE800F011F18CB0DF2FF1F0F17FEFDC49 +:10188000F1F1F1CFEEEDECEBEAE70B2D1CBF0D2DE6 +:10189000112DD8D1DBE7A0684FF000034FF0010114 +:1018A00090F8672000F15800FAF7EAFF002840F0AE +:1018B00067832069FBF7FAFCA16881F8F60007202E +:1018C00081F86700002081F88C0081F8880000F022 +:1018D00057BBA0680921002390F864205830FAF71C +:1018E000CFFF18B120690079122812D0A0680A2110 +:1018F000002390F864205830FAF7C2FF18B120692D +:10190000007914281DD020690079162840F038830A +:1019100021E0A0680125002390F8642009215830B7 +:10192000FAF7AEFF002808BF657000F029836078E1 +:10193000002840F02583A16881F87C0081F88800A8 +:1019400044E0A168002081F86400A1F8840081F8D7 +:10195000880000F045BAA06890F864101F2940F094 +:101960000F83002180F8641080F888101A2000F09E +:1019700005BBA06890F864100F295FD16178002939 +:1019800040F0FE8280F8691012213EE0A06890F8D5 +:101990006410132952D16178002940F0F182D0F807 +:1019A000F81000884988814218BFFFDFA068D0F88E +:1019B000F80000F126012069FBF7A5FCA06800F102 +:1019C000C4012069FBF7A7FCA168162081F8640018 +:1019D00000F0D6BAA26892F8640016282ED160787A +:1019E000002840F0CD82D2F8F80002F1B00300F1F7 +:1019F0001E0100220E30FAF7BDFEA0680021C0E9EA +:101A00002811012180F86910182180F8641000F075 +:101A1000B7BA2069FBF7FFFC032840F0B1822069C8 +:101A2000FBF7FDFC01F0DAFB00F0AABA20690079AF +:101A3000F8E7A06890F864101A290DD0022000F091 +:101A4000D6B95AE28C010020D3E19FE140E10EE1DA +:101A500023E14DE0BEE0C6E16178002940F09082CC +:101A6000002580F88D5080F88850D0F8F810008854 +:101A70004988814218BFFFDFA068D0F8F8100D70C8 +:101A8000D0F844110A78002A18BFFFDF2BD190F854 +:101A90008E207AB180F88E500288CA80D0F8441126 +:101AA0000D71D0F844210E211170D0F84421018825 +:101AB000518010E00288CA80D0F844110D71D0F82E +:101AC000442101211172D0F844210D211170D0F868 +:101AD0004421018851800088F0F71AFFF0F7B2FB2B +:101AE000E078E1F719FAA06880F8645000F048BA8D +:101AF000A0680023194690F865205830FAF7C0FE18 +:101B000048B9A0680023082190F864205830FAF7FB +:101B1000B7FE00287ED06078002840F03182A068AF +:101B200090F8900010F0020F14D12069FBF7F6FB3B +:101B3000A16881F891002069B0F80520A1F89220F1 +:101B4000B0F80700A1F8940091F8900040F002006E +:101B500081F89000A06890F8901011F0010F12D158 +:101B600090F86520002319465830FAF789FE0028BE +:101B700008BFFFDF0121A06880F8651080F88C1095 +:101B80000021A0F88A10A06890F86410012907D1FC +:101B9000002180F8641080F88810E078E1F7BCF943 +:101BA000A168D1F8F800098842888A4204BF017808 +:101BB000042940F0E5814FF000050570E078E1F779 +:101BC000ABF9A06890F86410002908BF80F888502D +:101BD00000F0D6B9A0680023072190F8642058309F +:101BE000FAF74EFEB0B16078002840F0C98102A932 +:101BF0002069FBF7CDFB9DF80800002500F02501CA +:101C0000A06880F896109DF8091001F0410180F855 +:101C1000971000E04EE080F88850D0F8F810008867 +:101C20004988814218BFFFDFA068D0F8F8100D7016 +:101C3000D0F844110A78002A18BFFFDF7FF453AFB1 +:101C40000288CA80D0F844110D71D0F84411029A6C +:101C50008A60039ACA60D0F8442108211170018873 +:101C6000D0F844014180E078E1F756F93BE7A068FD +:101C70000023092190F864205830FAF701FEC8B11A +:101C80006078002840F07C81A16881F87C0081F8B0 +:101C9000880081F8640000F073B9A0680023194639 +:101CA00090F865205830FAF7EBFD18B1607818B15C +:101CB00000F066B901209AE0A0680021A0F88A101F +:101CC000012180F88C10022180F8651000F058B9CD +:101CD000A0680023194690F865205830FAF7D0FD27 +:101CE00088B32069FBF73EFB00287CD0A5682069FB +:101CF000FBF734FB2887A5682069FBF72BFB688777 +:101D0000A5682069FBF72CFBA887A5682069FBF76D +:101D100023FBE887A06890F864101C2913BF90F893 +:101D20004E10012180F84E10012907D090F80511BE +:101D3000002904BF90F80411002905D04FF01E01BE +:101D400080F865101AE04FE04FF01D0180F8651033 +:101D50000288A0F82A21028FA0F82C21428FA0F837 +:101D60002E21828F00F58A71A0F83021C08FC883A0 +:101D70004FF001000875E078E1F7CEF8A068002187 +:101D8000A0F88A10012180F88C10F9E0A0680023E7 +:101D90000A2190F864205830FAF772FD20B32069C8 +:101DA000FBF7E0FAA8B1A5682069FBF7D7FA288706 +:101DB000A5682069FBF7CEFA6887A5682069FBF75C +:101DC000CFFAA887A5682069FBF7C6FAE88700F074 +:101DD000FEFEA068002180F8881080F8641000BF23 +:101DE00000F0C6FECCE058E0607840F00100607082 +:101DF000C6E0A0680023194690F865205830FAF72D +:101E00003FFD00283FF456AFA06890F864002328F7 +:101E100012BF2428607840F02000E8D06846F5F72B +:101E200052FB002808BF002104D0009802A9C07806 +:101E30008DF80800A06801AB162290F86400FAF74C +:101E4000FAFE88B1A0689DF80420162180F8EC20E5 +:101E500080F8ED10192180F86510012180F88C10B0 +:101E60000021A0F88A108BE02069FBF796FAA0B158 +:101E70002169087900F00702A06880F850204979AC +:101E800001F0070180F8511090F80F31002B04BFCA +:101E900090F80E31002B05D024E04FF00000FFF742 +:101EA0007AFC6DE090F855C000F15403944501BFF1 +:101EB0001A788A42012180F87D1013D00288A0F898 +:101EC000362190F8502000F58A7180F8382190F87A +:101ED000510081F825004FF0010081F82000E078E2 +:101EE000E1F71AF8A068212180F86510012180F837 +:101EF0008C100021A0F88A1042E0A06890F86400DD +:101F00001F287FF471AF2069FBF751FA88B320696D +:101F1000A2680179407901F0070161F307052946BC +:101F200000F0070060F30F21012082F888000025EF +:101F3000A2F88450232082F86400566DD2F8100174 +:101F4000FAF731FEF2B2C1B28A4207BFA16881F846 +:101F5000F250A26882F8F210C6F30721C0F30720FE +:101F6000814219BFA16881F8F300A06880F8F3509E +:101F700006E0FFE70120FFF70EFC1E20FFF799FBAC +:101F8000A068D0E92A12491C42F10002C0E92A12D5 +:101F900004B070BD2DE9F047FE4D04464FF0000738 +:101FA000687808436870287910F0200F2846806808 +:101FB00018BFA0F87E7004D1B0F87E10491CA0F8BC +:101FC0007E1090F86A10012639B990F86420002339 +:101FD00006215830FAF754FC58B3A88810F4006F63 +:101FE00007D0A86890F86A10002918BFA0F876708A +:101FF0001FD1A868B0F87610491C89B2A0F87610F5 +:10200000B0F878208A422CBF511A00218288521DD4 +:102010008A4228BF80F87C60B0F87610B0F878204B +:10202000914206D3A0F8767080F81A61E878E0F75C +:1020300073FF287910F0600F08D0A86890F8681036 +:1020400021B980F868600121FFF71EF94FF00808F8 +:10205000002C56D16878002851D1287910F0040F4F +:102060000DD0A86890F86400032808BFFFDFA868B7 +:1020700090F86710072904BF2E7080F8677001F090 +:10208000FEF8287910F0080F19D06878B8B9A86858 +:10209000002190F8CB00FFF739FBA86890F8CB003F +:1020A000FE2808BFFFDFFE21A86880F8CB1090F85B +:1020B0006710082903D10221297080F86770FFF7A3 +:1020C000A5FBA87810F0080F16D0A86800230521FA +:1020D00090F864205830FAF7D3FB50B185F80180AE +:1020E000A868D0F8441108780D2808BF00200870AF +:1020F00002E00020F8F7B8FFA86800F0F8FF00F051 +:10210000B0FDA868A14600F1580490F8F40030B979 +:10211000E27B002301212046FAF7B2FB10B1608D6B +:10212000401C60853D21B9F1000F18D128780228A4 +:1021300008BF16200ED0012804BFA86890F8F6004A +:1021400008D06878E8B110F0140F1CBF1E2020776B +:1021500002D005E0207703E010F0080F02D02177CD +:10216000E67641E010F0030F03D02A202077E676D0 +:102170003AE010F0200F08BFFFDF23202077E6763B +:1021800032E094F8300028B1A08D411CA185E18D8A +:10219000884213D294F8340028B1608E411C6186C5 +:1021A000E18D88420AD2618D208D814203D3AA68D5 +:1021B00092F8F42012B9E28D914203D322202077C5 +:1021C000E67611E0217C31B1E18C814228BF84F8B0 +:1021D0001C80C5D206E0E08C062803D33E20207781 +:1021E000E67601E0E07EA0B12773677327740221D1 +:1021F000A868FFF749F8A86890F8CB10012904D126 +:10220000D0F8FC000178491E0170E878E0F784FE00 +:1022100003E00021A868FFF737F8BDE8F047F5F7BD +:1022200061B95C4A51789378194314D11146012859 +:10223000896809D0107910F0040F03D091F8670075 +:10224000072808D001207047B1F84800098E88425D +:1022500001D8FEF7B7BC0020704770B54D4C06465C +:102260000D46A0883043A08016F0020F04D016F06F +:10227000010F18BFFFDFE56016F0010F18BF2561E1 +:1022800016F0020F10D0E878062802D00B2837D0BD +:102290000AE0A06890F86410182905D10021C0E96F +:1022A0002A11012180F86A1016F0800F1CBF082047 +:1022B000A07016F4806F08BF70BDA268B2F8580015 +:1022C00091880844801DE97880B2012908BFA2F8EE +:1022D000020107D0002904BFD2F8F810888001D08D +:1022E000182915D0E978284601291CD011B31829DE +:1022F00018BF70BDB2F8F010BDE87040FBF769B8C8 +:10230000A06890F86410122908BF0021CCD1C9E759 +:1023100092F8F210002902BF92F8F3100029002071 +:10232000A2F8F000DEE7B2F8021141724FEA112183 +:10233000A97270BDD2F8F810898841734FEA112153 +:10234000A97370BDF0B5134C85B00026A060A680BF +:102350006670A670054626700088F5F78BF8A068B1 +:102360000088F5F7ADF8B5F8D800A168401C82B236 +:1023700001F15800FAF77AF8002818BFFFDF95F846 +:10238000650024280DD1B5F85810B5F8F000081AEA +:1023900000B201E08C0100200028A4BF6078002872 +:1023A00006D095F86400242818BF25283BD119E0F1 +:1023B000A06890F8F210002908BF90F8541080F837 +:1023C000541090F8F310002908BF90F8551080F8C9 +:1023D00055100020FFF76DF985F86560A16881F858 +:1023E0007D6020E0B5F85810B5F8F000081A00B28A +:1023F0000028A4BF6078002815D1A06890F8F210DA +:10240000002908BF90F8541080F8541090F8F31089 +:10241000002908BF90F8551080F855100020FFF7EC +:1024200048F985F86460A5F8D860A06890F888102D +:1024300039B1B0F88410B0F88620914224BF05B0BD +:10244000F0BD90F88C1039B1B0F88A10B0F8862041 +:10245000914224BF05B0F0BDB0F88220B0F88010E2 +:102460008A4224BF05B0F0BD90F868209AB3B0F856 +:102470007E208A4224BF05B0F0BD00BF90F8CB702B +:10248000FE2F00F013816846F4F7F7FF002808BF1D +:10249000FFDF2221009802F0B4FB03210098FAF735 +:1024A00089FE0098017821F0100101703946FAF791 +:1024B000A6FE192F80F0D880DFE807F02820144608 +:1024C000D6D6D71A71D6D7D764D6D6D6D6C9D7D747 +:1024D0007B94ADD6B600B0F87E10062924BF05B0B7 +:1024E000F0BDCBE7A168009891F8F5100171BCE050 +:1024F000A068009990F8CC000871B6E0A068D0F808 +:10250000FC00411C0098FAF7C6FEAEE0A1680098F6 +:10251000D1F8F82092790271D1F8F820128942712D +:10252000120A8271D1F8F8205289C271120A02721D +:10253000D1F8F82092894272120A8272D1F8F8100A +:10254000C989FAF77FFE90E0A068D0F8F800011D75 +:102550000098FAF7ADFEA068D0F8F80000F10C0181 +:102560000098FAF7AFFEA068D0F8F80000F11E015D +:102570000098FAF7ADFEA06800F1C0010098FAF7E4 +:10258000B5FE72E06269009811780171918841711D +:10259000090A81715188C171090A017265E0FD491A +:1025A000D1E90001CDE9020102A90098FAF7B8FECD +:1025B0005BE0A068B0F844100098FAF7BBFEA06892 +:1025C000B0F846100098FAF7B9FEA068B0F84010CD +:1025D0000098FAF7B7FEA068B0F842100098FAF732 +:1025E000B5FE42E0A068B0F840100098FAF7AAFEE5 +:1025F000A068B0F842100098FAF7A8FEA068B0F8FA +:1026000044100098FAF796FEA068B0F846100098BB +:10261000FAF794FE29E0A168009891F81021027160 +:1026200091F81111417120E0A06890F8F300FAF7D9 +:10263000B5FA01460098FAF7C8FEA06890F8F200D3 +:10264000FAF7ACFA01460098FAF7BBFE0DE0A06875 +:1026500090F8ED100098FAF7DCFEA06890F8EC1006 +:102660000098FAF7DAFE00E0FFDFF4F719FF002820 +:1026700008BFFFDF0098C178012903D049B11829AC +:102680000FD013E0A168B1F802114172090A8172FA +:102690000CE0A168D1F8F81089884173090A8173A8 +:1026A00004E0A168B1F8F010FAF793FEBA48009080 +:1026B000BA4BBB4A29463046F8F724FCA0680023F1 +:1026C000052190F864205830FAF7DAF8002804BFA2 +:1026D00005B0F0BD05B0BDE8F040F8F7ECB9B14881 +:1026E000806890F8881029B1B0F88410B0F886207E +:1026F000914219D290F88C1029B1B0F88A10B0F834 +:102700008620914210D2B0F88220B0F880108A4220 +:102710000AD290F86820B0F87E001AB1884203D23D +:10272000F8F77EBC0628FBD30020014632E470B5E2 +:102730000C46064615464FF4A471204602F083FA73 +:102740002680002D08BFFFDF2868C4F8F8006868FD +:10275000C4F8FC00A868C4F8440170BDF0F7AFB835 +:102760002DE9F0410D4607460621EFF79FFF041EB5 +:1027700008BFBDE8F081D4F844110026087858B1AC +:102780004A8821888A4207D1092810D00E281DD0F6 +:102790000D2832D008284CD094F81A01002857D0C0 +:1027A0006E701020287084F81A61AF803EE06E7061 +:1027B00009202870D4F84401416869608168A960E3 +:1027C0008089A881D4F8440106702FE00846F0F70C +:1027D0009FF80746EFF74BFDB0B96E700E202870DA +:1027E000D4F8440140686860D4F844010670384663 +:1027F000EFF737FD0120BDE8F0810846F0F788F8D3 +:102800000746EFF734FD10B10020BDE8F0816E708F +:102810000D202870D4F8440141686960008928813E +:10282000D4F8440106703846EFF71BFD0120BDE8DF +:10283000F0816E7008202870D4F8440141688268E5 +:10284000C0686960AA60E860D4F844010670EDE7EA +:1028500094F81C01B0B16E701520287094F81C011A +:102860000028E3D084F81C61D4F81E016860D4F815 +:102870002201A860B4F82601A88194F81C01002860 +:10288000F0D1D3E794F8280170B16E701D20287044 +:1028900084F82861D4F82A016860D4F82E01A86071 +:1028A000B4F83201A881C1E794F8340140B16E70E8 +:1028B0001E20287084F83461D4F836016860B5E7CA +:1028C00094F8140180B16E701B20287094F81401E4 +:1028D0000028ABD084F81461D4F81601686094F82D +:1028E00014010028F6D1A1E794F83A01002808BFA6 +:1028F000BDE8F0816E701620287094F83A01002827 +:1029000094D000BF84F83A61D4F83C016860B4F810 +:102910004001288194F83A010028F3D186E7214A42 +:102920005061D17070472DE9F0470446481E85B2CA +:1029300038BFBDE8F08704F108080126DFF864908D +:102940004FF0090A5FF00007B4F8D800401CA4F863 +:10295000D800B4F87E00401CA4F87E0094F86A0009 +:1029600040B994F864200023062104F15800F9F7D7 +:1029700087FF30B3B4F87600401C80B2A4F876002C +:10298000B4F8781081422CBF0A1A0022A3885B1D7C +:10299000934209E040520200951F020023220200E8 +:1029A0005B2202008C01002028BF84F87C608842F2 +:1029B00007D3A4F8767084F81A6199F80300E0F759 +:1029C000ABFA94F8880020B1B4F88400401CA4F855 +:1029D000840094F88C0020B1B4F88A00401CA4F85C +:1029E0008A0094F8F40040B994F86720002301218C +:1029F00004F15800F9F744FF20B1B4F88200401CFC +:102A0000A4F8820094F864000C2802D00D2820D08D +:102A100067E0B4F85800411CB4F80201814260D16B +:102A2000D4F8FC00411C404602F021FA0221204665 +:102A3000F9F73FFCD4F8FC000078002808BFFFDF5E +:102A40000121FE20FEF762FE84F8647084F898602D +:102A500047E0B4F85800411CD4F8F800808881425F +:102A60003FD1D4F844010178002918BFFFDF22D1FB +:102A70002188C180D4F8F8004189D4F8440101814B +:102A8000D4F8F8008189D4F844014181D4F8F800E1 +:102A9000C189D4F844018181D4F844010771D4F884 +:102AA000440180F800A0D4F844012188418099F8BD +:102AB0000300E0F731FA01212046F9F7FAFB032180 +:102AC0002046FEF7E1FBD9F80800D0F8F8000078BE +:102AD000022818BFFFDF0221FE20FEF717FE84F850 +:102AE0006470B4F85800401C691EA4F858008DB2F8 +:102AF000BFF42AAFBDE8F087FA4AC2E90601704781 +:102B000070B50446B0F87E0094F86810002908BF3C +:102B1000C0F1020503D0B4F88010081A051F94F81C +:102B20007C0040B194F864200023092104F158008E +:102B3000F9F7A6FEA0B1B4F8766094F86A0058B927 +:102B400094F864200023062104F15800F9F798FE58 +:102B5000002808BF284603D0B4F87800801B001F67 +:102B6000A842D8BF0546002DD4BF0020A8B270BD32 +:102B7000042110B5DB4CA068FEF786FBA06890F836 +:102B80004E10012902BF022180F84E1010BD00F541 +:102B90008A710288A0F81E21028EA0F82021828E60 +:102BA000A0F82221028FB0F844309A4228BF1A467A +:102BB0000A82828FB0F84600824238BF10464882AF +:102BC00001200872E078BDE81040E0F7A5B9C548DB +:102BD00030B4806890F84E30B0F832C0C48EB0F88F +:102BE0004010428F022B25D08A4238BF1146018601 +:102BF000C28FB0F842108A4238BF11468186028FD8 +:102C0000B0F844108A4238BF11464186828FB0F82E +:102C100046108A4238BF1146C186418E614588BF41 +:102C20008C46A0F832C0C18EA14288BF0C46C48633 +:102C300030BC7047038E9A4228BF1A46C58F838ED8 +:102C40009D4238BF2B468A4238BF11460186B0F8F4 +:102C500042108B4228BF0B468386002180F84E101D +:102C6000CDE770B59F4CA06890F8CB10FE2906BF49 +:102C70006178002970BD90F867204FF000034FF095 +:102C8000010100F15800F9F7FBFD002818BF70BDE5 +:102C9000A06890F8F41021B1BDE870400220FEF762 +:102CA000E7BC90F86420002319465830F9F7E8FD96 +:102CB00040B1A06890F87C0020B1BDE870401220BF +:102CC000FEF7D6BCA068002590F86420122A1FD019 +:102CD00004DC032A3FD0112A1FD003E0182A35D084 +:102CE000232A43D0002304215830F9F7C9FD0028D6 +:102CF00018BF70BDD4F808C09CF8650019286ED0C4 +:102D00003BDC01286ED002287AD003285DD038E061 +:102D1000BDE870400B20FEF7ABBCF2F7DFFE0C28DD +:102D200038BF70BDA0680821D0F8F8001E30F2F757 +:102D3000D9FE28B1A0680421C030F2F7D3FE00B953 +:102D4000FFDFBDE870400320FEF792BCBDE8704095 +:102D50000620FEF78DBC90F8CA1080F8CC10072032 +:102D6000FEF786FCA06880F8645070BD1820FEF75E +:102D70007FFCA068A0F8845070BD1E2848D0212890 +:102D80006CD0DCF8F80001260178002974D0408866 +:102D9000BCF8001088426FD100239CF864201946CB +:102DA0000CF15800F9F76CFD002865D0A068D0F848 +:102DB000F810097802297DD003297CD004297BD022 +:102DC000052908BF082078D0C8E09CF8C9008CF815 +:102DD000CC000720FEF74CFCA06800F06EB97CE048 +:102DE00000E00DE00C20FEF743FCA068A0F88A503C +:102DF00090F8901041F0010180F8901000F05DB95A +:102E00001320FEF735FCA068A0F88A5000F055B9F1 +:102E10009CF80501002818BF70BD9CF8040188B11A +:102E2000BCF80601ACF84000BCF80801ACF8420060 +:102E3000BCF80A01ACF84400BCF80C01ACF8460040 +:102E40008CF80451FFF7C3FEFFF792FE1520FEF742 +:102E50000FFCA068A0F88A5000F02FB99CF87D0004 +:102E600058B18CF8F2508CF8F3501820FEF700FCA3 +:102E7000A068A0F88A5070BD70E09CF80F0100288F +:102E800018BF70BD9CF80E01002808BF70BDDCE9BA +:102E90001416DCF81001F9F786FEF2B2C1B28A42CC +:102EA00007BFA16881F8F250A26882F8F210C6F359 +:102EB000072103E018E01DE03DE024E0C0F3072017 +:102EC000814219BFA16881F8F300A06880F8F3502F +:102ED0001820BDE87040FEF7CBBB1120FEF7C8FB01 +:102EE000A068EAE08C01002090F86500F9F7B0FCDA +:102EF000A0BB08E090F8691041B190F86A00002882 +:102F000008BFFFDF0A20FEF7B3FB27E0F2F7E6FD7C +:102F10000C2823D3A0680821D0F8F8001E30F2F75F +:102F2000E1FD28B1A0680421C030F2F7DBFD00B953 +:102F3000FFDF0320E7E790F8900010F0030F0DD1BA +:102F40000C20FEF795FBA068A0F8845080F88860FC +:102F500090F8901041F0010180F89010A06890F86E +:102F6000CB10FE2918BF70BD90F8642000231946CD +:102F70005830F9F785FC002808BF70BDA06890F8AC +:102F80000011E9B3A1690978D1BB90F86500F9F7A0 +:102F90005FFCA8BBA068B0F858100A2931D900F12D +:102FA00008010522E06901F081FD0028A06804BF46 +:102FB00080F8005170BDD0F8FC00017861B1411C6F +:102FC0000522E06901F072FD002818BF70BDA068FD +:102FD000D0F8FC00007830B9A068E169D0F8FC00B6 +:102FE000401C01F044FFA068D0F8FC000178491CA7 +:102FF00001700120FEF73CFBA06880F8005170BD15 +:10300000FFE7A06890F8041111B190F8051181B3A1 +:1030100090F80E11002908BF70BD90F80F1100291B +:1030200018BF70BD90F86500F9F712FC002818BFB2 +:1030300070BDA06890F85400012808BF012503D096 +:10304000022814BFFFDF0225A06890F85500012870 +:1030500008BF012603D0022814BFFFDF0226A168A3 +:10306000012D91F810012BD0022D08BF022829D084 +:1030700033E0FFE7B0F80611A0F84010B0F80811EF +:10308000A0F84210B0F80A11A0F84410B0F80C11E2 +:10309000A0F8461080F8045190F865001D2804D06F +:1030A000BDE870401420FEF7E3BAFFF790FDFFF78C +:1030B0005FFD1520FEF7DCFAA06880F8655070BD52 +:1030C00001280AD191F81101012E04D0022E08BF67 +:1030D000022807D001E0012804D0BDE87040162086 +:1030E000FEF7C6BABDE870400020FEF7E2BA70B540 +:1030F000044690F8640000250C2814D00D2818BF51 +:1031000070BDB4F85800D4F8F810401C8988884283 +:1031100018BF70BDD4F84401FE4E0178002918BFD5 +:10312000FFDF45D122E0B4F85800B4F80211401C8A +:10313000884218BF70BDD4F8FC00411C04F108009F +:1031400001F095FE02212046F9F7B3F8D4F8FC000F +:103150000078002808BFFFDF0121FE20FEF7D6FA25 +:1031600084F86450012084F8980070BD2188C180E3 +:10317000D4F8F800D4F8441140890881D4F8F80054 +:10318000D4F8441180894881D4F8F800D4F8441167 +:10319000C0898881D4F844010571D4F8441109200C +:1031A0000870D4F8441120884880F078DFF7B4FE26 +:1031B00001212046F9F77DF803212046FEF764F847 +:1031C000B068D0F8F8000078022818BFFFDF0221AD +:1031D000FE20FEF79BFA84F8645070BD70B5CD4CAC +:1031E000A16891F86420162A11BF132A91F88E2045 +:1031F000002A62781BBF02206070002A70BD81F82F +:10320000C8004FF0000581F88D5081F88850D1F842 +:10321000F80009884088884218BFFFDFA068D0F80E +:10322000F8000078032818BFFFDF0321FE20FEF717 +:103230006DFAA068D0F844110A78002A18BFFFDFA1 +:1032400019D10288CA80D0F8442190F8C8101171B1 +:10325000D0F844110D72D0F844210D211170D0F82E +:103260004421018851800088EFF752FBEEF7EAFF16 +:10327000E078DFF751FEA06880F8645070BD10B5AB +:10328000A44C207910F0020F08BF10BD6078002810 +:1032900018BF10BDE068C078192880F06B81DFE8A6 +:1032A00000F05F4F0D8EF9F9A5223FF96F82B0F95A +:1032B000F9F9F9F8E4E1FAF6F5F9F400A068002369 +:1032C000012190F867205830F9F7DAFA002818BF82 +:1032D00010BD0821A06880F86710002180F88810D0 +:1032E00080F88C1010BDA0680023194690F8652066 +:1032F0005830F9F7C5FA18B1A168002081F88C00A0 +:10330000A0680023194690F864205830F9F7B8FAFD +:10331000002808BF10BD0020A16881F8880010BDFA +:10332000A0680023194690F864205830F9F7A8FAED +:10333000002808BFFFDF0420A16881F8640010BDE9 +:10334000A0680023194690F864205830F9F798FADD +:10335000002808BFFFDF0C20A16881F8640010BDC1 +:10336000A0680023194690F864205830F9F788FACD +:10337000002808BFFFDF0D20A16881F8640010BDA0 +:10338000A0680023194690F864205830F9F778FABD +:10339000002808BFFFDF0121A06880F88D100F21F1 +:1033A00080F8641010BDA06890F86400122818BF5F +:1033B000FFDF0121A06880F88E101121F0E7A068DE +:1033C0000023194690F864205830F9F759FA28B9C3 +:1033D000A06890F88E00002808BFFFDF0121A068D8 +:1033E00080F88D10132180F8641010BDA06890F84B +:1033F0006400182818BFFFDF1A20A16881F8640054 +:1034000010BDA068D0F8F81003884A889A4204BF1B +:10341000097804291BD190F864204FF00003194665 +:1034200000F15800F9F72CFA002808BFFFDFA06868 +:1034300090F8901011F0020F04BF012180F8641081 +:1034400005D0002180F88810D0F8F8000170A0683D +:103450000023194690F865205830F9F711FA002832 +:1034600008BF10BD0020A16881E0A06800231946B4 +:1034700090F864205830F9F703FA002808BFFFDFFE +:103480000520A16881F8640010BD30E01FE012E063 +:1034900001E068E06EE0A0680023194690F864201F +:1034A0005830F9F7EDF9002808BFFFDF1C20A168AC +:1034B00081F86400E8E7A0680023194690F86520C9 +:1034C0005830F9F7DDF9002808BFFFDFCAE7A06828 +:1034D0000023194690F864205830F9F7D1F90028F4 +:1034E00008BFFFDF1F20A16881F86400CCE7A06857 +:1034F00090F8651021291DD090F86410232918BF79 +:10350000FFDFC1D190F8F210002904BF90F8F3104A +:10351000002901E08C0100201CBF242180F86410E8 +:103520007FF4F9AE4FF0000180F864100846FEF712 +:10353000C0F8F0E690F8F210002907BF90F8F310F9 +:103540000029242180F865108CD14FF0000180F80B +:10355000651080F87D1090F80E0100281CBF002037 +:10356000FEF7A7F87EE7A168002081F8650081F8E2 +:103570008C0089E7FFDF87E770B58D4C0829207A3A +:1035800062D2DFE801F0041959592561615978B117 +:10359000F3F702F801210846F3F724F9F3F78EFE5A +:1035A0000020A072F3F7C7F8BDE87040F3F7F8BA4F +:1035B000BDE87040F1F7C6B8D4E90001F0F7B9FEF4 +:1035C0002060A07A401CC0B2A07228281CD370BD15 +:1035D000A07A0025401EC6B2E0683044F3F7E0FB55 +:1035E00010B9E1687F208855A07A272828BF0125D7 +:1035F0002846F3F707FEA07A282809D2401CC0B25B +:10360000A072282828BF70BDBDE87040F3F793B8BA +:10361000207A00281CBF012000F085F8F3F728FA73 +:10362000F3F7B0FA0120E07262480078DFF774FC2B +:10363000BDE87040F1F786B8002808BF70BD0020D3 +:10364000BDE8704000F06FB8FFDF70BD10B5584C9A +:10365000207A002804BF0C2010BD00202072E072E8 +:10366000607AF1F7C1FC607AF1F70BFF607AF1F74D +:1036700040F900280CBF1F20002010BD002270B5AB +:103680004B4C06460D46207A68B12272E272607A8F +:10369000F1F7AAFC607AF1F7F4FE607AF1F729F904 +:1036A000002808BFFFDF4348E560067070BD70B5B5 +:1036B000050007D0A5F5E8503F494C3881429CBF32 +:1036C000122070BD3A4CE068002804BF092070BD8C +:1036D000207A00281CBF0C2070BD3848F1F7ADF8E7 +:1036E0006072202804BF1F2070BDF1F721F920600F +:1036F000002D1CBF2844206001206560207200203E +:1037000000F011F8002070BD2949CA7A002A04BFD0 +:10371000002070471F22027000224270CB68436075 +:10372000CA72012070472DE9F04184B00746F1F7D5 +:10373000FFF81F4D8046414668682C6800EB80000A +:1037400046002046F1F710FEB04206DB6868811B98 +:103750004046F0F7EEFD0446286040F234762146FC +:103760004046F1F701FEB04204DA31464046F0F738 +:10377000E0FD044600208DF800004FF4DD6003906A +:1037800004208DF80500002F14BF012003208DF8C0 +:10379000040068460294F1F79AFA687A6946F1F7EC +:1037A00011FB002808BFFFDF04B0BDE8F081000076 +:1037B00044130020AC010020B5EB3C007935020039 +:1037C0002DE9F0410C4612490D68114A11490832A1 +:1037D0001160A0F12001312901D301200CE0412822 +:1037E00010D040CC0C4F94E80E0007EB8000241F53 +:1037F00050F8807C3046B84720600548001D0560C1 +:10380000BDE8F0812046DDF703FDF5E706207047AF +:1038100010050240010000014852020010B5534853 +:10382000F2F7DEF800B1FFDF5048401CF2F7D8F89D +:10383000002800D0FFDF10BD2DE9F14F4C4ED6F827 +:1038400000B001274948F2F7D3F8DFF8208128B902 +:103850005FF0000708F10100F2F7E0F8454C0025A1 +:103860004FF0030901206060C4F80051C4F804510E +:10387000009931602060DFF800A118E0DAF800005C +:10388000C00614D50E2000F064F8EFF3108010F09D +:10389000010072B600D00120C4F80493D4F80011DE +:1038A00019B9D4F8041101B920BF00B962B6D4F82F +:1038B000000118B9D4F804010028DFD0D4F80401BD +:1038C0000028CFD137B1C6F800B008F10100F2F7F7 +:1038D0008FF811E008F10100F2F78AF80028B9D159 +:1038E000C4F80893C4F80451C4F800510E2000F045 +:1038F00030F81E48F2F792F80020BDE8F88F2DE965 +:10390000F0438DB00D46064600240DF110090DF16F +:10391000200817E004EB4407102255F827106846EA +:1039200001F0F0F805EB870710224846796801F0AE +:10393000E9F86846FFF780FF10224146B86801F0B9 +:10394000E1F8641CB442E5DB0DB00020BDE8F08373 +:1039500072E7002809DB00F01F02012191404009B5 +:10396000800000F1E020C0F880127047AD01002017 +:1039700004E5004000E0004010ED00E0B249002006 +:103980000870704770B5B14D01232B60B04B1C68B7 +:10399000002CFCD0002407E00E6806601E68002E94 +:1039A000FCD0001D091D641C9442F5D30020286042 +:1039B00018680028FCD070BD70B5A34E0446A54D14 +:1039C0003078022800D0FFDFAC4200D3FFDF7169FE +:1039D000A148012903D847F23052944201DD032265 +:1039E0004271491C7161291BC1609B497078F1F7D4 +:1039F000E9F9002800D1FFDF70BD70B5924C0D468B +:103A00006178884200D0FFDF924E082D4BD2DFE86C +:103A100005F04A041E2D4A4A4A382078022800D070 +:103A2000FFDF03202070A078012801D020B108E03A +:103A3000A06800F0AFFD04E004F1080007C8FFF73C +:103A4000A1FF05202070BDE87040F0F77BBEF0F7C5 +:103A50006FFF01466068F1F787FCB04202D26169EE +:103A600002290BD30320F1F75AFF12E0F0F760FFB1 +:103A700001466068F1F778FCB042F3D2BDE87040CF +:103A80009AE7207802280AD0052806D0FFDF042014 +:103A90002070BDE8704000F0CCB8022000E00320A8 +:103AA000F1F73DFFF3E7FFDF70BD70B50546F0F7B6 +:103AB0003FFF654C60602078012800D0FFDF664939 +:103AC000012008700020087104208D604871614851 +:103AD000C860022020706078F1F774F9002800D1E6 +:103AE000FFDF70BD10B5584C207838B90220F1F7CF +:103AF0002CFF18B90320F1F728FF08B1112010BDE1 +:103B00005648F0F79AFE6070202804D001202070FB +:103B10000020606110BD032010BD2DE9F047144660 +:103B2000054600EB84000E46A0F1040800F045FDB8 +:103B300007464FF0805001694F4306EB8401091F8F +:103B4000B14201D2012100E0002189461CB1006987 +:103B5000B4EB900F02D90920BDE8F0872846DDF7C5 +:103B6000ABFB90B9A84510D3BD4205D2B84503D2EE +:103B700045EA0600800701D01020EDE73046DDF76A +:103B80009BFB10B9B9F1000F01D00F20E4E73448D6 +:103B900034490068884205D0224631462846FFF75E +:103BA000F1FE14E0FFF79EFF0028D5D12648002142 +:103BB0008560C0E90364817000F071F810B14FF4C2 +:103BC000A97000E0292060431830FFF76EFF002045 +:103BD000C2E770B505464FF0805004696C4320463B +:103BE000DDF76AFB08B10F2070BD00F0E6FCA842CB +:103BF00001D8102070BD1A481A490068884203D0C5 +:103C0000204600F0C7FC10E0FFF76CFF0028F1D160 +:103C10000D4801218460817000F041F808B112481C +:103C200000E012481830FFF740FF002070BD00F0A0 +:103C30000DBF10B5044C6078F0F75BFE00B9FFDFF4 +:103C40000020207010BD0000B001002004E50140FC +:103C500000E40140105C0C0054130020FB3902000A +:103C600054000020BEBAFECA645E0100084C010088 +:103C70004FF08050D0F830010A2801D00020704762 +:103C80000120704700B5FFF7F3FF20B14FF08050DF +:103C9000D0F8340108B1002000BD012000BD4FF074 +:103CA0008050D0F83011062905D0D0F83001401CE2 +:103CB00001D000207047012070474FF08050D0F8AD +:103CC0003001082801D0002070470120704700B55E +:103CD000FFF7E5FF48B14FF08050D0F834110629C6 +:103CE00005D3D0F83401401C01D0002000BD0120D4 +:103CF00000BD00B5FFF7D3FF58B14FF08050D0F8AA +:103D00003411062905D3D0F83401401C01D001201C +:103D100000BD002000BD00004C4909680160002082 +:103D200070474A4908600020704701218A0720B186 +:103D3000012804D042F204007047916700E0D16787 +:103D40000020704742490120086042F20600704797 +:103D500008B504233E4A1907103230B1C1F80433C4 +:103D6000106840F0010010600BE0106820F00100C6 +:103D70001060C1F808330020C1F808013548006818 +:103D80000090002008BD011F0B2909D830491031CF +:103D90000A6822F01E0242EA4000086000207047D4 +:103DA00042F205007047000100F18040C0F804199C +:103DB00000207047000100F18040C0F80819002081 +:103DC0007047000100F18040D0F800090860002031 +:103DD0007047012801D9072070471F4A52F8200078 +:103DE00002680A43026000207047012801D90720B9 +:103DF0007047194A52F8200002688A430260002086 +:103E00007047012801D907207047134A52F8200053 +:103E10000068086000207047020010494FF0000061 +:103E200003D0012A01D0072070470A6070474FF085 +:103E300080410020C1F808014FF0E020802180F887 +:103E400000140121C0F80011704700000004004078 +:103E500000050040080100400C53020078050040B6 +:103E60006249634B0A6863499A42096801D1C1F308 +:103E700010010160002070475C495D4B0A685D4994 +:103E8000091D9A4201D1C0F310000860002070475C +:103E90005649574B0A68574908319A4201D1C0F335 +:103EA000100008600020704730B5504B504D1C6822 +:103EB00042F20803AC4202D0142802D203E01128D7 +:103EC00001D3184630BDC3004B481844C0F8101544 +:103ED000C0F81425002030BD4449454B0A6842F221 +:103EE00009019A4202D0062802D203E0042801D335 +:103EF00008467047404A012142F8301000207047C0 +:103F00003A493B4B0A6842F209019A4202D006281C +:103F100002D203E0042801D308467047364A012143 +:103F200002EBC00041600020704770B52F4A304E50 +:103F3000314C156842F2090304EB8002B54204D00B +:103F4000062804D2C2F8001807E0042801D3184656 +:103F500070BDC1F31000C2F80008002070BD70B53C +:103F6000224A234E244C156842F2090304EB8002D6 +:103F7000B54204D0062804D2D2F8000807E004288D +:103F800001D3184670BDD2F80008C0F310000860D5 +:103F9000002070BD174910B508311848086011207D +:103FA000154A002102EBC003C3F81015C3F814151D +:103FB000401C1428F6D3002006E0042804D302EBAA +:103FC0008003C3F8001807E002EB8003D3F8004831 +:103FD000C4F31004C3F80048401C0628EDD310BDFC +:103FE000044906480831086070470000540000206A +:103FF000BEBAFECA00F5014000F001400000FEFF1D +:10400000834B1B6803B19847BFF34F8F814801680A +:10401000814A01F4E06111430160BFF34F8F00BF9B +:10402000FDE710B5EFF3108010F0010F72B601D06C +:10403000012400E0002400F0E1F850B1DDF7DCF9E4 +:10404000F0F73BFAF1F70DFCE7F73EFF734900206C +:10405000086004B962B6002010BD2DE9F0410C469D +:104060000546EFF3108010F0010F72B601D0012663 +:1040700000E0002600F0C2F820B106B962B60820C0 +:10408000BDE8F081DDF7ACF8DDF7BAF902460020B3 +:1040900001234709BF0007F1E02700F01F01D7F80F +:1040A0000071CF40F9071BD0202803D222FA00F17B +:1040B000C90727D141B2002904DB01F1E02191F8C1 +:1040C000001405E001F00F0101F1E02191F8141D49 +:1040D0004909082916D203FA01F717F0EC0F11D09D +:1040E000401C6428D5D3E7F7CDFE4D4A4D4900204A +:1040F000E7F710FF49494C4808602046DDF7E3F830 +:1041000060B904E006B962B641F20100B8E7404880 +:1041100004602DB12846DDF723F918B110242CE0F6 +:10412000424D19E02878022802D94FF4805424E047 +:1041300007240028687801D0F8B908E0E8B1202801 +:104140001BD8A878212818D8012816D001E0A87813 +:1041500098B9E8780B2810D83549802081F8140DDB +:10416000DDF74EF92946F1F762FBF0F765F900F04B +:1041700057FA2846DDF712F9044606B962B61CB1B3 +:10418000FFF74FFF20467BE7002079E710B5044694 +:1041900000F034F800B101202070002010BD254946 +:1041A00008600020704770B50C4623490D6822490D +:1041B000224E08310E60102807D011280CD012288A +:1041C0000FD0132811D0012013E0D4E90001FFF72C +:1041D00044FF354620600DE0FFF723FF00252060F7 +:1041E00008E02068FFF7D2FF03E01249206808606A +:1041F000002020601048001D056070BD07480A4976 +:104200000068884201D101207047002070470000FB +:10421000C80100200CED00E00400FA055400002065 +:10422000F813002000000020BEBAFECA145302009A +:104230000BE000E004000020100502400100000136 +:1042400000B5864910F1080F08BFF82024D014DC0F +:1042500010F1280F08BFD8201ED010F1140F08BF8E +:10426000EC2019D010F1100F08BFF02014D010F17D +:104270000C0F08BFF4200FD00CE010F1040F08BFA2 +:10428000FC2009D0002818BF032805D0042804BF4B +:10429000086000BDFFDF00BD086000BD00B57049CB +:1042A000012808BF032004D0022816BFFFDF042026 +:1042B00000BD086000BD70B505460C4616461046A8 +:1042C000F2F7C9FF022C08BF4FF47A7105D0012C18 +:1042D0000CBF4FF4C86140F6340144183046F2F781 +:1042E000E4FF204449F6797108444FF47A71B0FB39 +:1042F000F1F0281A70BD70B505460C460846F2F775 +:10430000B9FF022C08BF40F24C4105D0012C0CBF74 +:1043100040F634014FF4AF5149F6CA62511A0844CD +:104320004FF47A7100F2E140B0FBF1F0281A801EE0 +:1043300070BD70B5064615460C460846F2F79AFF62 +:10434000022D08BF4FF47A7105D0012D0CBF4FF438 +:10435000C86140F63401022C08BF40F24C4205D03F +:10436000012C0CBF40F634024FF4AF52891A0844B6 +:1043700049F6FC6108444FF47A71B0FBF1F0301A51 +:1043800070BD70B504460E460846F2F764FF054658 +:104390003046F2F78AFF28444AF2AB3108444FF422 +:1043A0007A71B0FBF1F0201A801E70BD2DE9F0414A +:1043B00007461E460D4614461046082A16BF042816 +:1043C0004EF62830F2F747FF07EB4701C1EBC71164 +:1043D00000EBC100022D08BF40F24C4105D0012D79 +:1043E0000CBF40F634014FF4AF5147182846F2F79E +:1043F00041FF381A4FF47A7100F6B730B0FBF1F58F +:104400002046F2F71CFF28443044401DBDE8F081EF +:1044100070B5054614460E460846F2F71CFF05EB3C +:104420004502C2EBC512C0EBC2053046F2F73DFFB4 +:104430002D1A2046082C16BF04284EF62830F2F715 +:104440000AFF28444FF47A7100F6B730B0FBF1F55B +:104450002046F2F7F4FE2844401D70BD0C150040C4 +:10446000101500402DE9FE430C468046F8F7B6FED5 +:10447000074698F80160204601A96A46EDF7D3FE89 +:1044800005000DD0012F02D00320BDE8FE83204699 +:1044900002AA0199EDF7E9FD0298B0F803000AE0DD +:1044A000022F14D1042E12D3B8F80300BDF8002057 +:1044B000011D914204D8001D80B2A919814202D188 +:1044C0004FF00000E1E702D24FF00100DDE74FF0CE +:1044D0000200DAE7C2790D2341B342BB818801298A +:1044E00004D94908818004BF012282800168012922 +:1044F00018BF002930D001686FEA0101C1EBC10289 +:1045000002EB011281796FEA010101EB8103C3EB38 +:10451000811111444FEA914201608188B2FBF1F3AD +:1045200001FB132181714FF0010102E01AB14FF03C +:104530000001C17170478188FF2908D24FF6FF72D0 +:1045400002EA41018180FF2984BFFF228280016845 +:10455000012918BF0029CED10360CCE7817931B1A0 +:10456000491E11F0FF0181711CBF0020704701201E +:10457000704710B50121C171817181800446042109 +:10458000F1F7B0FA002818BF10BD2068401C206069 +:1045900010BD00000B4A022111600B490B68002B73 +:1045A000FCD0084B1B1D186008680028FCD00020B8 +:1045B000106008680028FCD070474FF080504069B8 +:1045C0007047000004E5014000E4014002000B4692 +:1045D0004FF00000014620D0012A04D0022A04D066 +:1045E000032A0DD103E0012002E0022015E00320A0 +:1045F000072B05D2DFE803F00406080A0C0E1000B2 +:1046000007207047012108E0022106E0032104E0B1 +:10461000042102E0052100E00621F0F72CB900009A +:10462000F948052181700021017041707047F749F8 +:104630000A78012A05D0CA681044C8604038F0F7EB +:1046400060BE8A6810448860F8E7002819D00378B3 +:10465000EF49F04A13B1012B0ED011E00379012B81 +:1046600000D06BB943790BB1012B09D18368643B4E +:104670008B4205D2C0680EE00379012B02D00BB14A +:104680000020704743790BB1012BF9D1C368643B1B +:104690008B42F5D280689042F2D801207047DB4906 +:1046A00010B501220A700279A2B100220A71427982 +:1046B00092B104224A718268D34C52328A60C06837 +:1046C0001434C8606060F0F733F9CF4920600220ED +:1046D000887010BD0322E9E70322EBE770B5CB4DEC +:1046E000044600202870207988B100202871607964 +:1046F00078B10420C44E6871A168F068EFF719FE24 +:10470000A860E0685230E8600320B07070BD0120FE +:10471000ECE70320EEE72DE9F04105460226F0F72D +:1047200010FD006800B1FFDFB74C01273DB12878CC +:10473000B0B1012805D0022810D0032813D027716A +:104740000CE06868C82807D3F0F735FE20B1686828 +:10475000FFF76DFF012603E0002601E000F05EF99F +:104760003046BDE8F08120780028F7D16868FFF76F +:104770006CFF0028E3D06868017879B1A07804283C +:1047800000D0FFDF01216868FFF7A8FF9F49E078AC +:10479000F0F718FB0028E1D1FFDFDFE7FFF77FFF2D +:1047A0006770DBE72DE9F047974C8846E17888424F +:1047B00000D0FFDFDFF8509200250127934E09F16A +:1047C0001409B8F1080F75D2DFE808F0040C28527C +:1047D0007A808D95A078032802D0022800D0FFDFD0 +:1047E000BDE8F087A078032802D0022800D0FFDFC0 +:1047F0000420A07025712078002878D1FFF717FFDA +:104800003078012806D0B068E06000F033F920610C +:10481000002060E0E078F0F7D2F9F5E7A07803280F +:1048200002D0022800D0FFDF207800286DD1A078C8 +:10483000032816D0F0F77CF801464F46D9F800005F +:10484000F0F792FD00280EDB796881420BDB081A35 +:10485000F0606E49E078F0F7B5FA0028C0D1FFDFCC +:10486000BEE7042028E00420F1F759F8A570B7E767 +:10487000A078032802D0022800D0FFDF207888BB70 +:10488000A078032817D0F0F753F801464F46D9F81F +:104890000000F0F769FD0028E5DB79688142E2DB82 +:1048A000081AF0605949E078F0F78CFA002897D19F +:1048B000FFDF95E740E00520F1F731F8A7708FE7BB +:1048C000A078042800D0FFDF022004E0A0780428AC +:1048D00000D0FFDF0120A1688847FFF71CFF0546D5 +:1048E00030E004E011E0A078042800D0FFDFBDE84C +:1048F000F04700F093B8A078042804D0617809B19B +:10490000022800D0FFDF207818B1BDE8F04700F0A2 +:104910008EB8207920B10620F1F701F82571CDE796 +:10492000607838B13949E078F0F74CFA00B9FFDF28 +:10493000657055E70720BFE7FFDF51E73DB1012D67 +:1049400003D0FFDF022DF9D14AE70420C3E703209B +:10495000C1E770B5050004D02B4CA078052806D11E +:1049600001E0102070BD0820F0F7EFFF08B1112022 +:1049700070BD2948EFF761FFE070202806D00121C3 +:10498000F0F713FE0020A560A07070BD032070BD7D +:104990001D4810B5017809B1112010BD8178052995 +:1049A00006D0012906D029B101210170002010BDD7 +:1049B0000F2010BD00F03BF8F8E770B5124C05462B +:1049C000A07808B1012809D155B12846FFF73DFE6E +:1049D00040B1287840B1A078012809D00F2070BDDF +:1049E000102070BD072070BD2846FFF758FE03E079 +:1049F00000212846FFF772FE0449E078F0F7E2F95B +:104A000000B9FFDF002070BDCC010020641300203E +:104A10003D860100FF1FA107A54702000A4810B507 +:104A2000006900F01FF8BDE81040EFF78BBE0648A4 +:104A300010B5C078EFF75DFF00B9FFDF0820F0F791 +:104A40006EFFBDE81040EBE5CC01002010B5134C23 +:104A50002060201D0160114810300260001D0360BD +:104A6000002010BD0E490A6848F202139A4302431F +:104A70000A6070470A4A116848F2021301EA03000B +:104A8000994311607047054B02465B421020134466 +:104A9000FC2B01D811600020704700000006004088 +:104AA000C8060240704770477047704740EA0103EC +:104AB00010B59B070FD1042A0DD310C808C9121FC7 +:104AC0009C42F8D020BA19BA884201D9012010BD01 +:104AD0004FF0FF3010BD1AB1D30703D0521C07E0CE +:104AE000002010BD10F8013B11F8014B1B1B07D132 +:104AF00010F8013B11F8014B1B1B01D1921EF1D1A3 +:104B0000184610BD032A40F2308010F0030C00F06C +:104B1000158011F8013BBCF1020F624498BF11F8F7 +:104B200001CB00F8013B38BF11F8013BA2F10402B0 +:104B300098BF00F801CB38BF00F8013B11F0030328 +:104B400000F02580083AC0F0088051F8043B083A8C +:104B500051F804CBA0E80810F5E7121D5CBF51F82E +:104B6000043B40F8043BAFF30080D20724BF11F8A8 +:104B7000013B11F801CB48BF11F8012B24BF00F80D +:104B8000013B00F801CB48BF00F8012B704710B57E +:104B9000203AC0F00B80B1E81850203AA0E8185035 +:104BA000B1E81850A0E81850BFF4F5AF5FEA027CF6 +:104BB00024BFB1E81850A0E8185044BF18C918C065 +:104BC000BDE810405FEA827C24BF51F8043B40F806 +:104BD000043B08BF7047D20728BF31F8023B48BFEB +:104BE00011F8012B28BF20F8023B48BF00F8012B29 +:104BF000704702F0FF0343EA032242EA024200F058 +:104C000002B84FF000020429C0F0128010F0030C2B +:104C100000F01B80CCF1040CBCF1020F18BF00F8AF +:104C2000012BA8BF20F8022BA1EB0C0100F00DB85E +:104C30005FEAC17C24BF00F8012B00F8012B48BFBC +:104C400000F8012B70474FF0000200B51346944660 +:104C50009646203922BFA0E80C50A0E80C50B1F1D4 +:104C60002001BFF4F7AF090728BFA0E80C5048BFE8 +:104C70000CC05DF804EB890028BF40F8042B08BF86 +:104C8000704748BF20F8022B11F0804F18BF00F882 +:104C9000012B70477047704770477047FEDF184917 +:104CA0000978F9B90420714608421BD10699154AC2 +:104CB000914217DC0699022914DB02394878DF2873 +:104CC00010D10878FE2807D0FF280BD14FF0010043 +:104CD0004FF000020C4B184741F201000099019A75 +:104CE000094B1847094B002B02D01B68DB6818479B +:104CF0004FF0FF3071464FF00002034B18470000A1 +:104D000028ED00E0006002000140020004000020E5 +:104D1000174818497047FFF7FBFFDCF74FFA00BD53 +:104D2000154816490968884203D1154A13605B6823 +:104D3000184700BD20BFFDE70F48104909688842A9 +:104D400010D1104B18684FF0FF318842F2D080F339 +:104D500008884FF02021884204DD0B4802680321B7 +:104D60000A4302600948804709488047FFDF000086 +:104D700078130020781300200010000000000020AD +:104D8000040000200060020014090040C52F00004C +:104D9000214D020004207146084202D0EFF3098140 +:104DA00001E0EFF30881886902380078102813DBEE +:104DB00020280FDB2C280BDB0A4A12680A4B9A4288 +:104DC00003D1602804DB094A1047022008607047BD +:104DD000074A1047074A1047074A12682C321268E0 +:104DE0001047000054000020BEBAFECA051400009F +:104DF000C1370200A7410200040000200D4B0E49FC +:104E000008470E4B0C4908470D4B0B4908470D4B03 +:104E1000094908470C4B084908470C4B0649084705 +:104E20000B4B054908470B4B034908470A4B0249FE +:104E300008470000ADBC0000E1BF0000552D000098 +:104E4000CF2B00005D2B0000F72D00002114000087 +:104E50001B2900004D2F0000C91100000021016036 +:104E600081807047002101604160017270470A68CB +:104E700002600B790371704759960000B7970000E4 +:104E8000199900007D990000B7990000EB99000086 +:104E90001D9A0000559A0000C39A00000797000071 +:104EA0003D990000A7120000B54300000144000036 +:104EB00067440000F344000017460000D946000094 +:104EC0000B470000E34700007B480000CF4800008C +:104ED000B5490000D5490000C3160000E7160000E0 +:104EE000171600006B16000019170000AD17000020 +:104EF00023600000D361000099650000B1660000E6 +:104F00003B670000B96700001D6800003D690000B4 +:104F10000D6A0000796A0000F7490000FD490000B1 +:104F2000074A00006F4A00009B4A0000394C00000D +:104F3000634C00009B4C0000114D0000F74D000039 +:104F4000154E000025440000A7120000A712000023 +:104F5000A7120000A7120000A7120000A71200006D +:104F6000A7120000A3250000292600004526000006 +:104F700061260000EF2700008B2600009526000028 +:104F8000D7260000F9260000D527000017280000CA +:104F9000A7120000A7120000A7830000C78300002B +:104FA000D18300000B8400003984000029850000B3 +:104FB000B7850000CB850000198600002F87000010 +:104FC000D5880000FD8900002B730000158A0000C1 +:104FD000A7120000A7120000A1B500000BB7000047 +:104FE0005FB70000CBB700007BB8000001000000F5 +:104FF00000000000100110013A0200001A02000433 +:1050000005060000FFFFFFFF0000FFFF95AD000059 +:10501000173D00004921000075730000ED8E00006F +:105020000000000099910000759100008791000038 +:10503000000002000000000000020000000000006C +:1050400000010000000000005381000033810000D7 +:10505000A181000025250000E724000007250000AD +:10506000FFA800002BA9000033AB00001D59000071 +:10507000C181000000000000F181000073250000E4 +:1050800000000000000000000000000015AA000061 +:1050900000000000B1590000030000000155555503 +:1050A000D6BE898E00006306630C631200000703FE +:1050B000AB054F08000053044308330C0000000008 +:1050C00048080000480800009F5600009F56000056 +:1050D0009143000041AC0000F77500005B20000028 +:1050E0002F2702004D9D0100DD560000DD56000017 +:1050F000B3430000A3AC00007B760000CD2000008D +:105100005D270200619D01007001700140003800C0 +:105110005C0024004801000200000300656C74621A +:10512000000000000000000000000000000000007F +:1051300087000000000000000000000000000000E8 +:10514000BE83605ADB0B376038A5F5AA9183886C63 +:1051500001000000732E0100393D01000000000134 +:105160000206030405000000070000000000000024 +:10517000060000000A00000032000000730000007A +:10518000B4000000538901009113020037F80000B9 +:105190003DB001005DEA01003DB00100D5F900001D +:1051A000FBB1010053E70100FBB1010035F600003F +:1051B00089B10100AFE9010089B1010033F80000B5 +:1051C00051B001000DE5010051B0010087FE000063 +:1051D00073B4010011EB010073B40100F401FA0093 +:1051E000960064004B0032001E0014000A00050007 +:1051F000020001000041000000000000AAAED7AB91 +:10520000154120100C0802170D01010209090101C6 +:10521000060209181803010109090303055555552C +:10522000252627D6BE898E00F401FA009600640078 +:105230004B0032001E0014000A00050002000100AD +:105240002541000000000000613E0200793E02009E +:10525000913E0200A93E0200D93E0200013F020039 +:105260002B3F02005F3F0200D33B02001B3B0200CA +:105270002F3C0200874A0200E1590100F159010068 +:105280001D5A0100EF5A0100F75A0100095B0100A5 +:105290002B3D0200453D0200193D0200233D020066 +:1052A000513D0200873D02000D380200A73D02007B +:1052B000B53D0200C33D0200D33D0200EB3D0200BC +:1052C000033E0200193E02000D38020000000000FB +:1052D0004FBA0000A5BA0000BBBA0000CD450200DD +:1052E00039380200FF380200534902009149020098 +:1052F000BB490200C1580100215D01000D380200C8 +:105300000D3802000D3802000D3802001C05004067 +:105310002005004000100200385302000800002061 +:10532000E0010000441100006C530200E80100207D +:1053300090110000A0110000011413F81302412085 +:105340000A2006441A0102228C2720FB349B5F802E +:105350001280021E10133F0B1420FC0A1B2082082F +:0C536000019C0916C7327F0B6CEC10BCDE +:00000001FF diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble.h new file mode 100644 index 0000000..da1a06b --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble.h @@ -0,0 +1,667 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the BLE SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_err.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific base UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ + SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ + SD_BLE_UUID_VS_REMOVE, /**< Remove a Vendor Specific base UUID. */ +}; + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ + BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ +}; + +/**@brief BLE Connection Configuration IDs. + * + * IDs that uniquely identify a connection configuration. + */ +enum BLE_CONN_CFGS +{ + BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ + BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ + BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ + BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ + BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ +}; + +/**@brief BLE Common Configuration IDs. + * + * IDs that uniquely identify a common configuration. + */ +enum BLE_COMMON_CFGS +{ + BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific base UUID configuration */ +}; + +/**@brief Common Option IDs. + * IDs that uniquely identify a common option. + */ +enum BLE_COMMON_OPTS +{ + BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ + BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ + BLE_COMMON_OPT_EXTENDED_RC_CAL = BLE_OPT_BASE + 2, /**< Extended RC calibration option */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVT_PTR_ALIGNMENT 4 + +/** @brief Leaves the maximum of the two arguments. +*/ +#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) + +/** @brief Maximum possible length for BLE Events. + * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. + * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. +*/ +#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ + offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ +) + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific base UUID counts + * @{ + */ +#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ +#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ +/** @} */ + +/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. + * @{ + */ +#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ + +/** @} */ + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ + union + { + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; /**< Event parameter union. */ +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE__EVT series. */ + uint16_t evt_len; /**< Length in octets including this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + } evt; /**< Event union. */ +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/** + * @brief Configuration parameters for the PA and LNA. + */ +typedef struct +{ + uint8_t enable :1; /**< Enable toggling for this amplifier */ + uint8_t active_high :1; /**< Set the pin to be active high */ + uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ +} ble_pa_lna_cfg_t; + +/** + * @brief PA & LNA GPIO toggle configuration + * + * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or + * a low noise amplifier. + * + * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided + * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences + * and must be avoided by the application. + */ +typedef struct +{ + ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ + ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ + + uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ + uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ + uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ +} ble_common_opt_pa_lna_t; + +/** + * @brief Configuration of extended BLE connection events. + * + * When enabled the SoftDevice will dynamically extend the connection event when possible. + * + * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. + * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, + * and if there are no conflicts with other BLE roles requesting radio time. + * + * @note @ref sd_ble_opt_get is not supported for this option. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ +} ble_common_opt_conn_evt_ext_t; + +/** + * @brief Enable/disable extended RC calibration. + * + * If extended RC calibration is enabled and the internal RC oscillator (@ref NRF_CLOCK_LF_SRC_RC) is used as the SoftDevice + * LFCLK source, the SoftDevice as a peripheral will by default try to increase the receive window if two consecutive packets + * are not received. If it turns out that the packets were not received due to clock drift, the RC calibration is started. + * This calibration comes in addition to the periodic calibration that is configured by @ref sd_softdevice_enable(). When + * using only peripheral connections, the periodic calibration can therefore be configured with a much longer interval as the + * peripheral will be able to detect and adjust automatically to clock drift, and calibrate on demand. + * + * If extended RC calibration is disabled and the internal RC oscillator is used as the SoftDevice LFCLK source, the + * RC oscillator is calibrated periodically as configured by @ref sd_softdevice_enable(). + * + * @note @ref sd_ble_opt_get is not supported for this option. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable extended RC calibration, enabled by default. */ +} ble_common_opt_extended_rc_cal_t; + +/**@brief Option structure for common options. */ +typedef union +{ + ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ + ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ + ble_common_opt_extended_rc_cal_t extended_rc_cal; /**< Parameters for enabling extended RC calibration. */ +} ble_common_opt_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ + ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ +} ble_opt_t; + +/**@brief BLE connection configuration type, wrapping the module specific configurations, set with + * @ref sd_ble_cfg_set. + * + * @note Connection configurations don't have to be set. + * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, + * the default connection configuration will be automatically added for the remaining connections. + * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in + * place of @ref ble_conn_cfg_t::conn_cfg_tag. + * + * @sa sd_ble_gap_adv_start() + * @sa sd_ble_gap_connect() + * + * @mscs + * @mmsc{@ref BLE_CONN_CFG} + * @endmscs + + */ +typedef struct +{ + uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the + @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls + to select this configuration when creating a connection. + Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ + union { + ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ + ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ + ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ + ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ + ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ + } params; /**< Connection configuration union. */ +} ble_conn_cfg_t; + +/** + * @brief Configuration of Vendor Specific base UUIDs, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. + */ +typedef struct +{ + uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific base UUID bases to allocate memory for. + Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is + @ref BLE_UUID_VS_COUNT_MAX. */ +} ble_common_cfg_vs_uuid_t; + +/**@brief Common BLE Configuration type, wrapping the common configurations. */ +typedef union +{ + ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor Specific base UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ +} ble_common_cfg_t; + +/**@brief BLE Configuration type, wrapping the module specific configurations. */ +typedef union +{ + ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ + ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ + ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ + ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ +} ble_cfg_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the BLE stack + * + * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the + * application RAM region (APP_RAM_BASE). On return, this will + * contain the minimum start address of the application RAM region + * required by the SoftDevice for this configuration. + * + * @note The memory requirement for a specific configuration will not increase between SoftDevices + * with the same major version number. + * + * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located + * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between + * APP_RAM_BASE and the start of the call stack. + * + * @details This call initializes the BLE stack, no BLE related function other than @ref + * sd_ble_cfg_set can be called before this one. + * + * @mscs + * @mmsc{@ref BLE_COMMON_ENABLE} + * @endmscs + * + * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. + * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_NO_MEM One or more of the following is true: + * - The amount of memory assigned to the SoftDevice by *p_app_ram_base is not + * large enough to fit this configuration's memory requirement. Check *p_app_ram_base + * and set the start address of the application RAM region accordingly. + * - Dynamic part of the SoftDevice RAM region is larger then 64 kB which + * is currently not supported. + * @retval ::NRF_ERROR_RESOURCES The total number of L2CAP Channels configured using @ref sd_ble_cfg_set is too large. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); + +/**@brief Add configurations for the BLE stack + * + * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref + * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. + * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. + * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). + * See @ref sd_ble_enable for details about APP_RAM_BASE. + * + * @note The memory requirement for a specific configuration will not increase between SoftDevices + * with the same major version number. + * + * @note If a configuration is set more than once, the last one set is the one that takes effect on + * @ref sd_ble_enable. + * + * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default + * configuration. + * + * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref + * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref + * sd_ble_enable). + * + * @note Error codes for the configurations are described in the configuration structs. + * + * @mscs + * @mmsc{@ref BLE_COMMON_ENABLE} + * @endmscs + * + * @retval ::NRF_SUCCESS The configuration has been added successfully. + * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. + * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not + * large enough to fit this configuration's memory requirement. + */ +SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); + +/**@brief Get an event from the pending events queue. + * + * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. + * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. + * The buffer should be interpreted as a @ref ble_evt_t struct. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that + * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. + * The application is free to choose whether to call this function from thread mode (main context) or directly from the + * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher + * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) + * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so + * could potentially leave events in the internal queue without the application being aware of this fact. + * + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to + * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, + * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. + * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length + * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: + * + * \code + * uint16_t len; + * errcode = sd_ble_evt_get(NULL, &len); + * \endcode + * + * @mscs + * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} + * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); + + +/**@brief Add a Vendor Specific base UUID. + * + * @details This call enables the application to add a Vendor Specific base UUID to the BLE stack's table, for later + * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t + * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code + * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses + * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to + * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field + * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to + * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in + * p_uuid_type along with an @ref NRF_SUCCESS error code. + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific base UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @retval ::NRF_SUCCESS Successfully added the Vendor Specific base UUID. + * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); + + +/**@brief Remove a Vendor Specific base UUID. + * + * @details This call removes a Vendor Specific base UUID that has been added with @ref sd_ble_uuid_vs_add. This function allows + * the application to reuse memory allocated for Vendor Specific base UUIDs. + * + * @note Currently this function can only be called with a p_uuid_type set to @ref BLE_UUID_TYPE_UNKNOWN or the last added UUID type. + * + * @param[in] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t::type corresponds to the UUID type that + * shall be removed. If the type is set to @ref BLE_UUID_TYPE_UNKNOWN, or the pointer is NULL, the last + * Vendor Specific base UUID will be removed. + * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponds to the UUID type that was + * removed. If function returns with a failure, it contains the last type that is in use by the ATT Server. + * + * @retval ::NRF_SUCCESS Successfully removed the Vendor Specific base UUID. + * @retval ::NRF_ERROR_INVALID_ADDR If p_uuid_type is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If p_uuid_type points to a non-valid UUID type. + * @retval ::NRF_ERROR_FORBIDDEN If the Vendor Specific base UUID is in use by the ATT Server. + */ + +SVCALL(SD_BLE_UUID_VS_REMOVE, uint32_t, sd_ble_uuid_vs_remove(uint8_t *p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of Vendor Specific base UUIDs populated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @retval ::NRF_SUCCESS Successfully encoded into the buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[out] p_version Pointer to a ble_version_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Version information stored successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @endmscs + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ +#ifdef __cplusplus +} +#endif +#endif /* BLE_H__ */ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_err.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_err.h new file mode 100644 index 0000000..1b4820d --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_err.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ +#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ +#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_.h or ble_error_.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif + + +/** + @} + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gap.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gap.h new file mode 100644 index 0000000..a130d7b --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gap.h @@ -0,0 +1,2691 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ + SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ + SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ + SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ + SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ + SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ + SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ + SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ + SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ + SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ + SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ + SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ + SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ + SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ + SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ + SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ + SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ + SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ + SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ + SD_BLE_GAP_QOS_CHANNEL_SURVEY_START = BLE_GAP_SVC_BASE + 37, /**< Start Quality of Service (QoS) channel survey module. */ + SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP = BLE_GAP_SVC_BASE + 38, /**< Stop Quality of Service (QoS) channel survey module. */ + SD_BLE_GAP_ADV_ADDR_GET = BLE_GAP_SVC_BASE + 39, /**< Get the Address used on air while Advertising. */ +}; + +/**@brief GAP Event IDs. + * IDs that uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connected to peer. \n See @ref ble_gap_evt_connected_t */ + BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ + BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ + BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ + BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ + BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ + BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ + BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ + BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ + BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ + BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ + BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ + BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ + BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ + BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ + BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ + BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ + BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ + BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT = BLE_GAP_EVT_BASE + 21, /**< Channel survey report. \n See @ref ble_gap_evt_qos_channel_survey_report_t. */ + BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ +}; + +/**@brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ + BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ + BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ + BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 3, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ + BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ + BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ +}; + +/**@brief GAP Configuration IDs. + * + * IDs that uniquely identify a GAP configuration. + */ +enum BLE_GAP_CFGS +{ + BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ + BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ +}; + +/**@brief GAP TX Power roles. + */ +enum BLE_GAP_TX_POWER_ROLES +{ + BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ + BLE_GAP_TX_POWER_ROLE_SCAN_INIT = 2, /**< Scanner and initiator role. */ + BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ +}; + +/** @} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ +#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ +#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ +#define BLE_GAP_ADDR_TYPE_ANONYMOUS 0x7F /**< An advertiser may advertise without its address. + This type of advertising is called anonymous. */ +/**@} */ + + +/**@brief The default interval in seconds at which a private address is refreshed. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ +/**@brief The maximum interval in seconds at which a private address can be refreshed. */ +#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ + + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN (6) + +/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes + * @{ */ +#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ +#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ +#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, + and will not accept a peer using identity address as sender address when + the peer IRK is exchanged, non-zero and added to the identity list. */ +/**@} */ + +/** @brief Invalid power level. */ +#define BLE_GAP_POWER_LEVEL_INVALID 127 + +/** @brief Advertising set handle not set. */ +#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) + +/** @brief The default number of advertising sets. */ +#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) + +/** @brief The maximum number of advertising sets supported by this SoftDevice. */ +#define BLE_GAP_ADV_SET_COUNT_MAX (1) + +/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. + * @{ */ +#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. + If more advertising data is required, use extended advertising instead. */ +#define BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED (255) /**< Maximum supported data length for an extended advertising set. */ + +#define BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED (238) /**< Maximum supported data length for an extended connectable advertising set. */ +/**@}. */ + +/** @brief Set ID not available in advertising report. */ +#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF + +/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons + * @{ */ +#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ +#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ +/**@} */ + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ +#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ +#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min + * @{ */ +#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_INTERVAL_MAX 0xFFFF /**< Maximum Scan interval in 625 us units, i.e. 40,959.375 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min + * @{ */ +#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_WINDOW_MAX 0xFFFF /**< Maximum Scan window in 625 us units, i.e. 40,959.375 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min + * @{ */ +#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in 10 ms units, i.e 10 ms. */ +#define BLE_GAP_SCAN_TIMEOUT_UNLIMITED 0x0000 /**< Continue to scan forever. */ + /** @} */ + +/**@defgroup BLE_GAP_SCAN_BUFFER_SIZE GAP Minimum scanner buffer size + * + * Scan buffers are used for storing advertising data received from an advertiser. + * If ble_gap_scan_params_t::extended is set to 0, @ref BLE_GAP_SCAN_BUFFER_MIN is the minimum scan buffer length. + * else the minimum scan buffer size is @ref BLE_GAP_SCAN_BUFFER_EXTENDED_MIN. + * @{ */ +#define BLE_GAP_SCAN_BUFFER_MIN (31) /**< Minimum data length for an + advertising set. */ +#define BLE_GAP_SCAN_BUFFER_MAX (31) /**< Maximum data length for an + advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MIN (255) /**< Minimum data length for an + extended advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX (1650) /**< Maximum data length for an + extended advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX_SUPPORTED (255) /**< Maximum supported data length for + an extended advertising set. */ +/** @} */ + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * + * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. + * + * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. + * The maximum supported data length for an extended advertiser is defined by + * @ref BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED + * Note that some of the advertising types do not support advertising data. Non-scannable types do not support + * scan response data. + * + * @{ */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising + events. Advertising interval is less that 3.75 ms. + Use this type for fast reconnections. + @note Advertising data is not supported. */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising + events. + @note Advertising data is not supported. */ +#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED 0x06 /**< Connectable non-scannable undirected advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x08 /**< Non-connectable scannable undirected advertising + events using extended advertising PDUs. + @note Only scan response data is supported. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_DIRECTED 0x09 /**< Non-connectable scannable directed advertising + events using extended advertising PDUs. + @note Only scan response data is supported. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising + events using extended advertising PDUs. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_DATA_STATUS GAP Advertising data status + * @{ */ +#define BLE_GAP_ADV_DATA_STATUS_COMPLETE 0x00 /**< All data in the advertising event have been received. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA 0x01 /**< More data to be received. + @note This value will only be used if + @ref ble_gap_scan_params_t::report_incomplete_evts and + @ref ble_gap_adv_report_type_t::extended_pdu are set to true. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. + @note This value will only be used if + @ref ble_gap_adv_report_type_t::extended_pdu is set to true. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. + @note This value will only be used if + @ref ble_gap_adv_report_type_t::extended_pdu is set to true. */ +/**@} */ + +/**@defgroup BLE_GAP_SCAN_FILTER_POLICIES GAP Scanner filter policies + * @{ */ +#define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00 /**< Accept all advertising packets except directed advertising packets + not addressed to this device. */ +#define BLE_GAP_SCAN_FP_WHITELIST 0x01 /**< Accept advertising packets from devices in the whitelist except directed + packets not addressed to this device. */ +#define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_ACCEPT_ALL. + In addition, accept directed advertising packets, where the advertiser's + address is a resolvable private address that cannot be resolved. */ +#define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_WHITELIST. + In addition, accept directed advertising packets, where the advertiser's + address is a resolvable private address that cannot be resolved. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. + For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + + +/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types + * @{ */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ +#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ +#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ +#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@defgroup BLE_GAP_DEVNAME GAP device name defines. + * @{ */ +#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ +#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ +#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ +/**@} */ + + +/**@brief Disable RSSI events for connections */ +#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF + +/**@defgroup BLE_GAP_PHYS GAP PHYs + * @{ */ +#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ +#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ +#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ +#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ +#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ + +/**@brief Supported PHYs in connections, for scanning, and for advertising. */ +#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS | BLE_GAP_PHY_CODED) /**< All PHYs are supported. */ + +/**@} */ + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Random Number Length. */ +#define BLE_GAP_SEC_RAND_LEN 8 + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ +#define BLE_GAP_LESC_P256_PK_LEN 64 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ +#define BLE_GAP_LESC_DHKEY_LEN 32 + + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + + +/**@brief Maximum amount of addresses in the whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + + +/**@brief Maximum amount of identities in the device identities list. */ +#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) + + +/**@brief Default connection count for a configuration. */ +#define BLE_GAP_CONN_COUNT_DEFAULT (1) + + +/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. + * @{ */ +#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ +#define BLE_GAP_EVENT_LENGTH_CODED_PHY_MIN (6) /**< The shortest event length in 1.25 ms units supporting LE Coded PHY. */ +#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. + * @{ */ +#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ +#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ +#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ +#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ + +/**@} */ + +/**@brief Automatic data length parameter. */ +#define BLE_GAP_DATA_LENGTH_AUTO 0 + +/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. + * @{ */ +#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ +#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ +/**@} */ + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ + +/**@brief The total number of channels in Bluetooth Low Energy. */ +#define BLE_GAP_CHANNEL_COUNT (40) + +/**@defgroup BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS Quality of Service (QoS) Channel survey interval defines + * @{ */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS (0) /**< Continuous channel survey. */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MIN_US (7500) /**< Minimum channel survey interval in microseconds (7.5 ms). */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MAX_US (4000000) /**< Maximum channel survey interval in microseconds (4 s). */ + /**@} */ + +/** @} */ + + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Advertising event properties. */ +typedef struct +{ + uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ + uint8_t anonymous : 1; /**< Omit advertiser's address from all PDUs. + @note Anonymous advertising is only available for + @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and + @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED. */ + uint8_t include_tx_power : 1; /**< This feature is not supported on this SoftDevice. */ +} ble_gap_adv_properties_t; + + +/**@brief Advertising report type. */ +typedef struct +{ + uint16_t connectable : 1; /**< Connectable advertising event type. */ + uint16_t scannable : 1; /**< Scannable advertising event type. */ + uint16_t directed : 1; /**< Directed advertising event type. */ + uint16_t scan_response : 1; /**< Received a scan response. */ + uint16_t extended_pdu : 1; /**< Received an extended advertising set. */ + uint16_t status : 2; /**< Data status. See @ref BLE_GAP_ADV_DATA_STATUS. */ + uint16_t reserved : 9; /**< Reserved for future use. */ +} ble_gap_adv_report_type_t; + +/**@brief Advertising Auxiliary Pointer. */ +typedef struct +{ + uint16_t aux_offset; /**< Time offset from the beginning of advertising packet to the auxiliary packet in 100 us units. */ + uint8_t aux_phy; /**< Indicates the PHY on which the auxiliary advertising packet is sent. See @ref BLE_GAP_PHYS. */ +} ble_gap_aux_pointer_t; + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. + This bit is set by the SoftDevice to indicate whether the address has been resolved from + a Resolvable Private Address (when the peer is using privacy). + If set to 1, @ref addr and @ref addr_type refer to the identity address of the resolved address. + + This bit is ignored when a variable of type @ref ble_gap_addr_t is used as input to API functions. */ + uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. + @ref addr is not used if @ref addr_type is @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + * + * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: + * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval + * that corresponds to the following Bluetooth Spec requirement: + * The Supervision_Timeout in milliseconds shall be larger than + * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP connection security modes. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Channel mask (40 bits). + * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, + * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents + * channel index 39. If a bit is set to 1, the channel is not used. + */ +typedef uint8_t ble_gap_ch_mask_t[5]; + + +/**@brief GAP advertising parameters. */ +typedef struct +{ + ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ + ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. + @note ble_gap_addr_t::addr_type cannot be + @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. + - When privacy is enabled and the local device uses + @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, + the device identity list is searched for a matching entry. If + the local IRK for that device identity is set, the local IRK + for that device will be used to generate the advertiser address + field in the advertising packet. + - If @ref ble_gap_adv_properties_t::type is directed, this must be + set to the targeted scanner or initiator. If the peer address is + in the device identity list, the peer IRK for that device will be + used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE + target addresses used in the advertising event PDUs. */ + uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. + @note If @ref ble_gap_adv_properties_t::type is set to + @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE + advertising, this parameter is ignored. */ + uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, + an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. + @sa BLE_GAP_ADV_TIMEOUT_VALUES. + @note The SoftDevice will always complete at least one advertising + event even if the duration is set too low. */ + uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling + advertising. Setting the value to 0 disables the limitation. When + the count of advertising events specified by this parameter + (if not 0) is reached, advertising will be automatically stopped + and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised + @note If @ref ble_gap_adv_properties_t::type is set to + @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, + this parameter is ignored. */ + ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. + At least one of the primary channels, that is channel index 37-39, must be used. + Masking away secondary advertising channels is not supported. */ + uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ + uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets + are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS + will be used. + Valid values are @ref BLE_GAP_PHY_1MBPS and @ref BLE_GAP_PHY_CODED. + @note The primary_phy shall indicate @ref BLE_GAP_PHY_1MBPS if + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising channel packets + are transmitted. + If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS will be used. + Valid values are + @ref BLE_GAP_PHY_1MBPS, @ref BLE_GAP_PHY_2MBPS, and @ref BLE_GAP_PHY_CODED. + If @ref ble_gap_adv_properties_t::type is an extended advertising type + and connectable, this is the PHY that will be used to establish a + connection and send AUX_ADV_IND packets on. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t set_id:4; /**< The advertising set identifier distinguishes this advertising set from other + advertising sets transmitted by this and other devices. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a + scan request is received and the scanner address is allowed + by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is a non-scannable + advertising type. */ +} ble_gap_adv_params_t; + + +/**@brief GAP advertising data buffers. + * + * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and + * shall never be modified while advertising. The data shall be kept alive until either: + * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. + * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding + * advertising handle. + * - Advertising is stopped. + * - Advertising data is changed. + * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ +typedef struct +{ + ble_data_t adv_data; /**< Advertising data. + @note + Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type + that is allowed to contain advertising data. */ + ble_data_t scan_rsp_data; /**< Scan response data. + @note + Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type + that is scannable. */ +} ble_gap_adv_data_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t extended : 1; /**< If 1, the scanner will accept extended advertising packets. + If set to 0, the scanner will not receive advertising packets + on secondary advertising channels, and will not be able + to receive long advertising PDUs. */ + uint8_t report_incomplete_evts : 1; /**< If 1, events of type @ref ble_gap_evt_adv_report_t may have + @ref ble_gap_adv_report_type_t::status set to + @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. + This parameter is ignored when used with @ref sd_ble_gap_connect + @note This may be used to abort receiving more packets from an extended + advertising event, and is only available for extended + scanning, see @ref sd_ble_gap_scan_start. + @note This feature is not supported by this SoftDevice. */ + uint8_t active : 1; /**< If 1, perform active scanning by sending scan requests. + This parameter is ignored when used with @ref sd_ble_gap_connect. */ + uint8_t filter_policy : 2; /**< Scanning filter policy. @sa BLE_GAP_SCAN_FILTER_POLICIES. + @note Only @ref BLE_GAP_SCAN_FP_ACCEPT_ALL and + @ref BLE_GAP_SCAN_FP_WHITELIST are valid when used with + @ref sd_ble_gap_connect */ + uint8_t scan_phys; /**< Bitfield of PHYs to scan on. If set to @ref BLE_GAP_PHY_AUTO, + scan_phys will default to @ref BLE_GAP_PHY_1MBPS. + - If @ref ble_gap_scan_params_t::extended is set to 0, the only + supported PHY is @ref BLE_GAP_PHY_1MBPS. + - When used with @ref sd_ble_gap_scan_start, + the bitfield indicates the PHYs the scanner will use for scanning + on primary advertising channels. The scanner will accept + @ref BLE_GAP_PHYS_SUPPORTED as secondary advertising channel PHYs. + - When used with @ref sd_ble_gap_connect, the + bitfield indicates the PHYs on where a connection may be initiated. + If scan_phys contains @ref BLE_GAP_PHY_1MBPS and/or @ref BLE_GAP_PHY_2MBPS, + the primary scan PHY is @ref BLE_GAP_PHY_1MBPS. + If scan_phys also contains @ref BLE_GAP_PHY_CODED, the primary scan + PHY will also contain @ref BLE_GAP_PHY_CODED. If the only scan PHY is + @ref BLE_GAP_PHY_CODED, the primary scan PHY is + @ref BLE_GAP_PHY_CODED only. */ + uint16_t interval; /**< Scan interval in 625 us units. @sa BLE_GAP_SCAN_INTERVALS. */ + uint16_t window; /**< Scan window in 625 us units. @sa BLE_GAP_SCAN_WINDOW. + If scan_phys contains both @ref BLE_GAP_PHY_1MBPS and + @ref BLE_GAP_PHY_CODED interval shall be larger than or + equal to twice the scan window. */ + uint16_t timeout; /**< Scan timeout in 10 ms units. @sa BLE_GAP_SCAN_TIMEOUT. */ + ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. + At least one of the primary channels, that is channel index 37-39, must be + set to 0. + Masking away secondary channels is not supported. */ +} ble_gap_scan_params_t; + + +/**@brief Privacy. + * + * The privacy feature provides a way for the device to avoid being tracked over a period of time. + * The privacy feature, when enabled, hides the local device identity and replaces it with a private address + * that is automatically refreshed at a specified interval. + * + * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). + * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, + * and devices can establish connections without revealing their real identities. + * + * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) + * are supported. + * + * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all + * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. + * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. + */ +typedef struct +{ + uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ + uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ + uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ + ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. + When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. + By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ +} ble_gap_privacy_params_t; + + +/**@brief PHY preferences for TX and RX + * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. + * @code + * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; + * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; + * @endcode + * + */ +typedef struct +{ + uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ + uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ +} ble_gap_phys_t; + +/** @brief Keys that can be exchanged during a bonding procedure. */ +typedef struct +{ + uint8_t enc : 1; /**< Long Term Key and Master Identification. */ + uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ + uint8_t sign : 1; /**< Connection Signature Resolving Key. */ + uint8_t link : 1; /**< Derive the Link Key from the LTK. */ +} ble_gap_sec_kdist_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ + uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ + uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< The OOB data flag. + - In LE legacy pairing, this flag is set if a device has out of band authentication data. + The OOB method is used if both of the devices have out of band authentication data. + - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. + The OOB method is used if at least one device has the peer device's OOB data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ + ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ + ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 6; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP LE Secure Connections P-256 Public Key. */ +typedef struct +{ + uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ +} ble_gap_lesc_p256_pk_t; + + +/**@brief GAP LE Secure Connections DHKey. */ +typedef struct +{ + uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ +} ble_gap_lesc_dhkey_t; + + +/**@brief GAP LE Secure Connections OOB data. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address of the device. */ + uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ + uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ +} ble_gap_lesc_oob_data_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ + uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ + uint8_t adv_handle; /**< Advertising handle in which advertising has ended. + This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ + ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated + advertising set. The advertising buffers provided in + @ref sd_ble_gap_adv_set_configure are now released. + This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ +} ble_gap_evt_connected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ +typedef struct +{ + uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ +} ble_gap_evt_phy_update_request_t; + +/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ +typedef struct +{ + uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ + uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ + uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ +} ble_gap_evt_phy_update_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ + uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply + with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or + @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ +} ble_gap_evt_passkey_display_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ +typedef struct +{ + uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ +} ble_gap_evt_key_pressed_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ +typedef struct +{ + ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory + inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ + uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ +} ble_gap_evt_lesc_dhkey_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ + uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Encryption Key. */ +typedef struct +{ + ble_gap_enc_info_t enc_info; /**< Encryption Information. */ + ble_gap_master_id_t master_id; /**< Master Identification. */ +} ble_gap_enc_key_t; + + +/**@brief Identity Key. */ +typedef struct +{ + ble_gap_irk_t id_info; /**< Identity Resolving Key. */ + ble_gap_addr_t id_addr_info; /**< Identity Address. */ +} ble_gap_id_key_t; + + +/**@brief Security Keys. */ +typedef struct +{ + ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ + ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ + ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ + ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined + in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ +} ble_gap_sec_keys_t; + + +/**@brief Security key set for both local and peer keys. */ +typedef struct +{ + ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ + ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ +} ble_gap_sec_keyset_t; + + +/**@brief Data Length Update Procedure parameters. */ +typedef struct +{ + uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ + uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ + uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ + uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ +} ble_gap_data_length_params_t; + + +/**@brief Data Length Update Procedure local limitation. */ +typedef struct +{ + uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ + uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ + uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ +} ble_gap_data_length_limitation_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + uint8_t bonded : 1; /**< Procedure resulted in a bond. */ + uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ + ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ + union + { + ble_data_t adv_report_buffer; /**< If source is set to @ref BLE_GAP_TIMEOUT_SRC_SCAN, the released + scan buffer is contained in this field. */ + } params; /**< Event Parameters. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. + @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ + uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ +} ble_gap_evt_rssi_changed_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ +typedef struct +{ + uint8_t reason; /**< Reason for why the advertising set terminated. See + @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ + uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ + uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, + this field indicates the number of completed advertising events. */ + ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated + advertising set. The advertising buffers provided in + @ref sd_ble_gap_adv_set_configure are now released. */ +} ble_gap_evt_adv_set_terminated_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. + * + * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, + * not all fields in the advertising report may be available. + * + * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, + * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. + */ +typedef struct +{ + ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: + @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the + peer's identity address. */ + ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if + @ref ble_gap_adv_report_type_t::directed is set to 1. If the + SoftDevice was able to resolve the address, + @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr + contains the local identity address. If the target address of the + advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, + and the SoftDevice was unable to resolve it, the application may try + to resolve this address to find out if the advertising event was + directed to us. */ + uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received. + See @ref BLE_GAP_PHYS. */ + uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received. + See @ref BLE_GAP_PHYS. This field is set to @ref BLE_GAP_PHY_NOT_SET if no packets + were received on a secondary advertising channel. */ + int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. + This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the + last received packet did not contain the Tx Power field. + @note TX Power is only included in extended advertising packets. */ + int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. + @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ + uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ + uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present + if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ + uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID + is not present if @ref ble_gap_evt_adv_report_t::set_id is set to + @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ + ble_data_t data; /**< Received advertising or scan response data. If + @ref ble_gap_adv_report_type_t::status is not set to + @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided + in @ref sd_ble_gap_scan_start is now released. */ + ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising + event. @note This field is only set if @ref ble_gap_adv_report_type_t::status + is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ +} ble_gap_evt_adv_report_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection requested. */ + uint8_t lesc : 1; /**< LE Secure Connections requested. */ + uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ +} ble_gap_evt_sec_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ +typedef struct +{ + uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ + int8_t rssi; /**< Received Signal Strength Indication in dBm. + @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ +} ble_gap_evt_scan_req_report_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ +} ble_gap_evt_data_length_update_request_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ +typedef struct +{ + ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ +} ble_gap_evt_data_length_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT. */ +typedef struct +{ + int8_t channel_energy[BLE_GAP_CHANNEL_COUNT]; /**< The measured energy on the Bluetooth Low Energy + channels, in dBm, indexed by Channel Index. + If no measurement is available for the given channel, channel_energy is set to + @ref BLE_GAP_POWER_LEVEL_INVALID. */ +} ble_gap_evt_qos_channel_survey_report_t; + +/**@brief GAP event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ + ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ + ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ + ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ + ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ + ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ + ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ + ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ + ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ + ble_gap_evt_qos_channel_survey_report_t qos_channel_survey_report; /**< Quality of Service (QoS) Channel Survey Report Parameters. */ + } params; /**< Event Parameters. */ +} ble_gap_evt_t; + + +/** + * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. + * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. + */ +typedef struct +{ + uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. + The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ + uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. + The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. + The event length and the connection interval are the primary parameters + for setting the throughput of a connection. + See the SoftDevice Specification for details on throughput. */ +} ble_gap_conn_cfg_t; + + +/** + * @brief Configuration of maximum concurrent connections in the different connected roles, set with + * @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too + * large. The maximum supported sum of concurrent connections is + * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. + * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. + * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum + * supported advertising handles is + * @ref BLE_GAP_ADV_SET_COUNT_MAX. + */ +typedef struct +{ + uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ + uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ + uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ + uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ + uint8_t qos_channel_survey_role_available:1; /**< If set, the Quality of Service (QoS) channel survey module is available to the + application using @ref sd_ble_gap_qos_channel_survey_start. */ +} ble_gap_cfg_role_count_t; + + +/** + * @brief Device name and its properties, set with @ref sd_ble_cfg_set. + * + * @note If the device name is not configured, the default device name will be + * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be + * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name + * will have no write access. + * + * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, + * the attribute table size must be increased to have room for the longer device name (see + * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). + * + * @note If vloc is @ref BLE_GATTS_VLOC_STACK : + * - p_value must point to non-volatile memory (flash) or be NULL. + * - If p_value is NULL, the device name will initially be empty. + * + * @note If vloc is @ref BLE_GATTS_VLOC_USER : + * - p_value cannot be NULL. + * - If the device name is writable, p_value must point to volatile memory (RAM). + * + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - Invalid device name location (vloc). + * - Invalid device name security mode. + * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: + * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). + * - The device name length is too long for the given Attribute Table. + * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. + */ +typedef struct +{ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ + uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ + uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ +} ble_gap_cfg_device_name_t; + + +/**@brief Configuration structure for GAP configurations. */ +typedef union +{ + ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ + ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ +} ble_gap_cfg_t; + + +/**@brief Channel Map option. + * + * @details Used with @ref sd_ble_opt_get to get the current channel map + * or @ref sd_ble_opt_set to set a new channel map. When setting the + * channel map, it applies to all current and future connections. When getting the + * current channel map, it applies to a single connection and the connection handle + * must be supplied. + * + * @note Setting the channel map may take some time, depending on connection parameters. + * The time taken may be different for each connection and the get operation will + * return the previous channel map until the new one has taken effect. + * + * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. + * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. + * + * @retval ::NRF_SUCCESS Get or set successful. + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - Less then two bits in @ref ch_map are set. + * - Bits for primary advertising channels (37-39) are set. + * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. + * + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ + uint8_t ch_map[5]; /**< Channel Map (37-bit). */ +} ble_gap_opt_ch_map_t; + + +/**@brief Local connection latency option. + * + * @details Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * @details Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is disabled by default, and needs to be enabled for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + +/**@brief Disable slave latency + * + * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection + * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the + * peripheral will ignore the slave_latency set by the central. + * + * @note Shall only be called on peripheral links. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ +} ble_gap_opt_slave_latency_disable_t; + +/**@brief Passkey Option. + * + * @details Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication + * instead of generating a random one. + * + * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Compatibility mode 1 option. + * + * @details This can be used with @ref sd_ble_opt_set to enable and disable + * compatibility mode 1. Compatibility mode 1 is disabled by default. + * + * @note Compatibility mode 1 enables interoperability with devices that do not support a value of + * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a + * limited set of legacy peripheral devices from another vendor. Enabling this compatibility + * mode will only have an effect if the local device will act as a central device and + * initiate a connection to a peripheral device. In that case it may lead to the connection + * creation taking up to one connection interval longer to complete for all connections. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable compatibility mode 1.*/ +} ble_gap_opt_compat_mode_1_t; + + +/**@brief Authenticated payload timeout option. + * + * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other + * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. + * + * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated + * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted + * link. + * + * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance + * to reset the timer. In addition the stack will try to prioritize running of LE ping over other + * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects + * on other activities, it is recommended to use high timeout values. + * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ +} ble_gap_opt_auth_payload_timeout_t; + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ + ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ + ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ + ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ + ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set the local Bluetooth identity address. + * + * The local Bluetooth identity address is the address that identifies this device to other peers. + * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * + * @note The identity address cannot be changed while advertising, scanning or creating a connection. + * + * @note This address will be distributed to the peer during bonding. + * If the address changes, the address stored in the peer device will not be valid and the ability to + * reconnect using the old address will be lost. + * + * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being + * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged + * for the lifetime of each IC. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @endmscs + * + * @param[in] p_addr Pointer to address structure. + * + * @retval ::NRF_SUCCESS Address successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, + * scanning or creating a connection. + */ +SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); + + +/**@brief Get local Bluetooth identity address. + * + * @note This will always return the identity address irrespective of the privacy settings, + * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * + * @param[out] p_addr Pointer to address structure to be filled in. + * + * @retval ::NRF_SUCCESS Address successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); + + +/**@brief Get the Bluetooth device address used by the advertiser. + * + * @note This function will return the local Bluetooth address used in advertising PDUs. When + * using privacy, the SoftDevice will generate a new private address every + * @ref ble_gap_privacy_params_t::private_addr_cycle_s configured using + * @ref sd_ble_gap_privacy_set. Hence depending on when the application calls this API, the + * address returned may not be the latest address that is used in the advertising PDUs. + * + * @param[in] adv_handle The advertising handle to get the address from. + * @param[out] p_addr Pointer to address structure to be filled in. + * + * @retval ::NRF_SUCCESS Address successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. + * @retval ::NRF_ERROR_INVALID_STATE The advertising set is currently not advertising. + */ +SVCALL(SD_BLE_GAP_ADV_ADDR_GET, uint32_t, sd_ble_gap_adv_addr_get(uint8_t adv_handle, ble_gap_addr_t *p_addr)); + + +/**@brief Set the active whitelist in the SoftDevice. + * + * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. + * The whitelist cannot be set if a BLE role is using the whitelist. + * + * @note If an address is resolved using the information in the device identity list, then the whitelist + * filter policy applies to the peer identity address and not the resolvable address sent on air. + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @endmscs + * + * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. + * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. + * + * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. + * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when + * pp_wl_addrs is not NULL. + */ +SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); + + +/**@brief Set device identity list. + * + * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. + * The device identity list cannot be set if a BLE role is using the list. + * + * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. + * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. + * To fill in the list with the currently set device IRK for all peers, set to NULL. + * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. + * This code may be returned if the local IRK list also has an invalid entry. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can + * only return when pp_id_keys is not NULL. + */ +SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); + + +/**@brief Set privacy settings. + * + * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. + * + * @param[in] p_privacy_params Privacy settings. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. + * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. + * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning + * or creating a connection. + */ +SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); + + +/**@brief Get privacy settings. + * + * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. + * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. + * + * @param[in,out] p_privacy_params Privacy settings. + * + * @retval ::NRF_SUCCESS Privacy settings read. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. + * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + */ +SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); + + +/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. + * + * @note The format of the advertising data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertising data and scan response data. + * + * @note In order to update advertising data while advertising, new advertising buffers must be provided. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure + * a new advertising set. On success, a new handle is then returned through the pointer. + * Provide a pointer to an existing advertising handle to configure an existing advertising set. + * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. + * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, + * this parameter must be NULL. See @ref ble_gap_adv_params_t. + * + * @retval ::NRF_SUCCESS Advertising set successfully configured. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: + * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. + * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. + * - Use of whitelist requested but whitelist has not been set, + * see @ref sd_ble_gap_whitelist_set. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - It is invalid to provide non-NULL advertising set parameters while advertising. + * - It is invalid to provide the same data buffers while advertising. To update + * advertising data, provide new advertising buffers. + * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to + * configure a new advertising handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification + * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an + * existing advertising handle instead. + * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + */ +SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @note Only one advertiser may be active at any time. + * + * @events + * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} + * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} + * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. + * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or + * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable + * advertising, this is ignored. + * + * @retval ::NRF_SUCCESS The BLE stack has started advertising. + * @retval ::NRF_ERROR_INVALID_STATE adv_handle is not configured or already advertising. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. + * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: + * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. + * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. + * @retval ::NRF_ERROR_RESOURCES Either: + * - adv_handle is configured with connectable advertising, but the event_length parameter + * associated with conn_cfg_tag is too small to be able to establish a connection on + * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. + * - Not enough BLE role slots available. + Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again. + * - p_adv_params is configured with connectable advertising, but the event_length parameter + * associated with conn_cfg_tag is too small to be able to establish a connection on + * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] adv_handle The advertising handle that should stop advertising. + * + * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. + * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(uint8_t adv_handle)); + + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CPU_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected + * + * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress or link has not been established. + * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a @ref BLE_GAP_EVT_DISCONNECTED event. + * + * @events + * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CONN_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). + * + * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress or link has not been established. + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for + * possible roles. + * @param[in] handle The handle parameter is interpreted depending on role: + * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. + * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, + * will use the specified transmit power, and include it in the advertising packet headers if + * @ref ble_gap_adv_properties_t::include_tx_power set. + * - For all other roles handle is ignored. + * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). + * + * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm and +8dBm. + * @note The initiator will have the same transmit power as the scanner. + * @note When a connection is created it will inherit the transmit power from the initiator or + * advertiser leading to the connection. + * + * @retval ::NRF_SUCCESS Successfully changed the transmit power. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(uint8_t role, uint16_t handle, int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); + + +/**@brief Set GAP device name. + * + * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), + * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. + * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @retval ::NRF_SUCCESS GAP device name retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); + + +/**@brief Initiate the GAP Authentication procedure. + * + * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), + * otherwise in the peripheral role, an SMP Security Request will be sent. + * + * @events + * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} + * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} + * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} + * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} + * @event{@ref BLE_GAP_EVT_KEY_PRESSED} + * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} + * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} + * @event{@ref BLE_GAP_EVT_AUTH_STATUS} + * @event{@ref BLE_GAP_EVT_TIMEOUT} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. + * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. + * In the central role, this pointer may be NULL to reject a Security Request. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - No link has been established. + * - An encryption is already executing or queued. + * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have + * already been provided during a previous call to @ref sd_ble_gap_authenticate. + * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure + * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application + * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. + * Note that the SoftDevice expects the application to provide memory for storing the + * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key + * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the + * @ref BLE_GAP_EVT_AUTH_STATUS event. + * + * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Security parameters has not been requested. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); + + +/**@brief Reply with an authentication key. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) + * or NULL when confirming LE Secure Connections Numeric Comparison. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. + * + * @retval ::NRF_SUCCESS Authentication key successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Authentication key has not been requested. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); + + +/**@brief Reply with an LE Secure connections DHKey. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dhkey LE Secure Connections DHKey. + * + * @retval ::NRF_SUCCESS DHKey successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - The peer is not authenticated. + * - The application has not pulled a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); + + +/**@brief Notify the peer of a local keypress. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. + * + * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Authentication key not requested. + * - Passkey has not been entered. + * - Keypresses have not been enabled by both peers. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); + + +/**@brief Generate a set of OOB data to send to a peer out of band. + * + * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, + * the one used during connection setup). The application may manually overwrite it with an updated value. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. + * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. + * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. + * + * @retval ::NRF_SUCCESS OOB data successfully generated. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); + +/**@brief Provide the OOB data sent/received out of band. + * + * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. + * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. + * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. + * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. + * Must correspond to @ref ble_gap_sec_params_t::oob flag + * in @ref sd_ble_gap_authenticate in the central role or + * in @ref sd_ble_gap_sec_params_reply in the peripheral role. + * + * @retval ::NRF_SUCCESS OOB data accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Authentication key not requested + * - Not expecting LESC OOB data + * - Have not actually exchanged passkeys. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); + + +/**@brief Initiate GAP Encryption procedure. + * + * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. + * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. + */ +SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); + + +/**@brief Reply with GAP security information. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @retval ::NRF_SUCCESS Successfully accepted security information. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - No link has been established. + * - No @ref BLE_GAP_EVT_SEC_REQUEST pending. + * - LE long term key requested command not allowed. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Current connection security successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @events + * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is + * dependent on the settings of the threshold_dbm + * and skip_count input parameters.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. + * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. + * + * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); + + +/**@brief Stop reporting the received signal strength. + * + * @note An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * + * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); + + +/**@brief Get the received signal strength for the last connection event. + * + * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND + * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. + * @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. + * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. + * + * @retval ::NRF_SUCCESS Successfully read the RSSI. + * @retval ::NRF_ERROR_NOT_FOUND No sample is available. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. + */ +SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); + + +/**@brief Start or continue scanning (GAP Discovery procedure, Observer Procedure). + * + * @note A call to this function will require the application to keep the memory pointed by + * p_adv_report_buffer alive until the buffer is released. The buffer is released when the scanner is stopped + * or when this function is called with another buffer. + * + * @note The scanner will automatically stop in the following cases: + * - @ref sd_ble_gap_scan_stop is called. + * - @ref sd_ble_gap_connect is called. + * - A @ref BLE_GAP_EVT_TIMEOUT with source set to @ref BLE_GAP_TIMEOUT_SRC_SCAN is received. + * - When a @ref BLE_GAP_EVT_ADV_REPORT event is received and @ref ble_gap_adv_report_type_t::status is not set to + * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. In this case scanning is only paused to let the application + * access received data. The application must call this function to continue scanning, or call @ref sd_ble_gap_scan_stop + * to stop scanning. + * + * @note If a @ref BLE_GAP_EVT_ADV_REPORT event is received with @ref ble_gap_adv_report_type_t::status set to + * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the scanner will continue scanning, and the application will + * receive more reports from this advertising event. The following reports will include the old and new received data. + * + * @events + * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] p_scan_params Pointer to scan parameters structure. When this function is used to continue + * scanning, this parameter must be NULL. + * @param[in] p_adv_report_buffer Pointer to buffer used to store incoming advertising data. + * The memory pointed to should be kept alive until the scanning is stopped. + * See @ref BLE_GAP_SCAN_BUFFER_SIZE for minimum and maximum buffer size. + * If the scanner receives advertising data larger than can be stored in the buffer, + * a @ref BLE_GAP_EVT_ADV_REPORT will be raised with @ref ble_gap_adv_report_type_t::status + * set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED. + * + * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Scanning is already ongoing and p_scan_params was not NULL + * - Scanning is not running and p_scan_params was NULL. + * - The scanner has timed out when this function is called to continue scanning. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. See @ref ble_gap_scan_params_t. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported parameters supplied. See @ref ble_gap_scan_params_t. + * @retval ::NRF_ERROR_INVALID_LENGTH The provided buffer length is invalid. See @ref BLE_GAP_SCAN_BUFFER_MIN. + * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again + */ +SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params, ble_data_t const * p_adv_report_buffer)); + + +/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). + * + * @note The buffer provided in @ref sd_ble_gap_scan_start is released. + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. + * @retval ::NRF_ERROR_INVALID_STATE Not in the scanning state. + */ +SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); + + +/**@brief Create a connection (GAP Link Establishment). + * + * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. + * The scanning procedure will be stopped even if the function returns an error. + * + * @events + * @event{@ref BLE_GAP_EVT_CONNECTED, A connection was established.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Failed to establish a connection.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @param[in] p_peer_addr Pointer to peer identity address. If @ref ble_gap_scan_params_t::filter_policy is set to use + * whitelist, then p_peer_addr is ignored. + * @param[in] p_scan_params Pointer to scan parameters structure. + * @param[in] p_conn_params Pointer to desired connection parameters. + * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or + * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. + * + * @retval ::NRF_SUCCESS Successfully initiated connection procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * - Invalid parameter(s) in p_scan_params or p_conn_params. + * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. + * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. + * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. + * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an + * existing locally initiated connect procedure, which must complete before initiating again. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. + * @retval ::NRF_ERROR_RESOURCES Either: + * - Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Observer) and try again. + * - The event_length parameter associated with conn_cfg_tag is too small to be able to + * establish a connection on the selected @ref ble_gap_scan_params_t::scan_phys. + * Use @ref sd_ble_cfg_set to increase the event length. + */ +SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); + + +/**@brief Cancel a connection establishment. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. + * @retval ::NRF_ERROR_INVALID_STATE No locally initiated connect procedure started or connection + * completed occurred. + */ +SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); + + +/**@brief Initiate or respond to a PHY Update Procedure + * + * @details This function is used to initiate or respond to a PHY Update Procedure. It will always + * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. + * If this function is used to initiate a PHY Update procedure and the only option + * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the + * currently active PHYs in the respective directions, the SoftDevice will generate a + * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the + * procedure in the Link Layer. + * + * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, + * then the stack will select PHYs based on the peer's PHY preferences and the local link + * configuration. The PHY Update procedure will for this case result in a PHY combination + * that respects the time constraints configured with @ref sd_ble_cfg_set and the current + * link layer data length. + * + * When acting as a central, the SoftDevice will select the fastest common PHY in each direction. + * + * If the peer does not support the PHY Update Procedure, then the resulting + * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to + * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. + * + * If the PHY procedure was rejected by the peer due to a procedure collision, the status + * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or + * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. + * If the peer responds to the PHY Update procedure with invalid parameters, the status + * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. + * If the PHY procedure was rejected by the peer for a different reason, the status will + * contain the reason as specified by the peer. + * + * @events + * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} + * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} + * @endmscs + * + * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. + * @param[in] p_gap_phys Pointer to PHY structure. + * + * @retval ::NRF_SUCCESS Successfully requested a PHY Update. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the combination of + * @ref ble_gap_phys_t::tx_phys, @ref ble_gap_phys_t::rx_phys, and @ref ble_gap_data_length_params_t. + * The connection event length is configured with @ref BLE_CONN_CFG_GAP using @ref sd_ble_cfg_set. + * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. + * + */ +SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); + + +/**@brief Initiate or respond to a Data Length Update Procedure. + * + * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of + * p_dl_params, the SoftDevice will choose the highest value supported in current + * configuration and connection parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update + * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let + * the SoftDevice automatically decide the value for that member. + * Set to NULL to use automatic values for all members. + * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not + * have enough resources or does not support the requested Data Length + * Update parameters. Ignored if NULL. + * + * @mscs + * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. Inspect + * p_dl_limitation to see which parameter is not supported. + * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. + * Use @ref sd_ble_cfg_set with @ref BLE_CONN_CFG_GAP to increase the connection event length. + * Inspect p_dl_limitation to see where the limitation is. + * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the + * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. + */ +SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); + +/**@brief Start the Quality of Service (QoS) channel survey module. + * + * @details The channel survey module provides measurements of the energy levels on + * the Bluetooth Low Energy channels. When the module is enabled, @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT + * events will periodically report the measured energy levels for each channel. + * + * @note The measurements are scheduled with lower priority than other Bluetooth Low Energy roles, + * Radio Timeslot API events and Flash API events. + * + * @note The channel survey module will attempt to do measurements so that the average interval + * between measurements will be interval_us. However due to the channel survey module + * having the lowest priority of all roles and modules, this may not be possible. In that + * case fewer than expected channel survey reports may be given. + * + * @note In order to use the channel survey module, @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available + * must be set. This is done using @ref sd_ble_cfg_set. + * + * @param[in] interval_us Requested average interval for the measurements and reports. See + * @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS for valid ranges. If set + * to @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS, the channel + * survey role will be scheduled at every available opportunity. + * + * @retval ::NRF_SUCCESS The module is successfully started. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter supplied. interval_us is out of the + * allowed range. + * @retval ::NRF_ERROR_INVALID_STATE Trying to start the module when already running. + * @retval ::NRF_ERROR_RESOURCES The channel survey module is not available to the application. + * Set @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available using + * @ref sd_ble_cfg_set. + */ +SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START, uint32_t, sd_ble_gap_qos_channel_survey_start(uint32_t interval_us)); + +/**@brief Stop the Quality of Service (QoS) channel survey module. + * + * @retval ::NRF_SUCCESS The module is successfully stopped. + * @retval ::NRF_ERROR_INVALID_STATE Trying to stop the module when it is not running. + */ +SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP, uint32_t, sd_ble_gap_qos_channel_survey_stop(void)); + + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GAP_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gatt.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gatt.h new file mode 100644 index 0000000..9cb577c --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gatt.h @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default ATT MTU, in bytes. */ +#define BLE_GATT_ATT_MTU_DEFAULT 23 + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/**@brief First Attribute Handle. */ +#define BLE_GATT_HANDLE_START 0x0001 + +/**@brief Last Attribute Handle. */ +#define BLE_GATT_HANDLE_END 0xFFFF + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_WRITE_REQ_REJECTED 0x01FC /**< ATT Common Profile and Service Error: Write request rejected. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. + */ +typedef struct +{ + uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. + The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + @mscs + @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + @endmscs + */ +} ble_gatt_conn_cfg_t; + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ + uint8_t read :1; /**< Reading the value permitted. */ + uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ + uint8_t write :1; /**< Writing the value with Write Request permitted. */ + uint8_t notify :1; /**< Notification of the value permitted. */ + uint8_t indicate :1; /**< Indications of the value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ +} ble_gatt_char_ext_props_t; + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATT_H__ + +/** @} */ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gattc.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gattc.h new file mode 100644 index 0000000..7fb3920 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gattc.h @@ -0,0 +1,715 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" +#include "ble_gatt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ + SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ +}; + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ + BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ + BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ + BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ + BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ +/** @} */ + +/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats + * @{ */ +#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ +#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ +/** @} */ + +/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults + * @{ */ +#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. + */ +typedef struct +{ + uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. + The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ +} ble_gattc_conn_cfg_t; + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t const *p_value; /**< Pointer to the value data. */ +} ble_gattc_write_params_t; + +/**@brief Attribute Information for 16-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ +} ble_gattc_attr_info16_t; + +/**@brief Attribute Information for 128-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ +} ble_gattc_attr_info128_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Attribute count. */ + uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ + union { + ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + } info; /**< Attribute information union. */ +} ble_gattc_evt_attr_info_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ +typedef struct +{ + uint16_t server_rx_mtu; /**< Server RX MTU size. */ +} ble_gattc_evt_exchange_mtu_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ +typedef struct +{ + uint8_t count; /**< Number of write without response transmissions completed. */ +} ble_gattc_evt_write_cmd_tx_complete_t; + +/**@brief GATTC event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ + ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. + * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @events + * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @events + * @event{@ref BLE_GATTC_EVT_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note Only one write with response procedure can be ongoing per connection at a time. + * If the application tries to write with response while another write with response procedure is ongoing, + * the function call will return @ref NRF_ERROR_BUSY. + * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. + * + * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size + * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. + * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. + * + * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: + * - Store initial queue element count in a variable. + * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. + * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. + * + * @events + * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} + * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @retval ::NRF_SUCCESS Successfully started the Write procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. + * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. + * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @mscs + * @mmsc{@ref BLE_GATTC_HVI_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); + +/**@brief Discovers information about a range of attributes on a GATT server. + * + * @events + * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} + * @endevents + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range The range of handles to request information about. + * + * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); + +/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value, and + * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. + * + * @events + * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] client_rx_mtu Client RX MTU size. + * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration + used for this connection. + * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent request to the server. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); + +/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * + * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * @note If the buffer contains different event, behavior is undefined. + * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with + * the next Handle-Value pair in each iteration. If the function returns other than + * @ref NRF_SUCCESS, it will not be changed. + * - To start iteration, initialize the structure to zero. + * - To continue, pass the value from previous iteration. + * + * \code + * ble_gattc_handle_value_t iter; + * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); + * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) + * { + * app_handle = iter.handle; + * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); + * } + * \endcode + * + * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. + * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. + */ +__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); + +/** @} */ + +#ifndef SUPPRESS_INLINE_IMPLEMENTATION + +__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) +{ + uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; + uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; + uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; + + if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) + { + p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; + p_iter->p_value = p_next + sizeof(uint16_t); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_NOT_FOUND; + } +} + +#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ + +#ifdef __cplusplus +} +#endif +#endif /* BLE_GATTC_H__ */ + +/** + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gatts.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gatts.h new file mode 100644 index 0000000..394d8d1 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_gatts.h @@ -0,0 +1,845 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" +#include "ble_gatt.h" +#include "ble_gap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ + SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ + SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ + SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ +}; + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ + BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ + BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ + BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ +}; + +/**@brief GATTS Configuration IDs. + * + * IDs that uniquely identify a GATTS configuration. + */ +enum BLE_GATTS_CFGS +{ + BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ + BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + +/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags + * @{ */ +#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ +#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ +/** @} */ + +/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values + * @{ + */ +#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size + * @{ + */ +#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ +#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ +/** @} */ + +/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults + * @{ + */ +#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. + */ +typedef struct +{ + uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. + The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ +} ble_gatts_conn_cfg_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ +} ble_gatts_attr_t; + +/**@brief GATT Attribute Value. */ +typedef struct +{ + uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ + uint16_t offset; /**< Attribute value offset. */ + uint8_t *p_value; /**< Pointer to where value is stored or will be stored. + If value is stored in user memory, only the attribute length is updated when p_value == NULL. + Set to NULL when reading to obtain the complete length of the attribute value */ +} ble_gatts_value_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ + ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ + uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. + Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, + as the data to be written needs to be stored and later provided by the application. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ + } params; /**< Reply Parameters. */ +} ble_gatts_rw_authorize_reply_params_t; + +/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ +typedef struct +{ + uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ +} ble_gatts_cfg_service_changed_t; + +/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: + * - The specified Attribute Table size is too small. + * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. + * - The specified Attribute Table size is not a multiple of 4. + */ +typedef struct +{ + uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ +} ble_gatts_cfg_attr_tab_size_t; + +/**@brief Config structure for GATTS configurations. */ +typedef union +{ + ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ + ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ +} ble_gatts_cfg_t; + + +/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the received data. */ + uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gatts_evt_write_t; + +/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; /**< Request Parameters. */ +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; /**< Hint (currently unused). */ +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ +typedef struct +{ + uint16_t client_rx_mtu; /**< Client RX MTU size. */ +} ble_gatts_evt_exchange_mtu_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ +typedef struct +{ + uint8_t count; /**< Number of notification transmissions completed. */ +} ble_gatts_evt_hvn_tx_complete_t; + +/**@brief GATTS event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ + } params; /**< Event Parameters. */ +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the Attribute Table. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the Attribute Table. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a service declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); + + +/**@brief Add an include declaration to the Attribute Table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). + * + * @note The included service must already be present in the Attribute Table prior to this call. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added an include declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, + * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a characteristic. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); + + +/**@brief Add a descriptor to the Attribute Table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a descriptor. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); + +/**@brief Set the value of a given attribute. + * + * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully set the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Get the value of a given attribute. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. + * The application may use this information to allocate a suitable buffer size. + * + * @note When retrieving system attribute values with this function, the connection handle + * may refer to an already disconnected connection. Refer to the documentation of + * @ref sd_ble_gatts_sys_attr_get for further information. + * + * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, + * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. + * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). + * + * @note Only one indication procedure can be ongoing per connection at a time. + * If the application tries to indicate an attribute value while another indication procedure is ongoing, + * the function call will return @ref NRF_ERROR_BUSY. + * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. + * + * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size + * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. + * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. + * + * @note The application can keep track of the available queue element count for notifications by following the procedure below: + * - Store initial queue element count in a variable. + * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. + * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. + * + * @events + * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} + * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_HVN_MSC} + * @mmsc{@ref BLE_GATTS_HVI_MSC} + * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data + * contains a non-NULL pointer the attribute value will be updated with the contents + * pointed by it before sending the notification or indication. If the attribute value + * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to + * contain the number of actual bytes written, else it will be set to 0. + * + * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. + * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute + * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @events + * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_SC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref + * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @retval ::NRF_ERROR_BUSY Procedure already in progress. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond + * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update + * is set to 0. + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, + * handle supplied does not match requested handle, + * or invalid data to be written provided by the application. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply information about persistent system attributes to the stack, + * previously obtained using @ref sd_ble_gatts_sys_attr_get. + * This call is only allowed for active connections, and is usually + * made immediately after a connection is established with an known bonded device, + * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the system attributes + * obtained using @ref sd_ble_gatts_sys_attr_get. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved system attribute data for this device. + * + * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully set the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored persistently by the application + * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, + * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. + * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for + * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. + * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes + * may be written to at any time by the peer during a connection's lifetime. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. + * + * @mscs + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described + * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); + + +/**@brief Retrieve the first valid user attribute handle. + * + * @param[out] p_handle Pointer to an integer where the handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully retrieved the handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); + +/**@brief Retrieve the attribute UUID and/or metadata. + * + * @param[in] handle Attribute handle + * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. + * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. + * + * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. + * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. + */ +SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); + +/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. + * + * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and + * - The Server RX MTU value. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. + * + * @mscs + * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] server_rx_mtu Server RX MTU size. + * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration + * used for this connection. + * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent response to the client. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATTS_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_hci.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_hci.h new file mode 100644 index 0000000..f0dde9a --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_hci.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ +#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +*/ +#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ +/* +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ + +/** @} */ + + +#ifdef __cplusplus +} +#endif +#endif // BLE_HCI_H__ + +/** @} */ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_l2cap.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_l2cap.h new file mode 100644 index 0000000..edaf664 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_l2cap.h @@ -0,0 +1,506 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology + * @{ + * @details + * + * L2CAP SDU + * - A data unit that the application can send/receive to/from a peer. + * + * L2CAP PDU + * - A data unit that is exchanged between local and remote L2CAP entities. + * It consists of L2CAP protocol control information and payload fields. + * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. + * + * L2CAP MTU + * - The maximum length of an L2CAP SDU. + * + * L2CAP MPS + * - The maximum length of an L2CAP PDU payload field. + * + * Credits + * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. + * @} */ + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ + SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ + SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ + SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ + SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ +}; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. + \n See @ref ble_l2cap_evt_ch_setup_request_t. */ + BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. + \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ + BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. + \n See @ref ble_l2cap_evt_ch_setup_t. */ + BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. + \n No additional event structure applies. */ + BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. + \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ + BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. + \n See @ref ble_l2cap_evt_ch_credit_t. */ + BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. + \n See @ref ble_l2cap_evt_ch_rx_t. */ + BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. + \n See @ref ble_l2cap_evt_ch_tx_t. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@brief Maximum number of L2CAP channels per connection. */ +#define BLE_L2CAP_CH_COUNT_MAX (64) + +/**@brief Minimum L2CAP MTU, in bytes. */ +#define BLE_L2CAP_MTU_MIN (23) + +/**@brief Minimum L2CAP MPS, in bytes. */ +#define BLE_L2CAP_MPS_MIN (23) + +/**@brief Invalid CID. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ +#define BLE_L2CAP_CREDITS_DEFAULT (1) + +/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources + * @{ */ +#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ +#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ + /** @} */ + + /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes + * @{ */ +#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ +#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ +#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ +#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ +#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ +#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ +#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ +#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ +/** @} */ + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @note These parameters are set per connection, so all L2CAP channels created on this connection + * will have the same parameters. + * + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. + * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. + * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. + * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. + */ +typedef struct +{ + uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall + be able to receive on L2CAP channels on connections with this + configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ + uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall + be able to transmit on L2CAP channels on connections with this + configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ + uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per + L2CAP channel. The minimum value is one. */ + uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission + per L2CAP channel. The minimum value is one. */ + uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection + with this configuration. The default value is zero, the maximum + value is @ref BLE_L2CAP_CH_COUNT_MAX. + @note if this parameter is set to zero, all other parameters in + @ref ble_l2cap_conn_cfg_t are ignored. */ +} ble_l2cap_conn_cfg_t; + +/**@brief L2CAP channel RX parameters. */ +typedef struct +{ + uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to + receive on this L2CAP channel. + - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ + uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be + able to receive on this L2CAP channel. + - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. + - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ + ble_data_t sdu_buf; /**< SDU data buffer for reception. + - If @ref ble_data_t::p_data is non-NULL, initial credits are + issued to the peer. + - If @ref ble_data_t::p_data is NULL, no initial credits are + issued to the peer. */ +} ble_l2cap_ch_rx_params_t; + +/**@brief L2CAP channel setup parameters. */ +typedef struct +{ + ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ + uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting + setup of an L2CAP channel, ignored otherwise. */ + uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. + Used when replying to a setup request of an L2CAP + channel, ignored otherwise. */ +} ble_l2cap_ch_setup_params_t; + +/**@brief L2CAP channel TX parameters. */ +typedef struct +{ + uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to + transmit on this L2CAP channel. */ + uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is + able to receive on this L2CAP channel. */ + uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able + to transmit on this L2CAP channel. This is effective tx_mps, + selected by the SoftDevice as + MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ + uint16_t credits; /**< Initial credits given by the peer. */ +} ble_l2cap_ch_tx_params_t; + +/**@brief L2CAP Channel Setup Request event. */ +typedef struct +{ + ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ + uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ +} ble_l2cap_evt_ch_setup_request_t; + +/**@brief L2CAP Channel Setup Refused event. */ +typedef struct +{ + uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ + uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ +} ble_l2cap_evt_ch_setup_refused_t; + +/**@brief L2CAP Channel Setup Completed event. */ +typedef struct +{ + ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ +} ble_l2cap_evt_ch_setup_t; + +/**@brief L2CAP Channel SDU Data Buffer Released event. */ +typedef struct +{ + ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice + returns SDU data buffers supplied by the application, which have + not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or + @ref BLE_L2CAP_EVT_CH_TX event. */ +} ble_l2cap_evt_ch_sdu_buf_released_t; + +/**@brief L2CAP Channel Credit received event. */ +typedef struct +{ + uint16_t credits; /**< Additional credits given by the peer. */ +} ble_l2cap_evt_ch_credit_t; + +/**@brief L2CAP Channel received SDU event. */ +typedef struct +{ + uint16_t sdu_len; /**< Total SDU length, in bytes. */ + ble_data_t sdu_buf; /**< SDU data buffer. + @note If there is not enough space in the buffer + (sdu_buf.len < sdu_len) then the rest of the SDU will be + silently discarded by the SoftDevice. */ +} ble_l2cap_evt_ch_rx_t; + +/**@brief L2CAP Channel transmitted SDU event. */ +typedef struct +{ + ble_data_t sdu_buf; /**< SDU data buffer. */ +} ble_l2cap_evt_ch_tx_t; + +/**@brief L2CAP event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which the event occured. */ + uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or + @ref BLE_L2CAP_CID_INVALID if not present. */ + union + { + ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ + ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ + ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ + ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ + ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ + ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ + ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ + } params; /**< Event Parameters. */ +} ble_l2cap_evt_t; + +/** @} */ + +/**@addtogroup BLE_L2CAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set up an L2CAP channel. + * + * @details This function is used to: + * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. + * - Reply to a setup request of an L2CAP channel (if called in response to a + * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection + * Response packet to a peer. + * + * @note A call to this function will require the application to keep the SDU data buffer alive + * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or + * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} + * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: + * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP + * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST + * event when replying to a setup request of an L2CAP channel. + * - As output: local_cid for this channel. + * @param[in] p_params L2CAP channel parameters. + * + * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, + * see @ref ble_l2cap_conn_cfg_t::ch_count. + */ +SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); + +/**@brief Release an L2CAP channel. + * + * @details This sends a Disconnection Request packet to a peer. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * + * @retval ::NRF_SUCCESS Successfully queued request for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for the L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + */ +SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); + +/**@brief Receive an SDU on an L2CAP channel. + * + * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. + * + * @note A call to this function will require the application to keep the memory pointed by + * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX + * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers + * for reception per L2CAP channel. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * @param[in] p_sdu_buf Pointer to the SDU data buffer. + * + * @retval ::NRF_SUCCESS Buffer accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for an L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a + * @ref BLE_L2CAP_EVT_CH_RX event and retry. + */ +SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); + +/**@brief Transmit an SDU on an L2CAP channel. + * + * @note A call to this function will require the application to keep the memory pointed by + * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX + * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for + * transmission per L2CAP channel. + * + * @note The application can keep track of the available credits for transmission by following + * the procedure below: + * - Store initial credits given by the peer in a variable. + * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) + * - Decrement the variable, which stores the currently available credits, by + * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns + * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) + * - Increment the variable, which stores the currently available credits, by additional + * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * @param[in] p_sdu_buf Pointer to the SDU data buffer. + * + * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for the L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than + * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in + * @ref BLE_L2CAP_EVT_CH_SETUP event. + * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a + * @ref BLE_L2CAP_EVT_CH_TX event and retry. + */ +SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); + +/**@brief Advanced SDU reception flow control. + * + * @details Adjust the way the SoftDevice issues credits to the peer. + * This may issue additional credits to the peer using an LE Flow Control Credit packet. + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set + * the value that will be used for newly created channels. + * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every + * time it starts using a new reception buffer. + * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will + * use if this function is not called. + * - If set to zero, the SoftDevice will stop issuing credits for new reception + * buffers the application provides or has provided. SDU reception that is + * currently ongoing will be allowed to complete. + * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be + * written by the SoftDevice with the number of credits that is or will be + * available to the peer. If the value written by the SoftDevice is 0 when + * credits parameter was set to 0, the peer will not be able to send more + * data until more credits are provided by calling this function again with + * credits > 0. This parameter is ignored when local_cid is set to + * @ref BLE_L2CAP_CID_INVALID. + * + * @note Application should take care when setting number of credits higher than default value. In + * this case the application must make sure that the SoftDevice always has reception buffers + * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have + * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic + * on the connection handle may be stalled until the SoftDevice again has an available + * reception buffer. This applies even if the application has used this call to set the + * credits back to default, or zero. + * + * @retval ::NRF_SUCCESS Flow control parameters accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for an L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + */ +SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_L2CAP_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_ranges.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_ranges.h new file mode 100644 index 0000000..0935bca --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_ranges.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC, event and option number subranges + @{ + + @brief Definition of SVC, event and option number subranges for each API module. + + @note + SVCs, event and option numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC, event and option values are defined in each module's ble_.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ +#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ + +#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ +#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ + +#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ +#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ + +#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ +#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ + +#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */ +#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ + + +#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ + +#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ +#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ + +#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ +#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ + +#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ +#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ + +#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ +#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ + +#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ +#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ + + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ + +#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ +#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ + +#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ + +#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ + +#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ + + +#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ + +#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ +#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ + +#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ +#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ + +#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ +#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ + +#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ +#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ + +#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ +#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ + +#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ +#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ + +#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ +#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ + + + + + +#ifdef __cplusplus +} +#endif +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_types.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_types.h new file mode 100644 index 0000000..88c9318 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/ble_types.h @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the BLE SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_TYPES_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/**@brief Data structure. */ +typedef struct +{ + uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ + uint16_t len; /**< Length of the data buffer, in bytes. */ +} ble_data_t; + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf52/nrf_mbr.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf52/nrf_mbr.h new file mode 100644 index 0000000..1b24874 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf52/nrf_mbr.h @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @defgroup nrf_mbr_api Master Boot Record API + @{ + + @brief APIs for updating SoftDevice and BootLoader + +*/ + +#ifndef NRF_MBR_H__ +#define NRF_MBR_H__ + +#include "nrf_svc.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup NRF_MBR_DEFINES Defines + * @{ */ + +/**@brief MBR SVC Base number. */ +#define MBR_SVC_BASE (0x18) + +/**@brief Page size in words. */ +#define MBR_PAGE_SIZE_IN_WORDS (1024) + +/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. +This is the offset where the first byte of the SoftDevice hex file is written.*/ +#define MBR_SIZE (0x1000) + +/** @} */ + +/** @addtogroup NRF_MBR_ENUMS Enumerations + * @{ */ + +/**@brief nRF Master Boot Record API SVC numbers. */ +enum NRF_MBR_SVCS +{ + SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ +}; + +/**@brief Possible values for ::sd_mbr_command_t.command */ +enum NRF_MBR_COMMANDS +{ + SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ + SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ + SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ + SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ + SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ + SD_MBR_COMMAND_RESERVED, + SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ +}; + +/** @} */ + +/** @addtogroup NRF_MBR_TYPES Types + * @{ */ + +/**@brief This command copies part of a new SoftDevice + * + * The destination area is erased before copying. + * If dst is in the middle of a flash page, that whole flash page will be erased. + * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. + * + * The user of this function is responsible for setting the BPROT registers. + * + * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. + * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. + */ +typedef struct +{ + uint32_t *src; /**< Pointer to the source of data to be copied.*/ + uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ + uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ +} sd_mbr_command_copy_sd_t; + + +/**@brief This command works like memcmp, but takes the length in words. + * + * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. + * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. + */ +typedef struct +{ + uint32_t *ptr1; /**< Pointer to block of memory. */ + uint32_t *ptr2; /**< Pointer to block of memory. */ + uint32_t len; /**< Number of 32 bit words to compare.*/ +} sd_mbr_command_compare_t; + + +/**@brief This command copies a new BootLoader. + * + * With this command, destination of BootLoader is always the address written in + * NRF_UICR->BOOTADDR. + * + * Destination is erased by this function. + * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. + * + * This function will use the flash protect peripheral (BPROT or ACL) to protect the flash that is + * not intended to be written. + * + * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. + * + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. + * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. + * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) + */ +typedef struct +{ + uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ + uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ +} sd_mbr_command_copy_bl_t; + +/**@brief Change the address the MBR starts after a reset + * + * Once this function has been called, this address is where the MBR will start to forward + * interrupts to after a reset. + * + * To restore default forwarding this function should be called with @ref address set to 0. The + * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the + * SoftDevice if the BOOTADDR is not set. + * + * On success, this function will not return. It will reset the device. + * + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. + * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +} sd_mbr_command_vector_table_base_set_t; + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR + * + * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not + * change where the MBR starts after reset. + * + * @retval ::NRF_SUCCESS + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +} sd_mbr_command_irq_forward_address_set_t; + +/**@brief Input structure containing data used when calling ::sd_mbr_command + * + * Depending on what command value that is set, the corresponding params value type must also be + * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command + * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. + */ +typedef struct +{ + uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ + union + { + sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ + sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ + sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ + sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ + sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ + } params; /**< Command parameters. */ +} sd_mbr_command_t; + +/** @} */ + +/** @addtogroup NRF_MBR_FUNCTIONS Functions + * @{ */ + +/**@brief Issue Master Boot Record commands + * + * Commands used when updating a SoftDevice and bootloader. + * + * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires + * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash + * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address + * corresponding to a page in the application flash space. This page will be cleared by the MBR and + * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers + * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) + * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. + * + * @param[in] param Pointer to a struct describing the command. + * + * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, + * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, + * ::sd_mbr_command_irq_forward_address_set_t + * + * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). + * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. +*/ +SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // NRF_MBR_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error.h new file mode 100644 index 0000000..6badee9 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy +#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. +#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error_sdm.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error_sdm.h new file mode 100644 index 0000000..530959b --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error_sdm.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + + /** + @addtogroup nrf_sdm_api + @{ + @defgroup nrf_sdm_error SoftDevice Manager Error Codes + @{ + + @brief Error definitions for the SDM API +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SDM_H__ +#define NRF_ERROR_SDM_H__ + +#include "nrf_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. +#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). +#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_SDM_H__ + +/** + @} + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error_soc.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error_soc.h new file mode 100644 index 0000000..1e784b8 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_error_soc.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @addtogroup nrf_soc_api + @{ + @defgroup nrf_soc_error SoC Library Error Codes + @{ + + @brief Error definitions for the SoC library + +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SOC_H__ +#define NRF_ERROR_SOC_H__ + +#include "nrf_error.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* Mutex Errors */ +#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken + +/* NVIC errors */ +#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available +#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed +#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return + +/* Power errors */ +#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown +#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown +#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return + +/* Rand errors */ +#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values + +/* PPI errors */ +#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel +#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_SOC_H__ +/** + @} + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_nvic.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_nvic.h new file mode 100644 index 0000000..1f79cc3 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_nvic.h @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + * @defgroup nrf_nvic_api SoftDevice NVIC API + * @{ + * + * @note In order to use this module, the following code has to be added to a .c file: + * \code + * nrf_nvic_state_t nrf_nvic_state = {0}; + * \endcode + * + * @note Definitions and declarations starting with __ (double underscore) in this header file are + * not intended for direct use by the application. + * + * @brief APIs for the accessing NVIC when using a SoftDevice. + * + */ + +#ifndef NRF_NVIC_H__ +#define NRF_NVIC_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "nrf_error_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup NRF_NVIC_DEFINES Defines + * @{ */ + +/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions + * @{ */ + +#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ + +#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ + +/**@brief Interrupt priority levels used by the SoftDevice. */ +#define __NRF_NVIC_SD_IRQ_PRIOS ((uint8_t)( \ + (1U << 0) /**< Priority level high .*/ \ + | (1U << 1) /**< Priority level medium. */ \ + | (1U << 4) /**< Priority level low. */ \ + )) + +/**@brief Interrupt priority levels available to the application. */ +#define __NRF_NVIC_APP_IRQ_PRIOS ((uint8_t)~__NRF_NVIC_SD_IRQ_PRIOS) + +/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ +#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ + (1U << POWER_CLOCK_IRQn) \ + | (1U << RADIO_IRQn) \ + | (1U << RTC0_IRQn) \ + | (1U << TIMER0_IRQn) \ + | (1U << RNG_IRQn) \ + | (1U << ECB_IRQn) \ + | (1U << CCM_AAR_IRQn) \ + | (1U << TEMP_IRQn) \ + | (1U << __NRF_NVIC_NVMC_IRQn) \ + | (1U << (uint32_t)SWI5_IRQn) \ + )) + +/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ +#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) + +/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ +#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) + +/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ +#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) + +/**@} */ + +/**@} */ + +/**@addtogroup NRF_NVIC_VARIABLES Variables + * @{ */ + +/**@brief Type representing the state struct for the SoftDevice NVIC module. */ +typedef struct +{ + uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ + uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ +} nrf_nvic_state_t; + +/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an + * application source file. */ +extern nrf_nvic_state_t nrf_nvic_state; + +/**@} */ + +/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions + * @{ */ + +/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. + * + * @retval The value of PRIMASK prior to disabling the interrupts. + */ +__STATIC_INLINE int __sd_nvic_irq_disable(void); + +/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. + */ +__STATIC_INLINE void __sd_nvic_irq_enable(void); + +/**@brief Checks if IRQn is available to application + * @param[in] IRQn IRQ to check + * + * @retval 1 (true) if the IRQ to check is available to the application + */ +__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); + +/**@brief Checks if priority is available to application + * @param[in] priority priority to check + * + * @retval 1 (true) if the priority to check is available to the application + */ +__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); + +/**@} */ + +/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions + * @{ */ + +/**@brief Enable External Interrupt. + * @note Corresponds to NVIC_EnableIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was enabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); + +/**@brief Disable External Interrupt. + * @note Corresponds to NVIC_DisableIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was disabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); + +/**@brief Get Pending Interrupt. + * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. + * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. + * + * @retval ::NRF_SUCCESS The interrupt is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); + +/**@brief Set Pending Interrupt. + * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt is set pending. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); + +/**@brief Clear Pending Interrupt. + * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); + +/**@brief Set Interrupt Priority. + * @note Corresponds to NVIC_SetPriority in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * @pre Priority is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. + * @param[in] priority A valid IRQ priority for use by the application. + * + * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); + +/**@brief Get Interrupt Priority. + * @note Corresponds to NVIC_GetPriority in CMSIS. + * + * @pre IRQn is valid and not reserved by the stack. + * + * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. + * @param[out] p_priority Return value from NVIC_GetPriority. + * + * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. + */ +__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); + +/**@brief System Reset. + * @note Corresponds to NVIC_SystemReset in CMSIS. + * + * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN + */ +__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); + +/**@brief Enter critical region. + * + * @post Application interrupts will be disabled. + * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each + * execution context + * @sa sd_nvic_critical_region_exit + * + * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. + * + * @retval ::NRF_SUCCESS + */ +__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); + +/**@brief Exit critical region. + * + * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. + * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. + * + * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. + * + * @retval ::NRF_SUCCESS + */ +__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); + +/**@} */ + +#ifndef SUPPRESS_INLINE_IMPLEMENTATION + +__STATIC_INLINE int __sd_nvic_irq_disable(void) +{ + int pm = __get_PRIMASK(); + __disable_irq(); + return pm; +} + +__STATIC_INLINE void __sd_nvic_irq_enable(void) +{ + __enable_irq(); +} + +__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) +{ + if (IRQn < 32) + { + return ((1UL<= (1 << __NVIC_PRIO_BITS)) + || (((1 << priority) & __NRF_NVIC_APP_IRQ_PRIOS) == 0) + ) + { + return 0; + } + return 1; +} + + +__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) +{ + if (!__sd_nvic_app_accessible_irq(IRQn)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } + if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; + } + + if (nrf_nvic_state.__cr_flag) + { + nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); + } + else + { + NVIC_EnableIRQ(IRQn); + } + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) +{ + if (!__sd_nvic_app_accessible_irq(IRQn)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } + + if (nrf_nvic_state.__cr_flag) + { + nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); + } + else + { + NVIC_DisableIRQ(IRQn); + } + + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + *p_pending_irq = NVIC_GetPendingIRQ(IRQn); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + NVIC_SetPendingIRQ(IRQn); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + NVIC_ClearPendingIRQ(IRQn); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if (!__sd_nvic_app_accessible_irq(IRQn)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } + + if (!__sd_nvic_is_app_accessible_priority(priority)) + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; + } + + NVIC_SetPriority(IRQn, (uint32_t)priority); + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) +{ + if (__sd_nvic_app_accessible_irq(IRQn)) + { + *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; + } +} + +__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) +{ + NVIC_SystemReset(); + return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; +} + +__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) +{ + int was_masked = __sd_nvic_irq_disable(); + if (!nrf_nvic_state.__cr_flag) + { + nrf_nvic_state.__cr_flag = 1; + nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); + NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; + nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); + NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; + *p_is_nested_critical_region = 0; + } + else + { + *p_is_nested_critical_region = 1; + } + if (!was_masked) + { + __sd_nvic_irq_enable(); + } + return NRF_SUCCESS; +} + +__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) +{ + if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) + { + int was_masked = __sd_nvic_irq_disable(); + NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; + NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; + nrf_nvic_state.__cr_flag = 0; + if (!was_masked) + { + __sd_nvic_irq_enable(); + } + } + + return NRF_SUCCESS; +} + +#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ + +#ifdef __cplusplus +} +#endif + +#endif // NRF_NVIC_H__ + +/**@} */ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_sdm.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_sdm.h new file mode 100644 index 0000000..282e762 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_sdm.h @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + @defgroup nrf_sdm_api SoftDevice Manager API + @{ + + @brief APIs for SoftDevice management. + +*/ + +#ifndef NRF_SDM_H__ +#define NRF_SDM_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "nrf_error_sdm.h" +#include "nrf_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ +#ifdef NRFSOC_DOXYGEN +/// Declared in nrf_mbr.h +#define MBR_SIZE 0 +#warning test +#endif + +/** @brief The major version for the SoftDevice binary distributed with this header file. */ +#define SD_MAJOR_VERSION (6) + +/** @brief The minor version for the SoftDevice binary distributed with this header file. */ +#define SD_MINOR_VERSION (1) + +/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ +#define SD_BUGFIX_VERSION (0) + +/** @brief The SoftDevice variant of this firmware. */ +#define SD_VARIANT_ID 140 + +/** @brief The full version number for the SoftDevice binary this header file was distributed + * with, as a decimal number in the form Mmmmbbb, where: + * - M is major version (one or more digits) + * - mmm is minor version (three digits) + * - bbb is bugfix version (three digits). */ +#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) + +/** @brief SoftDevice Manager SVC Base number. */ +#define SDM_SVC_BASE 0x10 + +/** @brief SoftDevice unique string size in bytes. */ +#define SD_UNIQUE_STR_SIZE 20 + +/** @brief Invalid info field. Returned when an info field does not exist. */ +#define SDM_INFO_FIELD_INVALID (0) + +/** @brief Defines the SoftDevice Information Structure location (address) as an offset from +the start of the SoftDevice (without MBR)*/ +#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) + +/** @brief Defines the absolute SoftDevice Information Structure location (address) when the + * SoftDevice is installed just above the MBR (the usual case). */ +#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) + +/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the + * SoftDevice base address. The size value is of type uint8_t. */ +#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) + +/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. + * The size value is of type uint32_t. */ +#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) + +/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value + * is of type uint16_t. */ +#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) + +/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID + * is of type uint32_t. */ +#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) + +/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in + * the same format as @ref SD_VERSION, stored as an uint32_t. */ +#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) + +/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. + * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. + */ +#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) + +/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value + * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is + * installed just above the MBR (the usual case). */ +#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) + +/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base + * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above + * the MBR (the usual case). */ +#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) + +/** @brief Defines the amount of flash that is used by the SoftDevice. + * Add @ref MBR_SIZE to find the first available flash address when the SoftDevice is installed + * just above the MBR (the usual case). + */ +#define SD_FLASH_SIZE 0x25000 + +/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use + * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual + * case). */ +#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) + +/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use + * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the + * usual case). */ +#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ + ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) + +/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. + * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR + * (the usual case). */ +#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ + ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) + +/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. + * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR + * (the usual case). */ +#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ + ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) + +/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges + * @{ */ +#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ +#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ +/**@} */ + +/**@defgroup NRF_FAULT_IDS Fault ID types + * @{ */ +#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ +#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, + in case of SoftDevice RAM access violation. In case of SoftDevice peripheral + register violation the info parameter will contain the sub-region number of + PREGION[0], on whose address range the disallowed write access caused the + memory access fault. */ +/**@} */ + +/** @} */ + +/** @addtogroup NRF_SDM_ENUMS Enumerations + * @{ */ + +/**@brief nRF SoftDevice Manager API SVC numbers. */ +enum NRF_SD_SVCS +{ + SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ + SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ + SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ + SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ + SVC_SDM_LAST /**< Placeholder for last SDM SVC */ +}; + +/** @} */ + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ + +/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy + * @{ */ + +#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ +#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ +#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ +#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ +#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ +#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ +#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ +#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ +#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ +#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ +#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ +#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ + +/** @} */ + +/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources + * @{ */ + +#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ +#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ +#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ + +/** @} */ + +/** @} */ + +/** @addtogroup NRF_SDM_TYPES Types + * @{ */ + +/**@brief Type representing LFCLK oscillator source. */ +typedef struct +{ + uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ + uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second + units (nRF52: 1-32). + @note To avoid excessive clock drift, 0.5 degrees Celsius is the + maximum temperature change allowed in one calibration timer + interval. The interval should be selected to ensure this. + + @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ + uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration + intervals) the RC oscillator shall be calibrated if the temperature + hasn't changed. + 0: Always calibrate even if the temperature hasn't changed. + 1: Only calibrate if the temperature has changed (legacy - nRF51 only). + 2-33: Check the temperature and only calibrate if it has changed, + however calibration will take place every rc_temp_ctiv + intervals in any case. + + @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. + + @note For nRF52, the application must ensure calibration at least once + every 8 seconds to ensure +/-500 ppm clock stability. The + recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is + rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at + least once every 8 seconds and for temperature changes of 0.5 + degrees Celsius every 4 seconds. See the Product Specification + for the nRF52 device being used for more information.*/ + uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing + windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ +} nrf_clock_lf_cfg_t; + +/**@brief Fault Handler type. + * + * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. + * The protocol stack will be in an undefined state when this happens and the only way to recover will be to + * perform a reset, using e.g. CMSIS NVIC_SystemReset(). + * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). + * + * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. + * + * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. + * @param[in] pc The program counter of the instruction that triggered the fault. + * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. + * + * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when + * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. + */ +typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); + +/** @} */ + +/** @addtogroup NRF_SDM_FUNCTIONS Functions + * @{ */ + +/**@brief Enables the SoftDevice and by extension the protocol stack. + * + * @note Some care must be taken if a low frequency clock source is already running when calling this function: + * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new + * clock source will be started. + * + * @note This function has no effect when returning with an error. + * + * @post If return code is ::NRF_SUCCESS + * - SoC library and protocol stack APIs are made available. + * - A portion of RAM will be unavailable (see relevant SDS documentation). + * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). + * - Interrupts will not arrive from protected peripherals or interrupts. + * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. + * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). + * - Chosen low frequency clock source will be running. + * + * @param p_clock_lf_cfg Low frequency clock source and accuracy. + If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 + In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. + * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. + * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. + * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. + */ +SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); + + +/**@brief Disables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to disable the SoftDevice. + * + * @post SoC library and protocol stack APIs are made unavailable. + * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). + * @post All peripherals used by the SoftDevice will be reset to default values. + * @post All of RAM become available. + * @post All interrupts are forwarded to the application. + * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); + +/**@brief Check if the SoftDevice is enabled. + * + * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice + * + * This function is only intended to be called when a bootloader is enabled. + * + * @param[in] address The base address of the interrupt vector table for forwarded interrupts. + + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // NRF_SDM_H__ + +/** + @} +*/ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_soc.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_soc.h new file mode 100644 index 0000000..beb4d3a --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_soc.h @@ -0,0 +1,1079 @@ +/* + * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. + */ + +/** + * @defgroup nrf_soc_api SoC Library API + * @{ + * + * @brief APIs for the SoC library. + * + */ + +#ifndef NRF_SOC_H__ +#define NRF_SOC_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "nrf_error_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup NRF_SOC_DEFINES Defines + * @{ */ + +/**@brief The number of the lowest SVC number reserved for the SoC library. */ +#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ +#define SOC_SVC_BASE_NOT_AVAILABLE (0x2C) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ + +/**@brief Guaranteed time for application to process radio inactive notification. */ +#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) + +/**@brief The minimum allowed timeslot extension time. */ +#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) + +/**@brief The maximum processing time to handle a timeslot extension. */ +#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) + +/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ +#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) + +#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ +#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ +#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ + +#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ +#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. + The default interrupt priority for this handler is set to 6 */ +#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ +#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. + The default interrupt priority for this handler is set to 6 */ +#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ +#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ + +#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ + +#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ + +#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ + +/**@brief Mask of PPI channels reserved by the SoftDevice when the SoftDevice is disabled. */ +#define NRF_SOC_SD_PPI_CHANNELS_SD_DISABLED_MSK ((uint32_t)(0)) + +/**@brief Mask of PPI channels reserved by the SoftDevice when the SoftDevice is enabled. */ +#define NRF_SOC_SD_PPI_CHANNELS_SD_ENABLED_MSK ((uint32_t)( \ + (1U << 17) \ + | (1U << 18) \ + | (1U << 19) \ + | (1U << 20) \ + | (1U << 21) \ + | (1U << 22) \ + | (1U << 23) \ + | (1U << 24) \ + | (1U << 25) \ + | (1U << 26) \ + | (1U << 27) \ + | (1U << 28) \ + | (1U << 29) \ + | (1U << 30) \ + | (1U << 31) \ + )) + +/**@brief Mask of PPI channels available to the application when the SoftDevice is disabled. */ +#define NRF_SOC_APP_PPI_CHANNELS_SD_DISABLED_MSK (~NRF_SOC_SD_PPI_CHANNELS_SD_DISABLED_MSK) + +/**@brief Mask of PPI channels available to the application when the SoftDevice is enabled. */ +#define NRF_SOC_APP_PPI_CHANNELS_SD_ENABLED_MSK (~NRF_SOC_SD_PPI_CHANNELS_SD_ENABLED_MSK) + +/**@brief Mask of PPI groups reserved by the SoftDevice when the SoftDevice is disabled. */ +#define NRF_SOC_SD_PPI_GROUPS_SD_DISABLED_MSK ((uint32_t)(0)) + +/**@brief Mask of PPI groups reserved by the SoftDevice when the SoftDevice is enabled. */ +#define NRF_SOC_SD_PPI_GROUPS_SD_ENABLED_MSK ((uint32_t)( \ + (1U << 4) \ + | (1U << 5) \ + )) + +/**@brief Mask of PPI groups available to the application when the SoftDevice is disabled. */ +#define NRF_SOC_APP_PPI_GROUPS_SD_DISABLED_MSK (~NRF_SOC_SD_PPI_GROUPS_SD_DISABLED_MSK) + +/**@brief Mask of PPI groups available to the application when the SoftDevice is enabled. */ +#define NRF_SOC_APP_PPI_GROUPS_SD_ENABLED_MSK (~NRF_SOC_SD_PPI_GROUPS_SD_ENABLED_MSK) + +/**@} */ + +/**@addtogroup NRF_SOC_ENUMS Enumerations + * @{ */ + +/**@brief The SVC numbers used by the SVC functions in the SoC library. */ +enum NRF_SOC_SVCS +{ + SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, + SD_PPI_CHANNEL_ENABLE_SET = SOC_SVC_BASE + 1, + SD_PPI_CHANNEL_ENABLE_CLR = SOC_SVC_BASE + 2, + SD_PPI_CHANNEL_ASSIGN = SOC_SVC_BASE + 3, + SD_PPI_GROUP_TASK_ENABLE = SOC_SVC_BASE + 4, + SD_PPI_GROUP_TASK_DISABLE = SOC_SVC_BASE + 5, + SD_PPI_GROUP_ASSIGN = SOC_SVC_BASE + 6, + SD_PPI_GROUP_GET = SOC_SVC_BASE + 7, + SD_FLASH_PAGE_ERASE = SOC_SVC_BASE + 8, + SD_FLASH_WRITE = SOC_SVC_BASE + 9, + SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, + SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, + SD_MUTEX_ACQUIRE = SOC_SVC_BASE_NOT_AVAILABLE + 1, + SD_MUTEX_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 2, + SD_RAND_APPLICATION_POOL_CAPACITY_GET = SOC_SVC_BASE_NOT_AVAILABLE + 3, + SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, + SD_RAND_APPLICATION_VECTOR_GET = SOC_SVC_BASE_NOT_AVAILABLE + 5, + SD_POWER_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 6, + SD_POWER_SYSTEM_OFF = SOC_SVC_BASE_NOT_AVAILABLE + 7, + SD_POWER_RESET_REASON_GET = SOC_SVC_BASE_NOT_AVAILABLE + 8, + SD_POWER_RESET_REASON_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 9, + SD_POWER_POF_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 10, + SD_POWER_POF_THRESHOLD_SET = SOC_SVC_BASE_NOT_AVAILABLE + 11, + SD_POWER_POF_THRESHOLDVDDH_SET = SOC_SVC_BASE_NOT_AVAILABLE + 12, + SD_POWER_RAM_POWER_SET = SOC_SVC_BASE_NOT_AVAILABLE + 13, + SD_POWER_RAM_POWER_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 14, + SD_POWER_RAM_POWER_GET = SOC_SVC_BASE_NOT_AVAILABLE + 15, + SD_POWER_GPREGRET_SET = SOC_SVC_BASE_NOT_AVAILABLE + 16, + SD_POWER_GPREGRET_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 17, + SD_POWER_GPREGRET_GET = SOC_SVC_BASE_NOT_AVAILABLE + 18, + SD_POWER_DCDC_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 19, + SD_POWER_DCDC0_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 20, + SD_APP_EVT_WAIT = SOC_SVC_BASE_NOT_AVAILABLE + 21, + SD_CLOCK_HFCLK_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 22, + SD_CLOCK_HFCLK_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 23, + SD_CLOCK_HFCLK_IS_RUNNING = SOC_SVC_BASE_NOT_AVAILABLE + 24, + SD_RADIO_NOTIFICATION_CFG_SET = SOC_SVC_BASE_NOT_AVAILABLE + 25, + SD_ECB_BLOCK_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 26, + SD_ECB_BLOCKS_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 27, + SD_RADIO_SESSION_OPEN = SOC_SVC_BASE_NOT_AVAILABLE + 28, + SD_RADIO_SESSION_CLOSE = SOC_SVC_BASE_NOT_AVAILABLE + 29, + SD_RADIO_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 30, + SD_EVT_GET = SOC_SVC_BASE_NOT_AVAILABLE + 31, + SD_TEMP_GET = SOC_SVC_BASE_NOT_AVAILABLE + 32, + SD_POWER_USBPWRRDY_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 33, + SD_POWER_USBDETECTED_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 34, + SD_POWER_USBREMOVED_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 35, + SD_POWER_USBREGSTATUS_GET = SOC_SVC_BASE_NOT_AVAILABLE + 36, + SVC_SOC_LAST = SOC_SVC_BASE_NOT_AVAILABLE + 37 +}; + +/**@brief Possible values of a ::nrf_mutex_t. */ +enum NRF_MUTEX_VALUES +{ + NRF_MUTEX_FREE, + NRF_MUTEX_TAKEN +}; + +/**@brief Power modes. */ +enum NRF_POWER_MODES +{ + NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ + NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ +}; + + +/**@brief Power failure thresholds */ +enum NRF_POWER_THRESHOLDS +{ + NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ +}; + +/**@brief Power failure thresholds for high voltage */ +enum NRF_POWER_THRESHOLDVDDHS +{ + NRF_POWER_THRESHOLDVDDH_V27, /**< 2.7 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V28, /**< 2.8 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V29, /**< 2.9 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V30, /**< 3.0 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V31, /**< 3.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V32, /**< 3.2 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V33, /**< 3.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V34, /**< 3.4 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V35, /**< 3.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V36, /**< 3.6 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V37, /**< 3.7 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V38, /**< 3.8 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V39, /**< 3.9 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V40, /**< 4.0 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V41, /**< 4.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLDVDDH_V42 /**< 4.2 Volts power failure threshold. */ +}; + + +/**@brief DC/DC converter modes. */ +enum NRF_POWER_DCDC_MODES +{ + NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ + NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ +}; + +/**@brief Radio notification distances. */ +enum NRF_RADIO_NOTIFICATION_DISTANCES +{ + NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ + NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ +}; + + +/**@brief Radio notification types. */ +enum NRF_RADIO_NOTIFICATION_TYPES +{ + NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ +}; + +/**@brief The Radio signal callback types. */ +enum NRF_RADIO_CALLBACK_SIGNAL_TYPE +{ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ +}; + +/**@brief The actions requested by the signal callback. + * + * This code gives the SOC instructions about what action to take when the signal callback has + * returned. + */ +enum NRF_RADIO_SIGNAL_CALLBACK_ACTION +{ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current + timeslot. Maximum execution time for this action: + @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. + This action must be started at least + @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before + the end of the timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ +}; + +/**@brief Radio timeslot high frequency clock source configuration. */ +enum NRF_RADIO_HFCLK_CFG +{ + NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the + external crystal for the whole duration of the timeslot. This should be the + preferred option for events that use the radio or require high timing accuracy. + @note The SoftDevice will automatically turn on and off the external crystal, + at the beginning and end of the timeslot, respectively. The crystal may also + intentionally be left running after the timeslot, in cases where it is needed + by the SoftDevice shortly after the end of the timeslot. */ + NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. + The RC oscillator may be the clock source in part or for the whole duration of the timeslot. + The RC oscillator's accuracy must therefore be taken into consideration. + @note If the application will use the radio peripheral in timeslots with this configuration, + it must make sure that the crystal is running and stable before starting the radio. */ +}; + +/**@brief Radio timeslot priorities. */ +enum NRF_RADIO_PRIORITY +{ + NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ + NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ +}; + +/**@brief Radio timeslot request type. */ +enum NRF_RADIO_REQUEST_TYPE +{ + NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ + NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ +}; + +/**@brief SoC Events. */ +enum NRF_SOC_EVTS +{ + NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ + NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ + NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ + NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ + NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ + NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ + NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ + NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ + NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ + NRF_EVT_POWER_USB_POWER_READY, /**< Event indicating that a USB 3.3 V supply is ready. */ + NRF_EVT_POWER_USB_DETECTED, /**< Event indicating that voltage supply is detected on VBUS. */ + NRF_EVT_POWER_USB_REMOVED, /**< Event indicating that voltage supply is removed from VBUS. */ + NRF_EVT_NUMBER_OF_EVTS +}; + +/**@} */ + + +/**@addtogroup NRF_SOC_STRUCTURES Structures + * @{ */ + +/**@brief Represents a mutex for use with the nrf_mutex functions. + * @note Accessing the value directly is not safe, use the mutex functions! + */ +typedef volatile uint8_t nrf_mutex_t; + +/**@brief Parameters for a request for a timeslot as early as possible. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ + uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ +} nrf_radio_request_earliest_t; + +/**@brief Parameters for a normal radio timeslot request. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ + uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ +} nrf_radio_request_normal_t; + +/**@brief Radio timeslot request parameters. */ +typedef struct +{ + uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ + union + { + nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ + nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ + } params; /**< Parameter union. */ +} nrf_radio_request_t; + +/**@brief Return parameters of the radio timeslot signal callback. */ +typedef struct +{ + uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ + union + { + struct + { + nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ + } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ + struct + { + uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ + } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ + } params; /**< Parameter union. */ +} nrf_radio_signal_callback_return_param_t; + +/**@brief The radio timeslot signal callback type. + * + * @note In case of invalid return parameters, the radio timeslot will automatically end + * immediately after returning from the signal callback and the + * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. + * @note The returned struct pointer must remain valid after the signal callback + * function returns. For instance, this means that it must not point to a stack variable. + * + * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. + * + * @return Pointer to structure containing action requested by the application. + */ +typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); + +/**@brief AES ECB parameter typedefs */ +typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ +typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ +typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ + +/**@brief AES ECB data structure */ +typedef struct +{ + soc_ecb_key_t key; /**< Encryption key. */ + soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ + soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ +} nrf_ecb_hal_data_t; + +/**@brief AES ECB block. Used to provide multiple blocks in a single call + to @ref sd_ecb_blocks_encrypt.*/ +typedef struct +{ + soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ + soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ + soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ +} nrf_ecb_hal_data_block_t; + +/**@} */ + +/**@addtogroup NRF_SOC_FUNCTIONS Functions + * @{ */ + +/**@brief Initialize a mutex. + * + * @param[in] p_mutex Pointer to the mutex to initialize. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); + +/**@brief Attempt to acquire a mutex. + * + * @param[in] p_mutex Pointer to the mutex to acquire. + * + * @retval ::NRF_SUCCESS The mutex was successfully acquired. + * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. + */ +SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); + +/**@brief Release a mutex. + * + * @param[in] p_mutex Pointer to the mutex to release. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); + +/**@brief Query the capacity of the application random pool. + * + * @param[out] p_pool_capacity The capacity of the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); + +/**@brief Get number of random bytes available to the application. + * + * @param[out] p_bytes_available The number of bytes currently available in the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); + +/**@brief Get random bytes from the application pool. + * + * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. + * @param[in] length Number of bytes to take from pool and place in p_buff. + * + * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. + * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. +*/ +SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); + +/**@brief Gets the reset reason register. + * + * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); + +/**@brief Clears the bits of the reset reason register. + * + * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); + +/**@brief Sets the power mode when in CPU sleep. + * + * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait + * + * @retval ::NRF_SUCCESS The power mode was set. + * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. + */ +SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); + +/**@brief Puts the chip in System OFF mode. + * + * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN + */ +SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); + +/**@brief Enables or disables the power-fail comparator. + * + * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); + +/**@brief Enables or disables the USB power ready event. + * + * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_POWER_READY) when a USB 3.3 V supply is ready. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] usbpwrrdy_enable True if the power ready event should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_USBPWRRDY_ENABLE, uint32_t, sd_power_usbpwrrdy_enable(uint8_t usbpwrrdy_enable)); + +/**@brief Enables or disables the power USB-detected event. + * + * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_DETECTED) when a voltage supply is detected on VBUS. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] usbdetected_enable True if the power ready event should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_USBDETECTED_ENABLE, uint32_t, sd_power_usbdetected_enable(uint8_t usbdetected_enable)); + +/**@brief Enables or disables the power USB-removed event. + * + * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_REMOVED) when a voltage supply is removed from VBUS. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] usbremoved_enable True if the power ready event should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_USBREMOVED_ENABLE, uint32_t, sd_power_usbremoved_enable(uint8_t usbremoved_enable)); + +/**@brief Get USB supply status register content. + * + * @param[out] usbregstatus The content of USBREGSTATUS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_USBREGSTATUS_GET, uint32_t, sd_power_usbregstatus_get(uint32_t * usbregstatus)); + +/**@brief Sets the power failure comparator threshold value. + * + * @note: Power failure comparator threshold setting. This setting applies both for normal voltage + * mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to + * VDDH only). + * + * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); + +/**@brief Sets the power failure comparator threshold value for high voltage. + * + * @note: Power failure comparator threshold setting for high voltage mode (supply connected to + * VDDH only). This setting does not apply for normal voltage mode (supply connected to both + * VDD and VDDH). + * + * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDVDDHS. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLDVDDH_SET, uint32_t, sd_power_pof_thresholdvddh_set(uint8_t threshold)); + +/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. + * + * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. + * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); + +/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. + * + * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. + * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); + +/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. + * + * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. + * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); + +/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). + * + * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. + * @param[in] gpregret_msk Bits to be set in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); + +/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). + * + * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. + * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); + +/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). + * + * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. + * @param[out] p_gpregret Contents of the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); + +/**@brief Enable or disable the DC/DC regulator for the regulator stage 1 (REG1). + * + * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. + */ +SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); + +/**@brief Enable or disable the DC/DC regulator for the regulator stage 0 (REG0). + * + * For more details on the REG0 stage, please see product specification. + * + * @param[in] dcdc_mode The mode of the DCDC0, see @ref NRF_POWER_DCDC_MODES. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The dcdc_mode is invalid. + */ +SVCALL(SD_POWER_DCDC0_MODE_SET, uint32_t, sd_power_dcdc0_mode_set(uint8_t dcdc_mode)); + +/**@brief Request the high frequency crystal oscillator. + * + * Will start the high frequency crystal oscillator, the startup time of the crystal varies + * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_release + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); + +/**@brief Releases the high frequency crystal oscillator. + * + * Will stop the high frequency crystal oscillator, this happens immediately. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_request + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); + +/**@brief Checks if the high frequency crystal oscillator is running. + * + * @see sd_clock_hfclk_request + * @see sd_clock_hfclk_release + * + * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); + +/**@brief Waits for an application event. + * + * An application event is either an application interrupt or a pended interrupt when the interrupt + * is disabled. + * + * When the application waits for an application event by calling this function, an interrupt that + * is enabled will be taken immediately on pending since this function will wait in thread mode, + * then the execution will return in the application's main thread. + * + * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M + * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets + * pended, this function will return to the application's main thread. + * + * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ + * in order to sleep using this function. This is only necessary for disabled interrupts, as + * the interrupt handler will clear the pending flag automatically for enabled interrupts. + * + * @note If an application interrupt has happened since the last time sd_app_evt_wait was + * called this function will return immediately and not go to sleep. This is to avoid race + * conditions that can occur when a flag is updated in the interrupt handler and processed + * in the main loop. + * + * @post An application interrupt has happened or a interrupt pending flag is set. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); + +/**@brief Get PPI channel enable register contents. + * + * @param[out] p_channel_enable The contents of the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); + +/**@brief Set PPI channel enable register. + * + * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); + +/**@brief Clear PPI channel enable register. + * + * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); + +/**@brief Assign endpoints to a PPI channel. + * + * @param[in] channel_num Number of the PPI channel to assign. + * @param[in] evt_endpoint Event endpoint of the PPI channel. + * @param[in] task_endpoint Task endpoint of the PPI channel. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); + +/**@brief Task to enable a channel group. + * + * @param[in] group_num Number of the channel group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); + +/**@brief Task to disable a channel group. + * + * @param[in] group_num Number of the PPI group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); + +/**@brief Assign PPI channels to a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[in] channel_msk Mask of the channels to assign to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); + +/**@brief Gets the PPI channels of a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[out] p_channel_msk Mask of the channels assigned to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); + +/**@brief Configures the Radio Notification signal. + * + * @note + * - The notification signal latency depends on the interrupt priority settings of SWI used + * for notification signal. + * - To ensure that the radio notification signal behaves in a consistent way, the radio + * notifications must be configured when there is no protocol stack or other SoftDevice + * activity in progress. It is recommended that the radio notification signal is + * configured directly after the SoftDevice has been enabled. + * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice + * will interrupt the application to do Radio Event preparation. + * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have + * to shorten the connection events to have time for the Radio Notification signals. + * + * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio + * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is + * recommended (but not required) to be used with + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. + * + * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. + * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or + * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. + * + * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. + * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all + * running activities and retry. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); + +/**@brief Encrypts a block according to the specified parameters. + * + * 128-bit AES encryption. + * + * @note: + * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while + * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application + * main or low interrupt level. + * + * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input + * parameters and one output parameter). + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); + +/**@brief Encrypts multiple data blocks provided as an array of data block structures. + * + * @details: Performs 128-bit AES encryption on multiple data blocks + * + * @note: + * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while + * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application + * main or low interrupt level. + * + * @param[in] block_count Count of blocks in the p_data_blocks array. + * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of + * @ref nrf_ecb_hal_data_block_t structures. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); + +/**@brief Gets any pending events generated by the SoC API. + * + * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. + * + * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. + * + * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. + * @retval ::NRF_ERROR_NOT_FOUND No pending events. + */ +SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); + +/**@brief Get the temperature measured on the chip + * + * This function will block until the temperature measurement is done. + * It takes around 50 us from call to return. + * + * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. + * + * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp + */ +SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); + +/**@brief Flash Write +* +* Commands to write a buffer to flash +* +* If the SoftDevice is enabled: +* This call initiates the flash access command, and its completion will be communicated to the +* application with exactly one of the following events: +* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. +* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. +* +* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the + * write has been completed +* +* @note +* - This call takes control over the radio and the CPU during flash erase and write to make sure that +* they will not interfere with the flash access. This means that all interrupts will be blocked +* for a predictable time (depending on the NVMC specification in the device's Product Specification +* and the command parameters). +* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS +* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. +* - This call will make the SoftDevice trigger a hardfault when the page is written, if it is +* protected. +* +* +* @param[in] p_dst Pointer to start of flash location to be written. +* @param[in] p_src Pointer to buffer with data to be written. +* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one +* flash page. See the device's Product Specification for details. +* +* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. +* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. +* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. +* @retval ::NRF_ERROR_FORBIDDEN Tried to write to an address outside the application flash area. +* @retval ::NRF_SUCCESS The command was accepted. +*/ +SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); + + +/**@brief Flash Erase page +* +* Commands to erase a flash page +* If the SoftDevice is enabled: +* This call initiates the flash access command, and its completion will be communicated to the +* application with exactly one of the following events: +* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. +* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. +* +* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the +* erase has been completed +* +* @note +* - This call takes control over the radio and the CPU during flash erase and write to make sure that +* they will not interfere with the flash access. This means that all interrupts will be blocked +* for a predictable time (depending on the NVMC specification in the device's Product Specification +* and the command parameters). +* - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is +* protected. +* +* +* @param[in] page_number Page number of the page to erase +* +* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. +* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. +* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. +* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a page outside the application flash area. +* @retval ::NRF_SUCCESS The command was accepted. +*/ +SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); + + + +/**@brief Opens a session for radio timeslot requests. + * + * @note Only one session can be open at a time. + * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot + * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed + * by the application. + * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 + * interrupt occurs. + * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO + * interrupt occurs. + * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This + * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). + * + * @param[in] p_radio_signal_callback The signal callback. + * + * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. + * @retval ::NRF_ERROR_BUSY If session cannot be opened. + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); + +/**@brief Closes a session for radio timeslot requests. + * + * @note Any current radio timeslot will be finished before the session is closed. + * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. + * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED + * event is received. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened. + * @retval ::NRF_ERROR_BUSY If session is currently being closed. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); + +/**@brief Requests a radio timeslot. + * + * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST + * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. + * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by + * p_request->distance_us and is given relative to the start of the previous timeslot. + * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. + * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. + * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. + * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this + * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. + * The application may then try to schedule the first radio timeslot again. + * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). + * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. + * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. + * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the + * specified radio timeslot start, but this does not affect the actual start time of the timeslot. + * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency + * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is + * guaranteed to be clocked from the external crystal. + * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral + * during the radio timeslot. + * + * @param[in] p_request Pointer to the request parameters. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. + * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); + +/**@brief Write register protected by the SoftDevice + * + * This function writes to a register that is write-protected by the SoftDevice. Please refer to your + * SoftDevice Specification for more details about which registers that are protected by SoftDevice. + * This function can write to the following protected peripheral: + * - ACL + * + * @note Protected registers may be read directly. + * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in + * the register has not changed. See the Product Specification for more details about register + * properties. + * + * @param[in] p_register Pointer to register to be written. + * @param[in] value Value to be written to the register. + * + * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. + * @retval ::NRF_SUCCESS Value successfully written to register. + * + */ +SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); + +/**@} */ + +#ifdef __cplusplus +} +#endif +#endif // NRF_SOC_H__ + +/**@} */ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_svc.h b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_svc.h new file mode 100644 index 0000000..292c692 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_API/include/nrf_svc.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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 NRF_SVC__ +#define NRF_SVC__ + +#include "stdint.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef SVCALL_AS_NORMAL_FUNCTION +#define SVCALL(number, return_type, signature) return_type signature +#else + +#ifndef SVCALL +#if defined (__CC_ARM) +#define SVCALL(number, return_type, signature) return_type __svc(number) signature +#elif defined (__GNUC__) +#ifdef __cplusplus +#define GCC_CAST_CPP (uint16_t) +#else +#define GCC_CAST_CPP +#endif +#define SVCALL(number, return_type, signature) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ + __attribute__((naked)) \ + __attribute__((unused)) \ + static return_type signature \ + { \ + __asm( \ + "svc %0\n" \ + "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ + ); \ + } \ + _Pragma("GCC diagnostic pop") + +#elif defined (__ICCARM__) +#define PRAGMA(x) _Pragma(#x) +#define SVCALL(number, return_type, signature) \ +PRAGMA(swi_number = (number)) \ + __swi return_type signature; +#else +#define SVCALL(number, return_type, signature) return_type signature +#endif +#endif // SVCALL + +#endif // SVCALL_AS_NORMAL_FUNCTION + +#ifdef __cplusplus +} +#endif +#endif // NRF_SVC__ diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_license-agreement.txt b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_license-agreement.txt new file mode 100644 index 0000000..2d1bc12 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_license-agreement.txt @@ -0,0 +1,35 @@ +Copyright (c) 2007 - 2018, Nordic Semiconductor ASA +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, except as embedded into a Nordic + Semiconductor ASA integrated circuit in a product or a software update for + such product, 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 Nordic Semiconductor ASA nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +4. This software, with or without modification, must only be used with a + Nordic Semiconductor ASA integrated circuit. + +5. Any software provided in binary form under this license must not be reverse + engineered, decompiled, modified and/or disassembled. + +THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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. diff --git a/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_softdevice.hex b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_softdevice.hex new file mode 100644 index 0000000..1ac8528 --- /dev/null +++ b/lib/softdevice/s140_nrf52_6.1.0/s140_nrf52_6.1.0_softdevice.hex @@ -0,0 +1,9614 @@ +:020000040000FA +:1000000000040020990900002D0600007909000075 +:1000100037060000410600004B060000000000000B +:10002000000000000000000000000000BD0900000A +:1000300055060000000000005F0600006906000091 +:10004000730600007D060000870600009106000090 +:100050009B060000A5060000AF060000B9060000E0 +:10006000C3060000CD060000D7060000E106000030 +:10007000EB060000F5060000FF060000090700007F +:10008000130700001D0700002707000031070000CC +:100090003B070000450700004F070000590700001C +:1000A000630700006D07000077070000810700006C +:1000B0008B070000950700009F070000A9070000BC +:1000C000B3070000BD070000C7070000D10700000C +:1000D000DB070000E5070000EF070000F90700005C +:1000E000030800000D0800001708000021080000A8 +:1000F0002B080000350800003F08000049080000F8 +:10010000530800001FB500F003F88DE80F001FBD75 +:1001100000F038BC70B50B46010B184400F6FF70B8 +:10012000040B4FF080500022090303692403406947 +:1001300043431D1B104600F0E9F929462046BDE85F +:10014000704000F0E3B9F0B54FF6FF734FF4B475AB +:100150001A466E1E12E0A94201D3344600E00C4656 +:10016000B1EB040130F8027B641E3B441A44F9D120 +:100170009CB204EB134394B204EB12420029EAD17F +:1001800098B200EB134002EB124140EA0140F0BD8F +:10019000C34992B00446D1E90001CDE91001FF2224 +:1001A0004021684600F094FB94E80F008DE80F00B2 +:1001B000684610A902E004C841F8042D8842FAD12B +:1001C00010216846FFF7BFFF1090AA208DF8440069 +:1001D00000F0FAF800F0DDF84FF01024A0691022CA +:1001E0006946803000F0DEF8A069082210A900F00E +:1001F000D9F800F0C2F870B504460068A94D072888 +:1002000069D2DFE800F033041929561E2500D4E92D +:10021000026564682946304600F0FDF82A4621460A +:10022000304600F0BFF8AA002146304600F024FB1B +:10023000002800D0032070BD00F0D6FB4FF48050A2 +:1002400007E0201D00F0C6F80028F4D100F0CCFB38 +:1002500060682860002070BD241D94E807009200AB +:1002600000F00AFB0028F6D00E2070BD00F0BEF8AA +:100270000028FAD1D4E9010100EB81034FF080504E +:10028000026945696A43934209D84FF010225369C5 +:1002900003EB81030169406941438B4201D9092085 +:1002A00070BD5069401C01D10F2070BD2046FFF782 +:1002B0006FFF00F09BF80028F7D1201D00F08AF8AE +:1002C0000028F2D160680028F0D100F07DF800F03D +:1002D00060F800F052F8072070BD10B50C461828E1 +:1002E00002D00120086010BD2068FFF784FF206065 +:1002F00010BD4FF01024A069401C05D0A569A66967 +:1003000080353079AA2808D06069401C2DD06069FA +:100310000068401C29D060692CE010212846FFF7B6 +:1003200012FF316881421CD1A16901F18002C03104 +:1003300005E030B108CA51F8040D984201D10120FE +:1003400000E000208A42F4D158B1286810B1042896 +:1003500003D0FEE7284600F070F85249686808604C +:1003600008E000F016F800F008F84FF4805001683B +:10037000491C01D000F012FBFEE7BFF34F8F4A4843 +:1003800001684A4A01F4E06111430160BFF34F8FF5 +:10039000FEE74FF010208169491C02D0806900F00F +:1003A0008CB870472DE9F04117460D4606460024EB +:1003B00006E03046296800F093F8641C2D1D361DB8 +:1003C000BC42F6D3BDE8F0814FF0102080694FF4B5 +:1003D00080519FE64FF080510A69496900684A439D +:1003E000824201D810207047002070474FF08050A3 +:1003F0000169406941434FF01020826902F5805243 +:10040000914201D2092070478069401C01D0002030 +:1004100070470420704770B50C4605464FF480665F +:1004200008E0284600F049F8B44205D3A4F58064FA +:1004300005F58055002CF4D170BD4168044609B122 +:10044000012600E000264FF010256869A26892009E +:1004500000F012FAF8B1A06881006869FFF75AFE4F +:10046000BEB16E694FF08050A56864680169426949 +:100470005143A1420DD9016940694143A94208D9BC +:1004800029463046FFF7C7FF2A4621463046FFF788 +:1004900089FFFFF772FFFFF797FFFFF77AFFF8E793 +:1004A0000C0A0000000000200CED00E00400FA053A +:1004B000144801680029FCD07047134A02211160DA +:1004C00010490B68002BFCD00F4B1B1D18600868EF +:1004D0000028FCD00020106008680028FCD070477D +:1004E000094B10B501221A60064A1468002CFCD092 +:1004F000016010680028FCD00020186010680028F7 +:10050000FCD010BD00E4014004E5014070B50C468C +:10051000054600F073F810B900F07EF828B12146C6 +:100520002846BDE8704000F007B821462846BDE8DF +:10053000704000F037B800007FB5002200920192B1 +:10054000029203920A0B000B6946012302440AE05F +:10055000440900F01F0651F8245003FA06F635430B +:1005600041F82450401C8242F2D80D490868009A94 +:1005700010430860081D0168019A1143016000F0F2 +:100580003DF800280AD0064910310868029A104345 +:100590000860091D0868039A104308607FBD0000C9 +:1005A0000006004030B50F4C002200BF04EB0213E0 +:1005B000D3F800582DB9D3F8045815B9D3F8085812 +:1005C0001DB1521C082AF1D330BD082AFCD204EB1D +:1005D0000212C2F80008C3F804180220C3F8080881 +:1005E00030BD000000E001404FF08050D0F83001F5 +:1005F000082801D000207047012070474FF080503C +:10060000D0F83011062905D0D0F83001401C01D0B7 +:1006100000207047012070474FF08050D0F8300123 +:100620000A2801D0002070470120704708208F4918 +:1006300009680958084710208C4909680958084773 +:1006400014208A4909680958084718208749096809 +:100650000958084730208549096809580847382053 +:1006600082490968095808473C20804909680958A7 +:10067000084740207D4909680958084744207B49BC +:1006800009680958084748207849096809580847FF +:100690004C20764909680958084750207349096871 +:1006A00009580847542071490968095808475820D3 +:1006B0006E490968095808475C206C49096809585F +:1006C0000847602069490968095808476420674954 +:1006D00009680958084768206449096809580847A3 +:1006E0006C20624909680958084770205F49096809 +:1006F0000958084774205D49096809580847782057 +:100700005A490968095808477C2058490968095816 +:1007100008478020554909680958084784205349EB +:100720000968095808478820504909680958084746 +:100730008C204E4909680958084790204B490968A0 +:1007400009580847942049490968095808479820DA +:1007500046490968095808479C20444909680958CE +:100760000847A0204149096809580847A4203F4983 +:10077000096809580847A8203C49096809580847EA +:10078000AC203A49096809580847B0203749096838 +:1007900009580847B4203549096809580847B8205E +:1007A0003249096809580847BC2030490968095886 +:1007B0000847C0202D49096809580847C4202B491B +:1007C000096809580847C82028490968095808478E +:1007D000CC202649096809580847D02023490968D0 +:1007E00009580847D4202149096809580847D820E2 +:1007F0001E49096809580847DC201C49096809583E +:100800000847E0201949096809580847E4201749B2 +:10081000096809580847E820144909680958084731 +:10082000EC201249096809580847F0200F49096867 +:1008300009580847F4200D49096809580847F82065 +:100840000A49096809580847FC20084909680958F5 +:1008500008475FF480700549096809580847000097 +:1008600003480449024A034B70470000000000207F +:10087000180A0000180A000040EA010310B59B079F +:100880000FD1042A0DD310C808C9121F9C42F8D0FA +:1008900020BA19BA884201D9012010BD4FF0FF30AB +:1008A00010BD1AB1D30703D0521C07E0002010BDC1 +:1008B00010F8013B11F8014B1B1B07D110F8013B4D +:1008C00011F8014B1B1B01D1921EF1D1184610BD2E +:1008D00002F0FF0343EA032242EA024200F005B8B5 +:1008E0007047704770474FF000020429C0F0128033 +:1008F00010F0030C00F01B80CCF1040CBCF1020FD3 +:1009000018BF00F8012BA8BF20F8022BA1EB0C01A7 +:1009100000F00DB85FEAC17C24BF00F8012B00F89D +:10092000012B48BF00F8012B70474FF0000200B5C3 +:10093000134694469646203922BFA0E80C50A0E802 +:100940000C50B1F12001BFF4F7AF090728BFA0E8B0 +:100950000C5048BF0CC05DF804EB890028BF40F87C +:10096000042B08BF704748BF20F8022B11F0804FBE +:1009700018BF00F8012B7047014B1B68DB68184754 +:100980000000002009480A497047FFF7FBFFFFF706 +:10099000B9FB00BD20BFFDE7064B1847064A1060B3 +:1009A000016881F30888406800470000180A0000C9 +:1009B000180A0000F3020000000000201EF0040FDF +:1009C0000CBFEFF30881EFF30981886902380078E2 +:1009D000182803D100E00000074A1047074A1268B0 +:1009E0002C3212681047000000B5054B1B68054A01 +:1009F0009B58984700BD0000DB020000000000206B +:100A0000080A0000040000000010000000000000C0 +:080A100000FFFFFF0090D0037E +:10100000801300204958020045C00000AF5702007D +:1010100045C0000045C0000045C0000000000000C1 +:10102000000000000000000000000000A5580200C1 +:1010300045C000000000000045C0000045C00000A1 +:101040000D5902001359020045C0000045C00000C0 +:1010500045C0000045C0000045C0000045C000007C +:101060001959020045C0000045C000001F59020088 +:1010700045C00000255902002B59020031590200D9 +:1010800045C0000045C0000045C0000045C000004C +:1010900045C0000045C0000045C0000045C000003C +:1010A00045C000003759020045C0000045C000009F +:1010B00045C0000045C0000045C0000045C000001C +:1010C0003D59020045C0000045C0000045C0000079 +:1010D00045C0000045C0000045C0000045C00000FC +:1010E00045C0000045C0000045C0000045C00000EC +:1010F00045C0000045C0000045C0000045C00000DC +:1011000045C0000045C0000000F002F824F08BFB51 +:101110000AA090E8000C82448344AAF10107DA4552 +:1011200001D124F080FBAFF2090EBAE80F0013F0F2 +:10113000010F18BFFB1A43F001031847EC4C0200E3 +:101140000C4D02000A444FF0000C10F8013B13F064 +:10115000070408BF10F8014B1D1108BF10F8015B10 +:10116000641E05D010F8016B641E01F8016BF9D103 +:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A +:101180006D1E58BF01F801CBFAD505E014F8016BCC +:1011900001F8016B6D1EF9D59142D6D3704700005E +:1011A0000023002400250026103A28BF78C1FBD870 +:1011B000520728BF30C148BF0B6070471FB500F011 +:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC +:1011D0000880EFF30980014A1047000087BF000034 +:1011E000F0B44046494652465B460FB402A0013077 +:1011F00001B50648004700BF01BC86460FBC8046CB +:10120000894692469B46F0BC7047000009110000D9 +:101210008269034981614FF001001044704700006A +:101220002512000001B41EB400B514F08DFE01B407 +:101230000198864601BC01B01EBD000024F0F0BA42 +:1012400070B51A4C054609202070A01C00F0D1F89A +:101250005920A08029462046BDE8704008F0BAB861 +:1012600008F0C3B870B50C461149097829B1A0F14E +:1012700060015E2908D3012013E0602804D06928AA +:1012800002D043F201000CE020CC0A4E94E80E009C +:1012900006EB8000A0F58050241FD0F8806E284611 +:1012A000B047206070BD012070470000080000209A +:1012B00018000020885902003249884201D20120DA +:1012C00070470020704770B50446A0F500002E4E10 +:1012D000B0F1786F02D23444A4F500042948844266 +:1012E00001D2012500E0002500F043F848B125B9FE +:1012F000B44204D32548006808E0012070BD0020F6 +:1013000070BD002DF9D1B442F9D321488442F6D200 +:10131000F3E710B50446A0F50000B0F1786F03D2F2 +:1013200019480444A4F5000400F023F84FF080416C +:1013300030B11648006804E08C4204D2012003E07A +:1013400013488442F8D2002080F0010010BD10B58F +:1013500020B1FFF7DEFF08B1012010BD002010BD55 +:1013600010B520B1FFF7AFFF08B1012010BD00207C +:1013700010BD084808490068884201D10120704723 +:101380000020704700600200000000201C000020C8 +:101390000800002054000020BEBAFECA10B5044662 +:1013A0000021012000F03DF800210B2000F039F869 +:1013B0000421192000F035F804210D2000F031F847 +:1013C00004210E2000F02DF804210F2000F029F850 +:1013D0000421C84300F025F80621162000F021F86A +:1013E0000621152000F01DF82046FFF729FF0020F8 +:1013F00010BDAE2101807047FFF732BF1148704722 +:1014000010487047104A10B514680F4B0F4A083344 +:101410001A60FFF727FF0C48001D046010BD7047DD +:1014200070474907090E002804DB00F1E02080F82E +:101430000014704700F00F0000F1E02080F8141D48 +:101440007047000003F9004210050240010000014E +:10145000FE48002101604160018170472DE9F7439A +:10146000044692B091464068FFF771FF40B1606852 +:10147000FFF776FF20B9607800F00300022801D062 +:10148000012000E00020F14E30724846FFF71BFFBC +:1014900018B1102015B0BDE8F0834946012001F0D5 +:1014A0008EFE0028F6D101258DF842504FF4C05031 +:1014B000ADF84000002210A9284606F001FC0028E3 +:1014C000E8D18DF842504FF428504FF00008ADF8A5 +:1014D000400047461C216846CDF81C8024F03BF9AB +:1014E0009DF81C0008AA20F00F00401C20F0F0001E +:1014F00010308DF81C0020788DF81D0061789DF863 +:101500001E0061F3420040F001008DF81E009DF8BE +:1015100000000AA940F002008DF800002089ADF813 +:101520003000ADF83270608907AFADF834000B972A +:10153000606810AC0E900A94684606F0B4F9002872 +:10154000A8D1BDF8200030808DF8425042F601202D +:10155000ADF840009DF81E0008AA20F00600801C8F +:1015600020F001008DF81E000220ADF83000ADF82B +:10157000340013A80E900AA9684606F094F90028D2 +:1015800088D1BDF820007080311D484600F033F945 +:10159000002887D18DF8425042F6A620ADF84000D1 +:1015A0001C216846CDF81C8024F0D5F89DF81C005D +:1015B000ADF8345020F00F00401C20F0F000103047 +:1015C0008DF81C009DF81D0008AA20F0FF008DF882 +:1015D0001D009DF81E000AA920F0060040F0010041 +:1015E000801C8DF81E009DF800008DF8445040F0DE +:1015F00002008DF80000CDE90A4711A80E90ADF861 +:101600003050684606F04FF9002899D1BDF8200007 +:10161000F08000203EE73EB504460820ADF800000B +:101620002046FFF750FE08B110203EBD21460120A4 +:1016300001F0C5FD0028F8D12088ADF804006088CD +:10164000ADF80600A088ADF80800E088ADF80A0003 +:101650007E4801AB6A468088002106F02DFDBDF86A +:1016600000100829E1D003203EBD1FB5044600202C +:1016700002900820ADF80800CDF80CD02046FFF706 +:1016800022FE10B1102004B010BD704802AA81885B +:101690004FF6FF7006F052FF0028F4D1BDF8081095 +:1016A000082901D00320EEE7BDF800102180BDF825 +:1016B00002106180BDF80410A180BDF80610E18021 +:1016C000E1E701B582B00220ADF800005F4802AB4F +:1016D0006A464088002106F0EFFCBDF800100229A0 +:1016E00000D003200EBD1CB5002100910221ADF8F1 +:1016F00000100190FFF70DFE08B110201CBD5348EB +:101700006A4641884FF6FF7006F018FFBDF80010DA +:101710000229F3D003201CBDFEB54C4C06461546ED +:10172000207A0F46C00705D00846FFF7CCFD18B158 +:101730001020FEBD0F20FEBDF82D01D90C20FEBDEE +:101740003046FFF7C0FD18BB208801A905F0B0FDA9 +:101750000028F4D130788DF80500208801A906F022 +:1017600089FC0028EBD100909DF800009DF8051041 +:1017700040F002008DF80000090703D040F0080097 +:101780008DF800002088694606F011FC0028D6D1AB +:10179000ADF8085020883B4602AA002106F08CFCD8 +:1017A000BDF80810A942CAD00320FEBD7CB505468D +:1017B0000020009001900888ADF800000C462846F3 +:1017C0000195FFF7C4FD18B92046FFF7A2FD08B147 +:1017D00010207CBD15B1BDF8000050B11B486A4611 +:1017E00001884FF6FF7006F0A9FEBDF800102180B9 +:1017F0007CBD0C207CBD30B593B0044600200D4666 +:101800000090142101A823F0A6FF1C2108A823F0B2 +:10181000A2FF9DF80000CDF808D020F00F00401C7A +:1018200020F0F00010308DF800009DF8010020F04D +:10183000FF008DF801009DF8200040F002008DF8B7 +:10184000200001208DF8460002E000001C0200206C +:1018500042F60420ADF8440011A801902088ADF8AC +:101860003C006088ADF83E00A088ADF84000E088FC +:10187000ADF842009DF8020006AA20F00600801C88 +:1018800020F001008DF802000820ADF80C00ADF842 +:1018900010000FA8059001A908A806F004F8002878 +:1018A00003D1BDF818002880002013B030BD00001F +:1018B000F0B5007B059F1E4614460D46012800D05A +:1018C000FFDF0C2030803A203880002C08D0287AA6 +:1018D000032806D0287B012800D0FFDF1720608175 +:1018E000F0BDA889FBE72DE9F04786B0144691F8D2 +:1018F0000C900E9A0D46B9F1010F0BD01021007B10 +:101900002E8A8846052807D0062833D0FFDF06B088 +:10191000BDE8F0870221F2E7E8890C2100EB4000E6 +:1019200001EB4000188033201080002CEFD0E889B4 +:10193000608100271AE00096688808F1020301AA76 +:10194000696900F084FF06EB0800801C07EB470183 +:1019500086B204EB4102BDF8040090810DF106014E +:1019600040460E3212F09DFD7F1CBFB26089B84226 +:10197000E1D8CCE734201080E889B9F1010F11D00B +:10198000122148430E301880002CC0D0E8896081B5 +:101990004846B9F1010F00D00220207300270DF155 +:1019A000040A1FE00621ECE70096688808F10203AC +:1019B00001AA696900F04BFF06EB0800801C86B2A3 +:1019C000B9F1010F12D007EBC70004EB4000BDF8DE +:1019D0000410C18110220AF10201103023F01AFE16 +:1019E0007F1CBFB26089B842DED890E707EB4701A1 +:1019F00004EB4102BDF80400D0810AF10201404627 +:101A0000103212F04EFDEBE72DE9F0470E4688B09C +:101A100090F80CC096F80C80378AF5890C20109944 +:101A200002F10C044FF0000ABCF1030F08D0BCF126 +:101A3000040F3ED0BCF1070F7DD0FFDF08B067E791 +:101A400005EB850C00EB4C00188031200880002A43 +:101A5000F4D0A8F1060000F0FF09558125E0182117 +:101A600001A823F078FE00977088434601AA7169A7 +:101A700000F0EDFEBDF804002080BDF80600E08017 +:101A8000BDF808002081A21C0DF10A01484612F0A1 +:101A900008FDB9F1000F00D018B184F804A0A4F833 +:101AA00002A007EB080087B20A346D1EADB2D6D291 +:101AB000C4E705EB850C00EB4C0018803220088051 +:101AC000002ABBD0A8F1050000F0FF09558137E0DE +:101AD00000977088434601AA716900F0B8FE9DF82E +:101AE0000600BDF80410E1802179420860F300018E +:101AF00062F34101820862F38201C20862F3C3010A +:101B0000020962F30411420962F34511820962F38A +:101B100086112171C0096071BDF80700208122463D +:101B20000DF10901484612F0BCFC18B184F802A07E +:101B3000A4F800A000E007E007EB080087B20A3431 +:101B40006D1EADB2C4D279E7A8F1020084B205FBE4 +:101B500008F000F10E0CA3F800C035230B80002A1A +:101B6000A6D055819481009783B270880E32716936 +:101B700000F06DFE62E72DE9F84F1E460A9D0C4607 +:101B800081462AB1607A00F58070D080E0891081AA +:101B900099F80C000C274FF000084FF00E0A0D28A2 +:101BA00073D2DFE800F09E070E1C28303846556AD5 +:101BB00073737300214648460095FFF779FEBDE830 +:101BC000F88F207B9146082802D0032800D0FFDF41 +:101BD000378030200AE000BFA9F80A80EFE7207BB9 +:101BE0009146042800D0FFDF378031202880B9F1EA +:101BF000000FF1D1E3E7207B9146042800D0FFDFFE +:101C000037803220F2E7207B9146022800D0FFDFA8 +:101C100037803320EAE7207B1746022800D0FFDF19 +:101C20003420A6F800A02880002FC8D0A7F80A808A +:101C3000C5E7207B1746042800D0FFDF3520A6F833 +:101C400000A02880002FBAD04046A7F80A8012E0F2 +:101C5000207B1746052802D0062800D0FFDF102081 +:101C6000308036202880002FA9D0E0897881A7F81D +:101C70000E80B9F80E00B881A1E7207B91460728B5 +:101C800000D0FFDF37803720B0E72AE04FF01200A6 +:101C900018804FF038001700288090D0E0897881B4 +:101CA000A7F80E80A7F8108099F80C000A2805D034 +:101CB0000B2809D00C280DD0FFDF80E7207B0A28F5 +:101CC00000D0FFDF01200AE0207B0B2800D0FFDFDF +:101CD000042004E0207B0C2800D0FFDF05203873AF +:101CE0006DE7FFDF6BE770B50C46054601F0ABFB17 +:101CF00020B10078222804D2082070BD43F20200EF +:101D000070BD0521284610F03FFE206008B100207C +:101D100070BD032070BD30B44880087820F00F00FB +:101D2000C01C20F0F000903001F8080B1DCA81E8BB +:101D30001D0030BC07F0CFBB2DE9FF4784B0002762 +:101D40008246029707989046894612300AF0CAF9EF +:101D5000401D20F00306079828B907A95046FFF751 +:101D6000C2FF002854D1B9F1000F05D00798017BBC +:101D700019BB052504681BE098F80000092803D06A +:101D80000D2812D0FFDF46E0079903254868B0B35D +:101D9000497B42887143914239D98AB2B3B2011D5D +:101DA00010F065FC0446078002E0079C0425083417 +:101DB0000CB1208810B1032D29D02CE00798012107 +:101DC00012300AF0C1F9ADF80C00024602AB294608 +:101DD000504608F0EEF9070001D1A01C02900798C8 +:101DE0003A461230C8F80400A8F802A003A94046F9 +:101DF000029B0AF0B6F9D8B10A2817D200E006E033 +:101E0000DFE800F007091414100B0D14141213204E +:101E100014E6002012E6112010E608200EE643F238 +:101E200003000BE6072009E60D2007E6032005E680 +:101E3000BDF80C002346CDE900702A4650460799AC +:101E400000F015FD57B9032D08D10798B3B2417BB7 +:101E5000406871438AB2011D10F01DFCB9F1000FFA +:101E6000D7D0079981F80C90D3E72DE9FE4F914622 +:101E70001A881C468A468046FAB102AB494608F0E9 +:101E800098F9050019D04046A61C278810F0C0FE1E +:101E90003246072629463B46009610F0CEFA2088A7 +:101EA0002346CDE900504A465146404600F0DFFC4B +:101EB000002020800120BDE8FE8F0020FBE710B548 +:101EC00086B01C46AAB104238DF800301388ADF803 +:101ED00008305288ADF80A208A788DF80E200988DB +:101EE000ADF80C1000236A462146FFF725FF06B027 +:101EF00010BD1020FBE770B50D46052110F044FD24 +:101F0000040000D1FFDF294604F11200BDE8704053 +:101F10000AF003B92DE9F8430D468046002607F084 +:101F2000D7FA04462878102878D2DFE800F0773B0B +:101F30003453313112313131083131313131287975 +:101F4000001FC0B2022801D0102810D114BBFFDF3F +:101F500035E004B9FFDF0521404610F015FD007B98 +:101F6000032806D004280BD0072828D0FFDF072637 +:101F700055E02879801FC0B2022820D050B1F6E782 +:101F80002879401FC0B2022819D0102817D0EEE7D8 +:101F900004B9FFDF13E004B9FFDF287901280ED16F +:101FA000172137E00521404610F0EEFC070000D174 +:101FB000FFDF07F1120140460AF08CF82CB12A46E7 +:101FC00021464046FFF7A7FE29E01321404602F0D4 +:101FD000F7FC24E004B9FFDF0521404610F0D4FCF3 +:101FE000060000D1FFDF694606F112000AF07CF816 +:101FF000060000D0FFDFA988172901D2172200E0D0 +:102000000A46BDF80000824202D9014602E005E01E +:102010001729C5D3404600F03AFCD0E7FFDF304631 +:10202000BDE8F883401D20F0030219B102FB01F066 +:10203000001D00E000201044704713B5009848B11F +:102040000024684610F0BDFA002C02D1F74A00992E +:1020500011601CBD01240020F4E72DE9F0470C4677 +:1020600015462421204623F076FB05B9FFDFA8782A +:1020700060732888DFF8B4A3401D20F00301AF7817 +:102080008946DAF8000010F0BAFA060000D1FFDF46 +:102090004FF000082660A6F8008077B109FB07F131 +:1020A000091D0AD0DAF8000010F0A9FA060000D1E4 +:1020B000FFDF6660C6F8008001E0C4F8048029886C +:1020C00004F11200BDE8F04709F0F6BF2DE9F04732 +:1020D000804601F112000D4681460AF003F8401DCA +:1020E000D24F20F003026E7B14462968386810F046 +:1020F000B1FA3EB104FB06F2121D03D069683868DC +:1021000010F0A8FA052010F0E7FB0446052010F0B7 +:10211000EBFB201A012802D1386810F065FA494615 +:102120004046BDE8F04709F0DCBF70B50546052123 +:1021300010F02AFC040000D1FFDF04F11201284650 +:10214000BDE8704009F0C6BF2DE9F04F91B04FF0E7 +:10215000000BADF834B0ADF804B047880C46054626 +:1021600092460521384610F00FFC060000D1FFDF33 +:1021700024B1A780A4F806B0A4F808B029780922F1 +:102180000B20B2EB111F7DD12A7A04F11001382700 +:102190004FF00C084FF001090391102A73D2DFE8C9 +:1021A00002F072F2F1F07F08D2888D9F3DDBF3EEF2 +:1021B000B6B6307B022800D0FFDFA88908EBC0014B +:1021C000ADF804103021ADF83410002C25D060811A +:1021D000B5F80E9000271DE004EBC708317C88F8A5 +:1021E0000E10F189A8F80C10CDF80090688804232F +:1021F00004AA296900F02BFBBDF81010A8F81010F4 +:1022000009F10400BDF812107F1C1FFA80F9A8F82C +:102210001210BFB26089B842DED80DE1307B0228CF +:1022200000D0FFDFE98908EBC100ADF804003020E1 +:10223000ADF83400287B0A90001FC0B20F90002C2C +:10224000EBD06181B5F81090002725E0CDF8009023 +:102250006888696903AA0A9B00F0F9FA0A9804EBF6 +:10226000C70848441FFA80F908F10C0204A90F9826 +:1022700012F017F918B188F80EB0A8F80CB0BDF834 +:102280000C1001E0D4E0CFE0A8F81010BDF80E105B +:102290007F1CA8F81210BFB26089B842D6D8CBE034 +:1022A0000DA8009001AB224629463046FFF71BFBE4 +:1022B000C2E0307B082805D0FFDF03E0307B082830 +:1022C00000D0FFDFE8891030ADF804003620ADF80B +:1022D0003400002C3FD0A9896181F189A18127E0D8 +:1022E000307B092800D0FFDFA88900F10C01ADF890 +:1022F00004103721ADF83410002C2CD06081E8890F +:102300000090AB89688804F10C02296956E0E889DD +:102310003921103080B2ADF80400ADF83410002C33 +:1023200074D0A9896181287A0E280AD002212173EC +:10233000E989E181288A0090EB8968886969039AB4 +:102340003CE00121F3E70DA8009001AB22462946AD +:102350003046FFF759FB6FE0307B0A2800D0FFDFE3 +:102360001220ADF80400ADF834704CB3A989618136 +:10237000A4F810B0A4F80EB084F80C905CE020E053 +:1023800002E031E039E042E0307B0B2800D0FFDF93 +:10239000288AADF834701230ADF8040084B10421FD +:1023A0002173A9896181E989E181298A2182688A69 +:1023B00000902B8A688804F11202696900F047FADC +:1023C0003AE0307B0C2800D0FFDF1220ADF804008B +:1023D000ADF834703CB305212173A4F80AB0A4F819 +:1023E0000EB0A4F810B027E00DA8009001AB224673 +:1023F00029463046FFF75CFA1EE00DA8009001ABBD +:10240000224629463046FFF7B6FB15E034E03B2173 +:10241000ADF80400ADF8341074B3A4F80690A4F835 +:1024200008B084F80AB007E0FFDF05E010000020E4 +:10243000297A012917D0FFDFBDF80400AAF80000AF +:102440006CB1BDF834002080BDF804006080BDF898 +:102450003400392803D03C2801D086F80CB011B0E4 +:102460000020BDE8F08F3C21ADF80400ADF8341039 +:1024700014B1697AA172DFE7AAF80000EFE72DE94D +:10248000F84356880F46804615460521304610F021 +:102490007BFA040000D1FFDF123400943B46414632 +:1024A00030466A6809F091FFBAE570B50D4605211E +:1024B00010F06AFA040000D1FFDF294604F112008F +:1024C000BDE8704009F01BBE70B50D46052110F047 +:1024D0005BFA040000D1FFDF294604F11200BDE8D9 +:1024E000704009F039BE70B50546052110F04CFA70 +:1024F000040000D1FFDF04F1080321462846BDE8AF +:1025000070400422B1E470B50546052110F03CFA94 +:10251000040000D1FFDF214628462368BDE8704053 +:102520000522A2E470B50646052110F02DFA04003C +:1025300000D1FFDF04F1120009F0D4FD401D20F0AE +:10254000030511E0011D008803224318214630468F +:10255000FFF78BFC00280BD0607BABB2684382B2E4 +:102560006068011D10F0CDF8606841880029E9D14C +:1025700070BD70B50E46054606F0AAFF040000D1F6 +:10258000FFDF0120207266726580207820F00F0046 +:10259000C01C20F0F00030302070BDE8704006F024 +:1025A0009ABF2DE9F0438BB00D461446814606A92B +:1025B000FFF799FB002814D14FF6FF7601274FF45F +:1025C00020588CB103208DF800001020ADF81000C9 +:1025D00007A8059007AA204604A911F081FF78B149 +:1025E00007200BB0BDE8F0830820ADF808508DF847 +:1025F0000E708DF80000ADF80A60ADF80C800CE0AC +:102600000698A17801742188C1818DF80E70ADF80B +:102610000850ADF80C80ADF80A606A4602214846C1 +:10262000069BFFF789FBDCE708B501228DF8022045 +:1026300042F60202ADF800200A4603236946FFF77E +:102640003EFC08BD08B501228DF8022042F60302C7 +:10265000ADF800200A4604236946FFF730FC08BDA8 +:1026600000B587B079B102228DF800200A88ADF854 +:1026700008204988ADF80A1000236A460521FFF7B3 +:102680005BFB07B000BD1020FBE709B1072316E490 +:102690000720704770B588B00D461446064606A957 +:1026A000FFF721FB00280ED17CB10620ADF80850C1 +:1026B0008DF80000ADF80A40069B6A460821DC81CF +:1026C0003046FFF739FB08B070BD05208DF80000DB +:1026D000ADF80850F0E700B587B059B107238DF881 +:1026E0000030ADF80820039100236A460921FFF766 +:1026F00023FBC6E71020C4E770B588B00C46064639 +:10270000002506A9FFF7EFFA0028DCD10698012181 +:10271000123009F019FD9CB12178062921D2DFE899 +:1027200001F0200505160318801E80B2C01EE28845 +:1027300080B20AB1A3681BB1824203D90C20C2E760 +:102740001020C0E7042904D0A08850B901E0062079 +:10275000B9E7012913D0022905D004291CD0052985 +:102760002AD00720AFE709208DF800006088ADF877 +:102770000800E088ADF80A00A068039023E00A2072 +:102780008DF800006088ADF80800E088ADF80A0018 +:10279000A0680A25039016E00B208DF800006088E1 +:1027A000ADF80800A088ADF80A00E088ADF80C008C +:1027B000A0680B25049006E00C208DF800006078DE +:1027C0008DF808000C256A4629463046069BFFF71F +:1027D000B3FA78E700B587B00D228DF80020ADF888 +:1027E000081000236A461946FFF7A6FA49E700B524 +:1027F00087B071B102228DF800200A88ADF8082058 +:102800004988ADF80A1000236A460621FFF794FABA +:1028100037E7102035E770B586B0064601200D4633 +:10282000ADF808108DF80000014600236A463046D6 +:10283000FFF782FA040008D12946304605F056FC1D +:102840000021304605F070FC204606B070BDF8B59A +:102850001C4615460E46069F10F0C8F92346FF1D7C +:10286000BCB231462A4600940FF0B3FDF8BD30B437 +:102870001146DDE902423CB1032903D0002330BCFC +:1028800008F022BB0123FAE71A8030BC704770B50C +:102890000C460546FFF72FFB2146284605F035FC80 +:1028A0002846BDE87040012105F03EBC4FF0E02213 +:1028B0004FF400400021C2F88001BFF34F8FBFF3F7 +:1028C0006F8F1748016001601649900208607047D9 +:1028D000134900B500220A600A60124B4FF0607283 +:1028E0001A60002808BF00BD0F4A104BDFF840C037 +:1028F00001280CD002281CBFFFDF00BD03200860A8 +:102900001A604FF4000000BFCCF8000000BD0220A8 +:1029100008601A604FF04070F6E700B5FFDF00BDB9 +:1029200000F5004008F501409C02002014F500402D +:1029300004F5014070B50B2000F0BDF9082000F04F +:10294000BAF900210B2000F0D4F90021082000F092 +:10295000D0F9F44C01256560A5600020C4F8400161 +:10296000C4F84401C4F848010B2000F0B5F9082070 +:1029700000F0B2F90B2000F091F9256070BD10B5A0 +:102980000B2000F098F9082000F095F9E5480121A6 +:1029900041608160E4490A68002AFCD10021C0F846 +:1029A0004011C0F84411C0F848110B2000F094F910 +:1029B000BDE81040082000F08FB910B50B2000F0E2 +:1029C0008BF9BDE81040082000F086B900B530B1A1 +:1029D000012806D0022806D0FFDF002000BDD34822 +:1029E00000BDD34800BDD248001D00BD70B5D1491F +:1029F0004FF000400860D04DC00BC5F80803CF4829 +:102A000000240460C5F840410820C43500F053F9A3 +:102A1000C5F83C41CA48047070BD08B5C14A0021E0 +:102A200028B1012811D002281CD0FFDF08BD4FF4C7 +:102A30008030C2F80803C2F84803BB483C3001604C +:102A4000C2F84011BDE80840D0E74FF40030C2F8AA +:102A50000803C2F84803B44840300160C2F844118A +:102A6000B3480CE04FF48020C2F80803C2F84803D2 +:102A7000AD4844300160C2F84811AD48001D0068FF +:102A8000009008BD70B516460D460446022800D9D0 +:102A9000FFDF0022A348012304F110018B4000EB6B +:102AA0008401C1F8405526B1C1F84021C0F8043373 +:102AB00003E0C0F80833C1F84021C0F8443370BDCA +:102AC0002DE9F0411D46144630B1012833D00228CB +:102AD00038D0FFDFBDE8F081891E002221F07F4160 +:102AE0001046FFF7CFFF012D23D00020944D924FC9 +:102AF000012668703E61914900203C39086002203F +:102B0000091D08608D490420303908608B483D3428 +:102B1000046008206C6000F0DFF83004C7F804039C +:102B2000082000F0BBF88349F007091F08602E70E9 +:102B3000D0E70120DAE7012B02D00022012005E0D6 +:102B40000122FBE7012B04D000220220BDE8F04166 +:102B500098E70122F9E774480068704770B500F003 +:102B6000D8F8704C0546D4F840010026012809D158 +:102B7000D4F80803C00305D54FF48030C4F8080327 +:102B8000C4F84061D4F8440101280CD1D4F80803FA +:102B9000800308D54FF40030C4F80803C4F844613A +:102BA000012012F06AFCD4F8480101280CD1D4F8B5 +:102BB0000803400308D54FF48020C4F80803C4F884 +:102BC0004861022012F059FC5E48056070BD70B586 +:102BD00000F09FF85A4D0446287850B1FFF706FFE1 +:102BE000687818B10020687012F047FC55480460FE +:102BF00070BD0320F8E74FF0E0214FF40010C1F85A +:102C000000027047152000F067B84B4901200861A9 +:102C1000082000F061B848494FF47C10C1F808035F +:102C20000020024601EB8003C3F84025C3F8402191 +:102C3000401CC0B20628F5D37047410A43F609523A +:102C40005143C0F3080010FB02F000F5807001EB67 +:102C50005020704710B5430B48F2376463431B0C98 +:102C60005C020C60384C03FB0400384B4CF2F72438 +:102C700043435B0D13FB04F404EB402000F580702C +:102C80004012107008681844086010BD2C48406855 +:102C9000704729490120C1F800027047002809DB6C +:102CA00000F01F02012191404009800000F1E02066 +:102CB000C0F80011704700280DDB00F01F02012151 +:102CC00091404009800000F1E020C0F88011BFF37E +:102CD0004F8FBFF36F8F7047002809DB00F01F0292 +:102CE000012191404009800000F1E020C0F88012ED +:102CF00070474907090E002804DB00F1E02080F846 +:102D00000014704700F00F0000F1E02080F8141D5F +:102D100070470C48001F00680A4A0D49121D1160D7 +:102D20007047000000B0004004B500404081004002 +:102D300044B1004008F5014000800040408500405B +:102D40003400002014050240F7C2FFFF6F0C0100A1 +:102D5000010000010A4810B5046809490948083112 +:102D6000086012F01EFC0648001D046010BD0649F4 +:102D7000002008604FF0E0210220C1F88002704777 +:102D80001005024001000001FC1F004010B50D209D +:102D900000F077F8C4B26FF0040000F072F8C0B22F +:102DA000844200D0FFDF3E490120086010BD70B5AD +:102DB0000D2000F048F83B4C0020C4F8000101252C +:102DC000C4F804530D2000F04FF825604FF0E021C7 +:102DD0006014C1F8000170BD10B50D2000F033F88B +:102DE0003048012141600021C0F80011BDE81040C9 +:102DF0000D2000F039B82C4810B504682A492B483A +:102E0000083108602749D1F80001012804D0FFDF0C +:102E10002548001D046010BD2148001D00680022E7 +:102E2000C0B2C1F8002113F009F8F1E710B51D4850 +:102E3000D0F800110029FBD0FFF7DDFFBDE81040FE +:102E40000D2000F011B800280DDB00F01F02012159 +:102E500091404009800000F1E020C0F88011BFF3EC +:102E60004F8FBFF36F8F7047002809DB00F01F0200 +:102E7000012191404009800000F1E020C0F880125B +:102E80007047002804DB00F1E02090F8000405E022 +:102E900000F00F0000F1E02090F8140D4009704799 +:102EA00004D5004000D000401005024001000001A0 +:102EB0004FF0E0214FF00070C1F8800101F5C071C2 +:102EC000BFF34F8FBFF36F8FC1F80001384B8022E3 +:102ED00083F8002441F8800C704700B502460420B6 +:102EE000344903E001EBC0031B792BB1401EC0B293 +:102EF000F8D2FFDFFF2000BD41F8302001EBC00118 +:102F000000224A718A7101220A7100BD294A0021FA +:102F100002EBC0000171704710B50446042800D3CD +:102F2000FFDF244800EBC4042079012800D0FFDF34 +:102F30006079A179401CC0B2814200D060714FF02D +:102F4000E0214FF00070C1F8000210BD2DE9F04102 +:102F500019480568184919480831086014480426BA +:102F600090F80004134F4009154C042818D0FFDFD7 +:102F700016E0217807EBC1000279012A08D14279D5 +:102F800083799A4204D04279827157F831008047A0 +:102F90002078401CC0B22070042801D3002020708B +:102FA000761EF6B2E5D20448001D0560BDE8F0814A +:102FB00019E000E0D40500201005024001000001E6 +:102FC000500000200548064A0168914201D10021C5 +:102FD000016004490120086070470000540000208F +:102FE000BEBAFECA40E5014070B50C46054609F080 +:102FF00089FB21462846BDE870400AF06EBC704748 +:103000002CFFFFFFDBE5B15100600200AE00FFFFC7 +:103010008C00000068915B008308DF2FACFED6397E +:1030200029D64B9DC15EF1868A16B47C30B5F84D29 +:103030000446062CA9780ED2DFE804F0030E0E0E2B +:103040000509FFDF08E0022906D0FFDF04E00329BD +:1030500002D0FFDF00E0FFDFAC7030BD30B50446CA +:103060001038EB4D07280CD2DFE800F0040C060CFA +:103070000C0C0C00FFDF05E0287E112802D0FFDFDA +:1030800000E0FFDF2C7630BD2DE9F04111F092FB1E +:10309000044612F063FD201AC5B206200FF01CFC96 +:1030A000044606200FF020FC211AD94C207E12285D +:1030B00018D000200F1807200FF00EFC064607203E +:1030C0000FF012FC301A3918207E13280CD0002083 +:1030D0000144A078042809D000200844281AC0B26E +:1030E000BDE8F0810120E5E70120F1E70120F4E7E8 +:1030F000C74810B590F825004108C54800F12600E2 +:1031000005D00DF006FBBDE8104006F003B80DF049 +:10311000E1FAF8E730B50446A1F120000D460A288F +:103120004AD2DFE800F005070C1C2328353A3F445B +:10313000FFDF42E0207820283FD1FFDF3DE0B448A8 +:103140008178052939D0007E122836D020782428AD +:1031500033D0252831D023282FD0FFDF2DE0207851 +:1031600022282AD0232828D8FFDF26E0207822280A +:1031700023D0FFDF21E0207822281ED024281CD075 +:1031800026281AD0272818D0292816D0FFDF14E0C7 +:103190002078252811D0FFDF0FE0207825280CD0DB +:1031A000FFDF0AE02078252807D0FFDF05E0207840 +:1031B000282802D0FFDF00E0FFDF257030BD1FB5FB +:1031C00004466A46002001F035FEB4B1BDF8022085 +:1031D0004FF6FF700621824201D1ADF80210BDF812 +:1031E0000420824201D1ADF80410BDF808108142DC +:1031F00003D14FF44860ADF8080068460EF0EBF8D4 +:1032000005F088FF04B010BD70B514460D460646A3 +:10321000FEF759F858B90DB1A54201D90C2070BD7F +:10322000002408E056F82400FEF74DF808B11020FD +:1032300070BD641CE4B2AC42F4D3002070BD2DE933 +:10324000F04105461F4690460E4600240068FEF7F2 +:1032500087F830B9A98828680844401EFEF780F82E +:1032600008B110203CE728680028A88802D0B8429E +:1032700002D850E00028F5D0092031E72968085D20 +:10328000B8B1671CCA5D152A2ED03CDC152A3AD28B +:10329000DFE802F03912222228282A2A313139396E +:1032A00039393939393939392200085D30BB641C64 +:1032B000A4B2A242F9D833E00228DDD1A01C085CF8 +:1032C00088F80000072801D2400701D40A2007E748 +:1032D000307840F0010015E0C143C90707E001283C +:1032E00007D010E00620FBE60107A1F1805100297C +:1032F000F5D01846F4E63078810701D50B20EFE6CB +:1033000040F0020030702868005D384484B2A8881C +:10331000A04202D2B0E74FF4485382B2A242ADD8E5 +:103320000020DDE610B5027843F2022354080122A2 +:10333000022C12D003DC3CB1012C16D106E0032C88 +:1033400010D07F2C11D112E0002011E080790324ED +:10335000B4EB901F09D10A700BE08079B2EB901F9B +:1033600003D1F8E780798009F5D0184610BDFF2019 +:103370000870002010BD08B500208DF8000024481A +:1033800090F82E1049B190F82F0002280ED0032893 +:103390000ED0FFDF9DF8000008BD1D4869462530AE +:1033A00001F097FD0028F5D0FFDFF3E7032000E0F0 +:1033B00001208DF80000EDE738B50C46054669465A +:1033C00001F087FD00280DD19DF80010207861F3F1 +:1033D0004700207055F8010FC4F80100A888A4F830 +:1033E0000500002038BD38B51378A8B1022813D0E5 +:1033F000FF281AD007A46D46246800944C7905EB89 +:103400009414247864F347031370032809D00FE061 +:10341000E80100200302FF0123F0FE0313700228DD +:10342000F3D1D8B240F0010005E043F0FE00107087 +:10343000107820F0010010700868C2F80100888838 +:10344000A2F8050038BD02210FF09EBA38B50C462F +:103450000978222901D2082038BDADF800008DF886 +:10346000022068460DF097F905F054FE050003D1DF +:1034700021212046FFF74EFE284638BD1CB500200E +:103480008DF80000CDF80100ADF80500FB4890F87C +:103490002E00022801D0012000E000208DF8070056 +:1034A00068460DF0DAFA002800D0FFDF1CBD0022CC +:1034B0000A80437892B263F3451222F040020A80F8 +:1034C00000780C282BD2DFE800F02A06090E11162E +:1034D000191C1F220C2742F0110009E042F01D00C8 +:1034E00008800020704742F0110012E042F0100006 +:1034F00040F00200F4E742F01000F1E742F0010072 +:10350000EEE742F0010004E042F00200E8E742F09A +:10351000020040F00400E3E742F00400E0E7072087 +:1035200070472DE9FF478AB00025BDF82C60824620 +:103530001C4691468DF81C50700703D56068FDF756 +:10354000C2FE68B9CD4F4FF0010897F82E0058B170 +:1035500097F82F00022807D16068FDF701FF18B126 +:1035600010200EB0BDE8F087300702D5A089802872 +:103570003ED8700705D4B9F1000F02D097F82400A7 +:10358000A0B3E07DC0F300108DF81B00627D072022 +:10359000032162B3012A2DD0022AE2D0042AE0D10D +:1035A0008DF81710F00628D4A27D07202AB3012A2F +:1035B00023D0022A24D0042AD3D18DF8191000BFB9 +:1035C0008DF81590606810B307A9FFF7ABFE0028CF +:1035D000C7D19DF81C00FF2816D0606850F8011F65 +:1035E000CDF80F108088ADF8130014E000E001E082 +:1035F0000720B6E78DF81780D4E78DF81980DFE74C +:1036000002208DF81900DBE743F20220A9E7CDF88C +:103610000F50ADF81350E07B40B9207C30B9607C8E +:1036200020B9A07C10B9E07CC00601D0062098E744 +:103630008DF800A0BDF82C00ADF80200A068019044 +:10364000A068029004F10F0001F037FC8DF80C0027 +:10365000FFF791FE8DF80D009DF81C008DF80E000F +:103660008DF816508DF81850E07D08A900F00F0075 +:103670008DF81A0068460DF0E9FF05F04BFD70E784 +:10368000F0B58FB000258DF830508DF814508DF8BE +:10369000345006468DF828500195029503950495FF +:1036A00019B10FC901AC84E80F00744CA07805284B +:1036B00001D004280CD101986168884200D120B95A +:1036C0000398E168884203D110B108200FB0F0BD23 +:1036D000207DC00601D51F2700E0FF273B460DAA2D +:1036E00005A903A8FFF7ABFD0028EFD1A08AC10709 +:1036F00002D0C00600D4EE273B460AAA0CA901A8B6 +:10370000FFF79DFD0028E1D19DF81400C00701D00E +:103710000A20DBE7A08A410708D4A17D31B19DF8DA +:103720002810890702D043F20120CFE79DF8281026 +:10373000C90709D0400707D4208818B144F2506166 +:10374000884201D90720C1E78DF818508DF819601B +:10375000BDF80800ADF81A000198079006A80DF012 +:103760008FFF05F0D7FC0028B0D18DF820508DF8E0 +:103770002160BDF81000ADF822000398099008A858 +:103780000DF09DFF05F0C6FC00289FD101AD241D62 +:1037900095E80F0084E80F00002097E770B586B029 +:1037A0000D46040005D0FDF7DBFD20B1102006B06A +:1037B00070BD0820FBE72078C107A98802D0FF2947 +:1037C00002D303E01F2901D20920F0E7800763D468 +:1037D000FFF75AFC38B12178C1F3C100012804D0A9 +:1037E000032802D005E01320E1E7244890F82400E4 +:1037F000C8B1C8074FF001064FF0000502D08DF8A0 +:103800000F6001E08DF80F50FFF7B5FD8DF8000057 +:1038100020786946C0F3C1008DF8010060788DF80A +:103820000250C20801D00720C1E730B3C20701D05F +:103830008DF80260820705D59DF8022042F0020251 +:103840008DF80220400705D59DF8020040F00400E5 +:103850008DF80200002022780B18C2F38002DA7083 +:1038600001EB40026388D380401CA388C0B253811F +:103870000228F0D3207A78B905E001E0E8010020C1 +:103880008DF80260E6E7607A30B9A07A20B9E07A74 +:1038900010B9207BC00601D0062088E704F108009B +:1038A00001F00BFB8DF80E0068460DF09FFA05F055 +:1038B00031FC002889D18DF810608DF81150E08816 +:1038C000ADF81200ADF8145004A80DF0E2FA05F0BE +:1038D00021FC002888D12078C00701D0152000E005 +:1038E0001320FFF7BBFB002061E72DE9FF47022013 +:1038F000FB4E8DF804000027708EADF80600B84628 +:1039000043F202094CE001A80EF0A5FF050006D025 +:10391000708EA8B3A6F83280ADF806803EE0039C16 +:10392000A07F01072DD504F124000090A28EBDF8E0 +:103930000800214604F1360301F057FC050005D0CC +:103940004D452AD0112D3CD0FFDF3AE0A07F20F07A +:103950000801E07F420862F3C711A177810861F393 +:103960000000E07794F8210000F01F0084F82000A8 +:103970002078282826D129212046FFF7CBFB21E0FB +:1039800014E040070AD5BDF8080004F10E0101F06B +:10399000AAFA05000DD04D4510D100257F1CFFB2BD +:1039A00002200EF099FF401CB842ACD8052D11D072 +:1039B00008E0A07F20F00400A07703E0112D00D0E4 +:1039C000FFDF0025BDF806007086052D04D02846CF +:1039D00004B0C7E5A6F832800020F9E770B50646C6 +:1039E000FFF731FD054605F073FD040000D1FFDF50 +:1039F0006680207820F00F00801C20F0F00020303E +:103A000020700320207295F83E006072BDE870407F +:103A100005F061BD2DE9F04786B0040000D1FFDF5D +:103A20002078AF4D20F00F00801C20F0F0007030A7 +:103A3000207060680178491F1B2933D2DFE801F04C +:103A4000FE32323255FD320EFDFD42FC323232780A +:103A5000FCFCFBFA3232FCFCF9F8FC00C68830466C +:103A6000FFF7F1FC0546304607F02CF9E0B160683D +:103A7000007A85F83E0021212846FFF74BFB3046AF +:103A8000FEF753FB304603F053FE3146012012F09F +:103A900095FCA87F20F01000A877FFF726FF0028EC +:103AA00000D0FFDF06B05DE5207820F0F000203088 +:103AB00020700320207266806068007A607205F0D2 +:103AC0000AFDD8E7C5882846FFF7BDFC00B9FFDF2F +:103AD00060680079012800D0FFDF6068017A06B0D5 +:103AE0002846BDE8F04707F0CCBCC6883046FFF753 +:103AF000AAFC050000D1FFDF05F0EDFC606831464F +:103B00000089288160684089688160688089A8810F +:103B1000012012F053FC0020A875A87F00F00300DC +:103B20000228BFD1FFF7E1FE0028BBD0FFDFB9E7D5 +:103B300000790228B6D000B1FFDF05F0CCFC666842 +:103B4000B6F806A0307A361D012806D0687E814678 +:103B500005F04CFA070003D101E0E878F7E7FFDF52 +:103B60000022022150460EF006FF040000D1FFDFC4 +:103B700022212046FFF7CEFA3079012800D002201A +:103B8000A17F804668F30101A177308B2081708B83 +:103B90006081B08BA08184F822908DF80880B8688D +:103BA0000090F86801906A46032150460EF0E3FE4B +:103BB00000B9FFDFB888ADF81000B8788DF81200B2 +:103BC00004AA052150460EF0D6FE00B9FFDFB888E2 +:103BD000ADF80C00F8788DF80E0003AA04215046C9 +:103BE0000EF0C9FE00B9FFDF062106F1120001F058 +:103BF00098F940B37079800700D5FFDF7179E07DD7 +:103C000061F34700E075D6F80600A0617089A083D3 +:103C1000062106F10C0001F084F9F0B195F82500B9 +:103C20004108607861F347006070D5F8260006E02F +:103C30003EE036E06DE055E04AE02CE040E0C4F8BC +:103C40000200688D12E0E07D20F0FE00801CE0752F +:103C5000D6F81200A061F08AD9E7607820F0FE0063 +:103C6000801C6070F068C4F80200308AE080B8F10F +:103C7000010F04D0B8F1020F05D0FFDF12E70320D7 +:103C8000FFF7D4F90EE7287E122800D0FFDF1120BD +:103C9000FFF7E4F906E706B02046BDE8F04701F07B +:103CA0002DBD05F018FC15F8300F40F0020005E0BE +:103CB00005F011FC15F8300F40F004002870F1E613 +:103CC000287E132809D01528D8D11620FFF7C6F969 +:103CD00006B0BDE8F04705F0FEBB1420F6E7000093 +:103CE000E8010020A978052909D00429C6D105F0EA +:103CF000F2FB022006B0BDE8F047FFF797B9007964 +:103D00000028BBD0E87801F0BFF805F0E4FB032001 +:103D1000F0E7287E122802D1687E01F0B5F8112064 +:103D2000D4E72DE9F047054600784FF00008000978 +:103D3000DFF8C0A891460C464646012875D00228F7 +:103D400074D007280AD00A2871D0FFDFA9F80060D4 +:103D500014B1A4F800806680002003E4696801279C +:103D600004F108000A784FF0020C4FF6FF73172A8F +:103D70007ED00EDC142A32D006DC052A68D0092A4F +:103D800010D0102A75D120E0152A73D0162AF9D147 +:103D9000F8E0183A082A6CD2DFE802F0F36B6B0AFD +:103DA000CAF2DFF1C8884FF01208102621468DE1D3 +:103DB0004FF01C080A26BCB38888A0806868807908 +:103DC00020726868C0796072C0E74FF01B08142643 +:103DD00054B30320207268688088A080B6E70A790F +:103DE0003C2AB3D00D1D4FF010082C26E4B1698891 +:103DF000A180298B6182298B2182698BA182A98B69 +:103E0000E1826B790246A91D1846FFF7ECFA297981 +:103E1000002001290CD084F80FC0FF212176E06139 +:103E200020626062A06291E70FE02EE151E18CE137 +:103E3000E77320760AF1040090E80E00DAF810002B +:103E4000C4E90930C4E9071280E7A9F8006083E7F4 +:103E50002C264FF01D08002CF7D00546A380887B48 +:103E60002A880F1D60F300022A80887B400802E048 +:103E70009DE007E1BEE060F341022A80887B800874 +:103E800060F382022A80887BB91CC00860F3C302F9 +:103E90002A80B87A0011401C60F3041202F07F00FF +:103EA00028807878AA1CFFF79EFA387D05F1090270 +:103EB00007F11501FFF797FA387B01F041F82874F4 +:103EC000787B01F03DF86874F87EA874787AE8741D +:103ED000387F2875B87B6875388AE882DAF81C0064 +:103EE000A861B87A524697F808A0C0F34111012999 +:103EF00004D0108C504503D2824609E0FFDF10E069 +:103F0000022903D0288820F0600009E0504504D140 +:103F1000288820F06000403002E0288840F06000EF +:103F20002880A4F824A0524607F11D01A86996E054 +:103F300011264FF02008002C87D0A380686804F178 +:103F40000A02007920726868007B607269688B1DC4 +:103F500048791946FFF747FAF8E60A264FF0210894 +:103F6000002CE9D08888A080686880792072686811 +:103F7000C07960729AF8301021F004019FE065E08A +:103F80004CE06FE00B264FF02208002CD4D0C888FC +:103F9000A0806868007920726868007A00F0D0FF1D +:103FA00060726868407A00F0CBFFA072CEE61C26F3 +:103FB0004FF02608002CBFD0A3806868407960725B +:103FC0006868007AA0720AF1040090E80E00DAF83E +:103FD0001000C4E90530C4E90312686800793C2880 +:103FE00003D0432803D0FFDFB0E62772AEE684F8A3 +:103FF00008C0ABE610264FF02408002C9CD088881F +:10400000A0806868807920816868807A60816868AB +:104010000089A08168688089E08197E610264FF0CA +:104020002308002C88D08888A0806868C0882081F8 +:1040300068680089608168684089A08168688089B3 +:10404000E0819AF8301021F0020138E030264FF07C +:104050002508002C85D0A38069682822496821F0B2 +:10406000D9FA73E614264FF01B08002C8ED0A380DB +:10407000686800790128BAD02772DAE90710C4E924 +:10408000031063E64A46214660E0287A012803D0FF +:10409000022817D0FFDF59E610264FF01F08002C2A +:1040A00089D06888A080A8892081E8896081288AD1 +:1040B000A081688AE0819AF8301021F001018AF825 +:1040C000301043E64FF012081026688800F016FF03 +:1040D0003CE6287AC8B3012838D0022836D0032815 +:1040E00001D0FFDF32E609264FF01108002C85D001 +:1040F0006F883846FFF7A7F990F822A0A780687A62 +:104100002072042138460EF051FC052138460EF08D +:104110004DFC002138460EF049FC012138460EF0D6 +:1041200045FC032138460EF041FC022138460EF0D2 +:104130003DFC062138460EF039FC072138460EF0CA +:1041400035FC504600F0A0FE00E6FFE72846BDE83B +:10415000F04701F05DBC70B5012803D0052800D000 +:10416000FFDF70BD8DB22846FFF76DF9040000D166 +:10417000FFDF20782128F4D005F0AAF980B101787A +:1041800021F00F01891C21F0F00110310170022192 +:10419000017245800020A075BDE8704005F09BB914 +:1041A00021462846BDE870401322FFF74FB92DE99C +:1041B000F04116460C00804600D1FFDF307820F039 +:1041C0000F00801C20F0F0001030307020780128A3 +:1041D00004D0022818D0FFDFBDE8F0814046FFF789 +:1041E00032F9050000D1FFDF0320A87505F073F94F +:1041F00094E80F00083686E80F00FE4810F8301FDC +:1042000041F001010170E7E74046FFF71CF90500A6 +:1042100000D1FFDFA1884FF6FF700027814202D155 +:10422000E288824203D0814201D1E08840B105F0AA +:1042300052F994E80F00083686E80F00AF75CBE717 +:10424000A87D0128C8D178230022414612F00CF83D +:104250000220A875C0E738B505460C460846FDF7AC +:1042600032F818BB203D062D4AD2DFE805F0031BCB +:10427000373C42300021052012F076F808B11120B9 +:1042800038BDA01C0DF0FAF804F044FF050038D149 +:10429000002208231146052011F0E6FF052830D042 +:1042A000FFDF2EE06068FDF752F808B1102038BD3E +:1042B000618820886A460DF099FB04F02BFF050009 +:1042C0001FD16068E8B1BDF80010018019E0A07846 +:1042D00000F0010120880DF0BAFB0EE0206801F02B +:1042E00043FE05460DE0207800F001000CF0DBF9FC +:1042F00003E0618820880DF0F4FA04F00BFFF0E78A +:104300000725284638BD70B505460C460846FDF71A +:1043100000F808B1102070BD202D07D0212D0DD040 +:10432000222D0BD0252D09D0072070BD2088A11C7F +:104330000CF08EFABDE8704004F0ECBE062070BDB3 +:10434000AC482530704708B53421AA4821F003FA5B +:104350000120FEF76BFE1120FEF780FEA54968469E +:10436000263105F04BF8A3489DF8002010F8251FD2 +:1043700062F3470121F001010170002141724FF405 +:104380006171A0F8071002218172FEF7B1FE00B141 +:10439000FFDFFDF75DF801F07CF908BD10B50C46B4 +:1043A0004021204621F0B5F9A07F20F00300A0773E +:1043B000202020700020A07584F8230010BD7047D5 +:1043C0002DE9FC410746FCF77EFF10B11020BDE847 +:1043D000FC81884E06F12501D6F825000090B6F83C +:1043E0002950ADF8045096F82B408DF80640384619 +:1043F000FEF7E2FF0028EAD1FEF77AFE0028E6D0B9 +:10440000009946F8251FB580B471E0E710B5044661 +:10441000FCF77FFF08B1102010BD76487549224691 +:1044200090F8250026314008FEF7DDFF002010BD82 +:104430003EB504460D460846FCF76BFF08B1102058 +:104440003EBD14B143F204003EBD6A4880780528A1 +:1044500003D0042801D008203EBD694602A80AF016 +:104460009CFA2A4669469DF80800FEF7BCFF00202A +:104470003EBDFEB50D4604004FF0000711D00822E6 +:10448000FEF7C2FE002811D1002608E054F82600ED +:104490006946FEF747FF002808D1761CF6B2AE4207 +:1044A000F4D30CF047F810B143F20320FEBD514E97 +:1044B00086F824700CB300271BE000BF54F82700D7 +:1044C00002A9FEF72FFF00B1FFDF9DF808008DF86D +:1044D000000054F8270050F8011FCDF80110808823 +:1044E000ADF8050068460CF04AF800B1FFDF7F1C0C +:1044F000FFB2AF42E2D386F824500020FEBD2DE982 +:10450000F0478AB01546894604001ED00F4608229F +:104510002946FEF779FE002811D1002613E000BFDE +:1045200054F826006946103000F0D3FC002806D16C +:104530003FB157F82600FCF7C6FE10B110200AB0B4 +:104540000BE4761CF6B2AE42EAD30026A5F10108D0 +:104550001CE000BF06F1010A0AF0FF0712E000BFED +:1045600054F82600017C4A0854F827100B7CB2EB63 +:10457000530F05D106221130113121F01FF858B127 +:104580007F1CFFB2AF42EBD30AF0FF064645E1DBEA +:104590004E4624B1012003E043F20520CFE700207E +:1045A0000CF012F810B90CF01BF810B143F2042013 +:1045B000C5E774B300270DF1170828E054F8270069 +:1045C0006946103000F085FC00B1FFDF54F8270089 +:1045D000102250F8111FCDF801108088ADF80500A9 +:1045E00054F827100DF1070021F014F8AEB156F879 +:1045F000271001E0E80100201022404621F00AF8CF +:1046000068460BF0A1FF00B1FFDF7F1CFFB2AF4295 +:10461000D4D3FEF733FF002091E7404601F098FC29 +:10462000EEE730B585B00446FCF74DFE18B960687A +:10463000FCF796FE10B1102005B030BD60884AF23C +:10464000B811884206D82078F84D28B1012806D044 +:10465000022804D00720EFE7FEF74AFD18E0607853 +:10466000022804D0032802D043F20220E4E785F8B0 +:104670002F00C1B200200090ADF8040002292CD018 +:10468000032927D0FFDF68460CF043F804F042FD11 +:104690000028D1D1606801F04EFC207858B101208B +:1046A0008DF800000DF1010001F052FC68460DF09C +:1046B00032FA00B1FFDF207885F82E00FEF7DEFE2B +:1046C000608860B1A88580B20BF076FF00B1FFDF93 +:1046D0000020B1E78DF80500D5E74020FAE74FF458 +:1046E0006170EFE710B50446FCF713FE20B960686F +:1046F00038B1FCF72CFE08B1102010BD606801F045 +:1047000027FCCA4830F82C1F6180C178617080781E +:104710002070002010BD2DE9F84314468946064656 +:10472000FCF7F7FDA0B94846FCF71AFE80B9204611 +:10473000FCF716FE60B9BD4DA878012800D13CB148 +:104740003178FF2906D049B143F20400BDE8F8836F +:104750001020FBE7012801D00420F7E7CCB305289F +:1047600011D004280FD069462046FEF7A0FE00288D +:10477000ECD1217D49B1012909D0022909D00329B1 +:1047800009D00720E2E70820E0E7024604E0012222 +:1047900002E0022200E00322804623461746002062 +:1047A0000099FEF7BEFE0028D0D1A0892880A07B0A +:1047B000E875BDF80000A882AF75BDF800100907C4 +:1047C00001D5A18931B1A1892980C00704D0032076 +:1047D00003E006E08021F7E70220FEF727FC86F8D9 +:1047E00000804946BDE8F8430020FEF749BF7CB58C +:1047F0008E4C05460E46A078022803D0032801D02F +:1048000008207CBD15B143F204007CBD07200EF0EA +:104810006BF810B9A078032806D0FEF735FC28B154 +:10482000A078032804D009E012207CBD13207CBDB1 +:10483000304600F00CFB0028F9D1E670FEF79BFD36 +:1048400009F0E8FF01208DF800008DF801008DF8D7 +:1048500002502088ADF80400E07D8DF8060068461F +:104860000DF002F804F056FC0028E0D1A0780328EF +:1048700004D00420FEF7DAFB00207CBDE07800F0D5 +:10488000F6FA0520F6E71CB510B143F204001CBD92 +:10489000664CA078042803D0052801D008201CBD50 +:1048A00000208DF8000001218DF801108DF8020024 +:1048B00068460CF0D9FF04F02DFC0028EFD1A07859 +:1048C000052805D05FF00200FEF7B0FB00201CBDFC +:1048D000E07800F0D9FA0320F6E72DE9FC418046A4 +:1048E0000E4603250846FCF73BFD002866D14046EE +:1048F000FEF7A9FD040004D02078222804D2082065 +:1049000065E543F2020062E5A07F00F003073EB1D7 +:10491000012F0CD000203146FEF751FC0500EFD1ED +:10492000012F06D0022F1AD0FFDF28464FE50120C5 +:10493000F1E7A07D3146022801D011B107E0112036 +:1049400045E56846FCF791FE0028D9D16946404606 +:1049500006F05AFD0500E8D10120A075E5E7A07D2D +:10496000032804D1314890F83000C00701D02EB39D +:104970000EE026B1A07F40071ED4002100E00121F7 +:10498000404606F061FD0500CFD1A075002ECCD0C9 +:104990003146404600F0A7FA05461128C5D1A07F50 +:1049A0004107C2D4316844F80E1F7168616040F05D +:1049B000040020740025B8E71125B6E7102006E5AD +:1049C00070B50C460546FEF73EFD010005D02246B7 +:1049D0002846BDE87040FEF739BD43F2020070BDC5 +:1049E00010B5012807D1114B9B78012B00D011B1D4 +:1049F00043F2040010BD0BF011FEBDE8104004F0BE +:104A000089BB012300F04ABA00231A46194600F078 +:104A100045BA70B506460C460846FCF754FC18B972 +:104A20002068FCF776FC18B1102070BDE80100206A +:104A3000F94D2A7E112A04D0132A00D33EB1082052 +:104A4000F3E721463046FEF7A9FE60B1EDE7092005 +:104A5000132A0DD0142A0BD0A188FF29E5D31520E5 +:104A6000FEF7FCFA0020D4E90012C5E90712DCE7E2 +:104A7000A1881F29D9D31320F2E71CB5E648007E90 +:104A8000132801D208201CBD00208DF800006846C4 +:104A90000CF0FFF904F03EFB0028F4D11120FEF7E2 +:104AA000DDFA00201CBD2DE9F04FDFF86CA3814634 +:104AB00091B09AF818009B4615460C46132803D36C +:104AC000FFF7DBFF00281FD12046FCF7FCFBE8BB0B +:104AD0002846FCF7F8FBC8BB20784FF00107C00759 +:104AE0004FF0000102D08DF83A7001E08DF83A10D5 +:104AF00020788846C0F3C1008DF8000060788DF8FA +:104B00000910C10803D0072011B0BDE8F08F70B3C1 +:104B1000C10701D08DF80970810705D59DF80910EE +:104B200041F002018DF80910400705D59DF80900F4 +:104B300040F004008DF8090000206E4606EB4001AD +:104B400062884A81A2880A82401C00E00DE0C0B25F +:104B50000328F3D32078C0F3C100012825D003280F +:104B600023D04846FCF7AFFB28B11020CCE7FFE785 +:104B70008DF80970E0E799F80000400808D0012896 +:104B800009D0022807D0032805D043F20220BBE752 +:104B90008DF8028001E08DF80270484650F8011F40 +:104BA000CDF803108088ADF80700FEF7E4FB8DF820 +:104BB00001000020424606EB40012B88CB826B8827 +:104BC0008B83AB884B84EB880B85401CCA85C0B2B5 +:104BD0008A860328EFD3E088ADF83C0068460CF0E5 +:104BE00094FA00288FD19AF818005546112801D060 +:104BF000082089E706200DF077FE38B12078C0F351 +:104C0000C100012804D0032802D006E012207BE76F +:104C100095F8240000283FF476AFFEF735FA022815 +:104C200001D2132070E7584600F011F900289DD1F9 +:104C300085F819B068460CF0A8FB04F06BFA040084 +:104C400094D1687E00F013F91220FEF707FA20468F +:104C50005AE770B5704D287E122801D00820E4E68E +:104C60000CF096FB04F056FA040005D1687E00F0C3 +:104C70000BF91120FEF7F2F92046D6E670B506468C +:104C800015460C460846FCF744FB18B92846FCF7C5 +:104C900040FB08B11020C8E62A46214630460CF0F9 +:104CA00085FE04F037FA0028F5D121787F29F2D16A +:104CB0000520BAE67CB505460C460846FCF703FB22 +:104CC00008B110207CBD2846FEF7BDFB20B100785E +:104CD000222804D208207CBD43F202007CBD4E484D +:104CE00090F83000400701D511207CBD2078C00825 +:104CF00002D16078C00801D007207CBDADF800501B +:104D000020788DF8020060788DF803000220ADF85D +:104D1000040068460BF09EFF04F0FCF97CBD70B502 +:104D200086B014460D460646FEF78DFB28B1007886 +:104D3000222805D2082006B077E643F20200FAE7FF +:104D40002846FCF70DFB20B944B12046FCF7FFFADA +:104D500008B11020EFE700202060A0802E4890F8D6 +:104D60003000800701D51120E5E703A930460BF09C +:104D7000C2FD10B104F0CEF9DDE7ADF80060BDF87A +:104D80001400ADF80200BDF81600ADF80400BDF83F +:104D90001000BDF81210ADF80600ADF808107DB196 +:104DA000298809B1ADF80610698809B1ADF802107B +:104DB000A98809B1ADF80810E98809B1ADF8041067 +:104DC000DCB1BDF80610814201D9081A2080BDF877 +:104DD0000210BDF81400814201D9081A6080BDF8A4 +:104DE0000800BDF80410BDF816200144BDF81200FB +:104DF0001044814201D9081AA08068460BF02CFEAD +:104E0000B8E71CB505490968CDE9001068460CF003 +:104E10007EF904F07FF91CBDE8010020FC5A020075 +:104E20001CB500200090019068460CF070F904F069 +:104E300071F9F0E710800888508048889080C88811 +:104E400010818888D080002050819081704710B5F3 +:104E5000044604F0CBF830B1407830B1204604F07D +:104E6000DEFB002010BD052010BD122010BD10B5C6 +:104E700004F0BCF8040000D1FFDF607800B9FFDF68 +:104E80006078401E607010BD10B504F0AFF80400EB +:104E900000D1FFDF6078401C607010BD1CB5ADF81C +:104EA00000008DF802308DF803108DF8042068465C +:104EB0000CF03FFD04F02EF9ADE70CB528A2D2E9C5 +:104EC0000012CDE900120079694601EB501000781C +:104ED0000CBD0278520804D0012A02D043F202200D +:104EE0007047FEF71FBA1FB56A46FFF7A3FF684673 +:104EF0000CF081FA04F00EF904B010BD70B50C008E +:104F000006460DD0FEF79FFA050000D1FFDFA68010 +:104F100028892081288960816889A081A889E08109 +:104F200083E510B500231A4603E0845C2343521C3A +:104F3000D2B28A42F9D30BB1002010BD012010BDBE +:104F400000B540B1012805D0022803D0032804D0C1 +:104F5000FFDF002000BDFF2000BD042000BD0000D9 +:104F6000070605040302010010B50446FCF7ABF97F +:104F700008B1102010BD2078C0F30210042807D813 +:104F80006078072804D3A178102901D8814201D282 +:104F9000072010BDE078410706D421794A0703D4E1 +:104FA000000701D4080701D5062010BD002010BD60 +:104FB00010B513785C08837F64F3C7138377137885 +:104FC0009C08C37F64F30003C3771078C309487853 +:104FD00063F34100487013781C090B7864F347139E +:104FE0000B701378DB0863F3000048705078487149 +:104FF00010BD10B5C4780B7864F300030B70C4784F +:10500000640864F341030B70C478A40864F382035A +:105010000B70C478E40864F3C3030B700379117850 +:1050200063F30001117003795B0863F341011170B0 +:1050300003799B0863F3820111700079C00860F363 +:10504000C301117010BD70B514460D46064604F03C +:105050003FFA80B10178182221F00F01891C21F05C +:10506000F001A03100F8081B214620F018FBBDE834 +:10507000704004F030BA29463046BDE87040132233 +:10508000FEF7E4B92DE9F047064608A8894690E8FE +:1050900030041F4690461421284620F05CFB002176 +:1050A000CAF80010B8F1000F03D0B9F1000F03D116 +:1050B00014E03878C00711D02068FCF72AF9C0BB8B +:1050C000B8F1000F07D12068123028602068143032 +:1050D00068602068A8602168CAF8001038788007E6 +:1050E00024D56068FCF733F918BBB9F1000F21D063 +:1050F000FFF726F90168C6F868118188A6F86C11D7 +:10510000807986F86E0101F0F8FCF94FEF60626873 +:1051100062B196F8680106F2691140081032FEF794 +:1051200062F910223946606820F074FA0020BDE868 +:10513000F08706E0606820B1E8606068C6F8640146 +:10514000F4E71020F3E730B5054608780C4620F068 +:105150000F00401C20F0F001103121700020607021 +:1051600095F8230030B104280FD0052811D0062867 +:1051700014D0FFDF20780121B1EB101F04D295F885 +:10518000200000F01F00607030BD21F0F0002030E2 +:1051900002E021F0F00030302070EBE721F0F00069 +:1051A0004030F9E7F0B591B0022715460C460646A7 +:1051B0003A46ADF80870092103AB04F0FAFF0490F9 +:1051C000002810D004208DF804008DF80170E03420 +:1051D000099605948DF818500AA968460FF0C4F88E +:1051E00000B1FFDF012011B0F0BD10B588B00C4652 +:1051F0000A99ADF80000C3B11868CDF802005868EC +:10520000CDF80600ADF80A20102203A820F002FA1B +:1052100068460CF060F903F07DFF002803D1A17F00 +:1052200041F01001A17708B010BD0020CDF80200B8 +:10523000E6E72DE9F84F0646808A0D4680B28246A1 +:10524000FEF701F904463078DFF8A48200274FF01A +:105250000209A8F120080F2870D2DFE800F06FF2F1 +:105260003708387D8CC8F1F0EFF35FF3F300A07FCF +:1052700000F00300022809D05FF0000080F0010177 +:1052800050460DF081FB050003D101E00120F5E758 +:10529000FFDF98F85C10C90702D0D8F860000BE077 +:1052A000032105F11D0010F0AAFDD5F81D0091495C +:1052B000B0FBF1F201FB1200C5F81D0070686867D1 +:1052C000B068A8672078252800D0FFDFCAE0A07F5B +:1052D00000F00300022809D05FF0000080F0010117 +:1052E00050460DF051FB060003D101E00120F5E727 +:1052F000FFDF3078810702D52178252904D040F0DE +:1053000001003070BDE8F88F85F80090307F28717B +:1053100006F11D002D36C5E90206F3E7A07F00F077 +:105320000300022808D0002080F0010150460DF053 +:105330002BFB040004D102E00120F5E7A7E1FFDF29 +:105340002078C10604D5072028703D346C60D9E769 +:1053500040F008002070D5E7E07F000700D5FFDFB0 +:10536000307CB28800F0010301B05046BDE8F04F38 +:10537000092105F0A9BD04B9FFDF716821B1102230 +:1053800004F1240020F046F928212046FDF7C2FE52 +:10539000A07F00F0030002280ED104F124000023B6 +:1053A00000901A4621465046FFF71FFF112807D0EC +:1053B00029212046FDF7AEFE307A84F82000A1E7CF +:1053C000A07F000700D5FFDF14F81E0F40F0080093 +:1053D0002070E782A761E761C109607861F341004D +:1053E000014660F382016170307AE0708AE7A07F45 +:1053F00000F00300022809D05FF0000080F00101F6 +:1054000050460DF0C1FA040003D101E00120F5E798 +:10541000FFDF022104F1850010F0F1FC0420287068 +:1054200004F5B4706860B4F88500288230481038FC +:105430007C346C61C5E9028064E703E024E15BE051 +:105440002DE015E0A07F00F00300022807D0002027 +:1054500080F0010150460DF097FA18B901E00120E3 +:10546000F6E7FFDF324621465046BDE8F84FEAE551 +:1054700004B9FFDF20782128A1D93079012803D190 +:10548000E07F40F00800E077324621465046FFF7C3 +:10549000DAFD2046BDE8F84F2321FDF73BBE327907 +:1054A000AA8005F108030921504604F082FEE86055 +:1054B00010B10520287025E7A07F00F00300022826 +:1054C00008D0002080F0010150460DF05DFA040084 +:1054D00003D101E00120F5E7FFDF04F162010223BF +:1054E0001022081F0DF0D7F807703179417009E7D5 +:1054F0004802002040420F00A07F00F00300022875 +:1055000008D0002080F0010150460DF03DFA050062 +:1055100003D101E00120F5E7FFDF95F8840000F0FA +:10552000030001287AD1A07F00F00307E07F10F08C +:10553000010602D0022F04D133E095F8A000C00785 +:105540002BD0D5F8601121B395F88320087C62F345 +:1055500087000874A17FCA09D5F8601162F3410081 +:105560000874D5F8601166F300000874AEB1D5F880 +:105570006001102204F12401883520F04BF8287EC8 +:1055800040F001002876287820F0010005F888090D +:1055900000E016B1022F04D02DE095F88800C00776 +:1055A00027D0D5F85C1121B395F88320087C62F3ED +:1055B00087000874A17FCA09D5F85C1162F3410025 +:1055C0000874D5F85C1166F3000008748EB1D5F844 +:1055D0005C01102204F12401883520F01BF82878A2 +:1055E00040F0010005F8180B287820F0010005F8BC +:1055F000A009022F44D0002000EB400005EBC000C2 +:1056000090F88800800709D595F87C00D5F86421CA +:10561000400805F17D011032FDF7E5FE8DF80090A0 +:1056200095F884006A4600F003008DF8010095F8B3 +:1056300088108DF8021095F8A0008DF8030021461F +:10564000504601F043FA2078252805D0212807D0BC +:10565000FFDF2078222803D922212046FDF75AFDBA +:10566000A07F00F0030002280CD0002080F0010190 +:1056700050460DF09BF900283FF44FAEFFDF41E6A6 +:105680000120B9E70120F1E7706847703AE6FFDFD3 +:1056900038E670B5FE4C002584F85C5025660EF0A7 +:1056A00030FE04F11001204603F0CEFE84F83050A5 +:1056B00070BD70B50D46FDF7C6FE040000D1FFDFDA +:1056C0004FF4B871284620F046F804F12400286110 +:1056D000A07F00F00300022808D0012105F1E000BE +:1056E0000EF010FE002800D0FFDF70BD0221F5E7AC +:1056F0000A46014602F1E0000EF024BE70B50546F0 +:10570000406886B001780A2906D00D2933D00E29C9 +:105710002FD0FFDF06B070BD86883046FDF793FEC0 +:10572000040000D1FFDF20782128F3D028281BD1E6 +:10573000686802210E3001F0BEF9A8B1686808213E +:10574000801D01F0B8F978B104F1240130460CF065 +:105750008DF803F0DFFC00B1FFDF06B02046BDE8A6 +:1057600070402921FDF7D6BC06B0BDE8704003F0BB +:10577000B2BE012101726868C6883046FDF763FE3B +:10578000040000D1FFDFA07F00F00301022902D155 +:1057900020F01000A077207821280AD06868017ACC +:1057A00009B1007980B1A07F00F00300022862D027 +:1057B000FFDFA07F00F003000228ABD1FEF795F8D1 +:1057C0000028A7D0FFDFA5E703F085FEA17F08062C +:1057D0002BD5E07FC00705D094F8200000F01F0013 +:1057E000102820D05FF0050084F8230020782928B5 +:1057F0001DD02428DDD13146042010F0DFFD222108 +:105800002046FDF787FCA07F00F00300022830D07F +:105810005FF0000080F0010130460DF0C7F800286D +:10582000C7D0FFDFC5E70620DEE70420DCE701F094 +:105830000300022808D0002080F0010130460DF05E +:10584000A3F8050003D101E00120F5E7FFDF2521E2 +:105850002046FDF75FFC03208DF80000694605F146 +:10586000E0000EF066FD0228A3D00028A1D0FFDFE3 +:105870009FE70120CEE703F02EFE9AE72DE9F043E3 +:1058800087B09946164688460746FDF7DCFD0400BA +:105890004BD02078222848D3232846D0E07F000729 +:1058A00043D4A07F00F00300022809D05FF000007D +:1058B00080F0010138460DF067F8050002D00CE0D9 +:1058C0000120F5E7A07F00F00300022805D00121A8 +:1058D000002238460DF04FF805466946284601F08B +:1058E0001CF9009800B9FFDF45B10098E03505616B +:1058F0002078222806D0242804D007E00099002030 +:10590000086103E025212046FDF704FC00980121F1 +:1059100041704762868001A9C0E902890EF024FD2A +:10592000022802D0002800D0FFDF07B0BDE8F083D6 +:1059300070B586B00546FDF786FD017822291ED98F +:10594000807F00F00300022808D0002080F00101D1 +:1059500028460DF019F804002FD101E00120F5E7E9 +:10596000FFDF2AE0B4F85E0004F1620630440178FB +:10597000427829B121462846FFF714FCB0B9C9E6A0 +:10598000ADF804200921284602AB04F012FC039074 +:105990000028F4D005208DF80000694604F1E000ED +:1059A0000EF0C7FC022801D000B1FFDF0223102255 +:1059B000314604F15E000CF0A4FEB4F8600000284B +:1059C000D0D1A7E610B586B00446FDF73CFD0178BE +:1059D00022291BD9807F00F00300022808D0002074 +:1059E00080F0010120460CF0CFFF040003D101E05C +:1059F0000120F5E7FFDF06208DF80000694604F17D +:105A0000E0000EF096FC002800D0FFDF06B010BDCD +:105A10002DE9F05F05460C46002700789046010905 +:105A20003E4604F1080BBA4602297DD0072902D070 +:105A30000A2909D146E0686801780A2905D00D29AC +:105A400030D00E292ED0FFDFBBE114271C26002CFE +:105A50006BD08088A080FDF7F6FC5FEA000900D1DA +:105A6000FFDF99F817005A46400809F11801FDF7C1 +:105A7000BAFC6868C0892082696851F8060FC4F8CA +:105A800012004868C4F81600A07E20F0060001E06D +:105A90002802002040F00100A07699F81E0040F096 +:105AA00020014DE01A270A26002CD1D0C088A08002 +:105AB000FDF7C9FC050000D1FFDF59462846FFF776 +:105AC00042FB7EE10CB1A88BA080287A0B287DD008 +:105AD00006DC01287BD0022808D0032804D135E059 +:105AE0000D2875D00E2874D0FFDF6AE11E27092625 +:105AF000002CADD0A088FDF7A6FC5FEA000900D11C +:105B0000FFDF287B00F003000128207A1BD020F063 +:105B100001002072297B890861F341002072297BF2 +:105B2000C90861F3820001E041E1F2E02072297BC3 +:105B3000090961F3C300207299F81E0040F040018A +:105B400089F81E103DE140F00100E2E713270D2621 +:105B5000002CAAD0A088FDF776FC8146807F00F05B +:105B60000300022808D0002080F00101A0880CF07A +:105B70000BFF050003D101E00120F5E7FFDF99F8F5 +:105B80001E0000F00302022A50D0686F817801F0F5 +:105B900003010129217A4BD021F001012172837880 +:105BA0009B0863F3410121728378DB0863F3820170 +:105BB000217283781B0963F3C3012172037863F3B5 +:105BC00006112172437863F3C71103E061E0A9E095 +:105BD00090E0A1E0217284F809A0C178A172022AA4 +:105BE00029D00279E17A62F30001E1720279520868 +:105BF00062F34101E1720279920862F38201E1727B +:105C00000279D20862F3C301E1724279217B62F327 +:105C1000000121734279520862F3410121734279F4 +:105C2000920862F382012173407928E0A86FADE702 +:105C300041F00101B2E74279E17A62F30001E172D9 +:105C40004279520862F34101E1724279920862F3AB +:105C50008201E1724279D20862F3C301E1720279F2 +:105C6000217B62F3000121730279520862F3410142 +:105C700021730279920862F3820121730079C008CE +:105C800060F3C301217399F80000232831D926213C +:105C900040E018271026E4B3A088FDF7D4FB834624 +:105CA000807F00F00300022809D0002080F001016D +:105CB000A0880CF069FE5FEA000903D101E0012031 +:105CC000F4E7FFDFE868A06099F8000040F0040105 +:105CD00089F8001099F80100800708D50120207389 +:105CE0009BF8000023286CD92721584651E084F8FE +:105CF0000CA066E015270F265CB1A088FDF7A3FB7A +:105D0000814606225946E86808F0C1FA0120A073CE +:105D1000A0E041E048463CE016270926E4B3287B92 +:105D200020724EE0287B19270E26ACB3C4F808A0D9 +:105D3000A4F80CA0012807D0022805D0032805D01C +:105D4000042803D0FFDF0DE0207207E0697B042800 +:105D500001F00F0141F0800121721ED0607A20F025 +:105D600003006072A088FDF76EFB054600782128CD +:105D700027D0232800D0FFDFA87F00F003000228EF +:105D800013D0002080F00101A0880CF00FFE22212A +:105D90002846FDF7BFF914E004E0607A20F0030024 +:105DA000401CDEE7A8F8006010E00120EAE70CB133 +:105DB0006888A080287A68B301280AD002284FD0CA +:105DC000FFDFA8F800600CB1278066800020BDE8E6 +:105DD000F09F15270F26002CE4D0A088FDF733FB99 +:105DE000807F00F00300022808D0002080F001012D +:105DF000A0880CF0C9FD050003D101E00120F5E702 +:105E0000FFDFD5F81D000622594608F040FA84F855 +:105E10000EA0D6E717270926002CC3D0A088FDF7CF +:105E200012FB8146807F00F00300022808D000208A +:105E300080F00101A0880CF0A7FD050003D101E06E +:105E40000120F5E7FFDF6878800701D5022000E038 +:105E50000120207299F800002328B2D9272159E7A0 +:105E600019270E26002C9DD0A088FDF7ECFA5FEADA +:105E7000000900D1FFDFC4F808A0A4F80CA084F842 +:105E800008A0A07A40F00300A07299F81E10C9097A +:105E900061F38200A07299F81F2099F81E1012EA8F +:105EA000D11F05D099F8201001F01F0110292BD027 +:105EB00020F00800A07299F81F10607A61F3C30007 +:105EC0006072697A01F003010129A2D140F0040057 +:105ED000607299F81E0000F003000228E87A16D0DC +:105EE000217B60F300012173AA7A607B62F30000DA +:105EF0006073EA7A520862F341012173A97A490872 +:105F000061F3410060735CE740F00800D2E7617B19 +:105F100060F300016173AA7A207B62F300002073B2 +:105F2000EA7A520862F341016173A97A490861F380 +:105F30004100207345E710B5FE4C30B101461022F8 +:105F400004F120001FF066FB012084F8300010BD32 +:105F500010B5044600F0D1FDF64920461022BDE8F8 +:105F6000104020311FF056BB70B5F24D06004FF0C7 +:105F7000000413D0FBF7A7F908B110240CE00621A8 +:105F8000304608F06BF9411C05D028665FF001002F +:105F900085F85C0000E00724204670BD0020F7E78C +:105FA000007810F00F0204D0012A05D0022A0CD18B +:105FB00010E0000909D10AE00009012807D00228F1 +:105FC00005D0032803D0042801D0072070470870AB +:105FD000002070470620704705282AD2DFE800F02D +:105FE00003070F171F00087820F0FF001EE0087855 +:105FF00020F00F00401C20F0F000103016E0087870 +:1060000020F00F00401C20F0F00020300EE0087857 +:1060100020F00F00401C20F0F000303006E008783F +:1060200020F00F00401C20F0F000403008700020ED +:106030007047072070472DE9F041804688B00D4633 +:1060400000270846FBF78CF9A8B94046FDF7FBF995 +:10605000040003D02078222815D104E043F2020086 +:1060600008B0BDE8F08145B9A07F410603D500F036 +:106070000300022801D01020F2E7A07FC10601D45E +:10608000010702D50DB10820EAE7E17F090701D534 +:106090000D20E5E700F00300022805D125B12846D0 +:1060A000FEF762FF0700DBD1A07F00F003000228AB +:1060B00008D0002080F0010140460CF065FC06008D +:1060C00002D00FE00120F5E7A07F00F003000228D6 +:1060D0000ED0002080F00101002240460CF04BFC65 +:1060E000060007D0A07F00F00300022804D009E0DA +:1060F0000120EFE70420B3E725B12A4631462046C8 +:10610000FEF756FF6946304600F007FD009800B9DB +:10611000FFDF0099022006F1E0024870C1F82480F8 +:106120004A6100220A81A27F02F00302022A1CD0E7 +:1061300001200871287800F00102087E62F3010056 +:1061400008762A78520862F3820008762A78920844 +:1061500062F3C30008762A78D20862F30410087646 +:1061600024212046FCF7D6FF33E035B30871301DFB +:1061700088613078400908777078C0F3400048772C +:10618000287800F00102887F62F301008877A27FFF +:10619000D20962F382008877E27F62F3C3008877D6 +:1061A000727862F304108877A878C87701F1210229 +:1061B00028462031FEF71DFF03E00320087105206B +:1061C000087625212046FCF7A5FFA07F20F040009F +:1061D000A07701A900980EF0C7F8022801D000B1FD +:1061E000FFDF38463CE72DE9FF4F534A0D4699B093 +:1061F0009A4607CA0AAB002783E807001998FDF7FB +:1062000022F9060006D03078262806D008201DB0D6 +:10621000BDE8F08F43F20200F9E7B07F00F0030918 +:10622000B9F1020F0AD05DB91B98FEF79DFE002858 +:10623000EDD1B07F00F00300022801D11B9890BB84 +:10624000B07F00F00300022808D0002080F0010198 +:1062500019980CF099FB040003D101E00120F5E747 +:10626000FFDF852D28D007DCF5B1812D1ED0822DD2 +:106270001ED0832D08D11DE0862D1FD0882D1FD064 +:10628000892D1FD08A2D1FD00F2020710F281DD0DF +:1062900003F01EF9E0B101208DF83C00201D1090A4 +:1062A0002079B8B15BE111E00020EEE70120ECE7D6 +:1062B0000220EAE70320E8E70520E6E70620E4E716 +:1062C0000820E2E70920E0E70A20DEE707209EE752 +:1062D00011209CE7B9F1020F03D0A56F03D1A06F85 +:1062E00002E0656FFAE7606F804632D04FF0010040 +:1062F00001904FF002000090214630461B9AFEF7B5 +:1063000057FE1B98007800F00101A87861F30100A6 +:10631000A870B17FC90961F38200A870F17F61F3B1 +:10632000C300A870617861F30410A8702078400958 +:10633000287003E028020020045B02006078C0F3AC +:10634000400068701B988078E870002068712871A0 +:1063500003E00220019001200090A87898F8021034 +:10636000C0F3C000C1F3C00108405FEA000B2DD0AC +:106370005046FAF7A8FF78BBDAF80C00FAF7A3FF4B +:1063800050BBDAF81C00FAF79EFF28BBDAF80C00C5 +:10639000A060DAF81C00E060607898F8012042EA1A +:1063A000500100BF61F34100607098F80210C0B264 +:1063B00000EA111161F3000060700020207700995D +:1063C00006F11700022908D0012107E0607898F84B +:1063D000012002EA5001E5E732E0002104EB8101EF +:1063E00048610199701C022901D0012100E00021BF +:1063F00004EB81014861A87800F00300012857D11F +:1064000098F8020000F00300012851D1B9F1020F01 +:1064100004D02A1D691D1B98FEF7EBFD287998F81A +:10642000041008408DF83400697998F8052011406F +:106430008DF8381008433BD05046FAF744FF08B1B6 +:106440001020E4E60AF110010491B9F1020F17D00F +:106450000846002104F18C03CDE9000304F5AE7277 +:1064600002920DAB5A462046FEF70CFE0028E8D1FA +:10647000B9F1020F08D0504608D14FF0010107E0F2 +:1064800050464FF00101E5E70498F5E74FF00001B1 +:1064900004F1A403CDE9000304F5B072029281F087 +:1064A00001010EAB5A462046FEF7ECFD0028C8D18C +:1064B0006078800734D4A87898F80210C0F3800080 +:1064C000C1F3800108432BD0297898F800000AAA6C +:1064D000B9F1020F06D032F811204300DA4002F081 +:1064E00003070AE032F810204B00DA4012F00307ED +:1064F00005D0012F0BD0022F0BD0032F07D0BBF1FB +:10650000000F0DD0012906D0042904D008E002278D +:10651000F5E70127F3E7012801D0042800D104277B +:10652000B07F40F08000B077F17F6BF30001F1772E +:106530006078800706D50320A071BBF1000F0ED153 +:10654000002028E00220022F18D0012F18D0042F9D +:1065500029D00020A071B07F20F08000B0772521E5 +:106560003046FCF7D7FD0FA904F1E0000DF0E1FE85 +:1065700010B1022800D0FFDF002048E6A071DFE75D +:10658000A0710D2104F120001FF0E5F8207840F003 +:106590000200207001208DF85C0017AA314619987E +:1065A00000F094FADBE70120A071D8E72DE9F04371 +:1065B00087B09046894604460025FCF744FF060054 +:1065C00006D03078272806D0082007B0BDE8F08331 +:1065D00043F20200F9E7B07F00F00300022809D07F +:1065E0005FF0000080F0010120460CF0CDF90400BE +:1065F00003D101E00120F5E7FFDFA7795FEA090099 +:1066000005D0012821D0B9F1020F26D110E0B8F150 +:10661000000F22D1012F05D0022F05D0032F05D066 +:10662000FFDF2DE00C252BE0012529E0022527E0E6 +:106630004046FAF748FEB0B9032F0ED1102241466A +:1066400004F11D001EF0E6FF1AE0012F02D0022F18 +:1066500003D104E0B8F1000F12D00720B5E740469F +:10666000FAF731FE08B11020AFE7102104F11D0048 +:106670001FF04FF80621404607F0F0FDC4F81D005A +:106680002078252140F0020020703046FCF742FDC2 +:106690002078C10713D020F00100207002208DF86F +:1066A000000004F11D0002908DF804506946C330CB +:1066B0000DF03FFE022803D010B1FFDF00E0257788 +:1066C000002082E730B587B00D460446FCF7BBFEDC +:1066D000A0B1807F00F00300022812D05FF000001C +:1066E00080F0010120460CF04FF904000ED028463E +:1066F000FAF7E9FD38B1102007B030BD43F20200CF +:10670000FAE70120ECE72078400701D40820F3E7FE +:10671000294604F13D00202205461EF07BFF20782B +:1067200040F01000207001070FD520F00800207005 +:1067300007208DF80000694604F1E00001950DF096 +:10674000F8FD022801D000B1FFDF0020D4E770B5CA +:106750000D460646FCF777FE18B10178272921D1AE +:1067600002E043F2020070BD807F00F003000228C7 +:1067700008D0002080F0010130460CF005F904003B +:1067800003D101E00120F5E7FFDFA079022809D15C +:106790006078C00706D02A4621463046FEF702FD43 +:1067A00010B10FE0082070BDB4F860000E280BD2C5 +:1067B00004F1620102231022081F0BF06CFF01217B +:1067C00001704570002070BD112070BD70B5064687 +:1067D00014460D460846FAF776FD18B92046FAF732 +:1067E00098FD08B1102070BDA6F57F40FF380ED08F +:1067F0003046FCF728FE38B1417822464B08811C10 +:106800001846FCF7F0FD07E043F2020070BD204699 +:10681000FDF7FCFD0028F9D11021E01D0FF0EFFA83 +:10682000E21D294604F1170000F087F9002070BD31 +:106830002DE9F04104468AB01546884600270846EF +:10684000FAF78EFD18B92846FAF78AFD10B1102024 +:106850000AB006E42046FCF7F6FD060003D03078C7 +:1068600027281AD102E043F20200F1E7B07F00F0DE +:106870000300022808D0002080F0010120460CF01F +:1068800083F8040003D101E00120F5E7FFDF207861 +:10689000400702D56078800701D40820D8E7B07F90 +:1068A00000F00300022803D0A06F03D1A16F02E023 +:1068B000606FFAE7616F407800B19DB1487810B120 +:1068C000B8F1000F0ED0ADB1EA1D06A8E16800F0E6 +:1068D00034F9102206A905F117001EF06FFE18B159 +:1068E000042707E00720B3E71022E91D04F12D007B +:1068F0001EF090FEB8F1000F06D0102208F107013B +:1069000004F11D001EF086FE2078252140F00200D3 +:1069100020703046FCF7FEFB2078C10715D020F030 +:106920000100207002208DF8000004F11D0002908B +:10693000103003908DF804706946B3300DF0F9FC07 +:10694000022803D010B1FFDF00E0277700207FE7A7 +:10695000F8B515460E460746FCF775FD040004D051 +:106960002078222804D00820F8BD43F20200F8BDA8 +:10697000A07F00F00300022802D043F20500F8BD1A +:106980003046FAF7A0FC18B92846FAF79CFC08B183 +:106990001020F8BD00953288B31C21463846FEF71A +:1069A00024FC112815D00028F3D1297C4A08A17FA6 +:1069B00062F3C711A177297CE27F61F30002E277DD +:1069C000297C890884F82010A17F21F04001A1775B +:1069D000F8BDA17F0907FBD4D6F80200C4F8360041 +:1069E000D6F80600C4F83A003088A086102229465E +:1069F00004F124001EF00EFE287C4108E07F61F3C4 +:106A00004100E077297C61F38200E077287C8008F0 +:106A100084F82100A07F40F00800A0770020D3E791 +:106A200070B50D4606460BB1072070BDFCF70BFD97 +:106A3000040007D02078222802D3A07F800604D447 +:106A4000082070BD43F2020070BDADB1294630464A +:106A50000AF00CFF02F05EFB297C4A08A17F62F37A +:106A6000C711A177297CE27F61F30002E277297CDC +:106A7000890884F8201004E030460AF01AFF02F07A +:106A800049FBA17F21F02001A17770BD70B50D46B3 +:106A9000FCF7D9FC040005D02846FAF73AFC20B1EF +:106AA000102070BD43F2020070BD29462046FEF75B +:106AB0004AFB002070BD04E010F8012B0AB1002051 +:106AC0007047491E89B2F7D20120704770B515464C +:106AD000064602F0FDFC040000D1FFDF207820F024 +:106AE0000F00801C20F0F0002030207066802868A5 +:106AF000A060BDE8704002F0EEBC10B5134C94F8F5 +:106B00003000002808D104F12001A1F110000DF09F +:106B100052FC012084F8300010BD10B190F8B9206B +:106B20002AB10A4890F8350018B1002003E0B830C7 +:106B300001E0064834300860704708B50023009330 +:106B400013460A460CF01BF908BD0000280200207D +:106B500018B18178012938D101E0102070470188EF +:106B600042F60112881A914231D018DC42F6010235 +:106B7000A1EB020091422AD00CDC41B3B1F5C05F19 +:106B800025D06FF4C050081821D0A0F57060FF38F0 +:106B90001BD11CE001281AD002280AD117E0B0F559 +:106BA000807F14D008DC012811D002280FD00328E0 +:106BB0000DD0FF2809D10AE0B0F5817F07D0A0F5FC +:106BC0008070033803D0012801D0002070470F20C7 +:106BD00070470A281FD008DC0A2818D2DFE800F026 +:106BE000191B1F1F171F231D1F21102815D008DC7C +:106BF0000B2812D00C2810D00D2816D00F2806D143 +:106C00000DE011280BD084280BD087280FD003204B +:106C100070470020704705207047072070470F20FD +:106C2000704704207047062070470C20704743F2DD +:106C30000200704738B50C46050041D06946FFF7A1 +:106C4000AFF9002819D19DF80010607861F30200B7 +:106C500060706946681CFFF7A3F900280DD19DF804 +:106C60000010607861F3C5006070A978C1F341013C +:106C7000012903D0022905D0072038BD217821F051 +:106C8000200102E0217841F020012170410704D069 +:106C9000A978C90861F386106070607810F0380F29 +:106CA00007D0A978090961F3C710607010F0380F98 +:106CB00002D16078400603D5207840F04000207073 +:106CC000002038BD70B50446002008801546606875 +:106CD000FFF7B0FF002816D12089A189884211D87A +:106CE00060688078C0070AD0B1F5007F0AD840F20A +:106CF0000120B1FBF0F200FB1210288007E0B1F593 +:106D0000FF7F01D90C2070BD01F2012129800020F4 +:106D100070BD10B50478137864F300031370047821 +:106D2000640864F3410313700478A40864F38203D5 +:106D300013700478E40864F3C3031370047824091F +:106D400064F3041313700478640964F34513137037 +:106D50000078800960F38613137031B10878C10799 +:106D600001D1800701D5012000E0002060F3C713A6 +:106D7000137010BD4278530702D002F0070306E0FB +:106D800012F0380F02D0C2F3C20300E001234A78A8 +:106D900063F302024A70407810F0380F02D0C0F35B +:106DA000C20005E0430702D000F0070000E0012028 +:106DB00060F3C5024A7070472DE9F04F95B00D00A1 +:106DC000824612D0122128461EF0A3FC4FF6FF7B0C +:106DD00005AA0121584607F05CF8002426463746EC +:106DE0004FF420586FF4205973E0102015B0BDE81F +:106DF000F08F00BF9DF81E0001280AD1BDF81C10BD +:106E000041450BD011EB09000AD001280CD0022813 +:106E10000CD0042C0ED0052C0FD10DE0012400E085 +:106E20000224BDF81A6008E0032406E00424BDF83B +:106E30001A7002E0052400E00624BDF81A1051453E +:106E400047D12C74BEB34FF0000810AA4FF0070AC8 +:106E5000CDE90282CDE900A80DF13C091023CDF85F +:106E6000109042463146584607F0C6F808BBBDF8B8 +:106E70003C002A46C0B210A90DF013FBC8B9AE8180 +:106E8000CFB1CDE900A80DF1080C0AAE40468CE860 +:106E90004102132300223946584607F0ADF840B9A5 +:106EA000BDF83C00F11CC01EC0B22A1D0DF0F9FA5D +:106EB00010B103209AE70AE0BDF82900E881062C0A +:106EC00005D19DF81E00A872BDF81C002881002085 +:106ED0008CE705A806F0E9FF00288BD0FFF779FEC4 +:106EE00084E72DE9F0471C46DDE90978DDF82090BC +:106EF00015460E00824600D1FFDF0CB1208818B184 +:106F0000D5B11120BDE8F087022D01D0012100E0AC +:106F1000002106F1140005F0ABFEA8F800000246BF +:106F20003B462946504603F044F9C9F8000008B929 +:106F3000A41C3C600020E5E71320E3E7F0B414460E +:106F4000DDE904528DB1002314B1022C09D101E016 +:106F5000012306E00D7CEE0703D025F00105012397 +:106F60000D742146F0BC03F0AFBF1A80F0BC70472F +:106F70002DE9FE4F91461A881C468A468046FAB192 +:106F800002AB494603F015F9050019D04046A61C8E +:106F900027880BF03DFE3246072629463B460096E1 +:106FA0000BF04BFA20882346CDE900504A46514663 +:106FB0004046FFF7C3FF002020800120BDE8FE8F80 +:106FC0000020FBE72DE9F04786B082460EA89046E8 +:106FD00090E8B000894604AA05A903A88DE8070037 +:106FE0001E462A4621465046FFF77BFF039901B112 +:106FF00001213970002818D1F94904F1140204ABB9 +:107000000860039805998DE80700424649465046B6 +:1070100006F0E5F9A8B1092811D2DFE800F005086B +:107020000510100A0C0C0E00002006B06AE71120B3 +:10703000FBE70720F9E70820F7E70D20F5E7032035 +:10704000F3E7BDF810100398CDE9000133462A4656 +:1070500021465046FFF772FFE6E72DE9F04389B07D +:107060000D46DDE9108781461C461646142103A80B +:107070001EF071FB012002218DF810108DF80C001C +:107080008DF81170ADF8146064B1A278D20709D000 +:107090008DF81600E088ADF81A00A088ADF8180049 +:1070A000A068079008A80095CDE90110424603A901 +:1070B00048466B68FFF786FF09B0BDE8F083F0B57E +:1070C0008BB000240646069407940727089405A869 +:1070D0000994019400970294CDE903400D461023D2 +:1070E0002246304606F088FF78B90AA806A901941E +:1070F00000970294CDE90310BDF814300022294610 +:10710000304606F04FFD002801D0FFF762FD0BB0BE +:10711000F0BD06F0EFBB2DE9FC410C468046002691 +:1071200002F0D6F9054620780D287DD2DFE800F080 +:10713000BC0713B325BD49496383AF959B00A8489D +:10714000006820B1417841F010014170ADE0404647 +:1071500002F0EEF9A9E0042140460BF015FC07000F +:1071600000D1FFDF07F11401404605F015FDA5BB76 +:1071700013214046FDF724FC97E0042140460BF024 +:1071800003FC070000D1FFDFE088ADF8000000201D +:10719000B8819DF80000010704D5C00602D5A0887B +:1071A000B88105E09DF8010040067ED5A088F881F1 +:1071B00005B9FFDF22462946404601F0BDFC022604 +:1071C00073E0E188ADF800109DF8011009060FD5B5 +:1071D000072803D006280AD00AE024E0042140460C +:1071E0000BF0D2FB060000D1FFDFA088F081022661 +:1071F000CDB9FFDF17E0042140460BF0C5FB0700C7 +:1072000000D1FFDF07F1140006F0ABFB90F0010F97 +:1072100002D1E079000648D5387C022640F0020011 +:10722000387405B9FFDF00E03EE0224629464046BB +:1072300001F082FC39E0042140460BF0A5FB017C03 +:10724000002D01F00206C1F340016171017C21F0C3 +:1072500002010174E7D1FFDFE5E702260121404684 +:1072600002F098F921E0042140460BF08DFB054621 +:10727000606800902089ADF804000122694640460C +:1072800002F0A9F9287C20F0020028740DE0002DFE +:10729000C9D1FFDFC7E7022600214046FBF714F9FA +:1072A000002DC0D1FFDFBEE7FFDF3046BDE8FC8127 +:1072B0003EB50C0009D001466B4601AA002006F03D +:1072C0001DFF20B1FFF785FC3EBD10203EBD002014 +:1072D0002080A0709DF8050002A900F00700FEF7CD +:1072E0007BFE50B99DF8080020709DF8050002A9AA +:1072F000C0F3C200FEF770FE08B103203EBD9DF84A +:10730000080060709DF80500C109A07861F30410C1 +:10731000A0709DF80510890961F3C300A0709DF865 +:107320000410890601D5022100E0012161F3420029 +:107330009DF8001061F30000A07000203EBD70B504 +:10734000144606460D4651EA040005D075B10846BC +:10735000F9F7FDFF78B901E0072070BD29463046F6 +:1073600006F02DFF10B1BDE8704032E454B1204664 +:10737000F9F7EDFF08B1102070BD21463046BDE899 +:10738000704095E7002070BD2DE9FC5F0C469046EB +:107390000546002701780822007A3E46B2EB111F0D +:1073A0007ED104F10A0100910A31821E4FF0020AD7 +:1073B00004F1080B0191092A73D2DFE802F0ECDF37 +:1073C00005F427277AA9CD00688804210BF0DCFAA0 +:1073D000060000D1FFDFB08920B152270726C2E0A6 +:1073E0008C02002051271026002C7DD06888A080B8 +:1073F0000120A071A88900220099FFF7A0FF0028B2 +:1074000073D1A8892081288AE081D1E0B5F8129053 +:10741000072824D1E87B000621D5512709F1140063 +:1074200086B2002CE1D0A88900220099FFF787FFDF +:1074300000285AD16888A08084F806A0A8892081F5 +:107440000120A073288A2082A4F81290A88A0090B4 +:1074500068884B46A969019A01F04BFBA8E05027C8 +:1074600009F1120086B2002C3ED0A88900225946AC +:10747000FFF765FF002838D16888A080A889E080E0 +:10748000287A072813D002202073288AE081E87B1D +:10749000C0096073A4F81090A88A0090688801E081 +:1074A00083E080E04B4604F11202A969D4E7012091 +:1074B000EAE7B5F81290512709F1140086B2002CC2 +:1074C00066D0688804210BF05FFA83466888A08044 +:1074D000A88900220099FFF732FF00286ED184F8B6 +:1074E00006A0A889208101E052E067E00420A07393 +:1074F000288A2082A4F81290A88A009068884B46B7 +:10750000A969019A01F0F5FAA989ABF80E104FE0CC +:107510006888FBF798FF0746688804210BF034FA67 +:10752000064607B9FFDF06B9FFDF687BC00702D058 +:107530005127142601E0502712264CB36888A080FA +:10754000502F06D084F806A0287B594601F0E1FAB6 +:107550002EE0287BA11DF9E7FE49A88949898142CF +:1075600005D1542706269CB16888A08020E05327C7 +:107570000BE06888A080A889E08019E06888042171 +:107580000BF002FA00B9FFDF55270826002CF0D1D6 +:10759000A8F8006011E056270726002CF8D068886C +:1075A000A080002013E0FFDF02E0012808D0FFDF09 +:1075B000A8F800600CB1278066800020BDE8FC9F21 +:1075C00057270726002CE3D06888A080687AA0712E +:1075D000EEE7401D20F0030009B14143091D01EB16 +:1075E0004000704713B5DB4A00201071009848B185 +:1075F000002468460AF0E5FF002C02D1D64A009923 +:1076000011601CBD01240020F4E770B50D4606464C +:1076100086B014465C2128461EF09DF804B9FFDFB1 +:10762000A0786874A2782188284601F09CFA00208E +:10763000A881E881228805F11401304605F091FA0D +:107640006A460121304606F024FC19E09DF803004B +:10765000000715D5BDF806103046FFF730FD9DF840 +:107660000300BDF8061040F010008DF80300BDF8CF +:107670000300ADF81400FF233046059A06F06AFDBA +:10768000684606F012FC0028E0D006B070BD10B5C8 +:107690000C4601F1140005F09BFA0146627C20467D +:1076A000BDE8104001F094BA30B50446A94891B045 +:1076B0004FF6FF75C18905AA284606F0EAFB30E0BF +:1076C0009DF81E00A0422AD001282AD1BDF81C0036 +:1076D000B0F5205F03D042F60101884221D100209D +:1076E00002AB0AAA0CA9019083E8070007200090CA +:1076F000BDF81A1010230022284606F07DFC38B988 +:10770000BDF828000BAAC0B20CA90CF0CAFE10B13B +:10771000032011B030BD9DF82E00A04201D1002001 +:10772000F7E705A806F0C1FB0028C9D00520F0E75F +:1077300070B5054604210BF027F9040000D1FFDFE6 +:1077400004F114010C46284605F026FA2146284685 +:10775000BDE8704005F027BA70B58AB00C46064601 +:10776000FBF771FE050014D02878222827D30CB12E +:10777000A08890B101208DF80C0003208DF8100036 +:1077800000208DF8110054B1A088ADF818002068D1 +:1077900007E043F202000AB070BD0920FBE7ADF834 +:1077A00018000590042130460BF0EEF8040000D1DB +:1077B000FFDF04F1140005F022FA000701D40820CD +:1077C000E9E701F085FE60B108A802210094CDE947 +:1077D000011095F8232003A930466368FFF7F2FBF8 +:1077E000D9E71120D7E72DE9F04FB2F802A0834680 +:1077F00089B0154689465046FBF725FE0746042109 +:1078000050460BF0C1F80026044605964FF00208DA +:107810000696ADF81C6007B9FFDF04B9FFDF4146EB +:10782000504603F0BCFE50B907AA06A905A88DE88A +:1078300007004246214650466368FFF752FB454821 +:1078400007AB0660DDE9051204F11400CDF80090E5 +:10785000CDE90320CDE9013197F823205946504660 +:107860006B6805F015FA06000AD0022E04D0032E2C +:1078700014D0042E00D0FFDF09B03046BDE8F08FF1 +:10788000BDF81C000028F7D00599CDE9001042464C +:10789000214650466368FFF751FBEDE7687840F0FA +:1078A00008006870E8E72DE9F04F99B004464FF002 +:1078B00000082848ADF81C80ADF82080ADF8248081 +:1078C000A0F80880ADF81480ADF81880ADF82C80D1 +:1078D000ADF82880007916460D464746012808D0A5 +:1078E000022806D0032804D0042802D0082019B0AA +:1078F000C4E72046F9F7E7FC80BB2846F9F7E3FC2C +:1079000060BB6068F9F72CFD40BB606848B16089D6 +:107910002189884202D8B1F5007F01D90C20E6E721 +:1079200080460EAA06A92846FFF7CCF90028DED12A +:1079300068688078C0F34100022808D19DF81900DA +:1079400010F0380F03D02869F9F701FD30B905A907 +:10795000206904E08C0200201400002020E0FFF7E2 +:1079600069F90028C3D1206948B1607880079DF883 +:10797000150000F0380001D5F0B300E0E0BB9DF841 +:10798000140080060ED59DF8150010F0380F03D0B6 +:107990006068F9F7DCFC18B96068F9F7E1FC08B138 +:1079A0001020A4E70AA96069FFF744F900289ED1D6 +:1079B000606940B19DF8290000F0070101293CD120 +:1079C00010F0380F39D00BA9A069FFF733F9002860 +:1079D0008DD19DF8280080062FD49DF82C008006BC +:1079E0002BD4A06950B19DF82D0000F007010129AA +:1079F00023D110F0380F00E01FE01ED0E06818B16E +:107A00000078D0B11C2818D20FAA611C2046FFF7BD +:107A100080F90121384661F30F2082468DF852101B +:107A2000B94642F603000F46ADF850000DF13F0293 +:107A300018A928680CF054FD08B1072057E79DF8F5 +:107A4000600015A9CDF80090C01CCDE9019100F0AF +:107A5000FF0B00230BF20122514614A806F05CF93B +:107A6000F0BBBDF854000C90FD492A8928690092AA +:107A7000CDE901016B89BDF838202868069906F028 +:107A80004BF901007ED120784FF0020AC10601D4E3 +:107A900080062BD5ADF80C90606950B90AA906A8EC +:107AA000FFF768F99DF8290020F00700401C8DF8C9 +:107AB00029009DF8280008A940F0C8008DF828008A +:107AC0008DF8527042F60210ADF8500003AACDF8BE +:107AD00000A0CDE90121002340F2032214A800E018 +:107AE0001EE00A9906F018F901004BD1DC484D461A +:107AF00008385B460089ADF83D000FA8CDE902903B +:107B0000CDF80490CDF810904FF007090022CDF881 +:107B10000090BDF854104FF6FF7006F043F810B116 +:107B2000FFF757F8E3E69DF83C00000625D5294607 +:107B3000012060F30F218DF852704FF42450ADF8FE +:107B40005000ADF80C5062789DF80C00002362F3F1 +:107B500000008DF80C006278CDF800A0520862F3A6 +:107B600041008DF80C0003AACDE9012540F2032263 +:107B700014A806F0D1F8010004D1606888B3206928 +:107B8000A8B900E086E005A906A8FFF7F3F8607839 +:107B9000800706D49DF8150020F038008DF81500F8 +:107BA00005E09DF8140040F040008DF814008DF8B9 +:107BB000527042F60110ADF85000208940F20121C8 +:107BC000B0FBF1F201FB1202606809ABCDF8008056 +:107BD000CDE90103002314A8059906F09DF80100E2 +:107BE00058D12078C00729D0ADF80C50A06950B901 +:107BF0000BA906A8FFF7BEF89DF82D0020F007009E +:107C0000401C8DF82D009DF82C008DF8527040F02E +:107C100040008DF82C0042F60310ADF8500007A983 +:107C200003AACDF800A0CDE90121002340F20322F0 +:107C300014A80B9906F070F801002BD1E06868B326 +:107C40002946012060F30F218DF8527042F604108E +:107C5000ADF85000E068002302788DF85820407895 +:107C60008DF85900E06816AA4088ADF85A00E0681F +:107C700000798DF85C00E068C088ADF85D00CDF853 +:107C80000090CDE901254FF4027214A806F044F8E3 +:107C9000010003D00C9800F0C7FF28E670480321CC +:107CA0000838017156B100893080BDF82400708019 +:107CB000BDF82000B080BDF81C00F080002016E662 +:107CC00070B501258AB016460B46012802D002285D +:107CD00016D104E08DF80E504FF4205003E08DF8DB +:107CE0000E5042F60100ADF80C005BB10024601CA0 +:107CF00060F30F2404AA08A918460CF0F1FB18B190 +:107D0000072048E5102046E504A99DF820205448A6 +:107D1000CDE90021801E02900023214603A802F233 +:107D2000012205F0F9FF10B1FEF753FF33E54C488F +:107D300008380EB1C1883180057100202BE5F0B5FF +:107D400093B0074601268DF83E6041F60100ADF87C +:107D50003C0012AA0FA93046FFF7B2FF002848D115 +:107D60003F4C0025083CE7B31C2102A81DF0F3FCA2 +:107D70009DF808008DF83E6040F020008DF8080066 +:107D800042F60520ADF83C000E959DF83A0011959D +:107D900020F00600801C8DF83A009DF838006A46F5 +:107DA00020F0FF008DF838009DF8390009A920F077 +:107DB000FF008DF839000420ADF82C00ADF830003C +:107DC0000EA80A9011A80D900FA80990ADF82E509A +:107DD00002A8FFF768FD00280BD1BDF80000608104 +:107DE00000E008E0BDF80400A081401CE08125719E +:107DF000002013B0F0BD6581A581BDF84800F4E70F +:107E00002DE9F74F1649A0B00024083917940A79D4 +:107E1000A146012A04D0022A02D0082023B02DE571 +:107E2000CA88824201D00620F8E721988A46824219 +:107E300001D10720F2E701202146ADF848004FF6B6 +:107E4000FF788DF86E0042F6020B60F30F21ADF85B +:107E50004A80ADF86CB006918DF8724002E00000E7 +:107E6000940200201CA9ADF870401391ADF8508029 +:107E700012A806F03EF800252E462F460DAB07222D +:107E800012A9404606F038F878B10A285DD195B3BA +:107E90008EB3ADF86450ADF866609DF85E008DF865 +:107EA000144019AC012864D06BE09DF83A001FB370 +:107EB000012859D1BDF8381059451FD118A809A972 +:107EC00001940294CDE9031007200090BDF836100C +:107ED00010230022404606F08FF8B0BBBDF86000CA +:107EE000042801D006284AD1BDF8241021988142E7 +:107EF0003AD10F2092E73AE0012835D1BDF8380099 +:107F0000B0F5205F03D042F6010188422CD1BAF8C7 +:107F10000600BDF83610884201D1012700E0002795 +:107F200005B19EB1219881421ED118A809AA0194D9 +:107F30000294CDE90320072000900D461023002273 +:107F4000404606F059F800B902E02DE04E460BE03D +:107F5000BDF86000022801D0102810D1C0B217AAC5 +:107F600009A90CF09EFA50B9BDF8369086E70520B5 +:107F700054E705A917A8221D0CF0B2FA08B1032096 +:107F80004CE79DF814000023001DC2B28DF81420A8 +:107F900022980092CDE901401BA8069905F0BCFE8D +:107FA00010B902228AF80420FEF713FE36E710B556 +:107FB0000B46401E88B084B205AA00211846FEF781 +:107FC000A8FE00200DF1080C06AA05A901908CE876 +:107FD0000700072000900123002221464FF6FF7082 +:107FE00005F0E0FD0446BDF81800012800D0FFDFD1 +:107FF0002046FEF7EEFD08B010BDF0B5F74F044681 +:1080000087B038790E46032804D0042802D008200F +:1080100007B0F0BD04AA03A92046FEF753FE0500F1 +:10802000F6D160688078C0F3410002280AD19DF83B +:108030000D0010F0380F05D02069F9F788F908B164 +:108040001020E5E7208905AA21698DE807006389EA +:10805000BDF810202068039905F05EFE10B1FEF710 +:10806000B8FDD5E716B1BDF8140030800420387192 +:108070002846CDE7F8B50C0006460CD001464FF671 +:10808000FF7500236A46284606F038F828B100BF7D +:10809000FEF79FFDF8BD1020F8BD69462046FEF7AB +:1080A000C9FD0028F8D1A078314600F00103284628 +:1080B000009A06F04FF8EBE730B587B0144600227F +:1080C0000DF1080C05AD01928CE82C0007220092FE +:1080D0000A46014623884FF6FF7005F063FDBDF8A0 +:1080E00014102180FEF775FD07B030BD70B50D4648 +:1080F00004210AF049FC040000D1FFDF294604F105 +:108100001400BDE8704004F073BD70B50D46042145 +:108110000AF03AFC040000D1FFDF294604F1140004 +:10812000BDE8704004F087BD70B50D4604210AF02B +:108130002BFC040000D1FFDF294604F11400BDE848 +:10814000704004F09FBD70B5054604210AF01CFC88 +:10815000040000D1FFDF214628462368BDE87040B7 +:108160000122FEF705BF70B5064604210AF00CFC9B +:10817000040000D1FFDF04F1140004F029FD401DCC +:1081800020F0030511E0011D00880022431821465C +:108190003046FEF7EDFE00280BD0607CABB26843A2 +:1081A00082B2A068011D0AF0ACFAA06841880029DB +:1081B000E9D170BD70B5054604210AF0E5FB040065 +:1081C00000D1FFDF214628466368BDE870400222E7 +:1081D000FEF7CEBE70B50E46054601F079F90400F3 +:1081E00000D1FFDF0120207266726580207820F0C8 +:1081F0000F00001D20F0F00040302070BDE87040FE +:1082000001F069B910B50446012900D0FFDF20460E +:10821000BDE810400121FAF757B92DE9F04F97B0AA +:108220004FF0000A0C008346ADF814A0D04619D0D8 +:10823000E06830B1A068A8B10188ADF81410A0F8CA +:1082400000A05846FBF7FFF8070043F2020961D08F +:10825000387822285CD3042158460AF095FB0500A3 +:1082600005D103E0102017B0BDE8F08FFFDF05F166 +:10827000140004F0ADFC401D20F00306A078012896 +:1082800003D0022801D00720EDE7218807AA58462D +:1082900005F0FFFD30BB07A805F007FE10BB07A8DF +:1082A00005F003FE48B99DF82600012805D1BDF868 +:1082B0002400A0F52451023902D04FF45050D2E7E7 +:1082C000E068B0B1CDE902A00720009005AACDF882 +:1082D00004A00492A2882188BDF81430584605F005 +:1082E00061FC10B1FEF775FCBDE7A168BDF8140094 +:1082F00008809DF81F00C00602D543F20140B2E796 +:108300000B9838B1A1780078012905D080071AD4DC +:108310000820A8E74846A6E7C007F9D002208DF854 +:108320003C00A8684FF00009A0B1697C4288714305 +:1083300091420FD98AB2B3B2011D0AF098F9804672 +:10834000A0F800A006E003208DF83C00D5F80080DE +:108350004FF001099DF8200010F0380F00D1FFDF29 +:108360009DF820001E49C0F3C200084497F823106E +:1083700010F8010C884201D90F2074E72088ADF86D +:10838000400014A90095CDE90191434607220FA9A9 +:108390005846FEF717FE002891D19DF8500050B9BD +:1083A000A078012807D1687CB3B2704382B2A86874 +:1083B000011D0AF070F9002055E770B50646154614 +:1083C0000C460846FEF7C4FB002805D12A46214684 +:1083D0003046BDE8704073E470BD11E58C020020AA +:1083E0000E5B020070B51E4614460D0009D044B164 +:1083F000616831B138B1FC49C988814203D0072096 +:1084000070BD102070BD2068FEF7A2FB0028F9D1D6 +:10841000324621462846BDE87040FFF744BA70B5A1 +:1084200015460C0006D038B1EF490989814203D0C6 +:10843000072070BD102070BD2068FEF789FB002862 +:10844000F9D129462046BDE87040D6E570B506460C +:1084500086B00D4614461046F8F75BFFD0BB606847 +:10846000F8F77EFFB0BBA6F57F40FF3803D030465B +:10847000FAF7E9FF80B128466946FEF79DFC00281F +:108480000CD19DF810100F2008293DD2DFE801F033 +:1084900008060606060A0A0843F2020006B070BD86 +:1084A0000320FBE79DF80210012908D1BDF8001058 +:1084B000B1F5C05FF2D06FF4C052D142EED09DF85A +:1084C000061001290DD1BDF80410A1F52851062987 +:1084D00007D200E029E0DFE801F00303040303030F +:1084E000DCE79DF80A1001290FD1BDF80810B1F59D +:1084F000245FD3D0A1F60211B1F50051CED00129ED +:10850000CCD0022901D1C9E7FFDF606878B9002328 +:1085100005AA2946304605F0F1FD10B1FEF759FBDA +:10852000BCE79DF81400800601D41020B6E76188EE +:10853000224628466368FFF7BFFDAFE72DE9F04309 +:10854000814687B0884614461046F8F7E2FE18B117 +:10855000102007B0BDE8F083002306AA4146484634 +:1085600005F0CCFD18B100BFFEF733FBF1E79DF835 +:108570001800C00602D543F20140EAE700250727AC +:1085800005A8019500970295CDE9035062884FF642 +:10859000FF734146484605F02FFD060013D1606881 +:1085A000F8F7B7FE60B960680195CDE90250009711 +:1085B0000495238862884146484605F01DFD06461D +:1085C000BDF8140020803046CEE739B1864B0A88CA +:1085D0009B899A4202D843F2030070471DE610B50A +:1085E00086B0814C0423ADF81430638943B1A4896B +:1085F0008C4201D2914205D943F2030006B010BD6E +:108600000620FBE7ADF81010002100910191ADF8B4 +:10861000003002218DF8021005A9029104A90391EE +:10862000ADF812206946FFF7F8FDE7E72DE9FC47B2 +:1086300081460D460846F8F746FE88BB4846FAF7DD +:1086400002FF5FEA00080AD098F80000222829D328 +:10865000042148460AF098F9070005D103E043F2E7 +:108660000200BDE8FC87FFDF07F1140004F0C7FA41 +:1086700006462878012803D0022804D00720F0E716 +:10868000B0070FD502E016F01C0F0BD0A8792C1DF7 +:10869000C00709D0E08838B1A068F8F714FE18B117 +:1086A0001020DEE70820DCE721882A780720B1F5D2 +:1086B000847F35D01EDC40F20315A1F20313A942DA +:1086C00026D00EDCB1F5807FCBD003DCF9B10129D7 +:1086D00026D1C6E7A1F58073013BC2D0012B1FD183 +:1086E00013E0012BBDD0022B1AD0032BB9D0042BE1 +:1086F00016D112E0A1F20912082A11D2DFE802F025 +:108700000B04041010101004ABE7022AA9D007E0F4 +:10871000012AA6D004E0320700E0F206002AA0DA1F +:10872000CDB200F0D5FE50B198F82300CDE9000598 +:10873000FA89234639464846FEF78FFC91E7112017 +:108740008FE72DE9F04F8BB01F4615460C46834648 +:108750000026FAF778FE28B10078222805D20820F2 +:108760000BB081E543F20200FAE7B80801D0072018 +:10877000F6E7032F00D100274FF6FF79CCB1022D89 +:1087800073D32046F8F7ECFD30B904EB0508A8F1E7 +:108790000100F8F7E5FD08B11020E1E7AD1EAAB22F +:1087A0002146484605F085FD38F8021C88425CD118 +:1087B000ADB20D49B80702D58889401C00E0012000 +:1087C0001FFA80F8F80701D08F8900E04F4605AA0C +:1087D0004146584605F05DFB4FF0070A4FF000098F +:1087E000DCB320460BE000008C02002040881028FB +:1087F0003BD8361D304486B2AE4236D2A01902882C +:108800004245F3D351E000BF9DF8170002074CD555 +:1088100094B304EB0608361DB8F80230B6B2102B3C +:1088200023D89A19AA4220D8B8F8002091421CD126 +:10883000C0061CD5CDE900A90DF1080C0AAAA119A2 +:1088400048468CE80700B8F800100022584605F0AA +:10885000A9F920B1FEF7BDF982E726E005E0B8F8F6 +:108860000200BDF82810884201D00B2078E7B8F844 +:108870000200304486B207E0FFE7C00604D5584640 +:10888000FEF71DFC002888D19DF81700BDF81A10CE +:1088900020F010008DF81700BDF81700ADF80000AB +:1088A000FF235846009A05F055FC05A805F0FDFA8F +:1088B00018B9BDF81A10B942A6D9042158460AF0D1 +:1088C00063F8040000D1FFDFA2895AB1CDE900A905 +:1088D0004D46002321465846FEF7BFFB0028BBD17A +:1088E000A5813DE700203BE72DE9FF4F8BB01E46F9 +:1088F00017000D464FF0000412D0B00802D0072038 +:108900000FB0B1E4032E00D100265DB10846F8F7A0 +:108910001EFD28B93888691E0844F8F718FD08B10B +:108920001020EDE7C64AB00701D5D18900E001214A +:10893000F0074FF6FF7802D0D089401E00E0404695 +:1089400086B206AA0B9805F0A4FA4FF000094FF082 +:10895000070B0DF1140A38E09DF81B00000734D511 +:10896000CDF80490CDF800B0CDF80890CDE9039A89 +:10897000434600220B9805F03FFB60BB05B3BDF8F2 +:1089800014103A8821442819091D8A4230D3BDF8B1 +:108990001E2020F8022BBDF8142020F8022BCDE970 +:1089A00000B9CDE90290CDF810A0BDF81E10BDF8B9 +:1089B000143000220B9805F01FFB08B103209FE73D +:1089C000BDF814002044001D84B206A805F06DFA1D +:1089D00020B10A2806D0FEF7FCF891E7BDF81E107A +:1089E000B142B9D934B17DB13888A11C884203D2D3 +:1089F0000C2085E7052083E722462946404605F0FE +:108A000058FC014628190180A41C3C80002077E70F +:108A100010B50446F8F77DFC08B1102010BD884859 +:108A2000C0892080002010BDF0B58BB00D460646F1 +:108A3000142103A81CF08FFE01208DF80C008DF886 +:108A4000100000208DF81100ADF814503046FAF7F0 +:108A5000FAFC48B10078222812D30421304609F0EC +:108A600093FF040005D103E043F202000BB0F0BD18 +:108A7000FFDF04F11400074604F0C1F8800601D4BA +:108A80000820F3E7207C022140F00100207409A8AF +:108A90000094CDE90110072203A930466368FEF770 +:108AA00091FA20B1217C21F001012174DEE72946F1 +:108AB0003046F9F7FAFC08A9384604F08FF800B1FF +:108AC000FFDFBDF82040172C01D2172000E0204620 +:108AD000A84201D92C4602E0172C00D217242146C7 +:108AE0003046FFF712FB21463046F9F704FA002022 +:108AF000BCE7F8B51C4615460E46069F0AF076F808 +:108B00002346FF1DBCB231462A46009409F061FCA1 +:108B1000F8BD70B50C4605460E2120461CF0F9FD47 +:108B2000002020802DB1012D01D0FFDF70BD062077 +:108B300000E00520A07170BD10B54880087813468C +:108B400020F00F00001D20F0F00080300C4608706F +:108B50001422194604F108001CF0A1FD00F0BBFC32 +:108B60003748046010BD2DE9F047DFF8D890491D63 +:108B7000064621F0030117460C46D9F8000009F01B +:108B80003EFD050000D1FFDF4FF000083560A5F87D +:108B900000802146D9F8000009F031FD050000D120 +:108BA000FFDF7560A5F800807FB104FB07F1091DA8 +:108BB0000BD0D9F8000009F022FD040000D1FFDF3E +:108BC000B460C4F80080BDE8F087C6F80880FAE712 +:108BD0002DE9F0411746491D21F00302194D0646C3 +:108BE00001681446286809F035FD22467168286836 +:108BF00009F030FD3FB104FB07F2121D03D0B1684C +:108C0000286809F027FD042009F066FE04460420C8 +:108C100009F06AFE201A012804D12868BDE8F04155 +:108C200009F0E2BCBDE8F08110B50C4605F0FDF896 +:108C300000B1FFDF2046BDE81040FDF7CABF0000CD +:108C40008C0200201400002038B50C468288817BFD +:108C500019B14189914200D90A462280C188121D6A +:108C600090B26A4608F02BFFBDF80000032800D33D +:108C70000320C1B2208800F0D7FF38BD38B50C46BC +:108C80008288817B19B10189914200D90A462280EC +:108C9000C188121D90B26A4608F011FFBDF80000AD +:108CA000022800D30220C1B2208800F0BDFF401C82 +:108CB000C0B238BD2DE9FE4F82468B46F9481446B6 +:108CC0000BF10302D0E90010CDE9011022F00302FC +:108CD00068464FF49071009209F073FCF24E002C3C +:108CE00002D1F24A00999160009901440091357FC8 +:108CF00005F1010504D1E8B20BF06CFB00B1FFDF18 +:108D0000009800EB0510C01C20F0030100915CB935 +:108D1000707AB27A1044C2B200200870308C80B2EF +:108D200004F00BFF00B1FFDF0098316A08440090A7 +:108D30002146684600F03BFF80460098C01C20F0AA +:108D400003000090B37AF27A717A04B1002009F03E +:108D50002EFD0099084400902146684600F06FFF00 +:108D6000D14800273D4690F801900CE0284600F0DD +:108D700001FF064681788088F9F754F971786D1CF7 +:108D800000FB0177EDB24D45F0D10098C01C20F0FA +:108D90000300009004B100203946F9F74EF900991C +:108DA000002708440090C0483D4690F801900CE030 +:108DB000284600F0DFFE0646C1788088FEF709FCF1 +:108DC00071786D1C00FB0177EDB24D45F0D1009834 +:108DD000C01C20F00300009004B100203946FEF7CB +:108DE00001FC00994FF0000908440090AE484D4640 +:108DF00047780EE0284600F0BDFE0646807B30B185 +:108E000006F1080001F00FFF727800FB02996D1C5B +:108E1000EDB2BD42EED10098C01C20F003000090DE +:108E200004B10020494601F002FF00990844009077 +:108E30002146684600F075FE0098C01D20F007002E +:108E40000090DAF80010814204D3A0EB0B01B1F5D9 +:108E5000803F04DB4FF00408CAF8000004E0CAF8C1 +:108E60000000B8F1000F02D04046BDE8FE8F34BBD1 +:108E70008F490020009A03F079F8FBF764FA8A48DA +:108E800001AA00211030F8F7E9FA00B1FFDF8648A7 +:108E9000407FFEF754FF00B1FFDF83484FF4F671C7 +:108EA00040301CF058FC80480421403080F8E91123 +:108EB00080F8EA11062180F8EB11032101710020EE +:108EC000D3E770B5784C06464034207804EB401563 +:108ED000E078083590B9A01990F8E80100280ED084 +:108EE000A0780F2800D3FFDF202128461CF033FC98 +:108EF000687866F3020068700120E070284670BD53 +:108F00002DE9F04105460C460027007805219046E2 +:108F10003E46B1EB101F00D0FFDF287A50B1012888 +:108F20000ED0FFDFA8F800600CB12780668000201B +:108F3000BDE8F0810127092674B16888A08008E0A7 +:108F40000227142644B16888A0802869E060A88AB6 +:108F50002082287B2072E5E7A8F80060E7E730B5BB +:108F6000514C012000212070617020726072032238 +:108F7000A272E07221732174052121831F21618374 +:108F800060744CA161610A2121776077474D4FF4ED +:108F9000B06020626868C11C21F00301814200D0EA +:108FA000FFDF6868606030BD30B5404C15686368AD +:108FB00010339D4202D20420136030BD3A4B5D78DD +:108FC0005A6802EB0512107051700320D0801720F0 +:108FD00090800120D0709070002090735878401CD1 +:108FE0005870606810306060002030BD70B5064673 +:108FF0002D480024457807E0204600F0BBFD0178AD +:10900000B14204D0641CE4B2AC42F5D1002070BD82 +:10901000F7B5074608780C4610B3FFF7E7FF05469B +:10902000A7F12006202F06D0052E19D2DFE806F082 +:109030000F2B2B151A0000F0A8FD0DB1697800E088 +:109040000021401AA17880B20844FF2808D8A078EF +:1090500030B1A088022831D202E0608817282DD2D2 +:109060000720FEBD207AE0B161881729F8D3A188D6 +:109070001729F5D3A1790029F2D0E1790029EFD0A1 +:10908000402804D9ECE7242F18D1207A48B1618810 +:109090004FF6FB70814202D8A18881420ED904208C +:1090A000FEBD0BE0145B0200A803002018000020A6 +:1090B000000000206E5246357800000065B9207827 +:1090C00002AA0121FFF770FF0028E9D12078FFF7FD +:1090D0008DFF050000D1FFDF052E18D2DFE806F076 +:1090E000030B0E081100A0786870A088E8800FE0DC +:1090F0006088A8800CE0A078A87009E0A078E870EB +:1091000006E054F8020FA8606068E86000E0FFDF46 +:109110000020C5E71A2835D00DDC132832D2DFE84D +:1091200000F01B31203131272723252D3131293102 +:109130003131312F0F00302802D003DC1E2821D11D +:10914000072070473A3809281CD2DFE800F0151BC9 +:109150000F1B1B1B1B1B07000020704743F2040062 +:10916000704743F202007047042070470D2070479B +:109170000F20704708207047112070471320704758 +:10918000062070470320704710B5007800F00100FA +:1091900008F087FCBDE81040BCE710B5007800F08F +:1091A000010008F087FCBDE81040B3E70EB5017878 +:1091B00001F001018DF80010417801F001018DF8F6 +:1091C00001100178C1F340018DF802104178C1F31C +:1091D00040018DF80310017889088DF8041041785A +:1091E00089088DF8051081788DF80610C1788DF802 +:1091F000071000798DF80800684607F097FAFFF726 +:1092000089FF0EBD2DE9F84FDFF8F883FE4C0026EC +:109210004FF490771FE0012000F054FD0120FFF78C +:1092200050FE05463946D8F8080009F0E8F96860AC +:1092300000B9FFDF686807F008F9B0B12846FAF70F +:10924000E9FB284600F044FD28B93A466968D8F899 +:10925000080009F0FFF994F9E9010428DBDA02209B +:1092600009F03AFB07460025A5E03A466968D8F8B8 +:10927000080009F0EFF9F2E7B8F802104046491C7F +:1092800089B2A8F80210B94201D30021418002211D +:10929000B8F8020009F078FB002864D0B8F80200A2 +:1092A000694608F070FBFFF735FF00B1FFDF9DF85E +:1092B000000078B1B8F8020009F0AAFC5FEA0009E2 +:1092C00000D1FFDF484608F018FF18B1B8F80200D7 +:1092D00002F054F9B8F8020009F088FC5FEA0009CE +:1092E00000D1FFDF484608F000FFE0BB0321B8F8DB +:1092F000020009F049FB5FEA000B47D1FFDF45E0C0 +:10930000DBF8100010B10078FF2849D0022000F0EF +:10931000D9FC0220FFF7D5FD8246484608F0F1FF50 +:10932000CAF8040000B9FFDFDAF8040009F0B9F860 +:10933000002100900170B8F802105046AAF80210FF +:1093400001F01EFE484609F0AEF800B9FFDF5046B6 +:1093500000F0BEFC18B99AF80100000704D5009887 +:10936000CBF8100012E024E0DBF8100038B10178EF +:10937000491C11F0FF01017008D1FFDF06E0002257 +:109380001146484600F0CBFB00B9FFDF94F9EA0133 +:10939000022805DBB8F8020001F0B7FD0028AFD1C4 +:1093A00094F9E901042804DB484609F0E0F800B12B +:1093B00001266D1CEDB2BD4204D294F9EA010228E7 +:1093C000BFF65AAF002E7FF422AFBDE8F84F03205E +:1093D00000F078BC10B58B4CE06008682061AFF2FB +:1093E000DB10F9F77AFD607010BD87480021403826 +:1093F00001708448017085494160704770B5054629 +:109400004FF080500C46D0F8A410491C05D1D0F87C +:10941000A810C9430904090C0BD050F8A01F01F093 +:1094200001012970416821608068A080287830B9E6 +:1094300070BD062120460CF0E2FC01202870607906 +:1094400040F0C000607170BD70B54FF080540D46A3 +:10945000D4F88010491C0BD1D4F88410491C07D1D2 +:10946000D4F88810491C03D1D4F88C10491C0CD0B6 +:10947000D4F880100160D4F884104160D4F88810CA +:109480008160D4F88C10C16002E010210CF0B7FCB0 +:10949000D4F89000401C0BD1D4F89400401C07D1A4 +:1094A000D4F89800401C03D1D4F89C00401C09D08B +:1094B00054F8900F286060686860A068A860E06851 +:1094C000E86070BD2846BDE8704010210CF097BCE4 +:1094D0004D480079F5E470B54B4CE07830B3207816 +:1094E00004EB4010407A00F00700204490F9E801B6 +:1094F000002800DCFFDF2078002504EB4010407AD4 +:1095000000F00700011991F8E801401E81F8E80118 +:109510002078401CC0B220700F2800D12570A078A0 +:10952000401CA0700CF062FBE57070BDFFDF70BDE9 +:109530003EB50546032109F027FA0446284609F0FE +:1095400055FB054604B9FFDF206918B10078FF28F4 +:1095500000D1FFDF01AA6946284600F0E0FA60B9B1 +:10956000FFDF0AE0002202A9284600F0D8FA00B97D +:10957000FFDF9DF8080000B1FFDF9DF80000411EED +:109580008DF80010EED220690199884201D10020A7 +:1095900020613EBD70B50546A0F57F400C46FF3802 +:1095A00000D1FFDF012C01D0FFDF70BDFFF790FF7E +:1095B000040000D1FFDF207820F00F00401D20F0D4 +:1095C000F000503020706580002020720120207350 +:1095D000BDE870407FE72DE9F04116460D4607468D +:1095E000FFF776FF040000D1FFDF207820F00F00A6 +:1095F000401D20F0F0005030207067800120207264 +:10960000286805E018000020E8030020F813002077 +:109610002061A888A0822673BDE8F0415BE77FB592 +:10962000FFF7E4FC040000D1FFDF02A92046FFF7AA +:109630000BFB054603A92046FFF720FB8DF80050E1 +:109640008DF80100BDF80800001DADF80200BDF85E +:109650000C00001DADF80400E088ADF80600684677 +:1096600008F007FA002800D0FFDF7FBD2DE9F041A8 +:10967000FB4C0646207808B1082059E43046F7F73D +:1096800048FE08B1102053E4F64D287808B9FFF7DA +:1096900066FCA87A697A0844C7B200F076FAB84244 +:1096A00007D2381AC1B232460020FFF77DFC0028ED +:1096B000E3D16068C01C20F00300606000F05DFB37 +:1096C000616801220844804601463046FFF7F2FAFD +:1096D000070012D00020FFF789FC06000BD006F12E +:1096E0001300616820F00300884200D0FFDF687833 +:1096F000401E6870666038461AE4002241463046D3 +:10970000FFF7D8FA00B1FFDF306860604FF6FF70F6 +:1097100060800120207000200AE42DE9F041044619 +:10972000CF4817460E46007808B10820A5E708463E +:10973000F7F7C9FD08B110209FE7CA4D287808B98E +:10974000FFF70DFC601E1E2807D8012C22D13078AF +:10975000FE281FD8287700208FE7A4F120001F28BB +:1097600005D8E0B23A463146BDE8F04150E4A4F1F4 +:1097700040001F2805D831462046BDE8F04100F0E2 +:10978000CFBAA4F1A0001F2804D80020A02C03D039 +:10979000A12C06D0072070E7317801F0010169772C +:1097A0006BE731680922F82901D38B0701D01046F5 +:1097B00063E76B7C03F00303012B04D16B8BD7337E +:1097C0009CB28C42F3D8296257E72DE9F0478146D5 +:1097D0000E460846F7F79DFD48B94846F7F7B7FD2E +:1097E00028B909F1030020F00301494502D01020F7 +:1097F000BDE8F0879B484FF0000A4030817869B19E +:109800004178804600EB4114083437883246002105 +:10981000204600F06BFA050004D027E0A6F800A06F +:109820000520E5E7B9F1000F24D03088B84201D90E +:109830000C251FE0607800F00705284600F042FA8A +:1098400008EB0507324697F8E8014946401C87F8BF +:10985000E801204607F5F47700F048FA0546387825 +:10986000401E3870032000F02DFA2DB10C2D01D0D0 +:10987000A6F800A02846BBE76078794E00F0070103 +:10988000012923D002290CD0032934D0FFDF98F816 +:1098900001104046491CC9B288F801100F2935D083 +:1098A00036E0616821B1000702D46088FFF740FE0E +:1098B00098F8EA014746012802D17078F9F72CFBA5 +:1098C00097F9EA010428E2DBFFDFE0E7616821B1F4 +:1098D0004FF49072B06808F0BDFE98F8E901474671 +:1098E000032802D17078F9F717FB97F9E9010428EA +:1098F000CDDBFFDFCBE7C00602D56088FFF718FE9F +:1099000098F9EB010628C2DBFFDFC0E780F801A071 +:109910008178491E8170617801F0070101EB080030 +:1099200090F8E811491C80F8E811A3E770B50D46DE +:109930000446F7F7C8FC18B92846F7F7EAFC08B15F +:10994000102070BD29462046BDE870400AF079BD60 +:1099500070B505460AF098FDC4B22846F7F7F7FC43 +:1099600008B1102070BD35B128782C7018B1A04214 +:1099700001D0072070BD2046FDF796FE052805D1D1 +:109980000AF086FD012801D0002070BD0F2070BDB7 +:1099900070B5044615460E460846F7F794FC18B90C +:1099A0002846F7F7B6FC08B1102070BD022C03D092 +:1099B000102C01D0092070BD2A46314620460AF0FD +:1099C00070FD0028F7D0052070BD70B514460D4617 +:1099D0000646F7F778FC38B92846F7F79AFC18B925 +:1099E0002046F7F7B4FC08B1102070BD2246294686 +:1099F00030460AF075FD0028F7D0072070BD3EB54F +:109A00000446F7F786FC08B110203EBD684606F014 +:109A1000F4FDFFF77FFB0028F7D19DF806002070CA +:109A2000BDF808006080BDF80A00A08000203EBD9F +:109A300070B505460C460846F7F789FC20B93CB1DD +:109A40002068F7F766FC08B1102070BDA08828B127 +:109A500021462846BDE87040FDF77EBE092070BD56 +:109A600018000020A803002070B504460D460846E3 +:109A7000F7F729FC30B9601E1E2814D82846F7F7DE +:109A800022FC08B11020EAE7032C01D90720E6E701 +:109A900004B9FFDFFC4800EB840050F8041C2846A2 +:109AA000BDE870400847A4F120001F2805D82946CA +:109AB0002046BDE87040FAF7CEBBF02CE6D1A8688E +:109AC000F7F701FC0028DDD1284608F03AF8BDE898 +:109AD0007040FFF71FBB70B504460D460846F7F708 +:109AE00018FC30B9601E1E280FD82846F7F7EBFB8C +:109AF00008B11020B3E7012C03D0022C01D0032CB5 +:109B000001D10620ABE70720A9E7A4F120001F2818 +:109B1000F9D829462046BDE87040FAF7F4BB08F0B2 +:109B2000B3BA38B50446D948007B00F00105D9B96D +:109B300004F064FB0DB1226800E00022D4484178B3 +:109B4000C06806F048FCD2481030C0788DF800009C +:109B500010B1012802D004E0012000E000208DF8BF +:109B60000000684606F0C3FD002D02D020682830B2 +:109B7000206038BD30B5C54D04466878A04200D895 +:109B8000FFDF686800EB041030BD70B5BF480025EA +:109B90002C46467807E02046FFF7ECFF4078641C2F +:109BA0002844C5B2E4B2B442F5D1284657E72DE9BE +:109BB000F0410C4607464FF0000800F00CF906464D +:109BC000FF2801D94FF013083868C01C20F00302A9 +:109BD0003A6054EA080421D1AC48F3B2072124309A +:109BE0000CF012FB09E0072C10D2DFE804F00604A9 +:109BF00008080A040600A74804E0A74802E0A748AE +:109C000000E0A7480CF020FB054600E0FFDFA5427E +:109C100000D0FFDF641CE4B2072CE4D3386800EB0B +:109C200006103860404628E5021D5143452900D200 +:109C300045210844C01CB0FBF2F0C0B270472DE9CA +:109C4000FC5F064691484FF000088B464746444665 +:109C500090F8019022E02046FFF78CFF050000D12C +:109C6000FFDF687869463844C7B22846FEF7ECFF44 +:109C7000824601A92846FFF701F80346BDF8040013 +:109C80005246001D81B2BDF80000001D80B208F0F0 +:109C9000F9FE6A78641C00FB0288E4B24C45DAD114 +:109CA0003068C01C20F003003060BBF1000F00D012 +:109CB00000204246394608F0F3FE3168084430601F +:109CC000BDE8FC9F7149403108710020C8707047A1 +:109CD0006E494031CA782AB10A7801EB4211083145 +:109CE000814201D001207047002070472DE9F041EA +:109CF00006460078154600F00F0400201080601E14 +:109D00000F46052800D3FFDF5F482A46183800EBCE +:109D10008400394650F8043C3046BDE8F04118470D +:109D200070B50C46402802D0412806D120E0A0782A +:109D300061780D18E178814201D907208FE62078FB +:109D4000012801D913208AE6FF2D08D80AF032FD38 +:109D500006460BF003FF301A801EA84201DA1220DB +:109D60007DE64A482168816021790173002076E60A +:109D7000BDE87040084600F059B82DE9F0470027CB +:109D8000DFF808A13E463D46B9463C469AF80180B8 +:109D90000AE02046FFF7EEFE4178807B0E4410FB80 +:109DA0000155641CE4B27F1C4445F2D109EB8700E5 +:109DB000C6EBC60100EB81009AF8092000EB850193 +:109DC00001EBC2019AF80A209AF80B0001EBC201DC +:109DD00001EB80000CE52DE9F047DFF8B09000269C +:109DE000344699F8090099F80A2099F8017002445C +:109DF000D5B299F80B20104400F0FF0808E0204687 +:109E0000FFF7B8FE817B407811FB0066641CE4B26A +:109E1000BC42F4D199F8091099F80A002944294460 +:109E2000414400B1012008443044E1E438B504461F +:109E3000407800F00300012803D002280BD007204F +:109E400038BD606858B1F7F78BFAD0B96068F7F79A +:109E50007EFA20B915E06068F7F735FA88B96946E7 +:109E60002046FCF79DF80028EAD1607800F0030056 +:109E7000022817D19DF80000A0B16068F7F767FAD3 +:109E800080B1102038BD0000345B0200A803002020 +:109E90001800002057410000FBAC0000E92F000033 +:109EA000C74101006189F8290DD8208988420AD864 +:109EB000607800F003020A48012A06D1D731026A0D +:109EC00089B28A4201D20920DCE794E80E0000F151 +:109ED000100585E80E000AB9002101830020D1E7B2 +:109EE000A80300202DE9F04107461446884608469D +:109EF00001F022FD064608EB88001C22796802EB7F +:109F0000C0000D18688C58B14146384601F01CFD60 +:109F1000014678680078C200082305F120000CE0B3 +:109F2000E88CA8B14146384601F015FD0146786835 +:109F300008234078C20005F1240008F0E2FB38B1A4 +:109F4000062121726681D0E90010C4E9031009E0FE +:109F5000287809280BD00520207266816868E060A7 +:109F6000002028702046BDE8F04101F0DBBC07204E +:109F700020726681F4E72DE9F04116460D4607464A +:109F8000406801EB85011C2202EBC1014418204608 +:109F900001F003FD40B10021708865F30F2160F3EB +:109FA0001F4106200CF00AFA09202070324629468B +:109FB0003846BDE8F04195E72DE9F0410E460746E9 +:109FC00000241C21F07816E004EB8403726801EB96 +:109FD000C303D25C6AB1FFF77BFA050000D1FFDF53 +:109FE0006F802A4621463046FFF7C5FF0120BDE8B5 +:109FF000F081641CE4B2A042E6D80020F7E770B517 +:10A00000064600241C21C0780AE000BF04EB84034C +:10A01000726801EBC303D5182A782AB1641CE4B234 +:10A02000A042F3D8402070BD282128461BF071FBC8 +:10A03000706880892881204670BD70B50346002075 +:10A040001C25DC780DE000BF00EB80065A6805EBAC +:10A05000C6063244167816B1128A8A4204D0401CD1 +:10A06000C0B28442F0D8402070BDF0B50446002054 +:10A070001C26E5780EE000BF00EB8007636806EB66 +:10A08000C7073B441F788F4202D15B78934204D0CC +:10A09000401CC0B28542EFD84020F0BD00780328B4 +:10A0A00001D000207047012070470078022801D0BD +:10A0B00000207047012070470078072801D0002059 +:10A0C0007047012070472DE9F04106468846107818 +:10A0D000F1781546884200D3FFDF2C781C27641CDA +:10A0E000F078E4B2A04201D8201AC4B204EB840193 +:10A0F000706807EBC1010844017821B141468847E7 +:10A1000008B12C7073E72878A042E8D1402028706D +:10A110006DE770B514460B880122A240134207D1A7 +:10A1200013430B8001230A22011D08F0B4FA0470C6 +:10A1300070BD2DE9FF4F81B00878DDE90E7B9A46AE +:10A1400091460E4640072CD4019808F061FD0400AA +:10A1500000D1FFDF07F1040820461FFA88F107F05D +:10A16000A0FE050000D1FFDF204629466A4608F020 +:10A17000EAF80098A0F80370A0F805A0284608F0B7 +:10A1800090F9017869F306016BF3C711017020465D +:10A190001FFA88F107F0C8FE00B9FFDF019806F04A +:10A1A0008CF806EB0900017F491C017705B0BDE87A +:10A1B000F08F2DE9F84F0E469A4691460746032147 +:10A1C00008F0E2FB0446008DDFF8B885002518B1E1 +:10A1D00098F80000B0421ED1384608F019FD07007B +:10A1E00000D1FFDF09F10401384689B207F059FEBA +:10A1F000050010D0384629466A4608F0A4F80098B1 +:10A2000000210A460180817006F010F90098C01DF7 +:10A21000CAF8000021E098F80000B04216D104F11D +:10A22000260734F8341F012000FA06F911EA090F55 +:10A2300000D0FFDF2088012340EA090020800A22A5 +:10A24000391D384608F042FA067006E0324604F13D +:10A25000340104F12600FFF75CFF0A2188F80010A2 +:10A260002846BDE8F88FFEB515460C46064602ABFB +:10A270000C220621FFF79DFF002827D00299607865 +:10A2800012220A70801C487008224A80A07002982E +:10A290002988052381806988C180A9880181E9888E +:10A2A000418100250C20CDE90005062221463046DB +:10A2B000FFF73FFF2946002266F31F41F0231046B7 +:10A2C0000BF0D2FF6078801C60700120FEBDFEB5EF +:10A2D00014460D460622064602AB1146FFF769FFFB +:10A2E000002812D0029B132000211870A878587003 +:10A2F000022058809C800620CDE9000102460523FB +:10A3000029463046FFF715FF0120FEBD2DE9FE432B +:10A310000C46804644E002AB0E2207214046FFF780 +:10A3200048FF002841D060681C2267788678BF1CEF +:10A3300006EB860102EBC101451802981421017059 +:10A3400047700A214180698A0181E98A4181A9888F +:10A350008180A9898181304601F0EEFA02990523B6 +:10A360000722C8806F700420287000250E20CDE9D8 +:10A37000000521464046FFF7DCFE294666F30F2123 +:10A3800068F31F41F023002206200BF06DFF607878 +:10A39000FD49801C607062682046921CFFF793FEA6 +:10A3A000606880784028B6D10120BDE8FE83FEB504 +:10A3B0000D46064638E002AB0E2207213046FFF775 +:10A3C000F8FE002835D068681C23C17801EB8102B3 +:10A3D00003EBC20284180298152202706278427060 +:10A3E0000A224280A2894281A2888281084601F025 +:10A3F000A3FA014602988180618AC180E18A0181C5 +:10A40000A088B8B10020207000210E20CDE9000105 +:10A410000523072229463046FFF78BFE6A68DB4991 +:10A420002846D21CFFF74FFE6868C0784028C2D18A +:10A430000120FEBD0620E6E72DE9FE430C468146DD +:10A4400044E0204601F093FAD0B302AB0822072182 +:10A450004846FFF7AEFE0028A7D060681C2265784A +:10A460000679AD1C06EB860102EBC1014718029884 +:10A47000B7F81080062101704570042141803046F4 +:10A4800001F05AFA0146029805230722C180A0F87C +:10A4900004807D70082038700025CDE90005214634 +:10A4A0004846FFF746FE294666F30F2169F31F4130 +:10A4B000F023002206200BF0D7FE6078801C60702D +:10A4C0006268B3492046121DFFF7FDFD60680179FF +:10A4D0004029B6D1012068E72DE9F34F83B00E463D +:10A4E00080E0304601F043FA002875D071681C20E6 +:10A4F00091F8068008EB880200EBC2000C18414678 +:10A50000304601F028FA0146A078C3007068407810 +:10A51000C20004F1240008F010F907468088E18B9E +:10A52000401A80B2002581B3AA46218B814200D80F +:10A5300008468146024602AB07210398FFF739FE21 +:10A54000010028D0BAF1000F03D0029AB888022582 +:10A5500010808B46E28B3968A9EB05001FFA80FA60 +:10A560000A440398009208F053FBED1D009A5946E7 +:10A570005346009507F061FFE08B504480B2E083C2 +:10A58000B988884209D1012508E0FFE7801C4FF017 +:10A59000010A80B2C9E7002008E60025CDE9009550 +:10A5A000238A072231460398FFF7C3FDE089401E46 +:10A5B000E0818DB1A078401CA0707068F17842787D +:10A5C00011FB02F1CAB2816901230E3008F063F871 +:10A5D00080F800800020E08372686E493046921D4A +:10A5E000FFF771FD7068817940297FF47AAF01200F +:10A5F000DCE570B5064648680D4614468179402969 +:10A6000010D104EB84011C2202EBC101084401F0CB +:10A61000E5F9002806D06868294684713046BDE80F +:10A62000704059E770BDFEB50C460746002645E070 +:10A63000204601F09CF9D8B360681C22417901EBF7 +:10A64000810102EBC1014518688900B9FFDF02AB47 +:10A65000082207213846FFF7ACFD002833D00299C5 +:10A66000607816220A70801C487004204880606858 +:10A67000407901F061F901460298052307228180A3 +:10A680006989C1800820CDE9000621463846FFF7D8 +:10A6900050FD6078801C6070A88969890844B0F515 +:10A6A000803F00D3FFDFA88969890844A8816E81B3 +:10A6B000626839492046521DFFF705FD60684179FF +:10A6C0004029B5D10120FEBD30B5438C458BC3F385 +:10A6D000C704002345B1838B641EED1AC38A6D1E27 +:10A6E0001D4495FBF3F3E4B22CB1008918B1A042EC +:10A6F00000D8204603444FF6FF70834200D3034640 +:10A7000013800C7030BD2DE9FC41074616460D46FE +:10A71000486802EB86011C2202EBC10144186A461C +:10A7200001A92046FFF7D0FFA089618901448AB2C0 +:10A73000BDF80010914212D0081A00D500206081A7 +:10A740006868407940280AD1204601F03DF9002888 +:10A7500005D06868294646713846FFF764FFBDE8B2 +:10A76000FC812DE9FE4F894680461546508803211D +:10A7700008F00AF98346B8F8020040280ED24020BB +:10A780000DE000002C0000209DA00000ABA0000008 +:10A79000B9A00000DDB90000C9B90000403880B29E +:10A7A00082460146584601F0E2F800287ED00AEBC6 +:10A7B0008A001C22DBF8041002EBC0000C182046B3 +:10A7C00001F0EBF8002877D1B8F80000E18A884260 +:10A7D0003CD8A189D1B348456ED100265146584690 +:10A7E00001F0B2F8218C0F18608B48B9B9F1020F53 +:10A7F00062D3B8F804006083618A884226D80226B2 +:10A80000A9EB06001FFA80F9B888A28B801A0028ED +:10A8100014DD4946814500DA084683B268886968D4 +:10A82000029139680A44CDE9003208F0DFF9DDE928 +:10A830000121F61D009B009607F0CBFDA18B01EBDB +:10A84000090080B2A083618B884207D9688803B071 +:10A8500052465946BDE8F04F01F0DDB81FD14FF028 +:10A8600009002872B8F802006881D7E90001C5E93B +:10A870000401608BA881284601F054F851465846DF +:10A8800001F062F80146DBF8040008230078C200FA +:10A8900004F1200007F035FF0020A0836083A08929 +:10A8A0000AF0FF02401EA081688800E004E003B0C7 +:10A8B0005946BDE8F04F26E7BDE8FE8F2DE9F0418F +:10A8C000064615460F461C461846F6F7FCFC18B916 +:10A8D0002068F6F71EFD08B1102013E47168688C3B +:10A8E0000978B0EBC10F01D313200BE43946304691 +:10A8F00001F02AF80146706808230078C20005F1CB +:10A90000200007F0C8FED4E90012C0E900120020C0 +:10A91000E3E710B50446032108F036F80146007855 +:10A9200000F00300022805D02046BDE8104001F1E8 +:10A93000140298E48A8A2046BDE81040C7E470B546 +:10A940000446032108F020F8054601462046FFF79B +:10A9500073FD002816D029462046FFF764FE002824 +:10A9600010D029462046FFF722FD00280AD02946AC +:10A970002046FFF7CBFC002804D029462046BDE83E +:10A980007040A9E570BD2DE9F0410C4680461EE0FF +:10A99000E178427811FB02F1CAB2816901230E30DD +:10A9A00007F0AFFE077860681C22C179491EC171AB +:10A9B00007EB8701606802EBC10146183946204663 +:10A9C00000F0D5FF18B1304600F0E0FF20B160681C +:10A9D000C1790029DCD180E7FEF77AFD050000D1BE +:10A9E000FFDF0A202872384600F0A6FF688139464A +:10A9F000204600F0B0FF0146606808234078C2009E +:10AA000006F1240007F07DFED0E90010C5E903102F +:10AA1000A5F80280284600F085FFB07800B9FFDF76 +:10AA2000B078401EB07058E770B50C46054603215B +:10AA300007F0AAFF01464068C2792244C271284645 +:10AA4000BDE870409FE72DE9FE4F824650781446DE +:10AA50000F464FF0000800284FD0012807D00228E9 +:10AA600022D0FFDF2068B8606068F86024E702AB9E +:10AA70000E2208215046FFF79CFB0028F2D00298D6 +:10AA8000152105230170217841700A214180C0F809 +:10AA90000480C0F80880A0F80C80628882810E20B3 +:10AAA000CDE90008082221E0A678304600F044FFF6 +:10AAB000054606EB86012C22786802EBC1010822CC +:10AAC000465A02AB11465046FFF773FB0028C9D027 +:10AAD00002980721017021784170042141800821EA +:10AAE0008580C680CDE9001805230A4639465046C0 +:10AAF000FFF71FFB87F80880DEE6A678022516B16F +:10AB0000022E13D0FFDF2A1D914602AB08215046CA +:10AB1000FFF74FFB0028A5D002980121022E0170FB +:10AB2000217841704580868002D005E00625EAE75D +:10AB3000A188C180E1880181CDE900980523082220 +:10AB400039465046D4E710B50446032107F01CFFF0 +:10AB5000014600F108022046BDE8104073E72DE9E8 +:10AB6000F05F0C4601281DD0957992F80480567943 +:10AB700005EB85011F2202EBC10121F0030B08EB5D +:10AB8000060111FB05F14FF6FF7202EAC10909F156 +:10AB9000030115FB0611F94F21F0031A40B10128FA +:10ABA0003DD124E06168E57891F800804E78DFE7D8 +:10ABB0005946786807F023FD606000B9FFDF594609 +:10ABC00060681AF0C8FDE5705146786807F017FD17 +:10ABD0006168486100B9FFDF6068426902EB090102 +:10ABE0008161606880F800806068467017E0606886 +:10ABF00052464169786807F02DFD5A4661687868C9 +:10AC000007F028FD032007F067FE0446032007F045 +:10AC10006BFE201A012802D1786807F0E5FC0BEBE7 +:10AC20000A00BDE8F09F02460021022097E773B5B5 +:10AC3000D24D0A202870009848B100244FEA0D0038 +:10AC400007F0BFFC002C01D1009969607CBD012494 +:10AC50000020F5E770B50C461546382120461AF05D +:10AC60007AFD012666700A2104F11C001AF073FDBA +:10AC700005B9FFDF297A207861F301002070A879F7 +:10AC8000002817D02A4621460020FFF768FF616898 +:10AC9000402088706168C870616808716168487197 +:10ACA000616888716168288808816168688848815E +:10ACB0006068868170BDC878002802D0002201201B +:10ACC0004DE7704770B50546002165F31F41002030 +:10ACD0000BF074FB0321284607F056FE040000D158 +:10ACE000FFDF21462846FFF767F9002804D02078C7 +:10ACF00040F010002070012070BD2DE9FF4180461A +:10AD00000E460F0CFEF7E4FB050007D06F80032111 +:10AD1000384607F039FE040008D106E004B0384692 +:10AD2000BDE8F0411321F9F74BBEFFDF5FEA0800F1 +:10AD300005D0B8F1060F18D0FFDFBDE8FF812078FD +:10AD40002A4620F0080020700020ADF80200022002 +:10AD50008DF800004FF6FF70ADF80400ADF8060066 +:10AD600069463846F9F723FAE7E7C6F3072101EB0E +:10AD700081021C23606803EBC202805C042803D0BC +:10AD800008280AD0FFDFD8E7012000904FF44043A5 +:10AD90002A46204600F008FECFE704B02A462046A7 +:10ADA000BDE8F041FFF7E7B82DE9F05F0027B0F804 +:10ADB0000A9090460C4605463E46B9F1400F01D236 +:10ADC000402001E0A9F140001FFA80FA287AC01E55 +:10ADD00008286BD2DFE800F00D04192058363C47F4 +:10ADE00072271026002C6CD0D5E90301C4E90201BA +:10ADF0005CE070271226002C63D00A2205F10C01BA +:10AE000004F108001AF04BFC50E071270C26002CCE +:10AE100057D0E868A06049E0742710269CB3D5E9B4 +:10AE20000301C4E902016888032107F0ADFD8346F0 +:10AE3000FEF74EFB02466888508051465846FFF7A1 +:10AE400051F833E075270A26ECB1A88920812DE05E +:10AE500076271426BCB105F10C0004F1080307C8DD +:10AE600083E8070022E07727102664B1D5E90301C3 +:10AE7000C4E902016888032107F086FD014668885D +:10AE8000FFF781FD12E01CE073270826CCB168882B +:10AE9000032107F079FD01460078C00606D56888D1 +:10AEA000FFF78AF810B96888F8F798FDA8F80060ED +:10AEB0002CB12780A4F8069066806888A0800020C6 +:10AEC000AFE6A8F80060FAE72DE9FC410C461E4603 +:10AED00017468046032107F057FD05460A2C0AD283 +:10AEE000DFE804F005050505050509090907042340 +:10AEF00003E0062301E0FFDF0023CDE900762246D0 +:10AF000029464046FFF715F929E438B50546A0F56E +:10AF10007F40FF3830D0284607F068FE040000D19B +:10AF2000FFDF204607F0EDF9002815D001466A46FC +:10AF3000204607F008FA00980321B0F8054028469B +:10AF400007F022FD0546052C03D0402C05D24024F5 +:10AF500004E0007A80B1002038BD403CA4B2214614 +:10AF600000F005FD40B1686804EB84013E2202EB6D +:10AF7000C101405A0028EFD0012038BD2C0000202C +:10AF80002DE9F04F054689B0408807F02FFE0400F8 +:10AF900000D1FFDF06AA2046696800F0C1FC069CCC +:10AFA000001F34F8031F218063886380228881B2E8 +:10AFB0008A4205D1042B0AD0052B1DD0062B15D0B3 +:10AFC0002A462046FFF7CDFB09B0BDE8F08F1646B4 +:10AFD000241D2A4621463046F7F751FA0828F3D1B6 +:10AFE0002A4621463046FCF7FEFBEDE76888211D26 +:10AFF0006B68FAF743FCE7E717466888032107F018 +:10B00000C3FC4FF000088DF804800646ADF80680BA +:10B01000042FD9D36279002AD6D020794FF6FF7950 +:10B020004FF01C0A13282CD008DC012878D0062801 +:10B0300047D0072875D0122874D106E0142872D0A2 +:10B04000152871D016286DD1ACE10C2F6AD130785B +:10B0500000F00301022965D140F0080030706079EA +:10B06000B07001208DF804002089ADF808006089D7 +:10B07000ADF80A00A089ADF80C00E089ADF80E002B +:10B0800019E0B07890429FD1307801079CD5062F07 +:10B090009AD120F0080030706888414660F31F4163 +:10B0A00000200BF08BF902208DF80400ADF8089019 +:10B0B0002089ADF80A0068882A4601A9F9F777F8CF +:10B0C00082E7082F80D12789B4F80A90402F01D257 +:10B0D000402001E0A7F1400080B2804601463046A2 +:10B0E00000F045FC08B3716808EB88002C2202EBE5 +:10B0F000C000095A4945E3D1FE4807AAD0E9021029 +:10B10000CDE9071060798DF81C0008F0FF048DF878 +:10B110001E4068883146FFF796FC2A46214639E0F2 +:10B12000B6E014E03CE039E0E6E0F248D0E9001097 +:10B13000CDE907106079ADF820708DF81C00ADF8EE +:10B140002290688807AA3146FFF77DFC3CE7082F6C +:10B15000B6D16089B4F80880402801D2402000E0D0 +:10B16000403887B23946304600F001FC0028A7D0AD +:10B1700007EB870271680AEBC2000844028A424565 +:10B180009ED1017808299BD140786179884297D176 +:10B19000F9B22A463046FEF7EEFE15E70E2F07D02D +:10B1A000CDF81C80CDF8208060798DF81C00C8E7B0 +:10B1B0006189E7898B46B4F80C903046FEF73DFF75 +:10B1C000ABF14001402901D309204AE0B9F1170F42 +:10B1D00001D3172F01D20B2043E040280ED000EB03 +:10B1E000800271680AEBC20008440178012903D18A +:10B1F000407861798842A9D00A2032E03046FEF7D3 +:10B20000FEFE014640282BD001EB810372680AEB59 +:10B21000C30002EB0008012288F80020627988F858 +:10B220000120706822894089B84200D93846248AB2 +:10B2300003232B72AA82EF812882A5F80C906C82DE +:10B24000084600F079FB6881A8F81490A8F81870F7 +:10B25000A8F80E40A8F810B0284600F063FBB3E64B +:10B26000042005212972A5F80A80E88101212973AB +:10B27000A049D1E90421CDE9072161798DF81C109D +:10B28000ADF81E00688807AA3146FFF7DCFBE3E74C +:10B29000062FE4D3B078904215D13078010712D54B +:10B2A00020F0080030706888414660F31F4100209C +:10B2B0000BF084F802208DF804002089ADF8080016 +:10B2C000ADF80A90F7E604213046FEF7CEFE0446BC +:10B2D0004028C4D00220830300902A4621463046ED +:10B2E00000F062FB4146688864F30F2160F31F4160 +:10B2F00006200BF063F867E60E2FB0D1042130462C +:10B30000FEF7B3FE81464028A9D04146688869F31C +:10B310000F2160F31F4106200BF050F8208A0790A0 +:10B32000E08900907068A7894089B84200D9384602 +:10B330008346B4F80A8020890590484600F0FCFA5C +:10B340006881079840B10220079B00902A46494631 +:10B35000304600F029FB37E6B8F1170F1ED3172F40 +:10B360001CD30420287200986882EF81A5F810B0E1 +:10B37000A5F80C8009EB89020AEBC2007168009AFB +:10B380000C180598A4F81480A4F818B0E281208263 +:10B39000284600F0C7FA0620207015E601200B238E +:10B3A0000090D3E7082FA6D121893046FEF745FE4D +:10B3B000074640289FD007EB870271680AEBC2005E +:10B3C0000844804600F0E9FA002894D16489B8F86E +:10B3D0000E002044B0F5803F05D368883A463146D8 +:10B3E00000F019FBF0E5002C85D0A8F80E00688865 +:10B3F0003A463146FFF7FDF808202872384600F03B +:10B400009BFA6881AC8127E770B50D46064603219B +:10B4100007F0BAFA040004D02078000704D5112000 +:10B4200070BD43F2020070BD2A4621463046FEF749 +:10B430001AFF18B9286860616868A061207840F038 +:10B4400008002070002070BD70B50D46064603212F +:10B4500007F09AFA040004D02078000704D40820EA +:10B4600070BD43F2020070BD2A4621463046FEF709 +:10B470002EFF00B9A582207820F00800207000205F +:10B4800070BD2DE9F04F0E4691B08046032107F0C4 +:10B490007BFA0446404607F0BBFB074600200790B6 +:10B4A00008900990ADF830000A9002900390049043 +:10B4B00004B9FFDF0DF108091FBBFFDF21E03846AB +:10B4C0000BA9002206F0E0FD9DF82C0000F07F059E +:10B4D0000A2D00D3FFDF6019017F491E01779DF817 +:10B4E0002C0000060DD52A460CA907A8FEF711FE70 +:10B4F00002E00000405B020019F80510491C09F841 +:10B500000510761EF6B2DAD204F13400FA4D04F1D9 +:10B51000260BDFF8E8A304F12A07069010E058464E +:10B52000069900F06AFA064628700A2800D3FFDF61 +:10B530005AF8261040468847E08CC05DB04202D0E1 +:10B54000208D0028EBD10A202870EC4D4E4628357E +:10B550000EE00CA907A800F050FA0446375D55F834 +:10B56000240000B9FFDF55F82420394640469047B3 +:10B57000BDF81E000028ECD111B026E510B503215E +:10B5800007F002FA040000D1FFDF0A2104F11C00D9 +:10B590001AF0E1F8207840F00400207010BD10B5DA +:10B5A0000C46032107F0F0F92044007F002800D06A +:10B5B000012010BD2DE9F84F89461546824603212A +:10B5C00007F0E2F9070004D02846F5F77CFE40B901 +:10B5D00003E043F20200BDE8F88F4846F5F799FE14 +:10B5E00008B11020F7E7786828B16988008981429E +:10B5F00001D90920EFE7B9F800001C2418B1402850 +:10B6000009D2402008E03846FEF7F9FC8046402881 +:10B6100019D11320DFE7403880B280460146384612 +:10B6200000F0A5F948B108EB8800796804EBC00088 +:10B63000085C012803D00820CDE70520CBE7FDF703 +:10B6400047FF06000BD008EB8800796804EBC000C8 +:10B650000C18B9F8000020B1E88910B113E01120EE +:10B66000B9E72888172802D36888172801D207204D +:10B67000B1E7686838B12B1D224641463846FFF7CE +:10B680001DF90028A7D104F10C0269462046FFF7F6 +:10B690001BF8288860826888E082B9F8000030B121 +:10B6A00002202070E889A080E889A0B12BE0032067 +:10B6B0002070A889A08078688178402905D180F819 +:10B6C000028039465046FEF721FE404600F034F92C +:10B6D000A9F8000021E07868218B4089884200D9D0 +:10B6E00008462083A6F802A004203072B9F80000B2 +:10B6F0007081E0897082F181208B3082A08AB081D4 +:10B70000304600F00FF97868C178402905D180F8FB +:10B71000038039465046FEF74AFE00205BE770B5CD +:10B720000D460646032107F02FF9040003D0402DF3 +:10B7300004D2402503E043F2020070BD403DADB2AB +:10B74000294600F014F958B105EB85011C22606808 +:10B7500002EBC101084400F020F918B1082070BDC7 +:10B76000052070BD2A462146304600F054F90020DD +:10B7700070BD2DE9F0410D4616468046032107F0C5 +:10B7800003F90446402D01D2402500E0403DADB212 +:10B790008CB1294600F0EBF880B105EB85011C2245 +:10B7A000606802EBC1014718384600F0F6F838B17E +:10B7B0000820BDE8F08143F20200FAE70520F8E72F +:10B7C00033463A4629462046FFF778F80028F0D15C +:10B7D000EAB221464046FEF796FF0020E9E72DE950 +:10B7E000F0410D4616468046032107F0CDF8044689 +:10B7F000402D01D2402500E0403DAFB224B130469B +:10B80000F5F761FD38B902E043F20200D1E7306894 +:10B81000F5F759FD08B11020CBE73946204600F076 +:10B82000A6F860B107EB87011C22606802EBC1013A +:10B830004518284600F0B1F818B10820B9E70520EE +:10B84000B7E7B088A98A884201D90C20B1E76168BE +:10B85000E88C4978B0EBC10F01D31320A9E7394632 +:10B86000204600F078F80146606808234078C2005E +:10B8700005F1240006F00FFFD6E90012C0E900121E +:10B88000FAB221464046FEF7B4FE002091E72DE9CA +:10B89000F0470D461F4690468146032107F074F895 +:10B8A0000446402D01D2402001E0A5F1400086B2BF +:10B8B0003CB14DB13846F5F74AFD50B11020BDE816 +:10B8C000F08743F20200FAE76068C8B1A0F80C8084 +:10B8D00024E03146204600F04AF888B106EB8601A4 +:10B8E0001C22606802EBC1014518284600F055F89B +:10B8F00040B10820E3E700002C000020585B020064 +:10B900000520DCE7A5F80880F2B221464846FEF79C +:10B91000FAFE1FB1A8896989084438800020CEE763 +:10B9200006F011BD017821F00F01491C21F0F00152 +:10B9300010310170FDF7CFBD10B50446402800D985 +:10B94000FFDF4034A0B210BD406842690078484330 +:10B9500002EBC0007047C2784068037812FB03F224 +:10B960004378406901FB032100EBC1007047C278B6 +:10B970008A4209D9406801EB81011C2202EBC10116 +:10B98000405C08B10120704700207047007806280D +:10B9900001D901207047002070470078062801D0A7 +:10B9A0000120704700207047F0B401EB81061C278E +:10B9B000446807EBC6063444049D05262670E380E0 +:10B9C0002571F0BCFEF78EBA10B5418911B1FFF7B1 +:10B9D000DDFF08B1002010BD012010BD10B5C18CE5 +:10B9E0008278B1EBC20F04D9C18911B1FFF7CEFF44 +:10B9F00008B1002010BD012010BD10B50C46012378 +:10BA00000A22011D06F07DFE007821880122824075 +:10BA10009143218010BDF0B402EB82051C264C68D6 +:10BA200006EBC505072363554B681C79402C03D1F1 +:10BA30001A71F0BCFEF700BDF0BC704710B5EFF313 +:10BA4000108000F0010472B6F9484178491C417039 +:10BA50004078012801D10AF0F1F8002C00D162B63B +:10BA600010BD70B5F24CA07848B90125A570FFF75C +:10BA7000E5FF0AF0F4F820B100200AF0BEF800203B +:10BA800070BD4FF08040E570C0F80453F7E770B523 +:10BA9000EFF3108000F0010572B6E54C607800B954 +:10BAA000FFDF6078401E6070607808B90AF0CAF85D +:10BAB000002D00D162B670BDDD4810B5817821B18E +:10BAC0000021C1708170FFF7E2FF002010BD10B5AA +:10BAD00004460AF0C4F8D6498978084000D001200D +:10BAE0002060002010BD10B5FFF7A8FF0AF0B7F8DE +:10BAF00002220123CE49540728B1CE4802602361B7 +:10BB00000320087202E00A72C4F80433002088712E +:10BB100010BD2DE9F05FDFF818934278817889F83D +:10BB20000420002689F80510074689F80660007889 +:10BB3000DFF804B3354620B1012811D0022811D016 +:10BB4000FFDF0AF09EF84FF0804498B10AF0A0F8A9 +:10BB5000B0420FD130460AF09FF80028FAD041E0F9 +:10BB60000126EEE7FFF76AFF58460168C907FCD0D7 +:10BB70000226E6E70120E060C4F80451AF490E60F8 +:10BB80000107D1F84412AD4AC1F3423124321160A9 +:10BB9000AA49343108604FF0020AC4F804A3A06037 +:10BBA000A7480168C94341F3001101F10108016888 +:10BBB00041F01001016000E020BFD4F8040100282A +:10BBC000FAD030460AF068F80028FAD0B8F1000F31 +:10BBD00004D19B48016821F010010160C4F808A35A +:10BBE000C4F8045199F805004E4688B1387878B900 +:10BBF0000AF035F880460AF0C9F901466FF00042B4 +:10BC0000B8F1000F02D0C6E9032101E0C6E9031232 +:10BC1000DBF80000C00701D00AF01DF8387810B139 +:10BC20003572BDE8F09F4FF01808C4F80883C4F8D7 +:10BC30002C510127C4F81870D4F82C010028FBD02F +:10BC4000C4F80C51C4F810517948C01D0AF036F8F8 +:10BC50003570FFF748FF6761784930792031086017 +:10BC6000C4F80483DDE770B5050000D1FFDF4FF0B5 +:10BC700080424FF0FF30C2F808030021C2F80011E3 +:10BC8000C2F80411C2F80C11C2F81011684C6170AE +:10BC900009F0F1FF10B10120A070607066480068E3 +:10BCA000C00701D009F0D7FF2846BDE8704030E753 +:10BCB0005F48007A002800D0012070472DE9FF5F1F +:10BCC0006048D0F800805F4A5F49083211608406FE +:10BCD000D4F8080100B10120D4F8241101B10121E8 +:10BCE0008A46D4F81C1101B101218946D4F82011EB +:10BCF00009B1012700E00027D4F8001101B10121AA +:10BD00008B46D4F8041101B101210391D4F80C1130 +:10BD100001B101210291D4F8101101B10121444D6A +:10BD2000019129780026009120B1C4F80861012012 +:10BD300009F063FFBAF1000F04D0C4F824610920B0 +:10BD400009F05BFFB9F1000F04D0C4F81C610A20B0 +:10BD500009F053FF27B1C4F820610B2009F04DFF13 +:10BD60003348C01D09F0B2FF00B1FFDFDFF8C49017 +:10BD70000127BBF1000F10D0C4F80873E87818B1A0 +:10BD8000EE70002009F039FF287A022805D103203F +:10BD900028720221C9F800102761039808B1C4F87D +:10BDA0000461029850B1C4F80C61287A032800D0CD +:10BDB000FFDFC9F800602F72FFF769FE019838B104 +:10BDC000C4F81061287A012801D100F05DF867619C +:10BDD000009838B12E70287A012801D1FFF783FE30 +:10BDE000FFF755FE1248C01D09F086FF1549091DD1 +:10BDF000C1F80080BDE8FF9F0D4810B5C01D09F0D7 +:10BE000065FF0B4940B1012008704FF0E021C1F8F7 +:10BE10000002BDE8104011E6087A012801D1FFF7C1 +:10BE200062FE0348BDE81040C01D09F065BF000078 +:10BE30003C000020340C00400C0400401805004079 +:10BE400010ED00E0100502400100000170B5224C29 +:10BE5000A07808B909F0F6FE01208507A861207ACC +:10BE6000002603280AD100BFD5F80C0120B9002014 +:10BE700009F012FF0028F7D1C5F80C6126724FF0C7 +:10BE8000FF30C5F8080370BD70B5134C6079F0B190 +:10BE9000012803D0A179401E814218DA09F0DFFEA3 +:10BEA00005460AF073F86179012902D9A179491C84 +:10BEB000A1710DB1216900E0E168411A022902DA9D +:10BEC00011F1020F06DC0DB1206100E0E060BDE879 +:10BED000704008E670BD00003C00002010B5202036 +:10BEE00000F07FF8202000F08DF84D49202081F8E7 +:10BEF0000004F5F783FA4B4908604B48D0F8041367 +:10BF000041F00101C0F80413D0F8041341F080712E +:10BF1000C0F80413424901201C39C1F8000110BDCA +:10BF200010B5202000F05DF83E480021C8380160BF +:10BF3000001D01603D4A481E10603B4AC2F80803DC +:10BF4000384B1960C2F80001C2F860013849086036 +:10BF5000BDE81040202000F055B834493548091F8D +:10BF60000860704731493348086070472D48C83829 +:10BF70000160001D521E026070472C4901200860BC +:10BF8000BFF34F8F70472DE9F0412849D0F8188052 +:10BF900028480860244CD4F800010025244E6F1E68 +:10BFA00028B14046F5F788F940B9002111E0D4F8EE +:10BFB000600198B14046F5F77FF948B1C4F80051E7 +:10BFC000C4F860513760BDE8F041202000F01AB895 +:10BFD00031684046BDE8F04119F0E8BBFFDFBDE83D +:10BFE000F08100280DDB00F01F0201219140400983 +:10BFF000800000F1E020C0F88011BFF34F8FBFF345 +:10C000006F8F7047002809DB00F01F02012191406B +:10C010004009800000F1E020C0F880127047000065 +:10C0200020E000E0C806024000000240180502407F +:10C0300000040240010000010F4A12680D498A42C3 +:10C040000CD118470C4A12680A4B9A4206D101B526 +:10C0500009F06EFFFFF781FFBDE80140074909685D +:10C060000958084706480749054A064B704700002B +:10C0700000000000BEBAFECA5400002004000020E8 +:10C080008013002080130020F8B51D46DDE9064727 +:10C090000E000AD006F0BCFD2346FF1DBCB231469F +:10C0A0002A46009406F0C9F9F8BDD019224619466F +:10C0B00019F0B0FA2046F8BD70B50D4604461021BF +:10C0C00019F027FB258117206081A07B40F00A0032 +:10C0D000A07370BD4FF6FF720A80014602200AF07D +:10C0E0006DB9704700897047827BD30701D19207F1 +:10C0F00003D4808908800020704705207047827B28 +:10C10000920700D58181704701460020098841F6D9 +:10C11000FE52114200D00120704700B50346807BDB +:10C12000C00701D0052000BD59811846FFF7ECFF7C +:10C13000C00703D0987B40F004009873987B40F0D0 +:10C1400001009873002000BD827B520700D509B121 +:10C150004089704717207047827B61F3C302827366 +:10C1600070472DE9FC5F0E46044601789646012093 +:10C1700000FA01F14DF6FF5201EA020962684FF63A +:10C18000FF7B1188594502D10920BDE8FC9FB9F118 +:10C19000000F05D041F6FE55294201D00120F4E7F9 +:10C1A00041EA090111801D0014D000232B7094F87E +:10C1B00000C0052103221F464FF0020ABCF10E0FFA +:10C1C00076D2DFE80CF0F909252F47646B774791A9 +:10C1D00093B4D1D80420D8E7616820898B7B9B0772 +:10C1E00067D517284AD30B89834247D389891729F2 +:10C1F00001D3814242D185F800A0A5F80100328028 +:10C20000616888816068817B21F002018173C6E0EA +:10C21000042028702089A5F801006089A5F8030092 +:10C220003180BCE0208A3188C01D1FFA80F841456A +:10C2300024D3062028702089A5F801006089A5F87C +:10C240000300A089A5F805000721208ACDE9000197 +:10C25000636941E00CF0FF00082810D00820287026 +:10C260002089A5F801006089A5F8030031806A1DC6 +:10C27000694604F10C0008F033F910B15EE01020BB +:10C28000EDE730889DF800100844308087E00A20F0 +:10C2900028702089A5F80100328044E00C20287025 +:10C2A0002089A5F801006089A5F8030031803AE0F3 +:10C2B00082E064E02189338800EB41021FFA82F8B2 +:10C2C00043453BD3B8F1050F38D30E222A700BEA51 +:10C2D0004101CDE90010E36860882A467146FFF706 +:10C2E000D3FEA6F800805AE040202870608931888B +:10C2F000C01C1FFA80F8414520D32878714620F0F1 +:10C300003F00123028702089A5F801006089CDE92E +:10C31000000260882A46E368FFF7B6FEA6F80080B0 +:10C32000287840063BD461682089888037E0A0895E +:10C330003288401D1FFA80F8424501D204273DE0B3 +:10C34000162028702089A5F801006089A5F803004F +:10C35000A089CDE9000160882A4671462369FFF76C +:10C3600093FEA6F80080DEE718202870207A687017 +:10C37000A6F800A013E061680A88920401D405279A +:10C380001CE0C9882289914201D0062716E01E21AF +:10C39000297030806068018821F400510180B9F172 +:10C3A000000F0BD0618878230022022009F05CFF87 +:10C3B00061682078887006E0338003276068018810 +:10C3C00021EA090101803846DFE62DE9FF4F85B0FB +:10C3D0001746129C0D001E461CD03078C10703D0B2 +:10C3E00000F03F00192801D9012100E0002120467A +:10C3F000FFF7AAFEA8420DD32088A0F57F41FF39A0 +:10C4000008D03078410601D4000605D5082009B0CF +:10C41000BDE8F08F0720FAE700208DF800008DF8C6 +:10C42000010030786B1E00F03F0C0121A81E4FF078 +:10C43000050A4FF002094FF0030B9AB2BCF1200F2E +:10C4400075D2DFE80CF08B10745E7468748C749C89 +:10C4500074B674BB74C974D574E2747474F274F0F5 +:10C4600074EF74EE748B052D78D18DF80090A07860 +:10C470008DF804007088ADF8060030798DF8010061 +:10C48000707800F03F000C2829D00ADCA0F10200EF +:10C49000092863D2DFE800F0126215621A621D6299 +:10C4A0002000122824D004DC0E281BD01028DBD159 +:10C4B0001BE016281FD01828D6D11FE0207880074F +:10C4C00001E020784007002848DAEFE020780007F4 +:10C4D000F9E72078C006F6E720788006F3E72078B1 +:10C4E0004006F0E720780006EDE72088C005EAE77F +:10C4F00020884005E7E720880005E4E72088C0049D +:10C50000E1E72078800729D5032D27D18DF800B0E9 +:10C51000B6F8010082E0217849071FD5062D1DD30A +:10C5200081B27078012803D0022817D102E0CAE056 +:10C53000022000E0102004228DF8002072788DF88F +:10C540000420801CB1FBF0F2ADF8062092B2424309 +:10C550008A4203D10397ADF80890A7E07AE02078EB +:10C56000000777D598B282088DF800A0ADF80420B6 +:10C57000B0EB820F6ED10297ADF8061096E02178ED +:10C58000C90667D5022D65D381B206208DF800005B +:10C59000707802285ED300BFB1FBF0F28DF8040082 +:10C5A000ADF8062092B242438A4253D1ADF80890CA +:10C5B0007BE0207880064DD5072003E020784006F8 +:10C5C0007FD508208DF80000A088ADF80400ADF8F4 +:10C5D0000620ADF8081068E02078000671D5092023 +:10C5E000ADF804208DF80000ADF8061002975DE06C +:10C5F0002188C90565D5022D63D381B20A208DF843 +:10C600000000707804285CD3C6E72088400558D520 +:10C61000012D56D10B208DF80000A088ADF8040044 +:10C6200044E021E026E016E0FFE72088000548D539 +:10C63000052D46D30C208DF80000A088ADF804002D +:10C64000B6F803006D1FADF80850ADF80600ADF860 +:10C650000AA02AE035E02088C00432D5012D30D16F +:10C660000D208DF8000021E02088800429D4B6F840 +:10C670000100E080A07B000723D5032D21D3307873 +:10C6800000F03F001B2818D00F208DF800002088F4 +:10C6900040F40050A4F80000B6F80100ADF8040022 +:10C6A000ED1EADF80650ADF808B003976946059841 +:10C6B000F5F730FC050008D016E00E208DF80000DC +:10C6C000EAE7072510E008250EE0307800F03F008B +:10C6D0001B2809D01D2807D00220059909F06EFEFD +:10C6E000208800F400502080A07B400708D5204619 +:10C6F000FFF70AFDC00703D1A07B20F00400A07360 +:10C70000284684E61FB5022806D101208DF80000D6 +:10C7100088B26946F5F7FEFB1FBD0000F8B51D465F +:10C72000DDE906470E000AD006F072FA2346FF1D27 +:10C73000BCB231462A46009405F07FFEF8BDD01900 +:10C740002246194618F066FF2046F8BD2DE9FF4F36 +:10C750008DB09B46DDE91B57DDF87CA00C46082B0D +:10C7600005D0E06901F002F950B11020D2E028882C +:10C77000092140F0100028808AF80010022617E0F6 +:10C78000E16901208871E2694FF420519180E169EB +:10C790008872E06942F601010181E069002181733C +:10C7A0002888112140F0200028808AF800100426F3 +:10C7B00038780A900A2038704FF0020904F1180006 +:10C7C0004D460C9001F095FBB04681E0BBF1100F97 +:10C7D0000ED1022D0CD0A9EB0800801C80B20221E2 +:10C7E000CDE9001005AB52461E990D98FFF796FF54 +:10C7F000BDF816101A98814203D9F74800790F90B6 +:10C8000004E003D10A9808B138702FE04FF002011C +:10C81000CDE900190DF1160352461E990D98FFF748 +:10C820007DFF1D980088401B801B83B2C6F1FF006E +:10C83000984200D203461E990BA8D9B15FF00002BE +:10C84000DDF878C0CDE9032009EB060189B2CDE916 +:10C8500001C10F980090BDF8161000220D9801F04C +:10C86000CBFB387070B1C0B2832807D0BDF816007A +:10C8700020833AE00AEB09018A19E1E7022011B0AE +:10C88000BDE8F08FBDF82C00811901F0FF08022DE2 +:10C890000DD09AF80120424506D1BDF82010814202 +:10C8A00007D0B8F1FF0F04D09AF801801FE08AF892 +:10C8B0000180C94800680178052902D1BDF8161029 +:10C8C000818009EB08001FFA80F905EB080085B2AA +:10C8D000DDE90C1005AB0F9A01F00EFB28B91D988D +:10C8E0000088411B4145BFF671AF022D13D0BBF14B +:10C8F000100F0CD1A9EB0800801C81B20220CDE9F9 +:10C90000000105AB52461E990D98FFF707FF1D98D1 +:10C910000580002038700020B1E72DE9F8439C46DF +:10C92000089E13460027B26B9AB3491F8CB2F18F51 +:10C93000A1F57F45FF3D05D05518AD882944891DD7 +:10C940008DB200E000252919B6F83C800831414538 +:10C9500020D82A44BCF8011022F8021BBCF80310AE +:10C9600022F8021B984622F8024B914606F03EF947 +:10C970004FF00C0C41464A462346CDF800C005F066 +:10C9800028FDF587B16B00202944A41D21440880AF +:10C9900003E001E0092700E083273846BDE8F8837B +:10C9A00010B50B88848F9C420CD9846BE0180488E6 +:10C9B00044B1848824F40044A41D23440B801060F7 +:10C9C000002010BD0A2010BD2DE9F0478AB00025D7 +:10C9D000904689468246ADF8185007274BE00598E7 +:10C9E00006888088000446D4A8F8006007A801954E +:10C9F00000970295CDE903504FF4007300223146B1 +:10CA0000504601F0F9FA04003CD1BDF81800ADF829 +:10CA10002000059804888188B44216D10A0414D4F1 +:10CA200001950295039521F400410097049541F486 +:10CA3000804342882146504601F0B4F804000BD1EF +:10CA40000598818841F40041818005AA08A94846DB +:10CA5000FFF7A6FF0400DCD000970598029501952A +:10CA6000039504950188BDF81C300022504601F062 +:10CA700099F80A2C06D105AA06A94846FFF790FFA7 +:10CA80000400ACD0ADF8185004E00598818821F47A +:10CA90000041818005AA06A94846FFF781FF0028CA +:10CAA000F3D00A2C03D020460AB0BDE8F08700205E +:10CAB000FAE710B50C46896B86B051B10C218DF8A0 +:10CAC0000010A18FADF80810A16B01916946FAF72B +:10CAD00022FB00204FF6FF71A063E187A08706B01C +:10CAE00010BD2DE9F0410D460746896B0020069EDA +:10CAF0001446002911D0012B0FD132462946384661 +:10CB0000FFF762FF002808D1002C06D032462946E4 +:10CB10003846BDE8F04100F038BFBDE8F0812DE9AE +:10CB2000FC411446DDE9087C0E46DDE90A15521D7C +:10CB3000BCF800E092B2964502D20720BDE8FC8125 +:10CB4000ACF8002017222A70A5F80160A5F8033080 +:10CB50000522CDE900423B462A46FFF7DFFD0020D3 +:10CB6000ECE770B50C4615464821204618F0F3FD59 +:10CB700004F1080044F81C0F00204FF6FF71E0613B +:10CB800061842084A5841720E08494F82A0040F072 +:10CB90000A0084F82A0070BD4FF6FF720A80014631 +:10CBA000032009F00BBC30B585B00C460546FFF7F5 +:10CBB00080FFA18E284629B101218DF80010694619 +:10CBC000FAF7A9FA0020E0622063606305B030BD87 +:10CBD000B0F84000704700005800002090F8462050 +:10CBE000920703D4408808800020F3E70620F1E78D +:10CBF00090F846209207EDD5A0F84410EAE70146E8 +:10CC0000002009880A0700D5012011F0F00F01D09B +:10CC100040F00200CA0501D540F004008A0501D5A4 +:10CC200040F008004A0501D540F010000905D1D5B3 +:10CC300040F02000CEE700B5034690F84600C0075C +:10CC400001D0062000BDA3F842101846FFF7D7FF19 +:10CC500010F03E0F05D093F8460040F0040083F832 +:10CC6000460013F8460F40F001001870002000BD88 +:10CC700090F84620520700D511B1B0F84200A9E75C +:10CC80001720A7E710F8462F61F3C3020270A1E74F +:10CC90002DE9FF4F9BB00E00DDE92B34DDE929784B +:10CCA000289D24D02878C10703D000F03F00192820 +:10CCB00001D9012100E000212046FFF7D9FFB04251 +:10CCC00015D32878410600F03F010CD41E290CD062 +:10CCD000218811F47F6F0AD13A8842B1A1F57F42D1 +:10CCE000FF3A04D001E0122901D1000602D5042048 +:10CCF0001FB0C5E5F9491D984FF0000A08718DF87D +:10CD000018A08DF83CA00FAA0A60ADF81CA0ADF8E1 +:10CD100050A02978994601F03F02701F5B1C04F176 +:10CD2000180C4FF0060E4FF0040BCDF858C01F2A18 +:10CD30007ED2DFE802F07D7D107D267DAC7DF47D26 +:10CD4000F37DF27DF17DF47DF07D7D7DEF7DEE7DE7 +:10CD50007D7D7D7DED0094F84610B5F801008907D2 +:10CD600001D5032E02D08DF818B022E34FF40061F4 +:10CD7000ADF85010608003218DF83C10ADF84000F4 +:10CD8000D8E2052EEFD1B5F801002083ADF81C00E4 +:10CD9000B5F80310618308B1884201D901207FE111 +:10CDA0000020A07220814FF6FF702084169801F0B9 +:10CDB000A0F8052089F800000220029083460AAB03 +:10CDC0001D9A16991B9801F097F890BB9DF82E00BC +:10CDD000012804D0022089F80100102003E001207E +:10CDE00089F8010002200590002203A90BA807F092 +:10CDF00077FBE8BB9DF80C00059981423DD13A884C +:10CE0000801CA2EB0B01814237DB02990220CDE9A5 +:10CE100000010DF12A034A4641461B98FFF77EFCAC +:10CE200002980BF1020B801C80B217AA03A901E043 +:10CE3000A0E228E002900BA807F052FB02999DF8AF +:10CE40000C00CDE9000117AB4A4641461B98FFF79D +:10CE500065FC9DF80C100AAB0BEB01001FFA80FB80 +:10CE600002981D9A084480B2029016991B9800E01F +:10CE700003E001F041F80028B6D0BBF1020F02D068 +:10CE8000A7F800B053E20A208DF818004FE2002105 +:10CE90000391072EFFF467AFB5F801002083ADF8CA +:10CEA0001C00B5F80320628300283FF477AF90425E +:10CEB0003FF674AF0120A072B5F805002081002074 +:10CEC000A073E06900F052FD78B9E1690120887132 +:10CED000E2694FF420519180E1698872E06942F67D +:10CEE00001010181E06900218173F01F20841E98F7 +:10CEF000606207206084169800F0FBFF072089F825 +:10CF000000000120049002900020ADF82A0028E0E3 +:10CF10001DE2A3E13AE1EAE016E2AEE086E049E094 +:10CF20000298012814D0E0698079012803D1BDF866 +:10CF30002800ADF80E00049803ABCDE900B04A46D6 +:10CF400041461B98FFF7EAFB0498001D80B204904D +:10CF5000BDF82A00ADF80C00ADF80E00059880B2BF +:10CF600002900AAB1D9A16991B9800F0C5FF28B9CC +:10CF700002983988001D05908142D1D2029801287B +:10CF800081D0E0698079012805D0BDF82810A1F58D +:10CF90007F40FF3803D1BDF82800ADF80E0004989B +:10CFA00003ABCDE900B04A4641461B98FFF7B6FBFC +:10CFB0000298BBE1072E02D0152E7FF4D4AEB5F84F +:10CFC00001102183ADF81C10B5F8032062830029FD +:10CFD0003FF4E4AE91423FF6E1AE0121A1724FF081 +:10CFE000000BA4F808B084F80EB0052E07D0C0B22C +:10CFF000691DE26907F055FA00287FF444AF4FF647 +:10D00000FF70208401A906AA14A8CDF800B081E819 +:10D0100085032878214600F03F031D9A1B98FFF7EF +:10D0200095FB8246208BADF81C0080E10120032E89 +:10D03000C3D14021ADF85010B5F801102183ADF8EF +:10D040001C100AAAB8F1000F00D00023CDE902039A +:10D0500004921D98CDF80480009038880022401E6C +:10D0600083B21B9800F0C8FF8DF8180090BB0B200E +:10D0700089F80000BDF8280037E04FF0010C052EBC +:10D080009BD18020ADF85000B5F801102183B5F890 +:10D0900003002084ADF81C10B0F5007F03D90720F1 +:10D0A0008DF8180085E140F47C4222840CA8B8F188 +:10D0B000000F00D00023CDE90330CDE9018C1D988D +:10D0C00000903888401E83B21B9800F095FF8DF8C1 +:10D0D000180028B18328A8D10220BDE05800002004 +:10D0E0000D2189F80010BDF83000401C1EE1032E10 +:10D0F00004D248067FF537AE002017E1B5F80110DD +:10D10000ADF81C102878400602D58DF83CE002E00E +:10D1100007208DF83C004FF000080320CDE90208FD +:10D120001E9BCDF810801D980193A6F1030B009073 +:10D130001FFA8BF342461B9800F034FD8DF818005F +:10D140008DF83C80297849060DD52088C00506D584 +:10D15000208BBDF81C10884201D1C4F824804046C1 +:10D160008DF81880E2E0832801D14FF0020A4FF4D5 +:10D170008070ADF85000BDF81C002083A4F820B0EA +:10D180001E986062032060841321CCE0052EFFF41A +:10D19000EAADB5F80110ADF81C10A28F62B3A2F58C +:10D1A0007F43FE3B28D008228DF83C204FF0000B37 +:10D1B0000523CDE9023BDDF878C0CDF810B01D9A0B +:10D1C00080B2CDF804C040F400430092B5F80320CB +:10D1D0001B9800F0E7FC8DF83CB04FF400718DF81F +:10D1E0001800ADF85010832810D0F8B1A18FA1F528 +:10D1F0007F40FE3807D0DCE00B228DF83C204FF654 +:10D20000FE72A287D2E7A4F83CB0D2E000942B468D +:10D2100031461E9A1B98FFF780FB8DF8180008B165 +:10D2200083284BD1BDF81C00208355E700942B4682 +:10D2300031461E9A1B98FFF770FB8DF81800E8BB6B +:10D24000E18FA06B0844811D8DE8820343888288AA +:10D2500001881B98FFF763FC824668E095F801801F +:10D26000022E70D15FEA080002D0B8F1010F6AD136 +:10D2700009208DF83C0007A800908DF840804346B7 +:10D28000002221461B98FFF72CFC8DF842004FF03E +:10D29000000B8DF843B050B9B8F1010F12D0B8F1BE +:10D2A000000F04D1A18FA1F57F40FF380AD0A08FD5 +:10D2B00040B18DF83CB04FF4806000E037E0ADF84D +:10D2C00050000DE00FA91B98F9F725FF82468DF855 +:10D2D0003CB04FF48060ADF85000BAF1020F06D0B8 +:10D2E000FC480068C07928B18DF8180027E0A4F840 +:10D2F000188044E0BAF1000F03D081208DF81800A7 +:10D300003DE007A800904346012221461B98FFF705 +:10D31000E8FB8DF8180021461B98FFF7CAFB9DF823 +:10D32000180020B9192189F80010012038809DF8D3 +:10D330003C0020B10FA91B98F9F7EDFE8246BAF127 +:10D34000000F33D01BE018E08DF818E031E02078B2 +:10D35000000712D5012E10D10A208DF83C00E0887C +:10D36000ADF8400003201B9909F028F80820ADF81B +:10D370005000C1E648067FF5F6AC4FF0040A20885D +:10D38000BDF8501008432080BDF8500080050BD533 +:10D39000A18FA1F57F40FE3806D11E98E062289843 +:10D3A0002063A6864FF0030A5046A1E49DF81800BA +:10D3B00078B1012089F80000297889F80110BDF8BA +:10D3C0001C10A9F802109DF8181089F80410052007 +:10D3D00038802088BDF8501088432080E4E72DE98C +:10D3E000FF4F8846087895B0012181404FF209002F +:10D3F000249C0140ADF820102088DDF88890A0F52D +:10D400007F424FF0000AFF3A06D039B1000705D538 +:10D41000012019B0BDE8F08F0820FAE7239E4FF0F5 +:10D42000000B0EA886F800B018995D460988ADF883 +:10D430003410A8498DF81CB0179A0A718DF838B0CD +:10D44000086098F8000001283BD0022809D0032882 +:10D450006FD1307820F03F001D303070B8F80400F4 +:10D46000E08098F800100320022904D1317821F0DF +:10D470003F011B31317094F84610090759D505ABAF +:10D48000B9F1000F13D0002102AA82E80B00072097 +:10D49000CDE90009BDF83400B8F80410C01E83B20D +:10D4A0000022159800F0A8FD0028D1D101E0F11C60 +:10D4B000EAE7B8F80400A6F80100BDF81400C01CA3 +:10D4C00004E198F805108DF81C1098F80400012864 +:10D4D00006D04FF4007A02282CD00328B8D16CE192 +:10D4E0002188B8F8080011F40061ADF8201020D0B0 +:10D4F00017281CD3B4F84010814218D3B4F8441054 +:10D50000172901D3814212D1317821F03F01C91C82 +:10D510003170A6F801000321ADF83410A4F84400DE +:10D5200094F8460020F0020084F8460065E10525E5 +:10D530007EE177E1208808F1080700F4FE60ADF88D +:10D54000200010F0F00F1BD010F0C00F03D038886F +:10D55000228B9042EBD199B9B878C00710D0B96846 +:10D560000720CDE902B1CDF804B00090CDF810B09D +:10D57000FB88BA883988159800F014FB0028D6D1AA +:10D580002398BDF82010401C80294ED006DC1029BD +:10D590000DD020290BD0402987D124E0B1F5807F20 +:10D5A0006ED051457ED0B1F5806F97D1DEE0C806D0 +:10D5B00001D5082000E0102082460DA907AA052009 +:10D5C000CDE902218DF83800ADF83CB0CDE90496E4 +:10D5D00008A93888CDE9000153460722214615984D +:10D5E000FFF7B4F8A8E09DF81C2001214FF00A0ACB +:10D5F000002A9BD105ABB9F1000F00D00020CDE986 +:10D6000002100720CDE90009BDF834000493401E44 +:10D6100083B2218B0022159800F0EEFC8DF81C00DF +:10D620000B203070BDF8140020E09DF81C20012173 +:10D630004FF00C0A002A22D113ABB9F1000F00D031 +:10D640000020CDE902100720CDE900090493BDF8C0 +:10D650003400228C401E83B2218B159800F0CCFC44 +:10D660008DF81C000D203070BDF84C00401CADF84A +:10D67000340005208DF83800208BADF83C00BCE06C +:10D680003888218B88427FF452AF9DF81C004FF000 +:10D69000120A00281CD1606AA8B1B878C0073FF40C +:10D6A00046AF00E018E0BA680720CDE902B2CDF835 +:10D6B00004B00090CDF810B0FB88BA88159800F03F +:10D6C00071FA8DF81C00132030700120ADF8340081 +:10D6D00093E00000580000203988208B8142D2D18D +:10D6E0009DF81C004FF0160A0028A06B08D0E0B38C +:10D6F0004FF6FF7000215F46ADF808B0019027E0BB +:10D7000068B1B978C907BED1E18F0DAB0844821D5D +:10D7100003968DE80C0243888288018809E0B87876 +:10D72000C007BCD0BA680DAB03968DE80C02BB886D +:10D73000FA881598FFF7F3F905005ED0072D72D02F +:10D7400076E0019005AA02A92046FFF729F90146D3 +:10D75000E28FBDF80800824201D00029F1D0E08FAD +:10D76000A16B084407800198E08746E09DF81C0003 +:10D770004FF0180A40B1208BC8B138882083214669 +:10D780001598FFF796F938E004F118000090237E11 +:10D79000012221461598FFF7A4F98DF81C000028F6 +:10D7A000EDD1192030700120ADF83400E7E70525F0 +:10D7B00021461598FFF77DF93AE0208800F40070C3 +:10D7C000ADF8200050452DD1A08FA0F57F41FE3946 +:10D7D00001D006252CE0D8F808004FF0160A48B111 +:10D7E000A063B8F80C10A1874FF6FF71E187A0F88D +:10D7F00000B002E04FF6FF70A087BDF8200030F4C3 +:10D800007F611AD0782300220320159908F02CFD9F +:10D8100098F8000020712088BDF82010084320806F +:10D820000EE000E007252088BDF820108843208006 +:10D83000208810F47F6F1CD03AE02188814321803A +:10D840009DF8380020B10EA91598F9F764FC05463B +:10D850009DF81C000028EBD086F801A00120307054 +:10D86000208B70809DF81C0030710520ADF83400CD +:10D87000DEE7A18EE1B118980DAB0088ADF8340059 +:10D880002398CDE90304CDE90139206B0090E36AC8 +:10D89000179A1598FFF7FCF9054601208DF8380016 +:10D8A0000EA91598F9F737FC00B10546A4F834B075 +:10D8B00094F8460040070AD52046FFF7A0F910F07B +:10D8C0003E0F04D114F8460F20F004002070189881 +:10D8D000BDF83410018028469BE500B585B00328CB +:10D8E00006D102208DF8000088B26946F9F713FCD2 +:10D8F00005B000BD10B5384C0B782268012B02D062 +:10D90000022B2AD111E013780BB1052B01D104238E +:10D91000137023688A889A802268CB88D380226813 +:10D920000B891381498951810DE08B88938022688E +:10D93000CB88D38022680B8913814B8953818B89D3 +:10D940009381096911612168F9F7E5FB22680021DB +:10D950000228117003D0002800D0812010BD832040 +:10D9600010BD806B002800D001207047817801290C +:10D9700009D10088B0F5205F03D042F6010188424A +:10D9800001D10020704707207047F0B587B0002410 +:10D9900015460E460746ADF8184011E00598008878 +:10D9A000288005980194811DCDE902410721049446 +:10D9B0000091838842880188384600F0F3F830B936 +:10D9C00005AA06A93046FEF7EBFF0028E6D00A2894 +:10D9D00000D1002007B0F0BD5800002010B58B78B2 +:10D9E00083B102789A4205D10B885BB102E08B7952 +:10D9F000091D4BB18B789A42F9D1B0F801300C88EF +:10DA0000A342F4D1002010BD812010BD072826D0EC +:10DA100012B1012A27D103E0497801F0070102E0A1 +:10DA20004978C1F3C20105291DD2DFE801F00318CE +:10DA3000080C12000AB10320704702207047042826 +:10DA40000DD250B10DE0052809D2801E022808D35E +:10DA500003E0062803D0032803D0052070470020E8 +:10DA600070470F20704781207047C0B282060BD4E8 +:10DA7000000607D5FE48807A4143C01D01EBD00067 +:10DA800080B27047084670470020704770B5138811 +:10DA90000B800B781C0625D5F54CA47A844204D85B +:10DAA00043F010000870002070BD956800F0070674 +:10DAB00005EBD0052D78F54065F304130B70137852 +:10DAC000D17803F0030341EA032140F20123B1FBC3 +:10DAD000F3F503FB15119268E41D00FB012000EB38 +:10DAE000D40070BD906870BD37B51446BDF8041001 +:10DAF00011809DF804100A061ED5C1F30013DC49FD +:10DB0000A568897A814208D8FE2811D1C91DC908A3 +:10DB10005A42284617F0F5FD0AE005EBD00100F067 +:10DB20000702012508789540A843934018430870E0 +:10DB3000207820F0100020703EBD2DE9F04107460E +:10DB4000C81C0E4620F00300B04202D08620BDE87B +:10DB5000F081C74D002034462E60AF802881AA7224 +:10DB6000E8801AE0E988491CE980810614D4E1784C +:10DB700000F0030041EA002040F20121B0FBF1F285 +:10DB800001FB12012068FFF770FF2989084480B269 +:10DB90002881381A3044A0600C3420784107E1D441 +:10DBA0000020D4E72DE9FF4F89B01646DDE9168A3B +:10DBB0000F46994623F44045084600F00DFB04004B +:10DBC0000FD0099804F0A6FE0290207800060AD52E +:10DBD000A748817A0298814205D887200DB0BDE818 +:10DBE000F08F0120FAE7224601A90298FFF74EFFC5 +:10DBF000834600208DF80C004046B8F1070F1AD07C +:10DC000001222146FFF702FF0028E7D120784006D5 +:10DC100011D502208DF80C00ADF81070BDF804008D +:10DC2000ADF81200ADF814601898ADF81650CDF8A4 +:10DC30001CA0ADF818005FEA094004D500252E4667 +:10DC4000A84601270CE02178E07801F0030140EAC2 +:10DC5000012040F20121B0FBF1F2804601FB128766 +:10DC60005FEA494009D5B84507D1A178207901F08C +:10DC7000030140EA0120B04201D3BE4201D907208E +:10DC8000ACE7A8191FFA80F9B94501D90D20A5E71D +:10DC90009DF80C0028B103A90998F9F73AFA002871 +:10DCA0009CD1B84507D1A0784FEA192161F3010052 +:10DCB000A07084F804901A9800B10580199850EA71 +:10DCC0000A0027D0199830B10BEB06002A461999A3 +:10DCD00017F0A0FC0EE00BEB06085746189E0998BB +:10DCE00004F084FF2B46F61DB5B239464246009536 +:10DCF00004F06FFB224601A90298FFF7C7FE9DF8CA +:10DD00000400224620F010008DF80400DDE9011027 +:10DD1000FFF7EAFE002061E72DE9FF4FDFF85091A1 +:10DD200082461746B9F80610D9F8000001EB410108 +:10DD300000EB810440F20120B2FBF0F185B000FB62 +:10DD400011764D46DDF84C8031460698FFF78DFE82 +:10DD500029682A898B46611A0C3101441144AB8829 +:10DD600089B28B4202D8842009B038E70699CDB237 +:10DD7000290603D5A90601D50620F5E7B9F806C09E +:10DD80000CF1010C1FFA8CFCA9F806C0149909B11A +:10DD9000A1F800C0A90602D5C4F8088007E0104425 +:10DDA00080B2A9F80800191A01EB0B00A060224606 +:10DDB000FE200699FFF798FEE77026712078390A51 +:10DDC00061F30100320AA17840F0040062F301011E +:10DDD000A17020709AF802006071BAF80000E0802B +:10DDE00000262673280602D599F80A7000E001275C +:10DDF000A80601D54FF000084D4600244FF0070952 +:10DE00000FE0CDE902680196CDF800900496E9880C +:10DE10002046129B089AFFF7C5FE0028A4D1641C77 +:10DE2000E4B2BC42EDD300209EE72DE9F0478046E6 +:10DE300000F0D2F9070005D0002644460C4D40F210 +:10DE4000012919E00120BDE8F087204600F0C4F95F +:10DE50000278C17802F0030241EA0222B2FBF9F330 +:10DE600009FB13210068FFF700FE304486B201E091 +:10DE7000F4050020641CA4B2E988601E8142E4DC41 +:10DE8000A8F10100E8802889801B288100203870D3 +:10DE9000D9E710B5144631B1491E218004F03AFD8E +:10DEA000A070002010BD012010BD10B5D24904465D +:10DEB0000088CA88904201D30A2010BD096800EB8F +:10DEC000400001EB80025079A072D08820819178C7 +:10DED000107901F0030140EA0120A081A078E11C43 +:10DEE000FFF7D4FD20612088401C2080E0800020C6 +:10DEF00010BD0121018270472DE9FF4F85B04FF61B +:10DF0000FF788246A3F8008048681F460D46807857 +:10DF10008DF8060048680088ADF8040000208DF8F0 +:10DF20000A00088A0C88A04200D304462C8241E0F3 +:10DF3000288A401C2882701D6968FFF74FFDB8BB16 +:10DF40003988414501D1601E38806888A04236D3A7 +:10DF5000B178307901F0030140EA012901A9701D6F +:10DF6000FFF73CFD20BB298941452CD000223146DA +:10DF70000798FFF74BFDD8B92989494518D1E968B9 +:10DF80000391B5F80AC0D6F808B05046CDF800C0E5 +:10DF900004F02CFEDDF800C05A460CF1070C1FFA05 +:10DFA0008CFC4B460399CDF800C004F0DCF950B16D +:10DFB000641CA4B2204600F00FF90600B8D1641E1C +:10DFC0002C820A20D0E67C807079B871F088B88005 +:10DFD0003178F07801F0030140EA01207881A7F858 +:10DFE0000C90504604F096FC324607F10801FFF70A +:10DFF0004DFD38610020B7E62DE9FF4F87B081461F +:10E000001C469246DDF860B0DDF85480089800F0B8 +:10E01000E3F805000CD0484604F07CFC297809069A +:10E0200008D57549897A814204D887200BB0D6E596 +:10E030000120FBE7CAF309062A4601A9FFF726FDDE +:10E040000746149807281CD000222946FFF7DEFC5B +:10E050000028EBD12878400613D501208DF8080060 +:10E060000898ADF80C00BDF80400ADF80E00ADF84E +:10E070001060ADF8124002A94846F9F74AF80028A6 +:10E08000D4D12978E87801F0030140EA0121AA7887 +:10E09000287902F0030240EA0220564507D0B1F584 +:10E0A000007F04D9611E814201DD0B20BEE786425C +:10E0B00001D90720BAE7801B85B2A54200D92546C1 +:10E0C000BBF1000F01D0ABF80050179818B1B91987 +:10E0D0002A4617F09FFAB8F1000F0DD03E4448468B +:10E0E0004446169F04F094FD2146FF1DBCB2324603 +:10E0F0002B46009404F0A1F9002097E72DE9F041A8 +:10E1000007461D461646084600F066F804000BD088 +:10E11000384604F0FFFB2178090607D53649897A8D +:10E12000814203D8872012E5012010E522463146BE +:10E13000FFF7ACFC65B12178E07801F0030140EA1B +:10E140000120B0F5007F01D8012000E000202870F8 +:10E150000020FCE42DE9F04107461D46164608461E +:10E1600000F03AF804000BD0384604F0D3FB2178D5 +:10E17000090607D52049897A814203D88720E6E439 +:10E180000120E4E422463146FFF7AEFCFF2D14D017 +:10E190002178E07801F0030240EA022040F20122F7 +:10E1A000B0FBF2F302FB130015B900F2012080B2BC +:10E1B000E070000A60F3010121700020C7E410B58F +:10E1C0000C4600F009F828B1C18821804079A07080 +:10E1D000002010BD012010BD0749CA88824209D322 +:10E1E00040B1096800EB40006FF00B0202EB8000C9 +:10E1F0000844704700207047F405002010B508F06F +:10E20000C3FAF4F753FB08F025F9BDE8104008F015 +:10E21000EDB9302834BF012000207047202834BFDA +:10E220004FF0A0420C4A012300F01F0003FA00F057 +:10E23000002914BFC2F80C05C2F808057047202851 +:10E2400034BF4FF0A041044900F01F00012202FA40 +:10E2500000F0C1F8180570470003005070B5034680 +:10E26000002002466FF02F050EE09C5CA4F1300602 +:10E270000A2E02D34FF0FF3070BD00EB800005EB9B +:10E280004000521C2044D2B28A42EED370BD30B559 +:10E290000A230BE0B0FBF3F403FB1404B0FBF3F030 +:10E2A0008D183034521E05F8014CD2B2002AF1D13B +:10E2B00030BD30B500234FF6FF7510E0040A44EA84 +:10E2C000002084B2C85C6040C0F30314604005EADB +:10E2D00000344440E0B25B1C84EA40109BB293429D +:10E2E000ECD330BD2DE9F041FA4B0026012793F81D +:10E2F00060501C7893F864C0B8B183F88D40A3F8DF +:10E300008E1083F88C2083F88A70BCF1000F0CBF4C +:10E3100083F8906083F89050EF488068008804F09C +:10E3200065FCBDE8F04104F0FBB84FF6FF7083F8E0 +:10E330008D40A3F88E0083F88C2083F88A70BCF19E +:10E34000000F14BF83F8905083F89060BDE8F0810F +:10E3500070B5E14E0446306890F898100025012908 +:10E3600019D090F89210012924D090F86810012952 +:10E370002AD090F88A1001291CBF002070BD65705A +:10E3800017212170D0F88C106160B0F890102181B5 +:10E3900080F88A5016E065701C212170D0F8991021 +:10E3A0006160D0F89D10A16090F8A110217380F8F1 +:10E3B000985007E0657007212170D0F894106160D3 +:10E3C00080F89250012070BD65701421217000F119 +:10E3D0006A012022201D17F01DF9012121723068E9 +:10E3E00080F86850BB48B0F86C20A0F89420B26860 +:10E3F000537B80F8963080F89210108804F0F6FB7A +:10E4000004F09DF8DEE7B448006890F86810002931 +:10E4100014BFB0F86C004FF6FF70704770B5AE4C8B +:10E4200006462068002808BFFFDF002520684570E9 +:10E430006660002808BFFFDF2068417800291CBF04 +:10E44000FFDF70BDA42117F086F92068FF2101705D +:10E450007F2180F8361013214184282180F865102F +:10E46000012180F8581080F85D5008F0C3FDBDE828 +:10E47000704008F01CB898490968097881420CBFBF +:10E480000120002070479448006890F82200C0F3F3 +:10E49000400070479048006890F8220000F00100AA +:10E4A00070478D48006890F82200C0F30010704754 +:10E4B0002DE9F04388480024036893F82400B3F85A +:10E4C00022C0C0F38001C0F34002114400F00100FB +:10E4D0000144CCF3001060B3BCF1130F21D00BDC6E +:10E4E000BCF1100F02BF7D4830F81100BDE8F08389 +:10E4F000BCF1120F15D008E0BCF1150F09D0BCF12A +:10E500001D0F04BF7648BDE8F083FFDF2046BDE85D +:10E51000F083744A002032F8112011FB0020BDE87E +:10E52000F083714A002032F8112011FB0020BDE871 +:10E53000F08393F85A2093F85B002E264FF47A77F5 +:10E540004FF014084FF04009022A04BF4AF2D745A1 +:10E55000B5FBF7F510D0012A04BF4AF22F75B5FBC1 +:10E56000F7F510D04AF62315B5FBF7F5082A08BFD2 +:10E570004E4613D0042A18D02646082A0ED0042A64 +:10E5800013D0022A49D004F12806042A0FD0082A01 +:10E590001CBF4FF01908082204D00AE04FF01408FD +:10E5A00006F5A8764FF0400203E006F5A8764FF096 +:10E5B000100218FB026212FB0152C1EB01114B4D1C +:10E5C00001EB810105EB810111441CF0010F4FF4B7 +:10E5D000C8724FF4BF7504BFCCF34006002E77D04D +:10E5E000CCF3400601F5A571EEB1082804BF16462C +:10E5F00040270CD0042804BF2E46102707D002283D +:10E6000007BF04F11806042704F12806082707EBC2 +:10E61000870706EB870631441CE004F118064FF02B +:10E6200019080422C5E7082804BF164640270CD065 +:10E63000042804BF2E46102707D0022807BF04F184 +:10E640001806042704F12806082707EB871706EBAE +:10E650008706314401F19C0693F8651010F00C0F09 +:10E6600008BF00213144082804BF164640270CD0BB +:10E67000042804BF2E46102707D0022807BF04F144 +:10E680001806042704F128060827C7EBC70707EB7D +:10E69000470706EB4706314498311CF0010F27D09D +:10E6A000082808BF40200CD0042804BF2A461020A8 +:10E6B00007D0022807BF04F11802042004F1280241 +:10E6C000082000EB400303EB0010104401444AE033 +:10E6D0004DE000000006002060000020BC5B02004E +:10E6E0008E891300C45B0200B45B0200D4FEFFFFFE +:10E6F000082804BF944640260CD0042804BFAC462A +:10E70000102607D0022807BF04F1180C042604F1D4 +:10E71000280C082606EB86169B8F0CEB860C6144B2 +:10E72000EB2B20D944F2552C0B3303FB0CF39B0D40 +:10E73000082807D0042802D0022805D008E02A467D +:10E74000102008E0402006E004F11802042002E056 +:10E7500004F12802082000EB801002EB800000F595 +:10E76000A57003FB001101F26510BDE8F08301F50F +:10E77000A571082804BF944640260CD0042804BF85 +:10E78000AC46102607D0022807BF04F1180C042657 +:10E7900004F1280C082606EB8616B3F844300CEB7F +:10E7A000860C6144EB2BDED944F2552C0B3303FB72 +:10E7B0000CF39B0D0828C5D00428C0D00228C7D16F +:10E7C000C2E7FE4840F271210068806A4843704702 +:10E7D000FA48006890F83500002818BF01207047FB +:10E7E00010B5F74C207B022818BF032808D1207DE4 +:10E7F00004F115010DF023FC08281CBF012010BDF9 +:10E80000207B002816BF022800200120BDE8104010 +:10E8100009F054B9EA4908737047E849096881F872 +:10E82000300070472DE9F047E44C2168087B002850 +:10E8300016BF022800200120487301F10E0109F0E3 +:10E8400027F92168087B022816BF0328012200222D +:10E8500081F82F204FF0080081F82D00487B01F14E +:10E860000E034FF001064FF00007012804BF5B794B +:10E8700013F0C00F0AD001F10E03012804D158791A +:10E8800000F0C000402801D0002000E0012081F805 +:10E890002E00002A04BF91F8220010F0040F07D0C8 +:10E8A000087D01F115010DF0CAFB216881F82D00EA +:10E8B0002068476006F0AAF92168C14D4FF00009B1 +:10E8C000886095F82D000DF0D6FB804695F82F0056 +:10E8D000002818BFB8F1000F04D095F82D000DF0F6 +:10E8E00091F968B195F8300000281CBF95F82E000A +:10E8F00000281DD0697B05F10E0001290ED012E021 +:10E900006E734A4605F10E01404609F016F995F876 +:10E910002D1005F10E000DF0A5FC09E0407900F086 +:10E92000C000402831D0394605F10E0009F03CF90D +:10E930002068C77690F8220010F0040F08BFBDE8E9 +:10E94000F087002795F82D000DF010FA050008BF9C +:10E95000BDE8F08710210EF0C8F9002818BFBDE807 +:10E96000F08720683A4600F11C01C676284609F077 +:10E97000E4F8206800F11C0160680EF0DBFD6068BF +:10E98000BDE8F04701210EF0F0BD0DF0A8FC4A46AD +:10E9900005F10E0109F0D1F8CAE7884A1268137B25 +:10E9A0000370D2F80E000860508A8880704778B5EE +:10E9B00083490446814D407B08732A682078107093 +:10E9C0006088ADF8000080B200F00101C0F34003A0 +:10E9D00041EA4301C0F3800341EA8301C0F3C0036D +:10E9E00041EAC301C0F3001341EA0311C0F340132D +:10E9F00041EA4311C0F3801041EA80105084E07D69 +:10EA0000012808BF012607D0022808BF022603D02C +:10EA1000032814BFFFDF0826286880F85A60607E4C +:10EA2000012808BF012607D0022808BF022603D00C +:10EA3000032814BFFFDF0826286880F85B60217B6D +:10EA400080F82410418C1D290CBF0021616881626F +:10EA5000617D80F83510A17B002916BF02290021B5 +:10EA600001210175D4F80F10C0F81510B4F8131077 +:10EA7000A0F81910A17EB0F8662061F30302A0F897 +:10EA80006620E17E012918BF002180F834100020A3 +:10EA900078BD4A480068408CC0F3001131B1C0F322 +:10EAA0008000002804BF1F20704702E0C0F340012F +:10EAB00009B10020704710F0010F14BFEE20FF20B5 +:10EAC00070473E480068408CC0F3001119B1C0F394 +:10EAD000800028B102E0C0F3400008B10020704778 +:10EAE000012070473549002209680A664B8C1D2BAE +:10EAF0000CBF81F8642081F86400704700232F4A1E +:10EB0000126882F859309164A2F84C00012082F812 +:10EB100059007047294A0023126882F85830A2F839 +:10EB200054000120116582F8580070472349096894 +:10EB300081F85D0070472148006890F95D007047DA +:10EB40001E48006890F82200C0F3401070471B4830 +:10EB5000006890F82200C0F3C000704701207047A1 +:10EB60001648006890F85B00704770B508F02CFA02 +:10EB700008F00BFA08F00EF908F08CF90F4C206839 +:10EB8000016E491C016690F83300002530B108F091 +:10EB900031FA07F08CFC206880F83350206845700B +:10EBA00090F8371021B1BDE87040042009F06BBC2B +:10EBB00090F8641001B3006E814203E06000002011 +:10EBC0000006002018D8042009F05DFC206890F8A9 +:10EBD000220010F0010F07D0A06843220188BDE891 +:10EBE00070400120FFF77EBBBDE8704043224FF626 +:10EBF000FF710020FFF776BBBDE87040002009F0F0 +:10EC000042BC2DE9F04782B00F468146FE4E4FF0E0 +:10EC100000083068458C15F0030F10D015F0010F77 +:10EC200005F0020005D0002808BF4FF0010806D00B +:10EC300004E0002818BF4FF0020800D1FFDF4FF0BA +:10EC4000000A544615F0010F05F002000DD080B9FE +:10EC500015F0040F0DD04AF00800002F1CBF40F043 +:10EC6000010040F0020440D08FE010B115F0040F15 +:10EC70000DD015F0070F10D015F0010F05F00200B0 +:10EC800036D0002808BF15F0040F27D03DE0002F34 +:10EC900018BF4AF0090478D134E02FB14AF00804D3 +:10ECA00015F0200F14D070E0316805F02002B1F8A3 +:10ECB0004400104308BF4AF0010466D04AF018042B +:10ECC00015F0200F61D191F85A10082959D155E05B +:10ECD000316891F85A10082950D152E04AF00800E2 +:10ECE000002F18BF40F001044FD140F010044CE059 +:10ECF000002818BF15F0040F07D0002F18BF4AF0E6 +:10ED00000B0442D14AF018043FE015F0030F3BD149 +:10ED100015F0040F38D077B131684AF0080091F847 +:10ED20005A1008290CBF40F0020420F0020415F02C +:10ED3000200F21D029E0316805F02002B1F844000D +:10ED4000104308BF4AF003041FD04AF0180015F022 +:10ED5000200F08D091F85A10082914BF40F002047F +:10ED600020F0020411E091F85A20082A14BF40F064 +:10ED7000010020F00100EDE7082902D024F0010491 +:10ED800003E044F0010400E0FFDF15F0400F1BD06A +:10ED9000C7B93168B1F84400002804BF488C10F0AE +:10EDA000010F0BD110F0020F08BF10F0200F05D19A +:10EDB00015F0010F08BF15F0020F03D091F85A00AB +:10EDC000082801D044F040047068A0F800A0017841 +:10EDD00021F02001017007210EF078FB4146706898 +:10EDE0000EF06BFD214670680EF073FD14F0010FFC +:10EDF0000AD006230022854970680EF044FD306871 +:10EE0000417B70680EF0A4FB14F0020F18D0D6E915 +:10EE10000010B9F1000F4FF006034FF0010207D0C8 +:10EE20001C310EF030FD012170680EF09EFB07E0F2 +:10EE300015310EF028FD3068017D70680EF095FBED +:10EE400014F0040F18BFFFDF14F0080F17D0CDF82F +:10EE500000A03068BDF800100223B0F86600020977 +:10EE600062F30B01ADF800109DF80110032260F36E +:10EE700007118DF80110694670680EF004FD012F2E +:10EE800061D13068B0F84410E9B390F82200C0F3C3 +:10EE90004000C0BB70680EF00CFD401CC7B230686B +:10EEA000B0F84420B0F85610551AC7F1FF018D4252 +:10EEB000A8BF0D46AA423AD990F8220010F0010FDF +:10EEC00035D144F01004214670680EF002FDF81CA4 +:10EED000C0B2ED1E284482B23068B0F86610036EEE +:10EEE000090951FA83F190F85C30494F1944BC4646 +:10EEF0000023E1FB07C31B096FF0240C03FB0C117B +:10EF000080F85C1000E01EE090F85B00012101F049 +:10EF100037F80090BDF800009DF80210032340EA86 +:10EF200001400190042201A970680EF0ACFC306829 +:10EF3000AAB2016C70680EF0FAFC3068B0F8561096 +:10EF40002944A0F8561014F0400F06D0D6E900105E +:10EF5000012306225D310EF096FC14F0200F18BF3D +:10EF6000FFDF0020002818BFFFDF02B0BDE8F087F8 +:10EF70002DE9F843244C2068002808BFFFDF2068F3 +:10EF8000417839BB0178FF2924D0002680F8316010 +:10EF9000A0F85660867080F83760304607F08EFF24 +:10EFA00007F0B3FC206890F95D0007F048FD1948B0 +:10EFB00007F04BFD184807F067FF606807F081FF16 +:10EFC000206890F8240010F0010F06D0252007F0EB +:10EFD00044FD09E00C20BDE8F88310F0020F18BFD3 +:10EFE000262075D007F039FD206890F85A102520AA +:10EFF00007F049FC206880F82C6007F059FF206872 +:10F0000090F85A10002009E0600000200E06002051 +:10F0100053E4B36EB05B0200AD5B020007F07BFD12 +:10F020000F21052007F0DFFC206890F82E10002942 +:10F0300001BF90F82F10002990F8220010F0040F63 +:10F0400075D005F0E3FD054620682946806806F086 +:10F05000F9FADFF83084074690FBF8F008FB1070EF +:10F060004142284605F0D3FA2168886097FBF8F002 +:10F070004A68104448600CF0DFFF0146206842688F +:10F0800091426FD8C0E90165FF4D4FF0010895F836 +:10F090002D000CF0F0FF814695F82F000127002885 +:10F0A00018BFB9F1000F04D095F82D000CF0AAFD9F +:10F0B000A8B195F8300000281CBF95F82E00002854 +:10F0C00025D0697B05F10E00012916D01AE0FFE773 +:10F0D00010F0040F14BF2720FFDF83D184E73A46E6 +:10F0E0006F7305F10E01484608F027FD95F82D10C5 +:10F0F00005F10E000DF0B6F809E0407900F0C0000F +:10F10000402815D0414605F10E0008F04DFD20685D +:10F1100090F8220010F0040F24D095F82D000CF088 +:10F1200025FE05001ED010210DF0DFFD40B119E0D5 +:10F130000DF0D5F83A4605F10E0108F0FEFCE6E7C1 +:10F1400020683A4600F11C01C776284608F0F5FC15 +:10F15000206800F11C0160680EF0ECF90121606884 +:10F160000EF003FA2068417B0E3007F020FC206887 +:10F1700090F8581059B3B0F85410A0F84410016D2D +:10F18000016490F82210C1F30011E9B9B0F86600EB +:10F1900002210509ADF80050684606F011FE28B1BD +:10F1A000BDF80000C0F30B00A84204D1BDF8000078 +:10F1B000401CADF800002168BDF80000B1F86620E1 +:10F1C00060F30F12A1F86620206880F8586020686C +:10F1D00090F8591031B1B0F84C108187816C81637F +:10F1E00080F85960B0F86610026E090951FA82F190 +:10F1F00090F85C20DFF894C2114463460022E1FBE2 +:10F200000C3212096FF0240302FB031180F85C102A +:10F210000CF095FF032160680DF014F8216881F867 +:10F2200033000020BDE8F8839949886070472DE9D4 +:10F23000F043974C83B0226892F831303BB1508C48 +:10F240001D2808BFFFDF03B0BDE8F0438DE40126B1 +:10F250000027F1B1054692F85C0007F0FEFB20683C +:10F2600090F85B10FF2007F00EFB20684FF4A571AB +:10F2700090F85B20002007F050FD206890F82210E5 +:10F2800011F0030F00F02E81002D00F0258100F019 +:10F2900029B992F822108046D07EC1F300110029CE +:10F2A00056D0054660680780017821F02001017082 +:10F2B000518C132937D01FDC102908BF022144D0FC +:10F2C000122908BF062140D0FFDF6F4D606805F1AD +:10F2D0000E010EF021F9697B60680EF039F92068A3 +:10F2E000418C1D2918BF152965D0B0F84420016C48 +:10F2F00060680EF046F95EE0152918BF1D29E3D1BC +:10F300004FF001010EF0E2F86068017841F0200151 +:10F310000170216885B11C310EF00CF90121606883 +:10F320000EF023F9D1E700210EF0D0F860680178E3 +:10F3300041F020010170C8E715310EF0FBF820689C +:10F34000017D60680EF011F9BFE70EF0BFF8BCE771 +:10F350000021FFF756FC6068C17811F03F0F2AD0FA +:10F36000017911F0100F26D00EF0AEF82368024696 +:10F3700093F82410C1F38000C1F3400C604401F005 +:10F38000010100EB010C93F82C10C1F38000C1F3D4 +:10F390004005284401F001010844ACEB0000C1B273 +:10F3A00093F85A0000F0ECFD009003230422694614 +:10F3B00060680EF068FA2068002590F8241090F834 +:10F3C0002C0021EA000212F0010F18BF01250ED116 +:10F3D00011F0020F04D010F0020F08BF022506D072 +:10F3E00011F0040F03D010F0040F08BF0425B8F18A +:10F3F000000F2BD0012D1BD0022D08BF26201BD0C3 +:10F40000042D14BFFFDF272016D0206890F85A1073 +:10F41000252007F038FA206890F82210C1F3001177 +:10F4200069B101224FF49671002007F076FC0DE0DF +:10F43000252007F012FBE8E707F00FFBE5E790F85F +:10F440005A204FF49671002007F067FC206890F86E +:10F450002C10294380F82C1090F8242032EA010166 +:10F460001DD04670418C13292CD027DC102904BFF5 +:10F4700003B0BDE8F083122924D000BFC1F300100F +:10F48000002807E040420F000006002053E4B36E5E +:10F490006000002018BFFFDF03B0BDE8F083418C9F +:10F4A0001D2908BF80F82C70DBD0C1F300110029A2 +:10F4B00014BF80F8316080F83170D2E7152918BF89 +:10F4C0001D29DBD190F85A2003B04FF00101BDE8AF +:10F4D000F043084607F002BE90F85B200121084681 +:10F4E00007F0FCFD2168002DC87E7CD04A8C3D468B +:10F4F000C2F34000002808BF47F0080512F0400F93 +:10F5000018BF45F04005002819BFD1F83890B1F870 +:10F510003C80D1F84090B1F84480606807210780B2 +:10F520000DF0D4FF002160680EF0C7F9294660682D +:10F530000EF0CFF915F0080F15D02068BDF80010B7 +:10F540000223B0F86600020962F30B01ADF8001067 +:10F550009DF80110032260F307118DF80110694630 +:10F5600060680EF090F960680EF06CF82168C0F1E8 +:10F57000FE00B1F85620A8EB02018142A8BF014667 +:10F58000CFB2D019404542D245F0100160680EF06C +:10F59000A0F960680EF056F82168C0F1FE00B1F8DD +:10F5A0005610A8EB01018142A8BF0146CFB26068A6 +:10F5B0000EF07FF93844421C2068B0F86610036EE4 +:10F5C000090951FA83F190F85C30FF4D1944AC46BB +:10F5D0000023E1FB05C31B096FF0240C03FB0C1196 +:10F5E00080F85C1000E038E090F85B00012100F04A +:10F5F000C7FC0090BDF800009DF80210032340EA0C +:10F6000001400190042201A960680EF03CF92168D4 +:10F6100091F8220010F0400F05D0012306225D3141 +:10F6200060680EF030F920683A46B0F8560000EBFA +:10F63000090160680EF07BF92068B0F85610394473 +:10F64000A0F8561008F0D0F8002818BFFFDF206897 +:10F650004670867003B0BDE8F0830121FFF7D1FA50 +:10F66000F0E7DA4810B50068417841B90078FF2822 +:10F6700005D000210846FFF7DAFD002010BD07F095 +:10F68000A3FC07F082FC07F085FB07F003FC0C20CD +:10F6900010BD10B5CD4C206890F8220010F0010F7D +:10F6A0001CBFA06801884FF03C0212BF01204FF63A +:10F6B000FF710020FEF716FE2168012081F8370057 +:10F6C00010BDC249096881F8320070472DE9F04148 +:10F6D000002508F0A4FE002800F00581BB4C20683E +:10F6E000417801270026012906D0022901D00329EB +:10F6F0007ED0FFDFBDE8F081817802260029418CB1 +:10F7000046D0C1F34002002A08BF11F0010F70D0AB +:10F7100090F85B204FF001014FF0000007F0DEFC95 +:10F72000216891F82200C0F34000002814BF0C208B +:10F73000222091F85B1007F0A6F82068467090F838 +:10F74000330058B106F09FFE206890F85B0010F07F +:10F750000C0F0CBF4020452007F042FC206890F8B9 +:10F760003400002818BF07F089FC216891F85B007D +:10F7700091F8651010F00C0F08BF0021962007F0DB +:10F78000C1FB08F028F8002818BFFFDFBDE8F081B2 +:10F79000C1F3001282B110293FD090F8330020B19C +:10F7A00006F071FE402007F01BFC206890F8221044 +:10F7B00011F0040F36D043E090F8242090F82C305C +:10F7C0009A422AD1B0F84400002808BF11F0010F76 +:10F7D00005D111F0020F08BF11F0200F7ED04FF0BD +:10F7E00001014FF00000FFF722FD2068418C01E08D +:10F7F00040E034E011F0010F04BFC1F340010029E3 +:10F8000007D1B0F85610B0F84420914218BFBDE8B7 +:10F81000F08180F83170BDE8F081BDE8F041002151 +:10F82000012004E590F83510012914BF03291025A3 +:10F8300045F00E0190F85A204FF0000007F04EFC02 +:10F84000206890F83400002818BF07F017FC00214A +:10F85000962007F057FB20684670BDE8F081B0F8AD +:10F860005610B0F8440081423DD0BDE8F04101217E +:10F870000846DCE48178D9B1418C11F0010F1CD02D +:10F8800080F8687090F86A20B0F86C100120FEF7DC +:10F8900029FD2068467007F097FB07F076FB07F01C +:10F8A00079FA07F0F7FABDE8F041032008F0EBBD64 +:10F8B0008178BDE8F0410120B9E411F0020F04BFE6 +:10F8C000FFDFBDE8F081B0F85610808F81420AD08A +:10F8D00001210846FFF7ABFC032000E003E02168AC +:10F8E0004870BDE8F081BDE8F041FFF73EB9FFF791 +:10F8F0003CB910B5354C206890F8341049B1363019 +:10F9000007F0CBFB18B921687F2081F8360007F09B +:10F91000ABFB206890F8330018B107F06BFB06F0E2 +:10F92000C6FD08F07CFDA8B1206890F82210C1F354 +:10F93000001179B14078022818BFFFDF00210120B3 +:10F94000FFF775FC2068417800291EBF4078012828 +:10F95000FFDF10BDBDE81040FFF707B92DE9F04704 +:10F960001A4C0F4680462168B8F1030F488C08BF37 +:10F97000C0F3400508D000F0010591F832000028DE +:10F9800018BF4FF0010901D14FF0000907F059F8F5 +:10F990000646B8F1030F0CBF4FF002084FF0010804 +:10F9A00035EA090008BFBDE8F087206890F8330009 +:10F9B00090B10CF0A7FB38700146FF280CD06068AE +:10F9C000C01C0CF078FB03E053E4B36E6000002031 +:10F9D00038780CF0A4FB064360680178C1F380120C +:10F9E00021680B7D9A4208D10622C01C153115F002 +:10F9F000E5FD002808BF012000D000203978FF294C +:10FA000006D0C8B9206890F82D00884216D113E0BE +:10FA1000A0B1616811F8030BC0F380100CF00FFB6C +:10FA200005460CF06FFC38B128460CF09FF918B170 +:10FA300010210DF05AF908B1012000E000202168E2 +:10FA400091F8221011F0040F01D0F0B11AE0CEB9F4 +:10FA5000FE4890F83500002818BF404515D1616870 +:10FA600011F8030BC0F380100CF0E9FA04460CF017 +:10FA700049FC38B120460CF079F918B110210DF08D +:10FA800034F910B10120BDE8F0870020BDE8F0870F +:10FA90002DE9F04FEE4D074683B0286800264078E8 +:10FAA000022818BFFFDF28684FF07F0990F8341054 +:10FAB00049B1363007F0F1FA002804BF286880F811 +:10FAC000369007F0D1FA68680DF022FD0446002F49 +:10FAD00000F0048268680DF0A6FE002800F0FE81A8 +:10FAE00006F07DFF002800F0F981FF20DFF864B305 +:10FAF000DFF8588300274FF0010A062C80F00082BF +:10FB0000DFE804F0EFEFEF03EFF78DF80000694650 +:10FB10000320FFF723FF002800F0E480296891F814 +:10FB2000340010B191F89800D0B12868817801298B +:10FB30004CD06868042107800DF0C8FC08F10E0164 +:10FB400068680DF0E9FC98F80D1068680DF000FD8C +:10FB50002868828F816B68680DF037FD00F04DB921 +:10FB60009DF8000081F898A00A7881F89920FF2874 +:10FB70000FD001F19B029A310CF086FA002808BFE1 +:10FB8000FFDF286890F89A1041F0020180F89A107F +:10FB90000DE068680278C2F3801281F89A20D0F8EC +:10FBA0000320C1F89B20B0F80700A1F89F00286847 +:10FBB00000F1A10490F836007F2808BFFFDF286815 +:10FBC00090F83610217080F83690AEE790F8220059 +:10FBD0009BF80490C0F38014686864F386190721C9 +:10FBE00007800DF073FC002168680DF066FE494641 +:10FBF00068680DF06EFE0623002208F10E016868A9 +:10FC00000DF041FE2868417B68680DF0A1FC686832 +:10FC10000DF018FD29688A8FC0F1FE018A42B8BF35 +:10FC20001146CFB2BA423DD9F81EC7B249F0100A08 +:10FC3000514668680DF04DFE68680DF03AFE384494 +:10FC4000431C2868B0F86610026E090951FA82F167 +:10FC500090F85C20DFF800920A44C8464FF0000C90 +:10FC6000E2FB098C4FEA1C116FF0240C01FB0C2104 +:10FC700080F85C1090F85B001A46012100F080F9D2 +:10FC80000190BDF804009DF80610032340EA0140EE +:10FC90000290042202A968680DF0F5FD51466868DB +:10FCA0000DF017FE34B1D5E90010012306225D31B5 +:10FCB0000DF0E9FD28683A46816B68680DF037FE63 +:10FCC0002868A0F85670818F8F420CBF0121002157 +:10FCD00080F8311007F088FD002818BFFFDF8CE0A6 +:10FCE00007E00DE128688078002840F0F98000F0F6 +:10FCF000F5B88DF8000068680178C1F38019D0F874 +:10FD000003100191B0F80700ADF80800694605201E +:10FD1000FFF724FE0028286873D08178002972D06C +:10FD200090F85BA0D5E90104D0F80F10C4F80E10CC +:10FD3000B0F813106182417D2175817D6175B0F845 +:10FD40001710E182B0F819106180B0F81B10A18083 +:10FD5000B0F81D10E18000F11F0104F1080015F05A +:10FD60000EFE686890F8241001F01F01217690F8CB +:10FD70002400400984F86C0184F854A084F855A04C +:10FD8000286890F8651084F8561090F85D0084F8A3 +:10FD900057009DF80010A86800F05BF9022008F0F9 +:10FDA00072FB6868DBF800400DF1040A0780082147 +:10FDB0000DF08CFB002168680DF07FFD214668681E +:10FDC0000DF087FD0623002208F10E0168680DF092 +:10FDD0005AFD2868417B68680DF0BAFB494668689F +:10FDE0000DF0C3FB06230122514668680DF04BFD60 +:10FDF00007F0FAFC002818BFFFDF032029684870CD +:10FE000070E066E0FFE76868AC684FF001080278D0 +:10FE1000617BC2F3401211406173D0F80F10C4F837 +:10FE20000E10B0F813106182417D2175817D6175DE +:10FE3000B0F81710E182B0F819106180B0F81B100B +:10FE4000A180B0F81D10E18008E00000000600204D +:10FE500060000020A85B020053E4B36E00F11F01B4 +:10FE600004F1080015F08BFD686890F8241001F08B +:10FE70001F01217690F82400400984F86C0184F871 +:10FE8000548084F85580286890F8651084F85610DE +:10FE900090F85D0084F857009DF80010A86800F005 +:10FEA000D8F8286880F868A090F86A20B0F86C103C +:10FEB0000120FEF717FA2868477007F085F807F069 +:10FEC00064F806F067FF06F0E5FF012008F0DBFAB2 +:10FED00008E090F82200C0F3001008B1012601E00C +:10FEE000FEF743FE286890F8330018B107F082F857 +:10FEF00006F0DDFA66B100210120FFF798F910E065 +:10FF0000286890F82200C0F300100028E8D0E5E748 +:10FF100028688178012904D190F85B10FF2006F051 +:10FF2000B2FC28684178002919BF4178012903B043 +:10FF3000BDE8F08F4078032818BFFFDF03B0BDE8AD +:10FF4000F08F70B57E4C06460D462068807858B11B +:10FF500006F04FFC21680346304691F85B202946A5 +:10FF6000BDE8704009F042B806F043FC2168034642 +:10FF7000304691F85A202946BDE8704009F036B85D +:10FF800078B50C4600210091082804BF4FF4C870D2 +:10FF900040210DD0042804BF4FF4BF70102107D0BA +:10FFA000022807BF01F11800042101F128000821EF +:10FFB000521D02FB010562489DF80010006890F890 +:10FFC0005C2062F3050141F040068DF8006090F876 +:10FFD0005B00012828D002282DD0082818BFFFDF99 +:10FFE0002FD000BF26F080008DF80000C4EB041075 +:10FFF00000EB80001E2101EB800005FB040451484A +:020000040001F9 +:10000000844228BFFFDF5048A0FB0410BDF8011058 +:10001000000960F30C01ADF80110BDF800009DF877 +:10002000021040EA014078BD9DF8020020F0E00097 +:100030008DF80200D6E79DF8020020F0E0002030A5 +:1000400004E09DF8020020F0E00040308DF802004E +:10005000C8E72DE9F0413A4D04460E46286890F86D +:100060006800002818BFFFDF0027286880F86A7042 +:100070002188A0F86C106188A0F88210A188A0F8EF +:100080008410E188A0F8861094F86C1180F888102C +:1000900090F82F1049B1427B00F10E01012A04D1E2 +:1000A000497901F0C001402934D090F8301041B1B5 +:1000B000427B00F10E01012A04BF497911F0C00F03 +:1000C00028D000F1760015F051FC6868FF2E017809 +:1000D000C1F380116176D0F80310C4F81A10B0F89B +:1000E0000700E08328681DD0C167E18BA0F880106D +:1000F00000F17002511E30460BF0C6FF002808BF09 +:10010000FFDF286890F86F1041F0020180F86F104F +:10011000BDE8F081D0F80E10C0F87610418AA0F842 +:100120007A10D2E7C767A0F88070617E80F86F1000 +:10013000D4F81A100167E18BA0F87410BDE8F081C3 +:1001400060000020C4BF0300898888880178406867 +:1001500029B190F80C1190F8730038B901E001F062 +:10016000A9BD19B1042901D00120704700207047B2 +:1001700070B50C460546062102F006FC606008B129 +:10018000002006E00721284602F0FEFB606018B15F +:1001900001202070002070BD022070BD2DE9FC47B9 +:1001A0000C4606466946FFF7E3FF00287DD19DF81F +:1001B000000050B1FEF727F9B0427CD0214630460E +:1001C0000AF000F9002873D12DE00DF02FFEB042A7 +:1001D00071D02146304612F093FF002868D1019D6E +:1001E00095F8D00022E0012000E00020804695F83C +:1001F00037004FF0010A4FF00009F0B195F83800D0 +:1002000080071AD584F8019084F800A084F804903F +:10021000E68095F839102172698F6181A98FA181DB +:1002200085F8379044E0019D95F80C015835002879 +:10023000DBD1E87E0028D8D0D5E7304602F0E8FCD4 +:10024000070000D1FFDF384601F0F8FE40B184F826 +:1002500001900F212170E680208184F804A027E01E +:10026000304602F0C3FC070000D1FFDFB8F1000FF9 +:1002700021D0384601F039FFB8B19DF8000038B9F7 +:100280000198D0F8F8004188B14201D180F800907F +:10029000304607F07CFB84F801900C21217084F833 +:1002A0000490E680297F217200E004E085F81B902D +:1002B0000120BDE8FC870020FBE71CB56946FFF77D +:1002C00057FF00B1FFDF684601F000FDFB49002049 +:1002D0008968A1F8D2001CBD2DE9FC4104460E46F8 +:1002E000062002F0F9FA0546072002F0F5FA284444 +:1002F000C7B20025A8463E4417E02088401C80B2C3 +:100300002080B04202D34046A4F8008080B2B842B8 +:1003100004D3B04202D20020BDE8FC816946FFF759 +:1003200027FF0028F8D06D1CEDB2AE42E5D84FF69D +:10033000FF7020801220EFE738B54FF6FF70ADF860 +:1003400000000DE00621BDF8000002F02FFB04467E +:100350000721BDF8000002F029FB0CB100B1FFDF5E +:1003600000216846FFF7B8FF0028EBD038BD70B514 +:1003700007F07AFB0BF04FFCD14C4FF6FF760025CF +:100380006683A683CFA0257001680079A4F140029E +:10039000657042F8421FA11C1071601C13F07DF8BB +:1003A00025721B2060814FF4A471A181E08121821C +:1003B0000321A1740422E274A082E082A4F13E0031 +:1003C000218305704680BD480C300570A4F11000F3 +:1003D0000570468070BD70B5B84C16460D4660601D +:1003E000217007F0BBFAFFF7A7FFFFF7C0FF2078E7 +:1003F00010F09BFEB5480EF0C4F92178606812F049 +:100400005EFF20780AF056FE284608F097FBAF48BA +:10041000FEF704F8217860680AF0BAF831462078CF +:1004200013F038FEBDE870400BF0F5BB10B50124A9 +:100430000AB1002010BD21B1012903D000242046BB +:1004400010BD02210DF0B0FAF9E72DE9F0470400E4 +:1004500000D1FFDF9A4802211C308146FFF73CFFA4 +:1004600000B1FFDF964D0620B5F81C8002F034FA8B +:100470000646072002F030FA3044C6B2701CC7B2FC +:10048000A88BB04228D120460DF046FCB0B12078B0 +:1004900018283FD1207901283CD1E088062102F0BC +:1004A00073FA040000D1FFDF208807F070FA20887B +:1004B000062102F07BFA40B3FFDF2BE0287860B31F +:1004C00000266670142020702021201D15F043F9AD +:1004D000022020712E701DE0B84217D12046FDF792 +:1004E00037FFD0B12078172814D1207968B1E0887F +:1004F000072102F049FA40B1008807F048FAE08885 +:10050000072102F053FA00B1FFDF03E02146FFF7B5 +:1005100045FE10B10120BDE8F08702214846FFF7F3 +:10052000DBFE10B9A98B4145AAD12046BDE8F047B2 +:1005300013F0F6BD10B501F064FB08B10C2010BD3E +:100540000BF0BCFB002010BD10B50446007818B1BC +:10055000012801D0122010BD01F064FB20B10BF086 +:100560005DFD08B10C2010BD207801F011FBE21DEB +:1005700004F11703611CBDE810400BF044BC10B53A +:10058000044601F03EFB08B10C2010BD207828B1D4 +:10059000012803D0FF280BD0122010BD01F0F8FA7B +:1005A000611C0BF04BFB08B1002010BD072010BDF3 +:1005B00001200BF07DFBF7E710B50BF032FD08B121 +:1005C000002010BD302010BD10B5044601F02AFBFC +:1005D00008B10C2010BD20460BF01DFD002010BD01 +:1005E00010B501F01FFB20B10BF018FD08B10C2075 +:1005F00010BD0BF06DFC002010BDFF2181704FF687 +:10060000FF7181802D4949680A7882718A88028148 +:100610004988418101214170002070477CB5002547 +:10062000022A19D015DC12F10C0F15D009DC12F1D9 +:10063000280F11D012F1140F0ED012F1100F11D19A +:100640000AE012F1080F07D012F1040F04D04AB9E2 +:1006500002E0D31E052B05D8012806D0022808D0B9 +:1006600003280AD0122528467CBD1046FEF75EFA04 +:10067000F9E710460EF030F8F5E7084614466946EB +:10068000FFF776FD08B10225EDE79DF8000001981F +:10069000002580F85740E6E710B5134601220CF01C +:1006A00061FB002010BD10B5044611F03AFB05288F +:1006B0000ED0204610F028FD002010BD6C00002058 +:1006C000E4070020FFFFFFFF1F000000A40600203A +:1006D0000C20F2E710B5044601F0A4FA08B10C2092 +:1006E000EBE72146002007F0C0F90020E5E710B550 +:1006F000044610F097FD50B108F0A6FC38B1207800 +:1007000008F041FA20780EF0F5FA0020D5E70C2029 +:10071000D3E710B5044601F085FA08B10C20CCE708 +:100720002146012007F0A1F90020C6E738B50446AC +:100730004FF6FF70ADF80000A079E179884216D03D +:100740002079FDF766FD90B16079FDF762FD70B12B +:100750000022A079114614F011F940B90022E07985 +:10076000114614F00BF910B9207A072801D912208C +:1007700038BD08F076FC60B911F0D3FA48B9002111 +:100780006846FFF7A9FD20B1204606F057F8002083 +:1007900038BD0C2038BD2DE9FC41817805461A2969 +:1007A00025D00EDC16292DD2DFE801F02C2C2C2CC4 +:1007B0002C212C2C2C2C2C2C2C2C2C2C2C2C2C218F +:1007C00021212A291ED00BDCA1F11E010C2919D2EE +:1007D000DFE801F018181818181818181818180D4C +:1007E0003A3904290ED2DFE801F00D020D02288803 +:1007F000B0F5706F06D201276946FFF7B9FC18B152 +:10080000022089E5122087E59DF8000001F0C7F974 +:10081000019C08B1F43401E004F5B8749DF80000BF +:1008200001F0BDF9019E08B1F53601E006F271163E +:100830006846FFF78BFC08B1207808B10C206BE507 +:100840002770A8783070684601F040FA002063E510 +:100850007CB50D466946FFF78BFC002618B12E606B +:100860002E7102207CBD9DF8000001F098F9019CDA +:100870009DF80000583401F092F9019884F8406026 +:1008800081682960017B297194F840100029F5D115 +:1008900000207CBD70B5044691F8550091F85630A3 +:1008A0000D4610F00C0F00D100232189A0880CF018 +:1008B000E8FB696A81421DD2401A401CA1884008A9 +:1008C000091A8AB2A2802189081A2081668895F8BF +:1008D000541010460CF07CFB864200D230466080FB +:1008E000E68895F8551020890CF072FB864200D2FC +:1008F0003046E08070BDF0B585B00D46064603A9D0 +:10090000FFF736FC00282DD19DF80C0060B30022C3 +:100910000499FB20B1F84A30FB2B00D30346B1F811 +:100920004C40FB20FB2C00D30446DFF80CCC9CE8A9 +:10093000811000900197CDF808C0ADF80230ADF8F5 +:1009400006406846FFF7A6FF6E80BDF80400E88009 +:10095000BDF808006881BDF80200A880BDF8060057 +:100960002881002005B0F0BD0122D1E72DE9F0413A +:1009700086B0044600886946FFF7FAFB002868D174 +:100980002189E08801F0B1F9002862D1A18860884E +:1009900001F0ABF900285CD12189E08801F0B3F9BE +:1009A000002856D1A188608801F0ADF9070050D128 +:1009B000208802A9FFF79FFF00B1FFDFBDF81010EC +:1009C00062880920914244D3BDF80C10E28891421C +:1009D0003FD3BDF81210BDF80E2023891144A28820 +:1009E0001A44914235D39DF80000019D4FF0000854 +:1009F000012640B185F89B61019890F8DE0105F56C +:100A0000CD7540B914E085F80561019890F828018A +:100A100005F5827508B13A2718E0E088688060889B +:100A2000E8802089A880A08828810122019909E016 +:100A3000E08868806088E8802089A880A088288174 +:100A4000019900222846FFF725FF2E7085F80180C6 +:100A5000384606B0BDE8F08188E710B5044601F0DD +:100A6000E1F820B10BF0DAFA08B10C2025E6207885 +:100A700001F08EF8E279611C0BF051FC08B1002006 +:100A80001BE6022019E610B503780446002B4068E7 +:100A900013460A46014609D05FF001000CF0FAFA4D +:100AA0006168496A884203D9012006E60020F5E71B +:100AB000002002E62DE9F04117468A781E4680465E +:100AC00042B11546C87838B10446690706D52AB13F +:100AD000012104E00725F5E70724F6E70021620776 +:100AE00002D508B1012000E00020014206D0012219 +:100AF00011464046FFF7C7FF98B93BE051B10022CD +:100B000001214046FFF7BFFF58B9600732D50122E7 +:100B100011461FE058B1012200214046FFF7B3FF04 +:100B200008B1092096E7680724D5012206E0680786 +:100B30004FEA44700AD5002813DB00220121404609 +:100B4000FFF7A1FFB0B125F0040513E0002811DA8A +:100B5000012200214046FFF796FF58B124F004041B +:100B600008E0012211464046FFF78DFF10B125F045 +:100B70000405F3E73D70347000206BE710B586B0D4 +:100B80000446008803A9FFF7F3FA002806D1A088DD +:100B900030B1012804D0022802D0122006B08CE522 +:100BA0006B4602AA214603A8FFF784FF0028F5D16F +:100BB0009DF80C3000220121002B049B06D083F805 +:100BC000A511049B93F8F2316BBB24E083F80F115D +:100BD000049B93F834313BB9049B93F80E311BB955 +:100BE000049B93F87D300BB13A2010E0049B83F80E +:100BF0000E11049B9DF8081083F81011049B9DF8BA +:100C0000001083F81111049BA188A3F81211049914 +:100C100081F80F21C2E7049B93F8A4311BB9049B10 +:100C200093F87D300BB13A2010E0049B83F8A411B7 +:100C3000049B9DF8081083F8A611049B9DF80010F2 +:100C400083F8A711049BA188A3F8A811049981F83F +:100C5000A521A3E710B504460020A17801B9012021 +:100C6000E2780AB940F0020001F056F8002803D1FA +:100C70002046BDE8104081E71FE570B51C460D46D3 +:100C800018B1012801D0122070BD1946104601F09C +:100C900053F830B12146284601F058F808B1002039 +:100CA00070BD302070BD70B5044600780E46012836 +:100CB00004D018B1022801D0032841D1607828B1AE +:100CC000012803D0022801D0032839D1E07B10B9D4 +:100CD000A078012834D1A07830F0050130D110F08F +:100CE000050F2DD06289E188E0783346FFF7C5FF14 +:100CF000002826D1A07805281ED16589A2892189DE +:100D000020793346FFF7B9FF00281AD15FF00100C0 +:100D100004EB40014A8915442218D3789278934213 +:100D20000ED1CA8889888A420AD1401CC0B20228E2 +:100D3000EED3E088A84203D3A07B08B1072801D9ED +:100D4000122070BD002070BD10B586B0044600F0C2 +:100D50004BFF08B10C2021E7022104F10A0001F049 +:100D600008F8A0788DF80800A0788DF80000607869 +:100D70008DF8040020788DF80300A07B8DF8050025 +:100D8000E07B00B101208DF80600A078C10717D0E4 +:100D9000E07800F0E5FF8DF80100E088ADF80A008A +:100DA0006089ADF80C00A078400716D5207900F0D6 +:100DB000D7FF8DF802002089ADF80E00A0890AE067 +:100DC00040070AD5E07800F0CBFF8DF80200E088FC +:100DD000ADF80E006089ADF8100002A810F02EFAF0 +:100DE0000028B8D168460DF08AFFD7E610B5044652 +:100DF0000121FFF758FF002803D12046BDE810402D +:100E0000A2E75AE40278012A01D0BAB118E0427888 +:100E10003AB1012A05D0022A12D189B1818879B16B +:100E200000E059B1418849B1808838B101EB8101B6 +:100E3000490000EB8000B1EB002F01D20020704789 +:100E40001220704770B5044600780D46012809D07D +:100E500010F067FF052803D010F001F9002800D03A +:100E60000C2070BD0DF00DFE88B10DF01FFE0DF0D1 +:100E700023FF0028F5D125B160780DF0B4FE0028DD +:100E8000EFD1A1886088BDE8704010F0FDB9122054 +:100E900070BD10B504460121FFF7B4FF002804D14E +:100EA0002046BDE810400121CCE706E42DE9F047DB +:100EB0000746B0F84C50FB2092460E46FB2D00D35F +:100EC0000546DFF87886B8F80A00A84200D2054641 +:100ED00097F85510284600F076FEB8F80C108142BD +:100EE00000D208468146B7F84A40FB20FB2C00D3CD +:100EF0000446B8F80E00A04200D2044697F85410F9 +:100F0000204600F060FEB8F81010814200D208467A +:100F10004FF4A4721B2C01D0904203D11B2D25D07D +:100F2000914523D0F580A6F808907480B080524691 +:100F300039463046FFF7AEFC01203070F0881B3890 +:100F4000E02800D9FFDF70881B38E02800D9FFDFD8 +:100F5000308940F64814A0F5A470A04200D9FFDF04 +:100F6000B088A0F5A470A04200D9FFDFBDE8F087EB +:100F7000F0B5871FDDE9056540F67B44A74213D233 +:100F80008F1FA74210D288420ED8B2F5FA7F0BD23B +:100F9000A3F10A00241FA04206D2521C4A43B2EB1E +:100FA000830F01DAAE4201D90020F0BD0120F0BD6F +:100FB0002DE9FC47477A0446884678077ED0F80832 +:100FC0007CD194F83A0008B9012F77D100252E463C +:100FD000F90788F0010919D0208A494600F0ACFED3 +:100FE000F0B36089494600F0B1FEC8B3208A618938 +:100FF000884263D8A18EE08DCDE90001238D628CFB +:10100000A18BE08AFFF7B4FF50B30125B8070ED5D6 +:1010100004EB4500828EC18DCDE90012038D428C18 +:10102000818BC08AFFF7A4FFD0B16D1C2E467807D4 +:101030001DD504EB45074946388A00F07DFE78B19E +:101040007889494600F082FE50B1388A7989884211 +:1010500057D8B98EF88DCDE900013B8D7A8C00E030 +:1010600009E0B98BF88AFFF783FF20B16D1CB8F156 +:10107000000F03D02AE03020BDE8FC87228A01213E +:101080001FE0B14203D004EB4100008A024404EBAC +:101090004100C38A878ABB4233D1838B478BBB42D3 +:1010A0002FD1438C078CBB422BD1038DC78CBB4205 +:1010B00027D143890089834223D100E021E0491CE4 +:1010C000C9B2A942DDD3608990421AD3207810B109 +:1010D000012816D10DE0A078B8F1000F07D040B17B +:1010E000012806D0022804D003280AD101E00028F4 +:1010F000EED1607838B1012805D0022803D003284A +:1011000001D01220B8E70020B6E7002150E70178AF +:10111000C90702D0406812F0D6BF12F0A3BF2DE974 +:10112000F04788B00D46AFF66422D2E9009201463E +:1011300090462846FFF73CFF06000CD100F054FD16 +:1011400040B9FE4F387828B90CF070FEA0F57F4109 +:10115000FF3902D00C2008B008E7032105F1100088 +:1011600000F007FEF54801AA3E380190F4480290CD +:10117000F24806211038039007A801F0D3FB0400C1 +:1011800035D003210BF04EFBB98AA4F84A10FA8A35 +:10119000A4F84C20FB7C0093BA46BB7C208801F06D +:1011A000AEFC00B1FFDF208806F0F0FB218804F1DF +:1011B0000E0000F041FDE3A004F11207006800906A +:1011C0000321684604F0F2FD002069460A5C3A54A7 +:1011D000401CC0B20328F9D3A88B6080688CA08023 +:1011E000288DE080687A410703D508270AE00920A6 +:1011F000B1E7C10701D0012704E0800701D502272C +:1012000000E000273A46BAF81800114610F0D0F86E +:101210000146A062204610F0D9F817F00C0F09D053 +:1012200001231A46214600200BF034FF616A8842F0 +:1012300000D90926002784F85E7084F85F70A878CA +:1012400000F0A6FC6076D5F80300C4F81A00B5F8E3 +:101250000700E083C4F8089084F80C80012084F82B +:101260000001024604F582712046FFF71FFE8DF84B +:1012700000700121684604F099FD9DF8000000F01F +:101280000701C0F3C1021144C0F3401008448DF8B7 +:101290000000401D2076092801D208302076002168 +:1012A00020460BF0BFFA68780DF0F6FBF6BBA97884 +:1012B0002878EA1C0DF0C3FB48B10DF0F7FBA978C4 +:1012C0002878EA1C0DF069FC060002D052E01226D4 +:1012D00050E0687A00F005010020CA0700D0012024 +:1012E0008A0701D540F00200490701D540F0080007 +:1012F0000DF08EFB06003DD1214603200DF077FC5A +:10130000060037D10DF07DFC060033D1697A01F07B +:1013100005018DF81010697AC90706D06889ADF803 +:101320001200288AADF81400012000E022E0697A5A +:101330008A0700D5401C490707D505EB40004189C5 +:10134000ADF81610008AADF8180004A80FF076FF6B +:10135000064695F83A0000B101200DF06BFB4EB93E +:101360000DF0AAFC060005D1A98F20460FF008FF5A +:10137000060008D0208806F00AFB2088062101F02C +:1013800015FB00B1FFDF3046E5E601460020C6E66A +:1013900038B56A48007878B910F0C3FC052805D044 +:1013A0000CF044FDA0F57F41FF3905D068460FF0F1 +:1013B000AEFF040002D00CE00C2038BD009800887D +:1013C00006F0E5FA00980621008801F0EFFA00B176 +:1013D000FFDF204638BD1CB582894189CDE9001266 +:1013E0000389C28881884088FFF7C2FD08B10020C8 +:1013F0001CBD30201CBD70B50546FFF7ECFF002872 +:101400000ED12888062101F0BFFA040007D000F0B1 +:1014100051FC20B1D4F8F800017831B901E0022084 +:1014200070BDD4F84411097809B13A2070BD052186 +:101430008171D4F8F81000200881D4F8F810A88839 +:101440004881D4F8F810E8888881D4F8F810288901 +:10145000C881D4F8F800028941898A4204D8827987 +:10146000082A01D88A4201D3122070BD2988418000 +:10147000D4F8F81002200870002070BD3EB5044674 +:101480000BF002FCB0B12D480125A0F140024570DF +:10149000236842F8423F2379002113714170694665 +:1014A000062001F0FAF900B1FFDF684601F0D3F938 +:1014B00010B10EE012203EBDBDF80440029880F845 +:1014C0000051684601F0C7F918B9BDF80400A04200 +:1014D000F4D100203EBD70B505460088062101F01C +:1014E00053FA040007D000F0E5FB20B1D4F8F8105F +:1014F000087830B901E0022070BDD4F844010078CA +:1015000008B13A2070BD9620005D10F0010F21D087 +:10151000D5F802004860D5F80600886054F8F80F46 +:10152000698910228181206805F10C010E3014F0C8 +:1015300071F80320216807E0CC5B0200E40700207B +:101540007800002011223300087021682888488024 +:10155000002070BD0C2070BD38B504460078EF281F +:101560004DD86088ADF80000009800F013FC88B3F7 +:101570006188080708D4D4E9012082423FD8202A94 +:101580003DD3B0F5804F3AD8207B18B3072836D822 +:10159000607B28B1012803D0022801D003282ED176 +:1015A0004A0703D4022801D0032805D1A07B08B143 +:1015B000012824D1480707D4607D28B1012803D031 +:1015C000022801D003281AD1C806E07D03D50128DE +:1015D00015D110E013E0012801D003280FD1C8066F +:1015E00009D4607E012803D0022801D0032806D147 +:1015F000A07E0F2803D8E07E18B1012801D0122068 +:1016000038BD002038BDF8B514460D46064607F033 +:1016100028FD08B10C20F8BD3046FFF79DFF0028DB +:10162000F9D1FDF788FA2870B07554B9FF208DF80C +:10163000000069460020FDF76DFA69460020FDF7BD +:101640005DFA3046BDE8F840FDF7B1B90022DAE7AF +:1016500070B50C46054612B11F2907D80CE0FF2CC7 +:1016600004D8FCF71EFF18B11F2C01D9122070BD41 +:101670002846FCF700FF08B1002070BD422070BD75 +:1016800010B50446408810B1FDF71BFA78B12078F8 +:10169000618800F001026078FFF7DAFF002805D1C9 +:1016A000FDF7F7F96288824203D9072010BD1220A6 +:1016B00010BD10466168FDF72DFA002010BD10B571 +:1016C0000446408810B1FCF7DEFE70B120786188D6 +:1016D00000F001026078FFF7BBFF002804D16088AA +:1016E0006168FDF70BFA002010BD122010BD7CB51B +:1016F000044640784225012808D8A078FCF7BBFEB4 +:1017000020B120781225012802D090B128467CBD56 +:10171000FDF71DFA20B1A0880028F7D08028F5D861 +:10172000FDF71CFA60B160780028EFD0207801281E +:1017300008D006F04BFA044607F05DF900287DD08A +:101740000C207CBDFDF74CF810B9FDF7F9F990B30A +:1017500007F087FC0028F3D1FCF755FEA0F57F4188 +:10176000FF39EDD1FDF75EF8A68842F210704643CE +:10177000A079FDF7B7F9FCF78DFEF8B1002207213B +:1017800001A801F0CFF8040043D0F748032184609A +:1017900020460AF052FF2046FDF746FDF34DA88A89 +:1017A000A4F84A00E88AA4F84C00FCF77AFE60B17D +:1017B000288B01210DE0FFE712207CBD314600207F +:1017C00007F0E4F9D8B3FFDF4CE0FDF7C9F90146B3 +:1017D000288B07F086FA0146A0620022204606F018 +:1017E000F8F9FCF75EFEB0B9FDF7BAF910F00C0F8E +:1017F00011D001231A46214618460BF04BFC616AB2 +:10180000884208D90721BDF8040001F0CFF800B1E3 +:10181000FFDF09207CBDE87C0090AB7CEA8AA98AC6 +:10182000208801F06CF900B1FFDF208806F0AEF8E7 +:101830003146204607F0AAF918B101E008E011E0AE +:10184000FFDF002204F5CD712046FFF72FFB09E0F2 +:1018500044B1208806F09BF82088072101F0A6F803 +:1018600000B1FFDF00207CBD002140E770B50D46D0 +:10187000072101F089F8040003D094F8730110B136 +:101880000AE0022070BD94F86500142801D01528E4 +:1018900002D194F8C00108B10C2070BD1022294675 +:1018A00004F5BA7013F0B6FE012084F8730100202D +:1018B00070BD10B5072101F067F818B190F87311E9 +:1018C00011B107E0022010BD90F86510142903D073 +:1018D000152901D00C2010BD022180F873110020C1 +:1018E00010BD2DE9FC410C464BF68032122194428A +:1018F0001DD8E4B16946FEF73BFC002815D19DF8E0 +:10190000000000F04CF9019E9DF80000583600F0F0 +:1019100046F9019DAD1C2F882246394630460AF013 +:1019200082FE2888B842F6D10020BDE8FC81084636 +:10193000FBE77CB5044600886946FEF719FC0028E1 +:1019400010D19DF8000000F02AF9019D9DF80000DB +:10195000583500F024F90198A27890F82C109142A3 +:1019600001D10C207CBD7F212972A9720021E9726E +:10197000E17880F82D10217980F82E10A17880F878 +:101980002C1000207CBD1CB50C466946FEF7F0FB10 +:1019900000280AD19DF8000000F001F9019890F8A4 +:1019A000730000B10120207000201CBD7CB50D46E5 +:1019B00014466946FEF7DCFB002809D19DF80000BB +:1019C00000F0EDF8019890F82C00012801D00C20CF +:1019D0007CBD9DF8000000F0E2F8019890F86010DE +:1019E000297090F86100207000207CBD70B50D4614 +:1019F0001646072100F0C8FF18B381880124C38868 +:101A0000428804EB4104AC4217D842F2107463439D +:101A1000A4106243B3FBF2F2521E94B24FF4FA7276 +:101A2000944200D91446A54200D22C46491C641C9D +:101A3000B4FBF1F24A43521E91B290F8AC211AB9AC +:101A400001E0022070BD01843180002070BD10B51E +:101A50000C46072100F098FF48B180F8DF4024B120 +:101A600090F8DD1009B107F052F9002010BD0220F6 +:101A700010BD017899B1417889B141881B290ED3F5 +:101A800081881B290BD3C188022908D337490268F2 +:101A9000403941F8522F40684860002070471220BA +:101AA000704710B504460FF07FFC204607F0E8F8B9 +:101AB000002010BD10B507F0E6F8002010BD2DE99C +:101AC000F04115460F4606460122114638460FF0F2 +:101AD0006FFC04460121384607F003F9844200D226 +:101AE000044601213046653C00F05EF806460121BF +:101AF000002000F059F8304401219630844206D984 +:101B000000F19601201AB0FBF1F0401C81B229804F +:101B10000020BDE8F08110B5044600F083F808B15C +:101B20000C2010BD601C0AF0D5FB207800F00100ED +:101B3000FCF773FE207800F001000CF0B2FF0020EB +:101B400010BD10B50446072000F0B8FE08B10C2007 +:101B500010BD2078C00715D000226078114612F021 +:101B60000DFF28B1122010BD6C000020E4070020FA +:101B7000A06809F06AF86078D4F8041009F06EF8EB +:101B80000020F0E7002009F060F800210846F5E7A2 +:101B900018B1022801D0012070470020704708B119 +:101BA000002070470120704710B5012904D0022998 +:101BB00005D0FFDF2046D6E7C000503001E08000AE +:101BC0002C3084B2F6E711F00C0F04D04FF474718E +:101BD00001EB801006E0022902D0C000703001E065 +:101BE00080003C3080B2704710B510F09AF804289D +:101BF00005D010F096F8052801D00020B3E70120A9 +:101C0000B1E710B5FFF7F0FF10B10DF019F828B9E2 +:101C100007F027FA20B1FCF7DBFD08B10120A2E7AD +:101C20000020A0E710B5FFF7DFFF18B907F019FA99 +:101C3000002898D0012096E72DE9FE4300250F46A5 +:101C400080460A260421404604F0D9F840460AF0AE +:101C5000BCFF062000F040FE044616E06946062060 +:101C600000F01BFE0BE000BFBDF80400B84206D038 +:101C70000298042241460E3013F0A0FC50B1684691 +:101C800000F0E9FD0500EFD0641E002C06DD002DFC +:101C9000E4D005E040460AF0A1FFF5E705B9FFDF13 +:101CA000D8F800000AF0B5FF761E01D00028C9D090 +:101CB000BDE8FE8390F8D01090F8730020B919B1F8 +:101CC000042901D0012070470020704701780029C5 +:101CD0000AD0416891F8DD20002A05D0002281F861 +:101CE000DD20406807F013B870471B38E12806D2A2 +:101CF000B1F5A47F03D344F29020814201D9122090 +:101D0000704700207047FB2802D8B1F5296F01D930 +:101D1000112070470020704770B514460546012217 +:101D200000F05CF8002806D121462846BDE8704046 +:101D3000002200F053B870BD042803D321B9B0F5D8 +:101D4000804F01D90020704701207047042803D339 +:101D500021B9B0F5804F01D90020704701207047AC +:101D6000012802D018B100207047022070470120DE +:101D7000704710B500224FF4C84408E030F8123024 +:101D8000A34200D9234620F81230521CD2B28A4214 +:101D9000F4D3E8E680B2C1060BD401071CD4810657 +:101DA0004FEAC07101D5B9B900E099B1800713D4E9 +:101DB00010E0410610D481060ED4C1074FEA8071AD +:101DC00004D0002902DB400704D405E0010703D456 +:101DD000400701D401207047002070470AB101225A +:101DE00000E00222024202D1C80802D109B100205B +:101DF000704711207047000030B5058825F4004475 +:101E000021448CB24FF4004194420AD2121B92B288 +:101E10001B339A4201D2A94307E005F40041214354 +:101E200003E0A21A92B2A9431143018030BD0844D5 +:101E3000083050434A31084480B2704770B51D469F +:101E400016460B46044629463046049AFFF7EFFF34 +:101E50000646B34200D2FFDF2821204613F07BFC68 +:101E60004FF6FF70A082283EB0B265776080B0F573 +:101E7000004F00D9FFDF618805F13C00814200D2AC +:101E8000FFDF60880835401B343880B220801B2873 +:101E900000D21B2020800020A07770BD8161886166 +:101EA00070472DE9F05F0D46C188044600F128090E +:101EB000008921F4004620F4004800F062FB10B1D4 +:101EC0000020BDE8F09F4FF0000A4FF0010BB04535 +:101ED0000CD9617FA8EB0600401A0838854219DC4E +:101EE00009EB06000021058041801AE06088617FCF +:101EF000801B471A083F0DD41B2F00DAFFDFBD42BD +:101F000001DC294600E0B9B2681A0204120C04D0C0 +:101F1000424502DD84F817A0D2E709EB06000180F4 +:101F2000428084F817B0CCE770B5044600F128026F +:101F3000C088E37D20F400402BB110440288438820 +:101F400013448B4201D2002070BD00258A4202D387 +:101F50000180458008E0891A0904090C418003D0FA +:101F6000A01D00F01EFB08E0637F008808331844C2 +:101F700081B26288A01DFFF73FFFE575012070BDAB +:101F800070B5034600F12804C588808820F4004617 +:101F90002644A84202D10020188270BD9889358855 +:101FA000A84206D3401B75882D1A2044ADB2C01E2E +:101FB00005E02C1AA5B25C7F20443044401D0C88FB +:101FC000AC4200D90D809C8924B10024147009888A +:101FD000198270BD0124F9E770B5044600F12801AB +:101FE000808820F400404518208A002825D0A18947 +:101FF000084480B2A08129886A881144814200D2B5 +:10200000FFDF2888698800260844A189884212D108 +:10201000A069807F2871698819B1201D00F0C1FA7C +:1020200008E0637F28880833184481B26288201D45 +:10203000FFF7E2FEA6812682012070BD2DE9F04166 +:10204000418987880026044600F12805B94218D046 +:1020500004F10A0821F400402844418819B140469F +:1020600000F09FFA08E0637F00880833184481B2CB +:1020700062884046FFF7C0FE761C6189B6B2B9425D +:10208000E8D13046BDE8F0812DE9F04104460B4629 +:1020900027892830A68827F40041B4F80A80014433 +:1020A0000D46B74201D10020ECE70AB1481D10608F +:1020B00023B1627F691D184613F0ACFA2E88698837 +:1020C00004F1080021B18A1996B200F06AFA06E01C +:1020D000637F62880833991989B2FFF78DFE4745FF +:1020E00001D1208960813046CCE78188C088814257 +:1020F00001D101207047002070470189808881420A +:1021000001D1012070470020704770B58588C388D1 +:1021100000F1280425F4004223F4004114449D42B8 +:102120001AD08389058A5E1925886388EC18A6422F +:1021300014D313B18B4211D30EE0437F08325C19E4 +:102140002244408892B2801A80B22333984201D24E +:1021500011B103E08A4201D1002070BD012070BDA1 +:102160002DE9F0478846C1880446008921F40046DD +:1021700004F1280720F4004507EB060900F001FAF6 +:10218000002178BBB54204D9627FA81B801A0025C4 +:1021900003E06088627F801B801A083823D4E289BC +:1021A00062B1B9F80020B9F802303BB1E81A2177E2 +:1021B000404518DBE0893844801A09E0801A21770D +:1021C00040450ADB607FE1890830304439440844E7 +:1021D000C01EA4F81280BDE8F087454503DB01204E +:1021E0002077E7E7FFE761820020F4E72DE9F74F6A +:1021F000044600F12805C088884620F4004A608A19 +:1022000005EB0A0608B1404502D20020BDE8FE8F6A +:10221000E08978B13788B6F8029007EB0901884267 +:1022200000D0FFDF207F4FF0000B50EA090106D0FD +:1022300088B33BE00027A07FB9463071F2E7E1891F +:1022400059B1607F2944083050440844B4F81F1045 +:1022500020F8031D94F821108170E28907EB080033 +:1022600002EB0801E1813080A6F802B002985F46D7 +:1022700050B1637F30880833184481B26288A01D52 +:10228000FFF7BAFDE78121E0607FE1890830504423 +:10229000294408442DE0FFE7E089B4F81F102844E2 +:1022A000C01B20F8031D94F82110817009EB080071 +:1022B000E28981B202EB0800E081378071800298E8 +:1022C000A0B1A01D00F06DF9A4F80EB0A07F401CD5 +:1022D000A077A07D08B1E088A08284F816B000BF86 +:1022E000A4F812B084F817B001208FE7E0892844E1 +:1022F000C01B30F8031DA4F81F10807884F821005B +:10230000EEE710B5818800F1280321F4004423444E +:10231000848AC288A14212D0914210D0818971B9B9 +:10232000826972B11046FFF7E8FE50B91089283271 +:1023300020F40040104419790079884201D100202E +:1023400010BD184610BD00F12803407F0830084436 +:10235000C01E1060088808B9DB1E13600888498811 +:10236000084480B270472DE9F04100F12806407F13 +:102370001C4608309046431808884D88069ADB1E94 +:10238000A0B1C01C80B2904214D9801AA04200DBD8 +:10239000204687B298183A46414613F00FF90028B4 +:1023A00016D1E01B84B2B844002005E0ED1CADB2AC +:1023B000F61EE8E7101A80B20119A94206D8304487 +:1023C00022464146BDE8F04113F0F8B84FF0FF3027 +:1023D00058E62DE9F04100F12804407F1E46083000 +:1023E00090464318002508884F88069ADB1E90B156 +:1023F000C01C80B2904212D9801AB04200DB304635 +:1024000085B299182A46404613F004F9701B86B22B +:10241000A844002005E0FF1CBFB2E41EEAE7101A42 +:1024200080B28119B94206D821183246404613F0CD +:10243000F1F8A81985B2284624E62DE9F04100F10B +:102440002804407F1E46083090464318002508881F +:102450004F88069ADB1E90B1C01C80B2904212D900 +:10246000801AB04200DB304685B298182A464146B1 +:1024700013F0D0F8701B86B2A844002005E0FF1CC2 +:10248000BFB2E41EEAE7101A80B28119B94206D839 +:1024900020443246414613F0BDF8A81985B22846BB +:1024A000F0E5401D704710B5044600F12801C288D0 +:1024B000808820F400431944904206D0A28922B9B2 +:1024C000228A12B9A28A904201D1002010BD088848 +:1024D000498831B1201D00F064F8002020820120DD +:1024E00010BD637F62880833184481B2201DFFF756 +:1024F00083FCF2E70021C18101774182C1758175BA +:10250000704703881380C28942B1C28822F4004315 +:1025100000F128021A440A60C08970470020704701 +:1025200010B50446808AA0F57F41FF3900D0FFDF57 +:10253000E088A082E08900B10120A07510BD4FF6AF +:10254000FF71818200218175704710B50446808A31 +:10255000A0F57F41FF3900D1FFDFA07D28B9A08819 +:10256000A18A884201D1002010BD012010BD8188C0 +:10257000828A914201D1807D08B1002070470120FC +:10258000704720F4004221F400439A4207D100F43E +:10259000004001F40041884201D001207047002032 +:1025A000704730B5044600880D4620F40040A8422C +:1025B00000D2FFDF21884FF4004088432843208069 +:1025C00030BD70B50C00054609D0082C00D2FFDFE5 +:1025D0001DB1A1B2286800F044F8201D70BD0DB1F6 +:1025E00000202860002070BD0021026803E093886D +:1025F0001268194489B2002AF9D100F032B870B5D6 +:1026000000260D460446082900D2FFDF206808B9DD +:102610001EE0044620688188A94202D00168002992 +:10262000F7D181880646A94201D100680DE005F185 +:10263000080293B20022994209D32844491B026040 +:1026400081802168096821600160206000E0002627 +:10265000304670BD00230B608A8002680A6001600A +:10266000704700234360021D018102607047F0B58E +:102670000F460188408815460C181E46AC4200D310 +:10268000641B3044A84200D9FFDFA019A84200D93A +:10269000FFDF3819F0BD2DE9F04188460646018874 +:1026A000408815460C181F46AC4200D3641B3844C2 +:1026B000A84200D9FFDFE019A84200D9FFDF7088E7 +:1026C0003844708008EB0400BDE8F0812DE9F0414A +:1026D000054600881E461746841B8846BC4200D328 +:1026E0003C442C8068883044B84200D9FFDFA019F0 +:1026F000B84200D9FFDF68883044688008EB0400E6 +:10270000E2E72DE9F04106881D460446701980B2C3 +:10271000174688462080B84201D3C01B20806088BD +:10272000A84200D2FFDF7019B84200D9FFDF6088ED +:10273000401B608008EB0600C6E730B50D460188F7 +:10274000CC18944200D3A41A4088984200D8FFDFE6 +:10275000281930BD2DE9F041C84D04469046A878AF +:102760000E46A04200D8FFDF05EB8607B86A50F896 +:10277000240000B1FFDFB868002816D0304600F012 +:1027800044F90146B868FFF73AFF05000CD0B86A73 +:10279000082E40F8245000D3FFDFB94842462946AE +:1027A00050F82630204698472846BDE8F0812DE9AC +:1027B000F8431E468C1991460F460546FF2C00D95A +:1027C000FFDFB14500D9FFDFE4B200954DB3002033 +:1027D0008046E81C20F00300A84200D0FFDF4946F5 +:1027E000DFF89892684689F8001089F8017089F836 +:1027F000024089F8034089F8044089F8054089F8C7 +:10280000066089F80770414600F008F90021424649 +:102810000F464B460098C01C20F00300009012B1F8 +:102820000EE00120D4E703EB8106B062002005E052 +:10283000D6F828C04CF82070401CC0B2A042F7D394 +:102840000098491C00EB8400C9B200900829E1D32C +:10285000401BBDE8F88310B50446EEF75AFD08B1F9 +:10286000102010BD2078854A618802EB80009278A4 +:102870000EE0836A53F8213043B14A1C6280A18084 +:10288000806A50F82100A060002010BD491C89B268 +:102890008A42EED86180052010BD70B505460C4611 +:1028A0000846EEF736FD08B1102070BD082D01D3A3 +:1028B000072070BD25700020608070BD0EB5694690 +:1028C000FFF7EBFF00B1FFDF6846FFF7C4FF08B179 +:1028D00000200EBD01200EBD10B50446082800D30F +:1028E000FFDF6648005D10BD3EB505460024694621 +:1028F000FFF7D3FF18B1FFDF01E0641CE4B26846C4 +:10290000FFF7A9FF0028F8D02846FFF7E5FF001BD6 +:10291000C0B23EBD59498978814201D9C0B27047E1 +:10292000FF2070472DE9F041544B062903D00729B9 +:102930001CD19D7900E0002500244FF6FF7603EBC3 +:10294000810713F801C00AE06319D7F828E09BB2A9 +:102950005EF823E0BEF1000F04D0641CA4B2A445CD +:10296000F2D8334603801846B34201D100201CE759 +:10297000BDE8F041EEE6A0F57F43FF3B01D008291A +:1029800001D300207047E5E6A0F57F42FF3A0BD067 +:10299000082909D2394A9378834205D902EB81018B +:1029A000896A51F820007047002070472DE9F041F6 +:1029B00004460D46A4F57F4143F20200FF3902D0E0 +:1029C000082D01D30720F0E62C494FF000088A7843 +:1029D000A242F8D901EB8506B26A52F82470002FA2 +:1029E000F1D027483946203050F82520204690471E +:1029F000B16A284641F8248000F007F802463946BB +:102A0000B068FFF727FE0020CFE61D49403131F8BE +:102A100010004FF6FC71C01C084070472DE9F843C8 +:102A2000164E8846054600242868C01C20F0030086 +:102A300028602046FFF7E9FF315D4843B8F1000FF9 +:102A400001D0002200E02A680146009232B100273E +:102A50004FEA0D00FFF7B5FD1FB106E0012700208A +:102A6000F8E706EB8401009A8A602968641C084430 +:102A7000E4B22860082CD7D3EBE60000040800205D +:102A8000D85B020070B50E461D46114600F0D4F822 +:102A900004462946304600F0D8F82044001D70BD99 +:102AA0002DE9F04190460D4604004FF0000610D08D +:102AB0000027E01C20F00300A04200D0FFDFDDB1C2 +:102AC00041460020FFF77DFD0C3000EB850617B175 +:102AD00012E00127EDE7614F04F10C00A9003C6012 +:102AE0002572606000EB85002060606812F033FEA4 +:102AF00041463868FFF765FD3046BDE8F0812DE9B5 +:102B0000FF4F564C804681B020689A46934600B9E4 +:102B1000FFDF2068027A424503D9416851F8280056 +:102B200020B143F2020005B0BDE8F08F5146029893 +:102B300000F082F886B258460E9900F086F885B209 +:102B40007019001D87B22068A14639460068FFF75A +:102B500056FD04001FD0678025802946201D0E9D4C +:102B600007465A4601230095FFF768F92088314649 +:102B700038440123029ACDF800A0FFF75FF92088BE +:102B8000C1193846FFF78AF9D9F8000041680020DA +:102B900041F82840C7E70420C5E770B52F4C05462B +:102BA000206800B9FFDF2068017AA9420ED9426887 +:102BB00052F8251051B1002342F825304A880068A8 +:102BC000FFF748FD216800200A7A08E043F202007E +:102BD00070BD4B6853F8203033B9401CC0B28242FC +:102BE000F7D80868FFF700FD002070BD70B51B4ED8 +:102BF00005460024306800B9FFDF3068017AA94239 +:102C000004D9406850F8250000B1041D204670BD6D +:102C100070B5124E05460024306800B9FFDF3068F9 +:102C2000017AA94206D9406850F8251011B131F84F +:102C3000040B4418204670BD10B50A460121FFF769 +:102C4000F6F8C01C20F0030010BD10B50A460121A3 +:102C5000FFF7EDF8C01C20F0030010BD800000203D +:102C600070B50446C2F11005281912F0D3FC15F016 +:102C7000FF0108D0491EC9B2802060542046BDE83B +:102C8000704012F046BD70BD30B505E05B1EDBB292 +:102C9000CC5CD55C6C40C454002BF7D130BD10B572 +:102CA000002409E00B78521E44EA430300F8013B7C +:102CB00011F8013BD2B2DC09002AF3D110BD2DE995 +:102CC000F04389B01E46DDE9107990460D000446B8 +:102CD00022D002460846F949FDF7DEFC10222146C3 +:102CE0003846FFF7DCFFE07B000606D5F34A39469D +:102CF000102310320846FFF7C7FF10223946484616 +:102D0000FFF7CDFFF87B000606D5EC4A49461023B5 +:102D100010320846FFF7B8FF1021204612F0F9FCE8 +:102D20000DE0103EB6B208EB0601102322466846BD +:102D3000FFF7AAFF224628466946FDF7ADFC102E94 +:102D4000EFD818D0F2B241466846FFF789FF10234A +:102D50004A46694604A8FFF797FF1023224604A9B4 +:102D60006846FFF791FF224628466946FDF794FC26 +:102D700009B0BDE8F08310233A464146EAE770B552 +:102D80009CB01E460546134620980C468DF8080058 +:102D9000202219460DF1090012F03CFC20222146A8 +:102DA0000DF1290012F036FC17A913A8CDE9000196 +:102DB000412302AA31462846FFF781FF1CB070BDAF +:102DC0002DE9FF4F9FB014AEDDE92D5410AFBB4984 +:102DD000CDE90076202320311AA8FFF770FF4FF0CD +:102DE00000088DF808804FF001098DF8099054F81B +:102DF000010FCDF80A00A088ADF80E0014F8010C00 +:102E00001022C0F340008DF8100055F8010FCDF8E6 +:102E10001100A888ADF8150015F8010C2C99C0F325 +:102E200040008DF8170006A8824612F0F3FB0AA8AE +:102E300083461022229912F0EDFBA0483523083872 +:102E400002AA40688DF83C80CDE900760E901AA960 +:102E50001F98FFF734FF8DF808808DF809902068DF +:102E6000CDF80A00A088ADF80E0014F8010C10226D +:102E7000C0F340008DF810002868CDF81100A88834 +:102E8000ADF8150015F8010C2C99C0F340008DF831 +:102E90001700504612F0BEFB58461022229912F03D +:102EA000B9FB86483523083802AA40688DF83C9063 +:102EB000CDE900760E901AA92098FFF700FF23B005 +:102EC000BDE8F08FF0B59BB00C460546DDE9221059 +:102ED0001E461746DDE92032D0F801C0CDF808C003 +:102EE000B0F805C0ADF80CC00078C0F340008DF814 +:102EF0000E00D1F80100CDF80F00B1F80500ADF8D3 +:102F0000130008781946C0F340008DF815001088AA +:102F1000ADF8160090788DF818000DF11900102208 +:102F200012F078FB0DF129001022314612F072FBED +:102F30000DF139001022394612F06CFB17A913A8C5 +:102F4000CDE90001412302AA21462846FFF7B7FE3A +:102F50001BB0F0BDF0B5A3B017460D4604461E46A3 +:102F6000102202A8289912F055FB06A82022394603 +:102F700012F050FB0EA82022294612F04BFB1EA98E +:102F80001AA8CDE90001502302AA314616A8FFF77E +:102F900096FE1698206023B0F0BDF0B589B00446C7 +:102FA000DDE90E070D463978109EC1F340018DF81A +:102FB000001031789446C1F340018DF80110196872 +:102FC000CDF802109988ADF8061099798DF808109F +:102FD0000168CDF809108188ADF80D1080798DF861 +:102FE0000F0010236A46614604A8FFF74DFE2246F3 +:102FF000284604A9FDF750FBD6F801000090B6F86A +:103000000500ADF80400D7F80100CDF80600B7F8C8 +:103010000500ADF80A000020039010236A462146FF +:1030200004A8FFF731FE2246284604A9FDF734FB29 +:1030300009B0F0BD1FB51C6800945B68019313686C +:10304000029352680392024608466946FDF724FB44 +:103050001FBD10B588B004461068049050680590F4 +:1030600000200690079008466A4604A9FDF714FB65 +:10307000BDF80000208008B010BD1FB51288ADF863 +:1030800000201A88ADF802200022019202920392D9 +:10309000024608466946FDF7FFFA1FBD7FB5074B9C +:1030A00014460546083B9A1C6846FFF7E6FF224691 +:1030B00069462846FFF7CDFF7FBD0000305C020067 +:1030C00070B5044600780E46012813D0052802D0BA +:1030D000092813D10EE0A06861690578042003F087 +:1030E0006DF9052D0AD0782300220420616903F0D0 +:1030F000BBF803E00420616903F060F93146204623 +:10310000BDE8704001F084B810B500F12D03C2791C +:103110009C78411D144064F30102C271D2070DD0A6 +:103120004A795C7922404A710A791B791A400A71FE +:103130008278C9788A4200D9817010BD00224A7114 +:10314000F5E74178012900D00C21017070472DE985 +:10315000F04F93B04FF0000B0C690D468DF820B086 +:10316000097801260C2017464FF00D084FF0110A80 +:103170004FF008091B2975D2DFE811F01B00C202CD +:1031800005031D035C036F03A103B603F7031804D3 +:10319000600492049F04EB042905330551055C0586 +:1031A000ED053006330662067E06F8061C07E506C6 +:1031B000EA0614B120781D282AD0D5F808805FEAE5 +:1031C00008004FD001208DF82000686A02220D907F +:1031D0008DF824200A208DF82500A8690A90A88877 +:1031E0000028EED098F8001091B10F2910D27DD2AE +:1031F000DFE801F07C1349DEFCFBFAF9F8F7380848 +:103200009CF6F50002282DD124B120780C2801D09D +:103210000026EEE38DF82020CAE10420696A03F05D +:10322000CDF8A8880728EED1204600F0ECFF022850 +:1032300009D0204600F0E7FF032807D9204600F018 +:10324000E2FF072802D20120207004E0002CB8D051 +:1032500020780128D7D198F80400C11F0A2902D389 +:103260000A2061E0C3E1A070D8F80010E162B8F86C +:103270000410218698F8060084F832000120287096 +:103280000320207044E00728BDD1002C99D020787D +:103290000D28B8D198F8031094F82F20C1F3C0007E +:1032A000C2F3C002104201D0062000E007208907C7 +:1032B00007D198F805100142D2D198F806100142C2 +:1032C000CED194F8312098F8051020EA020211427C +:1032D000C6D194F8322098F8061090430142BFD12D +:1032E00098F80400C11F0A29BAD200E006E2617D05 +:1032F00081427CD8D8F800106160B8F804102181B0 +:1033000098F80600A072012028700E20207003207B +:103310008DF82000686A0D9004F12D000990601D61 +:103320000A900F300B9021E12875FDE3412891D1DF +:10333000204600F068FF042802D1E078C00704D1DD +:10334000204600F060FF0F2884D1A88CD5F80C80AF +:1033500080B24FF0400BE669FFF748FC3246414629 +:103360005B464E46CDF80090FFF733F80B208DF802 +:103370002000686A0D90E0690990002108A8FFF715 +:103380009FFE2078042806D0A07D58B1012809D0DE +:1033900003280AD048E305202070032028708DF808 +:1033A0002060CCE184F800A032E712202070E8E130 +:1033B0001128BCD1204600F026FF042802D1E07875 +:1033C000C00719D0204600F01EFF062805D1E0787E +:1033D000C00711D1A07D02280ED0204608E0CBE026 +:1033E00084E070E14FE122E102E1E8E019E0AEE1C2 +:1033F00000F009FF11289AD1102208F1010104F10F +:103400003C0012F007F9607801286ED0122020707D +:10341000E078C00760D0A07D0028C8D00128C6D0C1 +:103420005AE0112890D1204600F0EDFE082804D083 +:10343000204600F0E8FE132886D104F16C0010222B +:1034400008F10101064612F0E5F8207808280DD0B1 +:1034500014202070E178C8070DD0A07D02280AD082 +:103460006278022A04D00328A1D035E00920F0E7D1 +:1034700008B1012837D1C80713D0A07D02281DD07C +:1034800000200090D4E9062133460EA8FFF777FC10 +:1034900010220EA904F13C0012F090F8C8B10420EB +:1034A00042E7D4E90912201D8DE8070004F12C033E +:1034B00032460EA8616BFFF770FDE9E7606BC1F360 +:1034C0004401491E0068C84000F0010040F080003F +:1034D000D7E72078092806D185F800908DF820904C +:1034E00032E32870EBE30920FBE79CE1112899D136 +:1034F000204600F088FE0A2802D1E078C00704D1F7 +:10350000204600F080FE15288CD104F13C001022EA +:1035100008F10101064612F07DF820780A2816D03D +:1035200016202070D4E90932606B611D8DE80F0010 +:1035300004F15C0304F16C0247310EA8FFF7C2FCF2 +:1035400010220EA9304612F039F818B1F6E20B201D +:10355000207071E22046FFF7D7FDA078216A0A1893 +:10356000C0F11001104612F0D4F823E3394608A840 +:10357000FFF7A6FD06463BE20228B8D1204600F040 +:1035800042FE042804D3204600F03DFE082809D35B +:10359000204600F038FE0E2829D3204600F033FEE6 +:1035A000122824D2A07D0228A1D10E208DF820005F +:1035B000686A0D9098F801008DF82400F0E3022865 +:1035C00095D1204600F01FFE002810D0204600F0C4 +:1035D0001AFE0128F9D0204600F015FE0C28F4D080 +:1035E00004208DF8240098F801008DF825005EE293 +:1035F0001128FCD1002CFAD020781728F7D1617857 +:10360000606A022911D0002101EB4101182606EB66 +:10361000C1011022405808F1010111F0FBFF042004 +:10362000696A00F0E3FD2670F2E50121ECE70B2862 +:10363000DDD1002CDBD020781828D8D16078616AE1 +:1036400002281CD05FF0000000EB4002102000EBCD +:10365000C2000958B8F8010008806078616A022841 +:103660000FD0002000EB4002142000EBC2000958EC +:10367000404650F8032F0A604068486039E0012056 +:10368000E2E70120EEE71128B1D1002CAFD020787D +:103690001928ACD16178606A022912D05FF000016C +:1036A00001EB41011C2202EBC1011022405808F13C +:1036B000010111F0AFFF0420696A00F097FD1A20A4 +:1036C000B6E00121ECE7082891D1002C8FD02078BA +:1036D0001A288CD1606A98F80120017862F34701BA +:1036E0000170616AD8F8022041F8012FB8F806008D +:1036F00088800420696A00F079FD8EE2072013E6D5 +:103700003878012894D1182204F11400796811F056 +:10371000C6FFE079C10894F82F0001EAD001E078F3 +:1037200061F30000E070217D002974D12178032924 +:1037300009D0C00725D0032028708DF82090686A32 +:103740000D90412004E3607DA178884201D90620D4 +:10375000EAE502262671E179204621F0E001E171D7 +:10376000617A21F0F0016172A17A21F0F001A17279 +:10377000FFF7CAFC2E708DF82090686A0D90072024 +:10378000E6E20420ADE6387805289DD18DF82000CA +:10379000686A0D90B8680A900720ADF824000A986E +:1037A0008DF830B06168016021898180A17A8171D2 +:1037B00004202070F4E23978052985D18DF8201095 +:1037C000696A0D91391D09AE0EC986E80E004121C6 +:1037D000ADF824108DF830B01070A88CD7F80C809C +:1037E00080B24026A769FFF713FA41463A463346AE +:1037F000C846CDF80090FEF720FE002108A8FFF78C +:103800005FFCE07820F03E00801CE0702078052806 +:1038100002D00F200CE049E1A07D20B1012802D0A8 +:10382000032802D002E10720C0E584F80080EFE41D +:103830002070EDE4102104F15C0002F0E0FA606B0E +:10384000B0BBA07D18B1012801D00520FDE0062005 +:103850002870F7486063A063BEE23878022894D1EC +:10386000387908B12875B3E3A07D022802D0032877 +:1038700005D022E0B8680028F5D060631CE06078CD +:10388000012806D0A07994F82E10012805D0E84828 +:1038900006E0A17994F82E00F7E7B8680028E2D096 +:1038A0006063E078C00701D0012902D0E04803E05E +:1038B00003E0F8680028D6D0A063062011E68DF852 +:1038C0002090696A0D91E1784846C90709D061786E +:1038D000022903D1A17D29B1012903D0A17D0329AA +:1038E00000D00720287031E138780528BBD1207836 +:1038F00007281ED084F800A005208DF82000686AF3 +:103900000D90B8680A90ADF824A08DF830B003216E +:103910000170E178CA070FD0A27D022A1AD00021D7 +:103920000091D4E9061204F15C03401CFFF727FA6A +:1039300067E384F80090DFE7D4E90923211D8DE8CF +:103940000E0004F12C0304F15C02401C616BFFF7D4 +:1039500024FB56E3626BC1F34401491E1268CA405E +:1039600002F0010141F08001DAE738780528BDD185 +:103970008DF82000686A0D90B8680A90ADF824A010 +:103980008DF830B0042100F8011B102204F15C0115 +:1039900011F040FE002108A8FFF792FB20780928CB +:1039A00001D0132044E70A2020709CE5E078C1078D +:1039B00042D0A17D012902D0022927D038E06178C8 +:1039C00008A8012916D004F16C010091D4E906126F +:1039D00004F15C03001DFFF7BDFA0A2028700326DE +:1039E0008DF82080686A0D90002108A8FFF768FB19 +:1039F000DDE2C3E204F15C010091D4E9062104F1A7 +:103A00006C03001DFFF7A6FA0026E9E7C0F34401A6 +:103A100014290DD24FF0006101EBB0104FEAB060F5 +:103A2000E0706078012801D01020BFE40620FFE696 +:103A3000607801283FF4B8AC0A2052E5E178C90764 +:103A400008D0A17D012903D10B20287004202FE08C +:103A500028702DE00E2028706078616B012817D047 +:103A600004F15C0304F16C020EA8FFF7E3FA2046B0 +:103A7000FFF74AFBA0780EAEC0F11001304411F000 +:103A800048FE06208DF82000686A09960D909AE09D +:103A900004F16C0304F15C020EA8FFF7CBFAE9E72E +:103AA0003978022903D139790029D1D029758FE2DB +:103AB0008DF82000686A0D9058E538780728F6D10F +:103AC000D4E909216078012809D000BF04F16C0015 +:103AD000CDE90002029105D104F16C0304E004F188 +:103AE0005C00F5E704F15C0304F14C007A680646DB +:103AF000216AFFF765F96078012821D1A078216A51 +:103B00000A18C0F11001104611F003FED4E9092390 +:103B1000606B04F12D018DE80F0004F15C0304F1EA +:103B20006C0231460EA800E054E2FFF7CBF91022F8 +:103B30000EA904F13C0011F041FD08B10B20AFE4E7 +:103B400085F800808DF82090686A0D908DF824A08B +:103B50000CE538780528AAD18DF82000686A0D9008 +:103B6000B8680A90ADF824A08DF830B080F80080D5 +:103B7000617801291AD0D4E9093204F12D01A66B2C +:103B800003920096CDE9011304F16C0304F15C0289 +:103B900004F14C01401CFFF795F9002108A8FFF73C +:103BA0008FFA6078012805D0152041E6D4E9092371 +:103BB000611DE4E70E20287006208DF82000686A59 +:103BC000CDF824B00D90A0788DF82800CEE4387898 +:103BD0000328C0D1E079C00770D00F2028700720DB +:103BE00066E7387804286BD11422391D04F11400DB +:103BF00011F055FD616A208CA1F80900616AA07876 +:103C0000C871E179626A01F003011172616A627A36 +:103C10000A73616AA07A81F82400162061E485F8AD +:103C200000A08DF82090696A50460D9190E0000048 +:103C3000305C02003878052842D1B868A861617804 +:103C4000606A022901D0012100E0002101EB41015D +:103C5000142606EBC1014058082102F0D0F8617823 +:103C6000606A022901D0012100E0002101EB41013D +:103C700006EBC101425802A8E169FFF70FFA60782C +:103C8000626A022801D0012000E0002000EB400120 +:103C9000102000EBC1000223105802A90932FEF7E0 +:103CA000F3FF626AFD4B0EA80932A169FFF7E5F93F +:103CB0006178606A022904D0012103E042E18BE0CF +:103CC000BDE0002101EB4101182606EBC101A278FD +:103CD00040580EA911F09EFC6178606A022901D05B +:103CE000012100E0002101EB410106EBC101405838 +:103CF000A1780844C1F1100111F00BFD05208DF8E9 +:103D00002000686A0D90A8690A90ADF824A08DF88B +:103D100030B0062101706278616A022A01D0012266 +:103D200000E0002202EB420206EBC202401C89586E +:103D3000102211F06FFC002108A8FFF7C1F9122032 +:103D4000C5F818B028708DF82090686A0D900B2087 +:103D50008DF824000AE43878052870D18DF8200009 +:103D6000686A0D90B8680A900B20ADF824000A9894 +:103D7000072101706178626A022901D0012100E007 +:103D8000002101EB4103102101EBC30151580988C7 +:103D9000A0F801106178626A022902D0012101E0D5 +:103DA0002FE1002101EB4103142101EBC301515824 +:103DB0000A6840F8032F4968416059E019202870CB +:103DC00001208DF8300077E6162028708DF830B08D +:103DD000002108A8FFF774F9032617E114202870C2 +:103DE000B0E6387805282AD18DF82000686A0D9051 +:103DF000B8680A90ADF824A08DF830B080F8009033 +:103E00006278616A4E46022A01D0012200E0002257 +:103E100002EB42021C2303EBC202401C8958102211 +:103E200011F0F8FB002108A8FFF74AF915202870C7 +:103E30008DF82060686A0D908DF824603CE680E083 +:103E4000387805287DD18DF82000686A0D90B86813 +:103E50000A90ADF824900921017061690978490838 +:103E60004170616951F8012FC0F802208988C18032 +:103E700020781C28A8D1A1E7E078C00702D04FF035 +:103E8000060C01E04FF0070C607802280AD000BF52 +:103E90004FF0000000EB040101F1090105D04FF0E3 +:103EA000010004E04FF00100F4E74FF000000B7850 +:103EB000204413EA0C030B7010F8092F02EA0C02DD +:103EC000027004D14FF01B0C84F800C0D2B394F8F8 +:103ED00001C0BCF1010F00D09BB990F800C0E046D2 +:103EE0005FEACC7C04D028F001060670102606E0BC +:103EF0005FEA887C05D528F00206067013262E702E +:103F0000032694F801C0BCF1020F00D092B991F8D9 +:103F100000C05FEACC7804D02CF001060E701721A7 +:103F200006E05FEA8C7805D52CF002060E701921A8 +:103F3000217000260078D0BBCAB3C3BB1C20207000 +:103F400035E012E002E03878062841D11A2019E461 +:103F5000207801283CD00C283AD02046FFF7F1F811 +:103F600009208DF82000686A0D9031E03878052826 +:103F700005D00620387003261820287046E0052159 +:103F80008DF82010686A0D90B8680A900220ADF88C +:103F9000240001208DF830000A980170297D4170BD +:103FA000394608A8FFF78CF8064618202870012E1D +:103FB0000ED02BE001208DF82000686A0D900320C0 +:103FC0008DF82400287D8DF8250085F814B012E0C6 +:103FD000287D80B11D202070172028708DF820903A +:103FE000686A0D9002208DF82400394608A8FFF772 +:103FF00067F806460AE00CB1FE2020709DF820000C +:1040000020B1002108A8FFF75BF810E413B0304698 +:10401000BDE8F08F2DE9F04387B00C464E690021D2 +:104020008DF8041001202578034602274FF0070978 +:104030004FF0050C85B1012D53D0022D39D1FE2052 +:1040400030708DF80030606A059003208DF8040010 +:10405000207E8DF8050063E02179012925D0022911 +:104060002DD0032928D0042923D1B17D022920D1C4 +:1040700031780D1F042D04D30A3D032D01D31D29D2 +:1040800017D12189022914D38DF804702370208957 +:104090009DF8041088421BD2082001E0285C020031 +:1040A0008DF80000606A059057E070780128EBD029 +:1040B000052007B0BDE8F0831D203070E4E771787B +:1040C0000229F5D131780C29F3D18DF80490DDE780 +:1040D000083402F804CB94E80B0082E80B000320BC +:1040E000E7E71578052DE4D18DF800C0656A0595E0 +:1040F000956802958DF8101094F80480B8F1010FBE +:1041000013D0B8F1020F2DD0B8F1030F1CD0B8F1C5 +:10411000040FCED1ADF804700E202870207E687098 +:1041200000216846FEF7CCFF0CE0ADF804700B20D0 +:104130002870207E002100F01F0068706846FEF79E +:10414000BFFF37700020B4E7ADF804708DF8103071 +:1041500085F800C0207E6870277011466846FEF71B +:10416000AFFFA6E7ADF804902B70207F6870607FEA +:1041700000F00100A870A07F00F01F00E870E27F4F +:104180002A71C0071CD094F8200000F00700687165 +:1041900094F8210000F00700A87100216846FEF79E +:1041A0008FFF2868F062A8883086A87986F83200E8 +:1041B000A069407870752879B0700D203070C1E723 +:1041C000A9716971E9E700B587B004280CD1012015 +:1041D0008DF800008DF80400002005918DF8050091 +:1041E00001466846FEF76CFF07B000BD70B50C468F +:1041F000054602F0E3F821462846BDE870407823E2 +:10420000002202F031B808B1007870470C207047E6 +:1042100070B50C0005784FF000010CD021702146DC +:10422000F1F707F869482178405D884201D1032001 +:1042300070BD022070BDF0F7FCFF002070BD027958 +:10424000012A05D000220A704B78012B02D003E02E +:10425000042070470A758A6102799300521C02712A +:10426000C15003207047F0B587B00F4605460124C2 +:10427000287905EB800050F8046C7078411E022903 +:104280000AD252493A46083901EB8000314650F8CB +:10429000043C2846984704460CB1012C11D12879DA +:1042A000401E10F0FF00287101D00324E0E70A202F +:1042B0008DF80000706A0590002101966846FFF7AE +:1042C000A7FF032CD4D007B02046F0BD70B515462B +:1042D0000A46044629461046FFF7C5FF064674B154 +:1042E0002078FE280BD1207C30B100202870294690 +:1042F00004F10C00FFF7B7FF2046FEF722FF30461F +:1043000070BD704770B50E4604467C2111F023FA4B +:104310000225012E03D0022E04D0052070BD0120FD +:10432000607000E065702046FEF70BFFA575002069 +:1043300070BD28B1027C1AB10A4600F10C01C5E734 +:104340000120704710B5044686B0042002F036F80C +:104350002078FE2806D000208DF80000694620460F +:10436000FFF7E7FF06B010BD7CB50E4600218DF8C3 +:1043700004104178012903D0022903D0002405E06C +:10438000046900E044690CB1217C89B16D460146A5 +:104390002846FFF754FF032809D132462946204614 +:1043A000FFF794FF9DF80410002900D004207CBD85 +:1043B00004F10C05EBE730B40C460146034A2046F5 +:1043C00030BC034B0C3AFEF758BE00006C5C020098 +:1043D000285C020070B50D46040011D085B12101A2 +:1043E000284611F096F910225449284611F012F986 +:1043F000524801210838018044804560002070BD8A +:10440000012070BD70B54D4E00240546083E10E0F9 +:104410007068AA7B00EB0410817B914208D1C17BBC +:10442000EA7B914204D10C22294611F0C7F830B141 +:10443000641C30888442EBDB4FF0FF3070BD2046B7 +:1044400070BD70B50D46060006D02DB1FFF7DAFF3E +:10445000002803DB401C14E0102070BD374C083CE2 +:1044600020886288411C914201D9042070BD616896 +:10447000102201EB0010314611F0CCF82088401CCE +:1044800020802870002070BD2C48083800887047B4 +:104490002A4908390888012802D0401E08800020D7 +:1044A000704770B514460D0018D0BCB10021A17042 +:1044B000022802D0102811D105E0288870B101210E +:1044C000A170108008E02846FFF79CFF002805DB5C +:1044D000401CA070A8892080002070BD012070BD04 +:1044E00070B5054614460E000BD000203070A87839 +:1044F000012808D005D91149A1F108010A88904284 +:104500000AD9012070BD24B1287820702888000ABB +:104510005070022008700FE064B14968102201EB6E +:1045200000112046103911F075F82878207328887A +:10453000000A607310203070002070BD8C000020D5 +:104540002DE9F04190460C4607460025FE48072F0E +:1045500000EB881607D2DFE807F007070707040417 +:104560000400012500E0FFDF06F81470002D13D0D1 +:10457000F548803000EB880191F82700202803D00F +:1045800006EB4000447001E081F8264006EB44024F +:104590002020507081F82740BDE8F081F0B51F461B +:1045A00014460E460546202A00D1FFDFE649E648BC +:1045B000803100EB871C0CEB440001EB8702202EBE +:1045C00007D00CEB460140784B7848701846202104 +:1045D0000AE092F82530407882F82500F6E7014697 +:1045E0000CEB410005704078A142F8D192F82740C9 +:1045F000202C03D00CEB4404637001E082F82630D9 +:104600000CEB41042023637082F82710F0BD30B515 +:104610000D46CE4B44190022181A72EB020100D24B +:10462000FFDFCB48854200DDFFDFC94840428542BD +:1046300000DAFFDFC548401C844207DA002C01DBAA +:10464000204630BDC148401C201830BDBF48C04383 +:10465000FAE710B504460168407ABE4A52F82020B5 +:10466000114450B10220084420F07F40EEF7E5FAF3 +:1046700094F90810BDE81040C9E70420F3E72DE9DC +:10468000F047B14E803696F82D50DFF8BC9206EB1D +:10469000850090F8264034E009EB85174FF00708B5 +:1046A00017F81400012806D004282ED005282ED093 +:1046B000062800D0FFDF01F000F9014607EB4400B7 +:1046C000427806EB850080F8262090F82720A24249 +:1046D00002D1202280F82720084601F0F9F82A4666 +:1046E00021460120FFF72CFF9B48414600EB0410B8 +:1046F00002682046904796F82D5006EB850090F80A +:104700002640202CC8D1BDE8F087022000E003201D +:104710008046D0E710B58C4C2021803484F82510D9 +:1047200084F8261084F82710002084F8280084F8E4 +:104730002D0084F82E10411EA16044F8100B207447 +:10474000607420736073A0738449E07720750870EB +:10475000487000217C4A103C02F81100491CC9B283 +:104760002029F9D30120EEF758F90020EEF755F98A +:10477000012084F82200EEF79BFB7948EEF7ADFBB1 +:10478000764CA41E20707748EEF7A7FB6070BDE85A +:104790001040EEF7CFB810B5EEF7F1F86F4CA41E4D +:1047A0002078EEF7B3FB6078EEF7B0FBBDE8104081 +:1047B00001F0BBB8202070472DE9F34F624C002573 +:1047C000803404EB810A89B09AF82500202821D092 +:1047D000691E02916049009501EB0017391D03AB7A +:1047E00007C983E80700A18BADF81C10A07F8DF8E6 +:1047F0001E009DF81500A046C8B10226554951F883 +:1048000020400399A219114421F07F41019184B104 +:1048100002210FE00120EEF700F90020EEF7FDF88D +:10482000EEF7CBF801F081F884F82F50A7E00426CA +:10483000E4E700218DF81810022801D0012820D1CA +:10484000039801190998081A801C9DF81C1020F083 +:104850007F4001B10221353181420BD203208DF816 +:1048600015000398C4F13201401A20F07F40322431 +:1048700003900CE098F8240018B901F0F0F9002832 +:104880004DD0322C03D214B101F043F801E001F015 +:104890004CF8324A107820B393465278039B121B8F +:1048A00000219DF81840994601281BD0032819D0F3 +:1048B0005FF000008DF81E00002A04DD981A0390B6 +:1048C00001208DF818009DF81C0000B1022103980A +:1048D000254A20F07F40039003AB099801F031F89E +:1048E00010B110E00120E5E79DF81D0018B99BF814 +:1048F0000000032812D08DF81C50CDF80C908DF8D4 +:1049000018408DF81E509DF8180058B103980123E7 +:10491000811900221846EEF7D3F806E000200BB00C +:10492000BDE8F08F0120EEF778F897F90C2001230D +:1049300000200199EEF7C4F8F87BC00701D0EEF72C +:10494000A8F9012112E000004C0A0020FF7F841E1C +:104950000020A1077C5C02004C0800209E00002083 +:10496000176101007F460100FFFF3F0088F82F100C +:104970008AF8285020226946F74810F090FE01205E +:10498000CDE72DE9F05FDFF8D083064608EB86001F +:1049900090F82550202D1FD0A8F180002C4600EB68 +:1049A0008617A0F50079DFF8B4B305E0A24607EB5F +:1049B0004A004478202C0AD0EEF7CDF809EB041316 +:1049C0005A4601211B1D00F0BCFF0028EED0AC426E +:1049D00002D0334652461EE0E14808B1AFF30080F2 +:1049E000EEF7B9F898F82F206AB1D8F80C20411CDE +:1049F000891A0902CA1701EB12610912002902DDA6 +:104A00000020BDE8F09F3146FFF7D6FE08B1012037 +:104A1000F7E733462A4620210420FFF7BFFDEFE7E2 +:104A20002DE9F041CC4C2569EEF795F8401B0002CA +:104A3000C11700EB1160001200D4FFDF94F82200D0 +:104A400000B1FFDF012784F8227094F82E0020289F +:104A500000D1FFDF94F82E60202084F82E0000257E +:104A600084F82F5084F8205084F82150BD482560E8 +:104A70000078022833D0032831D000202077A068A6 +:104A8000401C05D04FF0FF30A0600120EDF7C5FFBE +:104A90000020EDF7C2FFEEF7BEF8EEF7B6F8EDF73F +:104AA0008CFF10F007F8B048056005604FF0E0217A +:104AB0004FF40040B846C1F88002EEF758F994F878 +:104AC0002D703846FFF75DFF0028FAD0A2488038E5 +:104AD00000EB871010F81600022802D006E0012033 +:104AE000CCE73A4631460620FFF72AFD84F82380BA +:104AF00004EB870090F82600202804D09948801EF7 +:104B00004078EEF709FA207F002803D0EEF773F81B +:104B10002577657740E5904910B591F82D20002460 +:104B2000803901EB821100BF11F814302BB1641CE5 +:104B3000E4B2202CF8D3202010BD8C4901EB0411E5 +:104B400008600020C87321460120FFF7F9FC2046C9 +:104B500010BD10B5012801D0032800D171B37E4AE1 +:104B600092F82D307C4C0022803C04EB831300BF74 +:104B700013F812400CB1082010BD521CD2B2202AEA +:104B8000F6D3784A48B1022807D0072916D2DFE8C1 +:104B900001F01506080A0C0E100000210AE01B2186 +:104BA00008E03A2106E0582104E0772102E096214E +:104BB00000E0B52151701070002010BD072010BD1D +:104BC000684810B54078EEF738F880B210BD10B5DF +:104BD000202811D2604991F82D30A1F1800202EB1A +:104BE000831414F810303BB191F82D3002EB83128E +:104BF00012F81020012A01D0002010BD91F82D20BC +:104C000001460020FFF79CFC012010BD10B5EDF718 +:104C1000A2FFBDE81040EEF710B82DE9F0410E46B6 +:104C20004D4F01782025803F0C4607EB831303E0AE +:104C3000254603EB45046478944202D0202CF7D13A +:104C400008E0202C06D0A14206D103EB41014978AF +:104C5000017007E000209FE403EB440003EB4501F3 +:104C600040784870424F7EB127B1002140F2DD30DC +:104C7000AFF300803078A04206D127B100214FF475 +:104C80007870AFF30080357027B1002140F2E53035 +:104C9000AFF3008001207FE410B542680B689A1AD8 +:104CA0001202D41702EB1462121216D4497A91B18F +:104CB000427A82B92F4A006852F8211012681944CA +:104CC0001044001D891C081A0002C11700EB116076 +:104CD0000012322801DB012010BD002010BD2DE99B +:104CE000F04781461C48214E00EB8100984690F821 +:104CF00025402020107006F50070154600EB811746 +:104D00000BE000BF06EB04104946001DFFF7C4FF8F +:104D100028B107EB44002C704478202CF2D129787C +:104D200088F8001013E000BF06EB0415291D484663 +:104D3000FFF7B2FF68B988F80040A97B99F80A002C +:104D4000814201D80020DEE407EB44004478202CA7 +:104D5000EAD10120D7E40000CC0A0020FFFF3F0089 +:104D6000000000009E00002000F500404C080020DC +:104D7000000000007C5C02002DE9FC410E46074665 +:104D80000024FE4D09E000BF9DF8000005EB001077 +:104D90008168384600F0E9FD01246B4601AA3146DE +:104DA0003846FFF79CFF0028EED02046BDE8FC8186 +:104DB00070B50446F2480125A54300EB841100EBD1 +:104DC0008510402210F026FCEE4E26B1002140F264 +:104DD0005F40AFF30080EA48803000EB850100EBD4 +:104DE0008400D0F82500C1F8250026B1002140F24A +:104DF0006340AFF30080284670BD2DE9FC41844636 +:104E0000DF481546089C00EB85170E4617F814007E +:104E1000012803D0022801D00020C7E70B46DA4A58 +:104E20000121604600F08DFDA8B101AB6A4629461C +:104E30003046FFF754FF70B1D1489DF804209DF82B +:104E40000010803000EB85068A4208D02B460520F2 +:104E5000FFF7A4FB0BE02A462146042014E020299A +:104E600003D007EB4100407801E096F8250007EBFE +:104E7000440148709DF80000202809D007EB40004D +:104E800044702A4621460320FFF75AFB01208DE794 +:104E900006F8254F0120F070F3E7B84901EB001048 +:104EA000001DFFF7D6BB7CB51D46134604460E46D3 +:104EB00000F1080221461846EDF7CCFE94F90800EF +:104EC0000F2804DD1F3820722068401C206096B136 +:104ED0000220AE4951F82610461820686946801B0A +:104EE00020F07F40206094F908002844C01C1F284F +:104EF00003DA012009E00420EBE701AAEDF7AAFE9E +:104F00009DF8040010B10098401C009000992068A2 +:104F100031440844C01C20F07F4060607CBD2DE916 +:104F2000FE430C46064609786079907220799846CF +:104F30001546507241B19248803090F82E102029C9 +:104F40000AD00069401D0BE0D4E90223217903B0A7 +:104F50002846BDE8F043A6E78D484178701D084417 +:104F600020F07F47217900222846A368FFF79BFFA6 +:104F70003946284600F0F9FCD4E902322179684626 +:104F8000FFF791FF41462846019CFFF7F5FE2B46AF +:104F900022460021304600F0D4FC002803D13146DF +:104FA000284600F0E2FCBDE8FE832DE9FE4F814675 +:104FB00000F097FC30B1002799F8000020B10020E4 +:104FC000BDE8FE8F0127F7E76D4D6E4C4FF0000AEC +:104FD000803524B1002140F2D640AFF3008095F82F +:104FE0002D8085F823A0002624B1002140F2DB406B +:104FF000AFF300801FB94046FFF7DAFE804624B1C8 +:10500000002140F2E340AFF30080EDF7A4FD4346FA +:105010006A464946FFF783FF24B1002140F2E94088 +:10502000AFF3008095F82E0020280CD02969009855 +:10503000401A0002C21700EB1260001203D5684646 +:1050400000F093FC012624B1002140F2F340AFF3BD +:10505000008095F823000028BBD124B1002140F244 +:10506000F940AFF30080EDF776FD6B46464A00212C +:1050700000F067FC0028A3D027B941466846FFF737 +:105080007BFE064326B16846FFF7E3FAC9F808003D +:1050900024B1002140F20C50AFF3008001208FE7D3 +:1050A0002DE9FF5F8A46814600F01BFC344C8034BA +:1050B00010B39AF80000002710B1012800D0FFDFDC +:1050C000304D25B1002140F28250AFF30080012025 +:1050D000A84600905FEA080604D0002140F28A50FA +:1050E000AFF30080009800F0F3FB94F82D500020FF +:1050F00084F8230067B119E094F82E0001272028D6 +:1051000000D1FFDF9AF800000028D9D0FFDFD7E7F1 +:105110002846FFF74DFE054626B1002140F2945087 +:10512000AFF3008094F823000028D3D126B10021EA +:1051300040F29E50AFF30080EDF70DFD83462B4605 +:1051400001AA5146FFF7EBFE5FEA060804D00021F2 +:1051500040F2A550AFF300803B462A4601A95846CD +:10516000CDF80090FFF749FE064604EB850090F865 +:1051700028B0B8F1000F11D000210BE04C0800203E +:105180004C0A002000000000FFFF3F007C5C020092 +:105190009E00002040F2AC50AFF3008000F08DFB89 +:1051A0000090B8F1000F04D0002140F2B250AFF3EC +:1051B000008094F8230000288CD1B8F1000F04D0AF +:1051C000002140F2BA50AFF30080FE490DF1040C0B +:1051D00001EB09109CE80E0000F1040080E80E00CD +:1051E0004EB35FEA080604D0002140F2C750AFF387 +:1051F00000803BEA070012D094F82E0020280ED140 +:1052000026B1002140F2CC50AFF300802846FFF7D2 +:10521000B8FB20B99AF80000D8B3012849D0B8F1FA +:10522000000F04D0002140F2E950AFF3008028467F +:1052300000F03CFB01265FEA080504D0002140F2A3 +:10524000F250AFF30080009800F042FB25B100213E +:1052500040F2F650AFF300808EB194F82D0004EBCD +:10526000800090F82600202809D025B1002140F2C6 +:10527000FD50AFF30080D4484078EDF74DFE25B1E6 +:10528000002140F20260AFF3008004B03046BDE878 +:10529000F09FFFE7B8F1000F04D0002140F2D45096 +:1052A000AFF3008094F82D2049460420FFF748F919 +:1052B000C0E7002E3FF40EAF002140F2DF50AFF305 +:1052C000008007E72DE9F84FC04D814695F82D0085 +:1052D0004FF00008BE4C4FF0010B474624B10021AF +:1052E0004FF4C260AFF30080584600F0F1FA85F841 +:1052F000237024B1002140F21560AFF3008095F8CF +:105300002D00FFF755FD064695F8230028B1002C27 +:10531000E4D0002140F21B604BE024B1002140F2B8 +:105320001F60AFF30080A948803800EB861111F8A8 +:105330001900032856D1334605EB830A4A469AF8EA +:105340002500904201D1012000E0002000900AF1E8 +:1053500025000021FFF761FC01460098014203D0BF +:1053600001228AF82820AF77E1B324B1002140F26E +:105370002460AFF30080324649460120FFF7E0F891 +:105380009AF828A024B1002140F22F60AFF30080EA +:1053900000F093FA834624B1002140F23460AFF369 +:1053A000008095F8230038B1002C97D000214FF4ED +:1053B000C760AFF3008091E7BAF1000F07D095F80E +:1053C0002E00202803D13046FFF7DBFAE0B124B1EC +:1053D000002140F24C60AFF30080304600F066FAE6 +:1053E0004FF0010824B1002140F25560AFF3008076 +:1053F000584600F06DFA24B1002140F25960AFF335 +:1054000000804046BDE8F88F002CF1D0002140F22A +:105410004760AFF30080E6E70020EDF7D7BA012040 +:10542000EDF7D4BA6848007870472DE9F041674C31 +:1054300094F82E0020281FD194F82D6004EB8607E5 +:1054400097F82550202D00D1FFDF6049803901EB0E +:10545000861000EB4500407807F8250F0120F87012 +:1054600084F82300294684F82E5032460220223444 +:10547000FFF766F8002020700DE42DE9F041514E51 +:10548000524C012538B1012821D0022879D00328B7 +:105490007DD0FFDFF0E700F03CFAFFF7C6FF207E8B +:1054A00000B1FFDF84F821500020EDF7B6FAA168C3 +:1054B000481C04D0012300221846EDF701FB14F824 +:1054C0002E0F217806EB01110A68012154E0FFF745 +:1054D000ACFF0120EDF7A1FA94F8210050B1A068CB +:1054E000401C07D014F82E0F217806EB01110A6832 +:1054F000062141E0207EDFF8D080002708F1020875 +:10550000012803D002281ED0FFDFB5E7A777EDF70B +:1055100072FB98F80000032801D165772577607D3C +:105520002C4951F8200094F8201051B948B1616815 +:105530000123091A00221846EDF7C2FA022020764C +:105540009AE7277698E784F8205000F0E2F9A07FE8 +:1055500050B198F8010061680123091A0022184629 +:10556000EDF7AEFA257600E0277614F82E0F2178B5 +:1055700006EB01110A680021BDE8F041104700E088 +:1055800005E011480078BDE8F041EDF7C5BCFFF734 +:105590004CFF14F82E0F217806EB01110A68052143 +:1055A000EAE710B5094C94F82E00202800D1FFDF5F +:1055B00014F82E0F2178034A02EB01110A68042126 +:1055C0000AE000004C0800209C000020CC0A0020CB +:1055D000000000007C5C0200BDE8104010477CB574 +:1055E000E74C054694F82E00202800D1FFDFA06884 +:1055F000401C00D0FFDF94F82E00E24901AA01EB25 +:105600000010694690F90C002844EDF723FB9DF942 +:1056100004000F2801DD012000E00020009908446B +:105620006168084420F07F41A16094F821000028BF +:1056300007D002B00123BDE8704000221846EDF704 +:105640003FBA7CBD30B5D04A0B1A541CB3EB940F53 +:1056500012D3451AB5EB940F0ED3934203D9101A07 +:1056600043185B1C08E0954204D9511A0844401CB9 +:10567000434201E0FFDF0023184630BD0123002232 +:1056800001460220EDF71CBA0220EDF7C6B9EDF78E +:1056900062BA2DE9FC47BA4C054694F82E00202842 +:1056A00000D1FFDF642D58D3B84A0021521B71EBA3 +:1056B000010052D394F82E20A0462046DFF8C49271 +:1056C00090F82D7009EB0214D8F8000001AA2844C4 +:1056D0006946EDF7BFFA9DF90400002802DD009845 +:1056E000401C0090A068009962684618B21A22F027 +:1056F0007F42B2F5800F30D208EB8702444692F821 +:105700002520202A0AD009EB02125268101A000242 +:10571000C21700EB1260001288421EDBA068401C1A +:1057200010D0EDF718FAA168081A0002C11700EBB3 +:1057300011600012022810DD0120EDF76EF94FF024 +:10574000FF30A06020682844206026F07F40206160 +:10575000012084F82300BDE8FC870020FBE72DE949 +:10576000F047874C074694F82D00A4F1800606EB1D +:10577000801010F8170000B9FFDF94F82D50A046F4 +:10578000834C24B1002140F66D00AFF3008040F659 +:10579000790940F6820A06EB851600BF16F8170055 +:1057A000012818D0042810D005280ED006280CD0C7 +:1057B0001CB100214846AFF3008020BF002CEDD083 +:1057C00000215046AFF30080E8E72A463946012021 +:1057D000FEF7B6FEF2E74FF0010A4FF0000945462A +:1057E00024B1002140F68900AFF30080504600F05C +:1057F0006FF885F8239024B1002140F68E00AFF3B6 +:10580000008095F82D00FFF7D3FA064695F823009F +:1058100028B1002CE4D0002140F694001FE024B110 +:10582000002140F69800AFF3008005EB860000F100 +:10583000270133463A462630FFF7EFF924B100211D +:1058400040F69C00AFF3008000F037F8824695F8F0 +:10585000230038B1002CC3D0002140F6A200AFF3E2 +:105860000080BDE785F82D60012085F823005046B3 +:1058700000F02EF8002C04D0002140F6AF00AFF36A +:105880000080BDE8F08730B504463D480D4690F8ED +:105890002D003B49803901EB801010F8140000B94D +:1058A000FFDF384800EB0410C57330BD344981F880 +:1058B0002D00012081F82300704710B5354808B14C +:1058C000AFF30080EFF3108000F0010072B610BD5E +:1058D00010B5002804D1304808B1AFF3008062B69B +:1058E00010BD2E480068C005C00D10D0103840B261 +:1058F000002804DB00F1E02090F8000405E000F04F +:105900000F0000F1E02090F8140D400970470820C6 +:10591000704710B51A4C94F82400002804D1F6F70B +:105920008DF8012084F8240010BD10B5144C94F8B3 +:105930002400002804D0F6F7AAF8002084F82400F8 +:1059400010BD10B51C685B68241A181A24F07F4437 +:1059500020F07F40A14206D8B4F5800F03D29042D8 +:1059600001D8012010BD002010BDD0E90032D21AAC +:1059700021F07F43114421F07F41C0E9003170479D +:10598000CC0A00204C080020FF7F841EFF1FA107C7 +:1059900000000000000000000000000004ED00E036 +:1059A0002DE9F041044680074FF000054FF0010655 +:1059B0000CD56B48056006600EF0A5FE20B1694865 +:1059C000016841F48061016024F00204E0044FF0BA +:1059D000FF3705D564484660C0F8087324F4805446 +:1059E000600003D56148056024F08044E0050FD5D0 +:1059F0005F48C0F80052C0F808735E490D60091D89 +:105A00000D605C4A04210C321160066124F480743C +:105A1000A00409D558484660C0F80052C0F8087381 +:105A20005648056024F40054C4F38030C4F3C031F8 +:105A3000884200D0FFDF14F4404F14D05048466035 +:105A4000C0F808734F488660C0F80052C0F8087369 +:105A50004D490D600A1D16608660C0F808730D6020 +:105A6000166024F4404420050AD548484660866004 +:105A7000C0F80873C0F848734548056024F4006412 +:105A80000EF0F2FF4348044200D0FFDFBDE8F08192 +:105A9000F0B50022202501234FEA020420FA02F18A +:105AA000C9072DD051B2002910DB00BF4FEA5117B2 +:105AB0004FEA870701F01F0607F1E02703FA06F611 +:105AC000C7F88061BFF34F8FBFF36F8F0CDB00BF50 +:105AD0004FEA51174FEA870701F01F0607F1E02749 +:105AE00003FA06F6C7F8806204DB01F1E02181F8D1 +:105AF000004405E001F00F0101F1E02181F8144DAF +:105B000002F10102AA42C9D3F0BD10B5224C2060B7 +:105B10000846F6F7A8F82068FFF742FF2068FFF76D +:105B2000B7FF0EF087FB00F01AF90EF09DFF0EF0A4 +:105B3000E0FEEDF7BDF9BDE810400EF02BBC10B54E +:105B4000154C2068FFF72CFF2068FFF7A1FF0EF02F +:105B50008BFFF6F77BF90020206010BD0A2070470C +:105B6000FC1F00403C17004000C0004004E501401D +:105B7000008000400485004000D0004004D5004073 +:105B800000E0004000F0004000F5004000B00040A0 +:105B900008B50040FEFF0FFDA000002070B52649AB +:105BA0000A680AB30022154601244B685B1C4B604F +:105BB0000C2B00D34D600E7904FA06F30E681E42DA +:105BC0000FD0EFF3108212F0010272B600D0012262 +:105BD0000C689C430C6002B962B649680160002001 +:105BE00070BD521C0C2AE0D3052070BD4FF0E0219F +:105BF0004FF48000C1F800027047EFF3108111F0FC +:105C0000010F72B64FF0010202FA00F20A4803686F +:105C100042EA0302026000D162B6E7E706480021CB +:105C200001604160704701218140034800680840DD +:105C300000D0012070470000A4000020012081074F +:105C4000086070470121880741600021C0F80011F9 +:105C500018480170704717490120087070474FF0CD +:105C60008040D0F80001012803D0124800780028B5 +:105C700000D00120704710480068C00700D0012004 +:105C800070470D480C300068C00700D001207047F5 +:105C90000948143000687047074910310A68D20378 +:105CA00006D5096801F00301814201D10120704746 +:105CB00000207047AC000020080400400021017063 +:105CC000084670470146002008707047EFF31081C6 +:105CD00001F0010172B60278012A01D0012200E030 +:105CE00000220123037001B962B60AB10020704797 +:105CF0004FF400507047E9E7EFF3108111F0010F06 +:105D000072B64FF00002027000D162B600207047F8 +:105D1000F2E700002DE9F04115460E460446002743 +:105D200000F0E7F8A84215D3002341200FE000BFA0 +:105D300094F84220A25CF25494F84210491CB1FB42 +:105D4000F0F200FB12115B1C84F84210DBB2AB4294 +:105D5000EED3012700F0D9F83846BDE8F08170494C +:105D600010B5802081F800046E49002081F84200BF +:105D700081F84100433181F8420081F8410043310C +:105D800081F8420081F841006748FFF797FF6648B5 +:105D9000401CFFF793FFECF7F9FFBDE8104000F05F +:105DA000B4B8402070475F4800F0A3B80A460146E7 +:105DB0005C48AFE7402070475A48433000F099B83C +:105DC0000A46014657484330A4E7402101700020AD +:105DD000704710B504465348863000F08AF82070AA +:105DE000002010BD0A4601464E4810B58630FFF728 +:105DF00091FF08B1002010BD42F2070010BD70B540 +:105E00000C460546412900D9FFDF48480068103894 +:105E100040B200F050F8C6B20D2000F04CF8C0B20D +:105E2000864203D2FFDF01E0EDF700F82246294663 +:105E30003C48FFF76FFF0028F6D070BD2DE9F04118 +:105E4000394F002506463F1D57F82540204600F0F3 +:105E500041F810B36D1CEDB2032DF5D3314843303A +:105E600000F038F8002825D02E4800F033F800283C +:105E700020D02C48863000F02DF800281AD0ECF7FE +:105E8000ABFF2948FFF722FFB0F5005F00D0FFDF2E +:105E9000BDE8F0412448FFF72FBF94F841004121AD +:105EA000265414F8410F401CB0FBF1F201FB120024 +:105EB0002070D3E751E7002804DB00F1E02090F8E0 +:105EC000000405E000F00F0000F1E02090F8140D50 +:105ED0004009704710F8411F4122491CB1FBF2F301 +:105EE00002FB13114078814201D10120704700204C +:105EF000704710F8411F4078814201D3081A02E030 +:105F0000C0F141000844C0B2704710B50648FFF721 +:105F1000DDFE002803D1BDE81040ECF748BF10BDFE +:105F20000DE000E0FC0A0020B000002004ED00E0DD +:105F300070B5154D2878401CC4B26878844202D0F0 +:105F4000F6F71BF82C7070BD2DE9F0410E4C4FF0A8 +:105F5000E02600BFF6F706F820BF40BF20BF6778F5 +:105F600020786070D6F80052EBF74AFA854305D1E5 +:105F7000D6F8040210B92078B842EBD0F5F7EDFF5F +:105F80000020BDE8F0810000C00000202DE9F041B4 +:105F9000012528034FF0E0210026C1F88001BFF35E +:105FA0004F8FBFF36F8F1F4CC4F800610C2000F0BF +:105FB0002CF81D4801680268C94341F3001142F002 +:105FC00010020260C4F804532560491C00E020BFA1 +:105FD000D4F80021002AFAD019B9016821F0100183 +:105FE0000160124807686560C4F80853C4F800618E +:105FF0000C2000F00AF83846BDE8F08110B50446E0 +:10600000FFF7C4FF2060002010BD002809DB00F06E +:106010001F02012191404009800000F1E020C0F8FA +:106020008012704700C0004010ED00E008C500403D +:106030002DE9F047FF4C0646FF21A06800EB061251 +:1060400011702178FF2910D04FF0080909EB0111D8 +:1060500009EB06174158C05900F0F4F9002807DD94 +:10606000A168207801EB061108702670BDE8F08762 +:1060700094F8008045460DE0A06809EB05114158F1 +:10608000C05900F0DFF9002806DCA068A84600EB44 +:1060900008100578FF2DEFD1A06800EB061100EB8A +:1060A00008100D700670E1E7F0B5E24B04460020E1 +:1060B00001259A680C269B780CE000BF05EB0017C1 +:1060C000D75DA74204D106EB0017D7598F4204D001 +:1060D000401CC0B28342F1D8FF20F0BD70B5FFF77D +:1060E000D6FAD44C08252278A16805EB021289580B +:1060F00000F0A8F9012808DD2178A06805EB01115E +:106100004058BDE87040FFF7B9BAFFF78BF9BDE81A +:106110007040ECF701BF2DE9F041C64C2578FFF740 +:10612000B6FAFF2D6ED04FF00808A26808EB0516EE +:10613000915900F087F90228A06801DD80595DE0DF +:1061400000EB051109782170022101EB0511425C79 +:106150005AB1521E4254815901F5800121F07F410C +:1061600081512846FFF764FF34E00423012203EB4A +:10617000051302EB051250F803C0875CBCF1000F59 +:1061800010D0BCF5007F10D9CCF3080250F806C03F +:106190000CEB423C2CF07F4C40F806C0C3589A1AD6 +:1061A000520A09E0FF2181540AE0825902EB4C3285 +:1061B00022F07F428251002242542846FFF738FFE6 +:1061C0000C21A06801EB05114158E06850F8272028 +:1061D000384690472078FF2814D0FFF758FA2278E5 +:1061E000A16808EB02124546895800F02BF90128F6 +:1061F00093DD2178A06805EB01114058BDE8F0411E +:10620000FFF73CBABDE8F081F0B51D4614460E46D6 +:106210000746FF2B00D3FFDFA00700D0FFDF854834 +:10622000FF210022C0E90247C5700671017042706B +:1062300082701046012204E002EB0013401CE1547E +:10624000C0B2A842F8D3F0BD70B57A4C0646657866 +:106250002079854200D3FFDFE06840F82560607850 +:10626000401C6070284670BD2DE9FF5F1D468B46BF +:106270000746FF24FFF70BFADFF8B891064699F8B6 +:106280000100B84200D8FFDF00214FF001084FF0B5 +:106290000C0A99F80220D9F808000EE008EB011367 +:1062A000C35CFF2B0ED0BB4205D10AEB011350F8A3 +:1062B00003C0DC450CD0491CC9B28A42EED8FF2C81 +:1062C00002D00DE00C46F6E799F803108A4203D19C +:1062D000FF2004B0BDE8F09F1446521C89F802204C +:1062E00008EB04110AEB0412475440F802B00421F1 +:1062F000029B0022012B01EB04110CD040F801207D +:106300004FF4007808234FF0020C454513D9E905F6 +:10631000C90D02D002E04550F2E7414606EB41329A +:1063200003EB041322F07F42C250691A0CEB0412F3 +:10633000490A81540BE005B9012506EB453103EB11 +:10634000041321F07F41C1500CEB0411425499F821 +:1063500000502046FFF76CFE99F80000A84201D0DB +:10636000FFF7BCFE3846B4E770B50C460546FFF7AC +:106370008EF9064621462846FFF796FE0446FF287A +:106380001AD02C4D082101EB0411A8684158304661 +:1063900000F058F800F58050C11700EBD1404013D1 +:1063A0000221AA6801EB0411515C09B100EB412004 +:1063B000002800DC012070BD002070BD2DE9F047F1 +:1063C00088468146FFF770FE0746FF281BD0194D0F +:1063D0002E78A8683146344605E0BC4206D02646F1 +:1063E00000EB06121478FF2CF7D10CE0FF2C0AD03A +:1063F000A6420CD100EB011000782870FF2804D0D1 +:10640000FFF76CFE03E0002030E6FFF73DF9414660 +:106410004846FFF7A9FF0123A968024603EB0413CE +:10642000FF20C854A878401EB84200D1A87001EBE4 +:10643000041001E0C80B002001EB06110078087081 +:10644000104613E6081A0002C11700EB1160001293 +:10645000704700005E48002101704170102181707A +:10646000704770B5054616460C460220ECF730FA28 +:106470005749012008705749F01E086056480560CA +:10648000001F046070BD10B50220ECF721FA5049DE +:106490000120087051480021C0F80011C0F8041113 +:1064A000C0F808114E494FF40000086010BD48487C +:1064B0000178D9B14B4A4FF4000111604749D1F836 +:1064C00000310022002B1CBFD1F80431002B02D078 +:1064D000D1F8081119B142704FF0100104E04FF0EB +:1064E0000101417040490968817002704FF000005D +:1064F000ECF7EEB910B50220ECF7EAF934480122C6 +:10650000002102703548C0F80011C0F80411C0F82D +:106510000811026010BD2E480178002904BF4078A0 +:1065200070472E48D0F80011002904BF02207047A0 +:10653000D0F8001100291CBFD0F80411002905D0A3 +:10654000D0F80801002804BF0120704700207047E0 +:106550001F4800B50278214B4078C821491EC9B2B6 +:1065600082B1D3F800C1BCF1000F10D0D3F8000104 +:1065700000281CBFD3F8040100280BD0D3F8080171 +:1065800050B107E0022802D0012805D002E000291E +:10659000E4D1FFDF002000BD012000BD0C480178E0 +:1065A000002904BF807870470C48D0F800110029FA +:1065B0001CBFD0F80411002902D0D0F8080110B196 +:1065C0004FF01000704708480068C0B270470000E4 +:1065D000C200002010F5004008F5004000F0004027 +:1065E00004F5014008F5014000F400405648002140 +:1065F00001704170704770B5064614460D46012083 +:10660000ECF766F951480660001D0460001D056046 +:106610004F490020C1F850014E49032008604F49FE +:106620004D480860091D4E48086070BD2DE9F041D5 +:10663000054645480C46012606704A4945EA02408F +:1066400040F0807008600EF034F8002804BF46481F +:1066500004600027454CC4F804714649444808606A +:10666000002D02BFC4F800622660BDE8F081012D54 +:1066700018BFFFDFC4F80072266040493E4808603A +:10668000BDE8F0813048017871B13A4A384911606B +:106690003649D1F804210021002A08BF417002D0F8 +:1066A000374A1268427001700020ECF711B9264891 +:1066B0000178002904BF407870472C48D0F80401C5 +:1066C000002808BF70472E480068C0B270470028F5 +:1066D00008BF704730B51C480078002808BFFFDFAE +:1066E0002248D0F80411002918BF30BD0224C0F898 +:1066F0000443DFF890C0DCF80010C1F30015DCF8AB +:10670000001041F01001CCF80010D0F8041100295D +:1067100004BF4FF400414FF0E02206D1C2F88012CE +:1067200020BFD0F80431002BF8D02DB9DCF80010D0 +:1067300021F01001CCF80010C0F8084330BD0B491F +:106740000120886070470000C500002008F5004067 +:10675000001000401CF500405011004098F5014029 +:106760000CF0004004F5004018F5004000F0004037 +:106770000000020308F501400000020204F5014098 +:1067800000F4004010ED00E010B5FF4800240121A6 +:106790004470047044728472C17280F82540C462EF +:1067A000846380F83C4080F83D40FF2180F83E1033 +:1067B00018300FF0DFF8F549601E0860091D086009 +:1067C000091D0C60091D0860091D0C60091D086089 +:1067D000091D0860091D0860091D0860091D086081 +:1067E000091D0860091D0860091D0860091D086071 +:1067F00010BDE748016801F00F01032904BF012023 +:106800007047016801F00F01042904BF022070479E +:10681000016801F00F01052904D0006800F00F00A5 +:10682000062807D1DB48006810F0060F0CBF0820CF +:106830000420704700B5FFDF012000BD10B5D24C29 +:106840000168A1614168E161007A84F82000207E3E +:1068500048B1207FF7F7F3FCA07E011C18BF01218F +:10686000207FF7F7DBFC607E002808BF10BD607F4B +:10687000F7F7E5FCE07E011C18BF0121607FBDE851 +:106880001040F7F7CBBC30B50024054601290AD0EB +:10689000022908BF4FF0807405D0042916BF0829CB +:1068A0004FF0C744FFDF44F4847040F48010BA49CD +:1068B000086045F4403001F1040140F000700860C8 +:1068C00030BD30B50024054601290AD0022908BF91 +:1068D0004FF0807405D0042916BF08294FF0C74433 +:1068E000FFDF44F4847040F48010AB49086045F445 +:1068F000403001F1040140F000700860A748D0F872 +:106900000001002818BFFFDF30BD2DE9F04102274C +:106910004FF0E02801260024C8F88071BFF34F8FA4 +:10692000BFF36F8F9E48046006600DF0ECFE9D4D36 +:1069300018B1286840F4806028600DF0BAFE38B1C4 +:10694000286820F0770040F0880040F00040286080 +:10695000964995480860964940F25B600860091FB7 +:1069600040F203100860081F066089490320086090 +:1069700090480660914A90491160924A904911608E +:10698000121F91491160016821F440710160016892 +:1069900041F480710160C8F8807280491020C1F80C +:1069A0000403794880F83140C462BDE8F081764A3A +:1069B0000368C2F802308088D08011727047724B31 +:1069C00010B51A7A8A4208D101460622981C0EF0A8 +:1069D000F5FD002804BF012010BD002010BD6A484D +:1069E00090F825007047684A517010707047F0B5F4 +:1069F0000546800000F1804000F580508B88C0F88B +:106A000020360B78D1F8011043EA0121C0F80016B6 +:106A100005F10800012707FA00F66C4C002A04BFB4 +:106A20002068B04304D0012A18BFFFDF206830433C +:106A30002060206807FA05F108432060F0BD0EF0E1 +:106A400069B9514890F832007047614AC1781160C5 +:106A500000686049000208607047252808BF0221CD +:106A60000ED0262808BF1A210AD0272808BF502197 +:106A700006D00A2894BF0422062202EB4001C9B2C4 +:106A8000554A11605549086070472DE9F041434E61 +:106A9000804603200D46C6F800025249504808605F +:106AA00028460EF076F9384F0124B8F1000F04BFE4 +:106AB000BC72346026D0B8F1010F23D14A48006877 +:106AC00060B915F00C0F09D0C6F80443012000F09E +:106AD000F0FEF463346487F83C4002E0002000F0EC +:106AE000E8FE28460EF03DFA0220B8720DF0F9FDDE +:106AF00038B90DF008FE20B93C48016841F4C021C6 +:106B0000016074603A48C4643A4800682946BDE8A8 +:106B1000F04100F072BE2DE9F047204E814603207F +:106B20000D46C6F80002DFF8BC802D48C8F800000A +:106B300008460EF02EF928460EF013FA0124124FE3 +:106B4000B9F1000F03D0B9F1010F0AD060E0BC72B7 +:106B5000B86B40F48010B8634FF48010C8F80000A0 +:106B600056E00220B872B86B40F40010B8634FF4DE +:106B70000010C8F800001C480068E8BB15F00C0FB6 +:106B800043D0C6F8044338E0D80B0020000E004084 +:106B9000101500401414004014150040001000406F +:106BA000FC1F00403C1700402C0000897817004073 +:106BB000381500405016004000000C0408F5014054 +:106BC00040800040A4F501401011004040160040F4 +:106BD000241500401C1500400815004054150040C5 +:106BE0000000040404F501408817004068150040C7 +:106BF000008000404C85004007E0012000F059FE75 +:106C0000F463346487F83C4002E0002000F051FE59 +:106C1000ECF73CF82946BDE8F04700F0EEBD2DE961 +:106C2000F84FFA4C8246032088461746C4F8000203 +:106C3000DFF8E093F648C9F8000010460EF0A9F816 +:106C4000DFF8D4B3F54E0125BAF1000F04BFCBF83D +:106C50000040B57204D0BAF1010F18BFFFDF2FD08A +:106C6000EF48C0F80080F049EE480860B06B40F48F +:106C70000020B063D4F800321021C4F808130020BB +:106C8000C4F80002DFF8A4C38A03CCF80020C4F8DB +:106C90000001C4F80C01C4F81001C4F80401C4F8E0 +:106CA0001401C4F81801E24800680090C4F80032EA +:106CB000C9F80020C4F80413BAF1010F09D01BE091 +:106CC00038460EF04EF9DB48CBF800000220B072D7 +:106CD000C6E7D948006860B917F00C0F09D0C4F8AE +:106CE0000453012000F0E5FDE563256486F83C507F +:106CF00002E0002000F0DDFD4FF40020C9F80000A4 +:106D0000CE48C564CE480068404528BFFFDF3946FD +:106D10004046BDE8F84F00F070BD2DE9F041BF4C92 +:106D20000646002594F8310017468846002808BF1B +:106D3000FFDF16B1012E16D021E094F831000128B2 +:106D400008D094F83020394640460EF037F8E16A12 +:106D5000451814E094F830103A4640460EF06CF8AE +:106D6000E16A45180BE094F8310094F830100128DE +:106D70003A46404609D00EF087F8E16A45183A468F +:106D800029463046BDE8F04149E70EF037F8E16AA0 +:106D90004518F4E72DE9F84F9C4CD4F8000220F098 +:106DA0000B09D4F804034FF0100AC0F30018C4F81C +:106DB00008A30026C4F800629C48A2490160974DD0 +:106DC0000127A97A012902D0022903D015E0297EE2 +:106DD00011B912E0697E81B1A97FEA7F07FA01F15A +:106DE00007FA02F21143016095F82000800000F1DB +:106DF000804000F5C040C0F81065FF208DF800000D +:106E0000C4F81061276104E09DF80000401E8DF871 +:106E100000009DF8000018B1D4F810010028F3D04C +:106E20009DF80000002808BFFFDFC4F810610020B3 +:106E300000F03FFD6E72AE72EF72C4F80092B8F1CE +:106E4000000F18BFC4F804A3BDE8F88FFF2008B5F1 +:106E50008DF800006D480021C0F81011012101617A +:106E600005E000BF9DF80010491E8DF800109DF848 +:106E7000001019B1D0F810110029F3D09DF80000CE +:106E8000002808BFFFDF08BD00686F4920F07F4081 +:106E9000086070474FF0E0200221C0F8801100F533 +:106EA000C070BFF34F8FBFF36F8FC0F800117047F2 +:106EB0004FF0E0210220C1F80001704763490870DB +:106EC000704763490860704770B50546EBF7DEFE12 +:106ED000524C2844E16A884298BFFFDF01202074A9 +:106EE000EBF7D4FE554A284400216061C2F84411F2 +:106EF00058490860A06B474940F48000A063D00166 +:106F0000086070BD70B5454C0546534A0220207498 +:106F100010680E4600F00F00032808BF012213D0AE +:106F2000106800F00F00042808BF02220CD010687F +:106F300000F00F0005281BD0106800F00F00062895 +:106F40001CBFFFDF012213D094F8310094F83010F9 +:106F5000012815D028460DF0DEFF38496061002079 +:106F6000C1F844016169E06A08443A49086070BDAB +:106F70003A48006810F0060F0CBF08220422E3E72D +:106F8000334628460DF095FFE7E728494FF4800087 +:106F900008602248816B21F4800181630021017423 +:106FA0007047C20002F1804202F5F8322C4BC2F861 +:106FB0001035C2F8141501218140164801601748A8 +:106FC000826B1143816370471C4801214160C1609D +:106FD0000021C0F844111F4801601048C162704789 +:106FE000204908600948D0F8001241F04001C0F87B +:106FF000001270470548D0F8001221F04001C0F897 +:10700000001218490020086070470000001000407E +:107010000000040404F50140ACF50140D80B002049 +:107020004885004048810040A8F5014008F501402E +:1070300018110040041000408817004000800040F4 +:107040004C85004000000C043C150040C7000020A7 +:107050000415004044850040101500401414004001 +:107060000411004060150040FE48D0F8001221F0E5 +:107070001001C0F80012012181617047FA49FF2018 +:1070800081F83E00F7480021C0F81C11D0F800122A +:1070900041F01001C0F800127047F24981B0D1F8F8 +:1070A0001C21012A0DD0F04991F83E10FF290DBF97 +:1070B00000204942017001B008BF7047012001B0B3 +:1070C0007047EA4A126802F07F02524202700020C2 +:1070D000C1F81C01E64800680090EFE7F0B51746DC +:1070E0000C00064608BFFFDFDF4D14F0010F2F73C1 +:1070F0001CBF012CFFDF002E0CBF01200220687294 +:10710000EC7201281CBF0228FFDFF0BD2DE9F84F0B +:10711000DFF860A39AF80000042828BFFFDFD24CF4 +:10712000DFF85483CF4D94F83C0000260127E0B1EE +:10713000D5F8040110F1000918BF4FF00109D5F886 +:107140001001002818BF012050EA09014FF4002B5C +:1071500017D08021C5F80813C8F800B084F83C6047 +:1071600090F0010F18BFBDE8F88FDFF81093D9F841 +:107170004C0100287DD0A07A01287BD002287AD04B +:10718000A6E0D5F80001DFF8E4A218B3C5F8006165 +:107190006F61FF20009002E0401E009005D0D5F8FE +:1071A0001C0100280098F7D000B9FFDFDAF80000D2 +:1071B00000F07F0ABAF15F0F84BF002000F079FB76 +:1071C00084F83EA0C5F81C61C5F80873A84800689B +:1071D000009002E0B9F1000F03D0B9F1000F27D001 +:1071E00058E0DAF8000000F07F0084F83E00C5F8AF +:1071F0001C6194F83D1039B15F2816D9002000F0C9 +:1072000058FB2F64AF6310E09D4909688AB2090CEE +:107210005F2803D30F2A06D9022904D2012000F0E7 +:1072200048FB2F6401E02F64AF6391480068009031 +:107230008022C5F80423914887649249D1F800C0A0 +:107240000B1F1B6843F69827BC449C4519D20A685B +:1072500042F210731A440A60C0F848618B498A48A8 +:107260000860091F8A4808608A48C0F800B0A06B0F +:1072700002E02DE015E017E040F40020A063BDE837 +:10728000F88F0E60C0F84861C5F80823C8F800B050 +:10729000C0F848618020C5F80803C8F800B0BDE810 +:1072A000F88F207E10B913E0607E88B1A07FE17F67 +:1072B00007FA00F007FA01F10843C8F8000094F853 +:1072C0002000800000F1804000F5C040C0F810654B +:1072D0006948A16B0160A663217C002019B1D9F82F +:1072E0004411012900D00021A27A012A6ED0022A7D +:1072F00074D000BFD5F8101101290CBF1021002156 +:1073000041EA00086448016811F0FF0F03D0D5F886 +:107310001411012900D0002184F83210006810F007 +:10732000FF0F03D0D5F81801012800D0002084F801 +:1073300033005A48006884F83400FFF7ECF801285D +:1073400018BF002084F83500C5F80061C5F80C614D +:10735000C5F81061C5F80461C5F81461C5F8186175 +:107360004F48006800904548C0F844614D480068A7 +:10737000DFF834910090D9F80000A062A9F1040070 +:107380000068E0624948016801F00F01032908BF65 +:10739000012013D0016801F00F01042908BF022069 +:1073A0000CD0016801F00F01052926D0006800F01B +:1073B0000F0006281CBFFFDF01201ED084F830001C +:1073C000A07A84F8310002282CD11EE0D5F80C01F7 +:1073D000012814BF002008208CE7FFE7D5F80C0136 +:1073E000012814BF00200220314A1268012A14BF6C +:1073F00004220022104308437CE72E48006810F066 +:10740000060F0CBF08200420D8E7607850B12A4945 +:10741000096809780840217831EA000008BF84F83B +:10742000247001D084F8246018F0020F0AD0EBF722 +:107430002DFCA16A214A081A9AF80010490852F84E +:107440002110884718F0010F18BF4FF0000B41D0F2 +:10745000EBF71CFCE16A9AF80020081A184951F869 +:1074600022202FE000100040D80B002048150040DB +:107470001C110040C700002008F5014000800040BA +:10748000741500404885004014100040ACF50140E0 +:107490004881004004F501404016004010140040AF +:1074A0001811004044810040448500401015004000 +:1074B000001400401414004004150040945C0200C5 +:1074C000DC5C0200594690479AF8000010F0010F6A +:1074D0002FD10CE018F0020F18BF4FF0010BB7D1FD +:1074E00018F0080F18BF4FF0020BB1D1ECE7DFF82E +:1074F00004B4DBF80000007800F00F00072828BF74 +:1075000084F8256015D2DBF80000062200F109019D +:10751000A01C0EF053F840B9207ADBF8001009786F +:10752000B0EBD11F08BF012001D04FF0000084F85C +:107530002500E17A4FF0000011F0020F1CBF18F097 +:10754000020F18F0040F19D111F0100F1CBF94F89E +:107550003320002A02D094F835207AB111F0080FB8 +:107560001CBF94F82420002A08D111F0040F02D087 +:1075700094F8251011B118F0010F01D04FF001005F +:10758000617A19B168B1FFF705FC10E0DB48DA4910 +:107590000160D5F8000220F00300C5F80002E77290 +:1075A00005E001290DD0022918BFFFDF10D018F027 +:1075B000010F17D0D2489AF8001050F821008047E8 +:1075C00056E06672E772A7729621227B002006E0E1 +:1075D0006672E7720220A072227B96210120FFF7DB +:1075E0009CFBE4E718F0020F2DD018F0040F21D116 +:1075F0000DF077F8F0B90DF086F8D8B9C1480168F8 +:10760000001F0068C0F3006CC0F3425500F00F0388 +:10761000C0F30312C0F30320BCF1000F0AD0002B0B +:107620001CBF002A002805D1002918BF032D38BF30 +:1076300048F0040827EA9800B3499AF8002051F866 +:107640002210884714E018F0080F06D0AF489AF8C7 +:10765000001050F8210080470AE018F0100F08BF12 +:10766000FFDF05D0AA489AF8001050F821008047A3 +:10767000A07A022818BFBDE8F88F207C002808BF38 +:10768000BDE8F88FA349C1F84461022814D001284D +:1076900018BFFFDFE16A6069884298BFFFDF606959 +:1076A000C9F80000A06B4FF4800140F48000A06393 +:1076B00099480160BDE8F88F6169E06A0844EFE726 +:1076C0000021964A81B0002818BFC2F80012C2F803 +:1076D0000011C2F80C11C2F81011C2F80411C2F85E +:1076E0001411C2F818118E480068009001B070475C +:1076F000012804BF28207047022804BF18207047C3 +:10770000042812BF08284FF4A870704700B5FFDFA7 +:10771000282000BD012804BF41F6A470704702284C +:1077200004BF41F288307047042804BF46F21800B5 +:107730007047082804BF47F2A030704700B5FFDF4C +:1077400041F6A47000BD10B502280DD0012804BF79 +:1077500042F6CE3010BD042817BF082843F6A440D7 +:10776000FFDF41F66A0010BD0CF096FF30B90CF057 +:10777000A0FF002808BF41F6583001D041F2643024 +:1077800041F29A01084410BD012812BF02280020CE +:107790007047042812BF08284FF4C870704700B51E +:1077A000FFDF002000BD5D490820C1F800025349F9 +:1077B000514808605C495B480860091D5B480860E7 +:1077C000091D5B480860091D5A48086052494FF47A +:1077D0004020086070475848016803291BBF0068B3 +:1077E0000228012000207047534801680B291BBF65 +:1077F00000680A2801200020704750498A7A012A2F +:1078000049D0022A18BF70474B7E002B08BF704733 +:10781000012A44D0CB7E4A7F13F1000C18BF4FF0F1 +:10782000010C24231844464B18603A4B0020C3F83F +:107830004C0110028CF0010240EA025040F00312A9 +:1078400091F82000830003F1804303F5C043C3F89F +:1078500010253C4A8B7F02EB8000DA0002F1804267 +:1078600002F5F832C2F81405DFF8DCC0C2F810C522 +:10787000C97FCA0002F1804202F5F832C2F814054D +:107880003248C2F81005012000FA03F2884022496C +:107890001043086070470B7E002BB9D170478B7E78 +:1078A0000A7F002B14BF4FF0010C4FF0000C112386 +:1078B000B8E727490968C9B9264A2749136870B14A +:1078C00023F0820343F07D0343F0004313600A6812 +:1078D00022F0100242F0600242F0004205E023F084 +:1078E000004313600A6822F000420A60134981F8DD +:1078F0003D007047041500400000040408F50140F5 +:107900009C5C020054140040AC5C0200BC5C0200B1 +:10791000CC5C02000080004004F5014000100040F3 +:107920001811004000110040A0F501401410004063 +:107930001C1100401010004050150040D80B0020D2 +:107940004C850040006000404C8100401011004018 +:10795000881700403C1700407C17004010B53F4896 +:1079600022210DF0D6FE3D480024017821F01001BF +:107970000170012106F018F839494FF6FF7081F8BF +:107980002240888437490880488010BD70473449B8 +:107990008A8C824218BF7047002081F822004FF67F +:1079A000FF70888470472D49016070472D49088019 +:1079B00070472B498A8CA2F57F43FF3B03D00021FF +:1079C00001600846704791F822202549012A1ABF14 +:1079D0000160012000207047214901F1220091F847 +:1079E0002220012A04BF00207047012202701D4896 +:1079F00000888884104670471A49488070471849A3 +:107A0000184B8A8C5B889A4206D191F82220002A72 +:107A10001EBF016001207047002070471048114AC6 +:107A2000818C5288914209D14FF6FF71818410F800 +:107A3000221F19B1002101700120704700207047FA +:107A40000748084A818C5288914205D190F822005B +:107A500000281CBF00207047012070473E0C00200A +:107A6000180C0020C80000207047574A012340B17D +:107A7000012818BF7047137008689060888890814B +:107A8000704753700868C2F802008888D080704739 +:107A90004D4A10B1012807D00EE0507860B1D2F8FD +:107AA00002000860D08804E0107828B1906808606F +:107AB000908988800120704700207047424910B1AA +:107AC000012803D006E0487810B903E0087808B12F +:107AD000012070470020704730B58DB00C46054638 +:107AE0000D2104A80DF037FEE0788DF81F002079F5 +:107AF0008DF81E0060798DF81D0028680090686878 +:107B00000190A8680290E868039068460CF02CFC8D +:107B100020789DF82F1088420CD160789DF82E10A7 +:107B2000884207D1A0789DF82D10884202BF01201D +:107B30000DB030BD00200DB030BD30B50C4605464F +:107B40008DB04FF0030104F1030012B1FEF738F9D4 +:107B500001E0FEF754F960790D2120F0C00040F0FB +:107B60004000607104A80DF0F6FDE0788DF81F006C +:107B700020798DF81E0060798DF81D00286800902E +:107B800068680190A8680290E868039068460CF065 +:107B9000EBFB9DF82F0020709DF82E0060709DF883 +:107BA0002D00A0700DB030BD10B5002904464FF077 +:107BB000060102D0FEF704F901E0FEF720F9607932 +:107BC00020F0C000607110BDCC000020FE4840686D +:107BD00070472DE9F0410F46064601461446012044 +:107BE00005F0ABFA054696F85500FFF793FD4AF20B +:107BF000B12108444FF47A71B0FBF1F0718840F282 +:107C000071225143C0EB4100001BA0F2653403F028 +:107C10001FF8002818BF1E3CAF4234BF2846384624 +:107C2000A04203D2AF422CBF3C462C467462BDE852 +:107C3000F0812DE9FF4F95B0044690F85500894634 +:107C40001190DDE9171008431390E04800260578ED +:107C50000C2D28BFFFDFDE4F37F8158094F86C51EC +:107C60000C2D28BFFFDFDA4830F8150040441FFA1A +:107C700080F894F865000D280CBF012000200C90BE +:107C80001798002804BF94F80C0103282BD10C98F6 +:107C900048B3B4F88E01484525D1D4F81401C4F88E +:107CA0000001608840F2E2414843C4F80401B4F89E +:107CB0005A01B4F8E6100844C4F80801204602F05E +:107CC000D1FFB4F89201E08294F890016075B4F8A5 +:107CD00094016080B4F89601A080B4F89801E08027 +:107CE000022084F80C01D4F864011090D4F86001EB +:107CF0000F90B4F8E670B4F85801D4F85411089114 +:107D0000179921B194F8201151B100F0DDB804F1B8 +:107D1000E001039174310D9104F5A075091D07E090 +:107D200004F59A710391091D0D9104F59275091DD1 +:107D30000E91B4F85810A9EB0000A9EB01010FFA5D +:107D400080FA0FFA81FBBAF1000F05DAD4F850017E +:107D500008900120DA461390002002909B48007999 +:107D6000E8B3F3F7A5FFD0B3B4F8F800022836D390 +:107D700094F80C01022832D094F8230178BB94F8CF +:107D80006C81B8F10C0F28BFFFDF914830F8180064 +:107D900000F5C8601FFA80F894F80C0101287DD026 +:107DA000618840F2E24041430020B8F1000F05D065 +:107DB000884808FB01F1B1FBF0F0401C07EB0B0118 +:107DC000A1EB0A02D4F8141180B2431A029902FB03 +:107DD00003110291C4F81401012084F8230194F8DE +:107DE0000C01002874D0012800F04682022800F01F +:107DF0009481032818BFFFDF00F078820298311ABF +:107E00000898FCF704FC0D99012640F271220860E5 +:107E10000E98A0F80090002028702E710D98006830 +:107E2000A8606188D4F814015143C0EB4100674950 +:107E3000A0F23530C8618969814287BF0399086023 +:107E4000039801600398616A0068084400F2A51075 +:107E5000E86002F0FDFE10B1E8681E30E8606E7167 +:107E6000B4F8D000A0EB090000B20028C4BF032082 +:107E700068710C980028189800F09A82D8B100BF59 +:107E8000B4F8F81000290CBF0020B4F8FA00A4F8E8 +:107E9000FA0094F8FC20401C504300E019E08842AE +:107EA00009D26879401E002805DD6E71B4F8FA0029 +:107EB000401CA4F8FA001798002800F0A18294F85A +:107EC0002001002800F0988219B00220BDE8F08F50 +:107ED00065E094F86800032857D03B4894F85510A3 +:107EE00090F8300005F0D7FAE18A40F27122514350 +:107EF00000EB41010020D4F80421B8F1000F06D0B6 +:107F0000344808FB02F2B2FBF0F000F10100D4F8B3 +:107F10000031D4F80821A0EB030C029BC4F8000147 +:107F200002FB0C334FF0000007D000BF294808FBCC +:107F300001F1B1FBF0F000F10100D4F81011C4F828 +:107F40001001A0EB01011944608840F2E24300FBFC +:107F500003F34FF0000006D01E4808FB03F3B3FB09 +:107F6000F0F000F1010007EB0B03A3EB0A03A3EB16 +:107F70000202D4F81431A2F10102A0EB030302FBC8 +:107F800003110291C4F8140126E7E18A40F271223C +:107F9000D4F8040101FB02F100EB4101AAE70F98BC +:107FA000002808BFFFDF94F85510074890F830000C +:107FB00005F071FA0790E18A40F271204143079879 +:107FC00000EB4101002007E0600C0020DC000020F5 +:107FD000EC5C020040420F00B8F1000F07D000BF78 +:107FE000FF4808FB01F1B1FBF0F000F10100C4F81B +:107FF0001001618840F2E24001FB00F14FF0000007 +:1080000006D0F74808FB01F1B1FBF0F000F10100E8 +:10801000C4F8140186B221464FF00100D4F828A01C +:1080200005F08BF8074694F85500FFF773FB4AF20A +:10803000B12B58444FF47A78B0FBF8F0618840F2E5 +:1080400071225143C0EB4100801BA0F2653602F063 +:10805000FFFD002818BF1E3EBA4534BF38465046C3 +:10806000B04203D2BA452CBF56463E46666294F8EB +:108070005500FFF789FB00F2E140B0FBF8F10F98E3 +:108080000E1894F85500FFF77FFB074694F855004B +:10809000FFF740FB38444AF2AB310844B0FBF8F13B +:1080A000E28A40F2712042430798D4F8107100EB45 +:1080B0004200401AC01B3044A0F12006617D40F20E +:1080C000E24011FB00FA94F85500009010F00C0FFC +:1080D0000ABF00984EF62830FFF71CFB5844B0FB4F +:1080E000F8F000EB470000EB0A070098FFF700FBF1 +:1080F000384400F16201BB48816194F85500FFF7F4 +:1081000043FB00F2E140B0FBF8F10F980844301A4D +:10811000B0F53D7F98BFFFDF70E6E18A40F2712243 +:10812000D4F80401514300EB41010020B8F1000FE5 +:1081300007D000BFAA4808FB01F1B1FBF0F000F145 +:108140000100C4F81001608840F2E24100FB01F137 +:108150004FF0000006D0A24808FB01F1B1FBF0F09F +:1081600000F10100C4F8140186B221464FF001006D +:10817000D4F828A004F0E1FF804694F85500FFF7FA +:10818000C9FA4AF2B12B00EB0B014FF47A70B1FB44 +:10819000F0F0618840F271225143C0EB4100801B36 +:1081A000A0F2653602F054FD002818BF1E3EC245FD +:1081B00034BF40465046B04203D2C2452CBF56465B +:1081C000464666620FBB1898F8B194F85560304681 +:1081D000FFF7A0FA00EB0B014FF47A70B1FBF0F05F +:1081E000D4F81011E38A084440F27122D4F8041143 +:1081F0005A4301EB42010F1A3046FFF779FA109902 +:10820000081A3844A0F120060AE0E18A40F27122FF +:10821000D4F80401514300EB4100D4F81011461A80 +:10822000D4F80821D4F80011D4F8100101FB020A97 +:10823000607D40F2E24110FB01F894F8557017F0B0 +:108240000C0F0ABF38464EF62830FFF763FA00EBF2 +:108250000B014FF47A70B1FBF0F000EB4A00804460 +:108260003846FFF745FA404400F160015D488161FE +:10827000012084F80C01C1E5618840F2712251436C +:10828000D4F81401D4F80821C0EB410101FB0AF62F +:1082900007EB0B01891AD4F800C1D4F81031491E3C +:1082A0000CFB023201FB002A607D40F2E24110FB30 +:1082B00001F894F8557017F00C0F0ABF38464EF6C7 +:1082C0002830FFF727FA4AF2B12101444FF47A70BF +:1082D000B1FBF0F000EB4A0080443846FFF708FAA3 +:1082E000404400F160013F48816187E5628840F2C7 +:1082F0007121D4F814015143C0EB410000FB0AF690 +:1083000094F8640024281CBF94F8650024280BD13D +:10831000B4F88E01A9EB000000B2002804DB94F849 +:108320009101002818BF1190139800B3FFB910985D +:1083300000281ABF0F980028FFDF94F8550010F0AE +:108340000C0F14BF4EF62830FFF7E4F94AF2B121C2 +:1083500001444FF47A70B1FBF0F0361A94F85500EE +:10836000FFF7C6F91099081A3044A0F12006D4F896 +:10837000141107EB0B0000FB01F7119810F00C0F24 +:108380000ABF11984EF62830FFF7C4F94AF2B1211E +:1083900001444FF47A70B1FBF0F000EB47071198FD +:1083A000FFF7A6F9384400F160010E48816125E528 +:1083B00000287FF465AD94F80C0100283FF47BADF4 +:1083C000618840F27122D4F814015143C0EB41019D +:1083D000284604F0B7FD0004000C3FF46CAD03E048 +:1083E00040420F00DC0000202299002918BF0880BD +:1083F000012019B0BDE8F08F94F85C01FCF762FF32 +:1084000094F85C012946FCF74BFE20B1179880F0E8 +:10841000010084F8210119B00020BDE8F08F70B58B +:10842000FE4C607A00281CBF002070BD94F8340018 +:1084300038B1A16B606A884203D9F7F72AF90020A6 +:1084400070BDA06AE8B1F6F7BCF90546F6F730F85A +:10845000284442F210714618FCF7D8FB054629461D +:10846000E06AFDF7EFF8E562A16A8219914224BF44 +:10847000081AA06205D20120A062F7F70AF90020CD +:1084800070BD012070BDF8B5E44C0246E44F0025F4 +:108490006168606A052A48D2DFE802F0032F3437AA +:1084A0003E00A07A002660B101216846FDF788FCF5 +:1084B0009DF8000042F210710002B0FBF1F201FBE6 +:1084C0001206F6F77EF98119A069FCF7A0F8A06101 +:1084D000257403206075607A38B9207B04F110019F +:1084E000FCF7DEFD002808BFFFDF2584FCF798FAC3 +:1084F0007879BDE8F840EAF70FBDBDE8F840002103 +:1085000000F0B5BDC1F86001F8BDD1F86001BDE86B +:10851000F840012100F0ABBD84F83450FCF780FA3C +:108520007879BDE8F840EAF7F7BCFFDFF8BD2DE940 +:10853000F04FDFF8E892044683B099F800008B46CC +:1085400001270025B64E4FF00208032804BF99F812 +:108550000C00A0427ED1D9F80400706199F80000A7 +:10856000032818BFFFDF0324BBF1080F73D2DFE835 +:108570000BF0040F31312CD1D1C8C9F82450F6F7D3 +:10858000F7FC002818BFFFDFB47003B0BDE8F08F20 +:10859000F5F78EFF0446D9F81C00A04228BFC9F8A1 +:1085A0001C4005D2201AFDF774F8C9F81C4038B1F8 +:1085B000F7F757F8002818BFFFDF03B0BDE8F08FCA +:1085C00003B00020BDE8F04F5DE703B0BDE8F04F19 +:1085D000FEF79CBD89F8144089F8105099F83400D2 +:1085E0004FF0010A42F2107B68B14FF47A71D9F86A +:1085F0001800FCF70CF8C9F81800002109F1100068 +:1086000004F0A0FC1BE001216846FDF7CFFB9DF8BC +:1086100000000002B0FBFBF10BFB110AF6F7D1F8EA +:1086200082445146D9F81800FBF7F1FFC9F8180049 +:10863000514609F1100004F085FC00F1010AB9F877 +:108640002000411C0A293CBF5044A9F82000D9F859 +:10865000040001E062E05DE038B1B9F82000401CA0 +:108660000A2828BF89F8158001D289F8154099F8A1 +:10867000090070BB99F8340040B1D9F83810D9F826 +:108680002400884202D9F7F704F822E0D9F828003C +:1086900058B3F6F796F80446F5F70AFF204400EBC6 +:1086A0000B08FCF7B3FA04462146D9F82C00FCF776 +:1086B000C9FFC9F82C40D9F8281000EB08029142F4 +:1086C00024BF081AC9F828000FD2C9F82870F6F795 +:1086D000E0FF99F80C00FCF77AFA89F800507079FD +:1086E00003B0BDE8F04FEAF717BC99F80C0009F1A8 +:1086F0001001FCF7D5FC002808BFFFDF03B0BDE880 +:10870000F08F99F80C00FCF762FA89F8005003B07A +:10871000BDE8F08FFFDF03B0BDE8F08F202C28BF4D +:10872000FFDFDFF80091072139F81400FAF72CF980 +:108730005FEA000A08BFFFDF202C28BFFFDF39F8FF +:108740001400BAF80010884218BFFFDF5446C6F87C +:1087500014A04FF0200ABBF1080F80F04881DFE839 +:108760000BF0049DA7A7A0F2F1F0C4F86051F580CA +:10877000C4F8645194F8210138B9FCF747FAD4F8E9 +:108780002C11FCF75FFF00281BDCB4F81E11B4F8B5 +:108790005800814206D1B4F8D410081AA4F8D600C3 +:1087A000204605E0081AA4F8D600B4F81E112046A9 +:1087B000A4F85810D4F84811C4F82C11C0F850117E +:1087C0001DE0B4F81C11B4F85800081AA4F8D6003B +:1087D000B4F81C112046A4F85810D4F82C11C4F891 +:1087E0004811C4F85011D4F83411C4F8E010D4F88A +:1087F0003811C4F85411B4F83C11A4F8581102F01F +:108800000EF9FCF7DDF9814694F85500FEF782FF7A +:108810004AF2B12108444FF47A7105E0600C00205F +:10882000DC0000209C0C0020B0FBF1F0D4F8141107 +:1088300040F27122084461885143C0EB4100A0F12D +:10884000300AB9F1B70F98BF4FF0B70921460120A0 +:1088500004F073FC4844AAEB0000A0F21A39A246C7 +:108860002146012004F069FCDAF824109C30814292 +:1088700088BF0D1AC6F80C904D4528BF4D46B5600F +:10888000D4F84C01A0F2A5103061FCF7A8FE84F8E2 +:10889000207186F8028003B0BDE8F08F02F0D3F9B2 +:1088A00001E0FEF733FC84F8207103B0BDE8F08FDF +:1088B000FCF7ACF9D4F8502101461046FCF7C2FE93 +:1088C00048B1628840F27123D4F814115A43C1EBC5 +:1088D0004201B0FBF1F094F865100D290FD0B4F807 +:1088E0005820B4F81E1113189942AEBF481C401C02 +:1088F0001044A4F81E0194F8220178B905E0B4F8F8 +:108900001E01401CA4F81E0108E0B4F81E01B4F8D2 +:10891000D410884204BF401CA4F81E01B4F85A01C8 +:108920000DF1040B401CA4F85A01B4F88000B4F80F +:108930007E10401AB4F85810401E08441FFA80F800 +:1089400012E046E03EE052E000231A462046CDF811 +:1089500000B0FFF76EF9002804BF03B0BDE8F08F48 +:10896000012818BFFFDF25D0B4F81E11A8EB0100C5 +:1089700000B20028E8DA082084F8740084F87370E4 +:10898000204601F00FFE84F80C5194F85C514FF62C +:10899000FF77202D00D3FFDF29F8157094F85C01D4 +:1089A000FCF715F984F85CA1707903B0BDE8F04FCD +:1089B000EAF7B2BAB4F81E01BDF804100844A4F8EE +:1089C0001E01D1E7FEF742FA03B0BDE8F04FFEF713 +:1089D0009DBB94F80C01042818BFFFDF84F80C51EC +:1089E00094F85C514FF6FF77202DD5D3D3E7FFDF06 +:1089F00003B0BDE8F08F10B5F84C207850B10120DD +:108A00006072F6F75EFE2078032805D0207A0028F1 +:108A100008BF10BD0C2010BD207BFCF753FC207B51 +:108A2000FCF79DFE207BFCF7D2F8002808BFFFDF93 +:108A30000020207010BD2DE9F04FE84F83B038784A +:108A400001244FF0000840B17C720120F6F739FE96 +:108A50003878032818BF387A0DD0DFF8849389F866 +:108A6000034069460720F9F718FF002818BFFFDF09 +:108A70004FF6FF7440E0387BFCF724FC387BFCF7B2 +:108A80006EFE387BFCF7A3F8002808BFFFDF87F8ED +:108A90000080E2E7029800281CBF90F80C11002922 +:108AA0002AD00088A0421CBFDFF838A34FF0200B6B +:108AB0003AD00721F9F768FF040008BFFFDF94F8F8 +:108AC0005C01FCF74CFE84F80C8194F85C514FF685 +:108AD000FF76202D28BFFFDF2AF8156094F85C018F +:108AE000FCF775F884F85CB169460720F9F7D5FE04 +:108AF000002818BFFFDF12E06846F9F7ACFE002837 +:108B0000C8D011E0029800281CBF90F80C11002971 +:108B100005D00088A0F57F41FF39CAD104E068463E +:108B2000F9F799FE0028EDD089F8038087F83480A2 +:108B300087F80B8003B00020BDE8F08F70B50446C5 +:108B4000A94890F80004A94D400995F80014490976 +:108B5000884218BFFFDF95F8140D4009A44991F829 +:108B600000144909884218BFFFDF9D4900200122F7 +:108B70004C7188700A7048700A71C8709749087003 +:108B8000BDE8704057E79649087070472DE9F843F3 +:108B9000924C064688462078002860D19548FBF71D +:108BA000BAFF207320285AD003276660277000255B +:108BB00065722572AEB1012106F1FC00FDF71FF9C7 +:108BC0000620F9F789FE81460720F9F785FE96F819 +:108BD000FC104844B1FBF0F200FB1210401C86F878 +:108BE000FC00FBF7EDFF40F2F651884238BF40F23F +:108BF000F65000F59F7086B2F5F75AFCE061F5F784 +:108C0000E0FD4FF0010968B384F80A90FBF7FEFF1E +:108C1000814601216846FDF7C9F89DF8000042F23F +:108C200010710002B0FBF1F201FB120081194846FD +:108C3000FBF7EDFCA061C4E90A8927756775257407 +:108C4000207B04F11001FCF72BFA002808BFFFDF9E +:108C500025840020F6F735FD0020BDE8F8830C20C0 +:108C6000BDE8F883FBF7D2FF3146FBF7D0FCA061EB +:108C7000A57284F83490A8F28B50A562A063DCE75B +:108C80005749487070475649087170472DE9F041BF +:108C9000534C0646E088401CE080D4E902516078DD +:108CA000D6F8607120B13A46284604F076F90546B8 +:108CB000A068854205D02169281A08442061FCF784 +:108CC0008EFCA560AF4209D896F80C01012805D0AA +:108CD000E078002804BF0120BDE8F0810020BDE855 +:108CE000F08110B504460846FEF714FD4AF2B121A2 +:108CF00008444FF47A71B0FBF1F040F2E241614375 +:108D000000F2353081428CBF081A002010BD70B5CA +:108D1000044682B0002084F8200194F8DE00002888 +:108D200007BF94F80C01032802B070BDFBF76EFF7B +:108D3000D4F8502101461046FCF784FC0028DCBF23 +:108D400002B070BD628840F27123D4F814115A4306 +:108D5000C1EB4201B0FBF1F0B4F85810401C0844DC +:108D6000A4F81C01B4F8D400B4F81C21801A00B295 +:108D70000028DCBF02B070BD012084F82201B4F8E5 +:108D80008000B4F87E2001AE801A401E084485B2EF +:108D900012E00096B4F81C11002301222046FEF7D1 +:108DA00048FF002804BF02B070BD01280DD0022882 +:108DB00012BFFFDF02B070BDB4F81C01281A00B268 +:108DC0000028BCBF02B070BDE3E7B4F81C01BDF8D9 +:108DD00004100844A4F81C01EEE70000600C002019 +:108DE000DC0000209C0C002001E000E00BE000E033 +:108DF00019E000E02F850100F8B5042200250629BE +:108E00005BD2DFE801F007260319192A044680F82F +:108E10000C2107E00446BD48C078002818BF84F83C +:108E20000C210AD0FBF7FCFDA4F85A51B4F8580005 +:108E3000A4F81E0184F82251F8BD0095B4F8D410AE +:108E4000012300222046FEF7F4FE002818BFFFDFB2 +:108E5000E8E7032180F80C11F8BD0646876AB0F8F0 +:108E60001401314685B2012004F067F9044696F8F2 +:108E70005500FEF74FFC4AF2B12108444FF47A71D5 +:108E8000B0FBF1F0718840F271225143C0EB410018 +:108E9000401BA0F2653501F0DBFE002818BF1E3D27 +:108EA000A74234BF20463846A84228BF2C4602D2EB +:108EB000A74228BF3C467462F8BDFFDFF8BD2DE92C +:108EC000F05F924EB178022906BFF1880029BDE813 +:108ED000F09F7469C4F8640194F85500FEF708FC2B +:108EE000D4F86411081AB1680144B160F16808440B +:108EF000F060746994F82301002808BFBDE8F09F72 +:108F000094F80C01032818BFBDE8F09F94F8555061 +:108F100036780C2E28BFFFDF7D4F37F8168094F887 +:108F20006C610C2E28BFFFDF37F81600404494F820 +:108F30006C8186B2B8F10C0F28BFFFDF37F818003C +:108F400000F5C8601FFA80F82846FEF7D1FBD4F878 +:108F500064114FF0000A0F1A15F00C0F0ABF2846D3 +:108F60004EF62830FEF7D6FB4FF47A7900F2E73060 +:108F7000B0FBF9F03F1A2846FEF7BAFBD4F8E01030 +:108F800015F00C0FA1EB000B0ABF28464EF6283057 +:108F9000FEF7C0FB4AF2B1210844B0FBF9F0ABEB9D +:108FA0000000A0F160017143B1FBF8F1292202EB4E +:108FB00050006031A0EB510200EB5100BA4201D8E1 +:108FC000B84201D8F2F718FF608840F2E24141430D +:108FD00000202EB106FB01F04E49B0FBF1F0401C21 +:108FE000C4F8140184F823A1BDE8F09F70B50546CC +:108FF000464890F802C0BCF1020F07BF406900F577 +:10900000B074454800F12404002904BF256070BDF8 +:109010004FF47A7601290DD002291CBFFFDF70BD05 +:109020001046FEF790FB00F2E140B0FBF6F0281A84 +:10903000206070BD1846FEF7A7FB00F2E140B0FBD0 +:10904000F6F0281A206070BD3348007800281CBF55 +:109050000020704710B50720F9F730FC80F00100C0 +:1090600010BD2D480078002818BF012070472DE959 +:10907000F843294C0025814684F83450D4F81880F0 +:1090800084F83010E5722570012727722946606840 +:1090900003F0D3FA6168C1F85081267B81F85C61E6 +:1090A000C1F86091C1F85481B1F80080202E28BF2A +:1090B000FFDF1A4820F81680646884F80C510023FA +:1090C000A4F858511A46194620460095FEF7B1FDFE +:1090D000002818BFFFDFC4F80851C4F8005184F815 +:1090E0000C71A4F81E51A4F81C5184F82251B4F854 +:1090F0005800401EA4F85800A4F85A51FBF790FC01 +:1091000002484079BDE8F843E9F706BFDC000020DB +:10911000EC5C020040420F00600C00209C0C002020 +:10912000012804D0022805D0032808D105E0012930 +:1091300007D004E0022904D001E0042901D0002076 +:109140007047012070472DE9F0410E46044604F0B7 +:1091500048FD0546204604F048FD044604F063F847 +:10916000FE4F010015D0386990F854208A4210D083 +:1091700090F8A4311BB190F8A63123421FD02EB92C +:1091800090F85130234201D18A4218D890F8A401B6 +:10919000A8B1284604F047F870B1396991F8552014 +:1091A000824209D091F8A40118B191F8A701284290 +:1091B00005D091F8A40110B10120BDE8F081002094 +:1091C000FBE730B5E54C85B0E06900285DD014219F +:1091D00068460CF0C0FA206990F85500FEF79AFA3C +:1091E0004FF47A7100F5FA70B0FBF1F5206990F850 +:1091F0005500FEF77DFA2844ADF806002069018885 +:10920000ADF80010B0F85810ADF804104188ADF872 +:10921000021090F8860130B1A069C11C039104F0DE +:10922000C1FB8DF81000206990F885018DF80800C9 +:10923000E169684688472069002180F8861180F836 +:1092400085110399002920D090F8841100291CD1A0 +:1092500090F86410272918D09DF81010039A00295F +:1092600013D013780124FF2B11D0072B0DD1022925 +:109270000BD15178FF2908D180F884410399C0F8B7 +:1092800088119DF8101080F8871105B030BD1B299A +:10929000F2D9FAE770B5B14C206990F865001B2847 +:1092A00000D0FFDF2069002580F88D5090F8B801CC +:1092B00000B1FFDF206990F88E1041B180F88E5028 +:1092C0000188A0F8BC1180F8BA510E2108E001888D +:1092D000A0F8BC1180F8BA51012180F8BE110D210F +:1092E00080F8B8110088F9F781FCF9F719F92079AD +:1092F000E9F712FE206980F8655070BD70B5974C93 +:10930000A07980072CD5A078002829D16269204651 +:10931000D37801690D2B01F158005FD00DDCA3F16A +:1093200002034FF001050B2B19D2DFE803F01A18E6 +:1093300044506127182C183A6400152B6FD008DCB4 +:10934000112B4BD0122B5AD0132B62D0142B06D1D9 +:1093500066E0162B71D0172B70D0FF2B6FD0FFDF7C +:1093600070BD91F867200123194603F081FD0028A4 +:10937000F6D12169082081F8670070BD1079BDE839 +:10938000704001F002BD91F86600C00700D1FFDF18 +:1093900001F0BAFC206910F8661F21F0010101708C +:1093A00070BD91F86500102800D0FFDF2069112101 +:1093B00080F88D5008E091F86500142800D0FFDF98 +:1093C0002069152180F88D5080F8651070BD91F8E6 +:1093D0006500152800D0FFDF172005E091F8650033 +:1093E000152800D0FFDF1920216981F8650070BDC4 +:1093F000BDE870404EE7BDE8704001F09ABC91F8BE +:1094000064200123002103F033FD00B9FFDF0E20AB +:109410000FE011F8660F20F0040008701DE00FE067 +:1094200091F864200123002103F022FD00B9FFDF41 +:109430001C20216981F8640070BD12E01BE022E06D +:1094400091F86600C0F30110012800D0FFDF206909 +:1094500010F8661F21F010010170BDE8704001F0A6 +:1094600053BC91F864200123002103F001FD00B9F1 +:10947000FFDF1F20DDE791F86500212801D000B152 +:10948000FFDF2220B0E7BDE8704001F049BC33485F +:10949000016991F86620130702D501218170704798 +:1094A00042F0080281F866208069C07881F8C9001E +:1094B00001F021BC10B5294C21690A88A1F8FC21D2 +:1094C00081F8FA0191F8540001F003FC216981F858 +:1094D000FE0191F8550001F0FCFB216981F8FF01C4 +:1094E000012081F8F801002081F8A4012079BDE86D +:1094F0001040E9F711BDF0B4184C206900F5D6739F +:1095000001881985018E5985818E9985018FB0F862 +:109510004420914200D31146D985828FB0F846107D +:109520008A4200D21146198690F855204FF0010565 +:1095300012F00C0F4FF4296203D0914200D811466B +:10954000198690F8540010F00C0F04D0988D9042BA +:1095500000D902469A8583F8265001E0FC000020DD +:109560002079F0BCE9F7D8BC10B5F84C01230921EB +:10957000206990F86420583003F07AFC38B12169F2 +:10958000002001F87C0F087301F8180C10BD0120B1 +:10959000A07010BD70B5ED4D012329462869896979 +:1095A00090F8642009790E2A01D1122903D00024F1 +:1095B0001C2A03D004E0BDE87040D5E7142902D08E +:1095C000202A08D009E080F8644080F88840BDE88F +:1095D000704001F0FDBB162906D0262A01D11629BC +:1095E00002D0172909D00CE000F8644F80F824401D +:1095F000407821280CD01A2017E090F86520222A04 +:1096000007D0EA69002A03D0FF2901D180F886310A +:1096100012E780F8654001F077FB286980F87D400B +:1096200090F8A4010028F3D00020BDE8704041E785 +:109630002DE9F843C54C206990F86410202909D021 +:109640005FF0000790F86510222905D07FB300F184 +:10965000640503E00127F5E700F1650510F8961FA2 +:1096600041F004010170A06904F0C7FA4FF001084D +:10967000002608B33946A069FFF765FDE0B16A46E8 +:10968000A169206903F0DEFD90B3A06904F0B3FA8C +:109690002169A1F88E01B1F8581001F00EFB40B31A +:1096A0002069282180F8741080F8738058E0FFE763 +:1096B0000220A070BDE8F883206990F8A40110B1E1 +:1096C0001E20FFF7F7FEAFB1A0692169C07881F8CD +:1096D000CA0008FA00F1C1F3006000B9FFDF206999 +:1096E0000A2180F8641090F8880040B9FFDF06E096 +:1096F00009E02AE02E7001F007FBFFF7C8FE2069A1 +:1097000080F87D60D6E7226992F8A40170B1B2F8C2 +:10971000583092F85410B2F8A80102F5C77203F05D +:1097200083FE68B12169252081F86400206900F179 +:10973000650180F87D608D4212D180F865600FE090 +:109740000020FFF7B7FE2E70F0E720699DF80010AB +:1097500080F890119DF8011080F891112420287054 +:10976000206900F165018D4203D1BDE8F84301F0A5 +:10977000CBBA80F888609DE770B5744C01230B214B +:10978000206990F86520583003F072FB202650BB0A +:1097900020690123002190F86520583003F068FB10 +:1097A0000125F0B1206990F8640024281BD0A0693D +:1097B00004F001FAC8B1206990F8961041F0040154 +:1097C00080F89610A1694A7902F0070280F85120CA +:1097D000097901F0070180F8501090F8A5311BBB02 +:1097E00006E0A57028E6A67026E6BDE870404EE6C5 +:1097F00090F8A431C3B900F154035E788E4205D1CC +:109800001978914202D180F87D500DE000F5F97190 +:109810000D7002884A8090F850200A7190F851002B +:1098200048712079E9F778FB2169212081F86500EA +:10983000BDE8704001F05FBA70B54448006990F827 +:109840004E20448EC38E418FB0F84050022A23D060 +:10985000A94200D329460186C18FB0F84220914227 +:1098600000D311468186018FB0F84420914200D385 +:1098700011464186818FB0F84620914200D31146AF +:10988000C186418EA14200D90C464486C18E9942C0 +:1098900000D90B46C386CFE5028E914200D3114614 +:1098A000C68F828E964200D23246A94200D3294604 +:1098B0000186B0F842108A4200D30A46828600210F +:1098C00080F84E10CFE770B5204C206990F8660004 +:1098D00010F0300F04D0A07840F00100A070ABE58C +:1098E000A06904F04DF948B32569A06904F044F972 +:1098F00028872569A06904F03BF968872569A06974 +:1099000004F03CF9A8872569A06904F033F9E887D9 +:10991000A0794FF00102800703D56069C078142850 +:109920000FD0206990F864101C290AD090F84E10CE +:10993000012910D090F89B1169B909E0BDE8704089 +:10994000A5E5206980F84E2005E00000FC0000201D +:1099500090F89A1131B1206910F8661F41F010019A +:10996000017016E090F8661041F0200180F8661052 +:1099700000F5D67103888B86038FCB86438F0B87C8 +:10998000838F4B87C08F888781F832202079E9F751 +:10999000C3FABDE8704001F0AEB970B5FE4C206965 +:1099A00090F86610890707D590F8642001230821F4 +:1099B000583003F05DFAE8B1206990F89000800714 +:1099C00012D4A06904F0B8F8216981F89100A06967 +:1099D00030F8052FA1F892204088A1F8940011F8E2 +:1099E000900F40F002000870206990F89010C907AD +:1099F00003D00FE00120A0701EE590F866008007FC +:109A000000D5FFDF206910F8661F41F002010170E8 +:109A100001F071F92069002590F86410062906D13B +:109A200080F8645080F888502079E9F775FA206949 +:109A300090F88C110429DFD180F88C512079E9F756 +:109A40006BFA206990F864100029D5D180F888500D +:109A5000F2E470B5D04C01230021206990F8652014 +:109A6000583003F005FA012578B9206990F865208F +:109A7000122A0AD001230521583003F0F9F910B158 +:109A80000820A070D8E4A570D6E4206990F88E0074 +:109A900008B901F030F92169A069E83104F02DF826 +:109AA0002169A069C03104F033F8206990F8C00141 +:109AB00000B1FFDF21690888A1F8C20101F5E27158 +:109AC000A06904F008F82169A06901F5E67104F0C5 +:109AD0000AF8206980F8C051142180F865102079B7 +:109AE000BDE87040E9F718BA70B5AB4C012300210E +:109AF000206990F86520583003F0BAF90125A8B123 +:109B0000A06903F0B4FF98B1A0692169B0F80D0015 +:109B1000A1F88E01B1F8581001F0CFF858B12069C2 +:109B2000282180F8741080F8735085E4A57083E4D0 +:109B3000BDE87040ABE4A0692169027981F8902109 +:109B4000B0F80520A1F8922103F084FF2169A1F863 +:109B50009401A06903F081FF2169A1F89601A06931 +:109B600003F082FF2169A1F898010D2081F86500BA +:109B700062E47CB5884CA079C00738D0A069012385 +:109B80000521C578206990F86520583003F070F9F8 +:109B900068B1AD1E0A2D06D2DFE805F009090505FA +:109BA000090905050909A07840F00800A070A0780F +:109BB00000281CD1A06903F023FF00287AD0A069F7 +:109BC0000226C5781DB1012D01D0162D18D12069AE +:109BD00090F8640003F034F990B1206990F86410B3 +:109BE0001F290DD0202903D0162D16D0A6707CBDBC +:109BF000262180F86410162D02D02A20FFF75AFC87 +:109C00000C2D58D00CDC0C2D54D2DFE805F033308D +:109C10001D44A7A7479E57A736392020A0707CBDBA +:109C20000120152D75D008DC112D73D0122D69D0AF +:109C3000132D64D0142D3DD178E0162D7CD0182D35 +:109C40007DD0FF2D36D183E020690123194690F89D +:109C50006720583003F00CF9F8B9A06903F034FF1D +:109C6000216981F87201072081F8670078E001F02E +:109C700036F975E0FFF738FF72E001F010F96FE098 +:109C8000206990F86510112901D0A67068E01221B2 +:109C900080F8651064E0FFF7DCFE61E0206990F871 +:109CA00065001728F1D101F02FF821691B2081F8F8 +:109CB000650055E052E0FFF770FE51E0206990F832 +:109CC0006600C00703D0A07840F001001FE069469D +:109CD000A06903F038FF9DF8000000F0250120691D +:109CE00000F8961F9DF8011001F04901417001F044 +:109CF00002F8206910F8661F41F0010114E0FFF737 +:109D000033FC2DE0216991F86610490705D5A07054 +:109D100026E00EE016E00FE011E000F0ECFF206915 +:109D200010F8661F41F00401017019E0FFF7CBFD48 +:109D300016E001F081F813E0FFF71EFD10E0FFF7D9 +:109D400077FC0DE001F057F80AE0FFF723FC07E08D +:109D5000E16919B1216981F8860101E0FFF797FBFC +:109D60002069F0E92A12491C42F10002C0E9001200 +:109D70007CBD70B5084CA07900074DD5A0780028AF +:109D80004AD1206990F8CB00FE2800D1FFDF20697E +:109D9000FE2180F8CB1001E0FC00002090F8651057 +:109DA0000025192906D180F88D5000F0ADFF2069FB +:109DB00080F86550206990F864101F2902D0272987 +:109DC00021D119E090F8650003F03AF878B12069E4 +:109DD0002621012380F8641090F865200B2158306B +:109DE00003F046F878B92A20FFF764FB0BE02169FD +:109DF000202081F8640006E0012180F8851180F8B8 +:109E0000645080F88850206990F86710082903D1C1 +:109E10000221217080F8CB10E4E4FE49096991F831 +:109E200090210AB991F8542081F8542091F8912199 +:109E30000AB991F8552081F85520002802D0002059 +:109E4000FFF738BB704770B5F24C06460D462069E7 +:109E500090F8CB00FE2800D0FFDF2269002082F8B6 +:109E6000CB6015B1A2F88A00BCE422F8840F01206F +:109E70001071B7E470B5E74C01230021206990F818 +:109E80006420583002F0F4FF00287AD0206990F85E +:109E90009A1111B190F89B1139B190F8A4110029D1 +:109EA0006ED090F8A51111B36AE0B0F89C1120F8BB +:109EB000401FB0F85E114180B0F860118180B0F8A9 +:109EC0006211C180002180F85A1190F826008006A6 +:109ED0000AD501F068F8206910F8661F21F020010A +:109EE00041F01001017051E0002114204CE090F885 +:109EF000652001230B21583002F0BAFF68BB2069AE +:109F000090F8540000F0E5FE0646206990F85500F0 +:109F100000F0DFFE0546206990F8A6113046FFF7F5 +:109F2000FFF8D8B1206990F8A7112846FFF7F8F894 +:109F3000A0B12269B2F8583092F85410B2F8A801D2 +:109F400002F5C77203F070FA20B12169252081F86B +:109F500064001BE00020FFF7ADFA11E02069012347 +:109F6000032190F86520583002F082FF40B9206943 +:109F70000123022190F86520583002F079FF08B1E2 +:109F800000202FE400211620FFF75DFF012029E4C7 +:109F900010B548BB9F4C206990F86610CA0702D0E4 +:109FA0000121092018E08A070AD501210C20FFF7BA +:109FB0004AFF206910F8901F41F0010101702AE06A +:109FC0004A0702D50121132006E00A0707D510F839 +:109FD000C91FC17001210720FFF735FF1BE0C9062B +:109FE00002D590F89B1109B1002010BD90F89A118C +:109FF00079B1B0F89C1120F8401FB0F85E11418093 +:10A00000B0F860118180B0F86211C180002180F841 +:10A010005A1100F0C8FF012010BD70B57D4C2069B9 +:10A0200090F8CB10FE2978D1A178002975D190F84D +:10A03000672001231946583002F01AFF00286CD11E +:10A04000206990F8701149B10021A0F8821090F8B1 +:10A05000711180F8CC10002102205BE090F865209F +:10A0600001230421583002F003FF0546FFF790FF5B +:10A07000002852D1284600F0A1FF00284DD12069C8 +:10A080000123002190F86420583002F0F1FE78B1ED +:10A0900020690123042190F86520583002F0E8FE81 +:10A0A00030B9206990F87C0010B10021122031E015 +:10A0B000206990F864200A2A0DD0002D2DD10123AB +:10A0C0000021583002F0D4FE78B1206990F88C114C +:10A0D00004290AD105E010F8CA1F81700021072069 +:10A0E00018E090F89000800718D0FFF7C3FE002812 +:10A0F00013D120690123002190F86420583002F028 +:10A10000B7FE002809D0206990F88401002804D007 +:10A110000021FF20BDE8704095E609E000210C20F9 +:10A12000FFF791FE206910F8901F41F001010170C6 +:10A1300062E43EB505466846FDF73BFC00B9FFDF2B +:10A14000222100980BF0E5FA0321009803F040FC6F +:10A150000098017821F010010170294603F05DFCA0 +:10A160002C4C0D2D40D00BDCA5F102050B2D19D286 +:10A17000DFE805F01F186519191F18701819240059 +:10A18000152D7BD008DC112D25D0122D0BD0132DD1 +:10A1900009D0142D06D12BE0162D46D0172D6BD0EB +:10A1A000FF2D6AD0FFDFFDF717FC002800D1FFDF8D +:10A1B0003EBD2169009891F8CC1017E0E268009844 +:10A1C0001178017191884171090A81715188C171B9 +:10A1D000090A0172E7E70321009803F028FD062130 +:10A1E000009803F028FDDEE7009806210171DAE708 +:10A1F0002069B0F84410009803F0AAFC2069B0F878 +:10A200004610009803F0A8FC2069B0F840100098B0 +:10A2100002E00000FC00002003F0A2FC2069B0F87E +:10A220004210009803F0A0FCBDE70098D4F810108D +:10A2300091F8A621027191F8A7114171B3E7216944 +:10A240000098F03103F068FC21690098C43103F0F4 +:10A250006DFCA8E7F949D1E90001CDE901012069C8 +:10A2600001A990F8960000F025008DF804000098F0 +:10A2700003F097FC97E701E019E023E02069B0F8CC +:10A280004010009803F06CFC2069B0F84210009870 +:10A2900003F06AFC2069B0F84410009803F058FC01 +:10A2A0002069B0F84610009803F056FC7BE721695E +:10A2B00091F8A40100280098BAD111F8542F027126 +:10A2C0004978BAE7206990F88721D0F8881100987A +:10A2D00003F0B1FB67E7DA4810B5006990F86A103F +:10A2E00041B990F8652001230621583002F0C0FDE5 +:10A2F000002800D0012010BD70B5D14D286990F81C +:10A30000681039B1012905D0022906D0032904D0EB +:10A31000FFDF0AE4B0F8D41037E090F8671008299E +:10A3200036D0B0F87E10B0F8802000248B1C9A4202 +:10A3300006D3511A891E0C04240C01D0641EA4B249 +:10A3400090F87C1039B190F864200123092158302D +:10A3500002F08EFD40B3FFF7BEFF78B129690020FF +:10A36000B1F87820B1F876108B1C9A4203D3501ABA +:10A37000801E00D0401EA04200D284B20CB1641EE8 +:10A38000A4B22869B0F8D4102144A0F8D01043E555 +:10A39000B0F87E100329BDD330F8581F028D114448 +:10A3A000491CA0F8781037E50024EAE770B50C46A0 +:10A3B00005464FF4007120460BF0CDF925802BE5C2 +:10A3C000F8F7EBBB2DE9F0410D4607460721F8F7FA +:10A3D000DBFA041E3CD094F8AC010026A8B16E70E4 +:10A3E000092028700BE0268484F8AC61D4F8AE0113 +:10A3F0006860D4F8B201A860B4F8B601A88194F8F6 +:10A40000AC010028EFD12E71BAE094F8B80190B3F6 +:10A4100094F8B8010D2813D00E2801D0FFDFAFE06B +:10A420002088F8F7E3FB0746F8F78FF878B96E70E5 +:10A430000E20287094F8BA0128712088E88014E072 +:10A440002088F8F7D3FB0746F8F77FF810B1002013 +:10A45000BDE8F0816E700D20287094F8BA01287163 +:10A460002088E88094F8BE01287284F8B8613846E4 +:10A47000F8F765F884E0FFE794F8F00130B16E700A +:10A480001020287084F8F061AF8079E094F8C00162 +:10A4900090B16E700A2028702088A880D4F8C4116A +:10A4A000C5F80610D4F8C811C5F80A10B4F8CC01E4 +:10A4B000E88184F8C06163E094F8CE0140B16E7029 +:10A4C0001A202870B4F8D001A88084F8CE6157E033 +:10A4D00094F8EA0170B16E701B20287005E000BF8F +:10A4E00084F8EA61D4F8EC01686094F8EA01002885 +:10A4F000F6D145E094F8D20190B16E701520287025 +:10A5000004F5EA7707E000BF84F8D2610A223946F1 +:10A51000281D0BF0C4F894F8D2010028F4D12FE0E4 +:10A5200094F8DE0158B16E701D20287084F8DE6149 +:10A530000A2204F5F071281D0BF0B1F820E094F820 +:10A54000F20138B11E20287084F8F261D4F8F401C9 +:10A55000686015E094F8F80100283FF479AF6E7058 +:10A560001620287008E000BF84F8F861D4F8FA01DA +:10A570006860B4F8FE01288194F8F8010028F3D14E +:10A58000012065E72E480021C1610162084670473D +:10A5900030B52B4D0C46E860FFF7F4FF00B1FFDF4C +:10A5A0002C7130BD002180F8641080F8651080F8AF +:10A5B000681090F8DE1009B1022100E00321FEF7D7 +:10A5C0001BBC2DE9F0411E4C0546206909B1002154 +:10A5D00004E0B0F8E610B0F8D6201144A0F8E61078 +:10A5E00090F8701139B990F8672001231946583056 +:10A5F00002F03EFC30B1206930F8821FB0F85420E0 +:10A6000011440180206990F8883033B1B0F884108B +:10A61000B0F8D6201144A0F8841090F98C70002F67 +:10A6200006DDB0F88A10B0F8D6201144A0F88A10E0 +:10A6300001213D2635B180F8746017E0045D020009 +:10A64000FC0000202278022A0AD0012A11D0A27828 +:10A650002AB380F8731012F0140F0DD01E2113E0EE +:10A6600090F8CC20062A3CD016223AE080F87310ED +:10A6700044E090F8722134E0110702D580F874604C +:10A680003CE0910603D5232180F8741036E0900752 +:10A6900000D1FFDF21692A2081F874002AE02BB164 +:10A6A000B0F88420B0F886309A4210D2002F05DD31 +:10A6B000B0F88A20B0F886309A4208D2B0F88230DA +:10A6C000B0F88020934204D390F870310BB122226D +:10A6D00007E090F868303BB1B0F87E30934209D380 +:10A6E000082280F87420C1E7B0F87E20062A01D342 +:10A6F0003E22F6E7206990F8731019B12069BDE891 +:10A70000F0414FE7BDE8F0410021FEF775BB2DE9B0 +:10A71000F047F94C81460D4620690088F8F778FA31 +:10A72000060000D1FFDFA0782843A070A0794FF089 +:10A7300000058006206904D5A0F87E5080F8E4501A +:10A7400003E030F87E1F491C0180FFF7C4FD01279C +:10A7500040B3E088000506D5206990F86A1011B171 +:10A76000A0F876501EE02069B0F87610491C89B236 +:10A77000A0F87610B0F878208A4201D3531A00E08E +:10A780000023B4F808C00CF1050C634501D880F82B +:10A790007C70914206D3A0F8765080F8F071207951 +:10A7A000E8F7BAFBA0794FF0020810F0600F0ED066 +:10A7B000206990F8681011B1032908D102E080F8EF +:10A7C000687001E080F868800121FEF715FB2069C0 +:10A7D00090F86810012904D1E188C90501D580F8F5 +:10A7E0006880B9F1000F70D1E188890502D5A0F821 +:10A7F000F85003E030F8F81F491C018000F09AFB84 +:10A80000FEF7DFFCFFF709FC00F062FF002820697B +:10A8100002D0A0F8D85003E030F8D81F491C0180BE +:10A8200000F059FF38B1216991F8E400022807D8F7 +:10A83000401C81F8E400206990F8E400022804D963 +:10A84000206920F8D85F4580057320690123002125 +:10A8500090F86520583002F00BFB20B9206990F881 +:10A8600065000C2859D120690123002190F864204B +:10A87000583002F0FDFA48B320690123002190F816 +:10A880006720583002F0F4FA00B3206990F868109D +:10A89000022942D190F8E400C0B93046F7F725FC10 +:10A8A000A0B1216991F8CB00FE2836D1B1F8D200D1 +:10A8B000012832D981F8DD70B1F88000B1F87E202E +:10A8C000831E9A4203DB012004E032E025E0801A77 +:10A8D000401E80B2B1F8D82023899A4201D30122C8 +:10A8E00002E09A1A521C92B2904200D910460128F6 +:10A8F00001D181F8DD5091F8682192B1B1F8DA20E8 +:10A90000B1F86A118A4201D3012102E0891A491C77 +:10A9100089B2884205D9084603E02169012081F8FF +:10A92000DD502169B1F858201044A1F8D400FFF798 +:10A93000E3FCE088C0F340214846FFF742FE20696F +:10A9400080F8DE50BDE8F047FDF768B86A49024676 +:10A950008878CB78184312D10846006942B18979CA +:10A96000090703D590F86700082808D00120704730 +:10A97000B0F84810028E914201D8FEF787B9002046 +:10A98000704770B55C4C05460E46E0882843E08071 +:10A99000A80703D5E80700D0FFDF6661EA074FF09C +:10A9A00000014FF001001AD0A661F278062A02D009 +:10A9B0000B2A14D10AE0226992F86530172B0ED1C8 +:10A9C0000023E2E9283302F8370C08E0226992F804 +:10A9D0006530112B03D182F8691082F88E00AA0726 +:10A9E00018D56269D278052A02D00B2A12D10AE062 +:10A9F000216991F86520152A0CD10022E1E92A226B +:10AA000001F83E0C06E0206990F86520102A01D17B +:10AA100080F86A10280601D50820E07079E42DE955 +:10AA2000F84F354C00254FF00108E580A570E57022 +:10AA30004146257061F3070220619246814680F805 +:10AA4000DE800088F8F7E4F8070000D1FFDF206916 +:10AA50000088FCF7ABFF20690088FCF7CDFF206978 +:10AA6000B0F8D21071B190F8CB10FE290FD190F848 +:10AA7000701189B190F8672001231946583002F00F +:10AA8000F7F978B1206990F8CB00FE2804D020694E +:10AA900090F8CB00FFF74DFB206990F8DF1089B1EB +:10AAA000258118E02069A0F8825090F8711180F893 +:10AAB000CC1000210220FFF7C6F9206980F8DD5094 +:10AAC0000220E7E790F8AC1119B9018C8288914215 +:10AAD00000D881882181B0F8D610491E8EB2B0F816 +:10AAE000D8103144A0F8D81090F8DC1031B1A0F89B +:10AAF000DA5080F8DC5006E0FC000020B0F8DA10F4 +:10AB00003144A0F8DA1030F87E1F31440180FFF79D +:10AB1000E2FB20B1206930F8761F314401802069C2 +:10AB2000B0F8D210012902D8491CA0F8D2100EB1F9 +:10AB300080F8E45090F8DD10A1B1B0F8D800218978 +:10AB400088420FD23846F7F7D0FA58B1206990F80A +:10AB5000681139B1B0F8DA10B0F86A01814201D356 +:10AB600000F0BCFD206980F8DD5090F865100B29DD +:10AB700001D00C2916D1B0F85820B0F88E31D21A75 +:10AB800012B2002A0EDBD0F89011816090F8941177 +:10AB90000173022101F051FD206980F8655080F8B1 +:10ABA000988026E0242910D1B0F85810B0F88E21F2 +:10ABB000891A09B2002908DB90F8A401FFF72DF9E2 +:10ABC000206900F8655F057613E090F86410242989 +:10ABD00001D025290DD1B0F85810B0F88E01081A0F +:10ABE00000B2002805DB0120FFF717F9206980F883 +:10ABF000645020690146B0F8D620583001F0EFFECD +:10AC0000206990F8681109B1A0F8DA50FD48009069 +:10AC1000FD4BFE4A4946504600F0BAFC216A11B18C +:10AC20006078FCF7BEF920690123052190F86520C2 +:10AC3000583002F01DF9002803D0BDE8F84F00F0AD +:10AC400042BABDE8F88F00F029BDF149C8617047EC +:10AC5000EF48C069002800D001207047EC4A5070CE +:10AC60001162704710B50446B0F894214388B0F8DB +:10AC70009611B0F898019A4205D1A388994202D161 +:10AC8000E38898420FD02388A4F8B031A4F8B22109 +:10AC9000A4F8B411A4F8B601012084F8AC01DC4892 +:10ACA0000079E8F739F90121204601F0C6FC0020BF +:10ACB00004F8650F0320E07010BD401A00B247F69B +:10ACC000FE71884201DC002801DC01207047002071 +:10ACD000704710B5012808D0022808D0042808D0F1 +:10ACE000082806D0FFDF204610BD0124FBE7022420 +:10ACF000F9E70324F7E7C6480021006920F88A1F16 +:10AD00008178491C81707047C14800B5016911F80C +:10AD10008C0F401E40B20870002800DAFFDF00BD33 +:10AD2000BB482721006980F86410002180F8841155 +:10AD3000704710B5B64C206990F88C11042916D1D3 +:10AD400090F8642001230021583002F091F800B9F6 +:10AD5000FFDF206990F89010890703D4062180F85E +:10AD6000641004E0002180F8881080F88C112069BC +:10AD700090F86600800707D5FFF7C6FF206910F836 +:10AD8000661F21F00201017010BDA14910B50969CB +:10AD900091F864200A2A09D191F8CA20824205D18B +:10ADA000002081F8640081F8880010BD91F86620C9 +:10ADB000130706D522F0080081F86600BDE81040B0 +:10ADC000A2E7FF2801D0FFDF10BDBDE81040A7E7D4 +:10ADD00010B58F4C05212069FEF70EF8206990F818 +:10ADE0004E10012903D0BDE81040FEF784BB0221BC +:10ADF00080F84E1010BD10B5854C206910F8961FD4 +:10AE000041F004010170A06902F013FF162806D179 +:10AE1000206990F86400202802D0262805D010BDB3 +:10AE2000A06902F00AFFFEF745FB2169002081F8C6 +:10AE3000640081F8880010BD70B5754C01230A21AB +:10AE4000206990F86420583002F012F810B3A0691D +:10AE500002F096FEA8B12569A06902F08DFE288750 +:10AE60002569A06902F084FE68872569A06902F05F +:10AE700085FEA8872569A06902F07CFEE887FEF7B9 +:10AE8000DBFC2169002081F8880081F86400BDE8BE +:10AE900070409DE7A07840F00100A070BEE510B5BD +:10AEA0005B4C01230021206990F86520583001F0A7 +:10AEB000DFFF30B1FFF71FFF2169102081F8650027 +:10AEC00010BD20690123052190F86520583001F05C +:10AED000CFFF08B1082000E00120A07010BD70B5C0 +:10AEE0004B4C01230021206990F86520583001F077 +:10AEF000BFFF012588B1A06902F0E3FD2169A1F837 +:10AF00008E01B1F85810FFF7D8FE40B12069282112 +:10AF100080F8741080F8735080E5A5707EE5216993 +:10AF2000A06901F5C87102F0C7FD21690B2081F805 +:10AF3000650073E510B5FEF71CFFFEF71AFE344CF2 +:10AF4000A079400708D5A07830B9206990F867004B +:10AF5000072801D101202070FEF7D0F9A079C006A2 +:10AF600009D5A07838B9206990F865100B2902D16D +:10AF70000C2180F86510E07800070ED520690123C8 +:10AF8000052190F86520583001F072FF30B108209B +:10AF9000A0702169002081F8B80110BDBDE8104003 +:10AFA000002000F09FBB10B5FEF746FCFFF710FF36 +:10AFB0000121BDE810401520FEF745BF10B5144C27 +:10AFC000216991F8652088B3102A06D0142A07D089 +:10AFD000152A22D01B2A35D122E001210B2021E0A5 +:10AFE000FAF7EAFE0C281FD320690821F030FAF79F +:10AFF000E7FE28B120690421C430FAF7E1FE00B968 +:10B00000FFDF07E00FA701004DA9010083A90100A0 +:10B01000FC0000200121042004E000F018F803E007 +:10B0200001210620FEF70FFF012010BDFFE7212AB6 +:10B0300008D191F87D0038B991F8A40110B191F8C8 +:10B04000A50108B10020F0E701211720EAE770B55B +:10B05000174C0025206990F8731101290AD00229A4 +:10B0600025D190F88E10A9B1062180F8CC100121CD +:10B07000022017E090F8B811002918D100F1B003B0 +:10B0800000F1E801002200F5BA7001F06BFE012129 +:10B09000052007E090F89600400701D5112000E058 +:10B0A0000D200121FEF7CFFE206980F87351B5E431 +:10B0B000FC00002030B5FA4C05462078002818BF67 +:10B0C000FFDF257230BDF6490120C87170472DE9B8 +:10B0D000F14FF44E30464068044600F1580990F8AC +:10B0E000551001F097FF94F85510658E80B208292D +:10B0F0006CD001F06DFF854238BF284600F0FF0894 +:10B10000DFF89CA3E848CAF824007768384697F827 +:10B110006AB07D8E97F8551001F07CFF97F85510B6 +:10B1200080B2082956D001F053FF854238BF284627 +:10B13000BBF1000F1CBF001D80B2C0B297F85510C4 +:10B14000FBF7BFFB99F81200002847D009F158011E +:10B15000D54891E80E1000F5027585E80E10D9F873 +:10B160006810C0F82112D9F86C10C0F8251200F54B +:10B170008170FBF7A6FE307800280CBF012000206C +:10B1800080F00101C9480176D9E91412C0E904121E +:10B19000A0F58372DAF82410FBF72DFA94F8550025 +:10B1A000012808BF00220CD0022808BF012208D0C5 +:10B1B000042808BF032204D008281ABFFFDF00229A +:10B1C000022241460120FBF731FA0DE0042101F093 +:10B1D000FFFE90E7042101F0FBFEA6E7DAF8240069 +:10B1E000FBF76FFEFBF74EFA009850B994F8550044 +:10B1F00094F8561010F00C0F08BF00219620FBF7B2 +:10B2000081FE94F8542001210020FBF767FF94F899 +:10B210002C00012808BFFBF731FF02208AF800004C +:10B22000FCF7D9FA002818BFFFDFBDE8F88F2DE939 +:10B23000F04FDFF870A28BB050469AF800204168BA +:10B240001438049091F85D0001F158050C464FF058 +:10B2500008080127AAF13406A0B3012800F00681EE +:10B26000022800F00781032818BFFFDF00F01081DB +:10B27000306A0423017821F008010170AA7908EAF4 +:10B28000C202114321F004010170EA7903EA82024B +:10B29000114321F01001017095F80590F06AF6F75E +:10B2A00034FF8046FCF7CCFBB9F1020F00F00081BF +:10B2B000B9F1010F00F00081B9F1030F00F0008136 +:10B2C00000F003B9FFE72B7B4FF002094FF0000BB2 +:10B2D000242B1CBF95F80DC0BCF1240F07D01F2BE9 +:10B2E00018BF202B2AD0BCF1220F4DD077E091F867 +:10B2F000540092B191F89011002974D0082818BF19 +:10B30000042869D0082918BF042965D0012818BF6E +:10B31000012953D04FF0020065E091F8F2100029A6 +:10B3200061D0082818BF042856D0082918BF04295E +:10B3300052D0012818BF012940D0EBE7BCF1220F01 +:10B3400022D0002A4BD091F8540091F8A61111F0A8 +:10B35000040F18BF41460CD0082818BF04283BD062 +:10B36000082918BF042937D0012818BF012925D082 +:10B37000D0E711F0010F18BF3946EDD111F0020FDF +:10B3800018BF4946E8D12EE04AB391F8540091F82D +:10B39000A62191F8511002EA010111F0040F18BF23 +:10B3A00041460ED0082818BF042815D0082918BF18 +:10B3B000042911D0012818BF0129ABD14FF0010099 +:10B3C00011E011F0010F18BF3946EBD111F0020F57 +:10B3D00018BF4946E6D106E04FF0080003E091F8B7 +:10B3E00054000428F8D001460290204601F01DFECA +:10B3F00080B2029901F0ECFD218E814238BF0846EF +:10B40000ADF80C00A4F848000498FCF7F8FA60B115 +:10B41000B289316A42F48062B28172694FF480600D +:10B42000904703206871EF7022E709AA03A9F06A28 +:10B43000F6F7A6FD306210B195F8351021B10498E9 +:10B44000FCF7B1FA6F7113E79DF8241031B9A0F839 +:10B4500000B080F802B0012102F0BAFABDF80C1079 +:10B46000306A02F0ECFB85F8059001E70498FCF7E0 +:10B470009AFAFDE6B4F84800ADF8080009AA02A956 +:10B48000F06AF6F77DFD3062002808BFFFDFEFE6C7 +:10B490000498FCF7B4FA002808BFFFDFE8E60000D4 +:10B4A0002001002054010020E00C0020E80E0020C4 +:10B4B00030EA080009D106E030EA080005D102E0D0 +:10B4C000B8F1000F01D0012100E00021306A0278BC +:10B4D00042EA01110170697C00291CBF69790129C8 +:10B4E0003DD005F15801FD4891E80E1000F50278B5 +:10B4F00088E80E10A96EC0F82112E96EC0F8251276 +:10B5000000F58170FBF7DDFC9AF8000000280CBF05 +:10B5100001200020F2490876D5E91202C1E90402AF +:10B52000A1F5837101F58370326AFBF764F894F832 +:10B530005400012808BF00220CD0022808BF0122B5 +:10B5400008D0042808BF032204D008281ABFFFDF50 +:10B5500000220222FB210020FBF768F803E0FBF742 +:10B56000B0FCFBF78FF8012194F855200846FBF753 +:10B57000B5FD3771306A018831828078B0743770D8 +:10B58000FCF732F9002818BFFFDF0BB0BDE8F08FE1 +:10B590002DE9F047D34C8146DDF8208020781E4607 +:10B5A00017460D4628B9002F1CBF002EB8F1000F1A +:10B5B00000D1FFDFC4F81C80C4E90D95C4E905760D +:10B5C0004FF00000E071A071E070A0702071607118 +:10B5D000C54EA081E081307805F158072888F7F73B +:10B5E00017FBE0622888F7F701FB2063FBF78DF972 +:10B5F00095F95700FBF723FA05F11200FBF744FC1D +:10B6000005F10E00FBF721FA307800280CBF03206B +:10B610000120FBF753FCB87EFBF71FFAFBF748FC51 +:10B620003078002804BFFF2095F8544019D0BF7C23 +:10B630006C8E95F85510284601F0ECFC95F85510E5 +:10B6400080B208291FD001F0C3FC014620468C427D +:10B6500028BF0846002F1CBF001D80B2C0B295F85D +:10B6600055402146FBF72DF93078214680B1012065 +:10B67000FBF751FA7068D0F8E000FBF725FCBDE855 +:10B68000F047012023E5042101F0A2FC0146DDE79B +:10B690000020FBF740FABDE8F047C8E5924800B546 +:10B6A00001783438007819B1022818BFFFDF00BDD7 +:10B6B000012818BFFFDF00BD8A4810B500780228B6 +:10B6C00018BFFFDFBDE8104000F034BA00F032BA16 +:10B6D0008448007970478348C078704781490120C9 +:10B6E000487170472DE9F04706007F487D4D40685E +:10B6F00000F15804686A90F8019018BF012E03D138 +:10B70000296B09F045FC6870687800274FF0010844 +:10B71000A0B101283CD0022860D003281CBFFFDF65 +:10B72000BDE8F087012E08BFBDE8F087286BF6F76B +:10B73000E1FE287ABDE8F047E7F7EEBB012E14D012 +:10B74000A86A002808BFFFDF6889C21CD5E9091074 +:10B7500009F060FFA86A686201224946286BF6F783 +:10B7600045FD022E08BFBDE8F087D4E91401401C56 +:10B7700041F10001C4E91401E079012801D1E77128 +:10B7800001E084F80780287ABDE8F047E7F7C4BBFA +:10B79000012E14D0A86A002808BFFFDF6889C21CE8 +:10B7A000D5E9091009F036FFA86A68620022494607 +:10B7B000286BF6F71BFD022E08BFBDE8F087D4E921 +:10B7C0001410491C40F10000C4E91410E07901286C +:10B7D0000CBFE77184F80780BDE8F087012E06D022 +:10B7E000286BF6F787FE022E08BFBDE8F087D4E984 +:10B7F0001410491C40F10000C4E91410E07901283C +:10B80000BFD1BCE770B5384E3046A6F1340440686D +:10B8100000F158052078012818BFFFDFA87868B12B +:10B820000021A970A289042042F00402A281626969 +:10B830009047307800281CBF01202871216A03221C +:10B84000087832EA000009D1A28912F4806F05D08D +:10B8500042F00202A2816269022090470121002089 +:10B8600000F087F918B1BDE8704000F063B9BDE899 +:10B87000704000202BE42DE9F14F1B4E002730468D +:10B88000A6F134054068317800F1580A2878B846A6 +:10B89000022818BFFFDFE88940F40070E881716872 +:10B8A0003078FF2091F85410FBF70BF8009800282F +:10B8B0009AF8120000F00681FAF709FFFAF7F7FE8E +:10B8C0004FF00109E0B99AF81200C8B1686A4178EE +:10B8D000B1B10078C0F3C00008E00000E00C002027 +:10B8E000E80E002020010020540100209AF80710E3 +:10B8F000884205D185F80290BDE8F84F00F01AB9EA +:10B90000686A41786981002908BFAF6203D0286B5B +:10B91000F6F726FCA862E88940F02000E881EF7085 +:10B920003078706800F15804834690F82C000128A4 +:10B930001AD1FBF799FB2146584601F054FA98B109 +:10B940003078002870680CBF00F58A7000F5F5703B +:10B95000BBF800104180217A0171617A417180F851 +:10B960000090287AE7F7D8FA686A9AF80610007803 +:10B97000C0F3800088423BD03078706800F15804F2 +:10B9800090F85D0000282FD002284BD067713078E6 +:10B9900000281CBF2079002809D02771AA893946C0 +:10B9A00042F01002AA816A694FF010009047E078D7 +:10B9B000A0B1E770FCF732F8002808BFFFDF0820CD +:10B9C000AA89002142F00802AA816A699047D4E955 +:10B9D0001202411C42F10000C4E91210A0790128B2 +:10B9E0000CBFA77184F80690E88940F48070E88164 +:10B9F000696A9AF807300878C0F3C0029A424ED1BB +:10BA00003278726800F0030002F15804012818BF70 +:10BA100002282DD003281CBFA87940F0040012D0C2 +:10BA2000A8713CE0E86AF6F7D7FA002808BFFFDF04 +:10BA3000D4E91202411C42F10000C4E91210287A34 +:10BA4000E7F76AFAA2E784F80290EA89484642F4E6 +:10BA50000062EA81AA8942F00102AA816A699047DC +:10BA6000E079012801D1E77119E084F8079016E028 +:10BA7000487818B3E98941F40061E981A96A71B194 +:10BA8000FB2884BFA87940F01000C9D8E8790028C5 +:10BA900008BFC84603D080206A6900219047012072 +:10BAA000009900F066F8B0B1B8F1000F1CBF00209B +:10BAB000FFF718FEBDE8F84F00F03CB8E079012828 +:10BAC000D3D1D0E7002818BFFAF739FEE88940F053 +:10BAD0004000E881E3E7B8F1000F1CBF0120FFF749 +:10BAE00001FEFFF7A4FBB8F1000F08BFBDE8F88F17 +:10BAF0000220BDE8F84FF5E570B50D4606463D4815 +:10BB00003C4900784C6850B1FAF773FE034694F84C +:10BB1000542029463046BDE87040FDF767BAFAF771 +:10BB200068FE034694F8542029463046BDE870402C +:10BB300006F0D9B82F4910B54C68FBF745FAFBF76A +:10BB400024FAFBF727F9FBF7A5F9FAF79BFD94F820 +:10BB50002C00012808BFFBF787FA274C00216269F7 +:10BB6000E0899047E269A179A07890470020207091 +:10BB700010BD70B5204C0546002908BF012D06D127 +:10BB8000E07800F10100C0B2E07001282ED8A16970 +:10BB900028468847002829D06179184839B1012DF5 +:10BBA00001BF41780029017811F0100F1ED0A17952 +:10BBB000E1B910490978002908BF012D01D091B1E0 +:10BBC0008DB90F49097811F0100F04BF007810F0FB +:10BBD000100F0BD0A08948B9A06A20B9608910B1B4 +:10BBE00011F0100F02D04FF0000070BD4FF00100B7 +:10BBF00070BD00005401002020010020E00C002056 +:10BC000030010020FE498A78824286BF084490F8BD +:10BC100043010020704710B540F2D311F84809F0F5 +:10BC200078FDFF220821F74809F06BFDF648002156 +:10BC3000417081704FF46171818010BD2DE9F04138 +:10BC40000E46054600F0ADFBED4C102816D004EB77 +:10BC5000C00191F85A0110F0010F1CBF0120BDE88E +:10BC6000F081607808283CBF012081F85A011CD27D +:10BC70006078401C60700120BDE8F0816078082881 +:10BC800013D222780127501C207004EBC2083068C0 +:10BC9000C8F85401B088A8F85801102A28BFFFDF5F +:10BCA00088F8535188F85A71E2E70020BDE8F08126 +:10BCB000D54988707047D4488078704770B4D048B0 +:10BCC00000250178491E4BB2002B46DB00EBC30177 +:10BCD00091F85A1111F0010F3BD04278D9B2521E9F +:10BCE000427000EBC10282F85A5190F802C0002263 +:10BCF000BCF1000F0BD9841894F803618E4202D175 +:10BD0000102A26D103E0521CD2B29445F3D802780F +:10BD1000521ED2B202708A421BD000EBC20200EB6C +:10BD2000C10CD2F85341CCF85341D2F85721CCF88A +:10BD30005721847890F800C00022002C09D9861879 +:10BD400096F8036166450CD1102A1CBF024482F8A4 +:10BD50000311591E4BB2002BB8DAAB48857070BC8A +:10BD60007047521CD2B29442E9D8F2E7A4498A78CB +:10BD7000824286BF01EB0010C01C002070472DE9F5 +:10BD8000F04101261F4690463446002500F009FB8D +:10BD900010282AD09A494FF0000C01EBC00292F80B +:10BDA0005A2102F001058A78002A1ED901EB0C0302 +:10BDB00093F8033183421FD1BCF1100F15D0002F2F +:10BDC00018BF87F800C0887860450ED901EB0C10C9 +:10BDD00010F1030F09D001EB0C0090F84B4190F8E3 +:10BDE0003B0101280CBF0126002648EA050046EA6F +:10BDF00004010840BDE8F0810CF1010303F0FF0CE1 +:10BE00006245D3D8F1E72DE9F05F1F4690460E4614 +:10BE1000814600F0C6FA7A4D044610283CD001460F +:10BE2000AB780020002B0ED92A1892F803218A4201 +:10BE300005D110281CBF1220BDE8F09F03E0401C74 +:10BE4000C0B28342F0D8082B3FD2102C27D0AE7856 +:10BE50001022701CA87005EB061909F10300414679 +:10BE600000F066FF09F183001022394600F060FF00 +:10BE70001021384600F039FF3544102185F8430180 +:10BE8000404600F032FF85F84B0185F80341002061 +:10BE900085F83B01BDE8F09FAB78082B15D22C78D4 +:10BEA000CA46601C287005EBC4093068C9F8540103 +:10BEB000B0884FF0000BA9F85801102C28BFFFDF05 +:10BEC00089F853A189F85AB1C1E70720BDE8F09F6E +:10BED00070B44B488178491E4BB2002BBCBF70BC7C +:10BEE000704700BF817803F0FF0C491ECAB2827010 +:10BEF00050FA83F191F8031194453ED000EB0215FE +:10BF000000EB0C14D5F80360C4F80360D5F80760A3 +:10BF1000C4F80760D5F80B60C4F80B60D5F80F6063 +:10BF2000C4F80F60D5F88360C4F88360D5F88760E3 +:10BF3000C4F88760D5F88B60C4F88B60D5F88F5053 +:10BF4000C4F88F50851800EB0C0402EB420295F800 +:10BF500003610CEB4C0C00EB420284F8036100EB34 +:10BF60004C0CD2F80B61CCF80B61B2F80F21ACF895 +:10BF70000F2195F83B2184F83B2100EBC10292F898 +:10BF80005A2112F0010F33D190F802C00022BCF107 +:10BF9000000F0BD9841894F803518D4202D1102A56 +:10BFA00026D103E0521CD2B29445F3D80278521E37 +:10BFB000D2B202708A421BD000EBC20200EBC10C6D +:10BFC000D2F85341CCF85341D2F85721CCF857213D +:10BFD000847890F800C00022002C09D9851895F8C3 +:10BFE0000351654512D1102A1CBF024482F8031187 +:10BFF000591E4BB2002BBFF675AF70BC70470000E6 +:10C00000100F0020680100205C010020521CD2B2F9 +:10C010009442E3D8ECE7FE4948707047FC4840780A +:10C02000704738B14AF2B811884203D8F84988807D +:10C030000120704700207047F5488088704710B590 +:10C0400000F0AFF9102814D0F24A0146002092F80F +:10C0500002C0BCF1000F0CD9131893F803318B42C6 +:10C0600003D1102818BF10BD03E0401CC0B28445A6 +:10C07000F2D8082010BDE7498A78824286BF01EBDA +:10C080000010833000207047E24B93F802C08445D3 +:10C090009CBF00207047184490F8030103EBC000D8 +:10C0A00090F853310B70D0F854111160B0F858016A +:10C0B000908001207047D74A114491F80321D44958 +:10C0C0000A700268C1F8062080884881704770B500 +:10C0D00016460C460546FAF78DFFFAF7E8F9CC4804 +:10C0E000407868B1CB48817851B12A19002E0CBF35 +:10C0F0008330C01CFAF7B5F9FAF7FCF9012070BDDE +:10C10000002070BD10B5FAF723FA002804BFFF2005 +:10C1100010BDBDE81040FAF741BAFAF719BABD49A7 +:10C120008A7882429CBF00207047084490F803013F +:10C1300001EBC00090F85A0100F0010070472DE9B2 +:10C14000F047B44E00273D46307800288CBFDFF81A +:10C15000C882BDE8F0870024B078002808D93119DA +:10C1600091F80321AA4204D0611CCCB2A042F6D8B7 +:10C170001024A04286BF06EB0410C01C002006EB72 +:10C18000C50999F85A1111F0010F16D050B1102CB1 +:10C1900004D0311991F83B11012903D0102100F08E +:10C1A000A4FD50B108F8074038467B1C99F853218C +:10C1B00009F5AA71DFB2FAF71AFC681CC5B230782B +:10C1C000A842C8D8BDE8F0872DE9F041914C00267F +:10C1D0003546A07800288CBF8F4FBDE8F0816119EB +:10C1E000C0B291F80381A84286BF04EB0510C01CC1 +:10C1F000002091F83B11012903D0102100F075FDBA +:10C2000058B104EBC800BD5590F8532100F5AA7150 +:10C210003046731CDEB2FAF7EAFB681CC5B2A078A0 +:10C22000A842DCD8BDE8F08101447A4810B500EBA3 +:10C2300002100A4601218330FAF713F9BDE81040D5 +:10C24000FAF758B90A46724910B5497841B1714BAD +:10C25000997829B10244D81CFAF703F9012010BDDE +:10C26000002010BD6B4A01EB410102EB4101026865 +:10C27000C1F80B218088A1F80F0170472DE9F0412A +:10C28000644D07460024A878002898BFBDE8F081D7 +:10C29000C0B2A04217D905EB041010F1830612D0EA +:10C2A0001021304600F021FD68B904EB440005EB95 +:10C2B000400808F20B113A463046FBF73EFCB8F84E +:10C2C0000F01A8F80F01601CC4B2A878A042DFD803 +:10C2D000BDE8F08101461022504800F029BD4F48CA +:10C2E00070474C498A78824203D90A1892F8432150 +:10C2F0000AB10020704700EB400001EB400000F263 +:10C300000B10704743498A78824206D9084490F856 +:10C310003B01002804BF01207047002070472DE931 +:10C32000F0410E46074615460621304600F0DDFC7A +:10C33000384C98B1A17871B104F59D7011F0010FDE +:10C3400018BF00F8015FA178490804D0457000F8D3 +:10C35000025F491EFAD10120BDE8F081384631461E +:10C3600000F01FF8102819D0A3780021002B15D950 +:10C37000621892F8032182420BD1102918BF0829B4 +:10C380000CD004EB010080F83B514FF00100BDE8F8 +:10C39000F08101F10101C9B28B42E9D80020BDE86A +:10C3A000F0812DE9F0411B4D0646002428780F4608 +:10C3B000002811D905EBC40090F85311B14206D101 +:10C3C0000622394600F5AA7009F0F8F838B1601C69 +:10C3D000C4B22878A042EDD81020BDE8F0812046F4 +:10C3E000BDE8F0810B4910B44A7801EBC003521E3E +:10C3F0004A70002283F85A2191F802C0BCF1000F64 +:10C4000016D98B1893F8034184420DD1102A07E006 +:10C410005C010020100F002068010020E3100020C4 +:10C420001CBF10BC704703E0521CD2B29445E8D840 +:10C430000A78521ED2B20A7082421BD001EBC202AD +:10C4400001EBC003D2F853C1C3F853C1D2F857214E +:10C45000C3F857218C7891F800C00022002C09D92C +:10C460008B1893F80331634506D1102A1CBF114481 +:10C4700081F8030110BC7047521CD2B29442EFD82D +:10C4800010BC704770B449490D188A78521ED3B257 +:10C490008B7095F8032198423DD001EB001401EB1D +:10C4A000031C00EB4000DCF80360C4F80360DCF818 +:10C4B0000760C4F80760DCF80B60C4F80B60DCF8B8 +:10C4C0000F60C4F80F60DCF88360C4F88360DCF8A8 +:10C4D0008760C4F88760DCF88B60C4F88B60DCF898 +:10C4E0008FC0C4F88FC001EB030C03EB43039CF82F +:10C4F000034101EB430385F8034101EB4000D3F80E +:10C500000B41C0F80B41B3F80F31A0F80F319CF884 +:10C510003B0185F83B0101EBC20090F85A0110F095 +:10C52000010F1CBF70BC704700208C78002C0DD907 +:10C530000B1893F803C1944504D110281CBF70BC9C +:10C54000704703E0401CC0B28442F1D80878401E16 +:10C55000C0B20870904204BF70BC704701EBC203C8 +:10C5600001EBC000D0F853C1C3F853C1D0F8570154 +:10C57000C3F857018C780B780020002C9CBF70BC4E +:10C58000704700BF01EB000C9CF803C19C4506D12D +:10C5900010281CBF084480F8032170BC7047401C61 +:10C5A000C0B28442EED870BC70470000100F00206B +:10C5B00010B50A7B02F01F020A73002202768B1864 +:10C5C00093F808C00CF001034FEA5C0C0CF0010476 +:10C5D00023444FEA5C0C0CF0010423444FEA5C0C4A +:10C5E0000CF001041C444FEA5C0303F0010CA4446A +:10C5F0005B0803F00104A4445B0803F00104A444B5 +:10C600000CEB530300EB020C521C8CF8133090F827 +:10C6100018C0D2B263440376052AD0D3D8B22528F5 +:10C6200088BFFFDF10BD0023C383428401EBC20239 +:10C63000521EB2FBF1F10184704770B5002504462B +:10C6400003290DD04FF4FA4200297BD0012978D07C +:10C65000022918BF70BD0146BDE870405830A7E7F9 +:10C6600004F158067821304609F075F8B571F57176 +:10C6700035737573F573357475717576B5762120DC +:10C6800086F83E00492086F83F00FE2086F87300B9 +:10C6900084F82C502584012084F8540084F8550037 +:10C6A000282184F856101B21218761874FF4A4713B +:10C6B000E187A1871B21218661864FF4A471E18661 +:10C6C000A1861B21A4F84010A4F844104FF4A471D3 +:10C6D000A4F84610A4F842101B21A4F84A10A4F8AC +:10C6E0004C10A4F8481060734FF448606080A4F8C0 +:10C6F000D050A4F8D250A4F8D450A4F8D650A4F83E +:10C70000D850A4F8DA5084F8DD5084F8DF50A4F84B +:10C71000E65084F8E450A4F8F850A4F8FA5084F8ED +:10C720009A5184F89B5184F8A45184F8A55184F857 +:10C73000685184F8705184F8735184F88C5170BD3D +:10C7400000E03FE0A4F8E65084F8DE506188FE483F +:10C750000844B0FBF1F0A4F878004BF68030A4F860 +:10C760007A00E388A4F87E50B4F882C0DB000CFBAA +:10C7700001FCB3FBF1F39CFBF1FC5B1CA4F882C051 +:10C780009BB203FB01FC04F15800A4F88030BCF517 +:10C79000C84FC4BF5B1E0385B2FBF1F2521CC285B9 +:10C7A00001F5802202F5EE32531EB3FBF1F2028452 +:10C7B000C38B03FB01F2B2FBF1F1C1832146BDE85B +:10C7C0007040F5E6B4F89411B4F89831B4F802C0AA +:10C7D00004F15800A4F87E50B4F88240DB0004FB5A +:10C7E0000CF4B3FBF1F394FBF1F45B1C44859BB2B6 +:10C7F00003FB01F40385B4F5C84FC4BF5B1E03857A +:10C80000B2FBF1F2521CC285428C01EBC202521EF5 +:10C81000B2FBF1F20284C28B02FB0CF2B2FBF1F12B +:10C82000C18370BD70B50025044603290DD04FF4B7 +:10C83000FA42002963D001297ED0022918BF70BDB9 +:10C840000146BDE870405830B2E604F15806782140 +:10C85000304608F080FFB571F57135737573F57367 +:10C86000357475717576B576212086F83E004920BD +:10C8700086F83F00FE2086F8730084F82C5025844B +:10C88000012084F8540084F85500282184F85610BB +:10C890001B21218761874FF4A471E187A1871B21A8 +:10C8A000218661864FF4A471E186A1861B21A4F83C +:10C8B0004010A4F844104FF4A471A4F84610A4F852 +:10C8C00042101B21A4F84A10A4F84C10A4F84810F8 +:10C8D0006073A4F8D850202084F8DA0084F8D0508F +:10C8E000C4F8D45084F8045184F8055184F80E51EA +:10C8F00084F80F5184F8F45084F8005170BD6088BA +:10C9000091490144B1FBF0F1A4F878104BF6803165 +:10C91000A4F87A10E388A4F87E50B4F882C0DB0053 +:10C920000CFB00FC9CFBF0FCB3FBF0F304F15801A2 +:10C93000A4F882C05B1C00E021E09BB203FB00FC7A +:10C94000A4F88030BCF5C84FC4BF5B1E0B85B2FB9A +:10C95000F0F2521CCA8500F5802202F5EE32531E19 +:10C96000B3FBF0F20A84CB8B03FB00F2B2FBF0F0D6 +:10C97000C883214604F15800BDE8704018E6D4F899 +:10C98000F830B4F802C004F158005989DB89A4F8E2 +:10C990007E50B4F88240DB0004FB0CF4B3FBF1F3EF +:10C9A00094FBF1F45B1C44859BB203FB01F403850B +:10C9B000B4F5C84FC4BF5B1E0385B2FBF1F2521C35 +:10C9C000C285428C01EBC202521EB2FBF1F202841C +:10C9D000C28B02FB0CF2B2FBF1F1C18370BD2DE9F9 +:10C9E000F003047E0CB1252C03D9BDE8F00312201E +:10C9F0007047002A02BF0020BDE8F003704791F89D +:10CA00000DC01F260123514D4FF00008BCF1000F4F +:10CA100074D0BCF1010F1EBF1F20BDE8F0037047AA +:10CA2000B0F800C00A7C8F7B91F80F907A404F7C61 +:10CA300087EA090742EA072282EA0C0C5FF0000746 +:10CA40000CF0FF094FEA1C2C99FAA9F99CFAACFCEE +:10CA50004FEA19694FEA1C6C49EA0C2C0CEB0C1CD0 +:10CA60007F1C9444FFB21FFA8CFC032FE8D38CEA9E +:10CA7000020C364F0022ECFB057212096FF0240500 +:10CA800002FB05C2D2B201EBD207427602F00705E3 +:10CA90003F7A03FA05F52F4218BF82767ED104FB58 +:10CAA0000CF2120C521CD2B25FF0000400EB040C2A +:10CAB0009CF813C094453CBFA2EB0C02D2B212D337 +:10CAC0000D194FF0000C2D7A03FA0CF73D421CBFF4 +:10CAD000521ED2B2002A71D00CF1010C0CF0FF0CE6 +:10CAE000BCF1080FF0D304F1010C0CF0FF04052C8D +:10CAF000DCD33046BDE8F0037047FFE790F819C07B +:10CB00000C7E474604FB02C2104C4FF0000CE2FBC7 +:10CB1000054C4FEA1C1C6FF024040CFB0422D2B21B +:10CB200001EBD204427602F0070C247A03FA0CFCE3 +:10CB300014EA0C0F1FBF82764046BDE8F003704731 +:10CB400090F818C004E00000FFDB050053E4B36E6A +:10CB5000B2FBFCF40CFB1422521CD2B25FF00004B6 +:10CB600000EB040C9CF813C094453CBFA2EB0C02F4 +:10CB7000D2B212D30D194FF0000C2D7A03FA0CF833 +:10CB800015EA080F1CBF521ED2B27AB10CF1010C8B +:10CB90000CF0FF0CBCF1080FF0D300E011E004F141 +:10CBA000010C0CF0FF04052CDAD3A2E70CEBC40156 +:10CBB00081763846BDE8F0037047FFE70CEBC4010F +:10CBC00081764046BDE8F0037047FD4A016812686F +:10CBD0001140FC4A126811430160704730B4FA49B1 +:10CBE000F74B00244FF0010C0A78521CD2B20A70A5 +:10CBF000202A08BF0C700D781A680CFA05F52A4235 +:10CC0000F2D0097802680CFA01F15140016030BCA1 +:10CC1000704770B46FF01F02010C02EA90251F23C9 +:10CC2000A1F5AA4054381CBFA1F5AA40B0F15500A7 +:10CC300009D0A1F52850AA381EBFA1F52A40B0F1AD +:10CC4000AA00012000D100204FF0000C624664468B +:10CC50008CEA0106F6431643B6F1FF3F11D005F00A +:10CC600001064FEA5C0C4CEAC63C03F00106520890 +:10CC70006D085B08641C42EAC632162CE8D370BC0F +:10CC8000704770BC00207047017931F01F0113BF5D +:10CC9000002000221146704710B4435C491C03F089 +:10CCA000010C5B0803F00104A4445B0803F00104D9 +:10CCB000A4445B0803F00104A4445B0803F00104EE +:10CCC000A4445B0803F001045B08A44403F00104DE +:10CCD000A4440CEB53031A44D2B20529DDDB012A2C +:10CCE0008CBF0120002010BC704730B40022A1F19D +:10CCF000010CBCF1000F11DD431E11F0010F08BF44 +:10CD000013F8012F5C785FEA6C0C07D013F8025F10 +:10CD100022435C782A43BCF1010CF7D1491E5CBF69 +:10CD2000405C0243002A0CBF0120002030BC704749 +:10CD3000002A08BF70471144401E12F0010F03D0B3 +:10CD400011F8013D00F8013F520808BF704700BFCD +:10CD500011F8013C437011F8023D00F8023F521EE9 +:10CD6000F6D1704770B58CB000F110041D46164620 +:10CD70000DF1FF3C5FF0080014F8012C8CF8012045 +:10CD800014F8022D0CF8022F401EF5D101F1100C01 +:10CD90006C460DF10F0108201CF8012C4A701CF89C +:10CDA000022D01F8022F401EF6D1204607F0DCFAD2 +:10CDB0007EB16A1E04F130005FF0080110F8013CFA +:10CDC000537010F8023D02F8023F491EF6D10CB034 +:10CDD00070BD08982860099868600A98A8600B9848 +:10CDE000E8600CB070BD38B505460C466846FAF7E9 +:10CDF00054F9002808BF38BD9DF900202272A07E9A +:10CE0000607294F90A100020511A48BF494295F8FF +:10CE10002D308B42C8BF38BDFF2B08BF38BDE17A2B +:10CE2000491CC9B2E17295F82E30994203D8A17A13 +:10CE30007F2918BF38BDA2720020E072012038BDE2 +:10CE40000C2818BF0B2810D00D2818BF1F280CD095 +:10CE5000202818BF212808D0222818BF232804D052 +:10CE600024281EBF2628002070474FF0010070477D +:10CE70000C2963D2DFE801F006090E13161B323CC1 +:10CE8000415C484E002A5BD058E0072A18BF082AA8 +:10CE900056D053E00C2A18BF0B2A51D04EE00D2A71 +:10CEA0004ED04BE0A2F10F000C2849D946E023B147 +:10CEB000A2F110000B2843D940E0122A18BF112A12 +:10CEC0003ED090F8360020B1122A37D31A2A37D92B +:10CED00034E0162A32D31A2A32D92FE0A2F10F01F8 +:10CEE00003292DD990F8360008B31B2A28D925E04C +:10CEF000002B08BF042A21D122E013B1062A1FD03B +:10CF00001CE0012A1AD11BE01C2A1CBF1D2A1E2A64 +:10CF100016D013E01F2A18BF202A11D0212A18BFCB +:10CF2000222A0DD0232A1CBF242A262A08D005E055 +:10CF300013B10E2A04D001E0052A01D00020704769 +:10CF4000012070472DE9F0410D4604468668F8F748 +:10CF50002CF858B9F7F75AFE40F23471F7F757FB3F +:10CF6000A0602046F8F721F80028F3D095B13046AC +:10CF7000A168F8F767FB00280CDD2844401EB0FBD1 +:10CF8000F5F707FB05F13046F7F741FBA06038469F +:10CF9000BDE8F0810020BDE8F08170B50446904204 +:10CFA00028BF70BD101B642810D325188D4205D8EA +:10CFB000F8F76FFB00281CBF284670BD204670BDE7 +:10CFC0000C5D0200105D0200700100206420ECE79F +:10CFD00011F00C0F13D001F0040100290DBF402205 +:10CFE000102296214FF4167101F5BC71A0EB0103DC +:10CFF00088428CBF93FBF2F0002080B27047022978 +:10D0000019BF6FF00D0101EBD0006FF00E0101EBC5 +:10D010009000F2E7C08E11F00C0F08BF7047B0F51A +:10D02000296F38BF4FF4296070470246808E11F097 +:10D030000C0F08BF704792F85530D18E13F00C0FCB +:10D0400004D0B1F5296F38BF4FF42961538840F2FD +:10D05000E24C03FB0CF3528E4FF4747C0CEB821CFD +:10D060008C459CBF910101F57471591AA1F5967117 +:10D07000884228BF0846B0F5296F38BF4FF42960B1 +:10D080007047084418449830002A14BF0421002136 +:10D0900008447047F0B4002A14BF08220122002B74 +:10D0A00014BF0824012412F00C0F8B8ECA8E25D0D9 +:10D0B00091F85550944615F00C0F04D0BCF5296F2B +:10D0C00038BF4FF4296C4D8840F2E2466E434D8ED6 +:10D0D0004FF4747707EB851767459CBF4FEA851CB3 +:10D0E0000CF5747CA6EB0C0CACF5967C634528BF64 +:10D0F0006346B3F5296F38BF4FF4296314F00C0F62 +:10D1000004D0B2F5296F38BF4FF429621FFA83FCAF +:10D1100000280CBF0123002391F8560014F00C0FD7 +:10D1200008BF00200CEB020108449830002B14BF0C +:10D13000042100210844F0BC70472DE9F00391F868 +:10D1400054200B8E12F00C0F4FF474771CBF07EBBA +:10D1500083139CB256D000BF12F00C0F8B8ECA8E78 +:10D160004D8E91F855C021D016461CF00C0F04D0FE +:10D17000B6F5296F38BF4FF42966B1F8028040F246 +:10D18000E24908FB09F807EB8519B14502D8AE0161 +:10D1900006F57476A8EB0606A6F59676B34228BF88 +:10D1A0003346B3F5296F38BF4FF42963A34228BF34 +:10D1B00023469CB21CF00C0F1CBF07EB85139BB2DF +:10D1C00028D000BF1CF00C0F04D0B2F5296F38BF77 +:10D1D0004FF429629A4228BF1A4600280CBF012347 +:10D1E000002391F856001CF00C0F08BF0020A11876 +:10D1F00008449830002B14BF042100210844BDE8E6 +:10D20000F0037047022A07BF9B003C33DB007033FA +:10D210009CB2A1E7BCF1020F07BFAB003C33EB00AF +:10D2200070339BB2CEE710F0010F1CBF0120704796 +:10D2300010F0020F1CBF0220704710F0040018BF4E +:10D24000082070472DE9F0470446174689464FF0FD +:10D250000108084600F0C5FC0546484600F0C5FC3C +:10D2600010F0010F18BF012625D000BF15F0010FE7 +:10D2700018BF01232AD000BF56EA030108BF4FF0B0 +:10D28000000810F0070F08BF002615F0070F08BFB1 +:10D29000002394F85400B0420CBF00203046387090 +:10D2A00094F85510994208BF00237B70002808BFEE +:10D2B000002B25D115E010F0020F18BF0226D5D1A2 +:10D2C00010F0040F14BF08260026CFE715F0020F58 +:10D2D00018BF0223D0D115F0040F14BF0823002378 +:10D2E000CAE7484600F087FCB4F85810401A00B26C +:10D2F00047F6FE71884201DC002801DC4FF000088F +:10D3000016B1082E0CD018E094F85400012818BF6C +:10D31000022812D004281EBF0828FFDF032D0CD1DD +:10D3200094F8A40148B1B4F8A801012894F8540075 +:10D3300006D0082801D0082038704046BDE8F087A4 +:10D34000042818BF0420F7D1F5E7012814BF0228EC +:10D35000704710F00C0018BF0420704738B4CBB2EF +:10D36000C1F3072CC1B2C0F30724012B07D0022B55 +:10D3700009D0042B08BFBCF1040F2DD006E0BCF18E +:10D38000010F03D128E0BCF1020F25D0012906D0FE +:10D39000022907D0042908BF042C1DD004E0012C69 +:10D3A00002D119E0022C17D001EA0C0161F3070247 +:10D3B00004EA030161F30F22D1B211F0020F18BF8A +:10D3C000022310D0C2F307218DF8003011F0020FB4 +:10D3D00018BF02211BD111E0214003EA0C031940C0 +:10D3E00061F30702E6E711F0010F18BF0123E9D14D +:10D3F00011F0040F14BF08230023E3E711F0010F1D +:10D4000018BF012103D111F0040118BF08218DF8C4 +:10D410000110082B01BF000C012804208DF800002A +:10D42000BDF8000038BC70474FF0000C082902D04E +:10D43000042909D011E001280FD10420907082F84E +:10D4400003C0138001207047012806D00820907087 +:10D4500082F803C013800120704700207047162A0D +:10D4600010D12A220C2818BF0D280FD04FF0230C02 +:10D470001F280DD031B10878012818BF002805D029 +:10D48000162805D000207047012070471A70FBE76E +:10D4900083F800C0F8E7012908D002290BD004293D +:10D4A00012BF082940F6A660704707E0002804BFB5 +:10D4B00040F2E240704740F6C410704700B5FFDF0D +:10D4C00040F2E24000BD00004078704730B50546AC +:10D4D000007801F00F0220F00F0010432870092996 +:10D4E00012D2DFE801F0050705070509050B0F005B +:10D4F00006240BE00C2409E0222407E0012400208C +:10D50000E87003E00E2401E00024FFDF6C7030BD02 +:10D51000007800F00F0070470A68C0F8032089887F +:10D52000A0F807107047D0F803200A60B0F8070091 +:10D53000888070470A68C0F809208988A0F80D1013 +:10D540007047D0F809200A60B0F80D008880704755 +:10D550000278402322F0400203EA81111143017056 +:10D5600070470078C0F3801070470278802322F063 +:10D57000800203EAC1111143017070470078C009AD +:10D58000704770B514460E4605461F2A88BFFFDF58 +:10D590002246314605F1090008F03CF8A01D6870EC +:10D5A00070BD70B544780E460546062C38BFFFDFC7 +:10D5B000A01F84B21F2C88BF1F24224605F1090139 +:10D5C000304608F027F8204670BD70B514460E4668 +:10D5D00005461F2A88BFFFDF2246314605F10900B4 +:10D5E00008F018F8A01D687070BD0968C0F80F1029 +:10D5F00070470A88A0F8132089784175704790F821 +:10D60000242001F01F0122F01F02114380F8241092 +:10D610007047072988BF072190F82420E02322F0D3 +:10D62000E00203EA4111114380F8241070471F30D3 +:10D6300008F0A5B910B5044600F009FB002818BF92 +:10D64000204410BDC17811F03F0F1BBF027912F0CA +:10D65000010F0022012211F03F0F1BBF037913F0CD +:10D66000020F002301231A4402EB4202530011F07F +:10D670003F0F1BBF027912F0080F0022012203EBBB +:10D68000420311F03F0F1BBF027912F0040F00227A +:10D690000122134411F03F0F1BBF027912F0200F3B +:10D6A0000022012202EBC20203EB420311F03F0F02 +:10D6B0001BBF027912F0100F0022012202EB42027E +:10D6C0001A4411F03F0F1BBF007910F0400F0020EB +:10D6D0000120104410F0FF0014BF01210021084474 +:10D6E000C0B2704770B50278417802F00F02082A84 +:10D6F0004DD2DFE802F004080B4C4C4C0F14881F8D +:10D700001F280AD943E00C2907D040E0881F1F28B2 +:10D7100003D93CE0881F1F2839D8012070BD4A1E5C +:10D72000FE2A34D88446C07800258209032A09D00D +:10D7300000F03F04601C884204D86046FFF782FF77 +:10D74000A04201D9284670BD9CF803004FF00106A5 +:10D7500010F03F0F1EBF1CF10400007810F0100FF6 +:10D7600013D064460421604600F071FA002818BF07 +:10D7700014EB0000E6D0017801F03F012529E1D249 +:10D7800080780221B1EB501FDCD3304670BD002001 +:10D7900070BD70B50178012501F00F010024042946 +:10D7A0000AD007290DD008291CBF002070BD407881 +:10D7B0000E2836D0204670BD4078801F1F2830D9F3 +:10D7C000F8E7844640789CF803108A09032AF1D0D0 +:10D7D00001F03F06711C8142ECD86046FFF732FF32 +:10D7E000B042E7D89CF8030010F03F0F1EBF1CF1B9 +:10D7F0000400007810F0100F13D066460421604634 +:10D8000000F025FA002818BF16EB0000D2D00178EE +:10D8100001F03F012529CDD280780221B1EB501FC4 +:10D82000C8D3284670BD10B4017801F00F01032958 +:10D8300020D0052921D14478B0F81910B0F81BC0C8 +:10D84000B0F81730827D222C17D1062915D3B1F5F7 +:10D85000486F98BFBCF5FA7F0FD272B1082A98BF03 +:10D860008A420AD28B429CBFB0F81D00B0F5486FC7 +:10D8700003D805E040780C2802D010BC0020704787 +:10D8800010BC012070472DE9F0411F4614460D00E1 +:10D89000064608BFFFDF2146304600F0D8F90400F5 +:10D8A00008BFFFDF30193A462946BDE8F04107F0CE +:10D8B000B1BEC07800F03F007047C02202EA81117B +:10D8C000C27802F03F021143C1707047C0788009EE +:10D8D0007047C9B201F00102C1F340031A4402EBE0 +:10D8E0004202C1F3800303EB4202C1F3C00302EB27 +:10D8F0004302C1F3001303EB43031A44C1F3401383 +:10D9000003EBC30302EB4302C1F380131A4412F08A +:10D91000FF0202D0521CD2B20171C37802F03F0163 +:10D9200003F0C0031943C170511C417070472DE9C9 +:10D93000F0410546C078164600F03F041019401C1F +:10D940000F46FF2888BFFFDF281932463946001DE1 +:10D9500007F060FEA019401C6870BDE8F081C17836 +:10D96000407801F03F01401A401E80B2704710B568 +:10D9700090F803C00B460CF03F0144780CF03F0CCC +:10D98000A4EB0C0CACF1010C1FFA8CF4944288BF90 +:10D9900014462BB10844011D2246184607F03AFEF2 +:10D9A000204610BD4078704700B5027801F00303AF +:10D9B00022F003021A430270012914BF0229002138 +:10D9C00004D0032916BFFFDF012100BD417000BD57 +:10D9D00000B5027801F0030322F003021A4302703B +:10D9E000012914BF0229002104D0032916BFFFDF3B +:10D9F000012100BD417000BD007800F003007047B8 +:10DA0000417841B1C078192803D2C04A105C8842DD +:10DA100001D1012070470020704730B50124054630 +:10DA2000C17019293CBFB948445C02D3FF2918BF13 +:10DA3000FFDF6C7030BD70B515460E4604461B2ADC +:10DA400088BFFFDF65702A463146E01CBDE87040A4 +:10DA500007F0E0BDB0F807007047B0F80900704764 +:10DA6000C172090A01737047B0F80B00704730B4F7 +:10DA7000B0F80720B0F809C0B0F805300179941F5C +:10DA800040F67A45AC4298BFBCF5FA7F0ED269B138 +:10DA9000082998BF914209D293429FBFB0F80B006A +:10DAA000B0F5486F012030BC98BF7047002030BCF3 +:10DAB0007047001D07F063BF021D0846114607F0BE +:10DAC0005EBFB0F809007047007970470A6842608D +:10DAD00049688160704742680A60806848607047A2 +:10DAE0000988818170478089088070470A68C0F87A +:10DAF0000E204968C0F812107047D0F80E200A6056 +:10DB0000D0F81200486070470968C0F816107047D6 +:10DB1000D0F81600086070470A6842604968816062 +:10DB2000704742680A608068486070470968C16051 +:10DB30007047C06808607047007970470A684260A3 +:10DB400049688160704742680A6080684860704731 +:10DB50000171090A417170478171090AC1717047E9 +:10DB60000172090A417270478172090AC1727047D5 +:10DB700080887047C0887047008970474089704727 +:10DB800001891B2924BF4189B1F5A47F07D381886E +:10DB90001B2921BFC088B0F5A47F01207047002059 +:10DBA00070470A68426049688160704742680A604D +:10DBB000806848607047017911F0070F1BBF4079FA +:10DBC00010F0070F002001207047017911F0070FB6 +:10DBD0001BBF407910F0070F002001207047017132 +:10DBE0007047007970474171704740797047817183 +:10DBF000090AC1717047C088704745A282B0D2E956 +:10DC00000012CDE900120179407901F0070269465E +:10DC10001DF80220012A07D800F00700085C01283F +:10DC20009EBF012002B07047002002B07047017112 +:10DC3000704700797047417170474079704730B53F +:10DC40000C460546FB2988BFFFDF6C7030BDC378EA +:10DC5000024613F03F0008BF70470520127903F019 +:10DC60003F0312F0010F36D0002914BF0B2070477C +:10DC700012F0020F32D0012914BF801D704700BF7F +:10DC800012F0040F2DD0022914BF401C704700BFB2 +:10DC900012F0080F28D0032914BF801C704700BF62 +:10DCA00012F0100F23D0042914BFC01C704700BF0E +:10DCB00012F0200F1ED005291ABF1230C0B27047D3 +:10DCC00012F0400F19D006291ABF401CC0B270478D +:10DCD000072918D114E00029CAD114E00129CFD1B5 +:10DCE00011E00229D4D10EE00329D9D10BE0042997 +:10DCF000DED108E00529E3D105E00629E8D102E0FC +:10DD0000834288BF7047002070470000145D020006 +:10DD100000010102010202032DE9F041FC4E04461C +:10DD2000736893F828000127002528B193F8A00113 +:10DD3000D8B993F84801C0B193F8480198B383F873 +:10DD4000A071D3F84C113C2269B36570201D07F017 +:10DD500061FC052020702771706890F8A0110029DF +:10DD600018BF80F8485107D034E083F8A05103F180 +:10DD70002A014FF48E72E7E71D212A3007F0C9FC13 +:10DD800070687F2180F84510FF2180F8381080F8F6 +:10DD90002B1080F83E10818E21F0600120318186A9 +:10DDA00080F8285016E0FFE793F82200012814D0ED +:10DDB000187801281BD093F8500101281CBF0020BF +:10DDC000BDE8F081657018202070D3F852016060C2 +:10DDD00083F850510120BDE8F08165700720207064 +:10DDE000586A606083F822500120BDE8F0816570B8 +:10DDF000142020702022991C201D07F00BFC257296 +:10DE000071680D7081F85051C24882888284D0F8C0 +:10DE10006421527B80F8262080F82270D1F86401BA +:10DE20000088F4F7E3FEF4F78AFBD3E7B8484068CC +:10DE30000178002914BF80884FF6FF70704770B5D5 +:10DE4000B34C0546606890F8741120460629806836 +:10DE500003D0FFF73BFDB8B127E0FFF737FD10BB5C +:10DE6000A068FFF733FD00BB606890F8A40110F0D4 +:10DE70000C0F1AD0A068C17811F03F0F1CBF0079B9 +:10DE800010F0100F11D00EE0616891F874010828AD +:10DE900009D025B191F83E00FF2806D003E091F8A3 +:10DEA0002B00FF2801D0012070BD002070BDF8B507 +:10DEB000974C07460E46606890F82810002906BF68 +:10DEC00090F848110029F8BD00F1330520787F282B +:10DED00008BFFFDF207828707F202070606890F8EE +:10DEE0009A1100F5D470085C012808BF012508D0FC +:10DEF000022808BF022504D0042816BF08280325DD +:10DF0000FFDF606880F8365090F8971180F846106F +:10DF100090F87411072911D190F8A401012808BFC5 +:10DF2000012508D0022808BF022504D0042816BF06 +:10DF300008280325FFDF606880F83750606890F894 +:10DF400074014FF00005062804D1A068FFF7BEFC5D +:10DF500000283CD0606890F87411082904BF90F83C +:10DF6000A10102280ED04FF00301A068FFF762FB69 +:10DF700040B141780A09616881F838200088C0F30F +:10DF80000B0048870095A068FFF7C2FA6168BDF8EA +:10DF9000005091F83420520962F34615ADF8005054 +:10DFA000072818BFFFDF1CD0BDF800000090606894 +:10DFB000BDF8001081860421A068FFF73BFB002814 +:10DFC0007DD0B0F80100C004C00C79D0B0E0A068EA +:10DFD000C17811F03F0F1CBF007910F0100FB9D1BC +:10DFE000D0E791F87401062816D0072836D0082803 +:10DFF00073D00A2818BFFFDFD6D145F00A00ADF86C +:10E00000000091F83E10FF2914BF0121002161F3A7 +:10E010008200ADF80000C7E7A068FFF757FC58B1D1 +:10E02000012808BF45F0010046D0022814BFFFDFD9 +:10E0300045F0020040D0B7E7A068C17811F03F0F6B +:10E040001CBF007910F0020FAED00120FFF7F7FEE1 +:10E05000002808BF45F004002ED0A5E7A068FFF710 +:10E0600035FCB0B1012804BF45F00100ADF8000057 +:10E070000FD0022898D145F00200ADF80000A16849 +:10E08000CA7812F03F0F1CBF097911F0020F21D19D +:10E0900018E0A068C17811F03F0F1CBF007910F0A4 +:10E0A000020F05D1606890F83E00FF283FF47CAF76 +:10E0B000BDF8000040F00400ADF8000074E72BE06C +:10E0C0002FE00AE0616891F83E10FF2908BF20F0B8 +:10E0D0000400F1D040F00400EEE791F83E00FF2884 +:10E0E0001CBF45F00400ADF8000091F8A101022822 +:10E0F000BDF800000CBF40F0080020F00800ADF8AB +:10E1000000000CBF40F0020020F00200D4E7000045 +:10E1100074010020F41000206068818E21F06001FD +:10E1200005E06068818E21F0600101F14001818687 +:10E13000606890F8741106290DD190F8A40110F0D0 +:10E140000C0F08D0A068C17811F03F0F1CBF0079F8 +:10E1500010F0100F10D1A068C17811F03F0F0BD054 +:10E16000017911F0400F07D04FF00601FFF762FA76 +:10E170006168007881F84500606890F874010628AD +:10E1800004D00020FFF75BFE18BB04E0022F18BF8D +:10E19000012FF6D1F8BDA068C17811F03F0F33D040 +:10E1A000017911F0010F2FD0616801F12C0791F86E +:10E1B000783101F12B05FF2B0CD03A462946184641 +:10E1C000FDF762FF002808BFFFDF287840F002005B +:10E1D000287019E0FFF7C5F92870A068FFF798F9D3 +:10E1E000072804D23946A068FFF79DF90CE0A06823 +:10E1F000FFF78EF9072807D10021A068FFF71AFA68 +:10E20000016839608088B8800120FFF718FE80BB64 +:10E21000A068C17811F03F0F2BD0017911F0020FE7 +:10E2200027D0616801F13F0591F876216F1E1AB180 +:10E23000022E18BF032E08D0FFF76AF907280AD26A +:10E240002946A068FFF77DF912E0D1F85A0128604D +:10E25000B1F85E010BE0A068FFF75AF9072807D173 +:10E260000121A068FFF7E6F9016829608088A8808D +:10E270003E70606890F87401062808BFF8BD072852 +:10E2800018BF082802D00A2806D0F8BDA068FFF7FA +:10E290001DFB022808BFF8BD606800F14705A068B3 +:10E2A000FFF75DFB626892F83230C3F1FF018842EC +:10E2B00028BF084605D9918E21F0600101F1400187 +:10E2C0009186C2B203EB0501A068FFF750FB6168BD +:10E2D00091F83220104481F83200F8BD2DE9F04762 +:10E2E000FB4D06466C6894F82800002818BFBDE86E +:10E2F000F0871D212A34204607F00BFA01272770EA +:10E30000A868FFF705F920B3012827D002282AD0F2 +:10E31000062818BFFFDF2BD004F11D01A868FFF706 +:10E3200040F92072686804F1020904F1010890F8CC +:10E330007801FF2821D04A464146FDF7A5FE002876 +:10E3400008BFFFDF98F8000040F0020088F80000E6 +:10E3500031E0608940F013006081DDE7608940F0C2 +:10E3600015006081DEE7608940F010006081D3E72E +:10E37000608940F012006081CEE7A868FFF7F1F8ED +:10E3800088F80000A868FFF7C3F8072804D24946B8 +:10E39000A868FFF7C8F80EE0A868FFF7B9F80728E3 +:10E3A00009D10021A868FFF745F90168C9F80010F4 +:10E3B0008088A9F80400287804F109087F2808BF9C +:10E3C000FFDF287888F800004FF07F0985F800907B +:10E3D000277300206073FF20A073A17A11F0040F4F +:10E3E00008BF20752DD0686804F1150804F1140ADF +:10E3F00090F8761119B1022E18BF032E09D0A86823 +:10E40000FFF786F807280BD24146A868FFF799F86E +:10E4100015E0D0F85A11C8F80010B0F85E010CE011 +:10E42000A868FFF775F8072809D10121A868FFF748 +:10E4300001F90168C8F800108088A8F804008AF87B +:10E44000006084F81B90686890F89711217780F835 +:10E450002870BDE8F047062003F0F9BB2DE9F04134 +:10E460009B4C606890F82810FF250027A1B91D215A +:10E470002A3007F04EF960687F2180F8451080F857 +:10E48000385080F82B5080F83E50818E21F060018A +:10E490002031818680F82870606800F5D47290F889 +:10E4A0009A11895C80F8A411002002F0E4FF18B3EF +:10E4B000F8F7FEFC6068874990F879010E5C3046F9 +:10E4C000F8F7CBFA606880F8976190F8A41111F022 +:10E4D0000C0F0CBF25200F20F8F7D5F9606890F8D5 +:10E4E000A4110120F8F7D1FA606890F868110329A7 +:10E4F00018BF022910D103E0BDE8F04101F0A4B833 +:10E5000090F89A1100F5D470085C012804D101221A +:10E5100011460020F8F7E2FDF8F7B0FD606890F8CA +:10E52000A461012E07BF4FF0010803214FF000083E +:10E530000521A068FDF786FE616881F8760150B17B +:10E54000B8F1000F18BF402623D000BFF7F79BFF9C +:10E550003046F8F745FD6068D0F87C01F8F7B4FC68 +:10E56000606890F87811FF291CBF00F29110FDF748 +:10E57000A2FD6068062180F8775180F8785180F814 +:10E58000867180F8857180F8A17180F87411BDE8FA +:10E59000F08116F00C0F14BF55265026D6E770B543 +:10E5A0004B4C0646606800F5BA752046806841B15C +:10E5B000D0F80510C5F81D10B0F80900A5F8210025 +:10E5C00003E005F11D01FEF7AEFFA068FEF7C9FFED +:10E5D00085F82400A0680021032E018002D0052EBA +:10E5E00004D046E00321FEF771FF42E00521FEF76B +:10E5F0006DFF6068D0F8640100F10E01A068FEF7BD +:10E60000F4FF6068D0F8640100F11201A068FEF721 +:10E61000F0FFD4E90110D1F86421527D8275D1F860 +:10E620006421D28AC275120A0276D1F86421528816 +:10E630004276120A8276D1F864219288C276120A52 +:10E640000277D1F86421D2884277120A8277D1F812 +:10E6500064110831FEF7EBFF6068D0F86401017EB9 +:10E66000A068FEF7CCFF606890F8AA11A068FEF7DA +:10E67000D0FF05F11D01A068FEF75CFF95F824109E +:10E68000A068FEF772FF606800F5AD7590F85961FB +:10E6900090F8751191B190F86811032906D190F89E +:10E6A0006111002918BF90F87A0101D190F8770123 +:10E6B000FDF717FE00281CBF012605462946A06865 +:10E6C000FEF72AFF3146A068BDE87040FEF740BF64 +:10E6D00074010020305D0200FE49496881F8730131 +:10E6E000704770B5FB4D686890F8741102291FBF20 +:10E6F00090F8741101290C2070BD00F166014FF0F3 +:10E700000004C0F84C1180F848414FF01D0100F1A1 +:10E710002A0006F0FEFF68687F2180F84510FF217F +:10E7200080F8381080F82B1080F83E10818E21F090 +:10E7300060012031818680F82840047080F82240F2 +:10E7400080F85041012680F8A06190F8760130B140 +:10E75000F8F750FCF7F7ABFE686880F87641686818 +:10E76000072180F8724180F8616180F8684180F883 +:10E77000794180F8734180F8A14180F86011002050 +:10E7800070BDD44910B5886048680021A0F8A51173 +:10E7900080F8A711012180F87411FFF7A2FF00286B +:10E7A00018BFFFDF10BD2DE9F047CA4C0546606871 +:10E7B00090F87401012818BF022804D003281CBF58 +:10E7C0000C20BDE8F087687A022823D0F8F79DF87E +:10E7D0000220F8F773FB606890F97301F8F72FF9DE +:10E7E000A068F8F76EFBBC48F8F74EFBBB48F8F79B +:10E7F0002CF9606890F8591100F5AD70F8F7D7F86A +:10E800000F210720F8F7EFF8606890F8610100B376 +:10E81000FDF7DAFC6068297A00F5D47280F89A1165 +:10E82000297A895C80F8A4116968C0F87C1129688C +:10E83000C0F880116A7A012500266AB1012A23D026 +:10E840000527022A08BF80F8747175D0032A7ED08C +:10E85000BBE0FDF774FCDDE7A14F90F860C100223A +:10E8600090F87911491CA7FB01835B08A3EB830394 +:10E87000194480F879112CFA01F111F0010F03D13C +:10E88000511CCAB2032AEBD380F8A16190F8711130 +:10E89000002904BF90F87501002849D0F6F7B6F9B1 +:10E8A000074660683946D0F86C01F6F7CBFEDFF812 +:10E8B0003482814690FBF8F008FB109041423846C4 +:10E8C000F5F7A5FE6168C1F86C0199FBF8F0D1F885 +:10E8D0009C211044C1F89C01FDF7AEFB0146606825 +:10E8E000D0F89C21914223D8C0F86C71C0F89C618B +:10E8F00090F8750100281CBF0120FDF7BFFC012125 +:10E90000606890F87221002A1CBF90F87121002ADB +:10E910000ED090F8592100F5AD73012A04D15A792F +:10E9200002F0C002402A09D000F5AD70F9F73CF9B9 +:10E930006168042081F8740147E008E0FDF7CFFC2E +:10E9400061682A4601F5AD71F9F7F7F8F0E700299B +:10E9500018BFFFDF606800F2A51690F8A701400914 +:10E9600008BF012507D0012808BF022503D00228CF +:10E9700014BF00250825F8F79BFA307800F03F0611 +:10E980003046F8F76AF86068294680F89761FF20FA +:10E99000F7F779FF29460120F8F7BDF8F8F76EFB85 +:10E9A0000521A068FDF74EFC616881F8760148B149 +:10E9B00015F00C0F0CBF50255525F7F764FD2846C0 +:10E9C000F8F70EFB606880F874710020BDE8F087EE +:10E9D00010B5404C606890F8741104290DD00529D9 +:10E9E0001CBF0C2010BD90F8A10148B100F07EFEC4 +:10E9F0006168082081F8740108E0FFF72FFD05E049 +:10EA000000F074FE6168072081F87401002010BDD9 +:10EA10003049002210F0010F496802D0012281F82C +:10EA2000A82110F0080F03D01144082081F8A80194 +:10EA3000002070472749496881F87001704710B578 +:10EA4000244C636893F85831022B14BF032B002821 +:10EA50000BD100291ABF0229012000201146FDF721 +:10EA6000EEFA08281CBF012010BD606890F858011C +:10EA7000002816BF022800200120BDE81040F9F749 +:10EA80001DB81448406890F85801002816BF0228A5 +:10EA900000200120F9F712B80E49496881F85801A1 +:10EAA00070470C49496881F87201704770B5094C8C +:10EAB000616891F85801002816BF02280020012043 +:10EAC00081F8590101F5AD71F8F7E2FF606890F83F +:10EAD000581109E0740100202D5D0200335D020031 +:10EAE000ABAAAAAA40420F00022916BF032901219E +:10EAF000002180F8751190F8592100F5AD734FF0A1 +:10EB00000005012A04BF5B7913F0C00F0AD000F59D +:10EB1000AD73012A04D15A7902F0C002402A01D013 +:10EB2000002200E0012280F87121002A04BF0029A0 +:10EB300070BDC0F89C51F6F769F86168C1F86C01C6 +:10EB400091F8750100281CBF0020FDF797FB0026F7 +:10EB5000606890F8721100291ABF90F871110029AD +:10EB600070BD90F8592100F5AD71012A04D14979A1 +:10EB700001F0C001402906D02946BDE8704000F5EB +:10EB8000AD70F9F711B8FDF7AAFB61683246BDE830 +:10EB9000704001F5AD71F8F7D0BF70B5FE4D0C4671 +:10EBA00000280CBF01230023696881F8613181F8D6 +:10EBB0006A014FF0080081F87A010CD1002C1ABFCD +:10EBC000022C012000201146FDF739FA6968082857 +:10EBD00081F87A0101D0002070BD022C14BF032CF3 +:10EBE0001220F8D170BD002818BF112070470328EB +:10EBF000E94A526808BFC2F8641182F8680100202F +:10EC0000704710B5E44C606890F8681103291CBF88 +:10EC1000002180F8841101D0002010BD0123D0F81C +:10EC200064111A460020FEF735FA6168D1F86421B4 +:10EC3000526A904294BF0120002081F88401EBE7E2 +:10EC4000D548416891F86801032804D0012818BF0D +:10EC5000022807D004E091F86A01012808BF704734 +:10EC60000020704791F86901012814BF0328012092 +:10EC7000F6D1704770B5F8F7A7F9F8F786F9F8F705 +:10EC800089F8F8F707F9C44C0025606890F8760118 +:10EC900030B1F8F7AFF9F7F70AFC606880F8765101 +:10ECA00060680121A0F8A55180F8A75180F874117F +:10ECB00080F85051002070BDB74810B5406800F58D +:10ECC000C47006F0ECF9002010BDB3480121406883 +:10ECD00090F86821032A03BF80F85211D0F864210C +:10ECE0001288002218BF80F85221A0F8542180F821 +:10ECF00050117047A849496881F8AA017047017806 +:10ED0000002311F0010FA44949680AD04278032A70 +:10ED100008BFC1F8643181F86821012281F8A82177 +:10ED20001346027812F0040F0CD082784FF0000CDA +:10ED3000032A08BFC1F864C181F868210B44082286 +:10ED400083F8A821C27881F858210279002A16BFD9 +:10ED5000022A0123002381F8613181F86921427977 +:10ED600081F86021807981F870014FF000007047D0 +:10ED70008948406800F5D27070472DE9F041864C13 +:10ED800005460E46606890F87401032818BFFFDF3F +:10ED9000022D1EBF032DFFDFBDE8F0814FF00007FD +:10EDA0004FF00105AEB1606890F8371089B1818EDF +:10EDB00021F0600101F14001818690F8282042B9DC +:10EDC00080F8285011F0080F14BF0720062002F029 +:10EDD0003EFF6068A0F8A57180F8A77180F87451B3 +:10EDE000BDE8F08100F030BC2DE9F0476A4C0646E2 +:10EDF000894660684FF00108072E90F8617138BFAE +:10EE0000032533D3082E4FF0000088BFBDE8F087FC +:10EE1000FFF715F8002873D1A068C17811F03F0FF3 +:10EE200012D0027912F0010F0ED061684FF0050583 +:10EE300091F87621002A18BFB9F1000F16D091F889 +:10EE4000A411012909D011E011F03F0F1ABF007978 +:10EE500010F0100F002F53D14CE04FF001024FF093 +:10EE60000501FDF734F9616881F87601A168087839 +:10EE70002944C0F3801030B1487900F0C000402828 +:10EE800008BF012000D00020616891F876110029A8 +:10EE900018BF002807D0FDF735F90146606880F8F3 +:10EEA000771180F88581606890F87711FF292AD062 +:10EEB00080F878110846FDF732F940EA07056068E6 +:10EEC00090F87721FF2A18BF002D10D0072E0ED3FF +:10EED000A068C17811F03F0F09D0017911F0020F3D +:10EEE00005D00B21FDF7A0F9606880F886812846DF +:10EEF000BDE8F087FCF7DFFE002808BFBDE8F0871B +:10EF00000120BDE8F087A36890F8612159191B78AA +:10EF1000C3F3801C00F277136046FCF730FF054610 +:10EF2000CDE72DE9F0411C4C84B0A068FEF7CEFC83 +:10EF30000126002550B1022501287CD002287BD073 +:10EF4000F7F728FF04B00620BDE8F081F7F722FFAD +:10EF5000606890F86801032800F0C780A068C17855 +:10EF600011F03F0F05D0027912F0100F18BF0126E3 +:10EF700000D10026002E14BF0822012211F03F0FFD +:10EF800046D0007932EA000142D110F0020F09D0D8 +:10EF90000120FEF754FF01E074010020002808BFA3 +:10EFA000012000D000208DF800508DF804508DF81D +:10EFB0000850FF27D0B102AA694601A800F007FC5B +:10EFC000606890F859719DF80000002818BF47F05C +:10EFD00002070BD1A068FEF7D1FA80460121A06894 +:10EFE000FEF728FB4146F7F7EAFC90B166B1012035 +:10EFF00000F04DFB002878D039460020FEF757FF7F +:10F00000606880F890516CE03946002000F004FB05 +:10F010006BE0606890F86901032818BF022864D18A +:10F020009DF80400002860D09DF8000000285CD105 +:10F030007EB1012001E011E037E000F028FB00285C +:10F0400053D0FE210020FEF732FF606880F8905117 +:10F0500047E0FE21002000F0DFFA46E0F7F79AFED5 +:10F06000A0681821C27812F03F0F3ED00279914378 +:10F070003BD10421FEF7DEFA616891F86821032A8A +:10F0800001BF8078B5EB501F91F8840100282CD087 +:10F090004FF0010000F0FBFA38B3FF210120FEF72A +:10F0A00006FF606880F890611BE0F7F773FE606808 +:10F0B00090F86801032818D0A0681821C27812F0CF +:10F0C0003F0F12D0007931EA00000ED1012000F08C +:10F0D000DEFA50B1FF210220FEF7E9FE606880F8F9 +:10F0E000905104B00320BDE8F08104B00620BDE8D3 +:10F0F000F081F0B5FC4C074683B060686D4600783F +:10F10000002818BFFFDF002661688E70D1F8640107 +:10F1100002888A8042884A8382888A83C088C8831A +:10F1200081F8206047B10121A068FEF783FA054607 +:10F13000A0680078C10907E06946A068FEF7F3F906 +:10F14000A0680078C0F380116068012790F87521ED +:10F15000002A18BF002904D06A7902F0C002402AB0 +:10F1600026D090F87221002A18BF002903D06979AF +:10F1700011F0C00F1CD000F10E0006F0F7FB616823 +:10F1800091F87801FF2819D001F10802C91DFCF798 +:10F190007BFF002808BFFFDF6068C17941F00201F2 +:10F1A000C171D0F891114161B0F89511018310E05F +:10F1B0002968C0F80E10A9884182E0E7D1F86401FF +:10F1C000427ECA71D0F81A208A60C08B88814E6155 +:10F1D0000E8360680770D0F8642190F8731182F88C +:10F1E0005710D0F864010088F3F700FDF3F798F9A1 +:10F1F00003B0F0BD2DE9F041BB4C05460126606827 +:10F20000002790F86811012918BF022902D00329AC +:10F2100018BFFFDF55B1A068FEF764FA18B9A068FF +:10F22000FEF7B7FA10B100F07FFB2DE0606890F8B0 +:10F2300074017F25801F062828BFBDE8F081DFE824 +:10F2400000F003191930443EA748F7F726FF0028BD +:10F2500008BF2570F7F708FF606890F8760130B1B5 +:10F26000F7F7C8FEF7F723F9606880F87671F7F7CB +:10F2700091FD20E09C48F7F710FF002808BF25709B +:10F28000F7F7F2FE00F033FB102880F0DE80DFE8B5 +:10F2900000F036B6BFC3DCDC12CCD4DCDCDC249C52 +:10F2A00038699148F7F7F9FE002808BF2570F7F78D +:10F2B000DBFEF7F76FFDBDE8F041FFF7CFB88A48F6 +:10F2C000F7F7EBFE30B9257004E08748F7F7E5FE65 +:10F2D0000028F8D0F7F7C8FE9AE0032002F0CBF838 +:10F2E000002871D000210320FFF759F901221146AF +:10F2F0001046F7F7F3FE61680C2081F87401BDE851 +:10F30000F081606800F5BA75042002F0B4F80028B6 +:10F310007ED00E202870012002F099FCA068616860 +:10F320000078C0F3401081F8990100210520FFF713 +:10F3300036F96E49A0684FF0200CD1F864210378AB +:10F34000527B23F020030CEA42121A430270D1F8D8 +:10F35000640195F82530427B1A4042732820D1F889 +:10F3600064112DE0062002F086F8002850D05F4D91 +:10F370000F2085F87401022002F069FC6068012109 +:10F3800090F8A4210846F7F7A9FEA0686168007804 +:10F39000C0F3401081F8990101210520FFF7FFF823 +:10F3A000D5F864014673A068017821F0200101704E +:10F3B000F8F71AFA002818BFFFDF2820D5F86411E3 +:10F3C00081F85600BDE8F08122E0052002F053F8F4 +:10F3D000F0B101210320FFF7E2F8F8F705FA002861 +:10F3E00018BFFFDF6068012190F8A4210846F7F7F5 +:10F3F00075FE61680D2081F87401BDE8F0816068D8 +:10F40000A0F8A57180F8A77180F87461BDE8F0815B +:10F41000BDE8F04100F018B96168032081F874017B +:10F42000BDE8F041082002F012BC00F05FF961680D +:10F43000072081F87401BDE8F08100F057F9616898 +:10F44000082081F87401BDE8F081FFDFBDE8F0819C +:10F4500070B5254C606890F8741100230C2938D0E1 +:10F4600001220D2944D00E2953D00F291CBFFFDFE4 +:10F4700070BD042002F0EBFB606890F8A4110E2030 +:10F48000F7F701FA606890F8A40110F00C0F14BFB0 +:10F49000282100219620F7F735FDF7F7EFFD60688A +:10F4A000052190F8A451A068FCF7CCFE616881F8B2 +:10F4B000760148B115F00C0F0CBF50255525F6F715 +:10F4C000E2FF2846F7F78CFD61680B2081F8740194 +:10F4D00070BDF7F7D3FD00219620F7F713FD6168A3 +:10F4E000092081F8740170BD74010020F41000201F +:10F4F00090F8A40110F00C0F14BF282100219620D1 +:10F50000F7F700FDF7F7BAFD61680A2081F874018A +:10F51000E9E7A0F8A53180F8A73180F87421002030 +:10F52000FFF7E7FDBDE87040032002F090BB70B527 +:10F53000FC4C606890F874117F25891F062928BF4C +:10F5400070BDDFE801F017321D033D11F548F7F7F4 +:10F55000A4FD002808BF2570F7F786FDF7F71AFC11 +:10F56000BDE87040FEF77ABFEE48F7F796FD60BB46 +:10F5700025702AE0EB48F7F790FDD8B9257019E01F +:10F5800090F8371089B1818E012221F0600140315D +:10F59000818690F8283043B980F8282011F0080FB0 +:10F5A00014BF0720062002F052FBDE48F7F775FD76 +:10F5B0000028E3D0F7F758FDBDE8704000F044B8EC +:10F5C000D848F7F76AFD0028D2D0F7F74DFD6068FC +:10F5D000002100F5C47005F013FDBDE8704000F097 +:10F5E00033B870B5CF4C06460D46012908D0606887 +:10F5F00090F8A4213046BDE87040134602F073BB7A +:10F60000F7F7F7F861680346304691F8A4212946D8 +:10F61000BDE8704002F067BB10B5FEF748FCC1487A +:10F62000406890F82810002918BF10BD012280F80A +:10F63000282090F8340010F0080F14BF072006208F +:10F64000BDE8104002F003BB70B5F7F7BDFCF7F75B +:10F650009CFCF7F79FFBF7F71DFCB24C0025606898 +:10F6600090F8760130B1F7F7C5FCF6F720FF606837 +:10F6700080F876516068022180F87411A0F8A551D5 +:10F6800080F8A751BDE87040002002F0E0BA70B5E4 +:10F69000A44D06460421A868FDF7CCFF044668681F +:10F6A00090F82800A0B901F0C9FE217811F0800F70 +:10F6B00014BF4FF496711E21B4F80120C2F30C025E +:10F6C00012FB01F10A1AB2F5877F28BF814201D2ED +:10F6D000002070BD68682188A0F8A511A17880F885 +:10F6E000A7113046BDE8704001F0C5BE2DE9F041DC +:10F6F0008C4C616891F8A701400908BF012607D02A +:10F70000012808BF022603D0022814BF00260826BD +:10F710000027D1F88021002A38D001F2A51800284E +:10F7200008BF012507D0012808BF022503D0022801 +:10F7300014BF00250825F7F7BBFB98F8000000F080 +:10F740003F084046F7F789F96068294680F89781B5 +:10F75000FF20F7F798F860682A46D0F8801101205A +:10F76000F7F75DFAF7F78AFC0521A068FCF76AFD58 +:10F77000616881F8760148B115F00C0F0CBF502577 +:10F780005525F6F780FE2846F7F72AFC6068D0F882 +:10F790007C01F7F799FB606890F86811022906D0A0 +:10F7A000032904BF90F89001012804D008E090F8E4 +:10F7B0009001022804D1324601210020F7F78EFC87 +:10F7C000606880F8A46180F88571BDE8F0812DE95A +:10F7D000F74F544C0025914660688A4690F87501B1 +:10F7E00000280CBF4FF001084FF00008A068017816 +:10F7F000CE090121FDF71EFF36B1407900F0C000AF +:10F80000402808BF012600D00026606890F87611D5 +:10F81000002963D090F868114FF0000B03291ED126 +:10F8200090F86111002918BF90F87A7117D0FF2F56 +:10F8300018BF082F22D03846FCF7E4F9002818BF7B +:10F840004FF00108002E49D0606890F88601D0B1D1 +:10F85000FCF763FC0546606880F886B13EE0A1686D +:10F86000CA7812F03F0F19BF097911F0010F90F813 +:10F870002B10FF2918BF90F87771D8D176B390F884 +:10F88000850170B12AE03846FCF7F5FB05460121F9 +:10F89000A068FDF7CFFE01462846F8F71DF905469A +:10F8A0001CE0A068C17811F03F0F05D0017911F07C +:10F8B000010F18BF0B2101D14FF005014FF00002DD +:10F8C000FCF705FC616881F8760138B1FCF71AFC99 +:10F8D000FF2803D06168012581F877018AF800507C +:10F8E0000098067089F8008003B0BDE8F08F0D48DD +:10F8F00010B5406890F8371089B1818E012221F04F +:10F9000060014031818690F8283043B980F8282082 +:10F9100011F0080F14BF0720062002F098F902200A +:10F9200010BD0000740100202DE9F04FFF4D83B0A1 +:10F930000024686890F874017F27801F26464FF0E6 +:10F940000108062880F03F82DFE800F003080893F2 +:10F95000FDFC00F01BFC044600F036BAF348F7F754 +:10F960009CFB002808BF2F70F7F77EFBA868FDF707 +:10F97000CFFD044607286AD1A868FDF7A7FF69688C +:10F9800091F89021824262D191F87401062804D145 +:10F99000A868FDF79BFF002836D0686890F87411BE +:10F9A000082904BF90F8A101022813D04FF00301E9 +:10F9B000A868FDF73FFE002849D06968437891F8B0 +:10F9C0003820B2EB131F42D10088498FC0F30B00DF +:10F9D00088423CD100212046FFF706FAB0B38DF8EB +:10F9E00000608DF804608DF80860A868FF24C17875 +:10F9F00011F03F0F1CBF007910F0020F1CD0012046 +:10FA0000FEF71DFA50B117E0A868C17811F03F0F5A +:10FA10001CBF007910F0100FBFD1DBE702AA6946C6 +:10FA200001A8FFF7D4FE686890F859419DF80000DE +:10FA3000002818BF44F0020423469DF808209DF8D2 +:10FA400004109DF8000000F011FA02E0FFE7FFF754 +:10FA50004EFF0446686890F87601002800F0B481F3 +:10FA6000F7F7C8FAF6F723FD686880F8766100F0CA +:10FA7000ABB9A868FDF74CFD8146A9686868CA78EB +:10FA800090F891319A4221D10A7990F892319A42B4 +:10FA90001CD14A7990F893319A4217D18A7990F81B +:10FAA00094319A4212D1CA7990F895319A420DD187 +:10FAB0000A7A90F896319A4208D1097890F898011C +:10FAC000C1F38011814208BF012400D00024F7F760 +:10FAD00061F99648F7F7E1FA002808BF2F70F7F7A9 +:10FAE000C3FAB9F1040F75D1002C73D0686890F88F +:10FAF000481100296ED190F8281021B190F83410E7 +:10FB000011F0100F66D0D0F84C411D21204605F0B1 +:10FB100000FE84F80080686804F1020A04F101091B +:10FB200090F87801FF280FD052464946FCF7ACFA0E +:10FB3000002808BFFFDF99F8000040F0020089F8B4 +:10FB400000001FE049E0FFE0A868FDF70AFD89F822 +:10FB50000000A868FDF7DCFC072804D25146A8681D +:10FB6000FDF7E1FC0EE0A868FDF7D2FC072809D1FB +:10FB70000021A868FDF75EFD0168CAF800108088C2 +:10FB8000AAF8040004F11D01A868FDF70AFD20721F +:10FB9000287804F109097F2808BFFFDF287889F851 +:10FBA00000002F706868618990F8A12162F300015C +:10FBB00041F01A01618184F80C806673FF21A17302 +:10FBC0002175E77690F89711217780F84881072012 +:10FBD00002F03DF8062400F0F7B84FF00208534851 +:10FBE000F7F75BFA002808BF2F70F7F73DFAA8680F +:10FBF000FDF78EFC0446A868FDF768FE082C08BFD8 +:10FC000000287DD1A8684FF00301C27812F03F0FA1 +:10FC100076D0007931EA000072D1686800F5BA77D1 +:10FC200090F86101002814BFBE79FE784FF00009FA +:10FC3000B87878B1FCF766FA0446FF280AD0014686 +:10FC4000A868401DFCF737FAB4420CBF4FF0010919 +:10FC50004FF000090021A868FDF7ECFC062207F12F +:10FC60001D0105F0ABFC40B9A868FDF77AFC97F8D8 +:10FC70002410884208BF012000D0002059EA000962 +:10FC800060D0686800F5AD7490F859A1787838B103 +:10FC90003046FCF726FB00281CBF04464FF0010A43 +:10FCA0000027A86801784FEAD11B0121FDF7C2FCAB +:10FCB000BBF1000F07D0407900F0C000402808BF1A +:10FCC0004FF0010B01D04FF0000B0121A868FDF7A8 +:10FCD000B1FC0622214605F071FC30B9A868FDF799 +:10FCE0004DFC504508BF012401D04FF000043BEA11 +:10FCF000040018BFFF2E0FD03046FCF7BCF900E01F +:10FD000020E0060008D00121A868FDF793FC014619 +:10FD10003046F7F7E1FE074644EA070019EA000F0C +:10FD200010D06868012100F5C47001E07401002062 +:10FD300005F066F94FF001084046FFF7DAF90520B3 +:10FD400001F085FF44463FE00224F848F7F7A5F9A3 +:10FD5000002808BF2F70F7F787F9A868FDF7D8FBD0 +:10FD60000646A868FDF7B2FD072E08BF00282BD174 +:10FD7000A8684FF00101C27812F03F0F24D0027939 +:10FD8000914321D1696801F5BA760021FDF752FC53 +:10FD9000062206F11D0105F011FCA8B9A868FDF7BF +:10FDA000E0FB96F8241088420ED16868012100F526 +:10FDB000C47005F025F9FF21022000F009F80028A1 +:10FDC00018BF032400E0FFDF03B02046BDE8F08F3A +:10FDD0002DE9F041D54C02460025606890F8A1312C +:10FDE0000BB3A0684FF000064FF00107C37813F083 +:10FDF0003F0F1CBF007910F0100F1BD00020FEF742 +:10FE000056F8606890F83400C0F3411002281BD007 +:10FE10000220FFF73CFC88B16068012580F8906102 +:10FE2000F6F7B8FF1FE0002A14BF0223012380F871 +:10FE3000A131D6E71046FEF73AF805E06068818EFA +:10FE400021F0600140318186606890F8281051B936 +:10FE500080F8287090F8340010F0080F14BF0720C5 +:10FE6000062001F0F4FE2846BDE8F0812DE9F047B8 +:10FE7000AE4C05461F4690460E46A068FDF726FD8F +:10FE8000002800F0CF80012805D0022800F00C8166 +:10FE9000BDE8F0472BE5A0680921C27812F03F0FBA +:10FEA00000F040810279914340F03C81616891F813 +:10FEB0006811032906D012F0020F08BFFF2119D0E4 +:10FEC00065B116E00021FDF7B5FB61680622D1F8A7 +:10FED00064111A3105F072FB50BB1EE0FDF74EFBBA +:10FEE00005460121A068FDF7A5FB2946F6F767FD49 +:10FEF00018B13946012000F039B9606890F86901FD +:10FF0000032818BF022840F00D81002E1CBFFE21DF +:10FF1000012040F02B8100F005B9A068FDF721FB1E +:10FF20006168D1F86411497E884208BF012600D07B +:10FF30000026A068C17811F03F0F05D0017911F0BB +:10FF4000020F01D05DB338E0616891F86A21012A9F +:10FF500001D0A6B119E0C6B90021FDF76BFB6168BD +:10FF60000268D1F86411C1F81A208088C883A0689B +:10FF7000FDF7F7FA6168D1F86411487605E091F869 +:10FF8000770191F87A1188424BD1606800F5C4700E +:10FF900005F07AF8002844D00F20BDE8F087B8F1CA +:10FFA000000F0CD0FDF7EAFA05460121A068FDF725 +:10FFB00041FB2946F6F703FD08B1012200E00022CB +:10FFC000616891F86A01012807D040B92EB991F80B +:10FFD000773191F87A118B4201D1012100E00021A3 +:10FFE0000A421ED0012808BF002E13D14FF0000195 +:10FFF000A068FDF71FFB61680268D1F86411C1F8C1 +:020000040002F8 +:100000001A208088C883A068FDF7ABFA6168D1F830 +:1000100064114876606800F5C47005F035F8002872 +:10002000BAD17FE06068A8464FF0020990F86801F5 +:1000300003282AD0A068C17811F03F0F1BBF0079B8 +:1000400010F0020F002001204FF0FF05A8B14FF083 +:100050000100FDF7F4FE002804BF3D46B8F1000F93 +:100060000BD1A068FDF78AFA07460121A068FDF7C9 +:10007000E1FA3946F6F7A3FC50B129460020FFF714 +:10008000A7FE002818BF4FF003094846BDE8F087D7 +:10009000606890F86901032818BF0228F5D1002E86 +:1000A00018BFFE25E9D1F0E7626892F86831032BAA +:1000B00038D0A0684FF0090CC17811F03F0F31D053 +:1000C00001793CEA010C2DD1022B01F0020105D08F +:1000D000002908BFFF2148D03DB345E009B135B143 +:1000E00013E002F5C47004F0CFFFA0B91AE0B8F134 +:1000F000000F1DD0FDF742FA05460121A068FDF76B +:1001000099FA2946F6F75BFC90B1606800F5C47077 +:1001100004F0BAFF30B139460220FDF7C8FE0D20C9 +:10012000BDE8F0870220BDE8F08712E074010020EE +:10013000606890F86901032818BF0228F2D1002EE8 +:10014000F0D04FF0FE014FF00200FFF765FA0220F9 +:10015000E9E7FDF713FA05460121A068FDF76AFA01 +:100160002946F6F72CFC20B139460220FFF754FA55 +:10017000D8E7606890F86901032818BF0228D1D138 +:10018000002E1CBFFE210220F0D1CBE72DE9F84F55 +:100190000027D048F6F781FFCE4C002804BF7F200F +:1001A0002070F6F761FFA068FDF7B2F980460121E3 +:1001B000FEF71AFE61684FF0000B91F8A421012AA6 +:1001C00013D0042A1CBF082AFFDF00F07781606883 +:1001D00090F8760130B1F6F70DFFF6F768F9606830 +:1001E00080F876B13846BDE8F88F0125BA4EB8F1EF +:1001F000080F19D2DFE808F024860418181811FD3A +:100200000546F6F7C7FD002D7AD0606890F86801C2 +:10021000012818BF022858D072E028B191F868016F +:10022000022805D0012850D0F6F7B4FD0627CEE706 +:10023000FF20FEF753F860680C2780F8A1B1C6E7ED +:100240000027002800F0208191F86801022834D0AE +:1002500001283AD00328BAD1A068D1F86421C37824 +:1002600092F81AC0634521D1037992F81BC0634507 +:100270001CD1437992F81CC0634517D1837992F859 +:100280001DC0634512D1C37992F81EC063450DD1DC +:10029000037A92F81FC0634508D1037892F819C019 +:1002A000C3F38013634508BF012300D0002391F8F6 +:1002B0006A1101290DD0D3B1E4E0FF20FEF70EF85A +:1002C00060680C2780F8A15181E7FF20FEF706F84F +:1002D00016E0002B71D102F11A01FDF724F9A06894 +:1002E000FDF73FF96168D1F864114876CAE096F8E5 +:1002F0007A0108287CD096F8771181425DD0C3E05E +:10030000062764E7054691F8750100280CBF4FF0F9 +:1003100001094FF000090027A06810F8092BD20945 +:1003200007D0407900F0C000402808BF4FF0010A14 +:1003300001D04FF0000A91F86801032806D191F826 +:100340006101002818BF91F87A0101D191F8770175 +:100350000090FBF790FE5FEA00082AD00098FBF7B8 +:1003600051FC002818BF4FF00109BAF1000F20D04E +:10037000A06800F109014046F7F7AEFB070060688E +:1003800090F8598118BF48F00208606890F8681129 +:10039000032913D0F6F7FEFC002DB1D0F6F71FFBB2 +:1003A00000280CBF002F404672D000BFFDF796FF1B +:1003B000A6E7606890F85981E7E763E0A168D0F8A4 +:1003C0006401CA78837E9A421FD10A79C37E9A4219 +:1003D0001BD14A79037F9A4217D18A79437F9A4287 +:1003E00013D1CA79837F9A420FD10A7AC37F01E081 +:1003F0004AE05BE09A4208D10978407EC1F380115F +:10040000814208BF4FF0010801D04FF0000896F874 +:100410007701082806D096F87A11884208BF4FF075 +:10042000010A01D04FF0000A2FB9B9F1000F04D032 +:10043000F6F7D5FA08B1012000E000204DB196F89A +:100440006A11012903D021B958EA0A0101D001211A +:1004500000E00021084217D0606890F86A11012975 +:1004600008BFB8F1000F0DD1D0F8640100F11A01F6 +:10047000A068FDF758F8A068FDF773F86168D1F837 +:10048000641148760E27A2E6F6F784FC38E7FFE70A +:10049000606890F86901032818BF02287FF430AF24 +:1004A000BAF1000F18BFFE2080D129E791F8701132 +:1004B000002918BF00283FF4B7AE06E0B8F1070FD7 +:1004C0007FF4B2AE00283FF4AFAEFEF72AFD074638 +:1004D0007DE6000074010020F4100020D0F8E01048 +:1004E00049B1D0E939231A448B691A448A61D0E9A9 +:1004F0003712D16003E0F74AD0F8DC101162D0E97E +:10050000371009B1086170470028FCD000218161D3 +:1005100070472DE9FF4F06460C46488883B040F2ED +:10052000E24148430190E08A002500FB01FA94F87B +:10053000640090460D2822D00C2820D024281ED0FC +:1005400094F8650024281AD000208346069818B134 +:100550000121204602F0B7FE94F8541094F855009B +:10056000009094F8D0200F464FF47A794AB1012ACE +:1005700061D0022A44D0032A5DD0FFDFB5E001201C +:10058000E3E7B8F1000F00D1FFDFD24814F8541FA1 +:10059000243090F83800FCF77EFF01902078F7F7C0 +:1005A000D2F84D4600F2E730B0FBF5F1DFF82493C6 +:1005B000D9F80C0001EB00082078F7F7C4F80146E1 +:1005C00014F85409022816D0012816D040F6340039 +:1005D00008444AF2EF010844B0FBF5F10198D9F85C +:1005E0001C20411A514402EB08000D18012084F828 +:1005F000D0002D1D78E02846EAE74FF4C860E7E711 +:10060000DFF8D092A8F10100D9F80810014300D119 +:10061000FFDFB148B8F1000F016801EB0A0506D011 +:10062000D9F8080000F22330A84200D9FFDF0320E8 +:1006300084F8D00058E094F86420019D242A05D065 +:1006400094F86530242B01D0252A3AD1B4F85820EB +:10065000B4F8F030D21A521C12B2002A31DB94F8EE +:10066000F22072B3174694F8F32002B110460090BE +:10067000022916D0012916D040F6340049F6085256 +:100680008118022F12D0012F12D040F634001044EE +:10069000814210D9081A00F5FA70B0FBF9F0054450 +:1006A0000FE04846EAE74FF4C860E7E74846EEE760 +:1006B0004FF4C860EBE7401A00F5FA70B0FBF9F0B0 +:1006C0002D1AB8F1000F0FD0DFF80882D8F8080013 +:1006D00018B9B8F8020000B1FFDFD8F8080000F23E +:1006E0002330A84200D9FFDF05B9FFDF2946D4F83F +:1006F000D400F3F78CFFC4F8D400B0600020307051 +:100700004FF0010886F80480204602F0CAFEABF1E3 +:100710000101084202D186F8058005E094F8D00076 +:1007200001282FD003207071606A3946009A01F0C9 +:1007300022FBF060069830EA0B0020D029463046B4 +:10074000FCF700FC87B2204602F0ABFEB8420FD89F +:10075000074686F8058005FB07F1D4F8D400F3F7C7 +:1007600056FFB06029463046FCF7ECFB384487B2B0 +:100770003946204602F0A7FDB068C4F8D40007B09F +:10078000BDE8F08F0220CEE72DE9F04106460C4689 +:10079000012001F0D2FAC5B20B2001F0CEFAC0B2AE +:1007A000854200D0FFDF0025082C7DD2DFE804F071 +:1007B0000461696965C98E96304601F0D2FA062156 +:1007C000F2F7E2F8040000D1FFDF304601F0C9FA89 +:1007D0002188884200D0FFDF94F8D00000B9FFDF05 +:1007E000204602F075FA3B4E21460020B560758028 +:1007F000F561FCF7A2FC00F19807606AB84217D9CE +:1008000094F85500F6F786FF014694F854004FF42B +:100810007A72022828D0012828D040F634000844F3 +:100820004AF247310844B0FBF2F1606A0844C51B44 +:10083000214600203561FCF780FC618840F2E242ED +:1008400051439830081AA0F22330706194F8552073 +:1008500094F85410606A01F08EFAA0F29310B0611F +:10086000BDE8F041F4F7BBBE1046D8E74FF4C860CE +:10087000D5E7BDE8F04102F002BCBDE8F041F6F773 +:1008800045BC6FF0040001F058FAC4B2192001F021 +:1008900054FAC0B2844200D0FFDF304601F061FA62 +:1008A0000621F2F771F800E04BE0040000D1FFDF11 +:1008B000304601F056FA2188884200D0FFDF2046FA +:1008C000BDE8F0410122002101F072BAF6F7BEFA4C +:1008D000D3E70000A012002084010020304601F080 +:1008E00040FA0621F2F750F8040000D1FFDF30464D +:1008F00001F037FA2188884200D0FFDF94F8D00059 +:10090000042800D0FFDF84F8D05094F8DA504FF676 +:10091000FF76202D00D3FFDFFB4820F8156094F808 +:10092000DA00F4F754F900B9FFDF202084F8DA0088 +:100930002046FFF7D3FDF5480078BDE8F041E2F727 +:10094000EBBAFFDFBDE8F08170B5EF4C0025483C05 +:1009500084F82C50E07868B1E570FEF7B6F920789D +:10096000042803D0A06AFFF7B9FDA562E748007824 +:10097000E2F7D2FABDE8704001F02BBA70B5E24C54 +:100980000146483C206AF4F75DFE6568A27890FB5A +:10099000F5F172B140F27122B5FBF2F292B2E36B63 +:1009A00001FB02F6B34202D901FB123200E0002241 +:1009B000E2634D43002800DAFFDF2946206AF3F79F +:1009C00026FE206270BD2DE9F05FFEF7D1F9824668 +:1009D000CD486C3800F1240881684646D8F81C00E0 +:1009E000F3F715FE0146306AF4F72CFE4FF00009CC +:1009F000074686F839903C464FF423754E461CE076 +:100A00000AEB06000079F6F785FE4AF2B1210144AF +:100A10004FF47A70B1FBF0F108EB86024046926821 +:100A200011448C4207D3641A90F83910A4F523744A +:100A3000491C88F83910761CF6B298F83A00B04292 +:100A4000DED8002C0FDD98F83910404608EB810104 +:100A50008968A14207D24168C91BA94200D90D4645 +:100A60006C4288F8399098F83960C3460AEB06085A +:100A700098F80400F6F74EFE01464AF2B120014410 +:100A80004FF47A7AB1FBFAF298F80410082909D0E9 +:100A9000042909D00020131804290AD0082908D0F5 +:100AA000252007E0082000E0022000EB400028306D +:100AB000F1E70F20401D4FF4A872082913D0042934 +:100AC00014D0022915D04FF0080C282210FB0C205E +:100AD000184462190BEB860302449868D846824298 +:100AE0000BD8791925E04FF0400CEFE74FF0100CD0 +:100AF000ECE74FF0040C1822E8E798F8392098F852 +:100B00003A604046B24210D2521C88F839203C1B51 +:100B10009868621984180846F6F7FCFD4AF2B1217C +:100B20000144B1FBFAF0011903E080F83990D8F8DC +:100B30000410D8F82000BDE8F05FF3F768BD2DE998 +:100B4000FE4F14460546FEF713F9DFF8BCB10290DC +:100B5000ABF1480B58469BF839604FF0000A0BEB9D +:100B600086018968CBF84010ECB304460078002772 +:100B7000042827D0052840D0FFDFA0463946A069C9 +:100B8000F3F745FD0746F4F741F881463946D8F8B2 +:100B90000440F4F757FD401E90FBF4F0C14361435D +:100BA0003846F3F734FD0146C8F820004846F4F70C +:100BB00049FD002800DDFFDF012088F8140088F8D7 +:100BC00013008FE0D4F81890D4F8048001F06BF98A +:100BD000070010D0387800B9FFDF796978684A4695 +:100BE0000844414600E00EE001F045F90746404563 +:100BF000C3D9FFDFC1E75746BFE7A06A01F0F6F8A7 +:100C000040F6B837B9E7016A0BEB46000191C08D99 +:100C100008B35C46DBF81800FFF7B0FE6168206A95 +:100C2000F3F7F5FC074684F839A0019CD846204626 +:100C3000DBF81810F4F706FD814639462046F4F734 +:100C400001FDD8F80420B9FBF2F3B0FBF2F08342C7 +:100C500043D0012142E0F3F7D9FFFFF78FFEFFF702 +:100C6000B2FE9BF83910DBF804900BEB81010746CC +:100C7000896800913946DBF82000F4F7E3FC002492 +:100C80008046484504DB98FBF9F404FB09F41BE0BB +:100C9000002059469BF8392008E000BF01EB800393 +:100CA00004F523749B68401C1C44C0B28242F5D8F2 +:100CB00052B10120F6F72EFD4AF2B12101444FF462 +:100CC0007A70B1FBF0F004440099A8EB04000C1A10 +:100CD00000D5FFDFCBF84040A7E7002188F81410CB +:100CE00088F813A09BF802005C46B8B13946206A28 +:100CF000F4F7A8FC0146E26B40F2712042438A42BD +:100D000006D2C4F840A009E00C13002080010020A6 +:100D1000206C511A884200D308462064AF6085F8E1 +:100D200000A001202871029F94F839003F1DC05D8A +:100D3000F6F7F0FC4AF23B5101444FF47A70B1FBF4 +:100D4000F0F0216CFB300844E8602078042808D1DA +:100D500094F8390004EB4000C08D0A2801D203202A +:100D600000E00220687104EB4600C08DC0B1284647 +:100D70006168FCF7E7F882B20020761C0CE000BF47 +:100D800004EB4003B042D98D114489B2D98501D317 +:100D9000491CD985401CC0B294F83A108142EFD268 +:100DA000A868A061E06194F8390004EB4000C18DAF +:100DB000491CC18594F83900C05D082803D0042877 +:100DC00003D000210BE0082100E0022101EB4101EA +:100DD00028314FF4A872082804D0042802D0022831 +:100DE00007D028220A44042805D0082803D025214A +:100DF00002E01822F6E70F21491D08280CD004282C +:100E00000CD002280CD0082011FB0020216C884255 +:100E100008D20120BDE8FE8F4020F5E71020F3E75F +:100E20000420F1E70020F5E770B5FB4C061D14F82F +:100E3000392F905DF6F76EFC4FF47A7100F2E730CF +:100E4000B0FBF1F0D4F8071045182078805DF6F774 +:100E50004FFC2178895D082903D0042903D00022A2 +:100E60000BE0082200E0022202EB420228324FF49B +:100E7000A873082904D0042902D0022907D0282306 +:100E80001344042905D0082903D0252202E01823A1 +:100E9000F6E70F22521D08290AD004290AD0022998 +:100EA0000AD0082112FB0131081A281A293070BD16 +:100EB0004021F7E71021F5E70421F3E7FEB50446EA +:100EC0000F46012000F039FFC5B20B2000F035FFBE +:100ED000C0B2854200D0FFDF01260025CE48082F92 +:100EE00050D2DFE807F004304747434F4F4C0446E9 +:100EF000467406744078002819D1FDF739FF009533 +:100F000094F839108DF808104188C90410D0606C2D +:100F1000019003208DF80900BF4824388560C56121 +:100F200025746846FDF73FFC002800D0FFDFFEBDBA +:100F3000FFF77AFF0190207D10B18DF80950EBE7A3 +:100F40008DF80960E8E70446407840B1207C08B994 +:100F5000FDF790FE6574BDE8FE40F3F761BDA67431 +:100F6000FDF736FD0028E2D0FFDFFEBDBDE8FE4004 +:100F7000F6F7CCB82046BDE8FE4000F09DBFBDE8C6 +:100F8000FE40E1E4FFDFFEBDA34950B101228A70BB +:100F90004A6840F27123B2FBF3F202EB0010C8631F +:100FA00070470020887070472DE9F05F894640F255 +:100FB0007121994E484300250446706090462F46A3 +:100FC000D0074AF2B12A4FF47A7B0FD0B9F800006B +:100FD0004843B0600120F6F79DFB00EB0A01B1FB2E +:100FE000FBF0241AB7680125A4F523745FEA0870A2 +:100FF00016D539F8151040F27120414306EB8508EB +:101000000820C8F80810F6F785FB00EB0A01B1FBD1 +:10101000FBF0241AD8F80800A4F5237407446D1CCB +:10102000A7421AD9002D18D0391BB1FBF5F0B268D0 +:10103000101AB1FBF5F205FB1212801AB060012004 +:1010400009E000BFB1FBF5F306EB80029468E31AF8 +:10105000401CC0B29360A842F4D3BDE8F09F2DE9D4 +:10106000F0416D4C00262078042804D02078052813 +:1010700001D00C2066E401206070607C002538B14E +:10108000EFF3108010F0010F72B610D001270FE0BF +:10109000FDF76EFE074694F82400F4F713F97888FC +:1010A000C00411D000210320FDF767FE0CE00027EB +:1010B000607C38B1A07C28B1FDF7DCFD6574A574B7 +:1010C000F3F7AEFC07B962B694F82400F4F747FBD7 +:1010D00094F82C0030B184F82C502078052800D0EA +:1010E000FFDF0C26657000F074FE30462AE44A48A3 +:1010F00010B5007808B1FFF7B2FF00F00DFF4649C8 +:1011000000202439086210BD10B5444C58B10128A4 +:1011100007D0FFDFA06841F66A01884200D3FFDFF5 +:1011200010BD40F6C410A060F4E73C4908B5087053 +:10113000394900200870487081F82C00C870087484 +:10114000487488742022886281F8242024394870E9 +:101150004FF6FF7211F16C0121F81020401CC0B253 +:101160002028F9D30020FFF7CFFFFFF7C0FF1020A2 +:10117000ADF80000012269460420FFF715FF08BD05 +:101180007FB5254C05460E46207810B10C2004B0E2 +:1011900070BD95F8552095F85410686A00F0FEFE71 +:1011A000C5F8E400A56295F8D00000B1FFDF1A4948 +:1011B00000202439C86105212170607084F82C005A +:1011C000014604E004EB4102491CD085C9B294F801 +:1011D0003A208A42F6D284F839003046FFF7D4FE2E +:1011E0000F48F3F798FC84F82400202800D1FFDF93 +:1011F000F3F70CFDA06194F8241001226846FFF774 +:101200009EFC00B9FFDF94F824006946F3F748FF1D +:1012100000B9FFDF0020BAE7C412002080010020DF +:10122000BD0E0200F84810B5007808B1002010BDCE +:101230000620F1F743FB80F0010010BDF8B5F24D38 +:101240000446287800B1FFDF002000902378024692 +:10125000DE0701466B4605D06088A188ADF8001016 +:10126000012211462678760706D5E088248923F8DE +:10127000114042F00802491C491E85F83A101946EF +:10128000FFF792FE0020F8BD1FB511B1112004B088 +:1012900010BDDD4C217809B10C20F8E70022627006 +:1012A00004212170114604E004EB4103491CDA8556 +:1012B000C9B294F83A308B42F6D284F83920FFF75D +:1012C00063FED248F3F727FC84F82400202800D1DD +:1012D000FFDF00F0E8FD10B1F3F798FC05E0F3F74D +:1012E00095FC40F6B831F3F792F9A06194F8241018 +:1012F00001226846FFF723FC00B9FFDF94F82400C1 +:101300006946F3F7CDFE00B9FFDF0020BFE770B5F7 +:10131000BD4CA16A0160FFF7A2FE050002D1A06AE0 +:10132000FFF7DCF80020A062284670BD7FB5B64C00 +:101330002178052901D00C2029E7B3492439C86058 +:10134000A06A00B9FFDFA06A90F8D00000B1FFDF0B +:10135000A06A90F8DA00202800D0FFDFAC48F3F74D +:10136000DAFBA16A0546202881F8DA000E8800D34E +:10137000FFDFA548483020F81560A06A90F8DA0031 +:10138000202800D1FFDF002301226846A16AFFF771 +:10139000C0F8A06A694690F8DA00F3F781FE00B958 +:1013A000FFDF0020A062F2E69749243948707047B9 +:1013B00010B540F2E24300FB03F4002000F0EEFD24 +:1013C000844201D9201A10BD002010BD70B50D4611 +:1013D000064601460020FBF7B0FE044696F855008D +:1013E000F6F798F9014696F854004FF47A720228FD +:1013F00015D0012815D040F6340008444AF2473190 +:101400000844B0FBF2F1708840F271225043C1EB06 +:101410004000A0F22330A54206D2214605E0104646 +:10142000EBE74FF4C860E8E72946814204D2A542C1 +:1014300001D2204600E02846706270BD70B5F5F715 +:10144000D8F90446F6F754F901466F482438826803 +:101450004068101A0E18204600F066FC054620462B +:10146000F6F758F9281A4FF47A7100F2E730B0FB1A +:10147000F1F0304470BD70B50546FDF779FC624966 +:10148000007824398C689834072D30D2DFE805F0D5 +:10149000043434252C34340014214FF4A873042868 +:1014A00010D00822082809D02A2102280FD011FBC9 +:1014B000024000222823D118441819E0402211FBD1 +:1014C0000240F8E7102211FB02402E22F3E704222B +:1014D00011FB024000221823EDE7282100F03CFC1C +:1014E000044404F5317403E004F5B07400E0FFDF58 +:1014F0004548006CA04201D9012070BD002070BD9C +:1015000070B5414C243C607870B1D4E90451284650 +:10151000A268FBF742FD2061A84205D0A169401BEB +:101520000844A061F4F75BF82169A068884201D8FB +:10153000207808B1002070BD012070BD2DE9F04F6A +:10154000074685B016460D461C461846F6F7D0F8F5 +:1015500007EB45014718204600F0E6FB4AF2C5714B +:101560004FF47A7908444D46B0FBF5F0384400F169 +:101570006008254824388068304404902046F6F7F7 +:10158000B7F8A8EB0007204600F0CEFB0646204641 +:10159000F6F7C0F8301AB0FBF5F03A1A18252820F3 +:1015A0004FF4C8764FF4BF774FF0020B082C34D0BD +:1015B000042C2FD00021022C32D0082311F1280155 +:1015C00003EB830301EB83010A444FF0000A082C6C +:1015D0002ED0042C27D00021022C2ED00546082026 +:1015E00001F5B07100EB00102844814231D2082C83 +:1015F00029D0042C24D00020022C27D00821283008 +:1016000001EB011132E00000C4120020BD0E020007 +:101610008907020039461023D2E731464023CFE73D +:1016200004231831CCE73D4640F2EE311020D9E7D3 +:1016300035464FF435614020D4E70420B431D1E77A +:1016400038461021DCE730464021D9E70421183024 +:10165000D6E7082C4ED0042C49D00020022C4CD0C8 +:1016600008212830C1EBC10303EB411108441518D0 +:101670002821204600F070FB05EB4000082C42D0EA +:10168000042C3DD00026022C3FD0082116F128065C +:1016900001EB811106EB810146180120FB4D8DF80D +:1016A00004008DF800A08DF805B0E86906F2272641 +:1016B0000499F2F7ACFFCDE902062046F6F72AF8C6 +:1016C0004AF23B510144B1FBF9F0301AFB3828646F +:1016D0000298C5F84480E86195F824006946F3F75C +:1016E000DFFC002800D1FFDF05B0BDE8F08F3846F1 +:1016F0001021B7E730464021B4E704211830B1E7A4 +:101700003E461021C4E74021C2E704211836BFE756 +:101710002DE9FE4F04461D46174688464FF0010A44 +:101720001846F5F7E5FFD94E0146243E07EB48027F +:10173000B068204410440F18284600F0F5FA4FF422 +:101740007A7BD84600F6FB00B0FBF8F0384400F195 +:1017500020092846F5F7CCFFB2680146A9EB020044 +:10176000001B471A284600F0DFFA06462846F5F720 +:10177000D1FF311AB1FBF8F03A1A182628204FF49D +:10178000C8774FF4BF78082D2BD0042D26D0002128 +:10179000022D29D00823283103EB830301EB8301B9 +:1017A0000A44082D28D0042D21D00021022D28D054 +:1017B0000646082001F5B07100EB0010304481426C +:1017C0002BD2082D23D0042D1ED00020022D21D095 +:1017D0000821283001EB011108442CE04146102378 +:1017E000DAE739464023D7E704231831D4E74646E1 +:1017F00040F2EE311020DFE73E464FF435614020E5 +:10180000DAE70420B431D7E740461021E2E7384652 +:101810004021DFE704211830DCE7082D4CD0042DEF +:1018200047D00021022D4AD008202831C0EBC00348 +:1018300003EB4010084416182821284600F08CFAC3 +:1018400006EB4000082D40D0042D3BD00027022D90 +:101850003DD0082117F1280701EB811107EB810129 +:10186000451805F596750C98F5F754FF4AF23B516B +:101870000144B1FBFBF0854EFB30A6F12407316C2F +:1018800004F1FB020844B9684B191A44824228D972 +:10189000621911440D1AFB35E1F7F8F9B9680844EB +:1018A00061190844B0F1807F36D2642D12D26420D1 +:1018B00011E041461020B9E739464020B6E7042040 +:1018C0001831B3E747461021C6E74021C4E7042199 +:1018D0001837C1E72846F3F7DCFEE8B1306C28443E +:1018E0003064E1F7D3F9B968293821440844CDE9D7 +:1018F000000996F839008DF8080002208DF80900DB +:101900006846FCF750FF00B1FFDFFDF761F800B15A +:10191000FFDF5046BDE8FE8F4FF0000AF9E71FB524 +:1019200000F042FB594C607880B994F824100022F2 +:101930006846FFF704F938B194F824006946F3F7D4 +:10194000AFFB18B9FFDF01E00120E070F3F768F8A2 +:1019500000206074A0741FBD2DE9F84FFDF708FA50 +:101960000646451CC07840090CD001280CD002283E +:101970000CD000202978824608064FF4967407D4CC +:101980001E2006E00120F5E70220F3E70820F1E73A +:101990002046B5F80120C2F30C0212FB00F7C8097B +:1019A00001D010B103E01E2401E0FFDF0024FFF7A7 +:1019B00045FDA7EB00092878B77909EB0408C0F3C7 +:1019C000801010B120B1322504E04FF4FA7501E027 +:1019D000FFDF00250C2F00D3FFDF2D482D4A30F804 +:1019E0001700291801FB0821501CB1FBF0F5F4F792 +:1019F00000FFF5F78FFE4FF47A7100F27160B0FBD3 +:101A0000F1F1A9EB0100471BA7F15900103FB0F518 +:101A1000237F11D31D4E717829B9024653462946BA +:101A20002046FFF78BFD00F0BFFAF2F7F9FF002028 +:101A30007074B074BDE8F88F307800905346224639 +:101A400029463846FFF764FE0028F3D10121022021 +:101A5000FDF793F9BDE8F84F61E710B50446012999 +:101A600003D10A482438007830B1042084F8D0002B +:101A7000BDE81040F2F7D4BF00220121204600F05B +:101A800097F934F8580F401C2080F1E7C412002069 +:101A9000385D02003F420F002DE9F0410746FDF797 +:101AA00067F9050000D1FFDF29783846FBF7F3FC22 +:101AB000F84C0146A4F12406E069B268024467B319 +:101AC0002878082803D0042803D000270BE0082337 +:101AD00000E0022303EB430728374FF4A8730828DC +:101AE00004D0042802D002280FD028233B44082821 +:101AF0000DD004280DD002280DD00820C0EBC0075F +:101B000007EB40101844983009E01823EEE7402016 +:101B1000F4E71020F2E70420F0E74FF4FC701044E3 +:101B2000471828783F1DF5F7F5FD024628784FF451 +:101B30007A7102281DD001281DD040F634001044CF +:101B40004AF2EF021044B0FBF1F03A1AA06A40F2F8 +:101B5000E241B0464788D0304F43316A81420DD0D0 +:101B60003946606B00F087F90646B84207D9FFDFB7 +:101B700005E00846E3E74FF4C860E0E70026C64802 +:101B80008068864207D2A16A40F2712248884243A7 +:101B900006EB420604E040F2E240B6FBF0F0A16A38 +:101BA000C882A06A297880F85410297880F85510E6 +:101BB00005214175C08A6FF41C71484306EB400053 +:101BC00040F63541C8F81C00B0EB410F00D3FFDFF1 +:101BD000BDE8F08110B5052937D2DFE801F005092D +:101BE000030D3100002100E00121BDE8104034E781 +:101BF000032180F8D01010BD0446408840F2E24135 +:101C00004843A549091D0860D4F8F8000089E0821E +:101C1000D4F8F80080796075D4F8F80040896080C5 +:101C2000D4F8F8008089A080D4F8F800C089E0805A +:101C30002046A16AFFF7CAFB022084F8D00010BD3D +:101C4000816ABDE81040FFF7C1BBFFDF10BD70B572 +:101C5000904C243C0928A1683FD2DFE800F0050B36 +:101C60000B15131538380800BDE8704057E6BDE87D +:101C7000704071E6022803D00020BDE870400BE7F9 +:101C80000120FAE7E16070BD032802D005281CD0CE +:101C900000E0E1605FF0000600F086F97D4D012074 +:101CA00085F82C0085F83860A86AE9690026C0F834 +:101CB000D41080F8D060E068FFF738FB00B1FFDF98 +:101CC000F2F7AEFE6E74AE7470BD0126E4E77248A2 +:101CD0000078BDE87040E1F71FB9FFDF70BD6D49C6 +:101CE00024394860704770B56A4D0446243DB1B14F +:101CF0004FF47A76012903D0022905D0FFDF70BDA9 +:101D00001846F5F741FD05E06888401C68801046DC +:101D1000F5F719FD00F2E730B0FBF6F0201AA860E5 +:101D200070BD5C4800787047082803D0042801D0B3 +:101D3000F5F7F0BC4EF628307047002804DB00F1C0 +:101D4000E02090F8000405E000F00F0000F1E02032 +:101D500090F8140D4009704710F00C0000D00846B0 +:101D6000704710B50446202800D3FFDF49484830AB +:101D700030F8140010BD70B505460C461046F5F756 +:101D8000C9FC4FF47A71022C0DD0012C0DD040F615 +:101D9000340210444AF247321044B0FBF1F02844B8 +:101DA00000F2931070BD0A46F3E74FF4C862F0E703 +:101DB0001FB513460A46044601466846FEF7A9FBCE +:101DC00094F8DA006946F3F76BF9002800D1FFDFD9 +:101DD0001FBD70B52F4C0025257094F82400F2F734 +:101DE000F6FE00B9FFDF84F8245070BD2DE9F04104 +:101DF000050000D1FFDF274A0024243AD5F8E4602B +:101E00002046631E116A08E08869B04203D39842F5 +:101E100001D203460C460846C9680029F4D104B92A +:101E200004460021C5F8E040D035C4B1E068E56063 +:101E3000E86000B105612E698846A96156B1B069B4 +:101E400030B16F69B84200D2FFDFB069C01BA86132 +:101E5000C6F818800F4D5CB1207820B902E0E96027 +:101E60001562E8E7FFDF6169606808446863AFE610 +:101E7000C5F83480ACE610B50C4601461046F3F7C1 +:101E8000E1FB00280ADA211A491EB1FBF4F101FB3B +:101E9000040010BDC41200208001002090FBF4F16A +:101EA00001FB1400F5E74648016A002001E00846FE +:101EB000C9680029FBD170477FB504466FF0040064 +:101EC000FFF73BFFC5B21920FFF737FFC0B28542CD +:101ED00000D0FFDFFCF74CFF4088C00407D0012191 +:101EE0000320FCF74AFF37480078E1F715F8002295 +:101EF00021466846FEF723FE38B169462046F3F7CF +:101F0000CFF8002800D1FFDF7FBD2D49012024310B +:101F1000C870FEF719FD7FBD2DE9FE43284D012055 +:101F2000287000264FF6FF7420E00621F0F72CFD04 +:101F3000070000D1FFDF97F8DA00D037F3F70FFC86 +:101F400007F80A6BA14617F8DA89B8F1200F00D319 +:101F5000FFDF1B4A6C3222F8189097F8DA00F2F78C +:101F600036FE00B9FFDF202087F8DA006946062038 +:101F7000F0F793FC50B1FFDF08E0029830B190F821 +:101F8000D01019B10088A042CFD104E06846F0F724 +:101F900062FC0028F1D02E70BDE8FE8310B5FFF77B +:101FA000EAFE00F5C87074E705480021243090F877 +:101FB000392000EB4200C18502480078E0F7ACBF51 +:101FC000A012002080010020FA490C28896881F8BD +:101FD000CB001ABF1328182870474FF000021128B1 +:101FE00010D0072808BF704715280BD001281ABF4A +:101FF000002802287047A1F884204FF0010081F8E2 +:1020000088007047A1F88A20704770B5E94CA16834 +:102010000A88A1F83E2181F83C0191F8540001287A +:1020200008BF012508D0022808BF022504D00428D3 +:1020300016BF08280325FFDFA06880F8405190F8FC +:102040005500012808BF012508D0022808BF022535 +:1020500004D0042816BF08280325FFDFA0684FF02E +:10206000010180F8415180F83A114FF0000180F8E9 +:102070000E11E078BDE87040E0F74EBFCD4A01296F +:1020800092681BD0002302290FD0032922D030B33D +:1020900001282FD0032818BF704792F86400132836 +:1020A0001CBF1628182805D1704792F8CB000028CD +:1020B00008BF7047D2F8F8000370704792F8CB0061 +:1020C000012808BF704700BFD2F8FC000178491E04 +:1020D0000170704792F8CB000328EBD17047D2F81B +:1020E000F800B2F858108288891A09B20029A8BFEE +:1020F00003707047B2F85800B2F80211401A00B2EB +:102100000028E1DA70472DE9F041AA4C00260327A8 +:10211000D4F808C0012590B12069C0788CF8CA00B5 +:1021200005FA00F010F4000F08BFFFDFA06880F888 +:102130006470A0F8846080F88850BDE8F0810023C6 +:102140009CF8652019460CF15800FAF791FE00281A +:1021500004BF6570BDE8F0816078002818BFBDE855 +:10216000F0812069C178A06880F8C91080F8657096 +:10217000A0F88A6080F88C50BDE8F08170B58D4C75 +:1021800084B0207910F0010F04BF04B070BD206945 +:1021900000230521C578A06890F864205830FAF72C +:1021A00067FE002818BF062D09D026DC022D1CBFB3 +:1021B000042D052D03D0607840F008006070607831 +:1021C00000281CBF04B070BD2069FBF719FC002873 +:1021D00000F01B832069C078801E162880F01583CC +:1021E000DFE800F011F18CB0DF2FF1F0F17FEFDCD0 +:1021F000F1F1F1CFEEEDECEBEAE70B2D1CBF0D2D6D +:10220000112DD8D1DBE7A0684FF000034FF001019A +:1022100090F8672000F15800FAF72AFE002840F0F5 +:1022200067832069FBF750FCA16881F8F60007205E +:1022300081F86700002081F88C0081F8880000F0A8 +:1022400057BBA0680921002390F864205830FAF7A2 +:102250000FFE18B120690079122812D0A0680A2157 +:10226000002390F864205830FAF702FE18B1206974 +:10227000007914281DD020690079162840F0388391 +:1022800021E0A0680125002390F86420092158303E +:10229000FAF7EEFD002808BF657000F0298360782A +:1022A000002840F02583A16881F87C0081F888002F +:1022B00044E0A168002081F86400A1F8840081F85E +:1022C000880000F045BAA06890F864101F2940F01B +:1022D0000F83002180F8641080F888101A2000F025 +:1022E00005BBA06890F864100F295FD161780029C0 +:1022F00040F0FE8280F8691012213EE0A06890F85C +:102300006410132952D16178002940F0F182D0F88D +:10231000F81000884988814218BFFFDFA068D0F814 +:10232000F80000F126012069FBF7FBFBA06800F133 +:10233000C4012069FBF7FDFBA168162081F8640049 +:1023400000F0D6BAA26892F8640016282ED1607800 +:10235000002840F0CD82D2F8F80002F1B00300F17D +:102360001E0100220E30FAF7FDFCA0680021C0E932 +:102370002811012180F86910182180F8641000F0FC +:10238000B7BA2069FBF755FC032840F0B1822069F9 +:10239000FBF753FC01F02DFC00F0AABA206900798C +:1023A000F8E7A06890F864101A290DD0022000F018 +:1023B000D6B95AE28C010020D3E19FE140E10EE161 +:1023C00023E14DE0BEE0C6E16178002940F0908253 +:1023D000002580F88D5080F88850D0F8F8100088DB +:1023E0004988814218BFFFDFA068D0F8F8100D704F +:1023F000D0F844110A78002A18BFFFDF2BD190F8DB +:102400008E207AB180F88E500288CA80D0F84411AC +:102410000D71D0F844210E211170D0F844210188AB +:10242000518010E00288CA80D0F844110D71D0F8B4 +:10243000442101211172D0F844210D211170D0F8EE +:102440004421018851800088F0F7D0FBF0F768F84C +:10245000E078E0F761FDA06880F8645000F048BAC9 +:10246000A0680023194690F865205830FAF700FD5F +:1024700048B9A0680023082190F864205830FAF782 +:10248000F7FC00287ED06078002840F03182A068F8 +:1024900090F8900010F0020F14D12069FBF74CFB6C +:1024A000A16881F891002069B0F80520A1F8922078 +:1024B000B0F80700A1F8940091F8900040F00200F5 +:1024C00081F89000A06890F8901011F0010F12D1DF +:1024D00090F86520002319465830FAF7C9FC002807 +:1024E00008BFFFDF0121A06880F8651080F88C101C +:1024F0000021A0F88A10A06890F86410012907D183 +:10250000002180F8641080F88810E078E0F704FD7E +:10251000A168D1F8F800098842888A4204BF01788E +:10252000042940F0E5814FF000050570E078E0F700 +:10253000F3FCA06890F86410002908BF80F8885068 +:1025400000F0D6B9A0680023072190F86420583025 +:10255000FAF78EFCB0B16078002840F0C98102A97A +:102560002069FBF723FB9DF80800002500F02501FA +:10257000A06880F896109DF8091001F0490180F8D4 +:10258000971000E04EE080F88850D0F8F8100088EE +:102590004988814218BFFFDFA068D0F8F8100D709D +:1025A000D0F844110A78002A18BFFFDF7FF453AF38 +:1025B0000288CA80D0F844110D71D0F84411029AF3 +:1025C0008A60039ACA60D0F84421082111700188FA +:1025D000D0F844014180E078E0F79EFC3BE7A0683A +:1025E0000023092190F864205830FAF741FCC8B163 +:1025F0006078002840F07C81A16881F87C0081F837 +:10260000880081F8640000F073B9A06800231946BF +:1026100090F865205830FAF72BFC18B1607818B1A3 +:1026200000F066B901209AE0A0680021A0F88A10A5 +:10263000012180F88C10022180F8651000F058B953 +:10264000A0680023194690F865205830FAF710FC6E +:1026500088B32069FBF794FA00287CD0A56820692C +:10266000FBF78AFA2887A5682069FBF781FA688753 +:10267000A5682069FBF782FAA887A5682069FBF79F +:1026800079FAE887A06890F864101C2913BF90F8C5 +:102690004E10012180F84E10012907D090F8051145 +:1026A000002904BF90F80411002905D04FF01E0145 +:1026B00080F865101AE04FE04FF01D0180F86510BA +:1026C0000288A0F82A21028FA0F82C21428FA0F8BE +:1026D0002E21828F00F58A71A0F83021C08FC88327 +:1026E0004FF001000875E078E0F716FCA0680021C3 +:1026F000A0F88A10012180F88C10F9E0A06800236E +:102700000A2190F864205830FAF7B2FB20B3206910 +:10271000FBF736FAA8B1A5682069FBF72DFA2887E0 +:10272000A5682069FBF724FA6887A5682069FBF78C +:1027300025FAA887A5682069FBF71CFAE88700F04E +:102740002FFFA068002180F8881080F8641000BF77 +:1027500000F0DFFECCE058E0607840F001006070EF +:10276000C6E0A0680023194690F865205830FAF7B3 +:102770007FFB00283FF456AFA06890F86400232840 +:1027800012BF2428607840F02000E8D06846F5F7B2 +:1027900036F9002808BF002104D0009802A9C078AB +:1027A0008DF80800A06801AB162290F86400FAF7D3 +:1027B00056FE88B1A0689DF80420162180F8EC2010 +:1027C00080F8ED10192180F86510012180F88C1037 +:1027D0000021A0F88A108BE02069FBF7ECF9A0B18A +:1027E0002169087900F00702A06880F85020497933 +:1027F00001F0070180F8511090F80F31002B04BF51 +:1028000090F80E31002B05D024E04FF00000FFF7C8 +:102810007AFC6DE090F855C000F15403944501BF77 +:102820001A788A42012180F87D1013D00288A0F81E +:10283000362190F8502000F58A7180F8382190F800 +:10284000510081F825004FF0010081F82000E07868 +:10285000E0F762FBA068212180F86510012180F873 +:102860008C100021A0F88A1042E0A06890F8640063 +:102870001F287FF471AF2069FBF7A7F988B320699F +:10288000A2680179407901F0070161F30705294643 +:1028900000F0070060F30F21012082F88800002576 +:1028A000A2F88450232082F86400566DD2F81001FB +:1028B000FAF754FDF2B2C1B28A4207BFA16881F8AB +:1028C000F250A26882F8F210C6F30721C0F3072085 +:1028D000814219BFA16881F8F300A06880F8F35025 +:1028E00006E0FFE70120FFF70EFC1E20FFF78DFB3F +:1028F000A068D0E92A12491C42F10002C0E92A125C +:1029000004B070BD2DE9F047FE4D04464FF00007BE +:10291000687808436870287910F0200F284680688E +:1029200018BFA0F87E7004D1B0F87E10491CA0F842 +:102930007E1090F86A10012639B990F864200023BF +:1029400006215830FAF794FA58B3A88810F4006FAB +:1029500007D0A86890F86A10002918BFA0F8767010 +:102960001FD1A868B0F87610491C89B2A0F876107B +:10297000B0F878208A422CBF511A00218288521D5B +:102980008A4228BF80F87C60B0F87610B0F87820D2 +:10299000914206D3A0F8767080F81A61E878E0F7E3 +:1029A000BBFA287910F0600F08D0A86890F868107A +:1029B00021B980F868600121FFF70CF94FF0080891 +:1029C000002C56D16878002851D1287910F0040FD6 +:1029D0000DD0A86890F86400032808BFFFDFA8683E +:1029E00090F86710072904BF2E7080F8677001F017 +:1029F00051F9287910F0080F19D06878B8B9A8688B +:102A0000002190F8CB00FFF739FBA86890F8CB00C5 +:102A1000FE2808BFFFDFFE21A86880F8CB1090F8E1 +:102A20006710082903D10221297080F86770FFF729 +:102A3000A5FBA87810F0080F16D0A8680023052180 +:102A400090F864205830FAF713FA50B185F80180F5 +:102A5000A868D0F8441108780D2808BF0020087035 +:102A600002E00020F8F73EFEA86801F04BF800F005 +:102A7000E1FDA868A14600F1580490F8F40030B9CF +:102A8000E27B002301212046FAF7F2F910B1608DB4 +:102A9000401C60853D21B9F1000F18D1287802282B +:102AA00008BF16200ED0012804BFA86890F8F600D1 +:102AB00008D06878E8B110F0140F1CBF1E202077F2 +:102AC00002D005E0207703E010F0080F02D0217754 +:102AD000E67641E010F0030F03D02A202077E67657 +:102AE0003AE010F0200F08BFFFDF23202077E676C2 +:102AF00032E094F8300028B1A08D411CA185E18D11 +:102B0000884213D294F8340028B1608E411C61864B +:102B1000E18D88420AD2618D208D814203D3AA685B +:102B200092F8F42012B9E28D914203D3222020774B +:102B3000E67611E0217C31B1E18C814228BF84F836 +:102B40001C80C5D206E0E08C062803D33E20207707 +:102B5000E67601E0E07EA0B1277367732774022157 +:102B6000A868FFF737F8A86890F8CB10012904D1BE +:102B7000D0F8FC000178491E0170E878E0F7CCF944 +:102B800003E00021A868FFF725F8BDE8F047F4F757 +:102B900045BF5C4A51789378194314D111460128F6 +:102BA000896809D0107910F0040F03D091F86700FC +:102BB000072808D001207047B1F84800098E8842E4 +:102BC00001D8FEF79DBC0020704770B54D4C0646FD +:102BD0000D46A0883043A08016F0020F04D016F0F6 +:102BE000010F18BFFFDFE56016F0010F18BF256168 +:102BF00016F0020F4FF000024FF0010117D0E878F5 +:102C0000062802D00B280BD011E0A06890F86420B1 +:102C1000182A0CD10022C0E92A2280F86A1006E0A6 +:102C2000A06890F86410122908BF80F86A2016F096 +:102C3000800F1CBF0820A07016F4806F08BF70BD05 +:102C4000A268B2F8580091880844801DE97880B2E3 +:102C5000012908BFA2F802011FD0002904BFD2F841 +:102C6000F810888019D0182917D192F8F21000298D +:102C700004BF92F8F330002B0BD011F00C0F1EBFE5 +:102C800092F8543013F00C0F994204D092F8F310DC +:102C900009B94FF00000A2F8F000E97828460129B0 +:102CA00009D071B1182918BF70BDB2F8F010BDE895 +:102CB0007040FAF79CBFB2F802114172090AA9727A +:102CC00070BDD2F8F81089884173090AA97370BDE4 +:102CD000F0B50C4C85B00026A060A6806670A6708A +:102CE000054626700088F4F761FEA0680088F4F7B6 +:102CF00083FEB5F8D800A168401C82B201F15800EB +:102D000002E000008C010020F9F769FE002818BFDE +:102D1000FFDF95F8650024280AD1B5F85810B5F8FA +:102D2000F000081A00B20028A4BF6078002806D07E +:102D300095F86400242818BF25283BD119E0A06825 +:102D400090F8F210002908BF90F8541080F8541041 +:102D500090F8F310002908BF90F8551080F855102E +:102D60000020FFF752F985F86560A16881F87D6061 +:102D700020E0B5F85810B5F8F000081A00B20028A5 +:102D8000A4BF6078002815D1A06890F8F21000293F +:102D900008BF90F8541080F8541090F8F3100029F0 +:102DA00008BF90F8551080F855100020FFF72DF956 +:102DB00085F86460A5F8D860A06890F8881039B1EB +:102DC000B0F88410B0F88620914224BF05B0F0BD61 +:102DD00090F88C1039B1B0F88A10B0F88620914282 +:102DE00024BF05B0F0BDB0F88220B0F880108A4250 +:102DF00024BF05B0F0BD90F8682092B3B0F87E20F3 +:102E00008A4224BF05B0F0BD90F8CB70FE2F00F0D1 +:102E10001D816846F4F7CDFD002808BFFFDF2221A1 +:102E2000009802F076FC03210098FAF7D1FD009893 +:102E3000017821F0100101703946FAF7EEFD192FE3 +:102E400080F0E280DFE807F0271F1445E0E0E11999 +:102E500070E0E1E163E0E0E0E0D3E1E17A93ACE04F +:102E6000B500B0F87E10062924BF05B0F0BDCBE751 +:102E7000A168009891F8F51003E0A168009891F816 +:102E8000CC100171C1E0A068D0F8FC00411C009892 +:102E9000FAF70FFEB9E0A1680098D1F8F82092790E +:102EA0000271D1F8F82012894271120A8271D1F8A8 +:102EB000F8205289C271120A0272D1F8F820928960 +:102EC0004272120A8272D1F8F810C989FAF7C8FD65 +:102ED0009BE0A068D0F8F800011D0098FAF7F6FD15 +:102EE000A068D0F8F80000F10C010098FAF7F8FD9E +:102EF000A068D0F8F80000F11E010098FAF7F6FD7E +:102F0000A06800F1C0010098FAF7FEFD7DE062695B +:102F100000981178017191884171090A8171518875 +:102F2000C171090A017270E0FE49D1E90001CDE9E1 +:102F3000020102A90098FAF701FE66E0A068B0F865 +:102F400044100098FAF704FEA068B0F84610009804 +:102F5000FAF702FEA068B0F840100098FAF700FEF9 +:102F6000A068B0F842100098FAF7FEFD4DE0A068A6 +:102F7000B0F840100098FAF7F3FDA068B0F84210DE +:102F80000098FAF7F1FDA068B0F844100098FAF73D +:102F9000DFFDA068B0F846100098FAF7DDFD34E0D8 +:102FA000A168009891F81021027191F811114171F6 +:102FB0002BE0A06890F8F300FAF7C7F901460098F3 +:102FC000FAF711FEA16891F8F20010F00C0F1CBF87 +:102FD00091F8541011F00C0F02D0884218BF002055 +:102FE000FAF7B3F901460098FAF7F9FD0DE0A06889 +:102FF00090F8ED100098FAF71AFEA06890F8EC101F +:103000000098FAF718FE00E0FFDFF4F7E5FC00286F +:1030100008BFFFDF0098C178012903D049B1182902 +:103020000FD013E0A168B1F802114172090A817250 +:103030000CE0A168D1F8F81089884173090A8173FE +:1030400004E0A168B1F8F010FAF7D1FDB64800909D +:10305000B64BB74A29463046F8F79AFAA0680023DB +:10306000052190F864205830F9F702FF002804BFCA +:1030700005B0F0BD05B0BDE8F040F8F724B8AD48A4 +:10308000806890F8881029B1B0F88410B0F88620D4 +:10309000914219D290F88C1029B1B0F88A10B0F88A +:1030A0008620914210D2B0F88220B0F880108A4277 +:1030B0000AD290F86820B0F87E001AB1884203D294 +:1030C000F8F7ECBA0628FBD3002001461AE470B5E5 +:1030D0000C46064615464FF4A471204602F03BFB11 +:1030E0002680002D08BFFFDF2868C4F8F800686854 +:1030F000C4F8FC00A868C4F8440170BDEFF74DBDEA +:103100002DE9F0410D4607460621EFF73DFC041E70 +:1031100008BFBDE8F081D4F844110026087858B102 +:103120004A8821888A4207D1092810D00E281DD04C +:103130000D2832D008284CD094F81A01002857D016 +:103140006E701020287084F81A61AF803EE06E70B7 +:1031500009202870D4F84401416869608168A96039 +:103160008089A881D4F8440106702FE00846EFF763 +:103170003DFD0746EFF7E9F9B0B96E700E202870F3 +:10318000D4F8440140686860D4F8440106703846B9 +:10319000EFF7D5F90120BDE8F0810846EFF726FDED +:1031A0000746EFF7D2F910B10020BDE8F0816E704C +:1031B0000D202870D4F84401416869600089288195 +:1031C000D4F8440106703846EFF7B9F90120BDE89C +:1031D000F0816E7008202870D4F84401416882683C +:1031E000C0686960AA60E860D4F844010670EDE741 +:1031F00094F81C01B0B16E701520287094F81C0171 +:103200000028E3D084F81C61D4F81E016860D4F86B +:103210002201A860B4F82601A88194F81C010028B6 +:10322000F0D1D3E794F8280170B16E701D2028709A +:1032300084F82861D4F82A016860D4F82E01A860C7 +:10324000B4F83201A881C1E794F8340140B16E703E +:103250001E20287084F83461D4F836016860B5E720 +:1032600094F8140180B16E701B20287094F814013A +:103270000028ABD084F81461D4F81601686094F883 +:1032800014010028F6D1A1E794F83A01002808BFFC +:10329000BDE8F0816E701620287094F83A0100287D +:1032A00094D000BF84F83A61D4F83C016860B4F867 +:1032B0004001288194F83A010028F3D186E71D4A9D +:1032C0005061D17070472DE9F0470446481E85B221 +:1032D00038BFBDE8F08704F108080126DFF85490F4 +:1032E0004FF0090A5FF00007B4F8D800401CA4F8BA +:1032F000D800B4F87E00401CA4F87E0094F86A0060 +:1033000040B994F864200023062104F15800F9F72D +:10331000AFFD38B3B4F87600401C80B2A4F8760054 +:103320000AE00000505D020005290200932B020014 +:10333000CB2B02008C010020B4F8781081422CBF06 +:103340000A1A0022A3885B1D934228BF84F87C6080 +:10335000884207D3A4F8767084F81A6199F80300BC +:10336000DFF7DAFD94F8880020B1B4F88400401C3F +:10337000A4F8840094F88C0020B1B4F88A00401CB2 +:10338000A4F88A0094F8F40040B994F86720002368 +:10339000012104F15800F9F76BFD20B1B4F8820067 +:1033A000401CA4F8820094F864000C2802D00D2878 +:1033B00020D067E0B4F85800411CB4F80201814203 +:1033C00060D1D4F8FC00411C404602F0D8FA02213A +:1033D0002046F9F727FAD4F8FC000078002808BF47 +:1033E000FFDF0121FE20FEF749FE84F8647084F8B7 +:1033F000986047E0B4F85800411CD4F8F800808881 +:1034000081423FD1D4F844010178002918BFFFDF81 +:1034100022D12188C180D4F8F8004189D4F8440130 +:103420000181D4F8F8008189D4F844014181D4F8AD +:10343000F800C189D4F844018181D4F844010771AE +:10344000D4F8440180F800A0D4F8440121884180D8 +:1034500099F80300DFF760FD01212046F9F7E2F952 +:1034600003212046FEF7B6FBD9F80800D0F8F80093 +:103470000078022818BFFFDF0221FE20FEF7FEFDC4 +:1034800084F86470B4F85800401C691EA4F8580011 +:103490008DB2BFF429AFBDE8F087FC4AC2E906014E +:1034A000704770B50446B0F87E0094F868100029A3 +:1034B00008BFC0F1020503D0B4F88010081A051F38 +:1034C00094F87C0040B194F864200023092104F1B1 +:1034D0005800F9F7CDFCA0B1B4F8766094F86A0012 +:1034E00058B994F864200023062104F15800F9F734 +:1034F000BFFC002808BF284603D0B4F87800801B22 +:10350000001FA842D8BF0546002DD4BF0020A8B296 +:1035100070BD042110B5DD4CA068FEF75BFBA06810 +:1035200090F84E10012902BF022180F84E1010BD04 +:1035300000F58A720188A0F81E11018EA0F82011F2 +:10354000818EA0F82211038FB0F844108B4238BF4F +:1035500019461182838FB0F846108B4238BF194646 +:10356000518290F8553013F00C0F4FF0010305D045 +:10357000B1F5296F98BF4FF42961518290F854003A +:1035800010F00C0F06D0D089B0F5296F98BF4FF41A +:103590002960D0811372E078BDE81040DFF7BCBC31 +:1035A000BA4830B4806890F84E30B0F832C0C48E5B +:1035B000B0F84010428F022B25D08A4238BF114606 +:1035C0000186C28FB0F842108A4238BF1146818608 +:1035D000028FB0F844108A4238BF11464186828F6C +:1035E000B0F846108A4238BF1146C186418E614507 +:1035F00088BF8C46A0F832C0C18EA14288BF0C465D +:10360000C48630BC7047038E9A4228BF1A46C58FC5 +:10361000838E9D4238BF2B468A4238BF11460186B1 +:10362000B0F842108B4228BF0B468386002180F8F9 +:103630004E10CDE770B5954CA06890F8CB10FE29E0 +:1036400006BF6178002970BD90F867204FF0000335 +:103650004FF0010100F15800F9F70AFC002818BFEB +:1036600070BDA06890F8F41021B1BDE87040022050 +:10367000FEF7AABC90F86420002319465830F9F7E9 +:10368000F7FB40B1A06890F87C0020B1BDE8704025 +:103690001220FEF799BCA068002590F86420122A39 +:1036A0001FD004DC032A3FD0112A1FD003E0182AC0 +:1036B00035D0232A43D0002304215830F9F7D8FB12 +:1036C000002818BF70BDD4F808C09CF86500192800 +:1036D0007CD03BDC01286BD0022879D003285DD058 +:1036E00038E0BDE870400B20FEF76EBCF2F764FBDB +:1036F0000C2838BF70BDA0680821D0F8F8001E3033 +:10370000F2F75EFB28B1A0680421C030F2F758FB45 +:1037100000B9FFDFBDE870400320FEF755BCBDE8EF +:1037200070400620FEF750BC90F8CA1080F8CC100C +:103730000720FEF749FCA06880F8645070BD18208F +:10374000FEF742FCA068A0F8845070BD1E2847D048 +:1037500021286BD0DCF8F80001260178002973D00D +:103760004088BCF8001088426ED100239CF8642089 +:1037700019460CF15800F9F77BFB002864D0A068CB +:10378000D0F8F810097802297ED003297DD00429C9 +:103790007ED0052908BF08207BD0C7E09CF8C9006F +:1037A0008CF8CC000720FEF70FFCA06800F079B978 +:1037B0000C20FEF709FCA068A0F88A5090F8901041 +:1037C00041F0010180F8901000F06BB96FE0FFE765 +:1037D0001320FEF7F9FBA068A0F88A5000F061B949 +:1037E0009CF80501002818BF70BD9CF8040188B141 +:1037F000BCF80601ACF84000BCF80801ACF8420087 +:10380000BCF80A01ACF84400BCF80C01ACF8460066 +:103810008CF80451FFF7C4FEFFF77BFE1520FEF77E +:10382000D3FBA068A0F88A5000F03BB99CF87D005B +:1038300058B18CF8F2508CF8F3501820FEF7C4FB06 +:10384000A068A0F88A5070BD70E09CF80F010028B5 +:1038500018BF70BD9CF80E01002808BF70BDDCE9E0 +:103860001416DCF81001F9F779FDF2B2C1B28A4200 +:1038700007BFA16881F8F250A26882F8F210C6F37F +:103880000721C0F3072005E016E01BE08C010020B3 +:1038900039E020E0814219BFA16881F8F300A068F7 +:1038A00080F8F3501820BDE87040FEF78DBB112062 +:1038B000FEF78AFBA068F4E090F86500F9F7C0FA1B +:1038C000A0BB08E090F8691041B190F86A000028A8 +:1038D00008BFFFDF0A20FEF777FB27E0F2F76CFA5C +:1038E0000C2823D3A0680821D0F8F8001E30F2F786 +:1038F00067FA28B1A0680421C030F2F761FA00B974 +:10390000FFDF0320E7E790F8900010F0030F0DD1E0 +:103910000C20FEF759FBA168A1F8845081F888605B +:1039200091F8900040F0010081F89000A06890F8B4 +:10393000CB10FE2918BF70BD90F8642000231946F3 +:103940005830F9F795FA002808BF70BDA06890F8C4 +:103950000011E9B3A1690978D1BB90F86500F9F7C6 +:103960006FFAA8BBA068B0F858100A2931D900F145 +:1039700008010522E06901F021FE0028A06804BFCB +:1039800080F8005170BDD0F8FC00017861B1411C95 +:103990000522E06901F012FE002818BF70BDA06882 +:1039A000D0F8FC00007830B9A068E169D0F8FC00DC +:1039B000401C01F0E4FFA068D0F8FC000178491C2D +:1039C00001700120FEF700FBA06880F8005170BD77 +:1039D000FFE7A06890F8041111B190F80511E1B368 +:1039E00090F80E11002908BF70BD90F80F11002942 +:1039F00018BF70BD90F86500F9F722FA002818BFCB +:103A000070BDA06890F85400012808BF012508D0B7 +:103A1000022808BF022504D0042816BF0828032561 +:103A2000FFDFA06890F85500012808BF012608D0E4 +:103A3000022808BF022604D0042816BF082803263F +:103A4000FFDFA268012D92F810012DD0022D2ED09B +:103A5000032D08BF04282CD03BE0FFE7B0F8061187 +:103A6000A0F84010B0F80811A0F84210B0F80A1100 +:103A7000A0F84410B0F80C11A0F8461080F80451DA +:103A800090F865001D2804D0BDE870401420FEF7B2 +:103A90009BBAFFF785FDFFF73CFD1520FEF794FA72 +:103AA000A06880F8655070BD012812D101E002289D +:103AB0000FD192F81101012E06D0022E07D0032E4D +:103AC00008BF04280AD004E0012802D106E0022839 +:103AD00004D0BDE870401620FEF776BAB2F8583030 +:103AE00092F85410B2F81201F032F9F79DFC20B1AF +:103AF000A168252081F8640070BDBDE870400020F9 +:103B0000FEF783BA70B5044690F8640000250C28CF +:103B100014D00D2818BF70BDB4F85800D4F8F810B0 +:103B2000401C8988884218BF70BDD4F84401FF4EFC +:103B30000178002918BFFFDF45D122E0B4F8580012 +:103B4000B4F80211401C884218BF70BDD4F8FC00C4 +:103B5000411C04F1080001F012FF02212046F8F791 +:103B600061FED4F8FC000078002808BFFFDF0121C7 +:103B7000FE20FEF783FA84F86450012084F8980050 +:103B800070BD2188C180D4F8F800D4F84411408970 +:103B90000881D4F8F800D4F8441180894881D4F819 +:103BA000F800D4F84411C0898881D4F84401057123 +:103BB000D4F8441109200870D4F8441120884880B2 +:103BC000F078DFF7A9F901212046F8F72BFE032151 +:103BD0002046FDF7FFFFB068D0F8F8000078022813 +:103BE00018BFFFDF0221FE20FEF748FA84F8645078 +:103BF00070BD70B5CD4CA16891F86420162A11BF34 +:103C0000132A91F88E20002A62781BBF0220607070 +:103C1000002A70BD81F8C8004FF0000581F88D5072 +:103C200081F88850D1F8F80009884088884218BF88 +:103C3000FFDFA068D0F8F8000078032818BFFFDF86 +:103C40000321FE20FEF71AFAA068D0F844110A7882 +:103C5000002A18BFFFDF19D10288CA80D0F844219A +:103C600090F8C8101171D0F844110D72D0F84421A9 +:103C70000D211170D0F84421018851800088EEF7A1 +:103C8000B5FFEEF74DFCE078DFF746F9A06880F865 +:103C9000645070BD10B5A54C207910F0020F08BF1C +:103CA00010BD6078002818BF10BDE068C0781928E2 +:103CB00080F06C81DFE800F05F4F0D8FFAFAA622EA +:103CC0003FFA6F83B1FAFAFAFAF9E5E2FBF7F6FA8E +:103CD000F500A0680023012190F867205830F9F71B +:103CE000C7F8002818BF10BD0821A06880F8671029 +:103CF000002180F8881080F88C1010BDA068002387 +:103D0000194690F865205830F9F7B2F818B1A16853 +:103D1000002081F88C00A0680023194690F86420E8 +:103D20005830F9F7A5F8002808BF10BD0020A16899 +:103D300081F8880010BDA0680023194690F864201F +:103D40005830F9F795F8002808BFFFDF0420A16874 +:103D500081F8640010BDA0680023194690F8642023 +:103D60005830F9F785F8002808BFFFDF0C20A1685C +:103D700081F8640010BDA0680023194690F8642003 +:103D80005830F9F775F8002808BFFFDF0D20A1684B +:103D900081F8640010BDA0680023194690F86420E3 +:103DA0005830F9F765F8002808BFFFDF0121A06847 +:103DB00080F88D105FF00F0180F8641010BDA068CE +:103DC00090F86400122818BFFFDF0121A06880F876 +:103DD0008E101121F0E7A0680023194690F86420A6 +:103DE0005830F9F745F828B9A06890F88E000028F7 +:103DF00008BFFFDF0121A06880F88D10132180F833 +:103E0000641010BDA06890F86400182818BFFFDF88 +:103E10001A20A16881F8640010BDA068D0F8F810DD +:103E200003884A889A4204BF097804291BD190F874 +:103E300064204FF00003194600F15800F9F718F814 +:103E4000002808BFFFDFA06890F8901011F0020F63 +:103E500004BF012180F8641005D0002180F888108B +:103E6000D0F8F8000170A0680023194690F865208A +:103E70005830F8F7FDFF002808BF10BD0020A168EA +:103E800081E0A0680023194690F864205830F8F7C4 +:103E9000EFFF002808BFFFDF0520A16881F864005C +:103EA00010BD30E01FE012E001E068E06EE0A068C5 +:103EB0000023194690F864205830F8F7D9FF0028FD +:103EC00008BFFFDF1C20A16881F86400E8E7A06854 +:103ED0000023194690F865205830F8F7C9FF0028EC +:103EE00008BFFFDFCAE7A0680023194690F86420E6 +:103EF0005830F8F7BDFF002808BFFFDF1F20A1687A +:103F000081F86400CCE7A06890F8651021291DD0E5 +:103F100090F86410232918BFFFDFC1D190F8F21088 +:103F2000002904BF90F8F310002901E08C01002063 +:103F30001CBF242180F864107FF4F8AE4FF000011C +:103F400080F864100846FEF760F8EFE690F8F2108B +:103F5000002907BF90F8F3100029242180F865108C +:103F60008CD14FF0000180F8651080F87D1090F83A +:103F70000E0100281CBF0020FEF747F87EE7A1686D +:103F8000002081F8650081F88C0089E7FFDF87E772 +:103F900070B58D4C0829207A62D2DFE801F004194F +:103FA00059592561615978B1F2F7AFFC01210846F2 +:103FB000F2F7B1FDF3F7F7FB0020A072F2F74DFD29 +:103FC000BDE87040F2F774BFBDE87040F0F728BD5F +:103FD000D4E90001F0F71BFB2060A07A401CC0B2BE +:103FE000A07228281CD370BDA07A0025401EC6B23E +:103FF000E0683044F3F751F810B9E1687F20885544 +:10400000A07A272828BF01252846F3F759FBA07A74 +:10401000282809D2401CC0B2A072282828BF70BD31 +:10402000BDE87040F2F719BD207A00281CBF0120BE +:1040300000F085F8F2F7AEFEF2F72CFF0120E072F7 +:1040400062480078DEF768FFBDE87040F0F7E8BC32 +:10405000002808BF70BD0020BDE8704000F06FB8B8 +:10406000FFDF70BD10B5584C207A002804BF0C202B +:1040700010BD00202072E072607AF1F723F9607AB7 +:10408000F1F76DFB607AF0F7A2FD00280CBF1F204E +:10409000002010BD002270B54B4C06460D46207A1C +:1040A00068B12272E272607AF1F70CF9607AF1F786 +:1040B00056FB607AF0F78BFD002808BFFFDF43480E +:1040C000E560067070BD70B5050007D0A5F5E85035 +:1040D0003F494C3881429CBF122070BD3A4CE06889 +:1040E000002804BF092070BD207A00281CBF0C20C6 +:1040F00070BD3848F0F70FFD6072202804BF1F2004 +:1041000070BDF0F783FD2060002D1CBF28442060A7 +:10411000012065602072002000F011F8002070BDC1 +:104120002949CA7A002A04BF002070471F22027062 +:1041300000224270CB684360CA72012070472DE9AB +:10414000F04184B00746F0F761FD1F4D80464146BF +:1041500068682C6800EB800046002046F1F772FA90 +:10416000B04206DB6868811B4046F0F750FA04460F +:10417000286040F2347621464046F1F763FAB042B7 +:1041800004DA31464046F0F742FA044600208DF842 +:1041900000004FF4DD60039004208DF80500002F2F +:1041A00014BF012003208DF8040068460294F0F744 +:1041B000FCFE687A6946F0F773FF002808BFFFDF4E +:1041C00004B0BDE8F08100004C130020AC010020D9 +:1041D000B5EB3C00913F02002DE9F0410C4612493D +:1041E0000D68114A114908321160A0F120013129EE +:1041F00001D301200CE0412810D040CC0C4F94E8B2 +:104200000E0007EB8000241F50F8807C3046B84732 +:1042100020600548001D0560BDE8F0812046DCF700 +:10422000F7FFF5E706207047100502400100000186 +:10423000585D020010B55348F1F740FD00B1FFDFB3 +:104240005048401CF1F73AFD002800D0FFDF10BDB8 +:104250002DE9F14F4C4ED6F800B001274948F1F74F +:1042600035FDDFF8208128B95FF0000708F1010073 +:10427000F1F742FD454C00254FF003090120606035 +:10428000C4F80051C4F80451009931602060DFF88F +:1042900000A118E0DAF80000C00614D50E2000F0E6 +:1042A00064F8EFF3108010F0010072B600D0012026 +:1042B000C4F80493D4F8001119B9D4F8041101B961 +:1042C00020BF00B962B6D4F8000118B9D4F80401CF +:1042D0000028DFD0D4F804010028CFD137B1C6F8C8 +:1042E00000B008F10100F1F7F1FC11E008F1010064 +:1042F000F1F7ECFC0028B9D1C4F80893C4F80451D4 +:10430000C4F800510E2000F030F81E48F1F7F4FC1C +:104310000020BDE8F88F2DE9F0438DB00D4606462C +:1043200000240DF110090DF1200817E004EB4407FB +:10433000102255F82710684601F06CF905EB870745 +:1043400010224846796801F065F96846FFF780FF5A +:1043500010224146B86801F05DF9641CB442E5DB07 +:104360000DB00020BDE8F08372E7002809DB00F003 +:104370001F02012191404009800000F1E020C0F8B7 +:1043800080127047AD01002004E5004000E00040CD +:1043900010ED00E0B14900200870704770B5B04DD5 +:1043A00001232B60AF4B1C68002CFCD0002407E0DD +:1043B0000E6806601E68002EFCD0001D091D641CDE +:1043C0009442F5D30020286018680028FCD070BD06 +:1043D00070B5A24E0446A44D3078022800D0FFDF0D +:1043E000AC4200D3FFDF7169A048012903D847F22E +:1043F0003052944201DD03224271491C7161291B34 +:10440000C1609A497078F0F74BFE002800D1FFDFB9 +:1044100070BD70B5914C0D466178884200D0FFDFC9 +:10442000914E082D4BD2DFE805F04A041E2D4A4A72 +:104430004A382078022800D0FFDF03202070A078BF +:10444000012801D020B108E0A06800F039FE04E0A6 +:1044500004F1080007C8FFF7A1FF05202070BDE8A0 +:104460007040F0F7DDBAF0F7D1FB01466068F1F774 +:10447000E9F8B04202D2616902290BD30320F1F7B7 +:10448000BCFB12E0F0F7C2FB01466068F1F7DAF816 +:10449000B042F3D2BDE870409AE7207802280AD0F3 +:1044A000052806D0FFDF04202070BDE8704000F032 +:1044B000CAB8022000E00320F1F79FFBF3E7FFDF1B +:1044C00070BD70B50546F0F7A1FB644C60602078C4 +:1044D000012800D0FFDF6549012008700020087125 +:1044E00004208D6048716048C860022020706078A8 +:1044F000F0F7D6FD002800D1FFDF70BD10B5574C96 +:10450000207838B90220F1F78EFB18B90320F1F7B3 +:104510008AFB08B1112010BD5548F0F7FCFA607015 +:10452000202804D0012020700020606110BD0320ED +:1045300010BD2DE9F0471446054600EB84000E46F9 +:10454000A0F1040800F0CFFD07464FF0805001694C +:104550004F4306EB8401091FB14201D2012100E063 +:10456000002189461CB10069B4EB900F02D90920E3 +:10457000BDE8F0872846DCF79FFE90B9A84510D328 +:10458000BD4205D2B84503D245EA0600800701D0F6 +:104590001020EDE73046DCF78FFE10B9B9F1000FBF +:1045A00001D00F20E4E7334833490068884205D042 +:1045B000224631462846FFF7F1FE14E0FFF79EFF42 +:1045C0000028D5D1254800218560C0E903648170A9 +:1045D00000F06FF810B14FF4A97000E0292060439B +:1045E0001830FFF76EFF0020C2E770B505464FF0A8 +:1045F000805004696C432046DCF75EFE08B10F2052 +:1046000070BD00F070FDA84201D8102070BD19489F +:1046100019490068884203D0204600F051FD10E09F +:10462000FFF76CFF0028F1D10C48012184608170F4 +:1046300000F03FF808B1114800E011481830FFF7CA +:1046400040FF002070BD10B5044C6078F0F7BFFA51 +:1046500000B9FFDF0020207010BD0000B001002075 +:1046600004E5014000E40140105C0C005C130020F4 +:104670001344020054000020BEBAFECA645E01006A +:10468000084C01004FF08050D0F830010A2801D0CA +:10469000002070470120704700B5FFF7F3FF20B1FD +:1046A0004FF08050D0F8340108B1002000BD012047 +:1046B00000BD4FF08050D0F83011062905D0D0F859 +:1046C0003001401C01D000207047012070474FF09E +:1046D0008050D0F83001082801D000207047012018 +:1046E000704700B5FFF7E5FF48B14FF08050D0F8B4 +:1046F0003411062905D3D0F83401401C01D0002024 +:1047000000BD012000BD00B5FFF7D3FF58B14FF049 +:104710008050D0F83411062905D3D0F83401401C5C +:1047200001D0012000BD002000BD00007B490968C8 +:10473000016000207047794908600020704701211E +:104740008A0720B1012804D042F204007047916723 +:1047500000E0D1670020704771490120086042F2F3 +:104760000600704708B504236D4A1907103230B1AE +:10477000C1F80433106840F0010010600BE01068CD +:1047800020F001001060C1F808330020C1F80801D2 +:10479000644800680090002008BD011F0B2909D85B +:1047A0005F4910310A6822F01E0242EA40000860A8 +:1047B0000020704742F2050070470F2809D8584979 +:1047C00010310A6822F4706242EA0020086000207A +:1047D000704742F205007047000100F18040C0F8C8 +:1047E000041900207047000100F18040C0F808194A +:1047F00000207047000100F18040D0F800090860F7 +:1048000000207047012801D907207047464A52F816 +:10481000200002680A43026000207047012801D985 +:1048200007207047404A52F8200002688A4302601D +:1048300000207047012801D9072070473A4A52F8F2 +:1048400020000068086000207047020037494FF0E0 +:10485000000003D0012A01D0072070470A6070478A +:10486000020033494FF0000003D0012A01D0072095 +:1048700070470A60704708B54FF40072510510B1D7 +:10488000C1F8042308E0C1F808230020C1F824017E +:1048900024481C3000680090002008BD08B5802224 +:1048A000D10510B1C1F8042308E0C1F808230020A5 +:1048B000C1F81C011B48143000680090002008BD9E +:1048C00008B54FF48072910510B1C1F8042308E0D7 +:1048D000C1F808230020C1F82001124818300068F0 +:1048E0000090002008BD0D493831096801600020A2 +:1048F00070474FF080410020C1F80801C1F8240141 +:10490000C1F81C01C1F820014FF0E020802180F89F +:1049100000140121C0F8001170470000000400409D +:1049200000050040080100401C5E020078050040C0 +:10493000800500406249634B0A6863499A420968EE +:1049400001D1C1F310010160002070475C495D4B4B +:104950000A685D49091D9A4201D1C0F31000086040 +:10496000002070475649574B0A68574908319A4208 +:1049700001D1C0F3100008600020704730B5504BE3 +:10498000504D1C6842F20803AC4202D0142802D2F7 +:1049900003E0112801D3184630BDC3004B4818442A +:1049A000C0F81015C0F81425002030BD4449454B0F +:1049B0000A6842F209019A4202D0062802D203E0B4 +:1049C000042801D308467047404A012142F83010BC +:1049D000002070473A493B4B0A6842F209019A426B +:1049E00002D0062802D203E0042801D3084670470B +:1049F000364A012102EBC00041600020704770B5CB +:104A00002F4A304E314C156842F2090304EB800204 +:104A1000B54204D0062804D2C2F8001807E00428E2 +:104A200001D3184670BDC1F31000C2F80008002081 +:104A300070BD70B5224A234E244C156842F209031A +:104A400004EB8002B54204D0062804D2D2F8000854 +:104A500007E0042801D3184670BDD2F80008C0F35F +:104A600010000860002070BD174910B508311848C3 +:104A700008601120154A002102EBC003C3F810158D +:104A8000C3F81415401C1428F6D3002006E00428AF +:104A900004D302EB8003C3F8001807E002EB8003A5 +:104AA000D3F80048C4F31004C3F80048401C06289B +:104AB000EDD310BD04490648083108607047000076 +:104AC00054000020BEBAFECA00F5014000F00140CB +:104AD0000000FEFF834B1B6803B19847BFF34F8F65 +:104AE00081480168814A01F4E06111430160BFF32C +:104AF0004F8F00BFFDE710B5EFF3108010F0010FEE +:104B000072B601D0012400E0002400F0E1F850B1B9 +:104B1000DCF772FCEFF73FFEF1F711F8E7F700FA68 +:104B200073490020086004B962B6002010BD2DE969 +:104B3000F0410C460546EFF3108010F0010F72B6FD +:104B400001D0012600E0002600F0C2F820B106B92D +:104B500062B60820BDE8F081DCF742FBDCF750FCD0 +:104B60000246002001234709BF0007F1E02700F0BB +:104B70001F01D7F80071CF40F9071BD0202803D2BE +:104B800022FA00F1C90727D141B2002904DB01F163 +:104B9000E02191F8001405E001F00F0101F1E0219E +:104BA00091F8141D4909082916D203FA01F717F0E4 +:104BB000EC0F11D0401C6428D5D3E7F78FF94D4A8C +:104BC0004D490020E7F7D2F949494C480860204692 +:104BD000DCF779FB60B904E006B962B641F2010086 +:104BE000B8E7404804602DB12846DCF7B9FB18B19E +:104BF00010242CE0424D19E02878022802D94FF405 +:104C0000805424E007240028687801D0F8B908E02F +:104C1000E8B120281BD8A878212818D8012816D058 +:104C200001E0A87898B9E8780B2810D83549802099 +:104C300081F8140DDCF7E4FB2946F0F766FFEFF787 +:104C400069FD00F083FA2846DCF7A8FB044606B9A4 +:104C500062B61CB1FFF74FFF20467BE7002079E7E3 +:104C600010B5044600F034F800B101202070002097 +:104C700010BD254908600020704770B50C462349D7 +:104C80000D682249224E08310E60102807D01128E5 +:104C90000CD012280FD0132811D0012013E0D4E932 +:104CA0000001FFF744FF354620600DE0FFF723FFCA +:104CB0000025206008E02068FFF7D2FF03E01249DA +:104CC00020680860002020601048001D056070BD4D +:104CD00007480A490068884201D101207047002036 +:104CE00070470000C80100200CED00E00400FA0548 +:104CF00054000020F813002000000020BEBAFECAB5 +:104D0000245E02000BE000E00400002010050240D9 +:104D10000100000100B59B4902282ED021DC10F1D2 +:104D20000C0F08BFF42028D00FDC10F1280F08BFAB +:104D3000D82022D010F1140F08BFEC201DD010F1A4 +:104D4000100F08BFF02018D021E010F1080F08BFA5 +:104D5000F82012D010F1040F0CBFFC2000280CD05A +:104D600015E0A0F10300062811D2DFE800F00E0CD8 +:104D70000A080503082000E00720086000BD06209F +:104D8000FBE70520F9E70420F7E70320F5E7FFDF5D +:104D900000BD00B57C49012808BF03200CD00228C3 +:104DA00008BF042008D0042808BF062004D0082823 +:104DB00016BFFFDF052000BD086000BD70B50546C9 +:104DC0000C4616461046F2F7A5FC022C08BF4FF41D +:104DD0007A7105D0012C0CBF4FF4C86140F6340144 +:104DE00044183046F2F7D0FC204449F67971084463 +:104DF0004FF47A71B0FBF1F0281A70BD70B505461A +:104E00000C460846F2F79FFC022C08BF40F24C41CA +:104E100005D0012C0CBF40F634014FF4AF5149F6D8 +:104E2000CA62511A08444FF47A7100F2E140B0FBB3 +:104E3000F1F0281A801E70BD70B5064615460C4666 +:104E40000846F2F780FC022D08BF4FF47A7105D0B6 +:104E5000012D0CBF4FF4C86140F63401022C08BF8D +:104E600040F24C4205D0012C0CBF40F634024FF406 +:104E7000AF52891A084449F6FC6108444FF47A712C +:104E8000B0FBF1F0301A70BD70B504460E4608460E +:104E9000F2F740FC05463046F2F776FC28444AF229 +:104EA000AB3108444FF47A71B0FBF1F0201A801E48 +:104EB00070BD2DE9F04107461E460D4614461046CA +:104EC000082A16BF04284EF62830F2F723FC07EB19 +:104ED0004701C1EBC71100EBC100022D08BF40F232 +:104EE0004C4105D0012D0CBF40F634014FF4AF51B9 +:104EF00047182846F2F727FC381A4FF47A7100F663 +:104F0000B730B0FBF1F52046F2F7F2FB284430440D +:104F1000401DBDE8F08170B5054614460E460846B2 +:104F2000F2F7F8FB05EB4502C2EBC512C0EBC20578 +:104F30003046F2F729FC2D1A2046082C16BF04280B +:104F40004EF62830F2F7E6FB28444FF47A7100F66B +:104F5000B730B0FBF1F52046F2F7CAFB2844401DFC +:104F600070BD0A49082818BF0428086803BF20F448 +:104F70006C5040F4444040F0004020F00040086095 +:104F8000704700000C15004010150040401700400D +:104F90002DE9FE430C468046F8F72EFD074698F8AB +:104FA0000160204601A96A46EDF7ABFA05000DD075 +:104FB000012F02D00320BDE8FE83204602AA0199FA +:104FC000EDF7C1F90298B0F803000AE0022F14D1FE +:104FD000042E12D3B8F80300BDF80020011D914241 +:104FE00004D8001D80B2A919814202D14FF00000FF +:104FF000E1E702D24FF00100DDE74FF00200DAE70F +:10500000C2790D2341B342BB8188012904D94908E3 +:10501000818004BF012282800168012918BF002914 +:1050200030D001686FEA0101C1EBC10202EB01124D +:1050300081796FEA010101EB8103C3EB8111114416 +:105040004FEA914201608188B2FBF1F301FB132129 +:1050500081714FF0010102E01AB14FF00001C171FE +:1050600070478188FF2908D24FF6FF7202EA41019A +:105070008180FF2984BFFF2282800168012918BF37 +:105080000029CED10360CCE7817931B1491E11F0FE +:10509000FF0181711CBF002070470120704710B5CF +:1050A0000121C1718171818004460421F0F788FEDD +:1050B000002818BF10BD2068401C206010BD0000F3 +:1050C0000B4A022111600B490B68002BFCD0084BE6 +:1050D0001B1D186008680028FCD0002010600868BC +:1050E0000028FCD070474FF08050406970470000A6 +:1050F00004E5014000E4014002000B464FF00000CF +:10510000014620D0012A04D0022A04D0032A0DD15E +:1051100003E0012002E0022015E00320072B05D266 +:10512000DFE803F00406080A0C0E100007207047A1 +:10513000012108E0022106E0032104E0042102E04D +:10514000052100E00621EFF704BD0000F948052124 +:1051500081700021017041707047F7490A78012A77 +:1051600005D0CA681044C8604038F0F738BA8A6879 +:1051700010448860F8E7002819D00378EF49F04A16 +:1051800013B1012B0ED011E00379012B00D06BB9C4 +:1051900043790BB1012B09D18368643B8B4205D263 +:1051A000C0680EE00379012B02D00BB100207047DC +:1051B00043790BB1012BF9D1C368643B8B42F5D223 +:1051C00080689042F2D801207047DB4910B5012277 +:1051D0000A700279A2B100220A71427992B10422C6 +:1051E0004A718268D34C52328A60C0681434C860F5 +:1051F0006060EFF70BFDCF4920600220887010BD82 +:105200000322E9E70322EBE770B5CB4D044600200B +:105210002870207988B100202871607978B1042045 +:10522000C44E6871A168F068EFF7F1F9A860E06812 +:105230005230E8600320B07070BD0120ECE703201D +:10524000EEE72DE9F04105460226F0F7E8F80068A0 +:1052500000B1FFDFB74C01273DB12878B0B101287C +:1052600005D0022810D0032813D027710CE06868FD +:10527000C82807D3F0F70DFA20B16868FFF76DFF73 +:10528000012603E0002601E000F05EF93046BDE8AB +:10529000F08120780028F7D16868FFF76CFF0028BC +:1052A000E3D06868017879B1A078042800D0FFDFE6 +:1052B00001216868FFF7A8FF9F49E078EFF7F0FE4B +:1052C0000028E1D1FFDFDFE7FFF77FFF6770DBE753 +:1052D0002DE9F047974C8846E178884200D0FFDFFF +:1052E000DFF8509200250127934E09F11409B8F117 +:1052F000080F75D2DFE808F0040C28527A808D95EB +:10530000A078032802D0022800D0FFDFBDE8F08794 +:10531000A078032802D0022800D0FFDF0420A0706C +:1053200025712078002878D1FFF717FF3078012801 +:1053300006D0B068E06000F027F92061002060E04E +:10534000E078EFF7AAFDF5E7A078032802D002285D +:1053500000D0FFDF207800286DD1A078032816D078 +:10536000EFF754FC01464F46D9F80000F0F76AF910 +:1053700000280EDB796881420BDB081AF0606E4969 +:10538000E078EFF78DFE0028C0D1FFDFBEE70420F4 +:1053900028E00420F0F731FCA570B7E7A0780328D7 +:1053A00002D0022800D0FFDF207888BBA078032835 +:1053B00017D0EFF72BFC01464F46D9F80000F0F765 +:1053C00041F90028E5DB79688142E2DB081AF060E8 +:1053D0005949E078EFF764FE002897D1FFDF95E7A1 +:1053E00040E00520F0F709FCA7708FE7A0780428BB +:1053F00000D0FFDF022004E0A078042800D0FFDF07 +:105400000120A1688847FFF71CFF054630E004E053 +:1054100011E0A078042800D0FFDFBDE8F04700F0DD +:1054200093B8A078042804D0617809B1022800D08C +:10543000FFDF207818B1BDE8F04700F08EB8207982 +:1054400020B10620F0F7D9FB2571CDE7607838B19F +:105450003949E078EFF724FE00B9FFDF657055E7C2 +:105460000720BFE7FFDF51E73DB1012D03D0FFDF8C +:10547000022DF9D14AE70420C3E70320C1E770B544 +:10548000050004D02B4CA078052806D101E010209F +:1054900070BD0820F0F7C7FB08B1112070BD294886 +:1054A000EFF739FBE070202806D00121F0F7EBF987 +:1054B0000020A560A07070BD032070BD1D4810B510 +:1054C000017809B1112010BD8178052906D0012984 +:1054D00006D029B101210170002010BD0F2010BDA0 +:1054E00000F03BF8F8E770B5124C0546A07808B11B +:1054F000012809D155B12846FFF73DFE40B1287873 +:1055000040B1A078012809D00F2070BD102070BDD7 +:10551000072070BD2846FFF758FE03E0002128460B +:10552000FFF772FE0449E078EFF7BAFD00B9FFDF3C +:10553000002070BDCC0100206C1300203D860100CE +:10554000FF1FA107D15202000A4810B5006900F000 +:1055500013F8BDE81040EFF763BA064810B5C078FD +:10556000EFF735FB00B9FFDF0820F0F746FBBDE899 +:105570001040EBE5CC0100200C490A6848F2021308 +:105580009A4302430A607047084A116848F20213BE +:1055900001EA03009943116070470246044B102052 +:1055A0001344FC2B01D8116000207047C80602404C +:1055B0000018FEBF704770477047704740EA01030C +:1055C00010B59B070FD1042A0DD310C808C9121FAC +:1055D0009C42F8D020BA19BA884201D9012010BDE6 +:1055E0004FF0FF3010BD1AB1D30703D0521C07E0B3 +:1055F000002010BD10F8013B11F8014B1B1B07D117 +:1056000010F8013B11F8014B1B1B01D1921EF1D187 +:10561000184610BD032A40F2308010F0030C00F051 +:10562000158011F8013BBCF1020F624498BF11F8DC +:1056300001CB00F8013B38BF11F8013BA2F1040295 +:1056400098BF00F801CB38BF00F8013B11F003030D +:1056500000F02580083AC0F0088051F8043B083A71 +:1056600051F804CBA0E80810F5E7121D5CBF51F813 +:10567000043B40F8043BAFF30080D20724BF11F88D +:10568000013B11F801CB48BF11F8012B24BF00F8F2 +:10569000013B00F801CB48BF00F8012B704710B563 +:1056A000203AC0F00B80B1E81850203AA0E818501A +:1056B000B1E81850A0E81850BFF4F5AF5FEA027CDB +:1056C00024BFB1E81850A0E8185044BF18C918C04A +:1056D000BDE810405FEA827C24BF51F8043B40F8EB +:1056E000043B08BF7047D20728BF31F8023B48BFD0 +:1056F00011F8012B28BF20F8023B48BF00F8012B0E +:10570000704702F0FF0343EA032242EA024200F03C +:1057100002B84FF000020429C0F0128010F0030C10 +:1057200000F01B80CCF1040CBCF1020F18BF00F894 +:10573000012BA8BF20F8022BA1EB0C0100F00DB843 +:105740005FEAC17C24BF00F8012B00F8012B48BFA1 +:1057500000F8012B70474FF0000200B51346944645 +:105760009646203922BFA0E80C50A0E80C50B1F1B9 +:105770002001BFF4F7AF090728BFA0E80C5048BFCD +:105780000CC05DF804EB890028BF40F8042B08BF6B +:10579000704748BF20F8022B11F0804F18BF00F867 +:1057A000012B70477047704770477047FEDF1849FC +:1057B0000978F9B90420714608421BD10699154AA7 +:1057C000914217DC0699022914DB02394878DF2858 +:1057D00010D10878FE2807D0FF280BD14FF0010028 +:1057E0004FF000020C4B184741F201000099019A5A +:1057F000094B1847094B002B02D01B68DB68184780 +:105800004FF0FF3071464FF00002034B1847000085 +:1058100028ED00E000600200D54A020004000020EC +:10582000174818497047FFF7FBFFDBF7C7FC00BDBF +:10583000154816490968884203D1154A13605B6808 +:10584000184700BD20BFFDE70F481049096888428E +:1058500010D1104B18684FF0FF318842F2D080F31E +:1058600008884FF02021884204DD0B48026803219C +:105870000A4302600948804709488047FFDF00006B +:105880008013002080130020001000000000002082 +:10589000040000200060020014090040C52F000031 +:1058A0003158020004207146084202D0EFF309810A +:1058B00001E0EFF30881886902380078102813DBD3 +:1058C00020280FDB2C280BDB0A4A12680A4B9A426D +:1058D00003D1602804DB094A1047022008607047A2 +:1058E000074A1047074A1047074A12682C321268C5 +:1058F0001047000054000020BEBAFECA0514000084 +:10590000D94102007B4C0200040000200D4B0E49DF +:1059100008470E4B0C4908470D4B0B4908470D4BE8 +:10592000094908470C4B084908470C4B06490847EA +:105930000B4B054908470B4B034908470A4B0249E3 +:1059400008470000BDBC000039C00000552D000014 +:10595000CF2B00005D2B0000F72D0000211400006C +:105960001B2900004D2F0000C9110000002101601B +:1059700081807047002101604160017270470A68B0 +:1059800002600B79037170476D960000CB970000A1 +:105990002D99000091990000CB990000FF9900001B +:1059A000319A0000699A0000D79A00001B97000006 +:1059B00051990000A7120000C14300000D440000EF +:1059C00073440000FF44000023460000E546000049 +:1059D00017470000EF47000087480000DB48000041 +:1059E000C1490000E1490000C3160000E7160000AD +:1059F000171600006B16000019170000AD17000005 +:105A000037600000E7610000AD650000C56600007A +:105A10004F670000CD670000316800005169000049 +:105A2000216A00008D6A0000034A0000094A000054 +:105A3000134A00007B4A0000A74A0000534C0000B4 +:105A40007D4C0000B54C00001F4D0000034E0000CF +:105A5000214E000031440000A7120000A7120000F0 +:105A6000A7120000A7120000A7120000A712000052 +:105A7000A7120000A32500002926000045260000EB +:105A800061260000EF2700008B260000952600000D +:105A9000D7260000F9260000D527000017280000AF +:105AA000A7120000A7120000BB830000DB830000E8 +:105AB000E58300001F8400004D8400003D85000048 +:105AC000CB850000DF8500002D86000043870000A5 +:105AD000E9880000118A00003F730000298A000055 +:105AE000A7120000A7120000B5B500001FB7000004 +:105AF00073B70000DFB700008FB80000010000009E +:105B000000000000100110013A0200001A02000417 +:105B100005060000FFFFFFFF0000FFFFA9AD00002A +:105B2000233D00004921000089730000018F00001F +:105B300000000000AD910000899100009B910000E1 +:105B40000000020000000000000200000000000051 +:105B50000001000000000000678100004781000094 +:105B6000B581000025250000E7240000072500007E +:105B700013A900003FA9000047AB00003159000005 +:105B8000D5810000000000000582000073250000A0 +:105B900000000000000000000000000029AA000032 +:105BA00000000000C55900000300000001555555D4 +:105BB000D6BE898E00006306630C631200000703E3 +:105BC000AB054F08000053044308330C00000000ED +:105BD000900A0000900A0000B3560000B35600007F +:105BE0009D43000055AC00000B7600005B200000D8 +:105BF000CF300200ADA30100F1560000F1560000C5 +:105C0000BF430000B7AC00008F760000CD2000003D +:105C1000FD300200C1A30100700170014000380096 +:105C20005C0024004801000200000300656C7462FF +:105C30000000000000000000000000000000000064 +:105C400087000000000000000000000000000000CD +:105C5000BE83605ADB0B376038A5F5AA9183886C48 +:105C6000010000004F31010015400100000000015B +:105C70000206030405000000070000000000000009 +:105C8000060000000A00000032000000730000005F +:105C9000B4000000BF8E0100DF1C0200F3F800001A +:105CA000B9B601002FF50100B9B6010091FA000064 +:105CB00077B80100F5F1010077B80100CDF60000DA +:105CC00005B8010051F4010005B80100EFF800002B +:105CD000CDB60100E5ED0100CDB6010043FF0000A7 +:105CE000F9BA0100E3F50100F9BA0100F401FA0084 +:105CF000960064004B0032001E0014000A000500EC +:105D0000020001000049000000000000AAAED7AB6D +:105D1000154120100C0802170D01010209090101AB +:105D20000602091818030101090903030555555511 +:105D3000252627D6BE898E00F401FA00960064005D +:105D40004B0032001E0014000A0005000200010092 +:105D50002549000000000000354902004D490200BD +:105D6000654902007D490200AD490200D5490200A3 +:105D7000FF490200334A0200EB45020033450200AE +:105D8000254202009B550200BD5C0100CD5C010074 +:105D9000F95C0100CB5D0100D35D0100E55D010010 +:105DA0003F470200594702002D47020037470200D3 +:105DB000654702009B470200BB470200D94702002B +:105DC000E7470200F5470200054802001D480200AF +:105DD000354802004B480200614802000000000004 +:105DE00063BA0000B9BA0000CFBA0000F95002004F +:105DF00051420200174302007F540200BD540200CA +:105E0000E75402009D5B0100FD5F0100774802003E +:105E10009D480200C1480200E74802001C050040FE +:105E20002005004000100200485E0200080000202B +:105E3000E0010000441100007C5E0200E801002047 +:105E400098110000A0110000011413F81302412062 +:105E50000A2006441A0102228C2720FB349B5F8013 +:105E60001280021E10133F0B1420FC0A1B20820814 +:0C5E7000019C0916C7327F0B6CF410BCBB +:00000001FF