diff --git a/softdevice/6.0.0/common/nrf_sdh.c b/softdevice/6.0.0/common/nrf_sdh.c new file mode 100644 index 0000000..44b8e13 --- /dev/null +++ b/softdevice/6.0.0/common/nrf_sdh.c @@ -0,0 +1,430 @@ +/** + * Copyright (c) 2017 - 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. + * + */ + +#include "sdk_common.h" +#if NRF_MODULE_ENABLED(NRF_SDH) + +#include "nrf_sdh.h" + +#include + +#include "nrf_sdm.h" +#include "nrf_nvic.h" +#include "sdk_config.h" +#include "app_error.h" +#include "app_util_platform.h" + + +#define NRF_LOG_MODULE_NAME nrf_sdh +#if NRF_SDH_LOG_ENABLED + #define NRF_LOG_LEVEL NRF_SDH_LOG_LEVEL + #define NRF_LOG_INFO_COLOR NRF_SDH_INFO_COLOR + #define NRF_LOG_DEBUG_COLOR NRF_SDH_DEBUG_COLOR +#else + #define NRF_LOG_LEVEL 0 +#endif // NRF_SDH_LOG_ENABLED +#include "nrf_log.h" +NRF_LOG_MODULE_REGISTER(); + + +// Validate configuration options. + +#if (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_APPSH) + #if (!APP_SCHEDULER_ENABLED) + #error app_scheduler is required when NRF_SDH_DISPATCH_MODEL is set to NRF_SDH_DISPATCH_MODEL_APPSH + #endif + #include "app_scheduler.h" +#endif + +#if ( (NRF_SDH_CLOCK_LF_SRC == NRF_CLOCK_LF_SRC_RC) \ + && (NRF_SDH_CLOCK_LF_ACCURACY != NRF_CLOCK_LF_ACCURACY_500_PPM)) + #warning Please select NRF_CLOCK_LF_ACCURACY_500_PPM when using NRF_CLOCK_LF_SRC_RC +#endif + + +// Create section "sdh_req_observers". +NRF_SECTION_SET_DEF(sdh_req_observers, nrf_sdh_req_observer_t, NRF_SDH_REQ_OBSERVER_PRIO_LEVELS); + +// Create section "sdh_state_observers". +NRF_SECTION_SET_DEF(sdh_state_observers, nrf_sdh_state_observer_t, NRF_SDH_STATE_OBSERVER_PRIO_LEVELS); + +// Create section "sdh_stack_observers". +NRF_SECTION_SET_DEF(sdh_stack_observers, nrf_sdh_stack_observer_t, NRF_SDH_STACK_OBSERVER_PRIO_LEVELS); + + +static bool m_nrf_sdh_enabled; /**< Variable to indicate whether the SoftDevice is enabled. */ +static bool m_nrf_sdh_suspended; /**< Variable to indicate whether this module is suspended. */ +static bool m_nrf_sdh_continue; /**< Variable to indicate whether enable/disable process was started. */ + + +/**@brief Function for notifying request observers. + * + * @param[in] evt Type of request event. + */ +static ret_code_t sdh_request_observer_notify(nrf_sdh_req_evt_t req) +{ + nrf_section_iter_t iter; + + NRF_LOG_DEBUG("State request: 0x%08X", req); + + for (nrf_section_iter_init(&iter, &sdh_req_observers); + nrf_section_iter_get(&iter) != NULL; + nrf_section_iter_next(&iter)) + { + nrf_sdh_req_observer_t * p_observer; + nrf_sdh_req_evt_handler_t handler; + + p_observer = (nrf_sdh_req_observer_t *) nrf_section_iter_get(&iter); + handler = p_observer->handler; + + if (handler(req, p_observer->p_context)) + { + NRF_LOG_DEBUG("Notify observer 0x%08X => ready", p_observer); + } + else + { + // Process is stopped. + NRF_LOG_DEBUG("Notify observer 0x%08X => blocking", p_observer); + return NRF_ERROR_BUSY; + } + } + return NRF_SUCCESS; +} + + +/**@brief Function for stage request observers. + * + * @param[in] evt Type of stage event. + */ +static void sdh_state_observer_notify(nrf_sdh_state_evt_t evt) +{ + nrf_section_iter_t iter; + + NRF_LOG_DEBUG("State change: 0x%08X", evt); + + for (nrf_section_iter_init(&iter, &sdh_state_observers); + nrf_section_iter_get(&iter) != NULL; + nrf_section_iter_next(&iter)) + { + nrf_sdh_state_observer_t * p_observer; + nrf_sdh_state_evt_handler_t handler; + + p_observer = (nrf_sdh_state_observer_t *) nrf_section_iter_get(&iter); + handler = p_observer->handler; + + handler(evt, p_observer->p_context); + } +} + + +static void softdevices_evt_irq_enable(void) +{ +#ifdef SOFTDEVICE_PRESENT + ret_code_t ret_code = sd_nvic_EnableIRQ((IRQn_Type)SD_EVT_IRQn); + APP_ERROR_CHECK(ret_code); +#else + // In case of serialization, NVIC must be accessed directly. + NVIC_EnableIRQ(SD_EVT_IRQn); +#endif +} + + +static void softdevice_evt_irq_disable(void) +{ +#ifdef SOFTDEVICE_PRESENT + ret_code_t ret_code = sd_nvic_DisableIRQ((IRQn_Type)SD_EVT_IRQn); + APP_ERROR_CHECK(ret_code); +#else + // In case of serialization, NVIC must be accessed directly. + NVIC_DisableIRQ(SD_EVT_IRQn); +#endif +} + + +#ifndef S140 +static void swi_interrupt_priority_workaround(void) +{ + // The priority of SoftDevice SWI SD_EVT_IRQn and RADIO_NOTIFICATION_IRQn in + // S132 v5.0.0, S112 v5.0.0, S212 v5.0.0 and S332 v5.0.0 is set to 6. + // Change it to APP_IRQ_PRIORITY_LOWEST (7) so that they do not preempt peripherals' interrupts. + +#ifdef SOFTDEVICE_PRESENT + ret_code_t ret_code; + ret_code = sd_nvic_SetPriority(SD_EVT_IRQn, APP_IRQ_PRIORITY_LOWEST); + APP_ERROR_CHECK(ret_code); + ret_code = sd_nvic_SetPriority(RADIO_NOTIFICATION_IRQn, APP_IRQ_PRIORITY_LOWEST); + APP_ERROR_CHECK(ret_code); +#else + // In case of serialization, NVIC must be accessed directly. + NVIC_SetPriority(SD_EVT_IRQn, APP_IRQ_PRIORITY_LOWEST); + NVIC_SetPriority(RADIO_NOTIFICATION_IRQn, APP_IRQ_PRIORITY_LOWEST); +#endif +} +#endif + + +ret_code_t nrf_sdh_enable_request(void) +{ + ret_code_t ret_code; + + if (m_nrf_sdh_enabled) + { + return NRF_ERROR_INVALID_STATE; + } + + m_nrf_sdh_continue = true; + + // Notify observers about SoftDevice enable request. + if (sdh_request_observer_notify(NRF_SDH_EVT_ENABLE_REQUEST) == NRF_ERROR_BUSY) + { + // Enable process was stopped. + return NRF_SUCCESS; + } + + // Notify observers about starting SoftDevice enable process. + sdh_state_observer_notify(NRF_SDH_EVT_STATE_ENABLE_PREPARE); + + nrf_clock_lf_cfg_t const clock_lf_cfg = + { + .source = NRF_SDH_CLOCK_LF_SRC, + .rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV, + .rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV, + .accuracy = NRF_SDH_CLOCK_LF_ACCURACY + }; + + CRITICAL_REGION_ENTER(); +#ifdef ANT_LICENSE_KEY + ret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler, ANT_LICENSE_KEY); +#else + ret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler); +#endif + m_nrf_sdh_enabled = (ret_code == NRF_SUCCESS); + CRITICAL_REGION_EXIT(); + + if (ret_code != NRF_SUCCESS) + { + return ret_code; + } + + m_nrf_sdh_continue = false; + m_nrf_sdh_suspended = false; + +#ifndef S140 + // Set the interrupt priority after enabling the SoftDevice, since + // sd_softdevice_enable() sets the SoftDevice interrupt priority. + swi_interrupt_priority_workaround(); +#endif + + // Enable event interrupt. + // Interrupt priority has already been set by the stack. + softdevices_evt_irq_enable(); + + // Notify observers about a finished SoftDevice enable process. + sdh_state_observer_notify(NRF_SDH_EVT_STATE_ENABLED); + + return NRF_SUCCESS; +} + + +ret_code_t nrf_sdh_disable_request(void) +{ + ret_code_t ret_code; + + if (!m_nrf_sdh_enabled) + { + return NRF_ERROR_INVALID_STATE; + } + + m_nrf_sdh_continue = true; + + // Notify observers about SoftDevice disable request. + if (sdh_request_observer_notify(NRF_SDH_EVT_DISABLE_REQUEST) == NRF_ERROR_BUSY) + { + // Disable process was stopped. + return NRF_SUCCESS; + } + + // Notify observers about starting SoftDevice disable process. + sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLE_PREPARE); + + CRITICAL_REGION_ENTER(); + ret_code = sd_softdevice_disable(); + m_nrf_sdh_enabled = false; + CRITICAL_REGION_EXIT(); + + if (ret_code != NRF_SUCCESS) + { + return ret_code; + } + + m_nrf_sdh_continue = false; + + softdevice_evt_irq_disable(); + + // Notify observers about a finished SoftDevice enable process. + sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLED); + + return NRF_SUCCESS; +} + + +ret_code_t nrf_sdh_request_continue(void) +{ + if (!m_nrf_sdh_continue) + { + return NRF_ERROR_INVALID_STATE; + } + + if (m_nrf_sdh_enabled) + { + return nrf_sdh_disable_request(); + } + else + { + return nrf_sdh_enable_request(); + } +} + + +bool nrf_sdh_is_enabled(void) +{ + return m_nrf_sdh_enabled; +} + + +void nrf_sdh_suspend(void) +{ + if (!m_nrf_sdh_enabled) + { + return; + } + + softdevice_evt_irq_disable(); + m_nrf_sdh_suspended = true; +} + + +void nrf_sdh_resume(void) +{ + if ((!m_nrf_sdh_suspended) || (!m_nrf_sdh_enabled)) + { + return; + } + + // Force calling ISR again to make sure that events not previously pulled have been processed. +#ifdef SOFTDEVICE_PRESENT + ret_code_t ret_code = sd_nvic_SetPendingIRQ((IRQn_Type)SD_EVT_IRQn); + APP_ERROR_CHECK(ret_code); +#else + NVIC_SetPendingIRQ((IRQn_Type)SD_EVT_IRQn); +#endif + + softdevices_evt_irq_enable(); + + m_nrf_sdh_suspended = false; +} + + +bool nrf_sdh_is_suspended(void) +{ + return (!m_nrf_sdh_enabled) || (m_nrf_sdh_suspended); +} + + +void nrf_sdh_evts_poll(void) +{ + nrf_section_iter_t iter; + + // Notify observers about pending SoftDevice event. + for (nrf_section_iter_init(&iter, &sdh_stack_observers); + nrf_section_iter_get(&iter) != NULL; + nrf_section_iter_next(&iter)) + { + nrf_sdh_stack_observer_t * p_observer; + nrf_sdh_stack_evt_handler_t handler; + + p_observer = (nrf_sdh_stack_observer_t *) nrf_section_iter_get(&iter); + handler = p_observer->handler; + + handler(p_observer->p_context); + } +} + + +#if (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_INTERRUPT) + +void SD_EVT_IRQHandler(void) +{ + nrf_sdh_evts_poll(); +} + +#elif (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_APPSH) + +/**@brief Function for polling SoftDevice events. + * + * @note This function is compatible with @ref app_sched_event_handler_t. + * + * @param[in] p_event_data Pointer to the event data. + * @param[in] event_size Size of the event data. + */ +static void appsh_events_poll(void * p_event_data, uint16_t event_size) +{ + UNUSED_PARAMETER(p_event_data); + UNUSED_PARAMETER(event_size); + + nrf_sdh_evts_poll(); +} + + +void SD_EVT_IRQHandler(void) +{ + ret_code_t ret_code = app_sched_event_put(NULL, 0, appsh_events_poll); + APP_ERROR_CHECK(ret_code); +} + +#elif (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_POLLING) + +#else + +#error "Unknown SoftDevice handler dispatch model." + +#endif // NRF_SDH_DISPATCH_MODEL + +#endif // NRF_MODULE_ENABLED(NRF_SDH) diff --git a/softdevice/6.0.0/common/nrf_sdh.h b/softdevice/6.0.0/common/nrf_sdh.h new file mode 100644 index 0000000..07c8bd9 --- /dev/null +++ b/softdevice/6.0.0/common/nrf_sdh.h @@ -0,0 +1,305 @@ +/** + * Copyright (c) 2017 - 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. + * + */ + +/** @file + * + * @defgroup nrf_sdh SoftDevice Handler + * @{ + * @ingroup app_common + * @brief API for initializing and disabling the SoftDevice. + */ + +#ifndef NRF_SDH_H__ +#define NRF_SDH_H__ + +#include +#include "sdk_config.h" +#include "sdk_errors.h" +#include "nrf_section_iter.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @name Softdevice Handler dispatch models + * @{ + * @ingroup nrf_sdh */ + +/**@brief SoftDevice events are passed to the application from the interrupt context. */ +#define NRF_SDH_DISPATCH_MODEL_INTERRUPT 0 + +/**@brief SoftDevice events are passed to the application using @ref app_scheduler. + * + * @note @ref app_scheduler must be initialized before enabling the SoftDevice handler. + */ +#define NRF_SDH_DISPATCH_MODEL_APPSH 1 + +/**@brief SoftDevice events are polled manually using @ref nrf_sdh_evts_poll(). + * + * @note In this mode, a user application can also implement SD_EVT_IRQHandler() to receive a + * notification about incoming events. + */ +#define NRF_SDH_DISPATCH_MODEL_POLLING 2 + +/** @} */ + +/** + * @name SoftDevice Handler state change requests + * @{ + * @ingroup nrf_sdh */ + +/**@brief SoftDevice Handler state requests. */ +typedef enum +{ + NRF_SDH_EVT_ENABLE_REQUEST, //!< Request to enable the SoftDevice. + NRF_SDH_EVT_DISABLE_REQUEST, //!< Request to disable the SoftDevice. +} nrf_sdh_req_evt_t; + +/**@brief SoftDevice Handler state request handler. + * + * @retval true If ready for the SoftDevice to change state. + * @retval false If not ready for the SoftDevice to change state. + * If false is returned, the state change is aborted. + */ +typedef bool (*nrf_sdh_req_evt_handler_t)(nrf_sdh_req_evt_t request, void * p_context); + +/**@brief SoftDevice Handler state request observer. */ +typedef struct +{ + nrf_sdh_req_evt_handler_t handler; //!< Request handler. + void * p_context; //!< A parameter to the handler function. +} const nrf_sdh_req_observer_t; + +/**@brief Macro for registering a SoftDevice state change request observer. + * + * An observer of SoftDevice state change requests receives requests to change the state of the + * SoftDevice from enabled to disabled and vice versa. These requests may or may not be acknowledged + * by the observer, depending on the value returned by its request handler function. Thus, a + * request observer has the capability to defer the change of state of the SoftDevice. If it does + * so, it has the responsibility to call @ref nrf_sdh_request_continue when it is ready to let the + * SoftDevice change its state. If such capability is not necessary and you only need to be informed + * about changes of the SoftDevice state, use the @ref NRF_SDH_STATE_OBSERVER macro instead. + * + * @note This macro places the observer in a section named "sdh_req_observers". + * + * @param[in] _observer Name of the observer. + * @param[in] _prio Priority of the observer's event handler. + * The smaller the number, the higher the priority. + * @hideinitializer + */ +#define NRF_SDH_REQUEST_OBSERVER(_observer, _prio) \ +STATIC_ASSERT(NRF_SDH_ENABLED, "NRF_SDH_ENABLED not set!"); \ +STATIC_ASSERT(_prio < NRF_SDH_REQ_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \ +/*lint -esym(528,*_observer) -esym(529,*_observer) : Symbol not referenced. */ \ +NRF_SECTION_SET_ITEM_REGISTER(sdh_req_observers, _prio, nrf_sdh_req_observer_t const _observer) + +/** @} */ + +/** + * @name SoftDevice Handler state events + * @{ + * @ingroup nrf_sdh */ + +/**@brief SoftDevice Handler state events. */ +typedef enum +{ + NRF_SDH_EVT_STATE_ENABLE_PREPARE, //!< SoftDevice is going to be enabled. + NRF_SDH_EVT_STATE_ENABLED, //!< SoftDevice is enabled. + NRF_SDH_EVT_STATE_DISABLE_PREPARE, //!< SoftDevice is going to be disabled. + NRF_SDH_EVT_STATE_DISABLED, //!< SoftDevice is disabled. +} nrf_sdh_state_evt_t; + +/**@brief SoftDevice Handler state event handler. */ +typedef void (*nrf_sdh_state_evt_handler_t)(nrf_sdh_state_evt_t state, void * p_context); + +/**@brief SoftDevice Handler state observer. */ +typedef struct +{ + nrf_sdh_state_evt_handler_t handler; //!< State event handler. + void * p_context; //!< A parameter to the event handler. +} const nrf_sdh_state_observer_t; + +/**@brief Macro for registering a SoftDevice state observer. + * + * A SoftDevice state observer receives events when the SoftDevice state has changed or is + * about to change. These events are only meant to inform the state observer, which, contrary + * to a state change request observer, does not have the capability to defer the change of state. + * If such capability is required, use the @ref NRF_SDH_REQUEST_OBSERVER macro instead. + * + * This macro places the observer in a section named "sdh_state_observers". + * + * @param[in] _observer Name of the observer. + * @param[in] _prio Priority of the observer's event handler. + * The smaller the number, the higher the priority. + * @hideinitializer + */ +#define NRF_SDH_STATE_OBSERVER(_observer, _prio) \ +STATIC_ASSERT(NRF_SDH_ENABLED, "NRF_SDH_ENABLED not set!"); \ +STATIC_ASSERT(_prio < NRF_SDH_STATE_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \ +/*lint -esym(528,*_observer) -esym(529,*_observer) : Symbol not referenced. */ \ +NRF_SECTION_SET_ITEM_REGISTER(sdh_state_observers, _prio, static nrf_sdh_state_observer_t const _observer) + +/** @} */ + +/** + * @name SoftDevice stack events + * @{ + * @ingroup nrf_sdh */ + +/**@brief SoftDevice stack event handler. */ +typedef void (*nrf_sdh_stack_evt_handler_t)(void * p_evt); + +/**@brief SoftDevice stack event observer. */ +typedef struct +{ + nrf_sdh_stack_evt_handler_t handler; //!< SoftDevice event handler. + void * p_context; //!< A parameter to the event handler. +} const nrf_sdh_stack_observer_t; + +/**@brief Macro for registering a SoftDevice stack events observer. + * + * A SoftDevice stack event observer receives all events from the SoftDevice. These events can be + * either BLE, ANT, or SoC events. If you need to receive BLE, ANT, or SoC events separately, use the + * @ref NRF_SDH_BLE_OBSERVER, @ref NRF_SDH_ANT_OBSERVER, or @ref NRF_SDH_SOC_OBSERVER macros + * respectively. + * + * @note This macro places the observer in a section named "sdh_stack_observers". + * + * @param[in] _observer Name of the observer. + * @param[in] _prio Priority of the observer's event handler. + * The smaller the number, the higher the priority. + ** @hideinitializer + */ +#define NRF_SDH_STACK_OBSERVER(_observer, _prio) \ +STATIC_ASSERT(NRF_SDH_ENABLED, "NRF_SDH_ENABLED not set!"); \ +STATIC_ASSERT(_prio < NRF_SDH_STACK_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \ +/*lint -esym(528,*_observer) -esym(529,*_observer) : Symbol not referenced. */ \ +NRF_SECTION_SET_ITEM_REGISTER(sdh_stack_observers, _prio, static nrf_sdh_stack_observer_t const _observer) + +/** @} */ + +/**@brief Function for requesting to enable the SoftDevice. + * + * This function issues a @ref NRF_SDH_EVT_ENABLE_REQUEST request to all observers that + * were registered using the @ref NRF_SDH_REQUEST_OBSERVER macro. The observers may or + * may not acknowledge the request. If all observers acknowledge the request, the + * SoftDevice will be enabled. Otherwise, the process will be stopped and the observers + * that did not acknowledge have the responsibility to restart it by calling + * @ref nrf_sdh_request_continue when they are ready for the SoftDevice to change state. + * + * @retval NRF_SUCCESS The process is started. + * @retval NRF_ERROR_INVALID_STATE The SoftDevice is already enabled. + */ +ret_code_t nrf_sdh_enable_request(void); + + +/**@brief Function for requesting to disable the SoftDevice. + * + * This function issues a @ref NRF_SDH_EVT_DISABLE_REQUEST request to all observers that + * were registered using the @ref NRF_SDH_REQUEST_OBSERVER macro. The observers may or + * may not acknowledge the request. If all observers acknowledge the request, the + * SoftDevice will be disabled. Otherwise, the process will be stopped and the observers + * that did not acknowledge have the responsibility to restart it by calling + * @ref nrf_sdh_request_continue when they are ready for the SoftDevice to change state. + * + * @retval NRF_SUCCESS The process is started. + * @retval NRF_ERROR_INVALID_STATE The SoftDevice is already disabled. + */ +ret_code_t nrf_sdh_disable_request(void); + + +/**@brief Function for restarting the SoftDevice Enable/Disable process. + * + * Modules which did not acknowledge a @ref NRF_SDH_EVT_ENABLE_REQUEST or + * @ref NRF_SDH_EVT_DISABLE_REQUEST request must call this function to restart the + * SoftDevice state change process. + * + * @retval NRF_SUCCESS The process is restarted. + * @retval NRF_ERROR_INVALID_STATE No state change request was pending. + */ +ret_code_t nrf_sdh_request_continue(void); + + +/**@brief Function for retrieving the SoftDevice state. + * + * @retval true If the SoftDevice is enabled. + * @retval false If the SoftDevice is disabled. + */ +bool nrf_sdh_is_enabled(void); + + +/**@brief Function for stopping the incoming stack events. + * + * This function disables the SoftDevice interrupt. To resume polling for events, + * call @ref nrf_sdh_resume. + */ +void nrf_sdh_suspend(void); + + +/**@brief Function for resuming polling incoming events from the SoftDevice. */ +void nrf_sdh_resume(void); + + +/**@brief Function for retrieving the information about the module state. + * + * @retval true The SoftDevice handler is paused, and it will not fetch events from the stack. + * @retval false The SoftDevice handler is running, and it will fetch and dispatch events from + * the stack to the registered stack observers. + */ +bool nrf_sdh_is_suspended(void); + + +/**@brief Function for polling stack events from the SoftDevice. + * + * The events are passed to the application using the registered event handlers. + * + * @note @ref NRF_SDH_DISPATCH_MODEL_POLLING must be selected to use this function. + */ +void nrf_sdh_evts_poll(void); + + +#ifdef __cplusplus +} +#endif + +#endif // NRF_SDH_H__ + +/** @} */ diff --git a/softdevice/6.0.0/common/nrf_sdh_ble.c b/softdevice/6.0.0/common/nrf_sdh_ble.c new file mode 100644 index 0000000..728c528 --- /dev/null +++ b/softdevice/6.0.0/common/nrf_sdh_ble.c @@ -0,0 +1,324 @@ +/** + * Copyright (c) 2017 - 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. + * + */ + +#include "sdk_common.h" +#if NRF_MODULE_ENABLED(NRF_SDH_BLE) + +#include "nrf_sdh_ble.h" + +#include "nrf_sdh.h" +#include "app_error.h" +#include "nrf_strerror.h" + + +#define NRF_LOG_MODULE_NAME nrf_sdh_ble +#if NRF_SDH_BLE_LOG_ENABLED + #define NRF_LOG_LEVEL NRF_SDH_BLE_LOG_LEVEL + #define NRF_LOG_INFO_COLOR NRF_SDH_BLE_INFO_COLOR + #define NRF_LOG_DEBUG_COLOR NRF_SDH_BLE_DEBUG_COLOR +#else + #define NRF_LOG_LEVEL 0 +#endif // NRF_SDH_BLE_LOG_ENABLED +#include "nrf_log.h" +NRF_LOG_MODULE_REGISTER(); + + +// Create section set "sdh_ble_observers". +NRF_SECTION_SET_DEF(sdh_ble_observers, nrf_sdh_ble_evt_observer_t, NRF_SDH_BLE_OBSERVER_PRIO_LEVELS); + + +//lint -save -e10 -e19 -e40 -e27 Illegal character (0x24) +#if defined(__CC_ARM) + extern uint32_t Image$$RW_IRAM1$$Base; + uint32_t const * const m_ram_start = &Image$$RW_IRAM1$$Base; +#elif defined(__ICCARM__) + extern uint32_t __ICFEDIT_region_RAM_start__; + uint32_t const * const m_ram_start = &__ICFEDIT_region_RAM_start__; +#elif defined(__SES_ARM) + extern uint32_t __app_ram_start__; + uint32_t const * const m_ram_start = &__app_ram_start__; +#elif defined(__GNUC__) + extern uint32_t __data_start__; + uint32_t const * const m_ram_start = &__data_start__; +#endif +//lint -restore + +#define RAM_START 0x20000000 +#define APP_RAM_START (uint32_t)m_ram_start + + +static bool m_stack_is_enabled; + + +ret_code_t nrf_sdh_ble_app_ram_start_get(uint32_t * p_app_ram_start) +{ + if (p_app_ram_start == NULL) + { + return NRF_ERROR_NULL; + } + + *p_app_ram_start = APP_RAM_START; + + return NRF_SUCCESS; +} + + +ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start) +{ + uint32_t ret_code; + + ret_code = nrf_sdh_ble_app_ram_start_get(p_ram_start); + if (ret_code != NRF_SUCCESS) + { + return ret_code; + } + +#ifdef S112 + STATIC_ASSERT(NRF_SDH_BLE_CENTRAL_LINK_COUNT == 0, "When using s112, NRF_SDH_BLE_CENTRAL_LINK_COUNT must be 0."); +#endif + + // Overwrite some of the default settings of the BLE stack. + // If any of the calls to sd_ble_cfg_set() fail, log the error but carry on so that + // wrong RAM settings can be caught by nrf_sdh_ble_enable() and a meaningful error + // message will be printed to the user suggesting the correct value. + ble_cfg_t ble_cfg; + +#if (NRF_SDH_BLE_TOTAL_LINK_COUNT != 0) + // Configure the connection count. + memset(&ble_cfg, 0, sizeof(ble_cfg)); + ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag; + ble_cfg.conn_cfg.params.gap_conn_cfg.conn_count = NRF_SDH_BLE_TOTAL_LINK_COUNT; + ble_cfg.conn_cfg.params.gap_conn_cfg.event_length = NRF_SDH_BLE_GAP_EVENT_LENGTH; + + ret_code = sd_ble_cfg_set(BLE_CONN_CFG_GAP, &ble_cfg, *p_ram_start); + if (ret_code != NRF_SUCCESS) + { + NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_CONN_CFG_GAP.", + nrf_strerror_get(ret_code)); + } + + // Configure the connection roles. + memset(&ble_cfg, 0, sizeof(ble_cfg)); + ble_cfg.gap_cfg.role_count_cfg.periph_role_count = NRF_SDH_BLE_PERIPHERAL_LINK_COUNT; +#ifndef S112 + ble_cfg.gap_cfg.role_count_cfg.central_role_count = NRF_SDH_BLE_CENTRAL_LINK_COUNT; + ble_cfg.gap_cfg.role_count_cfg.central_sec_count = MIN(NRF_SDH_BLE_CENTRAL_LINK_COUNT, + BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT); +#endif + + ret_code = sd_ble_cfg_set(BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, *p_ram_start); + if (ret_code != NRF_SUCCESS) + { + NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GAP_CFG_ROLE_COUNT.", + nrf_strerror_get(ret_code)); + } + + // Configure the maximum ATT MTU. +#if (NRF_SDH_BLE_GATT_MAX_MTU_SIZE != 23) + memset(&ble_cfg, 0x00, sizeof(ble_cfg)); + ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag; + ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = NRF_SDH_BLE_GATT_MAX_MTU_SIZE; + + ret_code = sd_ble_cfg_set(BLE_CONN_CFG_GATT, &ble_cfg, *p_ram_start); + if (ret_code != NRF_SUCCESS) + { + NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_CONN_CFG_GATT.", + nrf_strerror_get(ret_code)); + } +#endif // NRF_SDH_BLE_GATT_MAX_MTU_SIZE != 23 +#endif // NRF_SDH_BLE_TOTAL_LINK_COUNT != 0 + + // Configure number of custom UUIDS. + memset(&ble_cfg, 0, sizeof(ble_cfg)); + ble_cfg.common_cfg.vs_uuid_cfg.vs_uuid_count = NRF_SDH_BLE_VS_UUID_COUNT; + + ret_code = sd_ble_cfg_set(BLE_COMMON_CFG_VS_UUID, &ble_cfg, *p_ram_start); + if (ret_code != NRF_SUCCESS) + { + NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_COMMON_CFG_VS_UUID.", + nrf_strerror_get(ret_code)); + } + + // Configure the GATTS attribute table. + memset(&ble_cfg, 0x00, sizeof(ble_cfg)); + ble_cfg.gatts_cfg.attr_tab_size.attr_tab_size = NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE; + + ret_code = sd_ble_cfg_set(BLE_GATTS_CFG_ATTR_TAB_SIZE, &ble_cfg, *p_ram_start); + if (ret_code != NRF_SUCCESS) + { + NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GATTS_CFG_ATTR_TAB_SIZE.", + nrf_strerror_get(ret_code)); + } + + // Configure Service Changed characteristic. + memset(&ble_cfg, 0x00, sizeof(ble_cfg)); + ble_cfg.gatts_cfg.service_changed.service_changed = NRF_SDH_BLE_SERVICE_CHANGED; + + ret_code = sd_ble_cfg_set(BLE_GATTS_CFG_SERVICE_CHANGED, &ble_cfg, *p_ram_start); + if (ret_code != NRF_SUCCESS) + { + NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GATTS_CFG_SERVICE_CHANGED.", + nrf_strerror_get(ret_code)); + } + + return NRF_SUCCESS; +} + + +/**@brief Function for finding the end address of the RAM. */ +static uint32_t ram_end_address_get(void) +{ + uint32_t ram_total_size; + +#ifdef NRF51 + uint32_t block_size = NRF_FICR->SIZERAMBLOCKS; + ram_total_size = block_size * NRF_FICR->NUMRAMBLOCK; +#else + ram_total_size = NRF_FICR->INFO.RAM * 1024; +#endif + + return RAM_START + ram_total_size; +} + + +ret_code_t nrf_sdh_ble_enable(uint32_t * const p_app_ram_start) +{ + // Start of RAM, obtained from linker symbol. + uint32_t const app_ram_start_link = *p_app_ram_start; + + ret_code_t ret_code = sd_ble_enable(p_app_ram_start); + if (*p_app_ram_start > app_ram_start_link) + { + NRF_LOG_WARNING("Insufficient RAM allocated for the SoftDevice."); + + NRF_LOG_WARNING("Change the RAM start location from 0x%x to 0x%x.", + app_ram_start_link, *p_app_ram_start); + NRF_LOG_WARNING("Maximum RAM size for application is 0x%x.", + ram_end_address_get() - (*p_app_ram_start)); + } + else + { + NRF_LOG_DEBUG("RAM starts at 0x%x", app_ram_start_link); + if (*p_app_ram_start != app_ram_start_link) + { + NRF_LOG_DEBUG("RAM start location can be adjusted to 0x%x.", *p_app_ram_start); + + NRF_LOG_DEBUG("RAM size for application can be adjusted to 0x%x.", + ram_end_address_get() - (*p_app_ram_start)); + } + } + + if (ret_code == NRF_SUCCESS) + { + m_stack_is_enabled = true; + } + else + { + NRF_LOG_ERROR("sd_ble_enable() returned %s.", nrf_strerror_get(ret_code)); + } + + return ret_code; +} + + +/**@brief Function for polling BLE events. + * + * @param[in] p_context Context of the observer. + */ +static void nrf_sdh_ble_evts_poll(void * p_context) +{ + UNUSED_VARIABLE(p_context); + + ret_code_t ret_code; + + if (!m_stack_is_enabled) + { + return; + } + + while (true) + { + /*lint -save -e(587) */ + __ALIGN(4) uint8_t evt_buffer[NRF_SDH_BLE_EVT_BUF_SIZE]; + /*lint -restore */ + + ble_evt_t * p_ble_evt; + uint16_t evt_len = (uint16_t)sizeof(evt_buffer); + + ret_code = sd_ble_evt_get(evt_buffer, &evt_len); + if (ret_code != NRF_SUCCESS) + { + break; + } + + p_ble_evt = (ble_evt_t *)evt_buffer; + + NRF_LOG_DEBUG("BLE event: 0x%x.", p_ble_evt->header.evt_id); + + // Forward the event to BLE observers. + nrf_section_iter_t iter; + for (nrf_section_iter_init(&iter, &sdh_ble_observers); + nrf_section_iter_get(&iter) != NULL; + nrf_section_iter_next(&iter)) + { + nrf_sdh_ble_evt_observer_t * p_observer; + nrf_sdh_ble_evt_handler_t handler; + + p_observer = (nrf_sdh_ble_evt_observer_t *)nrf_section_iter_get(&iter); + handler = p_observer->handler; + + handler(p_ble_evt, p_observer->p_context); + } + } + + if (ret_code != NRF_ERROR_NOT_FOUND) + { + APP_ERROR_HANDLER(ret_code); + } +} + + +NRF_SDH_STACK_OBSERVER(m_nrf_sdh_ble_evts_poll, NRF_SDH_BLE_STACK_OBSERVER_PRIO) = +{ + .handler = nrf_sdh_ble_evts_poll, + .p_context = NULL, +}; + +#endif // NRF_MODULE_ENABLED(NRF_SDH_BLE) diff --git a/softdevice/6.0.0/common/nrf_sdh_ble.h b/softdevice/6.0.0/common/nrf_sdh_ble.h new file mode 100644 index 0000000..a6fa06b --- /dev/null +++ b/softdevice/6.0.0/common/nrf_sdh_ble.h @@ -0,0 +1,184 @@ +/** + * Copyright (c) 2017 - 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. + * + */ + +/**@file + * + * @defgroup nrf_sdh_ble BLE support in SoftDevice Handler + * @{ + * @ingroup nrf_sdh + * @brief This file contains the declarations of types and functions required for BLE stack + * support. + */ + +#ifndef NRF_SDH_BLE_H__ +#define NRF_SDH_BLE_H__ + +#include "app_util.h" +#include "ble.h" +#include "nrf_section_iter.h" +#include "sdk_config.h" +#include "sdk_errors.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @brief Size of the buffer for a BLE event. */ +#define NRF_SDH_BLE_EVT_BUF_SIZE BLE_EVT_LEN_MAX(NRF_SDH_BLE_GATT_MAX_MTU_SIZE) + + +#if !(defined(__LINT__)) +/**@brief Macro for registering @ref nrf_sdh_soc_evt_observer_t. Modules that want to be + * notified about SoC events must register the handler using this macro. + * + * @details This macro places the observer in a section named "sdh_soc_observers". + * + * @param[in] _name Observer name. + * @param[in] _prio Priority of the observer event handler. + * The smaller the number, the higher the priority. + * @param[in] _handler BLE event handler. + * @param[in] _context Parameter to the event handler. + * @hideinitializer + */ +#define NRF_SDH_BLE_OBSERVER(_name, _prio, _handler, _context) \ +STATIC_ASSERT(NRF_SDH_BLE_ENABLED, "NRF_SDH_BLE_ENABLED not set!"); \ +STATIC_ASSERT(_prio < NRF_SDH_BLE_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \ +NRF_SECTION_SET_ITEM_REGISTER(sdh_ble_observers, _prio, static nrf_sdh_ble_evt_observer_t _name) = \ +{ \ + .handler = _handler, \ + .p_context = _context \ +} + +/**@brief Macro for registering an array of @ref nrf_sdh_ble_evt_observer_t. + * Modules that want to be notified about SoC events must register the handler using + * this macro. + * + * Each observer's handler will be dispatched an event with its relative context from @p _context. + * This macro places the observer in a section named "sdh_ble_observers". + * + * @param[in] _name Observer name. + * @param[in] _prio Priority of the observer event handler. + * The smaller the number, the higher the priority. + * @param[in] _handler BLE event handler. + * @param[in] _context An array of parameters to the event handler. + * @param[in] _cnt Number of observers to register. + * @hideinitializer + */ +#define NRF_SDH_BLE_OBSERVERS(_name, _prio, _handler, _context, _cnt) \ +STATIC_ASSERT(NRF_SDH_BLE_ENABLED, "NRF_SDH_BLE_ENABLED not set!"); \ +STATIC_ASSERT(_prio < NRF_SDH_BLE_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \ +NRF_SECTION_SET_ITEM_REGISTER(sdh_ble_observers, _prio, static nrf_sdh_ble_evt_observer_t _name[_cnt]) = \ +{ \ + MACRO_REPEAT_FOR(_cnt, HANDLER_SET, _handler, _context) \ +} + +#if !(defined(DOXYGEN)) +#define HANDLER_SET(_idx, _handler, _context) \ +{ \ + .handler = _handler, \ + .p_context = _context[_idx], \ +}, +#endif + +#else // __LINT__ + +/* Swallow semicolons */ +/*lint -save -esym(528, *) -esym(529, *) : Symbol not referenced. */ +#define NRF_SDH_BLE_OBSERVER(A, B, C, D) static int semicolon_swallow_##A +#define NRF_SDH_BLE_OBSERVERS(A, B, C, D, E) static int semicolon_swallow_##A +/*lint -restore */ + +#endif + + +/**@brief BLE stack event handler. */ +typedef void (*nrf_sdh_ble_evt_handler_t)(ble_evt_t const * p_ble_evt, void * p_context); + +/**@brief BLE event observer. */ +typedef struct +{ + nrf_sdh_ble_evt_handler_t handler; //!< BLE event handler. + void * p_context; //!< A parameter to the event handler. +} const nrf_sdh_ble_evt_observer_t; + + +/**@brief Function for retrieving the address of the start of application's RAM. + * + * @param[out] p_app_ram_start Address of the start of application's RAM. + * + * @retval NRF_SUCCESS If the address was successfully retrieved. + * @retval NRF_ERROR_NULL If @p p_app_ram_start was @c NULL. + */ +ret_code_t nrf_sdh_ble_app_ram_start_get(uint32_t * p_app_ram_start); + + +/**@brief Set the default BLE stack configuration. + * + * This function configures the BLE stack with the settings specified in the + * SoftDevice handler BLE configuration. The following configurations will be set: + * - Number of peripheral links + * - Number of central links + * - ATT MTU size (for the given connection) + * - Vendor specific UUID count + * - GATTS Attribute table size + * - Service changed + * + * @param[in] conn_cfg_tag The connection to configure. + * @param[out] p_ram_start Application RAM start address. + */ +ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start); + + +/**@brief Function for configuring and enabling the BLE stack. + * + * @param[in] p_app_ram_start Address of the start of application's RAM. + */ +ret_code_t nrf_sdh_ble_enable(uint32_t * p_app_ram_start); + + +#ifdef __cplusplus +} +#endif + +#endif // NRF_SDH_BLE_H__ + +/** @} */ diff --git a/softdevice/6.0.0/common/nrf_sdh_soc.c b/softdevice/6.0.0/common/nrf_sdh_soc.c new file mode 100644 index 0000000..4f87cac --- /dev/null +++ b/softdevice/6.0.0/common/nrf_sdh_soc.c @@ -0,0 +1,118 @@ +/** + * Copyright (c) 2017 - 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. + * + */ + +#include "sdk_common.h" +#if NRF_MODULE_ENABLED(NRF_SDH_SOC) + +#include "nrf_sdh_soc.h" + +#include "nrf_sdh.h" +#include "nrf_soc.h" +#include "app_error.h" + + +#define NRF_LOG_MODULE_NAME nrf_sdh_soc +#if NRF_SDH_SOC_LOG_ENABLED + #define NRF_LOG_LEVEL NRF_SDH_SOC_LOG_LEVEL + #define NRF_LOG_INFO_COLOR NRF_SDH_SOC_INFO_COLOR + #define NRF_LOG_DEBUG_COLOR NRF_SDH_SOC_DEBUG_COLOR +#else + #define NRF_LOG_LEVEL 0 +#endif // NRF_SDH_SOC_LOG_ENABLED +#include "nrf_log.h" +NRF_LOG_MODULE_REGISTER(); + + +// Create section set "sdh_soc_observers". +NRF_SECTION_SET_DEF(sdh_soc_observers, nrf_sdh_soc_evt_observer_t, NRF_SDH_SOC_OBSERVER_PRIO_LEVELS); + + +/**@brief Function for polling SoC events. + * + * @param[in] p_context Context of the observer. + */ +static void nrf_sdh_soc_evts_poll(void * p_context) +{ + ret_code_t ret_code; + + UNUSED_VARIABLE(p_context); + + while (true) + { + uint32_t evt_id; + + ret_code = sd_evt_get(&evt_id); + if (ret_code != NRF_SUCCESS) + { + break; + } + + NRF_LOG_DEBUG("SoC event: 0x%x.", evt_id); + + // Forward the event to SoC observers. + nrf_section_iter_t iter; + for (nrf_section_iter_init(&iter, &sdh_soc_observers); + nrf_section_iter_get(&iter) != NULL; + nrf_section_iter_next(&iter)) + { + nrf_sdh_soc_evt_observer_t * p_observer; + nrf_sdh_soc_evt_handler_t handler; + + p_observer = (nrf_sdh_soc_evt_observer_t *) nrf_section_iter_get(&iter); + handler = p_observer->handler; + + handler(evt_id, p_observer->p_context); + } + } + + if (ret_code != NRF_ERROR_NOT_FOUND) + { + APP_ERROR_HANDLER(ret_code); + } +} + + +NRF_SDH_STACK_OBSERVER(m_nrf_sdh_soc_evts_poll, NRF_SDH_SOC_STACK_OBSERVER_PRIO) = +{ + .handler = nrf_sdh_soc_evts_poll, + .p_context = NULL, +}; + +#endif // NRF_MODULE_ENABLED(NRF_SDH_SOC) diff --git a/softdevice/6.0.0/common/nrf_sdh_soc.h b/softdevice/6.0.0/common/nrf_sdh_soc.h new file mode 100644 index 0000000..ebe8000 --- /dev/null +++ b/softdevice/6.0.0/common/nrf_sdh_soc.h @@ -0,0 +1,143 @@ +/** + * Copyright (c) 2017 - 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. + * + */ + +/**@file + * + * @defgroup nrf_sdh_soc SoC support in SoftDevice Handler + * @{ + * @ingroup nrf_sdh + * @brief This file contains the declarations of types and functions required for SoftDevice Handler + * SoC support. + */ + +#ifndef NRF_SDH_SOC_H__ +#define NRF_SDH_SOC_H__ + +#include "sdk_common.h" +#include "nrf_section_iter.h" +#include "nrf_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#if !(defined(__LINT__)) +/**@brief Macro for registering @ref nrf_sdh_soc_evt_observer_t. Modules that want to be + * notified about SoC events must register the handler using this macro. + * + * @details This macro places the observer in a section named "sdh_soc_observers". + * + * @param[in] _name Observer name. + * @param[in] _prio Priority of the observer event handler. + * The smaller the number, the higher the priority. + * @param[in] _handler SoC event handler. + * @param[in] _context Parameter to the event handler. + * @hideinitializer + */ +#define NRF_SDH_SOC_OBSERVER(_name, _prio, _handler, _context) \ +STATIC_ASSERT(NRF_SDH_SOC_ENABLED, "NRF_SDH_SOC_ENABLED not set!"); \ +STATIC_ASSERT(_prio < NRF_SDH_SOC_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \ +NRF_SECTION_SET_ITEM_REGISTER(sdh_soc_observers, _prio, static nrf_sdh_soc_evt_observer_t _name) = \ +{ \ + .handler = _handler, \ + .p_context = _context \ +} + +/**@brief Macro for registering an array of @ref nrf_sdh_soc_evt_observer_t. + * Modules that want to be notified about SoC events must register the handler using + * this macro. + * + * Each observer's handler will be dispatched an event with its relative context from @p _context. + * This macro places the observer in a section named "sdh_soc_observers". + * + * @param[in] _name Observer name. + * @param[in] _prio Priority of the observer event handler. + * The smaller the number, the higher the priority. + * @param[in] _handler SoC event handler. + * @param[in] _context An array of parameters to the event handler. + * @param[in] _cnt Number of observers to register. + * @hideinitializer + */ +#define NRF_SDH_SOC_EVENT_OBSERVERS(_name, _prio, _handler, _context, _cnt) \ +STATIC_ASSERT(NRF_SDH_SOC_ENABLED, "NRF_SDH_SOC_ENABLED not set!"); \ +STATIC_ASSERT(_prio < NRF_SDH_SOC_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \ +NRF_SECTION_SET_ITEM_REGISTER(sdh_soc_observers, _prio, static nrf_sdh_soc_evt_observer_t _name[_cnt]) = \ +{ \ + MACRO_REPEAT_FOR(_cnt, HANDLER_SET, _handler, _context) \ +} + +#if !(defined(DOXYGEN)) +#define HANDLER_SET(_idx, _handler, _context) \ +{ \ + .handler = _handler, \ + .p_context = _context[_idx], \ +}, +#endif + +#else // __LINT__ + +/* Swallow semicolons */ +/*lint -save -esym(528, *) -esym(529, *) : Symbol not referenced. */ +#define NRF_SDH_SOC_OBSERVER(A, B, C, D) static int semicolon_swallow_##A +#define NRF_SDH_SOC_OBSERVERS(A, B, C, D, E) static int semicolon_swallow_##A +/*lint -restore */ + +#endif + + +/**@brief SoC event handler. */ +typedef void (*nrf_sdh_soc_evt_handler_t) (uint32_t evt_id, void * p_context); + +/**@brief SoC event observer. */ +typedef struct +{ + nrf_sdh_soc_evt_handler_t handler; //!< SoC event handler. + void * p_context; //!< A parameter to the event handler. +} const nrf_sdh_soc_evt_observer_t; + + +#ifdef __cplusplus +} +#endif + +#endif // NRF_SDH_SOC_H__ + +/** @} */ diff --git a/softdevice/common/softdevice_handler/ant_stack_handler_types.h b/softdevice/6.0.0/common/softdevice_handler/ant_stack_handler_types.h similarity index 100% rename from softdevice/common/softdevice_handler/ant_stack_handler_types.h rename to softdevice/6.0.0/common/softdevice_handler/ant_stack_handler_types.h diff --git a/softdevice/common/softdevice_handler/app_ram_base.h b/softdevice/6.0.0/common/softdevice_handler/app_ram_base.h similarity index 100% rename from softdevice/common/softdevice_handler/app_ram_base.h rename to softdevice/6.0.0/common/softdevice_handler/app_ram_base.h diff --git a/softdevice/common/softdevice_handler/ble_stack_handler_types.h b/softdevice/6.0.0/common/softdevice_handler/ble_stack_handler_types.h similarity index 100% rename from softdevice/common/softdevice_handler/ble_stack_handler_types.h rename to softdevice/6.0.0/common/softdevice_handler/ble_stack_handler_types.h diff --git a/softdevice/common/softdevice_handler/softdevice_handler.c b/softdevice/6.0.0/common/softdevice_handler/softdevice_handler.c similarity index 100% rename from softdevice/common/softdevice_handler/softdevice_handler.c rename to softdevice/6.0.0/common/softdevice_handler/softdevice_handler.c diff --git a/softdevice/common/softdevice_handler/softdevice_handler.h b/softdevice/6.0.0/common/softdevice_handler/softdevice_handler.h similarity index 100% rename from softdevice/common/softdevice_handler/softdevice_handler.h rename to softdevice/6.0.0/common/softdevice_handler/softdevice_handler.h diff --git a/softdevice/common/softdevice_handler/softdevice_handler_appsh.c b/softdevice/6.0.0/common/softdevice_handler/softdevice_handler_appsh.c similarity index 100% rename from softdevice/common/softdevice_handler/softdevice_handler_appsh.c rename to softdevice/6.0.0/common/softdevice_handler/softdevice_handler_appsh.c diff --git a/softdevice/common/softdevice_handler/softdevice_handler_appsh.h b/softdevice/6.0.0/common/softdevice_handler/softdevice_handler_appsh.h similarity index 100% rename from softdevice/common/softdevice_handler/softdevice_handler_appsh.h rename to softdevice/6.0.0/common/softdevice_handler/softdevice_handler_appsh.h diff --git a/softdevice/s140/6.0.0/headers/nrf52/nrf_mbr.h b/softdevice/6.0.0/mbr/nrf52840/headers/nrf_mbr.h similarity index 73% rename from softdevice/s140/6.0.0/headers/nrf52/nrf_mbr.h rename to softdevice/6.0.0/mbr/nrf52840/headers/nrf_mbr.h index c37f23f..1b24874 100644 --- a/softdevice/s140/6.0.0/headers/nrf52/nrf_mbr.h +++ b/softdevice/6.0.0/mbr/nrf52840/headers/nrf_mbr.h @@ -81,13 +81,13 @@ enum NRF_MBR_SVCS /**@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_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*/ + 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_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*/ + SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ }; /** @} */ @@ -96,6 +96,7 @@ enum NRF_MBR_COMMANDS * @{ */ /**@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. @@ -127,14 +128,17 @@ typedef struct /**@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. + * With this command, destination of BootLoader is always the address written in + * NRF_UICR->BOOTADDR. * - * This function will use PROTENSET to protect the flash that is not intended to be written. + * 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. * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. + * 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. @@ -149,10 +153,12 @@ typedef struct /**@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. + * 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 @param address set to 0. - * The MBR will then start forwarding to interrupts to the address in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. + * 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. * @@ -166,6 +172,7 @@ typedef struct } 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. * @@ -176,9 +183,15 @@ 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. */ + 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.*/ @@ -186,7 +199,7 @@ typedef struct 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; + } params; /**< Command parameters. */ } sd_mbr_command_t; /** @} */ @@ -198,21 +211,22 @@ typedef struct * * Commands used when updating a SoftDevice and bootloader. * - * The SD_MBR_COMMAND_COPY_BL and 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 - * NRF_ERROR_NO_MEM. + * 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 + * @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. + * @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)); diff --git a/softdevice/s140/6.0.0/headers/nrf_svc.h b/softdevice/6.0.0/mbr/nrf52840/headers/nrf_svc.h similarity index 97% rename from softdevice/s140/6.0.0/headers/nrf_svc.h rename to softdevice/6.0.0/mbr/nrf52840/headers/nrf_svc.h index c26ce74..292c692 100644 --- a/softdevice/s140/6.0.0/headers/nrf_svc.h +++ b/softdevice/6.0.0/mbr/nrf52840/headers/nrf_svc.h @@ -1,90 +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__ +/* + * 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/softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_licence-agreement.txt b/softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_licence-agreement.txt new file mode 100644 index 0000000..2d1bc12 --- /dev/null +++ b/softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_licence-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/softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_mbr.hex b/softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_mbr.hex new file mode 100644 index 0000000..56225a4 --- /dev/null +++ b/softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_mbr.hex @@ -0,0 +1,165 @@ +: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 +:040000050000099955 +:00000001FF diff --git a/softdevice/s140/6.0.0/headers/ble.h b/softdevice/6.0.0/s140/headers/ble.h similarity index 92% rename from softdevice/s140/6.0.0/headers/ble.h rename to softdevice/6.0.0/s140/headers/ble.h index 01c2e8f..9ebb41f 100644 --- a/softdevice/s140/6.0.0/headers/ble.h +++ b/softdevice/6.0.0/s140/headers/ble.h @@ -1,620 +1,622 @@ -/* - * 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 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 "ble_ranges.h" -#include "ble_types.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 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. */ -}; - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE, /**< User Memory request. @ref ble_evt_user_mem_request_t */ - BLE_EVT_USER_MEM_RELEASE, /**< 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, /**< BLE GAP specific connection configuration. */ - BLE_CONN_CFG_GATTC, /**< BLE GATTC specific connection configuration. */ - BLE_CONN_CFG_GATTS, /**< BLE GATTS specific connection configuration. */ - BLE_CONN_CFG_GATT, /**< BLE GATT specific connection configuration. */ - BLE_CONN_CFG_L2CAP, /**< 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 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, /**< PA and LNA options */ - BLE_COMMON_OPT_CONN_EVT_EXT, /**< Extended connection events 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) (BLE_MAX( \ - sizeof(ble_evt_t), \ - BLE_MAX( \ - offsetof(ble_evt_t, evt.gattc_evt.params.rel_disc_rsp.includes) + ((ATT_MTU) - 2) / 6 * sizeof(ble_gattc_include_t), \ - offsetof(ble_evt_t, evt.gattc_evt.params.attr_info_disc_rsp.info.attr_info16) + ((ATT_MTU) - 2) / 4 * sizeof(ble_gattc_attr_info16_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 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 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_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. See @ref sd_ble_gap_adv_start() and @ref 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 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 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 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 The value of *p_app_ram_base when the app has done no custom configuration of the - * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can - * be found in the release notes. - * - * @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 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. - */ -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 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 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 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 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__ */ - -/** - @} - @} -*/ +/* + * 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 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. */ +}; + +/** + * @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 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 */ +}; + +/** @} */ + +/** @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 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 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_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 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 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 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 The value of *p_app_ram_base when the app has done no custom configuration of the + * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can + * be found in the release notes. + * + * @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 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. + */ +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 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 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 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 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/softdevice/s140/6.0.0/headers/ble_err.h b/softdevice/6.0.0/s140/headers/ble_err.h similarity index 92% rename from softdevice/s140/6.0.0/headers/ble_err.h rename to softdevice/6.0.0/s140/headers/ble_err.h index 386c1f1..1b4820d 100644 --- a/softdevice/s140/6.0.0/headers/ble_err.h +++ b/softdevice/6.0.0/s140/headers/ble_err.h @@ -1,93 +1,93 @@ -/* - * 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 - @{ - @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_NO_TX_PACKETS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Not enough application packets available on this connection. */ -#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 - - -/** - @} - @} -*/ +/* + * 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/softdevice/s140/6.0.0/headers/ble_gap.h b/softdevice/6.0.0/s140/headers/ble_gap.h similarity index 60% rename from softdevice/s140/6.0.0/headers/ble_gap.h rename to softdevice/6.0.0/s140/headers/ble_gap.h index c5bc06e..6e6cae2 100644 --- a/softdevice/s140/6.0.0/headers/ble_gap.h +++ b/softdevice/6.0.0/s140/headers/ble_gap.h @@ -1,2302 +1,2669 @@ -/* - * 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_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.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, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_WHITELIST_SET, /**< Set active whitelist. */ - SD_BLE_GAP_DEVICE_IDENTITIES_SET, /**< Set device identity list. */ - SD_BLE_GAP_PRIVACY_SET, /**< Set Privacy settings*/ - SD_BLE_GAP_PRIVACY_GET, /**< Get Privacy settings*/ - SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertising Data. */ - SD_BLE_GAP_ADV_START, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ - SD_BLE_GAP_LESC_DHKEY_REPLY, /**< Reply with an LE Secure Connections DHKey. */ - SD_BLE_GAP_KEYPRESS_NOTIFY, /**< Notify of a keypress during an authentication procedure. */ - SD_BLE_GAP_LESC_OOB_DATA_GET, /**< Get the local LE Secure Connections OOB data. */ - SD_BLE_GAP_LESC_OOB_DATA_SET, /**< Set the remote LE Secure Connections OOB data. */ - SD_BLE_GAP_ENCRYPT, /**< Initiate encryption procedure. */ - SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ - SD_BLE_GAP_SCAN_START, /**< Start Scanning. */ - SD_BLE_GAP_SCAN_STOP, /**< Stop Scanning. */ - SD_BLE_GAP_CONNECT, /**< Connect. */ - SD_BLE_GAP_CONNECT_CANCEL, /**< Cancel ongoing connection procedure. */ - SD_BLE_GAP_RSSI_GET, /**< Get the last RSSI sample. */ - SD_BLE_GAP_PHY_UPDATE, /**< Initiate or respond to a PHY Update Procedure. */ - SD_BLE_GAP_DATA_LENGTH_UPDATE, /**< Initiate or respond to a Data Length Update Procedure. */ -}; - -/**@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, /**< Connection established. \n See @ref ble_gap_evt_connected_t. */ - BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< 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, /**< 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, /**< 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, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ - BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< 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, /**< 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, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ - BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ - BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ - BLE_GAP_EVT_RSSI_CHANGED, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ - BLE_GAP_EVT_ADV_REPORT, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ - BLE_GAP_EVT_SEC_REQUEST, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, /**< 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, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ - BLE_GAP_EVT_PHY_UPDATE_REQUEST, /**< 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, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST, /**< 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, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_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, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ - BLE_GAP_OPT_PASSKEY, /**< Set passkey. @ref ble_gap_opt_passkey_t */ - BLE_GAP_OPT_SCAN_REQ_REPORT, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ - BLE_GAP_OPT_COMPAT_MODE_1, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ - BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ - BLE_GAP_OPT_SLAVE_LATENCY_DISABLE, /**< 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_ADV, /**< Advertiser configuration. */ - BLE_GAP_CFG_DEVICE_NAME, /**< Device name configuration. */ -}; - -/**@brief GAP TX Power roles. - */ -enum BLE_GAP_TX_POWER_ROLES -{ - BLE_GAP_TX_POWER_ROLE_ADV, /**< Advertiser role. */ - BLE_GAP_TX_POWER_ROLE_SCAN_INIT, /**< Scanner and initiator role. */ - BLE_GAP_TX_POWER_ROLE_CONN, /**< 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 - * @note Not explicitly used in peripheral API, but will be relevant for central API. - * @{ */ -#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_ADVERTISING 0x00 /**< Advertising timeout. */ -#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 address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static 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. */ -/**@} */ - - -/**@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) - -/** @brief Default advertising and scan response max length. */ -#define BLE_GAP_ADV_SR_MAX_LEN_DEFAULT (31) - -/** @brief Maximum advertising or scan response data length. */ -#define BLE_GAP_ADV_SR_MAX_DATA_LEN (1650) - -/** @brief Maximum fragmentation size of an advertising or scan response packet. */ -#define BLE_GAP_ADV_SR_MAX_FRAGMENTATION_SIZE (255) - -/**@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 Default advertising set handle. - * - * Default advertising set handle. This handle identifies the default advertising set, - * and shall be used when the application has not configured any custom advertising sets. - * @sa ble_gap_cfg_adv_config_t */ -#define BLE_GAP_ADV_SET_HANDLE_DEFAULT (0) - -/** @brief Advertising set handle not set. - * - * Advertising set handle not set. If an additional advertising handle is required this have to be set - * to configure additional advertising sets. @sa ble_gap_cfg_adv_config_t */ -#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) - -/**@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 0xFFFFFF /**< Maximum Advertising interval in 625 us units, i.e. 10,485.759375 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 seconds. */ -#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ - /** @} */ - - -/**@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. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Missing data, no more to be received. */ -/**@} */ - -/**@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 advertising 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 initiator'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 initiator's address is a resolvable private address that cannot be resolved. */ -/**@} */ - - -/**@defgroup BLE_GAP_SCAN_DUPLICATES_POLICIES GAP Scanner filter duplicates policies. - * @{ */ -#define BLE_GAP_SCAN_DUPLICATES_REPORT 0x00 /**< Duplicate filtering disabled. */ -#define BLE_GAP_SCAN_DUPLICATES_SUPPRESS 0x01 /**< Duplicate filtering enabled. */ -#define BLE_GAP_SCAN_DUPLICATES_ONCE_PER_PERIOD 0x02 /**< Duplicate filtering enabled, reset for each scan period. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values - * @{ */ -#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. */ -/**@} */ - - -/**@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. */ - -/**@} */ - -/**@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). */ -/**@} */ -/** @} */ - - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Advertising event properties. */ -typedef struct -{ - uint16_t connectable : 1; /**< Connectable advertising event. */ - uint16_t scannable : 1; /**< Scannable advertising event. */ - uint16_t directed : 1; /**< Directed advertising event. */ - uint16_t high_duty : 1; /**< High duty cycle directed advertising. Only applicable for directed advertising event using legacy PDUs. */ - uint16_t legacy_pdu : 1; /**< Advertise using legacy advertising PDUs. @note If ble_gap_cfg_adv_config_t::use_adv_ext has not been configured - on the advertising handle corresponding to this advertising set, then legacy_pdu shall be set to 1.*/ - uint16_t anonymous : 1; /**< Omit advertiser's address from all PDUs. */ - uint16_t tx_power : 1; /**< Include TxPower in the extended header of the advertising PDU. */ - uint16_t reserved : 9; /**< Reserved for future use. */ -} 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; /**< Scan response. */ - uint16_t legacy_pdu : 1; /**< Legacy advertising PDU. */ - 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 Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. - Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ - uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -} 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 for RF channels used in advertising. */ -typedef struct -{ - uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ - uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ - uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ -} ble_gap_adv_ch_mask_t; - - -/**@brief GAP advertising parameters. */ -typedef struct -{ - ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. - - When privacy is enabled and the local device use @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 advertise packet. - - If @ref ble_gap_adv_properties_t::directed is set, this must be set to the targeted initiator. If the initiator is in the device identity list, - the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ - ble_gap_adv_properties_t properties; /**< Advertising event properties. See @ref ble_gap_adv_properties_t. */ - uint32_t interval; /**< Advertising interval. See @ref BLE_GAP_ADV_INTERVALS. - - If @ref ble_gap_adv_properties_t::directed and @ref ble_gap_adv_properties_t::high_duty, this parameter is ignored. */ - uint16_t duration; /**< Advertising duration between 0x0001 and 0xFFFF in 10ms units. Setting the value to 0x0000 disables the timeout. - Advertising will be automatically stopped when the duration specified by this parameter (if not 0x0000) is reached. @sa BLE_GAP_ADV_TIMEOUT_VALUES. - @note If @ref ble_gap_adv_properties_t::directed and @ref ble_gap_adv_properties_t::high_duty are set, this parameter is ignored. */ - uint8_t max_ext_adv; /**< Maximum extended advertising events that shall be sent prior to disabling the extended advertising. Setting the value to 0 disables the limitation. - Advertising will be automatically stopped when the count of extended advertising events specified by this parameter (if not 0) is reached. - @note If @ref ble_gap_adv_properties_t::directed and @ref ble_gap_adv_properties_t::high_duty are set, this parameter is ignored. - @note max_ext_adv will be ignored if @ref ble_gap_adv_properties_t::legacy_pdu is set.*/ - ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask for the primary channels. See @ref ble_gap_adv_ch_mask_t. */ - uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ - uint8_t primary_phy; /**< Indicates the PHY on which the advertising packets are transmitted on the primary advertising channel. See @ref BLE_GAP_PHYS. - @note The primary_phy shall indicate @ref BLE_GAP_PHY_1MBPS if @ref ble_gap_adv_properties_t::legacy_pdu is set. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the advertising packets are transmitted on the secondary advertising channel. See @ref BLE_GAP_PHYS. - @note This is the PHY that will be used to create connection and send AUX_ADV_IND packets on. secondary_phy will be ignored when @ref ble_gap_adv_properties_t::legacy_pdu is set. */ - uint8_t secondary_max_skip; /**< Maximum advertising events the controller can skip before sending the AUX_ADV_IND packets on the secondary channel. - @note secondary_max_skip will be ignored if @ref ble_gap_adv_properties_t::legacy_pdu is set. */ - uint8_t advertising_sid:7; /**< Advertising Set ID to distinguish between advertising data transmitted by this device. @note advertising_sid will be ignored if @ref ble_gap_adv_properties_t::legacy_pdu is set. */ - uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. */ - uint8_t adv_fragmentation_len; /**< Maximum PDU length of advertising and scan response packets. If set to 0 @ref BLE_GAP_ADV_SR_MAX_FRAGMENTATION_SIZE will be used. - @note adv_fragmentation_len will be ignored if @ref ble_gap_adv_properties_t::legacy_pdu is set.*/ -} ble_gap_adv_params_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ - uint8_t filter_policy : 2; /**< Scanning filter policy. See @ref BLE_GAP_SCAN_FILTER_POLICIES. */ - uint8_t filter_duplicates: 2; /**< Filter duplicates. @ref BLE_GAP_SCAN_DUPLICATES_POLICIES. */ - uint8_t scan_phy; /**< PHY to scan on. See @ref BLE_GAP_PHYS. */ - uint16_t interval; /**< Scan interval. See @ref BLE_GAP_SCAN_INTERVALS. */ - uint16_t window; /**< Scan window. See @ref BLE_GAP_SCAN_WINDOW. */ - uint16_t duration; /**< Duration of a scanning session in units of 10ms. Range: 0x0001 - 0xFFFF (10ms to 10.9225m). If set to 0x0000, scanning will continue until it is explicitly disabled. @sa sd_ble_gap_connect @sa sd_ble_gap_scan_stop */ - uint16_t period; /**< Time interval between two subsequent scanning sessions in units of 1.28s. Range: 0x0001 - 0xFFFF (1.28s - 83,884.8s). - If @ref ble_gap_scan_params_t::duration is not 0x0000, the time specified by Period must be larger than the time - specified by @ref ble_gap_scan_params_t::duration. If Period is set to 0x0000, scanning will automatically end after the time specified by Duration is expired. */ -} 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. */ -} 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. */ -} 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. */ -} ble_gap_evt_rssi_changed_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ -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 resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ - ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator field of a directed advertisement - packet and the scanner has been enabled to report this with either @ref BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED, or @ref BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED. */ - uint8_t primary_phy; /**< Indicates the PHY on which the advertising packets are received on the primary advertising channel. See @ref BLE_GAP_PHYS. */ - uint8_t secondary_phy; /**< Indicates the PHY on witch the advertising packets are received on the secondary advertising channel. See @ref BLE_GAP_PHYS. */ - uint16_t periodic_interval; /**< If periodic advertising exists, as part of this advertising set, the periodic_interval specifies the interval of the periodic advertising, - in 1.25ms units. If set to 0, it indicates that no periodic advertising exists as part of this set. */ - int8_t tx_power; /**< TX Power reported by the advertiser. */ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ - uint8_t set_id; /**< Set ID of received advertising report. */ - uint8_t dlen; /**< Advertising or scan response data length. */ - uint8_t data[BLE_GAP_ADV_SR_MAX_LEN_DEFAULT]; /**< Advertising or scan response 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 -{ - 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 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_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. */ - } 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. - */ -typedef struct -{ - 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. */ -} ble_gap_cfg_role_count_t; - -/** - * @brief Configuration of an advertising set, set with @ref sd_ble_cfg_set. - * - * @note This configuration can be set multiple times, and each time it will reserve memory required for the advertising configuration. If adv_handle - * has been set to @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET, it will return a new advertising set handle. The first call to this function will replace - * the default advertising configuration. If the adv_handle has been set to something other than @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET then the - * advertising configuration will be updated to the maximum size required between those subsequent calls. - * The default advertising configuration handle is @ref BLE_GAP_ADV_SET_HANDLE_DEFAULT with @ref BLE_GAP_ADV_SR_MAX_LEN_DEFAULT. - * - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters. - */ -typedef struct -{ - uint8_t *p_adv_handle; /**< Pointer to store the advertising handle for this configuration. */ - uint16_t adv_data_size; /**< Maximum advertising data size. If size is larger than @ref BLE_GAP_ADV_SR_MAX_LEN_DEFAULT then advertising extension will be used. */ - uint16_t scan_response_size; /**< Maximum scan response data size required. If size is larger than @ref BLE_GAP_ADV_SR_MAX_LEN_DEFAULT then advertising extension will be used. */ - uint8_t use_adv_ext:1; /**< If set, it configures the adverting set to use advertising extension. */ -} ble_gap_cfg_adv_config_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_adv_config_t adv_cfg; /**< Advertiser configuration, cfg_id is @ref BLE_GAP_CFG_ADV. */ - 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. - * 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_BUSY Channel map was set again before enough time had passed. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. - * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. - * - */ -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. - * - * 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. - * - * 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 - * - * 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. - * - * 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 Scan request report option. - * - * This can be used with @ref sd_ble_opt_set to make the SoftDevice send - * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. - * - * @note Due to the limited space reserved for scan request report events, - * not all received scan requests will be reported. - * - * @note If whitelisting is used, only whitelisted requests are reported. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable scan request reports. */ -} ble_gap_opt_scan_req_report_t; - -/**@brief Compatibility mode 1 option. - * - * 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. - * - * 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_scan_req_report_t scan_req_report; /**< Parameters for the scan request report 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 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 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 To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_adv_data/p_sr_data) with its corresponding - * length (len/len) set to 0. - * - * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle Advertising handle of the advertising set, for which we set the data. See @ref ble_gap_cfg_adv_config_t. - * @param[in] p_adv_data Structure with advertising data. If NULL, the advertising data will not be changed, - * and if @ref ble_data_t::len is set to 0 then advertising data will be removed. - * @param[in] p_sr_data Structure with scan response data. If NULL, the scan response data will not be changed, - * and if @ref ble_data_t::len is set to 0 then then the scan response data will be removed. - * - * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. - * @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. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. - * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - */ -SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t adv_handle, ble_data_t const * const p_adv_data, ble_data_t const * const p_sr_data)); - - -/**@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_TIMEOUT, Advertisement has timed out.} - * @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, this is either @ref BLE_GAP_ADV_SET_HANDLE_DEFAULT or a adv_handle received from @ref ble_gap_cfg_adv_config_t. - * @param[in] p_adv_params Pointer to advertising parameters structure. - * @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 connectable advertising, - * this is ignored. - * - * @retval ::NRF_SUCCESS The BLE stack has started advertising. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits and if some of the parameters are mutually-exclusive. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. - * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Observer) and try again - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, ble_gap_adv_params_t const *p_adv_params, 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 ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). - */ -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 Invalid state to perform operation. - * @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 Invalid state to perform operation (disconnection is already in progress). - */ -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] conn_handle The connection handle for the connection. Acceptable values are: - * - if role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific - * connection handle to set the transmit power for. - * - for all other roles conn_handle is ignored. - * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). - * - * @note The -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm, +8dBm and +9dBm settings are available on nRF52840 ICs. - * @note The -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +3dBm and +4dBm settings are available on other nRF52 series ICs. - * @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_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 conn_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. - * @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 Invalid state to perform operation. - * @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 Invalid state to perform operation. - * @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. - * @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 not entering a passkey or 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 @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. - * @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 Invalid state to perform operation. - * @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. - * @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 Disconnection in progress. Invalid state to perform operation. - * @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 Invalid state to perform operation. - * @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. - * - * @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, or disconnection in progress. - */ -SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi)); - - -/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). - * - * @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. - * - * @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. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @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)); - - -/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). - * - * @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 Invalid state to perform operation (most probably not in 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. - * - * @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 address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this 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_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 Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again - */ -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 Invalid state to perform operation. - */ -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 @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 a PHY for the respective direction based on the peer's PHY preferences - * and the local stack configuration. 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. - * - * @note This function returns @ref BLE_ERROR_BLOCKED_BY_OTHER_LINKS if the connection event length configured for this link - * is not sufficient for the combination of @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys. - * - * - * @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 Unsupported PHYs supplied to the call. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_BLOCKED_BY_OTHER_LINKS Other connections may block the scheduling of the current link. - * @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 Only symmetric input parameters for the Data Length Update is supported. Only - * @ref BLE_GAP_DATA_LENGTH_AUTO for max_tx_time_us and max_rx_time_us is supported. - * - * @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 to accommodate 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 Invalid state to perform operation. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. - * @retval ::NRF_ERROR_RESOURCES The requested parameters can not be accommodated. Inspect - * p_dl_limitation so 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)); - - - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GAP_H__ - -/** - @} -*/ +/* + * 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. */ +}; + +/**@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, + 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. */ +/**@}. */ + +/** @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. + @note Support for values above @ref BLE_GAP_ADV_INTERVAL_MAX + is experimental. Values above 0xFFFFFF, i.e 10,485.759375 s + are not supported. */ + /**@} */ + + +/**@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. + @note Extended scanning is only + supported as an experimental + feature in this SoftDevice. + The scanner will only receive + advertising data up to 31 bytes. */ +/** @} */ + +/**@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. + * 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. + @note Extended advertising types are only + supported as experimental features in this + SoftDevice. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising + events using extended advertising PDUs. + @note Extended advertising types are only + supported as experimental features in this + SoftDevice. */ +#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. + @note Extended advertising types are only + supported as experimental features in this + SoftDevice. */ +#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. + @note Extended advertising types are only + supported as experimental features in this + SoftDevice. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising + events using extended advertising PDUs. + @note Extended advertising types are only + supported as experimental features in this + SoftDevice. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising + events using extended advertising PDUs. + @note Extended advertising types are only + supported as experimental features in this + SoftDevice. */ +/**@} */ + +/**@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. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. */ +/**@} */ + +/**@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. + @note Coded PHY is only supported + as an experimental feature + in this SoftDevice. */ + +/**@} */ + +/**@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; /**< Include TxPower set by @ref sd_ble_gap_tx_power_set in the extended header + of the advertising PDU. + @note TxPower can only be added to the extended header when @ref type is an extended advertising type. */ +} 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. + Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ + uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. + addr is not used if 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. */ + 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. + @note Setting max_adv_evts to a values not equal to 0 is only supported + as an experimental feature in this SoftDevice. */ + 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. + @note Extended scanning is only supported as an experimental feature in this + SoftDevice. */ + 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. */ + 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 on. + See @ref BLE_GAP_PHYS. */ + uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received on. + See @ref BLE_GAP_PHYS. This field is to 0 if no packets where 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 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. + * - 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 Invalid state to perform operation. 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 Invalid state to perform operation. + * @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 Invalid state to perform operation (disconnection is already in progress). + */ +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. + * @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 Invalid state to perform operation. + * @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 Invalid state to perform operation. + * @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. + * @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 not entering a passkey or 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 @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. + * @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 Invalid state to perform operation. + * @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. + * @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. + * The application can stop the scanner from receiving more packets from this advertising event by calling this function. + * This might be useful when receiving data from extended advertising events where @ref ble_gap_evt_adv_report_t::aux_pointer + * is large. + * + * @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 Invalid state to perform operation. 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. + * + * @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 Invalid state to perform operation. + */ +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. + * + * @note @ref BLE_GAP_PHY_CODED is only supported as an experimental feature in this SoftDevice. + * When this function is used to reply to a PHY Update, depending on the peers preferences, + * @ref BLE_GAP_PHY_AUTO might result in the PHY to be changed to @ref BLE_GAP_PHY_CODED. + * + * @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 Invalid state to perform operation. + * @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 Invalid state to perform operation. + * @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/softdevice/s140/6.0.0/headers/ble_gatt.h b/softdevice/6.0.0/s140/headers/ble_gatt.h similarity index 98% rename from softdevice/s140/6.0.0/headers/ble_gatt.h rename to softdevice/6.0.0/s140/headers/ble_gatt.h index c86e86a..98a7a15 100644 --- a/softdevice/s140/6.0.0/headers/ble_gatt.h +++ b/softdevice/6.0.0/s140/headers/ble_gatt.h @@ -1,223 +1,228 @@ -/* - * Copyright (c) 2013 - 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_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include "ble_types.h" -#include "ble_ranges.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_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__ - -/** @} */ +/* + * Copyright (c) 2013 - 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_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_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/softdevice/s140/6.0.0/headers/ble_gattc.h b/softdevice/6.0.0/s140/headers/ble_gattc.h similarity index 95% rename from softdevice/s140/6.0.0/headers/ble_gattc.h rename to softdevice/6.0.0/s140/headers/ble_gattc.h index 3c94edd..7fb3920 100644 --- a/softdevice/s140/6.0.0/headers/ble_gattc.h +++ b/softdevice/6.0.0/s140/headers/ble_gattc.h @@ -1,702 +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 "ble_gatt.h" -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf.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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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__ */ - -/** - @} -*/ +/* + * 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/softdevice/s140/6.0.0/headers/ble_gatts.h b/softdevice/6.0.0/s140/headers/ble_gatts.h similarity index 96% rename from softdevice/s140/6.0.0/headers/ble_gatts.h rename to softdevice/6.0.0/s140/headers/ble_gatts.h index 744e3b6..e437b6e 100644 --- a/softdevice/s140/6.0.0/headers/ble_gatts.h +++ b/softdevice/6.0.0/s140/headers/ble_gatts.h @@ -1,835 +1,845 @@ -/* - * 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_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_l2cap.h" -#include "ble_gap.h" -#include "ble_gatt.h" -#include "nrf_svc.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 successful 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. - * @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, - * p_len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in p_data. - * 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 *(p_hvx_params->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] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with - * the contents pointed by it before sending the notification or indication. - * - * @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. - */ -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. - */ -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. - */ -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. - */ -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__ - -/** - @} -*/ +/* + * 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_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. + * @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/softdevice/s140/6.0.0/headers/ble_hci.h b/softdevice/6.0.0/s140/headers/ble_hci.h similarity index 97% rename from softdevice/s140/6.0.0/headers/ble_hci.h rename to softdevice/6.0.0/s140/headers/ble_hci.h index b48d706..f0dde9a 100644 --- a/softdevice/s140/6.0.0/headers/ble_hci.h +++ b/softdevice/6.0.0/s140/headers/ble_hci.h @@ -1,135 +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__ - -/** @} */ +/* + * 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/softdevice/s140/6.0.0/headers/ble_l2cap.h b/softdevice/6.0.0/s140/headers/ble_l2cap.h similarity index 90% rename from softdevice/s140/6.0.0/headers/ble_l2cap.h rename to softdevice/6.0.0/s140/headers/ble_l2cap.h index da3e7df..eaeb4b7 100644 --- a/softdevice/s140/6.0.0/headers/ble_l2cap.h +++ b/softdevice/6.0.0/s140/headers/ble_l2cap.h @@ -1,504 +1,506 @@ -/* - * 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_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 "ble_types.h" -#include "ble_ranges.h" -#include "ble_err.h" -#include "nrf_svc.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, /**< Set up an L2CAP channel. */ - SD_BLE_L2CAP_CH_RELEASE, /**< Release an L2CAP channel. */ - SD_BLE_L2CAP_CH_RX, /**< Receive an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_TX, /**< Transmit an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_FLOW_CONTROL, /**< Advanced SDU reception flow control. */ -}; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE, /**< L2CAP Channel Setup Request event. - \n See @ref ble_l2cap_evt_ch_setup_request_t. */ - BLE_L2CAP_EVT_CH_SETUP_REFUSED, /**< L2CAP Channel Setup Refused event. - \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ - BLE_L2CAP_EVT_CH_SETUP, /**< L2CAP Channel Setup Completed event. - \n See @ref ble_l2cap_evt_ch_setup_t. */ - BLE_L2CAP_EVT_CH_RELEASED, /**< L2CAP Channel Released event. - \n No additional event structure applies. */ - BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED, /**< L2CAP Channel SDU data buffer released event. - \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ - BLE_L2CAP_EVT_CH_CREDIT, /**< L2CAP Channel Credit received. - \n See @ref ble_l2cap_evt_ch_credit_t. */ - BLE_L2CAP_EVT_CH_RX, /**< L2CAP Channel SDU received. - \n See @ref ble_l2cap_evt_ch_rx_t. */ - BLE_L2CAP_EVT_CH_TX, /**< 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 Duffer 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__ - -/** - @} -*/ +/* + * 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_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 Duffer 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/softdevice/s140/6.0.0/headers/ble_ranges.h b/softdevice/6.0.0/s140/headers/ble_ranges.h similarity index 91% rename from softdevice/s140/6.0.0/headers/ble_ranges.h rename to softdevice/6.0.0/s140/headers/ble_ranges.h index 9bff917..0935bca 100644 --- a/softdevice/s140/6.0.0/headers/ble_ranges.h +++ b/softdevice/6.0.0/s140/headers/ble_ranges.h @@ -1,156 +1,156 @@ -/* - * 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_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 0x93 /**< GAP BLE SVC last. */ - -#define BLE_GATTC_SVC_BASE 0x94 /**< GATTC BLE SVC base. */ -#define BLE_GATTC_SVC_LAST 0x9F /**< GATTC BLE SVC last. */ - -#define BLE_GATTS_SVC_BASE 0xA0 /**< GATTS BLE SVC base. */ -#define BLE_GATTS_SVC_LAST 0xAF /**< GATTS BLE SVC last. */ - -#define BLE_L2CAP_SVC_BASE 0xB0 /**< 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__ */ - -/** - @} - @} -*/ +/* + * 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/softdevice/s140/6.0.0/headers/ble_types.h b/softdevice/6.0.0/s140/headers/ble_types.h similarity index 98% rename from softdevice/s140/6.0.0/headers/ble_types.h rename to softdevice/6.0.0/s140/headers/ble_types.h index cd5fbaf..88c9318 100644 --- a/softdevice/s140/6.0.0/headers/ble_types.h +++ b/softdevice/6.0.0/s140/headers/ble_types.h @@ -1,215 +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__ */ - -/** - @} - @} -*/ +/* + * 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/softdevice/6.0.0/s140/headers/nrf52/nrf_mbr.h b/softdevice/6.0.0/s140/headers/nrf52/nrf_mbr.h new file mode 100644 index 0000000..1b24874 --- /dev/null +++ b/softdevice/6.0.0/s140/headers/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/softdevice/s140/6.0.0/headers/nrf_error.h b/softdevice/6.0.0/s140/headers/nrf_error.h similarity index 98% rename from softdevice/s140/6.0.0/headers/nrf_error.h rename to softdevice/6.0.0/s140/headers/nrf_error.h index 09d3044..6badee9 100644 --- a/softdevice/s140/6.0.0/headers/nrf_error.h +++ b/softdevice/6.0.0/s140/headers/nrf_error.h @@ -1,90 +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__ - -/** - @} -*/ +/* + * 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/softdevice/s140/6.0.0/headers/nrf_error_sdm.h b/softdevice/6.0.0/s140/headers/nrf_error_sdm.h similarity index 97% rename from softdevice/s140/6.0.0/headers/nrf_error_sdm.h rename to softdevice/6.0.0/s140/headers/nrf_error_sdm.h index 85e08f3..530959b 100644 --- a/softdevice/s140/6.0.0/headers/nrf_error_sdm.h +++ b/softdevice/6.0.0/s140/headers/nrf_error_sdm.h @@ -1,70 +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__ - -/** - @} - @} -*/ +/* + * 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/softdevice/s140/6.0.0/headers/nrf_error_soc.h b/softdevice/6.0.0/s140/headers/nrf_error_soc.h similarity index 97% rename from softdevice/s140/6.0.0/headers/nrf_error_soc.h rename to softdevice/6.0.0/s140/headers/nrf_error_soc.h index ea9825e..1e784b8 100644 --- a/softdevice/s140/6.0.0/headers/nrf_error_soc.h +++ b/softdevice/6.0.0/s140/headers/nrf_error_soc.h @@ -1,85 +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__ -/** - @} - @} -*/ +/* + * 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/softdevice/s140/6.0.0/headers/nrf_nvic.h b/softdevice/6.0.0/s140/headers/nrf_nvic.h similarity index 96% rename from softdevice/s140/6.0.0/headers/nrf_nvic.h rename to softdevice/6.0.0/s140/headers/nrf_nvic.h index 83ba6a0..f5c7e8e 100644 --- a/softdevice/s140/6.0.0/headers/nrf_nvic.h +++ b/softdevice/6.0.0/s140/headers/nrf_nvic.h @@ -1,485 +1,486 @@ -/* - * Copyright (c) 2016 - 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_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_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 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_EGU5_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)) - { - return 0; - } - if( priority == 0 - || priority == 1 - || priority == 4 - ) - { - 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__ - -/**@} */ +/* + * Copyright (c) 2016 - 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_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 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)) + { + return 0; + } + if( priority == 0 + || priority == 1 + || priority == 4 + ) + { + 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/softdevice/6.0.0/s140/headers/nrf_sd_def.h b/softdevice/6.0.0/s140/headers/nrf_sd_def.h new file mode 100644 index 0000000..5b799a9 --- /dev/null +++ b/softdevice/6.0.0/s140/headers/nrf_sd_def.h @@ -0,0 +1,59 @@ +/** + * 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. + * + */ +#ifndef NRF_SD_DEF_H__ +#define NRF_SD_DEF_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ +#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ +#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ +#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ + + +#ifdef __cplusplus +} +#endif + +#endif /* NRF_SD_DEF_H__ */ diff --git a/softdevice/s140/6.0.0/headers/nrf_sdm.h b/softdevice/6.0.0/s140/headers/nrf_sdm.h similarity index 97% rename from softdevice/s140/6.0.0/headers/nrf_sdm.h rename to softdevice/6.0.0/s140/headers/nrf_sdm.h index 854f904..8c48d93 100644 --- a/softdevice/s140/6.0.0/headers/nrf_sdm.h +++ b/softdevice/6.0.0/s140/headers/nrf_sdm.h @@ -1,355 +1,358 @@ -/* - * Copyright (c) 2015 - 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_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include "nrf_svc.h" -#include "nrf.h" -#include "nrf_soc.h" -#include "nrf_error_sdm.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 (0) - -/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -#define SD_MINOR_VERSION (0) - -/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -#define SD_BUGFIX_VERSION (0) - -/** @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 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. - */ -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__ - -/** - @} -*/ +/* + * Copyright (c) 2015 - 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_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 (0) + +/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ +#define SD_BUGFIX_VERSION (0) + +/** @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 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/softdevice/s140/6.0.0/headers/nrf_soc.h b/softdevice/6.0.0/s140/headers/nrf_soc.h similarity index 83% rename from softdevice/s140/6.0.0/headers/nrf_soc.h rename to softdevice/6.0.0/s140/headers/nrf_soc.h index 971ee23..3fa1772 100644 --- a/softdevice/s140/6.0.0/headers/nrf_soc.h +++ b/softdevice/6.0.0/s140/headers/nrf_soc.h @@ -1,980 +1,1036 @@ -/* - * Copyright (c) 2015 - 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_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * - */ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include -#include "nrf_svc.h" -#include "nrf.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 (0x2B) /**< 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_EGU2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_EGU2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. - The default interrupt priority for this handler is set to 4 */ -#define RADIO_NOTIFICATION_IRQn (SWI1_EGU1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_EGU1_IRQHandler) /**< The radio notification IRQ handler. - The default interrupt priority for this handler is set to 4 */ -#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. */ - -/**@} */ - -/**@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, - SD_PPI_CHANNEL_ENABLE_CLR, - SD_PPI_CHANNEL_ASSIGN, - SD_PPI_GROUP_TASK_ENABLE, - SD_PPI_GROUP_TASK_DISABLE, - SD_PPI_GROUP_ASSIGN, - SD_PPI_GROUP_GET, - SD_FLASH_PAGE_ERASE, - SD_FLASH_WRITE, - SD_FLASH_PROTECT, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE, - SD_MUTEX_RELEASE, - SD_RAND_APPLICATION_POOL_CAPACITY_GET, - SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, - SD_RAND_APPLICATION_VECTOR_GET, - SD_POWER_MODE_SET, - SD_POWER_SYSTEM_OFF, - SD_POWER_RESET_REASON_GET, - SD_POWER_RESET_REASON_CLR, - SD_POWER_POF_ENABLE, - SD_POWER_POF_THRESHOLD_SET, - SD_POWER_RAM_POWER_SET, - SD_POWER_RAM_POWER_CLR, - SD_POWER_RAM_POWER_GET, - SD_POWER_GPREGRET_SET, - SD_POWER_GPREGRET_CLR, - SD_POWER_GPREGRET_GET, - SD_POWER_DCDC_MODE_SET, - SD_APP_EVT_WAIT, - SD_CLOCK_HFCLK_REQUEST, - SD_CLOCK_HFCLK_RELEASE, - SD_CLOCK_HFCLK_IS_RUNNING, - SD_RADIO_NOTIFICATION_CFG_SET, - SD_ECB_BLOCK_ENCRYPT, - SD_ECB_BLOCKS_ENCRYPT, - SD_RADIO_SESSION_OPEN, - SD_RADIO_SESSION_CLOSE, - SD_RADIO_REQUEST, - SD_EVT_GET, - SD_TEMP_GET, - SD_POWER_USBPWRRDY_ENABLE, - SD_POWER_USBDETECTED_ENABLE, - SD_POWER_USBREMOVED_ENABLE, - SD_POWER_USBREGSTATUS_GET, - SVC_SOC_LAST -}; - -/**@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_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-fail 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 Sets the DCDC mode. - * - * Enable or disable the DCDC peripheral. - * - * @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. -* -* -* @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 or read from protected location. -* @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). -* -* -* @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 protected page. -* @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 To read the values read them directly. They are only write-protected. - * - * @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_FORBIDDEN Tried to protect the SoftDevice. - * @retval ::NRF_ERROR_NOT_SUPPORTED Not supported for the device. - * @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)); - -/**@} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SOC_H__ - -/**@} */ +/* + * 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 4 */ +#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 4 */ +#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. */ + +/**@} */ + +/**@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/softdevice/6.0.0/s140/headers/nrf_svc.h b/softdevice/6.0.0/s140/headers/nrf_svc.h new file mode 100644 index 0000000..292c692 --- /dev/null +++ b/softdevice/6.0.0/s140/headers/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/softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_licence-agreement.txt b/softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_licence-agreement.txt new file mode 100644 index 0000000..2d1bc12 --- /dev/null +++ b/softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_licence-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/softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_softdevice.hex b/softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_softdevice.hex new file mode 100644 index 0000000..83f9e50 --- /dev/null +++ b/softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_softdevice.hex @@ -0,0 +1,9443 @@ +: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 +:10100000E0120020754D0200192F0000E74C02008D +:10101000192F0000192F0000192F000000000000F8 +:10102000000000000000000000000000CD4D0200A4 +:10103000192F000000000000192F0000192F0000D8 +:10104000354E02003B4E0200192F0000192F000000 +:10105000192F0000192F0000192F0000192F000070 +:10106000414E0200192F0000192F0000474E0200C8 +:10107000192F00004D4E0200534E0200594E02003F +:10108000192F0000192F0000192F0000192F000040 +:10109000192F0000192F0000192F0000192F000030 +:1010A000192F00005F4E0200192F0000192F0000B9 +:1010B000192F0000192F0000192F0000192F000010 +:1010C000654E0200192F0000192F0000192F000093 +:1010D000192F0000192F0000192F0000192F0000F0 +:1010E000192F0000192F0000192F0000192F0000E0 +:1010F000192F0000192F0000192F0000192F0000D0 +:10110000192F0000192F000000F002F823F01FFE35 +:101110000AA090E8000C82448344AAF10107DA4552 +:1011200001D123F014FEAFF2090EBAE80F0013F05C +:10113000010F18BFFB1A43F00103184734420200A5 +:10114000544202000A444FF0000C10F8013B13F027 +:10115000070408BF10F8014B1D1108BF10F8015B10 +:10116000641E05D010F8016B641E01F8016BF9D103 +:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A +:101180006D1E58BF01F801CBFAD505E014F8016BCC +:1011900001F8016B6D1EF9D59142D6D3704700005E +:1011A0000023002400250026103A28BF78C1FBD870 +:1011B000520728BF30C148BF0B6070471FB500F011 +:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC +:1011D0000880EFF30980014A10470000752E0000D7 +:1011E0008269034981614FF001001044704700009B +:1011F000F511000001B41EB400B512F061FF01B496 +:101200000198864601BC01B01EBD0000F0B4404606 +:10121000494652465B460FB402A0013001B506486C +:10122000004700BF01BC86460FBC804689469246F7 +:101230009B46F0BC704700000911000023F084BDFC +:1012400070B51A4C054609202070A01C00F05FF80C +:101250005920A08029462046BDE8704008F060B8BB +:1012600008F069B870B50C461149097829B1A0F1A8 +:1012700060015E2908D3012013E0602804D06928AA +:1012800002D043F201000CE020CC0A4E94E80E009C +:1012900006EB8000A0F58050241FD0F8806E284611 +:1012A000B047206070BD012070470000080000209A +:1012B0001C000020CC4E020010B504460021012085 +:1012C00000F03DF800210B2000F039F8042119202E +:1012D00000F035F804210D2000F031F804210E2033 +:1012E00000F02DF804210F2000F029F80421C84354 +:1012F00000F025F80621162000F021F8062115201F +:1013000000F01DF82046FFF79BFF002010BDA9212B +:1013100001807047FFF7A4BF11487047104870471D +:10132000104A10B514680F4B0F4A08331A60FFF7C4 +:1013300099FF0C48001D046010BD704770474907B5 +:10134000090E002806DA00F00F0000F1E02080F816 +:10135000141D704700F1E02080F800147047000071 +:1013600003F900421005024001000001FE4800217F +:1013700001604160018170472DE9F743044692B056 +:101380009146406813F060F940B1606813F065F968 +:1013900020B9607800F00300022801D0012000E0AD +:1013A0000020F14E3072484613F00AF918B11020AF +:1013B00015B0BDE8F0834946012001F018FF002870 +:1013C000F6D101258DF842504FF4C050ADF84000E1 +:1013D000002210A9284606F04BFC0028E8D18DF821 +:1013E00042504FF428504FF00008ADF840004746F7 +:1013F0001C216846CDF81C8023F04DFC9DF81C0094 +:1014000008AA20F00F00401C20F0F00010308DF8EA +:101410001C0020788DF81D0061789DF81E0061F396 +:10142000420040F001008DF81E009DF800000AA95E +:1014300040F002008DF800002089ADF83000ADF8D2 +:101440003270608907AFADF834000B97606810AC5C +:101450000E900A94684606F000FA0028A8D1BDF85C +:10146000200030808DF8425042F60120ADF8400057 +:101470009DF81E0008AA20F00600801C20F0010044 +:101480008DF81E000220ADF83000ADF8340013A82E +:101490000E900AA9684606F0E0F9002888D1BDF848 +:1014A00020007080311D484600F033F9002887D1B4 +:1014B0008DF8425042F6A620ADF840001C21684647 +:1014C000CDF81C8023F0E7FB9DF81C00ADF83450EC +:1014D00020F00F00401C20F0F00010308DF81C00B0 +:1014E0009DF81D0008AA20F0FF008DF81D009DF852 +:1014F0001E000AA920F0060040F00100801C8DF8B3 +:101500001E009DF800008DF8445040F002008DF858 +:101510000000CDE90A4711A80E90ADF8305068469A +:1015200006F09BF9002899D1BDF82000F08000203A +:101530003EE73EB504460820ADF80000204613F013 +:101540003FF808B110203EBD2146012001F04FFEBA +:101550000028F8D12088ADF804006088ADF80600B6 +:10156000A088ADF80800E088ADF80A007E4801AB1D +:101570006A468088002106F075FDBDF80010082934 +:10158000E1D003203EBD1FB5044600200290082094 +:10159000ADF80800CDF80CD0204613F011F810B1CA +:1015A000102004B010BD704802AA81884FF6FF7069 +:1015B00006F09AFF0028F4D1BDF80810082901D0E0 +:1015C0000320EEE7BDF800102180BDF80210618015 +:1015D000BDF80410A180BDF80610E180E1E701B577 +:1015E00082B00220ADF800005F4802AB6A46408836 +:1015F000002106F037FDBDF80010022900D00320BD +:101600000EBD1CB5002100910221ADF80010019023 +:1016100012F0FCFF08B110201CBD53486A464188F7 +:101620004FF6FF7006F060FFBDF800100229F3D0FE +:1016300003201CBDFEB54C4C06461546207A0F46CD +:10164000C00705D0084612F0BBFF18B11020FEBD40 +:101650000F20FEBDF82D01D90C20FEBD304612F042 +:10166000AFFF18BB208801A905F040FE0028F4D187 +:1016700030788DF80500208801A906F0D2FC0028FA +:10168000EBD100909DF800009DF8051040F002009D +:101690008DF80000090703D040F008008DF8000025 +:1016A0002088694606F05AFC0028D6D1ADF80850CB +:1016B00020883B4602AA002106F0D4FCBDF80810A1 +:1016C000A942CAD00320FEBD7CB50546002000908B +:1016D00001900888ADF800000C462846019512F0EC +:1016E000B3FF18B9204612F091FF08B110207CBD5D +:1016F00015B1BDF8000050B11B486A4601884FF68D +:10170000FF7006F0F1FEBDF8001021807CBD0C20BA +:101710007CBD30B593B0044600200D4600901421E6 +:1017200001A823F0B8FA1C2108A823F0B4FA9DF808 +:101730000000CDF808D020F00F00401C20F0F00091 +:1017400010308DF800009DF8010020F0FF008DF8AA +:1017500001009DF8200040F002008DF820000120DB +:101760008DF8460002E000000C02002042F6042042 +:10177000ADF8440011A801902088ADF83C006088C5 +:10178000ADF83E00A088ADF84000E088ADF842001A +:101790009DF8020006AA20F00600801C20F001003F +:1017A0008DF802000820ADF80C00ADF810000FA86D +:1017B000059001A908A806F050F8002803D1BDF84B +:1017C00018002880002013B030BD0000F0B5007B69 +:1017D000059F1E4614460D46012800D0FFDF0C2051 +:1017E00030803A203880002C08D0287A032806D090 +:1017F000287B012800D0FFDF17206081F0BDA88979 +:10180000FBE72DE9F04786B0144691F80C900E9A4C +:101810000D46B9F1010F0BD01021007B2E8A8846AE +:10182000052807D0062833D0FFDF06B0BDE8F087D3 +:101830000221F2E7E8890C2100EB400001EB4000B7 +:10184000188033201080002CEFD0E88960810027B9 +:101850001AE00096688808F1020301AA696900F09D +:1018600084FF06EB0800801C07EB470186B204EBFF +:101870004102BDF8040090810DF1060140460E3290 +:1018800010F074FF7F1CBFB26089B842E1D8CCE78A +:1018900034201080E889B9F1010F11D0122148439A +:1018A0000E301880002CC0D0E88960814846B9F11C +:1018B000010F00D00220207300270DF1040A1FE061 +:1018C0000621ECE70096688808F1020301AA69691D +:1018D00000F04BFF06EB0800801C86B2B9F1010F47 +:1018E00012D007EBC70004EB4000BDF80410C18123 +:1018F00010220AF10201103023F02CF97F1CBFB234 +:101900006089B842DED890E707EB470104EB41025B +:10191000BDF80400D0810AF102014046103210F0F7 +:1019200025FFEBE72DE9F0470E4688B090F80CC094 +:1019300096F80C80378AF5890C20109902F10C0476 +:101940004FF0000ABCF1030F08D0BCF1040F3ED0E9 +:10195000BCF1070F7DD0FFDF08B067E705EB850C12 +:1019600000EB4C00188031200880002AF4D0A8F148 +:10197000060000F0FF09558125E0182101A823F099 +:101980008AF900977088434601AA716900F0EDFE5C +:10199000BDF804002080BDF80600E080BDF8080016 +:1019A0002081A21C0DF10A01484610F0DFFEB9F1BA +:1019B000000F00D018B184F804A0A4F802A007EB2F +:1019C000080087B20A346D1EADB2D6D2C4E705EB6B +:1019D000850C00EB4C00188032200880002ABBD018 +:1019E000A8F1050000F0FF09558137E000977088E5 +:1019F000434601AA716900F0B8FE9DF80600BDF8E3 +:101A00000410E1802179420860F3000162F3410192 +:101A1000820862F38201C20862F3C301020962F321 +:101A20000411420962F34511820962F386112171A2 +:101A3000C0096071BDF80700208122460DF109013F +:101A4000484610F093FE18B184F802A0A4F800A054 +:101A500000E007E007EB080087B20A346D1EADB264 +:101A6000C4D279E7A8F1020084B205FB08F000F1C6 +:101A70000E0CA3F800C035230B80002AA6D0558198 +:101A80009481009783B270880E32716900F06DFE08 +:101A900062E72DE9F84F1E460A9D0C4681462AB1A1 +:101AA000607A00F58070D080E089108199F80C0090 +:101AB0000C274FF000084FF00E0A0D2873D2DFE814 +:101AC00000F09E070E1C28303846556A7373730069 +:101AD000214648460095FFF779FEBDE8F88F207B48 +:101AE0009146082802D0032800D0FFDF378030203D +:101AF0000AE000BFA9F80A80EFE7207B914604289E +:101B000000D0FFDF378031202880B9F1000FF1D1FC +:101B1000E3E7207B9146042800D0FFDF37803220A6 +:101B2000F2E7207B9146022800D0FFDF3780332088 +:101B3000EAE7207B1746022800D0FFDF3420A6F812 +:101B400000A02880002FC8D0A7F80A80C5E7207B16 +:101B50001746042800D0FFDF3520A6F800A0288013 +:101B6000002FBAD04046A7F80A8012E0207B174623 +:101B7000052802D0062800D0FFDF10203080362054 +:101B80002880002FA9D0E0897881A7F80E80B9F8C5 +:101B90000E00B881A1E7207B9146072800D0FFDF27 +:101BA00037803720B0E72AE04FF0120018804FF05E +:101BB00038001700288090D0E0897881A7F80E803F +:101BC000A7F8108099F80C000A2805D00B2809D036 +:101BD0000C280DD0FFDF80E7207B0A2800D0FFDF34 +:101BE00001200AE0207B0B2800D0FFDF042004E066 +:101BF000207B0C2800D0FFDF052038736DE7FFDF66 +:101C00006BE770B50C46054601F025FC20B1007865 +:101C1000222804D2082070BD43F2020070BD0521C5 +:101C200028460FF021F8206008B1002070BD032085 +:101C300070BD30B44880087820F00F00C01C20F040 +:101C4000F000903001F8080B1DCA81E81D0030BC7F +:101C500007F0E7BB2DE9FF4784B0002782460297D3 +:101C600007989046894612300AF048F9401D20F046 +:101C70000306079828B907A95046FFF7C2FF0028B6 +:101C800054D1B9F1000F05D00798017B19BB052588 +:101C900004681BE098F80000092803D00D2812D032 +:101CA000FFDF46E0079903254868B0B3497B4288C7 +:101CB0007143914239D98AB2B3B2011D0EF047FE89 +:101CC0000446078002E0079C042508340CB12088F4 +:101CD00010B1032D29D02CE00798012112300AF011 +:101CE0003FF9ADF80C00024602AB2946504608F019 +:101CF000F4F9070001D1A01C029007983A4612306F +:101D0000C8F80400A8F802A003A94046029B0AF004 +:101D100034F9D8B10A2817D200E006E0DFE800F075 +:101D200007091414100B0D141412132014E60020CC +:101D300012E6112010E608200EE643F203000BE63F +:101D4000072009E60D2007E6032005E6BDF80C0094 +:101D50002346CDE900702A465046079900F015FD4C +:101D600057B9032D08D10798B3B2417B406871433E +:101D70008AB2011D0EF0FFFDB9F1000FD7D007990F +:101D800081F80C90D3E72DE9FE4F91461A881C4646 +:101D90008A468046FAB102AB494608F09EF9050032 +:101DA00019D04046A61C27880FF0A2F83246072615 +:101DB00029463B4600960EF0B0FC20882346CDE92C +:101DC00000504A465146404600F0DFFC002020808B +:101DD0000120BDE8FE8F0020FBE710B586B01C4651 +:101DE000AAB104238DF800301388ADF8083052886A +:101DF000ADF80A208A788DF80E200988ADF80C100D +:101E000000236A462146FFF725FF06B010BD1020CB +:101E1000FBE770B50D4605210EF026FF040000D14A +:101E2000FFDF294604F11200BDE870400AF081B8D6 +:101E30002DE9F8430D468046002607F0EFFA0446E8 +:101E40002878102878D2DFE800F0773B345331311E +:101E5000123131310831313131312879001FC0B2AE +:101E6000022801D0102810D114BBFFDF35E004B9DF +:101E7000FFDF052140460EF0F7FE007B032806D069 +:101E800004280BD0072828D0FFDF072655E0287943 +:101E9000801FC0B2022820D050B1F6E72879401F39 +:101EA000C0B2022819D0102817D0EEE704B9FFDF1E +:101EB00013E004B9FFDF287901280ED1172137E09C +:101EC000052140460EF0D0FE070000D1FFDF07F1EC +:101ED000120140460AF00AF82CB12A462146404633 +:101EE000FFF7A7FE29E01321404602F0A9FD24E0F8 +:101EF00004B9FFDF052140460EF0B6FE060000D112 +:101F0000FFDF694606F1120009F0FAFF060000D073 +:101F1000FFDFA988172901D2172200E00A46BDF881 +:101F20000000824202D9014602E005E01729C5D32C +:101F3000404600F03AFCD0E7FFDF3046BDE8F883CA +:101F4000401D20F0030219B102FB01F0001D00E06A +:101F500000201044704713B5009848B1002468462B +:101F60000EF09FFC002C02D1F74A009911601CBDB5 +:101F700001240020F4E72DE9F0470C461546242102 +:101F8000204622F088FE05B9FFDFA8786073288814 +:101F9000DFF8B4A3401D20F00301AF788946DAF8DA +:101FA00000000EF09CFC060000D1FFDF4FF000089F +:101FB0002660A6F8008077B109FB07F1091D0AD059 +:101FC000DAF800000EF08BFC060000D1FFDF66603F +:101FD000C6F8008001E0C4F80480298804F11200EA +:101FE000BDE8F04709F074BF2DE9F047804601F1E4 +:101FF00012000D46814609F081FF401DD24F20F0AE +:1020000003026E7B1446296838680EF093FC3EB1DB +:1020100004FB06F2121D03D0696838680EF08AFCD2 +:1020200005200EF0C9FD044605200EF0CDFD201A56 +:10203000012802D138680EF047FC49464046BDE809 +:10204000F04709F05ABF70B5054605210EF00CFEA9 +:10205000040000D1FFDF04F112012846BDE8704002 +:1020600009F044BF2DE9F04F91B04FF0000BADF8EF +:1020700034B0ADF804B047880C46054692460521B9 +:1020800038460EF0F1FD060000D1FFDF24B1A78035 +:10209000A4F806B0A4F808B0297809220B20B2EB06 +:1020A000111F7DD12A7A04F1100138274FF00C0856 +:1020B0004FF001090391102A73D2DFE802F072F2A7 +:1020C000F1F07F08D2888D9F3DDBF3EEB6B6307B12 +:1020D000022800D0FFDFA88908EBC001ADF804108A +:1020E0003021ADF83410002C25D06081B5F80E9069 +:1020F00000271DE004EBC708317C88F80E10F18939 +:10210000A8F80C10CDF800906888042304AA296967 +:1021100000F02BFBBDF81010A8F8101009F1040016 +:10212000BDF812107F1C1FFA80F9A8F81210BFB278 +:102130006089B842DED80DE1307B022800D0FFDF95 +:10214000E98908EBC100ADF804003020ADF8340097 +:10215000287B0A90001FC0B20F90002CEBD0618149 +:10216000B5F81090002725E0CDF8009068886969DF +:1021700003AA0A9B00F0F9FA0A9804EBC70848443E +:102180001FFA80F908F10C0204A90F9810F0EEFA7A +:1021900018B188F80EB0A8F80CB0BDF80C1001E02A +:1021A000D4E0CFE0A8F81010BDF80E107F1CA8F8FE +:1021B0001210BFB26089B842D6D8CBE00DA800900B +:1021C00001AB224629463046FFF71BFBC2E0307BBD +:1021D000082805D0FFDF03E0307B082800D0FFDFB0 +:1021E000E8891030ADF804003620ADF83400002C3A +:1021F0003FD0A9896181F189A18127E0307B09283D +:1022000000D0FFDFA88900F10C01ADF804103721E0 +:10221000ADF83410002C2CD06081E8890090AB8997 +:10222000688804F10C02296956E0E88939211030E8 +:1022300080B2ADF80400ADF83410002C74D0A98938 +:102240006181287A0E280AD002212173E989E1816F +:10225000288A0090EB8968886969039A3CE001212B +:10226000F3E70DA8009001AB224629463046FFF760 +:1022700059FB6FE0307B0A2800D0FFDF1220ADF859 +:102280000400ADF834704CB3A9896181A4F810B092 +:10229000A4F80EB084F80C905CE020E002E031E09D +:1022A00039E042E0307B0B2800D0FFDF288AADF810 +:1022B00034701230ADF8040084B104212173A9896F +:1022C0006181E989E181298A2182688A00902B8ACB +:1022D000688804F11202696900F047FA3AE0307B3D +:1022E0000C2800D0FFDF1220ADF80400ADF83470E8 +:1022F0003CB305212173A4F80AB0A4F80EB0A4F8E9 +:1023000010B027E00DA8009001AB224629463046C8 +:10231000FFF75CFA1EE00DA8009001AB22462946AB +:102320003046FFF7B6FB15E034E03B21ADF8040082 +:10233000ADF8341074B3A4F80690A4F808B084F88B +:102340000AB007E0FFDF05E010000020297A01292C +:1023500017D0FFDFBDF80400AAF800006CB1BDF88B +:1023600034002080BDF804006080BDF834003928B6 +:1023700003D03C2801D086F80CB011B00020BDE895 +:10238000F08F3C21ADF80400ADF8341014B1697A37 +:10239000A172DFE7AAF80000EFE72DE9F8435688BD +:1023A0000F4680461546052130460EF05DFC0400C0 +:1023B00000D1FFDF123400943B46414630466A6844 +:1023C00009F00FFFBAE570B50D4605210EF04CFC83 +:1023D000040000D1FFDF294604F11200BDE870407F +:1023E00009F099BD70B50D4605210EF03DFC0400C5 +:1023F00000D1FFDF294604F11200BDE8704009F06A +:10240000B7BD70B5054605210EF02EFC040000D1C5 +:10241000FFDF04F1080321462846BDE8704004228E +:10242000B1E470B5054605210EF01EFC040000D194 +:10243000FFDF214628462368BDE870400522A2E45C +:1024400070B5064605210EF00FFC040000D1FFDF39 +:1024500004F1120009F052FD401D20F0030511E0C7 +:10246000011D00880322431821463046FFF78BFCEC +:1024700000280BD0607BABB2684382B26068011D5C +:102480000EF0AFFA606841880029E9D170BD70B5DF +:102490000E46054606F0C2FF040000D1FFDF012012 +:1024A000207266726580207820F00F00C01C20F03A +:1024B000F00030302070BDE8704006F0B2BF2DE96A +:1024C000F0438BB00D461446814606A9FFF799FBF1 +:1024D000002814D14FF6FF7601274FF420588CB115 +:1024E00003208DF800001020ADF8100007A805901B +:1024F00007AA204604A910F058F978B107200BB0BC +:10250000BDE8F0830820ADF808508DF80E708DF806 +:102510000000ADF80A60ADF80C800CE00698A178D8 +:1025200001742188C1818DF80E70ADF80850ADF8A6 +:102530000C80ADF80A606A4602214846069BFFF708 +:1025400089FBDCE708B501228DF8022042F6020281 +:10255000ADF800200A4603236946FFF73EFC08BD9C +:1025600008B501228DF8022042F60302ADF80020E2 +:102570000A4604236946FFF730FC08BD00B587B062 +:1025800079B102228DF800200A88ADF80820498828 +:10259000ADF80A1000236A460521FFF75BFB07B080 +:1025A00000BD1020FBE709B1072316E407207047A0 +:1025B00070B588B00D461446064606A9FFF721FB04 +:1025C00000280ED17CB10620ADF808508DF800002F +:1025D000ADF80A40069B6A460821DC813046FFF7C9 +:1025E00039FB08B070BD05208DF80000ADF808502B +:1025F000F0E700B587B059B107238DF80030ADF88A +:102600000820039100236A460921FFF723FBC6E750 +:102610001020C4E770B588B00C460646002506A910 +:10262000FFF7EFFA0028DCD106980121123009F0FB +:1026300097FC9CB12178062921D2DFE801F0200522 +:1026400005160318801E80B2C01EE28880B20AB14F +:10265000A3681BB1824203D90C20C2E71020C0E757 +:10266000042904D0A08850B901E00620B9E7012967 +:1026700013D0022905D004291CD005292AD007200F +:10268000AFE709208DF800006088ADF80800E08809 +:10269000ADF80A00A068039023E00A208DF800003E +:1026A0006088ADF80800E088ADF80A00A0680A2547 +:1026B000039016E00B208DF800006088ADF808004C +:1026C000A088ADF80A00E088ADF80C00A0680B25E2 +:1026D000049006E00C208DF8000060788DF808006A +:1026E0000C256A4629463046069BFFF7B3FA78E781 +:1026F00000B587B00D228DF80020ADF8081000233A +:102700006A461946FFF7A6FA49E700B587B071B1E6 +:1027100002228DF800200A88ADF808204988ADF81B +:102720000A1000236A460621FFF794FA37E71020C3 +:1027300035E770B586B0064601200D46ADF80810A5 +:102740008DF80000014600236A463046FFF782FA02 +:10275000040008D12946304605F09EFC0021304691 +:1027600005F0B8FC204606B070BDF8B51C4615460D +:102770000E46069F0EF0AAFB2346FF1DBCB2314653 +:102780002A4600940DF095FFF8BD30B41146DDE9FE +:1027900002423CB1032903D0002330BC08F026BB21 +:1027A0000123FAE71A8030BC704770B50C46054625 +:1027B000FFF72FFB2146284605F07DFC2846BDE8A3 +:1027C0007040012105F086BC4FF0E0224FF400413B +:1027D0000020C2F88011204908702049900208604A +:1027E000704730B51C4D04462878A04218BF002C15 +:1027F00002D0002818BFFFDF2878A04208BF30BDF4 +:102800002C701749154A0020ECB1164DDFF858C05E +:10281000131F012C0DD0022C1CBFFFDF30BD086040 +:1028200003200860CCF800504FF4000010601860DE +:1028300030BD086002200860CCF800504FF04070B6 +:102840001060186030BD086008604FF06070106064 +:1028500030BD00B5FFDF00BD1800002008F50140C5 +:1028600000F500408C02002014F5004070B50B20EC +:1028700000F0B5F9082000F0B2F900210B2000F0BB +:10288000C4F90021082000F0C0F9EC4C0125656076 +:10289000A5600020C4F84001C4F84401C4F8480110 +:1028A0000B2000F0A7F9082000F0A4F90B2000F09D +:1028B0008BF9256070BD10B50B2000F090F9082051 +:1028C00000F08DF9DD48012141608160DC490A6832 +:1028D000002AFCD10021C0F84011C0F84411C0F812 +:1028E00048110B2000F086F9BDE81040082000F0E8 +:1028F00081B910B50B2000F07DF9BDE8104008202B +:1029000000F078B900B530B1012806D0022806D011 +:10291000FFDF002000BDCB4800BDCB4800BDCA484A +:10292000001D00BD70B5C9494FF000400860C84D9A +:10293000C00BC5F80803C74800240460C5F840412F +:102940000820C43500F04BF9C5F83C41C24804707A +:1029500070BD08B5B94A002128B1012811D002285C +:102960001CD0FFDF08BD4FF48030C2F80803C2F866 +:102970004803B3483C300160C2F84011BDE808404C +:10298000D0E74FF40030C2F80803C2F84803AC485F +:1029900040300160C2F84411AB480CE04FF4802095 +:1029A000C2F80803C2F84803A54844300160C2F8E1 +:1029B0004811A548001D0068009008BD70B5164676 +:1029C0000D460446022800D9FFDF00229B48012360 +:1029D00004F110018B4000EB8401C1F8405526B191 +:1029E000C1F84021C0F8043303E0C0F80833C1F84F +:1029F0004021C0F8443370BD2DE9F0411C46154616 +:102A000030B1012834D0022839D0FFDFBDE8F08191 +:102A1000891E002221F07F411046FFF7CFFF012CD5 +:102A200024D000208C4E8A4F012470703C6189496B +:102A300000203C3908600220091D086085490420F7 +:102A40003039086083483D350560C7F800420820EA +:102A500000F0D0F82004C7F80403082000F0B4F810 +:102A60007A49E007091F08603470CFE70120D9E7F1 +:102A7000012B02D00022012005E00122FBE7012BFF +:102A800004D000220220BDE8F04197E70122F9E7D7 +:102A90006B480068704770B500F0C7F8674C054692 +:102AA000D4F840010026012809D1D4F80803C00356 +:102AB00005D54FF48030C4F80803C4F84061D4F859 +:102AC000440101280CD1D4F80803800308D54FF441 +:102AD0000030C4F80803C4F84461012010F029FE56 +:102AE000D4F8480101280CD1D4F80803400308D5D4 +:102AF0004FF48020C4F80803C4F84861022010F0A5 +:102B000018FE5648056070BD70B500F08EF8524D45 +:102B10000446287858B1FFF705FF687820B10020F7 +:102B200085F8010010F005FE4C48046070BD0320DC +:102B3000F8E74FF0E0214FF40010C1F800027047B1 +:102B4000152000F057B8424901200861082000F024 +:102B500051B83F494FF47C10C1F8080300200246E9 +:102B600001EB8003C3F84025C3F84021401CC0B2EC +:102B70000628F5D37047410A43F609525143C0F382 +:102B8000080010FB02F000F5807001EB5020704748 +:102B900010B5430B48F2376463431B0C5C020C60B6 +:102BA0002F4C03FB04002F4B4CF2F72443435B0DE7 +:102BB00013FB04F404EB402000F580704012107009 +:102BC00008681844086010BD00F01F020121914000 +:102BD0004009800000F1E020C0F80011704700F0CB +:102BE0001F02012191404009800000F1E020C0F85F +:102BF0008011704700F01F020121914040098000C0 +:102C000000F1E020C0F8801270474907090E002843 +:102C100006DA00F00F0000F1E02080F8141D704784 +:102C200000F1E02080F8001470470C48001F006895 +:102C30000A4A0D49121D11607047000000B00040A3 +:102C400004B500404081004044B1004008F5014017 +:102C500000800040408500403800002014050240FC +:102C6000F7C2FFFF6F0C0100010000010A4810B518 +:102C70000468094909480831086010F0EEFD06486B +:102C8000001D046010BD0649002008604FF0E021DF +:102C90000220C1F8800270471005024001000001C7 +:102CA000FC1F004010B50D2000F06FF8C4B26FF0AB +:102CB000040000F06AF8C0B2844200D0FFDF3A4955 +:102CC0000120086010BD70B50D2000F048F8374CA9 +:102CD0000020C4F800010125C4F804530D2000F0C1 +:102CE00049F825604FF0E0216014C1F8000170BD83 +:102CF00010B50D2000F033F82C480121416000216F +:102D0000C0F80011BDE810400D2000F033B828488D +:102D100010B5046826492748083108602349D1F8CE +:102D20000001012804D0FFDF2148001D046010BD10 +:102D30001D48001D00680022C0B2C1F8002111F03A +:102D400039F9F1E710B51948D0F800110029FBD086 +:102D5000FFF7DDFFBDE810400D2000F00BB800F0DC +:102D60001F02012191404009800000F1E020C0F8DD +:102D70008011704700F01F0201219140400980003E +:102D800000F1E020C0F880127047002806DA00F059 +:102D90000F0000F1E02090F8140D03E000F1E020B6 +:102DA00090F800044009704704D5004000D000406E +:102DB000100502400100000110B5202000F082F84B +:102DC000202000F08AF84A49202081F8000449496F +:102DD00000060860091D48480860FEF79DFA45494D +:102DE000C83108604548D0F8041341F00101C0F82B +:102DF0000413D0F8041341F08071C0F804133C4967 +:102E000001201C39C1F8000110BD10B5202000F0D0 +:102E100059F8384800210160001D0160354A481EFC +:102E2000E83A1060354AC2F80803324BC8331960DB +:102E3000C2F80001C2F8600131490860BDE81040E5 +:102E4000202000F04AB82B492E48EC390860704722 +:102E500028492C48E8390860704726480160001D61 +:102E6000521E0260704723490120E8390860BFF311 +:102E70004F8F704770B51F4A8069E83A2149116049 +:102E80001E49D1F8006100231F4D1D4A5C1E1EB172 +:102E9000A84206D300210FE0D1F8606186B1A842B4 +:102EA00009D2C1F80031C1F860311460BDE870404A +:102EB000202000F012B81168BDE8704021F012BF68 +:102EC000FFDF70BD00F01F0201219140400980002A +:102ED00000F1E020C0F88011704700F01F020121CE +:102EE00091404009800000F1E020C0F88012704756 +:102EF00020E000E000060240C41400200000024070 +:102F00000004024001000001006002000F4A126844 +:102F10000D498A420CD118470C4A12680A4B9A4252 +:102F200006D101B511F0C0F8FFF78DFFBDE80140F3 +:102F3000074909680958084706480749054A064BE2 +:102F40007047000000000000BEBAFECAB0000020BA +:102F500004000020E0120020E012002070B50C46B2 +:102F6000054609F0DBFA21462846BDE870400AF024 +:102F7000C0BB10B511F01EFDFFF726FC11F09EFB43 +:102F8000BDE8104011F050BC012081070860704777 +:102F9000012081074860704712480068C00700D0D0 +:102FA000012070470F48001F0068C00700D00120B3 +:102FB00070470C4808300068C00700D001207047F7 +:102FC000084810300068704706490C310A68D2037F +:102FD00006D5096801F00301814201D10120704743 +:102FE000002070470C0400407047704770477047DE +:102FF000704770477047704770470004050600002F +:103000002CFFFFFFDBE5B15100600200A900FFFFCC +:103010008C000000808D5B0016425791AD5F58BC5C +:103020008E702F5A0FAA100DBCD52BFD30B5FC4D5C +:103030000446062CA9780ED2DFE804F0030E0E0E2B +:103040000509FFDF08E0022906D0FFDF04E00329BD +:1030500002D0FFDF00E0FFDFAC7030BD30B50446CA +:103060001038EF4D07280CD2DFE800F0040C060CF6 +:103070000C0C0C00FFDF05E0287E112802D0FFDFDA +:1030800000E0FFDF2C7630BD2DE9F0410FF0F8FCB9 +:10309000044610F08CFE201AC5B206200DF08CFDFF +:1030A000044606200DF090FD211ADD4C207E1228EA +:1030B00018D000200F1807200DF07EFD06460720CF +:1030C0000DF082FD301A3918207E13280CD0002014 +:1030D0000144A078042809D000200844281AC0B26E +:1030E000BDE8F0810120E5E70120F1E70120F4E7E8 +:1030F000CB4810B590F825004108C94800F12600DA +:1031000005D00BF0EBFABDE8104005F0B3BF0BF0B3 +:10311000BEFAF8E730B50446A1F120000D460A28B2 +:103120004AD2DFE800F005070C1C2328353A3F445B +:10313000FFDF42E0207820283FD1FFDF3DE0B848A4 +:103140008178052939D0007E122836D020782428AD +:1031500033D0252831D023282FD0FFDF2DE0207851 +:1031600022282AD0232828D8FFDF26E0207822280A +:1031700023D0FFDF21E0207822281ED024281CD075 +:1031800026281AD0272818D0292816D0FFDF14E0C7 +:103190002078252811D0FFDF0FE0207825280CD0DB +:1031A000FFDF0AE02078252807D0FFDF05E0207840 +:1031B000282802D0FFDF00E0FFDF257030BD10B50A +:1031C000012803D0022805D0FFDF10BDBDE8104064 +:1031D00003202BE79248007E122800D0FFDF002159 +:1031E000052011F0A1F9BDE81040112036E71FB508 +:1031F00004466A46002001F01FFEB4B1BDF802206B +:103200004FF6FF700621824201D1ADF80210BDF8E1 +:103210000420824201D1ADF80410BDF808108142AB +:1032200003D14FF44860ADF8080068460CF06AF925 +:1032300005F020FF04B010BD70B514460D460646DB +:1032400011F0BEF958B90DB1A54201D90C2070BDDD +:10325000002408E056F8240011F0B2F908B110205B +:1032600070BD641CE4B2AC42F4D3002070BD2DE903 +:10327000F04105461F4690460E460024006811F0B6 +:10328000ECF908B110202BE728680028A88802D0A4 +:10329000B84202D84FE00028F5D0092020E728687E +:1032A000025DB2B1611C475C152F2DD03BDC3AD2D8 +:1032B000DFE807F03912222228282A2A3131393949 +:1032C00039393939393939392200025D32BB641C48 +:1032D000A4B2A142F9D833E0022ADED1A21C805C5C +:1032E00088F80000072801D2400701D40A20F7E639 +:1032F000307840F0010015E0D043C00707E0012A14 +:1033000007D010E00620EBE61007A0F1805000285F +:10331000F5D01846E4E63078820701D50B20DFE6C9 +:1033200040F0020030702868005D084484B2A8882C +:10333000A04202D2B1E74FF4485381B2A142AED8C5 +:103340000020CDE610B5027843F202235408012292 +:10335000022C12D003DC3CB1012C16D106E0032C68 +:1033600010D07F2C11D112E0002011E080790324CD +:10337000B4EB901F09D10A700BE08079B2EB901F7B +:1033800003D1F8E780798009F5D0184610BDFF20F9 +:103390000870002010BD224991F82E2042B191F80A +:1033A0002F10022909D0032909D043F202207047C7 +:1033B00001461B48253001F092BD032100E00121A8 +:1033C00001700020704738B50C460546694601F08B +:1033D00086FD00280DD19DF80010207861F347008C +:1033E000207055F8010FC4F80100A888A4F8050062 +:1033F000002038BD38B51378B0B1022814D0FF28AA +:103400001BD008A46D46246800944C7905EB9414F5 +:10341000247864F34703137003280AD010E00000F7 +:10342000D80100200302FF0123F0FE0313700228DD +:10343000F2D1D8B240F0010005E043F0FE00107078 +:10344000107820F0010010700868C2F80100888828 +:10345000A2F8050038BD02210DF006BC38B50C46B7 +:103460000978222901D2082038BDADF800008DF876 +:10347000022068460BF079F905F0FCFD050003D148 +:1034800021212046FFF746FE284638BD1CB5002006 +:103490008DF80000CDF80100ADF80500FE4890F869 +:1034A0002E00022801D0012000E000208DF8070046 +:1034B00068460BF092FB002800D0FFDF1CBD002205 +:1034C0000A80437892B263F345120A8043785B081E +:1034D00063F386120A8000780C282BD2DFE800F014 +:1034E0002A06090E1116191C1F220C2742F0110082 +:1034F00009E042F01D0008800020704742F01100F2 +:1035000012E042F0100040F00200F4E742F0100038 +:10351000F1E742F00100EEE742F0010004E042F082 +:103520000200E8E742F0020040F00400E3E742F066 +:103530000400E0E7072070472DE9FF478AB0002527 +:10354000BDF82C6082461C4691468DF81C507007D1 +:1035500003D5606811F034F868B9CF4F4FF0010817 +:1035600097F82E0058B197F82F00022807D160680D +:1035700011F073F818B110200EB0BDE8F0873007D5 +:1035800002D5A08980283DD8700705D4B9F1000F75 +:1035900002D097F8240098B3E07DC0F300108DF8B6 +:1035A0001B00627D072003215AB3012A2CD0022A76 +:1035B000E2D0042AE0D18DF81710F00627D4A27DBE +:1035C000072022B3012A22D0022A23D0042AD3D1F1 +:1035D0008DF819108DF81590606810B307A9FFF7E2 +:1035E000B1FE0028C8D19DF81C00FF2816D06068E5 +:1035F00050F8011FCDF80F108088ADF8130014E0CB +:1036000000E001E00720B7E78DF81780D5E78DF8D7 +:103610001980DFE702208DF81900DBE743F2022072 +:10362000AAE7CDF80F50ADF81350E07B40B9207CED +:1036300030B9607C20B9A07C10B9E07CC00601D014 +:10364000062099E78DF800A0BDF82C00ADF8020027 +:10365000A0680190A068029004F10F0001F033FC13 +:103660008DF80C000DF10D00FFF795FE00B1FFDFA6 +:103670009DF81C008DF80E008DF816508DF818502E +:10368000E07D08A900F00F008DF81A0068460CF0E4 +:10369000F8F805F0EFFC6FE7F0B59DB000228DF86B +:1036A00068208DF858208DF8602005468DF86C2034 +:1036B000129213921492159219B10FC912AC84E8A8 +:1036C0000F00754CA078052801D004280CD1129861 +:1036D0006168884200D120B91498E168884203D11A +:1036E00010B108201DB0F0BD1F26334618AA1AA934 +:1036F00012A8FFF7BCFD0028F4D133461BAA16A977 +:1037000014A8FFF7B4FD0028ECD19DF85800C007BD +:1037100001D00A20E6E7A08A410708D4A17D31B193 +:103720009DF86010890702D043F20120DAE79DF886 +:103730006010C90709D0400707D4208818B144F2A7 +:103740005061884201D90720CCE78DF8005003264C +:103750008DF8016001278DF80270BDF84C208DF8BE +:10376000032001A8129921F0F5F968460CF0F0F851 +:1037700005F080FC0028B5D18DF824508DF8256027 +:103780008DF82670BDF854208DF827200AA81499CA +:1037900021F0E0F909A80CF028F905F06BFC0028ED +:1037A000A0D112AD241D95E80F0084E80F00002081 +:1037B00098E770B586B00D46040005D010F04DFFB7 +:1037C00020B1102006B070BD0820FBE72078C107AB +:1037D000A98802D0FF2902D303E01F2901D20920C2 +:1037E000F0E7800761D4FFF74FFC38B12078C0F3D1 +:1037F000C101012904D0032902D005E01320E1E72B +:10380000254991F8241041B1C0074FF000054FF051 +:10381000010604D08DF80F6003E00720D2E78DF891 +:103820000F506846FFF7B7FD00B1FFDF2078C0F307 +:10383000C1008DF801008DF80250607808B98DF84C +:1038400002606078C00705D09DF8020040F00100DA +:103850008DF802006078800705D59DF8020040F0E1 +:1038600002008DF802006078400705D59DF802003F +:1038700040F004008DF802002078C0F380008DF83D +:1038800003006088ADF80600A088ADF80A00207A31 +:1038900058B9607A48B901E0D8010020A07A20B96F +:1038A000E07A10B9207BC00601D006208AE704F137 +:1038B000080001F008FB8DF80E0068460BF090FA46 +:1038C00005F0D8FB00288BD18DF810608DF81150D1 +:1038D000ADF81250ADF8145004A80BF0CBFA05F077 +:1038E000C9FB00288BD1E08864280AD248B10120A6 +:1038F00001F0FFFA002891D12078C00705D01520EB +:1039000004E06421B0FBF1F0F2E71320FFF7A6FB1F +:10391000002057E72DE9FF470220FF4E8DF80400F5 +:103920000027708EADF80600B84643F202094CE05D +:1039300001A80DF000F9050006D0708EA8B3A6F816 +:103940003280ADF806803EE0039CA07F01072DD5B4 +:1039500004F124000090A28EBDF80800214604F175 +:10396000360301F056FC050005D04D452AD0112D37 +:103970003CD0FFDF3AE0A07F20F00801E07F420862 +:1039800062F3C711A177810861F30000E07794F832 +:10399000210000F01F0084F820002078282826D17C +:1039A00029212046FFF7B6FB21E014E040070AD5A5 +:1039B000BDF8080004F10E0101F0A9FA05000DD0D0 +:1039C0004D4510D100257F1CFFB202200DF0F4F808 +:1039D000401CB842ACD8052D11D008E0A07F20F0E3 +:1039E0000400A07703E0112D00D0FFDF0025BDF813 +:1039F00006007086052D04D0284604B0BDE5A6F863 +:103A000032800020F9E770B50646FFF724FD054631 +:103A100005F004FD040000D1FFDF6680207820F06F +:103A20000F00801C20F0F000203020700620207253 +:103A300095F83E006072BDE8704005F0F2BC2DE9DB +:103A4000F04786B0040000D1FFDF2078B24D20F0AF +:103A50000F00801C20F0F00070302070606801784A +:103A6000491F1B2933D2DFE801F0FE32323255FD07 +:103A7000320EFDFD42FC32323278FCFCFB32323237 +:103A8000FCFCFAF9FC00C6883046FFF7E4FC05466A +:103A9000304607F0A9F8E0B16068007A85F83E008A +:103AA00021212846FFF736FB3046FEF7CCFA304698 +:103AB00003F018FE3146012010F036FDA87F20F0FB +:103AC0001000A877FFF726FF002800D0FFDF06B020 +:103AD00053E5207820F0F00020302070062020727E +:103AE00066806068007A607205F09BFCD8E7C58844 +:103AF0002846FFF7B0FC00B9FFDF606800790128B5 +:103B000000D0FFDF6068017A06B02846BDE8F047C4 +:103B100007F046BCC6883046FFF79DFC050000D183 +:103B2000FFDF05F07EFC606831460089288160680F +:103B30004089688160688089A881012010F0F4FCC8 +:103B40000020A875A87F00F003000228BFD1FFF76E +:103B5000E1FE0028BBD0FFDFB9E70079022811D0D1 +:103B600000B1FFDF05F05DFC6668B6F806A0307AAC +:103B7000361D01280CD0687E814605F0E7F9070064 +:103B800009D107E006B00220BDE8F047FFF717BBF8 +:103B9000E878F1E7FFDF0022022150460DF05BF8E4 +:103BA000040000D1FFDF22212046FFF7B3FA30796D +:103BB000012800D00220A17F804668F30101A1778F +:103BC000308B2081708B6081B08BA08184F8229033 +:103BD0008DF80880B8680090F86801906A46032163 +:103BE00050460DF038F800B9FFDFB888ADF8100086 +:103BF000B8788DF8120004AA052150460DF02BF874 +:103C000000B9FFDFB888ADF80C00F8788DF80E0029 +:103C100003AA042150460DF01EF800B9FFDF06216B +:103C200006F1120001F091F938B37079800700D5E0 +:103C3000FFDF7179E07D61F34700E075D6F806009B +:103C4000A0617089A083062106F10C0001F07DF9C6 +:103C5000E8B195F825004108607805E032E02AE0F7 +:103C600047E03FE021E035E061F347006070D5F8C0 +:103C70002600C4F80200688D12E0E07D20F0FE000E +:103C8000801CE075D6F81200A061F08ADAE760784F +:103C900020F0FE00801C6070F068C4F80200308ADA +:103CA000E0804046FFF78BFA11E706B02046BDE8FA +:103CB000F04701F037BD05F0B4FB15F8300F40F0C8 +:103CC000020005E005F0ADFB15F8300F40F00400F0 +:103CD0002870FCE6287E132809D01528E4D1162088 +:103CE000FFF7BCF906B0BDE8F04705F09ABB142019 +:103CF000F6E7A978052909D00429D5D105F091FB6B +:103D0000022006B0BDE8F047FFF790B9007900281F +:103D1000CAD0E87802E00000D801002001F0BAF82B +:103D200005F07FFB0320ECE72DE9F05F0546007806 +:103D30004FF000080009DFF820A891460C464646DF +:103D400001287AD001274FF0020C4FF6FF730228AA +:103D500074D007280BD00A2871D0FFDFA9F80060C3 +:103D600014B1A4F8008066800020BDE8F09F696867 +:103D700004F108000A78172A70D010DC4FF0000B0D +:103D8000142A31D006DC052A6DD0092A0FD0102A5A +:103D90007ED11FE0152A7CD0162AF9D1F0E01B3A1B +:103DA000052A75D2DFE802F009C5FDDAFC00C888F3 +:103DB0004FF012081026214675E14FF01C080A2624 +:103DC000D4B38888A0806868807920726868C079D8 +:103DD0006072C3E74FF01B0814266CB303202072F7 +:103DE00068688088A080B9E70A793C2AB6D00D1DA2 +:103DF0004FF010082C26FCB16988A180298B6182C4 +:103E0000298B2182698BA182A98BE1826B79024681 +:103E1000A91D1846FFF7EEFA2879012810D084F87A +:103E20000FC0FF202076C4F81CB0C4F820B0C4F83E +:103E300024B0C4F828B091E712E013E13BE135E18A +:103E4000E7730AF1040084F818B090E80E00DAF87D +:103E50001000C4E90930C4E907127FE7A8E002E0D6 +:103E6000A9F8006080E72C264FF01D08002CF7D041 +:103E70000546A380887B2A880F1D60F300022A80F4 +:103E8000887B400860F341022A80887B800801E03B +:103E9000E6E0ADE060F382022A80887BB91CC008AE +:103EA00060F3C3022A80B87A0011401C60F3041248 +:103EB00002F07F0028807878AA1CFFF79BFA387DF3 +:103EC00005F1090207F11501FFF794FA387B01F0BB +:103ED0004BF82874787B01F047F86874F87EA87472 +:103EE000787AE87497F83B002875B87B6875A5F870 +:103EF00016B0DAF81C00A861397ABAF820008842B6 +:103F000001D2014610E0B87AC0F3411002280BD06C +:103F1000012809D0288820F060002880A1840A4662 +:103F200007F11C01A86998E0288820F06000403063 +:103F3000F3E711264FF02008002C91D0A380686889 +:103F400004F10A02007920726868007B6072696877 +:103F50008B1D48791946FFF74DFAFFE60A264FF008 +:103F60002108002CE9D08888A080686880792072B8 +:103F70006868C07960729AF8301021F004018BE013 +:103F80000B264FF02208002CD7D0C888A080686884 +:103F9000007920726868007A00F0E6FF607201E044 +:103FA00052E039E06868407A00F0DEFFA072D5E6A2 +:103FB0001C264FF02608002CBFD0A38068684079EB +:103FC00060726868007AA0720AF1040090E80E003E +:103FD000DAF81000C4E90530C4E903126868007912 +:103FE0003C2803D043287DD0FFDFB7E62772B5E633 +:103FF00010264FF02408002C9FD08888A080686885 +:10400000807920816868807A608168680089A081F1 +:1040100068688089E081A1E610264FF02308002C13 +:104020008BD08888A0806868C088208168680089F3 +:10403000608168684089A08168688089E0819AF819 +:10404000301021F0020127E030264FF02508002C27 +:1040500088D0A38069682822496820F07BFD7DE62E +:104060004A4677E0287A012803D0022817D0FFDFDC +:1040700074E610264FF01F08002C85D06888A080B9 +:10408000A8892081E8896081288AA081688AE081E6 +:104090009AF8301021F001018AF830105EE64FF0F6 +:1040A00012081026688800F03DFF57E62846BDE854 +:1040B000F05F01F0C1BC287A07284DD2DFE800F09C +:1040C0004C38384A4A4A040009264FF01108002C9F +:1040D00092D06F883846FFF7BEF990F822A0A780EB +:1040E000687A00E02DE02072042138460CF0CEFD05 +:1040F000052138460CF0CAFD002138460CF0C6FDFB +:10410000012138460CF0C2FD032138460CF0BEFDFB +:10411000022138460CF0BAFD062138460CF0B6FDF7 +:10412000072138460CF0B2FD504600F0B3FE15E60C +:1041300014264FF01B08002C8AD0A380287A01286F +:1041400002D084F808C009E62772DAE90710C4E94A +:10415000031003E62146A9E7FFDFFFE570B5FE4D3A +:10416000287E122801D0082070BD0BF094F904F0CD +:1041700081FF040002D1687E00F08CFE0021052042 +:1041800010F0D2F9204670BD1CB5F348007E13280C +:1041900001D208201CBD00208DF8000068460AF0FE +:1041A00069FE04F067FF0028F4D10021052010F01B +:1041B000BBF91120FEF752FF00201CBD70B501288D +:1041C00005D0052825D0062800D0FFDF70BD8DB2B0 +:1041D0002846FFF740F9040000D1FFDF20782128AE +:1041E000F4D005F01BF968B1017821F00F01891CAA +:1041F00021F0F00110310170022101724580002090 +:10420000A07528E021462846BDE870401322FFF73C +:1042100025B9D148047EA4F1120005281FD2DFE899 +:1042200000F0060303030300FFF7AEFF01E0FFF712 +:1042300095FF0028CAD105F0F1F80028C6D0017812 +:1042400021F00F01891C21F0F00120310170132CA5 +:1042500007D002210172BDE8704005F0E2B8FFDF2F +:1042600070BD0121F6E72DE9F04116460C008046AD +:1042700000D1FFDF307820F00F00801C20F0F0002C +:10428000103030702078012804D0022818D0FFDFC9 +:10429000BDE8F0814046FFF7DEF8050000D1FFDF02 +:1042A0000320A87505F0BDF894E80F00083686E8ED +:1042B0000F00A94810F8301F41F001010170E7E735 +:1042C0004046FFF7C8F8050000D1FFDFA1884FF690 +:1042D000FF700027814202D1E288824203D08142EE +:1042E00001D1E08840B105F09CF894E80F00083651 +:1042F00086E80F00AF75CBE7A87D0128C8D17823E9 +:104300000022414610F066F80220A875C0E738B5D3 +:1043100005460C46084610F053F918BB203D062D03 +:104320004AD2DFE805F0031B373C4230002106206B +:1043300010F0D0F808B1112038BDA01C0BF07EF9A8 +:1043400004F098FE050038D100220823114606200B +:1043500010F040F8062830D0FFDF2EE0606810F043 +:1043600073F908B1102038BD618820886A460BF0C7 +:104370003BFD04F07FFE05001FD16068E8B1BDF889 +:104380000010018019E0A07800F0010120880BF0F6 +:1043900061FD0EE0206801F0FDFD05460DE020788E +:1043A00000F001000AF066F903E0618820880BF054 +:1043B000A0FC04F05FFEF0E70725284638BD70B585 +:1043C00005460C46084610F021F908B1102070BDD2 +:1043D000202D07D0212D0DD0222D0BD0252D09D039 +:1043E000072070BD2088A11C0AF039FABDE8704092 +:1043F00004F040BE062070BD57482530704708B510 +:104400003421554820F047FC0120FEF70FFE112013 +:10441000FEF724FE50496846263104F095FF4E48C9 +:104420009DF8002010F8251F62F3470121F00101DB +:104430000170002141724FF46171A0F80710022150 +:104440008172FEF755FE00B1FFDFFCF78FFF01F030 +:1044500034F908BD10B50C464021204620F0F9FB88 +:10446000A07F20F00300A077202020700020A075FE +:1044700084F8230010BD70472DE9FC41074610F079 +:104480009FF810B11020BDE8FC81334E06F12501E4 +:10449000D6F825000090B6F82950ADF8045096F8EB +:1044A0002B408DF806403846FEF78DFF0028EAD1F4 +:1044B000FEF71EFE0028E6D0009946F8251FB580BD +:1044C000B471E0E710B5044610F0A0F808B1102070 +:1044D00010BD21482049224690F825002631400889 +:1044E000FEF788FF002010BDFEB50D4604004FF01A +:1044F000000712D00822FEF79FFE002812D10026E6 +:1045000009E000BF54F826006946FEF71BFF0028AB +:1045100008D1761CF6B2AE42F4D309F0AEFF10B16A +:1045200043F20320FEBD0C4E86F8247024B300270E +:104530001EE000BF54F8270002A9FEF703FF00B1F8 +:10454000FFDF9DF808008DF8000054F8270050F8B0 +:10455000011FCDF8011001E0D80100208088ADF8DE +:104560000500684609F0D3FF00B1FFDF7F1CFFB2F2 +:10457000AF42DFD386F824500020FEBD2DE9F0477E +:104580008AB01546894604001ED00F4608222946E7 +:10459000FEF752FE002810D1002613E054F8260042 +:1045A0006946103000F09BFC002806D147B157F84F +:1045B000260010F005F818B110200AB0BDE8F08709 +:1045C000761CF6B2AE42E9D30026A5F101081BE045 +:1045D00006F1010A0AF0FF0712E000BF54F82600B6 +:1045E000017C4A0854F827100B7CB2EB530F05D11D +:1045F00006221130113120F081FA58B17F1CFFB230 +:10460000AF42EBD30AF0FF064645E1DB4E4624B14C +:10461000012003E043F20520CFE7002009F0A8FFC6 +:1046200010B909F0B9FF10B143F20420C5E75CB33B +:1046300000270DF1170825E054F8270069461030CF +:1046400000F04DFC00B1FFDF54F82700102250F8B5 +:10465000111FCDF801108088ADF8050054F827101F +:104660000DF1070020F076FA96B156F827101022C7 +:10467000404620F06FFA684609F022FF00B1FFDFE4 +:104680007F1CFFB2AF42D7D3FEF700FF002094E7B4 +:10469000404601F073FCEEE730B585B004460FF0FC +:1046A0008FFF18B960680FF0D8FF10B1102005B067 +:1046B00030BD60884AF2B811884206D82078FB4D98 +:1046C00028B1012806D0022804D00720EFE7FEF722 +:1046D0000FFD18E06078022804D0032802D043F2CE +:1046E0000220E4E785F82F00C1B200200090ADF869 +:1046F000040002292CD0032927D0FFDF684609F0E7 +:10470000EDFF04F0B7FC0028D1D1606801F029FC6E +:10471000207858B101208DF800000DF1010001F062 +:104720002DFC68460BF0F5FB00B1FFDF207885F823 +:104730002E00FEF7ABFE608860B1A88580B209F05C +:104740000FFF00B1FFDF0020B1E78DF80500D5E7CE +:104750004020FAE74FF46170EFE710B504460FF020 +:1047600055FF20B9606838B10FF06EFF08B1102016 +:1047700010BD606801F002FCCC4830F82C1F61804D +:10478000C178617080782070002010BD2DE9F84359 +:104790001446894606460FF039FFA0B948460FF087 +:1047A0005CFF80B920460FF058FF60B9BF4DA87874 +:1047B000012800D13CB13178FF2906D049B143F23C +:1047C0000400BDE8F8831020FBE7012801D0042095 +:1047D000F7E74FF00008A4B3052811D004280FD044 +:1047E00069462046FEF76BFE0028EAD1207D48B1DD +:1047F000012809D0022809D0032809D00720E0E7C2 +:104800000820DEE7424604E0012202E0022200E046 +:1048100003222346174600200099FEF78DFE00284C +:10482000CFD1A0892880A07BE875BDF80000A882C0 +:10483000AF75BDF80000000701D5A08988B1A08937 +:10484000288049460020FEF727FF0028B9D1A87824 +:1048500005280BD0042809D0287DC00703D00320E9 +:1048600002E08020ECE70220FEF7E0FB86F8008003 +:104870000020A6E77CB58D4C05460E46A0780228A0 +:1048800003D0032801D008207CBD15B143F20400F9 +:104890007CBD07200CF098F910B9A078032806D049 +:1048A000FEF7F2FB28B1A078032804D009E012201B +:1048B0007CBD13207CBD304600F0CBFA0028F9D136 +:1048C000E67001208DF800008DF801008DF802508F +:1048D0002088ADF80400E07D8DF8060068460BF0F6 +:1048E000C6F904F0C7FB0028E4D1A078032805D05E +:1048F0005FF00400FEF79AFB00207CBDE07800F03A +:10490000B8FA0520F6E71CB510B143F204001CBD4F +:10491000664CA078042803D0052801D008201CBDCF +:1049200000208DF8000001218DF801108DF80200A3 +:1049300068460BF09CF904F09DFB0028EFD1A078AD +:10494000052805D05FF00200FEF770FB00201CBDBB +:10495000E07800F09FFA0320F6E72DE9FC4180465D +:104960000E46032508460FF078FE002866D1404623 +:10497000FEF771FD040004D02078222804D208201C +:1049800081E543F202007EE5A07F00F003073EB11F +:10499000012F0CD000203146FEF729FC0500EFD195 +:1049A000012F06D0022F1AD0FFDF28466BE5012029 +:1049B000F1E7A07D3146022801D011B107E01120B6 +:1049C00061E56846FCF7DFFD0028D9D1694640461D +:1049D00006F0A9FC0500E8D10120A075E5E7A07D5F +:1049E000032804D1314890F83000C00701D02EB31D +:1049F0000EE026B1A07F40071ED4002100E0012177 +:104A0000404606F0B0FC0500CFD1A075002ECCD0FA +:104A10003146404600F07BFA05461128C5D1A07FFB +:104A20004107C2D4316844F80E1F7168616040F0DC +:104A3000040020740025B8E71125B6E7102022E510 +:104A400070B50C460546FEF706FD010005D022466E +:104A50002846BDE87040FEF701BD43F2020070BD7C +:104A600010B5012807D1114B9B78012B00D011B153 +:104A700043F2040010BD09F0B6FDBDE8104004F09B +:104A8000F9BA012300F010BA00231A46194600F0C3 +:104A90000BBA70B506460C4608460FF091FD18B9E2 +:104AA00020680FF0B3FD18B1102070BDD8010020B0 +:104AB000F64D2A7E112A04D0132A00D33EB10820D5 +:104AC000F3E721463046FEF774FE60B1EDE70920BA +:104AD000132A0DD0142A0BD0A188FF29E5D3152065 +:104AE000FEF7BCFA0020D4E90012C5E90712DCE7A2 +:104AF000A1881F29D9D31320F2E72DE9F047DFF869 +:104B00008C93804690B099F818009A4615460C464A +:104B1000132803D3FFF738FB002836D120460FF0C7 +:104B20004FFD88BB28460FF04BFD68BB20784FF047 +:104B30000107C0074FF0000602D08DF83A7001E07F +:104B40008DF83A602078C0F3C1008DF800006178DC +:104B50000720E1B101291AD0022916D0042914D165 +:104B600004208DF809006088ADF80A00A088ADF82F +:104B700010002078C0F3C100012825D0032823D0DD +:104B800040460FF01DFD28B1102010B016E58DF83D +:104B90000970E8E798F80000400808D0012809D01B +:104BA000022807D0032805D043F20220EDE78DF854 +:104BB000026001E08DF80270404650F8011FCDF808 +:104BC00003108088ADF807000DF10100FEF7E3FB4C +:104BD00008B10320D9E72888ADF816006888ADF839 +:104BE0001C00A888ADF82200E888ADF82800ADF8D0 +:104BF0002E60ADF8346068460AF057FAE8B999F8C3 +:104C000018004D46112801D00820BEE706200BF001 +:104C1000DBFF38B12078C0F3C100012804D003289D +:104C200002D004E01220B0E795F8240028B1FEF786 +:104C30002BFA022803D21320A7E70720A5E7504646 +:104C400000F007F90028A0D185F819A068460AF0FD +:104C50001FFC04F00FFA002897D1687E00F009F9D4 +:104C6000E08864280BD250B15FF0010000F041F9F8 +:104C700004008AD11220FEF7F1F9204685E764216D +:104C8000B0FBF1F0F2E770B5064615460C46084653 +:104C90000FF0BCFC18B928460FF0B8FC08B1102082 +:104CA00003E72A46214630460BF081F804F0E2F98A +:104CB0000028F5D121787F29F2D10520F5E67CB5D1 +:104CC00005460C4608460FF07BFC08B110207CBD61 +:104CD0002846FEF7C0FB20B10078222804D2082025 +:104CE0007CBD43F202007CBD684890F8300040076C +:104CF00001D511207CBD2078C00802D16078C008A1 +:104D000001D007207CBDADF8005020788DF802005E +:104D100060788DF803000220ADF8040068460AF0C0 +:104D200055F804F0A7F97CBD70B586B014460D4661 +:104D30000646FEF790FB28B10078222805D208200D +:104D400006B0B2E643F20200FAE728460FF085FC0F +:104D500020B944B120460FF077FC08B11020EFE7EE +:104D600000202060A080494890F83000800701D5DD +:104D70001120E5E703A9304609F0F7FD18B100BF9F +:104D800004F078F9DCE7ADF80060BDF81400ADF888 +:104D90000200BDF81600ADF80400BDF81000BDF823 +:104DA0001210ADF80600ADF808107DB1298809B1E0 +:104DB000ADF80610698809B1ADF80210A98809B1EB +:104DC000ADF80810E98809B1ADF80410DCB1BDF800 +:104DD0000610814201D9081A2080BDF80210BDF8E2 +:104DE0001400814201D9081A6080BDF80800BDF89E +:104DF0000410BDF816200144BDF812001044814291 +:104E000001D9081AA080684609F0E6FEB8E71CB58B +:104E10001F490968CDE9001068460AF048F904F016 +:104E200029F91CBD1CB500200090019068460AF0CD +:104E30003EF904F01FF91CBD108008885080488896 +:104E40009080C88810818888D0800020508190810F +:104E5000704710B5044604F079F830B1407830B1AD +:104E6000204604F082FB002010BD052010BD12205A +:104E700010BD10B504F06AF8040000D1FFDF6078BF +:104E800000B9FFDF6078401E607010BDD8010020BF +:104E90004050020010B504F059F8040000D1FFDFC3 +:104EA0006078401C607010BD1CB5ADF800008DF836 +:104EB00002308DF803108DF8042068460AF03CFF9C +:104EC00004F0D8F81CBD0CB52FA2D2E90012CDE930 +:104ED00000120079694601EB501000780CBD027891 +:104EE000520804D0012A02D043F202207047FEF794 +:104EF00029BA10B548B183000022114605200FF0F1 +:104F000069FA052801D0032010BD002010BD1FB58F +:104F10006A46FFF791FF68460AF01DFB04F0AAF805 +:104F200004B010BD70B50C0006460DD0FEF793FA24 +:104F3000050000D1FFDFA6802889208128896081B3 +:104F40006889A081A889E081AFE510B500231A46E1 +:104F500003E0845C2343521CD2B28A42F9D30BB1E2 +:104F6000002010BD012010BD00B540B1012805D0C2 +:104F7000022803D0032804D0FFDF002000BDFF205B +:104F800000BD042000BD0000070605040302010067 +:104F900010B504460FF014FB08B1102010BD2078A6 +:104FA000C0F30210042807D86078072804D3A1783A +:104FB000102901D8814201D2072010BDE0784107B5 +:104FC00006D421794A0703D4000701D4080701D584 +:104FD000062010BD002010BD10B513785C08837F3B +:104FE00064F3C713837713789C08C37F64F30003CB +:104FF000C3771078C309487863F341004870137889 +:105000001C090B7864F347130B701378DB0863F308 +:10501000000048705078487110BD10B5C4780B7806 +:1050200064F300030B70C478640864F341030B70ED +:10503000C478A40864F382030B70C478E40864F3B2 +:10504000C3030B700379117863F3000111700379C6 +:105050005B0863F34101117003799B0863F38201DC +:1050600011700079C00860F3C301117010BD70B5F4 +:1050700014460D46064604F0D1F980B10178182295 +:1050800021F00F01891C21F0F001A03100F8081B6C +:1050900021461FF0A4FDBDE8704004F0C2B92946C6 +:1050A0003046BDE870401322FEF7D8B92DE9F0472D +:1050B000064608A8894690E830041F469046142109 +:1050C00028461FF0E8FD0021CAF80010B8F1000FD3 +:1050D00003D0B9F1000F03D114E03878C00711D024 +:1050E00020680FF093FAC0BBB8F1000F07D1206819 +:1050F000123028602068143068602068A860216839 +:10510000CAF800103878800724D560680FF09CFA40 +:1051100018BBB9F1000F21D0FFF76EF90168C6F88E +:1051200068118188A6F86C11807986F86E0101F00B +:1051300002FDF94FEF60626862B196F8680106F20D +:10514000691140081032FEF755F91022394660689F +:105150001FF000FD0020BDE8F08706E0606820B188 +:10516000E8606068C6F86401F4E71020F3E730B542 +:10517000054608780C4620F00F00401C20F0F00196 +:10518000103121700020607095F8230030B10428A0 +:105190000FD0052811D0062814D0FFDF2078012178 +:1051A000B1EB101F04D295F8200000F01F006070D2 +:1051B00030BD21F0F000203002E021F0F00030306E +:1051C0002070EBE721F0F0004030F9E7F0B591B046 +:1051D000022715460C4606463A46ADF808700921E6 +:1051E00003AB04F07AFF0490002810D004208DF85F +:1051F00004008DF80170E034099605948DF818507C +:105200000AA968460DF022FA00B1FFDF012011B0B3 +:10521000F0BD10B588B00C460A99ADF80000C3B1D6 +:105220001868CDF802005868CDF80600ADF80A20DD +:10523000102203A81FF08EFC68460AF02FFA03F034 +:1052400019FF002803D1A17F41F01001A17708B018 +:1052500010BD0020CDF80200E6E72DE9F84F064624 +:10526000808A0D4680B28246FEF7F5F80446307813 +:10527000DFF8A48200274FF00509A8F120080F28C5 +:1052800070D2DFE800F06FF23708387D8CC8F1F09B +:10529000EFF35FF3F300A07F00F00300022809D0D2 +:1052A0005FF0000080F0010150460BF0DDFC0500CE +:1052B00003D101E00120F5E7FFDF98F85C10C90792 +:1052C00002D0D8F860000BE0032105F11D000EF0BC +:1052D00052FED5F81D009149B0FBF1F201FB12001E +:1052E000C5F81D0070686867B068A8672078252831 +:1052F00000D0FFDFCAE0A07F00F00300022809D041 +:105300005FF0000080F0010150460BF0ADFC06009C +:1053100003D101E00120F5E7FFDF3078810702D5F6 +:105320002178252904D040F001003070BDE8F88FC5 +:1053300002202870307F287106F11D002D36C5E946 +:105340000206F3E7A07F00F00300022808D0002047 +:1053500080F0010150460BF087FC040004D102E00C +:105360000120F5E7A7E1FFDF2078C10604D507207B +:1053700028703D346C60D9E740F008002070D5E714 +:10538000E07F000700D5FFDF307CB28800F001032A +:1053900001B05046BDE8F04F092105F027BD04B922 +:1053A000FFDF716821B1102204F124001FF0D2FB4D +:1053B00028212046FDF7AEFEA07F00F00300022862 +:1053C0000ED104F12400002300901A4621465046D5 +:1053D000FFF71FFF112807D029212046FDF79AFE6D +:1053E000307A84F82000A1E7A07F000700D5FFDF16 +:1053F00014F81E0F40F008002070E782A761E761F3 +:10540000C109607861F34100014660F38201617077 +:10541000307AE0708AE7A07F00F00300022809D00C +:105420005FF0000080F0010150460BF01DFC04000D +:1054300003D101E00120F5E7FFDF022104F185003F +:105440000EF099FD0420287004F5B4706860B4F87B +:1054500085002882304810387C346C61C5E90280B0 +:1054600064E703E024E15BE02DE015E0A07F00F0BD +:105470000300022807D0002080F0010150460BF005 +:10548000F3FB18B901E00120F6E7FFDF32462146C1 +:105490005046BDE8F84FEAE504B9FFDF207821283F +:1054A000A1D93079012803D1E07F40F00800E077EE +:1054B000324621465046FFF7DAFD2046BDE8F84F58 +:1054C0002321FDF727BE3279AA8005F108030921BF +:1054D000504604F002FEE86010B185F8009025E720 +:1054E000A07F00F00300022808D0002080F0010116 +:1054F00050460BF0B9FB040003D101E00120F5E7B1 +:10550000FFDF04F1620102231022081F0BF033FABF +:1055100007703179417009E73802002040420F00DE +:10552000A07F00F00300022808D0002080F00101D5 +:1055300050460BF099FB050003D101E00120F5E78F +:10554000FFDF95F8840000F0030001287AD1A07FE6 +:1055500000F00307E07F10F0010602D0022F04D113 +:1055600033E095F8A000C0072BD0D5F8601121B327 +:1055700095F88320087C62F387000874A17FCA092C +:10558000D5F8601162F341000874D5F8601166F334 +:1055900000000874AEB1D5F86001102204F12401B6 +:1055A00088351FF0D7FA287E40F001002876287849 +:1055B00020F0010005F8880900E016B1022F04D0A0 +:1055C0002DE095F88800C00727D0D5F85C1121B3ED +:1055D00095F88320087C62F387000874A17FCA09CC +:1055E000D5F85C1162F341000874D5F85C1166F3DC +:1055F000000008748EB1D5F85C01102204F124017A +:1056000088351FF0A7FA287840F0010005F8180B3C +:10561000287820F0010005F8A009022F44D00020CE +:1056200000EB400005EBC00090F88800800709D52A +:1056300095F87C00D5F86421400805F17D01103211 +:10564000FDF7D8FE8DF8009095F884006A4600F0CA +:1056500003008DF8010095F888108DF8021095F878 +:10566000A0008DF803002146504601F04DFA207845 +:10567000252805D0212807D0FFDF2078222803D94C +:1056800022212046FDF746FDA07F00F003000228FE +:105690000CD0002080F0010150460BF0F7FA0028F2 +:1056A0003FF44FAEFFDF41E60120B9E70120F1E70B +:1056B000706847703AE6FFDF38E670B5FE4C0025AB +:1056C00084F85C5025660CF08EFF04F11001204632 +:1056D00003F060FE84F8305070BD70B50D46FDF7E4 +:1056E000BAFE040000D1FFDF4FF4B87128461FF066 +:1056F000D2FA04F124002861A07F00F00300022800 +:1057000008D0012105F1E0000CF06EFF002800D068 +:10571000FFDF70BD0221F5E70A46014602F1E00015 +:105720000CF082BF70B50546406886B001780A2942 +:1057300006D00D2933D00E292FD0FFDF06B070BD63 +:1057400086883046FDF787FE040000D1FFDF207811 +:105750002128F3D028281BD1686802210E3001F0DF +:10576000C8F9A8B168680821801D01F0C2F978B1B4 +:1057700004F1240130460AF07CFA03F07BFC00B10E +:10578000FFDF06B02046BDE870402921FDF7C2BC0E +:1057900006B0BDE8704003F044BE012101726868A4 +:1057A000C6883046FDF757FE040000D1FFDFA07F1A +:1057B00000F00301022902D120F01000A077207828 +:1057C00021280AD06868017A09B1007980B1A07FE8 +:1057D00000F00300022862D0FFDFA07F00F003008A +:1057E0000228ABD1FEF796F80028A7D0FFDFA5E787 +:1057F00003F017FEA17F08062BD5E07FC00705D078 +:1058000094F8200000F01F00102820D05FF0050061 +:1058100084F82300207829281DD02428DDD13146A2 +:1058200004200EF081FE22212046FDF773FCA07FAC +:1058300000F00300022830D05FF0000080F001018A +:1058400030460BF023FA0028C7D0FFDFC5E706205B +:10585000DEE70420DCE701F00300022808D0002086 +:1058600080F0010130460BF0FFF9050003D101E0A3 +:105870000120F5E7FFDF25212046FDF74BFC032043 +:105880008DF80000694605F1E0000CF0C4FE022826 +:10589000A3D00028A1D0FFDF9FE70120CEE703F0CF +:1058A000C0FD9AE72DE9F04387B099461646884631 +:1058B0000746FDF7D0FD04004BD02078222848D3BE +:1058C000232846D0E07F000743D4A07F00F00300E8 +:1058D000022809D05FF0000080F0010138460BF08B +:1058E000C3F9050002D00CE00120F5E7A07F00F02D +:1058F0000300022805D00121002238460BF0ABF945 +:1059000005466946284601F026F9009800B9FFDFF0 +:1059100045B10098E03505612078222806D024287A +:1059200004D007E000990020086103E0252120460B +:10593000FDF7F0FB0098012141704762868001A9C4 +:10594000C0E902890CF082FE022802D0002800D0B3 +:10595000FFDF07B0BDE8F08370B586B00546FDF700 +:105960007AFD017822291ED9807F00F003000228E9 +:1059700008D0002080F0010128460BF075F90400E2 +:105980002FD101E00120F5E7FFDF2AE0B4F85E0047 +:1059900004F1620630440178427829B12146284654 +:1059A000FFF714FCB0B9C9E6ADF804200921284678 +:1059B00002AB04F092FB03900028F4D005208DF890 +:1059C0000000694604F1E0000CF025FE022801D039 +:1059D00000B1FFDF02231022314604F15E000BF01C +:1059E00000F8B4F860000028D0D1A7E610B586B062 +:1059F0000446FDF730FD017822291BD9807F00F095 +:105A00000300022808D0002080F0010120460BF09E +:105A10002BF9040003D101E00120F5E7FFDF0620A8 +:105A20008DF80000694604F1E0000CF0F4FD002858 +:105A300000D0FFDF06B010BD2DE9F05F05460C4633 +:105A400000270078904601093E4604F1080BBA464B +:105A500002297DD0072902D00A2909D146E06868C9 +:105A600001780A2905D00D2930D00E292ED0FFDF6C +:105A7000BCE114271C26002C6BD08088A080FDF789 +:105A8000EAFC5FEA000900D1FFDF99F817005A46E7 +:105A9000400809F11801FDF7ADFC6868C089208253 +:105AA000696851F8060FC4F812004868C4F8160077 +:105AB000A07E20F0060001E01802002040F0010066 +:105AC000A07699F81E0040F020014DE01A270A2622 +:105AD000002CD1D0C088A080FDF7BDFC050000D10E +:105AE000FFDF59462846FFF742FB7FE10CB1A88B48 +:105AF000A080287A0B287DD006DC01287BD00228E4 +:105B000008D0032804D135E00D2875D00E2874D0B4 +:105B1000FFDF6BE11E270926002CADD0A088FDF722 +:105B20009AFC5FEA000900D1FFDF287B00F0030048 +:105B30000128207A1BD020F001002072297B8908DF +:105B400061F341002072297BC90861F3820001E002 +:105B500041E1F2E02072297B090961F3C300207260 +:105B600099F81E0040F0400189F81E103EE140F017 +:105B70000100E2E713270D26002CAAD0A088FDF72C +:105B80006AFC8146807F00F00300022808D00020D4 +:105B900080F00101A0880BF067F8050003D101E057 +:105BA0000120F5E7FFDF99F81E0000F00302022A4A +:105BB00050D0686F817801F003010129217A4BD020 +:105BC00021F00101217283789B0863F34101217266 +:105BD0008378DB0863F38201217283781B0963F306 +:105BE000C3012172037863F306112172437863F3D2 +:105BF000C71103E061E0A9E090E0A1E0217284F820 +:105C000009A0C178A172022A29D00279E17A62F34F +:105C10000001E1720279520862F34101E1720279F6 +:105C2000920862F38201E1720279D20862F3C30141 +:105C3000E1724279217B62F30001217342795208BB +:105C400062F3410121734279920862F38201217368 +:105C5000407928E0A86FADE741F00101B2E7427951 +:105C6000E17A62F30001E1724279520862F3410184 +:105C7000E1724279920862F38201E1724279D208BC +:105C800062F3C301E1720279217B62F300012173A7 +:105C90000279520862F3410121730279920862F39A +:105CA000820121730079C00860F3C301217399F860 +:105CB0000000232831D9262140E018271026E4B31C +:105CC000A088FDF7C8FB8346807F00F00300022810 +:105CD00009D0002080F00101A0880AF0C5FF5FEA2A +:105CE000000903D101E00120F4E7FFDFE868A060CC +:105CF00099F8000040F0040189F8001099F80100BB +:105D0000800708D5012020739BF8000023286DD957 +:105D10002721584651E084F80CA067E015270F268C +:105D20005CB1A088FDF797FB814606225946E868DA +:105D300008F089F90120A073A2E041E048463CE068 +:105D400016270926E4B3287B20724FE0287B192709 +:105D50000E26ACB3C4F808A0A4F80CA0012807D004 +:105D6000022805D0032805D0042803D0FFDF0DE06A +:105D7000207207E0697B042801F00F0141F08001E7 +:105D800021721ED0607A20F003006072A088FDF7B7 +:105D900062FB05460078212828D0232800D0FFDFA9 +:105DA000A87F00F00300022813D0002080F001013A +:105DB000A0880AF06BFF22212846FDF7ABF915E019 +:105DC00004E0607A20F00300401CDEE7A8F80060E1 +:105DD00011E00120EAE70CB16888A080287A032846 +:105DE0002ED004280AD0052850D0FFDFA8F8006084 +:105DF0000CB1278066800020BDE8F09F15270F2694 +:105E0000002CE3D0A088FDF726FB807F00F0030084 +:105E1000022809D05FF0000080F00101A0880AF09C +:105E200023FF050003D101E00120F5E7FFDFD5F8EE +:105E30001D000622594608F006F984F80EA0D5E7A1 +:105E400017270926002CC1D0A088FDF704FB814646 +:105E5000807F00F00300022808D0002080F00101BC +:105E6000A0880AF001FF050003D101E00120F5E759 +:105E7000FFDF6878800701D5022000E00120207252 +:105E800099F800002328B1D9272157E719270E26B2 +:105E9000002C9BD0A088FDF7DEFA5FEA000900D154 +:105EA000FFDFC4F808A0A4F80CA084F808A0A07A2A +:105EB00040F00300A07299F81E10C90961F3820036 +:105EC000A07299F81F2099F81E1012EAD11F05D070 +:105ED00099F8201001F01F0110292BD020F00800A4 +:105EE000A07299F81F10607A61F3C3006072697A3A +:105EF00001F003010129A2D140F00400607299F879 +:105F00001E0000F003000228E87A16D0217B60F31F +:105F100000012173AA7A607B62F300006073EA7A61 +:105F2000520862F341012173A97A490861F34100E3 +:105F300060735BE740F00800D2E7617B60F300012B +:105F40006173AA7A207B62F300002073EA7A520818 +:105F500062F341016173A97A490861F3410020733A +:105F600044E710B5FE4C30B10146102204F1200088 +:105F70001EF0F0FD012084F8300010BD10B504467D +:105F800000F0D9FDF64920461022BDE8104020312E +:105F90001EF0E0BD70B5F24D06004FF0000413D0C6 +:105FA0000EF00EFB08B110240CE00621304608F07C +:105FB00031F8411C05D028665FF0010085F85C00CF +:105FC00000E00724204670BD0020F7E7007810F0BD +:105FD0000F0204D0012A05D0022A0CD110E00009DA +:105FE00009D10AE00009012807D0022805D00328BA +:105FF00003D0042801D007207047087000207047A4 +:106000000620704705282AD2DFE800F003070F17A3 +:106010001F00087820F0FF001EE0087820F00F0035 +:10602000401C20F0F000103016E0087820F00F003F +:10603000401C20F0F00020300EE0087820F00F0027 +:10604000401C20F0F000303006E0087820F00F000F +:10605000401C20F0F00040300870002070470720FE +:1060600070472DE9F041804688B00D46002708466C +:106070000EF0F3FAA8B94046FDF7EDF9040003D09D +:106080002078222815D104E043F2020008B0BDE8D0 +:10609000F08145B9A07F410603D500F00300022836 +:1060A00001D01020F2E7A07FC10601D4010702D57C +:1060B0000DB10820EAE7E17F090701D50D20E5E7EA +:1060C00000F00300022805D125B12846FEF760FF45 +:1060D0000700DBD1A07F00F00300022808D00020D9 +:1060E00080F0010140460AF0BFFD060002D00FE03B +:1060F0000120F5E7A07F00F0030002280ED0002069 +:1061000080F00101002240460AF0A5FD060007D0FC +:10611000A07F00F00300022804D009E00120EFE78F +:106120000420B3E725B12A4631462046FEF754FF46 +:106130006946304600F00FFD009800B9FFDF009976 +:10614000022006F1E0024870C1F824804A61002272 +:106150000A81A27F02F00302022A1CD001200871EA +:10616000287800F00102087E62F3010008762A78A0 +:10617000520862F3820008762A78920862F3C3001C +:1061800008762A78D20862F3041008762421204683 +:10619000FCF7C0FF33E035B30871301D88613078FB +:1061A000400908777078C0F340004877287800F0FD +:1061B0000102887F62F301008877A27FD20962F32F +:1061C00082008877E27F62F3C3008877727862F397 +:1061D00004108877A878C87701F121022846203179 +:1061E000FEF71BFF03E00320087105200876252138 +:1061F0002046FCF78FFFA07F20F04000A07701A988 +:1062000000980CF023FA022801D000B1FFDF3846D5 +:106210003CE72DE9FF4F534A0D4699B09A4607CA0D +:106220000BAB002783E807001998FDF714F9060067 +:1062300006D03078262806D008201DB0BDE8F08FA3 +:1062400043F20200F9E7B07F00F00309B9F1020F51 +:1062500003D00020284302D006E00120FAE71B9873 +:10626000FEF796FE0028E8D1B07F00F00300022878 +:1062700001D11B9979BB022808D0002080F00101D0 +:1062800019980AF0F1FC040003D101E00120F5E7C0 +:10629000FFDF852D28D007DCF5B1812D1ED0822DA2 +:1062A0001ED0832D08D11DE0862D1FD0882D1FD034 +:1062B000892D1FD08A2D1FD00F2020710F281DD0AF +:1062C00003F0ACF8E0B101208DF84000201D1190E2 +:1062D0002079B8B167E111E00020EEE70120ECE79A +:1062E0000220EAE70320E8E70520E6E70620E4E7E6 +:1062F0000820E2E70920E0E70A20DEE707209CE724 +:1063000011209AE7B9F1020F03D0A56F03D1A06F56 +:1063100002E0656FFAE7606F804632D04FF001000F +:1063200000904FF002000190214630461B9AFEF784 +:1063300053FE1B98007800F00101A87861F301007A +:10634000A870B17FC90961F38200A870F17F61F381 +:10635000C300A870617861F30410A870207803E08E +:106360001802002048500200400928706078C0F3ED +:10637000400068701B988078E87000206871287170 +:1063800003E00220009001200190A87898F8021004 +:10639000C0F3C000C1F3C00108405FEA000B2CD07D +:1063A00050460EF00DF990BBDAF80C000EF008F92B +:1063B00068BBDAF81C000EF003F940BBDAF80C00F9 +:1063C000A060DAF81C00E06098F80100617800F045 +:1063D000010041EA4000607098F80210C0B2C1F3B9 +:1063E0000011891E0840607000202077019906F195 +:1063F000170002290CD001210BE098F801106078F9 +:1064000001F00101FD2242EA41010840E3E732E0E8 +:10641000002104EB810148610099701C022901D020 +:10642000012100E0002104EB81014861A87800F01F +:106430000300012858D198F8020000F00300012859 +:1064400052D1B9F1020F04D02A1D691D1B98FEF725 +:10645000E4FD297998F8040001408DF83810687936 +:1064600098F8052010408DF83C0001433CD0504680 +:106470000EF0A6F808B11020DFE60AF11001049131 +:10648000B9F1020F18D008465FF0000104F18C0347 +:10649000CDE9000304F5AE7202920EAB5A462046D7 +:1064A000FEF704FE0028E7D1B9F1020F08D05046EC +:1064B00008D14FF0010107E050464FF00101E5E738 +:1064C0000498F5E74FF0000104F1A403CDE90003BF +:1064D00004F5B072029281F001010FAB5A462046DA +:1064E000FEF7E4FD0028C7D16078800734D4A8788F +:1064F00098F80210C0F38000C1F3800108432BD04C +:10650000297898F800000BAAB9F1020F06D032F8EA +:1065100011204300DA4002F003070AE032F81020AD +:106520004B00DA4012F0030705D0012F0BD0022FE9 +:106530000BD0032F07D0BBF1000F0DD0012906D0DF +:10654000042904D008E00227F5E70127F3E7012832 +:1065500001D0042800D10427B07F40F08000B0773C +:10656000F17F6BF30001F177607881074FF0030052 +:106570000CD5A071BBF1000F15D100BF8DF85C00E8 +:1065800017AA3146199800F0BFFA0CE00221022F39 +:1065900018D0012F18D0042F22D00020A071B07F76 +:1065A00020F08000B07725213046FCF7B3FD10A91C +:1065B00004F1E0000CF02FF810B1022800D0FFDF4A +:1065C00000203AE6A171D9E7A1710D2104F1200064 +:1065D0001EF061FB207840F0020020700420CDE71F +:1065E0000120A071DFE72DE9F04387B0904689468E +:1065F00004460025FCF72FFF060006D03078272838 +:1066000006D0082007B0BDE8F08343F20200F9E7A6 +:10661000B07F00F00300022808D0002080F00101C4 +:1066200020460AF021FB040003D101E00120F5E738 +:10663000FFDFA7795FEA090005D0012821D0B9F171 +:10664000020F26D110E0B8F1000F22D1012F05D0A2 +:10665000022F05D0032F05D0FFDF2DE00C252BE006 +:10666000012529E0022527E040460DF0A9FFB0B939 +:10667000032F0ED11022414604F11D001EF06AFACC +:106680001AE0012F02D0022F03D104E0B8F1000F6D +:1066900012D00720B6E740460DF092FF08B1102057 +:1066A000B0E7102104F11D001EF0D3FA0621404688 +:1066B00007F0B0FCC4F81D002078252140F002004E +:1066C00020703046FCF726FD2078C10713D020F05B +:1066D0000100207002208DF8000004F11D000290DE +:1066E0008DF804506946C3300BF095FF022803D0A3 +:1066F00010B1FFDF00E02577002083E730B587B0D9 +:106700000D460446FCF7A7FEA0B1807F00F0030011 +:10671000022812D05FF0000080F0010120460AF04C +:10672000A3FA04000ED028460DF04AFF38B110201D +:1067300007B030BD43F20200FAE70120ECE7207811 +:10674000400701D40820F3E7294604F13D00202248 +:1067500005461EF0FFF9207840F010002070010778 +:106760000FD520F00800207007208DF80000694642 +:1067700004F1E00001950BF04EFF022801D000B1BA +:10678000FFDF0020D4E770B50D460646FCF763FE38 +:1067900018B10178272921D102E043F2020070BD2F +:1067A000807F00F00300022808D0002080F0010163 +:1067B00030460AF059FA040003D101E00120F5E760 +:1067C000FFDFA079022809D16078C00706D02A46E9 +:1067D00021463046FEF7FAFC10B10FE0082070BDEC +:1067E000B4F860000E280BD204F1620102231022DB +:1067F000081F0AF0C0F8012101704570002070BD2B +:10680000112070BD70B5064614460D4608460DF0C1 +:10681000D7FE18B920460DF0F9FE08B1102070BD62 +:10682000A6F57F40FF380ED03046FCF714FE38B195 +:10683000417822464B08811C1846FCF7DBFD07E037 +:1068400043F2020070BD2046FDF73CFE0028F9D15E +:106850001021E01D0DF08FFBE21D294604F1170009 +:1068600000F089F9002070BD2DE9F04104468AB09E +:1068700015468846002708460DF0EFFE18B9284651 +:106880000DF0EBFE18B110200AB0BDE8F0812046F3 +:10689000FCF7E1FD060003D0307827281BD102E089 +:1068A00043F20200F0E7B07F00F00300022809D0B5 +:1068B0005FF0000080F0010120460AF0D5F90400E5 +:1068C00003D101E00120F5E7FFDF2078400702D582 +:1068D0006078800701D40820D6E7B07F00F003007D +:1068E000022803D0A06F03D1A16F02E0606FFAE726 +:1068F000616F407800B19DB1487810B1B8F1000FD8 +:106900000ED0ADB1EA1D06A8E16800F034F91022FE +:1069100006A905F117001EF0F1F818B1042707E0E9 +:106920000720B1E71022E91D04F12D001EF012F935 +:10693000B8F1000F06D0102208F1070104F11D0084 +:106940001EF008F92078252140F002002070304622 +:10695000FCF7E0FB2078C10715D020F00100207083 +:1069600002208DF8000004F11D0002901030039009 +:106970008DF804706946B3300BF04DFE022803D049 +:1069800010B1FFDF00E0277700207DE7F8B515465E +:106990000E460746FCF75FFD040004D0207822284D +:1069A00004D00820F8BD43F20200F8BDA07F00F03B +:1069B0000300022802D043F20500F8BD30460DF076 +:1069C000FFFD18B928460DF0FBFD08B11020F8BDF9 +:1069D00000953288B31C21463846FEF71AFC112870 +:1069E00015D00028F3D1297C4A08A17F62F3C71192 +:1069F000A177297CE27F61F30002E277297C890894 +:106A000084F82010A17F21F04001A177F8BDA17F7B +:106A10000907FBD4D6F80200C4F83600D6F8060001 +:106A2000C4F83A003088A0861022294604F12400D8 +:106A30001EF090F8287C4108E07F61F34100E07788 +:106A4000297C61F38200E077287C800884F82100AB +:106A5000A07F40F00800A0770020D3E770B50D4676 +:106A600006460BB1072070BDFCF7F5FC040007D00B +:106A70002078222802D3A07F800604D4082070BD8D +:106A800043F2020070BDADB12946304609F0F1F87D +:106A900002F0F0FA297C4A08A17F62F3C711A177BE +:106AA000297CE27F61F30002E277297C890884F87F +:106AB000201004E0304609F004F902F0DBFAA17F6F +:106AC00021F02001A17770BD70B50D46FCF7C3FC25 +:106AD000040005D028460DF099FD20B1102070BDAE +:106AE00043F2020070BD29462046FEF740FB00201D +:106AF00070BD04E010F8012B0AB100207047491E58 +:106B000089B2F7D20120704770B51546064602F0EB +:106B100085FC040000D1FFDF207820F00F00801CEE +:106B200020F0F0002030207066802868A060BDE86A +:106B3000704002F076BC10B5134C94F83000002879 +:106B400008D104F12001A1F110000BF0A6FD0120F5 +:106B500084F8300010BD10B190F8B9202AB10A486D +:106B600090F8350018B1002003E0B83001E0064885 +:106B700034300860704708B50023009313460A4676 +:106B80000AF06DFA08BD00001802002018B18178E3 +:106B9000012938D101E010207047018842F6011226 +:106BA000881A914231D018DC42F60102A1EB0200B2 +:106BB00091422AD00CDC41B3B1F5C05F25D06FF40F +:106BC000C050081821D0A0F57060FF381BD11CE020 +:106BD00001281AD002280AD117E0B0F5807F14D01E +:106BE00008DC012811D002280FD003280DD0FF287F +:106BF00009D10AE0B0F5817F07D0A0F58070033895 +:106C000003D0012801D0002070470F2070470A28C8 +:106C10001ED007DC18D2DFE800F0191B1F1F171F5A +:106C2000231D1F21102815D008DC0B2812D00C289A +:106C300010D00D2816D00F2806D10DE011280BD04A +:106C400084280BD087280FD003207047002070477E +:106C500005207047072070470F20704704207047B9 +:106C6000062070470C20704743F20200704738B589 +:106C70000C46050041D06946FFF7A8F9002819D154 +:106C80009DF80010607861F3020060706946681C2E +:106C9000FFF79CF900280DD19DF80010607861F392 +:106CA000C5006070A978C1F34101012903D0022910 +:106CB00005D0072038BD217821F0200102E021789D +:106CC00041F020012170410704D0A978C90861F37F +:106CD00086106070607810F0380F07D0A978090925 +:106CE00061F3C710607010F0380F02D16078400671 +:106CF00003D5207840F040002070002038BD70B5EA +:106D000004460020088015466068FFF7B0FF0028A1 +:106D100016D12089A189884211D860688078C0077F +:106D20000AD0B1F5007F0AD840F20120B1FBF0F2A1 +:106D300000FB1210288007E0B1F5FF7F01D90C207D +:106D400070BD01F201212980002070BD10B50478CA +:106D5000137864F3000313700478640864F3410348 +:106D600013700478A40864F3820313700478E408B1 +:106D700064F3C30313700478240964F304131370D9 +:106D80000478640964F3451313700078800960F394 +:106D90008613137031B10878C10701D1800701D57E +:106DA000012000E0002060F3C713137010BD42788B +:106DB000530702D002F0070306E012F0380F02D0AA +:106DC000C2F3C20300E001234A7863F302024A706F +:106DD000407810F0380F02D0C0F3C20005E043073E +:106DE00002D000F0070000E0012060F3C5024A7005 +:106DF00070472DE9F04F95B00D00824612D0122158 +:106E000028461DF026FF4FF6FF7B05AA01215846B4 +:106E100006F04BFF0024264637464FF420586FF407 +:106E2000205972E0102015B0BDE8F08F9DF81E00CB +:106E300001280AD1BDF81C1041450BD011EB090007 +:106E40000AD001280CD002280CD0042C0ED0052C1E +:106E50000FD10DE0012400E00224BDF81A6008E023 +:106E6000032406E00424BDF81A7002E0052400E0C3 +:106E70000624BDF81A10514547D12C74BEB34FF00B +:106E8000000810AA4FF0070ACDE90282CDE900A858 +:106E90000DF13C091023CDF810904246314658467A +:106EA00006F0B6FF08BBBDF83C002A46C0B210A9E8 +:106EB0000BF05CFCC8B9AE81CFB1CDE900A80DF1F3 +:106EC000080C0AAE40468CE84102132300223946E2 +:106ED000584606F09DFF40B9BDF83C00F11CC01EAD +:106EE000C0B22A1D0BF042FC10B103209BE70AE060 +:106EF000BDF82900E881062C05D19DF81E00A87276 +:106F0000BDF81C00288100208DE705A806F0D9FEF9 +:106F100000288BD0FFF77BFE85E72DE9F0471C4664 +:106F2000DDE90978DDF8209015460E00824600D193 +:106F3000FFDF0CB1208818B1D5B11120BDE8F08772 +:106F4000022D01D0012100E0002106F1140005F01E +:106F50009BFDA8F8000002463B462946504603F038 +:106F6000BCF8C9F8000008B9A41C3C600020E5E7A3 +:106F70001320E3E7F0B41446DDE904528DB1002399 +:106F800014B1022C09D101E0012306E00D7CEE07CB +:106F900003D025F0010501230D742146F0BC03F058 +:106FA00025BF1A80F0BC70472DE9FE4F91461A8824 +:106FB0001C468A468046FAB102AB494603F08DF87A +:106FC000050019D04046A61C278809F091FF3246DB +:106FD000072629463B46009609F09FFB208823465A +:106FE000CDE900504A4651464046FFF7C3FF002016 +:106FF00020800120BDE8FE8F0020FBE72DE9F0474F +:1070000086B09146DDE90E460F46824603AA05A9E1 +:1070100004A8109D8DE80700984632462146504648 +:10702000FFF77BFF049909B1012200E000222A70DA +:10703000002818D1F94A03AB1060059A009104F1B9 +:107040001400CDE901204A463946504606F0D3F8EF +:10705000A8B1092811D2DFE800F005080510100AD0 +:107060000C0C0E00002006B068E71120FBE707209B +:10707000F9E70820F7E70D20F5E70320F3E7BDF86F +:107080000C100498CDE90001434632462146504693 +:10709000FFF770FFE6E72DE9F04389B00D46DDE923 +:1070A000108781461C461646142103A81DF0F3FDE7 +:1070B000012002218DF810108DF80C008DF8117050 +:1070C000ADF8146064B1A278D20709D08DF816002B +:1070D000E088ADF81A00A088ADF81800A068079005 +:1070E00008A80095CDE90110424603A948466B68FF +:1070F000FFF784FF09B0BDE8F083F0B58BB0002442 +:107100000646069407940727089405A80994019455 +:1071100000970294CDE903400D46102322463046E5 +:1071200006F076FE78B90AA806A9019400970294A1 +:10713000CDE90310BDF8143000222946304606F090 +:107140003DFC002801D0FFF762FD0BB0F0BD06F05A +:10715000DDBA2DE9FC410C468046002602F05EF9BE +:10716000054620780D287DD2DFE800F0BC0713B378 +:1071700025BD49496383AF959B00A848006820B1AD +:10718000417841F010014170ADE0404602F076F9DF +:10719000A9E00421404609F067FD070000D1FFDFA8 +:1071A00007F11401404605F003FCA5BB132140463E +:1071B000FDF746FC97E00421404609F055FD070025 +:1071C00000D1FFDFE088ADF800000020B8819DF815 +:1071D0000000010704D5C00602D5A088B88105E0EB +:1071E0009DF8010040067ED5A088F88105B9FFDF33 +:1071F00022462946404601F063FC022673E0E188FE +:10720000ADF800109DF8011009060FD5072803D02E +:1072100006280AD00AE024E00421404609F024FDB3 +:10722000060000D1FFDFA088F0810226CDB9FFDF84 +:1072300017E00421404609F017FD070000D1FFDFE9 +:1072400007F1140006F099FA90F0010F02D1E079ED +:10725000000648D5387C022640F00200387405B993 +:10726000FFDF00E03EE022462946404601F028FCD0 +:1072700039E00421404609F0F7FC017C002D01F0C3 +:107280000206C1F340016171017C21F00201017429 +:10729000E7D1FFDFE5E702260121404602F020F9B1 +:1072A00021E00421404609F0DFFC054660680090BB +:1072B0002089ADF8040001226946404602F031F908 +:1072C000287C20F0020028740DE0002DC9D1FFDFDA +:1072D000C7E7022600214046FBF784F8002DC0D105 +:1072E000FFDFBEE7FFDF3046BDE8FC813EB50C00A6 +:1072F00009D001466B4601AA002006F00BFE20B122 +:10730000FFF785FC3EBD10203EBD00202080A07010 +:107310009DF8050002A900F00700FEF773FE50B9C2 +:107320009DF8080020709DF8050002A9C0F3C20076 +:10733000FEF768FE08B103203EBD9DF808006070AE +:107340009DF80500C109A07861F30410A0709DF8B4 +:107350000510890961F3C300A0709DF80410890627 +:1073600001D5022100E0012161F342009DF80010E7 +:1073700061F30000A07000203EBD70B514460646C3 +:107380000D4651EA040005D075B108460DF05CF9D0 +:1073900078B901E0072070BD2946304606F01BFE93 +:1073A00010B1BDE8704032E454B120460DF04CF904 +:1073B00008B1102070BD21463046BDE8704095E709 +:1073C000002070BD2DE9FC5F0C4690460546002765 +:1073D00001780822007A3E46B2EB111F7ED104F1FB +:1073E0000A0100910A31821E4FF0020A04F1080BD3 +:1073F0000191092A73D2DFE802F0ECDF05F42727B8 +:107400007AA9CD006888042109F02EFC060000D17D +:10741000FFDFB08920B152270726C2E07C0200209E +:1074200051271026002C7DD06888A0800120A071F3 +:10743000A88900220099FFF7A0FF002873D1A8892E +:107440002081288AE081D1E0B5F81290072824D164 +:10745000E87B000621D5512709F1140086B2002CE3 +:10746000E1D0A88900220099FFF787FF00285AD1B0 +:107470006888A08084F806A0A88920810120A073D4 +:10748000288A2082A4F81290A88A009068884B4627 +:10749000A969019A01F0F1FAA8E0502709F1120058 +:1074A00086B2002C3ED0A88900225946FFF765FF1E +:1074B000002838D16888A080A889E080287A072829 +:1074C00013D002202073288AE081E87BC009607312 +:1074D000A4F81090A88A0090688801E083E080E01A +:1074E0004B4604F11202A969D4E70120EAE7B5F896 +:1074F0001290512709F1140086B2002C66D06888DA +:10750000042109F0B1FB83466888A080A889002285 +:107510000099FFF732FF00286ED184F806A0A889F1 +:10752000208101E052E067E00420A073288A2082D5 +:10753000A4F81290A88A009068884B46A969019A1D +:1075400001F09BFAA989ABF80E104FE06888FBF7B1 +:1075500082FF07466888042109F086FB064607B9C2 +:10756000FFDF06B9FFDF687BC00702D05127142672 +:1075700001E0502712264CB36888A080502F06D017 +:1075800084F806A0287B594601F087FA2EE0287B74 +:10759000A11DF9E7FE49A8894989814205D15427EF +:1075A00006269CB16888A08020E053270BE06888FD +:1075B000A080A889E08019E06888042109F054FBC4 +:1075C00000B9FFDF55270826002CF0D1A8F800608D +:1075D00011E056270726002CF8D06888A0800020EC +:1075E00013E0FFDF02E0012808D0FFDFA8F8006009 +:1075F0000CB1278066800020BDE8FC9F5727072636 +:10760000002CE3D06888A080687AA071EEE7401D66 +:1076100020F0030009B14143091D01EB4000704710 +:1076200013B5DB4A00201071009848B10024684669 +:1076300009F037F9002C02D1D64A009911601CBD1F +:1076400001240020F4E770B50D46064686B01446C6 +:107650005C2128461DF01FFB04B9FFDFA078687489 +:10766000A2782188284601F042FA0020A881E8810A +:10767000228805F11401304605F07FF96A460121A0 +:10768000304606F012FB19E09DF80300000715D5FF +:10769000BDF806103046FFF730FD9DF80300BDF839 +:1076A000061040F010008DF80300BDF80300ADF89F +:1076B0001400FF233046059A06F058FC684606F091 +:1076C00000FB0028E0D006B070BD10B50C4601F1FB +:1076D000140005F089F90146627C2046BDE810409F +:1076E00001F03ABA70B50546042109F0BDFA04006C +:1076F00000D1FFDF04F114010C46284605F058F9CB +:1077000021462846BDE8704005F059B970B58AB0E9 +:107710000C460646FBF79FFE050014D02878222869 +:1077200027D30CB1A08890B101208DF80C00032064 +:107730008DF8100000208DF8110054B1A088ADF82C +:107740001800206807E043F202000AB070BD09206B +:10775000FBE7ADF8180005900421304609F084FAE3 +:10776000040000D1FFDF04F1140005F054F9000714 +:1077700001D40820E9E701F051FE60B108A8022118 +:107780000094CDE9011095F8232003A930466368E1 +:10779000FFF734FCD9E71120D7E72DE9F04FB2F815 +:1077A00002A0834689B0154689465046FBF753FE32 +:1077B00007460421504609F057FA0026044605966C +:1077C0004FF002080696ADF81C6007B9FFDF04B958 +:1077D000FFDF4146504603F070FE50B907AA06A9E4 +:1077E00005A88DE807004246214650466368FFF72A +:1077F00094FB674807AB0660DDE9051204F114004D +:10780000CDF80090CDE90320CDE9013197F8232090 +:10781000594650466B6805F047F906000AD0022E1B +:1078200004D0032E14D0042E00D0FFDF09B0304660 +:10783000BDE8F08FBDF81C000028F7D00599CDE910 +:1078400000104246214650466368FFF793FBEDE780 +:10785000687840F008006870E8E72DE9F04F9BB0C9 +:1078600004464FF000084A48ADF85480ADF8308027 +:10787000ADF85080A0F80880ADF81480ADF81880FD +:10788000ADF82080ADF81C80007916460D464746BD +:10789000012808D0022806D0032804D0042802D0EA +:1078A00008201BB0C4E720460CF08AFED0BB284657 +:1078B0000CF086FEB0BB60680CF0CFFE90BB606839 +:1078C00048B160892189884202D8B1F5007F01D989 +:1078D0000C20E6E780460BAA06A92846FFF70FFA18 +:1078E0000028DED168688078C0F34100022808D102 +:1078F0009DF8190010F0380F03D028690CF0A4FE91 +:1079000080B905A92069FFF7B2F90028C9D120691B +:1079100050B1607880079DF8150000F0380002D55E +:10792000D0B301E011E0B8BB9DF8140080060ED57D +:107930009DF8150010F0380F03D060680CF084FE3D +:1079400018B960680CF089FE08B11020A9E707A9F2 +:107950006069FFF78CF90028A3D1606940B19DF8F8 +:107960001D0000F0070101293FD110F0380F3CD075 +:1079700008A9A069FFF77BF9002892D19DF81C00A7 +:10798000800632D49DF8200080062ED4A06904E041 +:107990007C0200201400002027E040B19DF8210067 +:1079A00000F00701012920D110F0380F1DD0E06848 +:1079B00018B10078C8B11C2817D20EAA611C204645 +:1079C000FFF7C4F90120B94660F30F27BA4607460E +:1079D0008DF84E0042F60300ADF84C000DF13B026D +:1079E00017A928680AF0E1FE08B1072059E79DF8B9 +:1079F0005C0016A9CDF80090C01CCDE9019100F003 +:107A0000FF0B00230BF20122514613A806F090F859 +:107A1000F0BBBDF858000990FE482A8929690092F8 +:107A2000CDE901106B89BDF82C202868069906F075 +:107A30007FF801007ED120784FF0020AC10601D400 +:107A400080062BD5ADF80C90606950B907A906A83F +:107A5000FFF7ADF99DF81D0020F00700401C8DF8E0 +:107A60001D009DF81C008DF84E7040F0C8008DF888 +:107A70001C0042F60210ADF84C000CA903AACDF888 +:107A800000A0CDE90121002340F2032213A800E069 +:107A90001EE0079906F04CF801004BD1DD484D4639 +:107AA00008385B460089ADF839000EA8CDE9029090 +:107AB000CDF80490CDF810904FF007090022CDF8D2 +:107AC0000090BDF858104FF6FF7005F077FF10B129 +:107AD000FFF79DF8E5E69DF83800000625D5294614 +:107AE000012060F30F218DF84E704FF42450ADF853 +:107AF0004C00ADF8105062789DF81000002362F33E +:107B000000008DF810006278CDF800A0520862F3F2 +:107B100041008DF8100004AACDE9012540F20322AE +:107B200013A806F005F8010004D1606888B3206945 +:107B3000A8B900E086E005A906A8FFF738F9607843 +:107B4000800706D49DF8150020F038008DF8150048 +:107B500005E09DF8140040F040008DF814008DF809 +:107B60004E7042F60110ADF84C00208940F2012120 +:107B7000B0FBF1F201FB1202606814ABCDF800809B +:107B8000CDE90103002313A8059905F0D1FF0100F9 +:107B900058D12078C00729D0ADF80C50A06950B951 +:107BA00008A906A8FFF703F99DF8210020F00700B7 +:107BB000401C8DF821009DF820008DF84E7040F09B +:107BC00040008DF8200042F60310ADF84C0015A9D6 +:107BD00003AACDF800A0CDE90121002340F2032241 +:107BE00013A8089905F0A4FF01002BD1E06868B341 +:107BF0002946012060F30F218DF84E7042F60410E3 +:107C0000ADF84C00E068002302788DF860204078E1 +:107C10008DF86100E06818AA4088ADF86200E0685D +:107C200000798DF86400E068C088ADF86500CDF893 +:107C30000090CDE901254FF4027213A805F078FFFA +:107C4000010003D0099800F0B3FF2AE67148032130 +:107C50000838017156B100893080BDF8500070803D +:107C6000BDF83000B080BDF85400F080002018E668 +:107C700070B501258AB016460B46012802D00228AD +:107C800016D104E08DF80E504FF4205003E08DF82B +:107C90000E5042F60100ADF80C005BB10024601CF0 +:107CA00060F30F2404AA08A918460AF07EFD18B153 +:107CB00007204AE5102048E504A99DF820205548F2 +:107CC000CDE90021801E02900023214603A802F284 +:107CD000012205F02DFF10B1FEF799FF35E54D4863 +:107CE00008380EB1C1883180057100202DE5F0B54E +:107CF00093B0074601268DF83E6041F60100ADF8CD +:107D00003C0012AA0FA93046FFF7B2FF002848D165 +:107D1000404C0025083CE7B31C2102A81CF0BBFF27 +:107D20009DF808008DF83E6040F020008DF80800B6 +:107D300042F60520ADF83C000E959DF83A001195ED +:107D400020F00600801C8DF83A009DF838006A4645 +:107D500020F0FF008DF838009DF8390009A920F0C7 +:107D6000FF008DF839000420ADF82C00ADF830008C +:107D70000EA80A9011A80D900FA80990ADF82E50EA +:107D800002A8FFF76AFD00280BD1BDF80000608152 +:107D900000E008E0BDF80400A081401CE0812571EE +:107DA000002013B0F0BD6581A581BDF84800F4E75F +:107DB0002DE9F74F1749A0B00024083917940A7924 +:107DC000A146012A04D0022A02D0082023B02FE5C0 +:107DD000CA88824201D00620F8E721988A4682426A +:107DE00001D10720F2E701202146ADF848004FF607 +:107DF000FF7860F30F21ADF84A808DF86E0042F6EF +:107E0000020B06918DF87240ADF86CB0ADF8704081 +:107E10001CA901E0840200201391ADF8508012A843 +:107E200005F073FF00252E462F460DAB072212A941 +:107E3000404605F06DFF78B10A285DD195B38EB349 +:107E4000ADF86450ADF866609DF85E008DF81440A2 +:107E500019AC012864D06BE09DF83A001FB30128EB +:107E600059D1BDF8381059451FD118A809A9019456 +:107E70000294CDE9031007200090BDF836101023BE +:107E80000022404605F0C4FFB0BBBDF860000428E6 +:107E900001D006284AD1BDF82410219881423AD158 +:107EA0000F2093E73AE0012835D1BDF83800B0F54E +:107EB000205F03D042F6010188422CD1BAF80600B7 +:107EC000BDF83610884201D1012700E0002705B136 +:107ED0009EB1219881421ED118A809AA019402944A +:107EE000CDE90320072000900D46102300224046D4 +:107EF00005F08EFF00B902E02DE04E460BE0BDF824 +:107F00006000022801D0102810D1C0B217AA09A918 +:107F10000AF02CFC50B9BDF8369086E7052055E7ED +:107F200005A917A8221D0AF040FC08B103204DE75F +:107F30009DF814000023001DC2B28DF81420229871 +:107F40000092CDE901401BA8069905F0F1FD10B99A +:107F500002228AF80420FEF75AFE37E710B50B46D6 +:107F6000401E88B084B205AA00211846FEF7EEFE36 +:107F700000200DF1080C06AA05A901908CE8070065 +:107F8000072000900123002221464FF6FF7005F0E4 +:107F900015FD0446BDF81800012800D0FFDF20467B +:107FA000FEF735FE08B010BDF0B5FF4F044687B0B0 +:107FB00038790E46032804D0042802D0082007B0E0 +:107FC000F0BD04AA03A92046FEF799FE0500F6D1EC +:107FD00060688078C0F3410002280AD19DF80D0046 +:107FE00010F0380F05D020690CF02EFB08B11020DE +:107FF000E5E7208905AA21698DE807006389BDF8B6 +:1080000010202068039905F093FD10B1FEF7FFFDE5 +:10801000D5E716B1BDF81400308004203871284629 +:10802000CDE7F8B50C0006460BD001464FF6FF75BC +:1080300000236A46284605F06DFF20B1FEF7E7FDF4 +:10804000F8BD1020F8BD69462046FEF710FE002856 +:10805000F8D1A078314600F001032846009A05F0D7 +:1080600085FFEBE730B587B0144600220DF1080C10 +:1080700005AD01928CE82C00072200920A460146C9 +:1080800023884FF6FF7005F099FCBDF8141021808D +:10809000FEF7BDFD07B030BD70B50D46042108F0F8 +:1080A000E3FD040000D1FFDF294604F11400BDE820 +:1080B000704004F0A9BC70B50D46042108F0D4FD51 +:1080C000040000D1FFDF294604F11400BDE8704030 +:1080D00004F0BDBC70B50D46042108F0C5FD0400D8 +:1080E00000D1FFDF294604F11400BDE8704004F020 +:1080F000D5BC70B50546042108F0B6FD040000D1DA +:10810000FFDF214628462368BDE870400122FEF7C4 +:108110004BBF70B50646042108F0A6FD040000D14F +:10812000FFDF04F1140004F05FFC401D20F00305A4 +:1081300011E0011D00880022431821463046FEF759 +:1081400033FF00280BD0607CABB2684382B2A068DA +:10815000011D08F046FCA06841880029E9D170BDE6 +:1081600070B50546042108F07FFD040000D1FFDF53 +:10817000214628466368BDE870400222FEF714BF1E +:1081800070B50E46054601F049F9040000D1FFDF45 +:108190000120207266726580207820F00F00001D9B +:1081A00020F0F00040302070BDE8704001F039B997 +:1081B00010B50446012900D0FFDF2046BDE810407D +:1081C0000121FAF70FB92DE9F04F97B04FF0000AEF +:1081D0000C008346ADF814A0D04619D0E06830B149 +:1081E000A068A8B10188ADF81410A0F800A0584606 +:1081F000FBF731F9070043F2020961D038782228F1 +:108200005CD30421584608F02FFD050005D103E09A +:10821000102017B0BDE8F08FFFDF05F1140004F067 +:10822000E3FB401D20F00306A078012803D00228BC +:1082300001D00720EDE7218807AA584605F035FD53 +:1082400030BB07A805F03DFD10BB07A805F039FDC0 +:1082500048B99DF82600012805D1BDF82400A0F5F5 +:108260002451023902D04FF45050D2E7E068B0B147 +:10827000CDE902A00720009005AACDF804A0049241 +:10828000A2882188BDF81430584605F097FB10B13C +:10829000FEF7BDFCBDE7A168BDF8140008809DF89D +:1082A0001F00C00602D543F20140B2E70B9838B177 +:1082B000A1780078012905D080071AD40820A8E702 +:1082C0004846A6E7C007F9D002208DF83C00A86810 +:1082D0004FF00009A0B1697C4288714391420FD9E7 +:1082E0008AB2B3B2011D08F032FB8046A0F800A0AC +:1082F00006E003208DF83C00D5F800804FF001091E +:108300009DF8200010F0380F00D1FFDF9DF820000D +:108310002649C0F3C200084497F8231010F8010C56 +:10832000884201D90F2074E72088ADF8400014A9D5 +:108330000095CDE90191434607220FA95846FEF763 +:108340005DFE002891D19DF8500050B9A078012819 +:1083500007D1687CB3B2704382B2A868011D08F0EF +:108360000AFB002055E770B5064615460C46084640 +:10837000FEF70CFC002805D12A4621463046BDE810 +:10838000704075E470BD13E570B51E4614460D00CF +:108390000ED06CB1616859B160B10349C98881429E +:1083A00008D0072070BD00007C020020FA2F0000DA +:1083B0001020F7E72068FEF7E9FB0028F2D13246EB +:1083C00021462846BDE87040FFF747BA70B515460C +:1083D0000C0006D038B1FE490989814203D007203C +:1083E000E0E71020DEE72068FEF7D0FB0028D9D1B7 +:1083F00029462046BDE87040D6E570B5064686B0F1 +:108400000D46144610460CF001F9D0BB60680CF024 +:1084100024F9B0BBA6F57F40FF3803D03046FBF708 +:108420001AF880B128466946FEF7E3FC00280CD113 +:108430009DF810100F2008293CD2DFE801F0080653 +:108440000606060A0A0843F2020006B0AAE703205D +:10845000FBE79DF80210012908D1BDF80010B1F525 +:10846000C05FF2D06FF4C052D142EED09DF806103A +:1084700001290DD1BDF80410A1F52851062907D214 +:1084800000E028E0DFE801F0030304030303DCE776 +:108490009DF80A1001290ED1BDF80810B1F5245F2E +:1084A000D3D0A1F524510239CFD00129CDD0022952 +:1084B00001D1CAE7FFDF606878B9002305AA294621 +:1084C000304605F027FD10B1FEF7A1FBBDE79DF892 +:1084D0001400800601D41020B7E7618822462846A0 +:1084E0006368FFF7BFFDB0E72DE9F043814687B031 +:1084F0008846144610460CF089F818B1102007B0D1 +:10850000BDE8F083002306AA4146484605F002FD77 +:1085100018B100BFFEF77BFBF1E79DF81800C0061D +:1085200002D543F20140EAE70025072705A8019597 +:1085300000970295CDE9035062884FF6FF734146DC +:10854000484605F065FC060013D160680CF05EF843 +:1085500060B960680195CDE90250009704952388C1 +:1085600062884146484605F053FC0646BDF81400B3 +:1085700020803046CEE739B1954B0A889B899A42D4 +:1085800002D843F2030070471DE610B586B0904C48 +:108590000423ADF81430638943B1A4898C4201D21D +:1085A000914205D943F2030006B010BD0620FBE757 +:1085B000ADF81010002100910191ADF800300221BA +:1085C0008DF8021005A9029104A90391ADF81220BB +:1085D0006946FFF7F8FDE7E72DE9FC4781460E46BF +:1085E00008460BF0EDFF88BB4846FAF734FF5FEA18 +:1085F00000080AD098F80000222829D30421484610 +:1086000008F032FB070005D103E043F20200BDE8A9 +:10861000FC87FFDF07F1140004F0FDF90546307810 +:10862000012803D0022804D00720F0E7A8070FD5BF +:1086300002E015F01C0F0BD0B079341DC00709D033 +:10864000E08838B1A0680BF0BBFF18B11020DEE75E +:108650000820DCE732782088002628B3A0F2011336 +:108660000721112B18D20CD2DFE803F00B090D0BF8 +:108670001D0B121D100B0B1D1D1D1D0B1D00022AB5 +:1086800011D10846C3E7012AFBD00CE02A0700E01D +:10869000EA06002AF5DA06E0A0F5C0721F2A02D920 +:1086A0007D3A022AEDD8C6B200F0B8FE50B198F873 +:1086B0002300CDE90006FA89234639464846FEF7ED +:1086C000EAFCA4E71120A2E72DE9F04F8BB01F468A +:1086D00015460C4683460026FAF7BDFE28B1007801 +:1086E000222805D208200BB094E543F20200FAE7F5 +:1086F000B80801D00720F6E7032F00D100274FF676 +:10870000FF79CCB1022D73D320460BF0A6FF30B910 +:1087100004EB0508A8F101000BF09FFF08B1102041 +:10872000E1E7AD1EAAB22146484605F09DFC38F8A7 +:10873000021C88425CD1ADB22549B80702D58889B0 +:10874000401C00E001201FFA80F8F80701D08F8953 +:1087500000E04F4605AA4146584605F0A6FA4FF0FC +:10876000070A4FF00009ACB3204608E04088102803 +:108770003ED8361D304486B2AE4239D2A0190288A6 +:108780004245F3D354E000BF9DF8170002074FD5D0 +:1087900084B304EB0608361DB8F80230B6B2102BCD +:1087A00026D89A19AA4223D8B8F8002091421FD19E +:1087B000C00620D5CDE900A90DF1080C0AAAA1191F +:1087C00048468CE80700B8F800100022584603E03D +:1087D0007C0200202CE00BE005F0F0F810B1FEF771 +:1087E00016FA80E7B8F80200BDF82810884202D0D7 +:1087F0000B2078E704E0B8F80200304486B206E0C7 +:10880000C00604D55846FEF778FC002888D19DF8AC +:108810001700BDF81A1020F010008DF81700BDF8F1 +:108820001700ADF80000FF235846009A05F09EFBA4 +:1088300005A805F046FA18B9BDF81A10B942A3D92F +:108840000421584608F010FA040000D1FFDFA28985 +:108850005AB1CDE900A94D46002321465846FEF7FE +:108860001AFC0028BDD1A5813DE700203BE72DE99A +:10887000FF4F8BB01E4617000D464FF0000412D07C +:10888000B00802D007200FB0C4E4032E00D10026A8 +:108890005DB108460BF0D8FE28B93888691E084437 +:1088A0000BF0D2FE08B11020EDE7C74AB00701D5A2 +:1088B000D18900E00121F0074FF6FF7802D0D0897E +:1088C000401E00E0404686B206AA0B9805F0EDF97E +:1088D0004FF000094FF0070B0DF1140A39E000BF0B +:1088E0009DF81B00000734D5CDF80490CDF800B0FA +:1088F000CDF80890CDE9039A434600220B9805F085 +:1089000087FA60BB05B3BDF814103A8821442819D2 +:10891000091D8A4230D3BDF81E2020F8022BBDF875 +:10892000142020F8022BCDE900B9CDE90290CDF852 +:1089300010A0BDF81E10BDF8143000220B9805F0F1 +:1089400067FA08B103209EE7BDF814002044001D1B +:1089500084B206A805F0B5F920B10A2806D0FEF7C2 +:1089600056F990E7BDF81E10B142B9D934B17DB1C6 +:108970003888A11C884203D20C2084E7052082E7B6 +:1089800022462946404605F06FFB01462819018022 +:10899000A41C3C80002076E710B504460BF036FEA0 +:1089A00008B1102010BD8848C0892080002010BD6B +:1089B000F0B58BB00D460646142103A81CF06BF9E8 +:1089C00001208DF80C008DF8100000208DF81100AA +:1089D000ADF814503046FAF73EFD48B10078222831 +:1089E00012D30421304608F03FF9040005D103E01A +:1089F00043F202000BB0F0BDFFDF04F114000746A4 +:108A000004F009F8800601D40820F3E7207C022155 +:108A100040F00100207409A80094CDE9011007225C +:108A200003A930466368FEF7E9FA20B1217C21F002 +:108A300001012174DEE729463046F9F7C4FC08A994 +:108A4000384603F0D7FF00B1FFDFBDF82040172CF8 +:108A500001D2172000E02046A84201D92C4602E0AE +:108A6000172C00D2172421463046FFF724FB21465D +:108A70003046F9F7CEF90020BCE7F8B51C4615469C +:108A80000E46069F08F022FA2346FF1DBCB231466F +:108A90002A46009407F00DFEF8BD70B50C46054659 +:108AA0000E2120461CF0D5F8002020802DB1012D8C +:108AB00001D0FFDF76E4062000E00520A07171E41C +:108AC00010B548800878134620F00F00001D20F0F4 +:108AD000F00080300C4608701422194604F108009A +:108AE0001CF07DF800F09DFC3748046010BD2DE9B6 +:108AF000F047DFF8D890491D064621F003011746DC +:108B00000C46D9F8000007F0EAFE050000D1FFDFAF +:108B10004FF000083560A5F800802146D9F8000024 +:108B200007F0DDFE050000D1FFDF7560A5F80080CD +:108B30007FB104FB07F1091D0BD0D9F8000007F045 +:108B4000CEFE040000D1FFDFB460C4F80080BDE8B1 +:108B5000F087C6F80880FAE72DE9F0411746491D6D +:108B600021F00302194D064601681446286807F0F3 +:108B7000E1FE22467168286807F0DCFE3FB104FB85 +:108B800007F2121D03D0B168286807F0D3FE042055 +:108B900008F012F80446042008F016F8201A0128FC +:108BA00004D12868BDE8F04107F08EBEBDE8F08131 +:108BB00010B50C4605F045F800B1FFDF2046BDE8D2 +:108BC0001040FEF724B800007C02002014000020B2 +:108BD00038B50C468288817B19B14189914200D910 +:108BE0000A462280C188121D90B26A4607F06DF9CC +:108BF000BDF80000032800D30320C1B2208800F094 +:108C0000A3FF38BD38B50C468288817B19B1018934 +:108C1000914200D90A462280C188121D90B26A464C +:108C200007F053F9BDF80000022800D30220C1B2BA +:108C3000208800F089FF401CC0B238BD2DE9FE4FEE +:108C40000C46FD4981464022D1E90201CDE90101EE +:108C500009F1030020F00301C91C21F00301009178 +:108C60006846114607F01DFEF44E002C02D1F44A6E +:108C700000999160009901440091357F05F101054B +:108C800004D1E8B209F018FD00B1FFDF009800EB55 +:108C90000510C01C20F0030100915CB9707AB27A13 +:108CA0001044C2B200200870308C80B204F051FE33 +:108CB00000B1FFDF0098316A084400902146684601 +:108CC00000F00DFF0098C01C20F003000090B37A64 +:108CD000F27A717A04B1002007F0D9FE00990844B5 +:108CE00000902146684600F03AFF00273D46B24614 +:108CF00096F801800CE0284600F0D4FE0646817804 +:108D00008088F9F71DF971786D1C00FB0177EDB2D1 +:108D10004545F0D10098C01C20F00300009004B13C +:108D200000203946F9F717F9009900270844009008 +:108D30003D469AF801800CE0284600F0B3FE064656 +:108D4000C1788088FEF763FC71786D1C00FB0177A9 +:108D5000EDB24545F0D10098C01C20F00300009012 +:108D600004B100203946FEF75BFC00994FF0000883 +:108D70000844009045469AF801700EE0284600F03D +:108D800091FE0646807B30B106F1080001F0DDFE61 +:108D9000727800FB02886D1CEDB2BD42EED10098E6 +:108DA000C01C20F00300009004B10020414601F0F7 +:108DB000D0FE0099084400902146684600F049FE24 +:108DC0000098C01D20F0070200922CBB9D49002096 +:108DD000FAF743F8FBF713FB984801AA002110307B +:108DE000F8F7CAFA00B1FFDF9AF81D00FEF77FFF1F +:108DF00000B1FFDF91484FF4F67144301BF04BFF98 +:108E00008E480421443080F8E91180F8EA110621E7 +:108E100080F8EB11032101710099A1EB0900BDE875 +:108E2000FE8F70B5854C06464434207804EB40151F +:108E3000E078083590B9A01990F8E80100280ED024 +:108E4000A0780F2800D3FFDF202128461BF023FF46 +:108E5000687866F3020068700120E070284670BDF3 +:108E60002DE9F04105460C46002700780521904683 +:108E70003E46B1EB101F00D0FFDF287A50B1012829 +:108E80000ED0FFDFA8F800600CB1278066800020BC +:108E9000BDE8F0810127092674B16888A08008E048 +:108EA0000227142644B16888A0802869E060A88A57 +:108EB0002082287B2072E5E7A8F80060E7E710B57C +:108EC0005F4C6068C11D21F00701814200D0FFDFC7 +:108ED0005A4801210022017042700172417203233D +:108EE0008372C17202730274052202831F224283BD +:108EF000417455A242610A22027741774FF4B06172 +:108F000001626168416010BD30B54D4C1568636801 +:108F100010339D4202D20420136030BD474B5D7870 +:108F20005A6802EB0512107051700320D080172090 +:108F300090800120D0709070002090735878401C71 +:108F40005870606810306060002030BD70B5064613 +:108F50003A480024457807E0204600F0A3FD017858 +:108F6000B14204D0641CE4B2AC42F5D1002070BD23 +:108F7000F7B5074608780C4610B3FFF7E7FF05463C +:108F8000A7F12006202F06D0052E19D2DFE806F023 +:108F90000F2B2B151A0000F090FD0DB1697800E041 +:108FA0000021401AA17880B20844FF2808D8A07890 +:108FB00030B1A088022824D202E06088172820D28D +:108FC0000720FEBD207AE0B161881729F8D3A18877 +:108FD0001729F5D3A1790029F2D0E1790029EFD042 +:108FE000402804D9ECE7242F0BD1207A48B16188BE +:108FF0004FF6FB70814202D8A188814201D904203A +:10900000FEBD65B9207802AA0121FFF77DFF002887 +:10901000F6D12078FFF79AFF050000D1FFDF052E7B +:1090200025D2DFE806F003181B151E00A078687033 +:10903000A088E8801CE00000545002009803002043 +:109040001C000020000000206E5246357800000011 +:109050006088A8800CE0A078A87009E0A078E8708B +:1090600006E054F8020FA8606068E86000E0FFDFE7 +:109070000020FEBD1A2835D00DDC132832D2DFE8DF +:1090800000F01B31203131272723252D31312931A3 +:109090003131312F0F00302802D003DC1E2821D1BE +:1090A000072070473A3809281CD2DFE800F0151B6A +:1090B0000F1B1B1B1B1B07000020704743F2040003 +:1090C000704743F202007047042070470D2070473C +:1090D0000F207047082070471120704713207047F9 +:1090E000062070470320704710B5007800F001009B +:1090F00006F0E2FEBDE81040BCE70EB5017801F0D5 +:1091000001018DF80010417801F001018DF8011086 +:109110000178C1F340018DF802104178C1F340019C +:109120008DF80310017889088DF8041041788908BA +:109130008DF8051081788DF80610C1788DF807102C +:1091400000798DF80800684605F0DDFAFFF792FF18 +:109150000EBD2DE9F84FDFF8F883FE4C00261FE026 +:10916000012000F03FFD0120FFF75BFE0546402196 +:109170004746D8F8080007F0B2FB686000B9FFDF87 +:10918000686805F06EF8A8B12846FAF758FC28463A +:1091900000F02EFD20B940226968B86807F0CAFBCC +:1091A00094F9E9010428DBDA022007F005FD0746FF +:1091B0000025A6E040226968D8F8080007F0BAFB4D +:1091C000F2E7B8F802104046491C89B2A8F802102C +:1091D000B94201D3002141800221B8F8020007F012 +:1091E00043FD002865D0B8F80200694606F0CBFDC3 +:1091F000FFF740FF00B1FFDF9DF8000078B1B8F83D +:10920000020007F075FE5FEA000900D1FFDF484663 +:1092100007F0E3F818B1B8F8020002F03DF9B8F829 +:10922000020007F053FE5FEA000900D1FFDF484665 +:1092300007F0CBF8E8BB0321B8F8020007F014FDF3 +:109240005FEA000B48D1FFDF46E000BFDBF810000B +:1092500010B10078FF2849D0022000F0C3FC0220A2 +:10926000FFF7DFFD8246484607F0BBF9CAF8040065 +:1092700000B9FFDFDAF8040007F083FA002100905C +:109280000170B8F802105046AAF8021001F00AFE68 +:10929000484607F078FA00B9FFDF504600F0A8FC16 +:1092A00018B99AF80100000704D50099CBF81010FE +:1092B00012E024E0DBF8100038B10178491C11F00D +:1092C000FF01017008D1FFDF06E000221146484689 +:1092D00000F0BDFB00B9FFDF94F9EA01022805DBCD +:1092E000B8F8020001F0A3FD0028AFD194F9E9011C +:1092F000042804DB484607F0AAFA00B101266D1CD9 +:10930000EDB2BD4204D294F9EA010228BFF659AF8A +:10931000002E7FF423AFBDE8F84F032000F062BCBD +:1093200010B58B4CE06008682061AFF2D91002F0F4 +:1093300042FD607010BD87480021443801708448A8 +:10934000017085494160704770B505464FF0805007 +:109350000C46D0F8A410491C05D1D0F8A810C94378 +:109360000904090C0BD050F8A01F01F0010129706D +:10937000416821608068A080287830B970BD0621DE +:1093800020460AF0F8FD01202870607940F0C00006 +:10939000607170BD70B54FF080540D46D4F88010E8 +:1093A000491C0BD1D4F88410491C07D1D4F888107B +:1093B000491C03D1D4F88C10491C0CD0D4F880106F +:1093C0000160D4F884104160D4F888108160D4F82A +:1093D0008C10C16002E010210AF0CDFDD4F890009D +:1093E000401C0BD1D4F89400401C07D1D4F898004D +:1093F000401C03D1D4F89C00401C09D054F8900FB5 +:10940000286060686860A068A860E068E86070BD77 +:109410002846BDE8704010210AF0ADBD4D480079E6 +:10942000FFE470B54B4CE07830B3207804EB40108B +:10943000407A00F00700204490F9E801002800DCA1 +:10944000FFDF2078002504EB4010407A00F0070091 +:10945000011991F8E801401E81F8E8012078401CCC +:10946000C0B220700F2800D12570A078401CA070D9 +:109470000AF0E4FCE57070BDFFDF70BD3EB5054647 +:10948000032107F0F1FB0446284607F01FFD0546BF +:1094900004B9FFDF206918B10078FF2800D1FFDF91 +:1094A00001AA6946284600F0D2FA60B9FFDF0AE057 +:1094B000002202A9284600F0CAFA00B9FFDF9DF891 +:1094C000080000B1FFDF9DF80000411E8DF800107C +:1094D000EED220690199884201D1002020613EBD71 +:1094E00070B50546A0F57F400C46FF3800D1FFDF80 +:1094F000012C01D0FFDF70BDFFF790FF040000D109 +:10950000FFDF207820F00F00401D20F0F0005030E9 +:10951000207065800020207201202073BDE870401B +:109520007FE72DE9F04116460D460746FFF776FF27 +:10953000040000D1FFDF207820F00F00401D20F054 +:10954000F00050302070678001202072286805E00C +:109550001C000020DC030020C81400202061A88823 +:10956000A0822673BDE8F0415BE77FB5FFF7EEFC14 +:10957000040000D1FFDF02A92046FFF729FB0546C2 +:1095800003A92046FFF73EFB8DF800508DF801003F +:10959000BDF80800001DADF80200BDF80C00001D6C +:1095A000ADF80400E088ADF80600684606F066FCF9 +:1095B000002800D0FFDF7FBD2DE9F047DFF8FC93E6 +:1095C0000546002799F8000010B10820BDE8F08793 +:1095D00028460BF01BF808B11020F7E7F84C20786C +:1095E00008B9FFF76CFCA07A617A0844C6B200F0B3 +:1095F00064FAB04207D2301AC1B22A460020FFF7FF +:1096000083FC0700E2D1D9F804004E46C01C20F0CC +:109610000300C9F8040000F040FB716800EB01088A +:1096200001214046FFF70AFB06462968404488426C +:1096300002D8B6F5803F15D328600020FFF786FCDE +:1096400005000DD005F11300D9F8041020F0030037 +:109650004E46884200D0FFDF6078401E6070756023 +:109660000420B3E700214046FFF7E8FA0446A6428B +:1096700000D0FFDF04EB0801C9F8041029604FF6A1 +:10968000FF71A9F80210012189F8001038469DE702 +:109690002DE9F0410446C94817460E46007810B13E +:1096A0000820BDE8F08108460AF08AFF08B11020C2 +:1096B000F7E7C34D287808B9FFF701FC601E1E28A4 +:1096C00007D8012C22D13078FE281FD82877002017 +:1096D000E7E7A4F120001F2805D8E0B23A4631465A +:1096E000BDE8F04144E4A4F140001F2805D831460C +:1096F0002046BDE8F04100F0A3BAA4F1A0001F2865 +:1097000004D80020A02C03D0A12C06D00720C8E745 +:10971000317801F001016977C3E731680922F8293E +:1097200001D38B0701D01046BBE76B7C03F003032A +:10973000012B04D16B8BD7339CB28C42F3D82962B6 +:10974000AFE72DE9F04781460E4608460AF05EFF76 +:1097500048B948460AF078FF28B909F1030020F01B +:109760000301494501D0102030E795484FF0000A29 +:109770004430817869B14178804600EB4114083467 +:10978000378832460021204600F040FA050004D018 +:1097900027E0A6F800A0052018E7B9F1000F24D0B3 +:1097A0003088B84201D90C251FE0607800F0070529 +:1097B000284600F017FA08EB0507324697F8E8014B +:1097C0004946401C87F8E801204607F5F47700F089 +:1097D0001DFA05463878401E3870032000F002FA62 +:1097E0002DB10C2D01D0A6F800A02846EEE6607839 +:1097F000724E00F00701012923D002290CD0032961 +:1098000033D0FFDF98F801104046491CC9B288F8F0 +:1098100001100F2934D035E0616821B1000702D46E +:109820006088FFF72BFE98F8EA014746012802D12D +:10983000707802F0DFFA97F9EA010428E2DBFFDF33 +:10984000E0E7616819B14022B06807F073F898F852 +:10985000E9014746032802D1707802F0CBFA97F964 +:10986000E9010428CEDBFFDFCCE7C00602D5608823 +:10987000FFF704FE98F9EB010628C3DBFFDFC1E721 +:1098800080F801A08178491E8170617801F007019C +:1098900001EB080090F8E811491C80F8E811A4E7F2 +:1098A00070B50D4604460AF08BFE18B928460AF03A +:1098B000ADFE08B1102070BD29462046BDE87040BD +:1098C00008F031BF70B5044615460E4608460AF04A +:1098D00077FE18B928460AF099FE08B1102070BD2D +:1098E000022C03D0102C01D0092070BD2A4631462D +:1098F000204608F03BFF0028F7D0052070BD70B56A +:1099000014460D4606460AF05BFE38B928460AF0B2 +:109910007DFE18B920460AF097FE08B1102070BDF0 +:1099200022462946304608F040FF0028F7D007209D +:1099300070BD3EB504460AF069FE08B110203EBD78 +:10994000684604F03FFEFFF795FB0028F7D19DF82D +:1099500006002070BDF808006080BDF80A00A080F5 +:1099600000203EBD70B505460C4608460AF06CFE68 +:1099700020B93CB120680AF049FE08B1102070BD42 +:10998000A08828B121462846BDE87040FDF7BEBE3C +:10999000092070BD70B504460D4608460AF010FE59 +:1099A00030B9601E1E2818D828460AF009FE08B1F2 +:1099B000102070BD022C05D9072070BD1C000020AE +:1099C0009803002004B9FFDFF94800EB840050F849 +:1099D000041C2846BDE870400847A4F120001F2859 +:1099E00005D829462046BDE87040FAF790BCF02C17 +:1099F000E2D1A8680AF0E4FD0028D9D1284606F093 +:109A0000A6FABDE87040FFF735BB70B504460D46B9 +:109A100008460AF0FBFD30B9601E1E280DD8284606 +:109A20000AF0CEFD08B11020C7E7012C01D0022CAE +:109A300001D10620C1E70720BFE7A4F120001F28BD +:109A4000F9D829462046BDE87040FAF7B8BC06F0C0 +:109A50008BBC38B50446D748007B00F00105D9B966 +:109A6000F9F787FA0DB1226800E00022D248417868 +:109A7000C06804F09EFBD0481030C0788DF800001C +:109A800010B1012802D004E0012000E000208DF890 +:109A90000000684604F010FE002D02D02068283037 +:109AA000206038BD30B5C34D04466878A04200D868 +:109AB000FFDF686800EB041030BD70B5BD480025BD +:109AC0002C46467807E02046FFF7ECFF4078641C00 +:109AD0002844C5B2E4B2B442F5D128466DE72DE979 +:109AE000F0410C46064600F006F907463068C01CF7 +:109AF00020F00302326014BBAE483B4608212430FC +:109B00000AF038FC002409E0082C10D2DFE804F049 +:109B1000060408080A040406A84804E0A84802E06D +:109B2000A84800E0A8480AF045FC054600E0FFDF31 +:109B3000A54200D0FFDF641CE4B2082CE4D33068F7 +:109B400000EB07103060ACE5021D5143452900D2FF +:109B500045210844C01CB0FBF2F0C0B270472DE9AB +:109B6000FC5F064693484FF000088B464746444644 +:109B700090F8019022E02046FFF794FF050000D105 +:109B8000FFDF687869463844C7B22846FFF720F8F7 +:109B9000824601A92846FFF735F80346BDF80400C0 +:109BA0005246001D81B2BDF80000001D80B207F0D2 +:109BB000D9F86A78641C00FB0288E4B24C45DAD11B +:109BC0003068C01C20F003003060BBF1000F00D0F3 +:109BD00000204246394607F0D3F831680844306027 +:109BE000BDE8FC9F7349443108710020C87070477C +:109BF00070494431CA782AB10A7801EB4211083120 +:109C0000814201D001207047002070472DE9F041CA +:109C100006460078154600F00F0400201080601EF4 +:109C20000F46052800D3FFDF61482A46103000EBBD +:109C30008400394650F8043C3046BDE8F0411847EE +:109C400070B50C46402802D0412806D120E0A0780B +:109C500061780D18E178814201D90720ADE62078BE +:109C6000012801D91320A8E6FF2D08D808F008FF25 +:109C700006460AF09CF8301A801EA84201DA12202B +:109C80009BE64C482168816021790173002094E6AD +:109C9000BDE87040084600F05EB82DE9F0470027A7 +:109CA000DFF810A13E463D46B9463C469AF8018091 +:109CB0000AE02046FFF7F6FE4178807B0E4410FB59 +:109CC0000155641CE4B27F1C4445F2D109EB8700C6 +:109CD000C6EBC60100EB81009AF8092000EB850174 +:109CE00001EBC2019AF80A209AF80B0001EBC201BD +:109CF00001EB80006AE42DE9F047DFF8B890002618 +:109D0000344699F8090099F80A2099F8017002443C +:109D1000D5B299F80B20104400F0FF0808E0204667 +:109D2000FFF7C0FE817B407811FB0066641CE4B243 +:109D3000BC42F4D199F8090099F80A102844284443 +:109D40004044401C01B1012108448419FF2C00D972 +:109D5000FFDFE0B23AE438B50446407800F0030093 +:109D6000012803D002280BD0072038BD606858B105 +:109D70000AF073FCD0B960680AF066FC20B915E0FF +:109D800060680AF01DFC88B969462046FCF71EF998 +:109D90000028EAD1607800F00300022816D19DF86F +:109DA000000098B160680AF04FFC78B1102038BD0F +:109DB00054500200980300201C000020BD41000008 +:109DC0001FAC00005D2F0000AB2401006189F82961 +:109DD0000DD8208988420AD8607800F003020A482A +:109DE000012A06D1D731026A89B28A4201D20920FA +:109DF000DDE794E80E0000F1100585E80E000AB9D1 +:109E0000002101830020D2E7980300202DE9F041D2 +:109E1000074614468846084601F01CFD064608EB36 +:109E200088001C22796802EBC0000D18688C58B1BC +:109E30004146384601F016FD014678680078C200B8 +:109E4000082305F120000CE0E88CA8B14146384613 +:109E500001F00FFD0146786808234078C20005F143 +:109E6000240006F0BEFD38B1062121726681D0E9DA +:109E70000010C4E9031009E0287809280BD0052058 +:109E8000207266816868E060002028702046BDE886 +:109E9000F04101F0D5BC072020726681F4E72DE97E +:109EA000F04116460D460746406801EB85011C222D +:109EB00002EBC1014418204601F0FDFC40B1002135 +:109EC000708865F30F2160F31F4107200AF02CFB17 +:109ED00009202070324629463846BDE8F04195E712 +:109EE0002DE9F0410E46074600241C21F07816E0CB +:109EF00004EB8403726801EBC303D25C6AB1FFF721 +:109F00008DFA050000D1FFDF6F802A4621463046DA +:109F1000FFF7C5FF0120BDE8F081641CE4B2A04258 +:109F2000E6D80020F7E770B5064600241C21C0786B +:109F30000AE000BF04EB8403726801EBC303D51889 +:109F40002A782AB1641CE4B2A042F3D8402070BD44 +:109F5000282128461AF07DFE7068808928812046D5 +:109F600070BD70B5034600201C25DC780DE000BFF5 +:109F700000EB80065A6805EBC6063244167816B127 +:109F8000128A8A4204D0401CC0B28442F0D84020D9 +:109F900070BDF0B5044600201C26E5780EE000BF39 +:109FA00000EB8007636806EBC7073B441F788F42CE +:109FB00002D15B78934204D0401CC0B28542EFD8F6 +:109FC0004020F0BD0078032801D000207047012018 +:109FD00070470078022801D00020704701207047A8 +:109FE0000078072801D000207047012070472DE934 +:109FF000F041064688461078F1781546884200D32D +:10A00000FFDF2C781C27641CF078E4B2A04201D852 +:10A01000201AC4B204EB8401706807EBC101084444 +:10A02000017821B14146884708B12C7073E7287840 +:10A03000A042E8D1402028706DE770B514460B8827 +:10A040000122A240134207D113430B8001230A22AD +:10A05000011D06F090FC047070BD2DE9FF4F81B02A +:10A060000878DDE90E7B9A4691460E4640072CD4CF +:10A07000019806F03DFF040000D1FFDF07F104085E +:10A0800020461FFA88F106F07CF8050000D1FFDFBA +:10A09000204629466A4606F0C6FA0098A0F80370E2 +:10A0A000A0F805A0284606F06CFB017869F30601CC +:10A0B0006BF3C711017020461FFA88F106F0A4F86F +:10A0C00000B9FFDF019803F0E9FF06EB0900017F0B +:10A0D000491C017705B0BDE8F08F2DE9F84F0E4619 +:10A0E0009A4691460746032106F0BEFD0446008DC0 +:10A0F000DFF8B485002518B198F80000B0421ED1F1 +:10A10000384606F0F5FE070000D1FFDF09F1040133 +:10A11000384689B206F035F8050010D03846294691 +:10A120006A4606F080FA009800210A460180817094 +:10A1300004F084F80098C01DCAF8000021E098F8E7 +:10A140000000B04216D104F1260734F8341F012074 +:10A1500000FA06F911EA090F00D0FFDF2088012379 +:10A1600040EA090020800A22391D384606F01EFC0C +:10A17000067006E0324604F1340104F12600FFF7D0 +:10A180005CFF0A2188F800102846BDE8F88FFEB56C +:10A1900014460D46064602AB0C220621FFF79DFF32 +:10A1A000002826D00299687812220A70801C487014 +:10A1B00008224A80A870208888806088C880A0888B +:10A1C0000881E088488100240C20CDE900040523A3 +:10A1D000062229463046FFF740FF2146002266F35B +:10A1E0001F41F02310460AF0F5F86878801C68706B +:10A1F0000120FEBDFEB514460D460622064602AB02 +:10A200001146FFF76AFF002812D0029B132000219D +:10A210001870A8785870022058809C800620CDE9DC +:10A2200000010246052329463046FFF716FF0120AC +:10A23000FEBD2DE9FE430C46804644E002AB0E22F3 +:10A2400007214046FFF749FF002841D060681C22E3 +:10A2500067788678BF1C06EB860102EBC1014518C2 +:10A2600002981421017047700A214180698A018196 +:10A27000E98A4181A9888180A9898181304601F0DC +:10A28000E9FA029905230722C8806F70042028701C +:10A2900000250E20CDE9000521464046FFF7DDFEF2 +:10A2A000294666F30F2168F31F41F023002207209F +:10A2B0000AF090F86078FD49801C60706268204662 +:10A2C000921CFFF794FE606880784028B6D1012088 +:10A2D000BDE8FE83FEB50D46064638E002AB0E2211 +:10A2E00007213046FFF7F9FE002835D068681C23A7 +:10A2F000C17801EB810203EBC20284180298152297 +:10A300000270627842700A224280A2894281A28849 +:10A310008281084601F09EFA014602988180618A96 +:10A32000C180E18A0181A088B8B10020207000219D +:10A330000E20CDE900010523072229463046FFF70C +:10A340008CFE6A68DA492846D21CFFF750FE68681E +:10A35000C0784028C2D10120FEBD0620E6E72DE9E5 +:10A36000FE430C46814644E0204601F08EFAD0B30D +:10A3700002AB082207214846FFF7AFFE0028A7D00E +:10A3800060681C2265780679AD1C06EB860102EB3D +:10A39000C10147180298B7F8108006210170457076 +:10A3A00004214180304601F055FA01460298052308 +:10A3B0000722C180A0F804807D7008203870002535 +:10A3C000CDE9000521464846FFF747FE294666F3DA +:10A3D0000F2169F31F41F0230022072009F0FAFF43 +:10A3E0006078801C60706268B2492046121DFFF7D9 +:10A3F000FEFD606801794029B6D1012068E72DE9AA +:10A40000F34F83B00E4680E0304601F03EFA00285C +:10A4100075D071681C2091F8068008EB880200EB6B +:10A42000C2000C184146304601F023FA0146A078DC +:10A43000C30070684078C20004F1240006F0EDFA11 +:10A4400007468088E18B401A80B2002581B3AA4676 +:10A45000218B814200D808468146024602AB072183 +:10A460000398FFF73AFE010028D0BAF1000F03D09D +:10A47000029AB888022510808B46E28B3968A9EBD6 +:10A4800005001FFA80FA0A440398009206F030FD96 +:10A49000ED1D009A59465346009506F03EF9E08BB3 +:10A4A000504480B2E083B988884209D1012508E090 +:10A4B000FFE7801C4FF0010A80B2C9E7002009E6DF +:10A4C0000025CDE90095238A072231460398FFF73E +:10A4D000C4FDE089401EE0818DB1A078401CA070D1 +:10A4E0007068F178427811FB02F1CAB281690123E8 +:10A4F0000E3006F040FA80F800800020E083726899 +:10A500006D493046921DFFF772FD706881794029D0 +:10A510007FF47AAF0120DDE570B5064648680D4648 +:10A5200014468179402910D104EB84011C2202EBEE +:10A53000C101084401F0E0F9002806D06868294606 +:10A5400084713046BDE8704059E770BDFEB50C46D9 +:10A550000746002645E0204601F097F9D8B3606829 +:10A560001C22417901EB810102EBC1014518688988 +:10A5700000B9FFDF02AB082207213846FFF7ADFD27 +:10A58000002833D00299607816220A70801C487027 +:10A59000042048806068407901F05CF90146029827 +:10A5A0000523072281806989C1800820CDE9000642 +:10A5B00021463846FFF751FD6078801C6070A889FD +:10A5C00069890844B0F5803F00D3FFDFA889698915 +:10A5D0000844A8816E81626838492046521DFFF701 +:10A5E00006FD606841794029B5D10120FEBD30B536 +:10A5F000438C458BC3F3C704002345B1838B641E92 +:10A60000ED1AC38A6D1E1D4495FBF3F3E4B22CB121 +:10A61000008918B1A04200D8204603444FF6FF70CD +:10A62000834200D3034613800C7030BD2DE9FC41FA +:10A63000074616460D46486802EB86011C2202EBCF +:10A64000C10144186A4601A92046FFF7D0FFA0893E +:10A65000618901448AB2BDF80010914212D0081AF3 +:10A6600000D5002060816868407940280AD12046E2 +:10A6700001F038F9002805D0686829464671384647 +:10A68000FFF764FFBDE8FC812DE9FE4F8946804657 +:10A6900015465088032106F0E7FA8346B8F8020011 +:10A6A00040280DD240200CE030000020C59F000063 +:10A6B000D39F0000E19F0000F9B80000E5B800005A +:10A6C000403880B282460146584601F0DEF8002844 +:10A6D0007ED00AEB8A001C22DBF8041002EBC000DB +:10A6E0000C18204601F0E7F8002877D1B8F80000F0 +:10A6F000E18A88423CD8A189D1B348456ED1002671 +:10A700005146584601F0AEF8218C0F18608B48B9BD +:10A71000B9F1020F62D3B8F804006083618A8842FD +:10A7200026D80226A9EB06001FFA80F9B888A28B6A +:10A73000801A002814DD4946814500DA084683B2B4 +:10A7400068886968029139680A44CDE9003206F0E8 +:10A75000BDFBDDE90121F61D009B009605F0A9FF78 +:10A76000A18B01EB090080B2A083618B884207D9DD +:10A77000688803B052465946BDE8F04F01F0D9B899 +:10A780001FD14FF009002872B8F802006881D7E99C +:10A790000001C5E90401608BA881284601F050F84A +:10A7A0005146584601F05EF80146DBF804000823E4 +:10A7B0000078C20004F1200006F013F90020A08305 +:10A7C0006083A0890AF0FF02401EA081688800E033 +:10A7D00004E003B05946BDE8F04F27E7BDE8FE8F1F +:10A7E0002DE9F041064615460F461C46184609F06D +:10A7F000E7FE18B9206809F009FF08B1102015E438 +:10A800007168688C0978B0EBC10F01D313200DE497 +:10A810003946304601F026F8014670680823007872 +:10A82000C20005F1200006F0A6F8D4E90012C0E944 +:10A8300000120020E3E710B50446032106F014FAE5 +:10A840000146007800F00300022805D02046BDE84C +:10A85000104001F114029AE48A8A2046BDE81040B3 +:10A86000C8E470B50446032106F0FEF9054601462A +:10A870002046FFF774FD002816D029462046FFF732 +:10A8800065FE002810D029462046FFF723FD00284A +:10A890000AD029462046FFF7CCFC002804D02946E0 +:10A8A0002046BDE87040AAE570BD2DE9F0410C4698 +:10A8B00080461EE0E178427811FB02F1CAB281695C +:10A8C00001230E3006F08DF8077860681C22C179EC +:10A8D000491EC17107EB8701606802EBC101461890 +:10A8E0003946204600F0D1FF18B1304600F0DCFFB9 +:10A8F00020B16068C1790029DCD180E7FEF78EFDC8 +:10A90000050000D1FFDF0A202872384600F0A2FFC0 +:10A9100068813946204600F0ACFF01466068082394 +:10A920004078C20006F1240006F05BF8D0E9001080 +:10A93000C5E90310A5F80280284600F081FFB07831 +:10A9400000B9FFDFB078401EB07058E770B50C4614 +:10A950000546032106F088F901464068C279224481 +:10A96000C2712846BDE870409FE72DE9FE4F824640 +:10A97000507814460F464FF0000800284FD00128A9 +:10A9800007D0022822D0FFDF2068B8606068F86036 +:10A9900024E702AB0E2208215046FFF79EFB002859 +:10A9A000F2D00298152105230170217841700A2107 +:10A9B0004180C0F80480C0F80880A0F80C8062884C +:10A9C00082810E20CDE90008082221E0A6783046D9 +:10A9D00000F040FF054606EB86012C22786802EB6A +:10A9E000C1010822465A02AB11465046FFF775FBDB +:10A9F0000028C9D0029807210170217841700421F4 +:10AA0000418008218580C680CDE9001805230A46CB +:10AA100039465046FFF721FB87F80880DEE6A67826 +:10AA2000022516B1022E13D0FFDF2A1D914602AB7C +:10AA300008215046FFF751FB0028A5D002980121BC +:10AA4000022E0170217841704580868002D005E099 +:10AA50000625EAE7A188C180E1880181CDE9009857 +:10AA60000523082239465046D4E710B50446032191 +:10AA700006F0FAF8014600F108022046BDE8104051 +:10AA800073E72DE9F05F0C4601281DD0957992F807 +:10AA90000480567905EB85011F2202EBC10121F0EC +:10AAA000030B08EB060111FB05F14FF6FF7202EAFA +:10AAB000C10909F1030115FB0611F94F21F0031A31 +:10AAC00040B101283DD124E06168E57891F800802B +:10AAD0004E78DFE75946786805F001FF606000B9FD +:10AAE000FFDF594660681AF0D6F8E570514678687D +:10AAF00005F0F5FE6168486100B9FFDF60684269F2 +:10AB000002EB09018161606880F80080606846702E +:10AB100017E0606852464169786805F00BFF5A46B5 +:10AB20006168786805F006FF032006F045F80446E2 +:10AB3000032006F049F8201A012802D1786805F0B0 +:10AB4000C3FE0BEB0A00BDE8F09F02460021022085 +:10AB500097E773B5D24D0A202870009848B10024B9 +:10AB60004FEA0D0005F09DFE002C01D100996960AF +:10AB70007CBD01240020F5E770B50C461546382150 +:10AB800020461AF088F8012666700A2104F11C009C +:10AB90001AF081F805B9FFDF297A207861F3010006 +:10ABA0002070A879002817D02A4621460020FFF7F8 +:10ABB00068FF6168402088706168C87061680871CA +:10ABC0006168487161688871616828880881616876 +:10ABD000688848816068868170BDC878002802D086 +:10ABE000002201204DE7704770B50546002165F34E +:10ABF0001F41002009F098FC0321284606F034F894 +:10AC0000040000D1FFDF21462846FFF769F900283C +:10AC100004D0207840F010002070012070BD2DE994 +:10AC2000FF4180460E460F0CFEF7F8FB050007D0EB +:10AC30006F800321384606F017F8040008D106E0BB +:10AC400004B03846BDE8F0411321F9F7F9BEFFDF43 +:10AC50005FEA080005D0B8F1070F18D0FFDFBDE8A4 +:10AC6000FF8120782A4620F0080020700020ADF8EF +:10AC7000020002208DF800004FF6FF70ADF80400CE +:10AC8000ADF8060069463846F9F7EDFAE7E7C6F38E +:10AC9000072101EB81021C23606803EBC202805C88 +:10ACA000042803D008280AD0FFDFD8E7012000904D +:10ACB0004FF440432A46204600F004FECFE704B09C +:10ACC0002A462046BDE8F041FFF7E9B82DE9F05FDC +:10ACD0000027B0F80A9090460C4605463E46B9F16A +:10ACE000400F01D2402001E0A9F140001FFA80FA94 +:10ACF000287AC01E08286BD2DFE800F00D04192066 +:10AD000058363C4772271026002C6CD0D5E9030139 +:10AD1000C4E902015CE070271226002C63D00A22ED +:10AD200005F10C0104F1080019F059FF50E07127FA +:10AD30000C26002C57D0E868A06049E07427102644 +:10AD40009CB3D5E90301C4E902016888032105F039 +:10AD50008BFF8346FEF762FB0246688850805146AF +:10AD60005846FFF753F833E075270A26ECB1A88957 +:10AD700020812DE076271426BCB105F10C0004F1EA +:10AD8000080307C883E8070022E07727102664B18C +:10AD9000D5E90301C4E902016888032105F064FFD5 +:10ADA00001466888FFF781FD12E01CE07327082642 +:10ADB000CCB16888032105F057FF01460078C00632 +:10ADC00006D56888FFF78CF810B96888F8F71BFE7D +:10ADD000A8F800602CB12780A4F8069066806888E7 +:10ADE000A0800020AFE6A8F80060FAE72DE9FC415A +:10ADF0000C461E4617468046032105F035FF0546E2 +:10AE00000A2C0AD2DFE804F0050505050505090945 +:10AE10000907042303E0062301E0FFDF0023CDE957 +:10AE20000076224629464046FFF717F92AE438B54E +:10AE30000546A0F57F40FF3830D0284606F046F89A +:10AE4000040000D1FFDF204605F0CBFB002815D021 +:10AE500001466A46204605F0E6FB00980321B0F85B +:10AE60000540284605F000FF0546052C03D0402C80 +:10AE700005D2402404E0007A80B1002038BD403C77 +:10AE8000A4B2214600F001FD40B1686804EB8401E2 +:10AE90003E2202EBC101405A0028EFD0012038BD0C +:10AEA000300000202DE9F04F044689B0408806F0BC +:10AEB0000DF8050000D1FFDF06AA2846616800F002 +:10AEC000BDFC069D001F81B235F8032F6B888A42B6 +:10AED00005D1042B0AD0052B1DD0062B15D02246F8 +:10AEE0002846FFF7D1FB09B0BDE8F08F16462D1DAF +:10AEF000224629463046F7F750FA0828F3D1224671 +:10AF000029463046FCF749FCEDE76088291D636857 +:10AF1000FAF7C8FCE7E717466088032105F0A4FEAE +:10AF20004FF000088DF804800646ADF80680042F27 +:10AF3000D9D36A79002AD6D028794FF6FF794FF015 +:10AF40001C0A13282CD008DC012878D0062847D00A +:10AF5000072875D0122874D106E0142872D015285D +:10AF600071D016286DD1ACE10C2F6AD1307800F089 +:10AF70000301022965D140F0080030706879B07093 +:10AF800001208DF804002889ADF808006889ADF823 +:10AF90000A00A889ADF80C00E889ADF80E0019E0A8 +:10AFA000B07890429FD1307801079CD5062F9AD176 +:10AFB00020F0080030706088414660F31F41002097 +:10AFC00009F0B2FA02208DF80400ADF80890288943 +:10AFD000ADF80A006088224601A9F9F744F982E732 +:10AFE000082F80D12F89B5F80A90402F01D2402038 +:10AFF00001E0A7F1400080B280460146304600F0F3 +:10B0000044FC08B3716808EB88002C2202EBC000F6 +:10B01000095A4945E3D1FE4807AAD0E90210CDE913 +:10B02000071068798DF81C0008F0FF058DF81E5098 +:10B0300060883146FFF799FC2246294639E0B6E0A0 +:10B0400014E03CE039E0E6E0F148D0E90010CDE959 +:10B0500007106879ADF820708DF81C00ADF82290CB +:10B06000608807AA3146FFF780FC3CE7082FB6D17D +:10B070006889B5F80880402801D2402000E04038B7 +:10B0800087B23946304600F000FC0028A7D007EB15 +:10B09000870271680AEBC2000844028A42459ED1C9 +:10B0A000017808299BD140786979884297D1F9B213 +:10B0B00022463046FEF7F3FE15E70E2F07D0CDF8F7 +:10B0C0001C80CDF8208068798DF81C00C8E769895C +:10B0D000EF898B46B5F80C903046FEF742FFABF196 +:10B0E0004001402901D309204AE0B9F1170F01D3EB +:10B0F000172F01D20B2043E040280ED000EB800236 +:10B1000071680AEBC20008440178012903D1407834 +:10B1100069798842A9D00A2032E03046FEF703FF61 +:10B12000014640282BD001EB810372680AEBC30073 +:10B1300002EB0008012288F800206A7988F80120D3 +:10B1400070682A894089B84200D938462D8A03237D +:10B150002372A282E7812082A4F80C9065820846BF +:10B1600000F078FB6081A8F81490A8F81870A8F88F +:10B170000E50A8F810B0204600F062FBB3E60420A1 +:10B1800005212172A4F80A80E08101212173A049E0 +:10B19000D1E90421CDE9072169798DF81C10ADF8BA +:10B1A0001E00608807AA3146FFF7DFFBE3E7062FA2 +:10B1B000E4D3B078904215D13078010712D520F051 +:10B1C000080030706088414660F31F41002009F09C +:10B1D000ABF902208DF804002889ADF80800ADF81D +:10B1E0000A90F7E604213046FEF7D3FE05464028D4 +:10B1F000C4D002208303009022462946304600F046 +:10B2000061FB4146608865F30F2160F31F41072011 +:10B2100009F08AF967E60E2FB0D104213046FEF717 +:10B22000B8FE81464028A9D04146608869F30F21C5 +:10B2300060F31F41072009F077F9288A0790E88911 +:10B2400000907068AF894089B84200D9384683467B +:10B25000B5F80A8028890590484600F0FBFA60811D +:10B26000079840B10220079B00902246494630468D +:10B2700000F028FB37E6B8F1170F1ED3172F1CD3A9 +:10B280000420207200986082E781A4F810B0A4F82E +:10B290000C8009EB890271680AEBC2000D18009955 +:10B2A0000598A5F81480A5F818B0E98128822046F1 +:10B2B00000F0C6FA0620287015E601200B23009046 +:10B2C000D3E7082FA6D129893046FEF74AFE074664 +:10B2D00040289FD007EB870271680AEBC200084440 +:10B2E000804600F0E8FA002894D16D89B8F80E0085 +:10B2F0002844B0F5803F05D360883A46314600F0D7 +:10B3000018FBF0E5002D85D0A8F80E0060883A46BD +:10B310003146FFF701F908202072384600F09AFA0A +:10B320006081A58127E770B50D460646032105F02B +:10B330009BFC040004D02078000704D5112070BDC8 +:10B3400043F2020070BD2A4621463046FEF71FFF39 +:10B3500018B9286860616868A061207840F008002A +:10B360002070002070BD70B50D460646032105F023 +:10B370007BFC040004D02078000704D4082070BDB2 +:10B3800043F2020070BD2A4621463046FEF732FFE6 +:10B3900000B9A582207820F008002070002070BD40 +:10B3A0002DE9F04F0E4691B08046032105F05CFC7C +:10B3B0000446404605F09CFD074600200790089093 +:10B3C0000990ADF830000A9002900390049004B9FF +:10B3D000FFDF0DF1080917BBFFDF20E038460BA99E +:10B3E000002204F0C1FF9DF82C0000F07F050A2D1B +:10B3F00000D3FFDF6019017F491E01779DF82C0003 +:10B4000000060CD52A460CA907A8FEF716FE01E097 +:10B410007C50020019F80510491C09F80510761E29 +:10B42000F6B2DBD204F13400FA4D04F1260BDFF85A +:10B43000E8A304F12A07069010E05846069900F0A8 +:10B440006AFA064628700A2800D3FFDF5AF8261049 +:10B4500040468847E08CC05DB04202D0208D002875 +:10B46000EBD10A202870EC4D4E4628350EE00CA991 +:10B4700007A800F050FA0446375D55F8240000B9DB +:10B48000FFDF55F82420394640469047BDF81E009E +:10B490000028ECD111B027E510B5032105F0E4FB3D +:10B4A000040000D1FFDF0A2104F11C0019F0F3FBB6 +:10B4B000207840F00400207010BD10B50C46032128 +:10B4C00005F0D2FB2044007F002800D0012010BDF1 +:10B4D0002DE9F84F894615468246032105F0C4FB45 +:10B4E000070004D0284609F06BF840B903E043F2A6 +:10B4F0000200BDE8F88F484609F088F808B110202E +:10B50000F7E7786828B169880089814201D9092064 +:10B51000EFE7B9F800001C2418B1402809D24020F8 +:10B5200008E03846FEF7FFFC8046402819D113207A +:10B53000DFE7403880B280460146384600F0A5F982 +:10B5400048B108EB8800796804EBC000085C01286A +:10B5500003D00820CDE70520CBE7FDF75FFF06000D +:10B560000BD008EB8800796804EBC0000C18B9F820 +:10B57000000020B1E88910B113E01120B9E7288854 +:10B58000172802D36888172801D20720B1E7686816 +:10B5900038B12B1D224641463846FFF721F90028D5 +:10B5A000A7D104F10C0269462046FFF720F828884D +:10B5B00060826888E082B9F8000030B10220207013 +:10B5C000E889A080E889A0B12BE003202070A88939 +:10B5D000A08078688178402905D180F802803946BA +:10B5E0005046FEF726FE404600F034F9A9F8000068 +:10B5F00021E07868218B4089884200D90846208361 +:10B60000A6F802A004203072B9F800007081E08929 +:10B610007082F181208B3082A08AB081304600F0A8 +:10B620000FF97868C178402905D180F80380394640 +:10B630005046FEF74FFE00205BE770B50D4606460C +:10B64000032105F011FB040003D0402D04D2402556 +:10B6500003E043F2020070BD403DADB2294600F068 +:10B6600014F958B105EB85011C22606802EBC10199 +:10B67000084400F020F918B1082070BD052070BD05 +:10B680002A462146304600F054F9002070BD2DE9CD +:10B69000F0410D4616468046032105F0E5FA0446C2 +:10B6A000402D01D2402500E0403DADB28CB129468D +:10B6B00000F0EBF880B105EB85011C22606802EB1D +:10B6C000C1014718384600F0F6F838B10820BDE847 +:10B6D000F08143F20200FAE70520F8E733463A46E4 +:10B6E00029462046FFF77CF80028F0D1EAB221462F +:10B6F0004046FEF79BFF0020E9E72DE9F0410D46AB +:10B7000016468046032105F0AFFA0446402D01D2CB +:10B71000402500E0403DAFB224B1304608F050FF74 +:10B7200038B902E043F20200D1E7306808F048FF80 +:10B7300008B11020CBE73946204600F0A6F860B1EA +:10B7400007EB87011C22606802EBC10145182846FF +:10B7500000F0B1F818B10820B9E70520B7E7B088C4 +:10B76000A98A884201D90C20B1E76168E88C497840 +:10B77000B0EBC10F01D31320A9E73946204600F0F2 +:10B7800078F80146606808234078C20005F124007B +:10B7900005F0F1F8D6E90012C0E90012FAB221462C +:10B7A0004046FEF7B9FE002091E72DE9F0470D462F +:10B7B0001F4690468146032105F056FA0446402D67 +:10B7C00001D2402001E0A5F1400086B23CB14DB16C +:10B7D000384608F039FF50B11020BDE8F08743F239 +:10B7E0000200FAE76068C8B1A0F80C8024E0314696 +:10B7F000204600F04AF888B106EB86011C226068FA +:10B8000002EBC1014518284600F055F840B1082068 +:10B81000E3E7000030000020945002000520DCE740 +:10B82000A5F80880F2B221464846FEF7FFFE1FB198 +:10B83000A8896989084438800020CEE704F0F3BE67 +:10B84000017821F00F01491C21F0F0011031017045 +:10B85000FDF7E7BD10B50446402800D9FFDF4034AE +:10B86000A0B210BD406842690078484302EBC000B6 +:10B870007047C2784068037812FB03F2437840694E +:10B8800001FB032100EBC1007047C2788A4209D94D +:10B89000406801EB81011C2202EBC101405C08B150 +:10B8A00001207047002070470078062801D9012048 +:10B8B0007047002070470078062801D001207047AB +:10B8C00000207047F0B401EB81061C27446807EBA9 +:10B8D000C6063444049D05262670E3802571F0BC1D +:10B8E000FEF794BA10B5418911B1FFF7DDFF08B139 +:10B8F000002010BD012010BD10B5C18C8278B1EBC5 +:10B90000C20F04D9C18911B1FFF7CEFF08B10020E1 +:10B9100010BD012010BD10B50C4601230A22011DE7 +:10B9200005F05FF800782188012282409143218050 +:10B9300010BDF0B402EB82051C264C6806EBC50571 +:10B94000072363554B681C79402C03D11A71F0BC56 +:10B95000FEF705BDF0BC704710B5EFF3108000F0A6 +:10B96000010472B6F7484178491C417040780128BB +:10B9700001D1F7F709FB002C00D162B610BD70B5FC +:10B98000F04CE07848B90125E570FFF7E5FFF7F7DF +:10B9900003FB20B1002008F058FA002070BD4FF0E2 +:10B9A00080406571C0F80453F7E770B5EFF310807D +:10B9B00000F0010572B6E34C607800B9FFDF6078F3 +:10B9C000401E6070607808B9F7F7E2FA002D00D1E8 +:10B9D00062B670BDDB4810B5C17821B1002141715C +:10B9E000C170FFF7E2FF002010BD10B50446F7F765 +:10B9F000D3FAD449C978084000D001202060002043 +:10BA000010BD2DE9F05FDFF83C934278817889F82A +:10BA10000620002589F80710064689F808500078A6 +:10BA20002F4620B101280FD002280FD0FFDFF7F7F3 +:10BA3000C0FA98B1F7F7C4FAA8420FD12846F7F731 +:10BA4000C3FA0028FAD047E00125F0E7FFF784FFAA +:10BA5000F7F7A2FA0028FBD00225E8E701208407C7 +:10BA6000E060C4F80471B8490D600107D1F84412D0 +:10BA7000B54AC1F3423124321160B3493431086010 +:10BA80004FF0020BC4F804B3A060DFF8C0A2DAF8EC +:10BA90000010C94341F3001101F10108DAF8001068 +:10BAA00041F01001CAF8001000E020BFD4F80401F2 +:10BAB0000028FAD02846F7F787FA0028FAD0B8F11C +:10BAC000000F05D1DAF8001021F01001CAF80010BB +:10BAD000C4F808B3C4F8047199F807004C4670B173 +:10BAE000307860B9F7F758FA064608F00BFB6FF0AC +:10BAF000004116B1C4E9031001E0C4E9030115B126 +:10BB00002771BDE8F09F01202071BDE8F05F00F0D3 +:10BB1000D9B870B5050000D1FFDF4FF080424FF07B +:10BB2000FF30C2F808030021C2F80011C2F8041166 +:10BB3000C2F80C11C2F81011824C6170F7F732FA9A +:10BB400010B10120E07060702846BDE8704058E7F1 +:10BB50002DE9FE4F7E4800687D4A7E49083211601B +:10BB60008C070290D4F8080108B1012600E00026F5 +:10BB7000D4F8240100B101208146D4F81C0100B1A1 +:10BB800001208346D4F8200100B101200190D4F8AF +:10BB9000000110B14FF0010801E04FF00008D4F8A7 +:10BBA000040108B1012700E00027D4F80C0100B11E +:10BBB00001200090D4F8100108B1012100E000211B +:10BBC0008A4646EA080127EA01000099884320EAEC +:10BBD0000A0020EA090030EA0B0000D0FFDF002550 +:10BBE00026B1C4F80851012008F02FF9B9F1000F6F +:10BBF00004D0C4F82451092008F027F9BBF1000F44 +:10BC000004D0C4F81C510A2008F01FF9019820B193 +:10BC1000C4F820510B2008F018F9DFF83C91494E88 +:10BC20004FF0010BB8F1000F11D0C4F8005170793A +:10BC300018B17571002008F008F9307838B1357006 +:10BC400086F802B00222C9F80020C4F810B00FB183 +:10BC5000C4F80451009858B1C4F80C51B07800B938 +:10BC6000FFDFC9F80050B570C4F814B0FFF79DFEAF +:10BC7000BAF1000F05D0C4F81051307908B100F0C6 +:10BC800045F833490298091D0860BDE8FE8F70B57C +:10BC90002C4DE87808B9F7F77BF901208407A061FB +:10BCA000A87850B1D4F80C0120B90020F7F78CF92E +:10BCB0000028F7D10020C4F80C014FF0FF30C4F881 +:10BCC000080370BD2DE9F0411926B407C4F80863D4 +:10BCD0000125A5610020C4F80001C4F80C01C4F8D6 +:10BCE0001001F7F759F9174F28B11B49BD70022011 +:10BCF0000860256100E03D70FFF72EFE1249B8791B +:10BD000020310860C4F80463BDE8F0812DE9F041FA +:10BD10000C4C4FF080470125E07940B3012803D057 +:10BD2000217A401E814224DAF7F736F9064608F0F8 +:10BD3000E9F9E179012902D9217A491C21726EB110 +:10BD400021690CE03C0000201805004010ED00E0E7 +:10BD50001005024001000001340C0040E168411A66 +:10BD6000022902DA11F1020F0EDC0EB1206100E0AF +:10BD7000E060FFF7F1FDF7F70FF938B10549022050 +:10BD800008603D61A57002E07D61BDE7257000207F +:10BD90002072B9E7340C00404FF0E0214FF0007002 +:10BDA000C1F88001C1F88002384B802283F800245A +:10BDB000C1F80001704700B502460420344903E091 +:10BDC00001EBC0031B792BB1401EC0B2F8D2FFDFDC +:10BDD000FF2000BD41F8302001EBC00100224A7174 +:10BDE0008A7101220A7100BD294A002102EBC000BC +:10BDF0000171704710B50446042800D3FFDF2448C2 +:10BE000000EBC4042079012800D0FFDF6079A1791C +:10BE1000401CC0B2814200D060714FF0E0214FF071 +:10BE20000070C1F8000210BD2DE9F0411948056805 +:10BE300018491948083108601448042690F800048D +:10BE4000134F4009154C042818D0FFDF16E0217865 +:10BE500007EBC1000279012A08D1427983799A421D +:10BE600004D04279827157F8310080472078401C15 +:10BE7000C0B22070042801D300202070761EF6B2D4 +:10BE8000E5D20448001D0560BDE8F08119E000E03E +:10BE9000C8050020100502400100000150000020EC +:10BEA000F8B51D46DDE906470E000AD005F020F87A +:10BEB0002346FF1DBCB231462A46009404F02DFCF7 +:10BEC000F8BDD0192246194618F044FE2046F8BDA8 +:10BED00070B50D460446102118F0BBFE25811720D1 +:10BEE0006081A07B40F00A00A07370BD4FF6FF7226 +:10BEF0000A800146022008F017BB7047008970478E +:10BF0000827BD30701D1920703D480890880002067 +:10BF1000704705207047827B920700D5818170476A +:10BF200001460020098841F6FE52114200D001204E +:10BF3000704700B50346807BC00701D0052000BDD7 +:10BF400059811846FFF7ECFFC00703D0987B40F0FB +:10BF500004009873987B40F001009873002000BDA6 +:10BF6000827B520700D509B140897047172070477E +:10BF7000827B61F3C302827370472DE9FC5F0E463A +:10BF8000044601789646012000FA01F14DF6FF5271 +:10BF900001EA020962684FF6FF7B1188594502D118 +:10BFA0000920BDE8FC9FB9F1000F05D041F6FE5510 +:10BFB000294201D00120F4E741EA090111801D0066 +:10BFC00014D04FF0000C85F800C02378052103221F +:10BFD00067464FF0020A0E2B74D2DFE803F0F8092F +:10BFE000252F47626974479092B3D0D70420D8E7D1 +:10BFF000616820898B7B9B077DD5172848D30B89E7 +:10C00000834245D38989172901D3814240D185F8DC +:10C0100000A0A5F801003280616888816068817B9A +:10C0200021F002018173C5E0042028702089A5F861 +:10C0300001006089A5F803003180BBE0208A3188C7 +:10C04000C01D1FFA80F8414522D3062028702089A0 +:10C05000A5F801006089A5F80300A089A5F80500EE +:10C060000721208ACDE9000163693EE0082B10D04A +:10C07000082028702089A5F801006089A5F8030030 +:10C0800031806A1D694604F10C0006F08EFB10B188 +:10C090005FE01020EDE730889DF800100844308004 +:10C0A00088E00A2028702089A5F80100328045E048 +:10C0B0000C2028702089A5F801006089A5F80300EC +:10C0C00031803BE083E02189338800EB41021FFA95 +:10C0D00082F843453DD3B8F1050F3AD30E222A70BA +:10C0E0000BEA4101CDE90010E36860882A467146F9 +:10C0F000FFF7D6FE00E04DE0A6F800805AE04020B1 +:10C10000287060893188C01C1FFA80F8414520D30F +:10C110002878714620F03F00123028702089A5F859 +:10C1200001006089CDE9000260882A46E368FFF7D4 +:10C13000B7FEA6F80080287840063BD461682089C5 +:10C14000888037E0A0893288401D1FFA80F8424578 +:10C1500001D204273EE0162028702089A5F80100AE +:10C160006089A5F80300A089CDE9000160882A460E +:10C1700071462369FFF794FEA6F80080DEE71820D9 +:10C180002870207A6870A6F800A013E061680A8819 +:10C19000920401D405271DE0C9882289914201D06B +:10C1A000062717E01E21297030806068018821F47D +:10C1B00000510180B9F1000F0CD061887823002272 +:10C1C000022008F007F961682078887007E0A6F877 +:10C1D00000C003276068018821EA09010180384610 +:10C1E000DFE62DE9FF4F85B01746129C0D001E4675 +:10C1F0001CD03078C10703D000F03F00192801D9C6 +:10C20000012100E000212046FFF7AAFEA8420DD33D +:10C210002088A0F57F41FF3908D03078410601D44D +:10C22000000605D5082009B0BDE8F08F0720FAE721 +:10C2300000208DF800008DF8010030786B1E00F0B2 +:10C240003F0C0121A81E4FF0050A4FF002094FF0E4 +:10C25000030B9AB2BCF1200F75D2DFE80CF08B1003 +:10C26000745E7468748C749C74B674BB74C974D531 +:10C2700074E2747474F274F074EF74EE748B052DC0 +:10C2800078D18DF80090A0788DF804007088ADF812 +:10C29000060030798DF80100707800F03F000C281E +:10C2A00029D00ADCA0F10200092863D2DFE800F0FF +:10C2B000126215621A621D622000122824D004DC6A +:10C2C0000E281BD01028DBD11BE016281FD0182801 +:10C2D000D6D11FE02078800701E0207840070028B1 +:10C2E00048DAEFE020780007F9E72078C006F6E7A3 +:10C2F00020788006F3E720784006F0E720780006F3 +:10C30000EDE72088C005EAE720884005E7E72088B8 +:10C310000005E4E72088C004E1E72078800729D5FC +:10C32000032D27D18DF800B0B6F8010082E0217806 +:10C3300049071FD5062D1DD381B27078012803D07F +:10C34000022817D102E0CAE0022000E010200422F7 +:10C350008DF8002072788DF80420801CB1FBF0F27B +:10C36000ADF8062092B242438A4203D10397ADF85A +:10C370000890A7E07AE02078000777D598B2820885 +:10C380008DF800A0ADF80420B0EB820F6ED10297BB +:10C39000ADF8061096E02178C90667D5022D65D361 +:10C3A00081B206208DF80000707802285ED300BFAD +:10C3B000B1FBF0F28DF80400ADF8062092B24243D2 +:10C3C0008A4253D1ADF808907BE0207880064DD5A5 +:10C3D000072003E0207840067FD508208DF8000074 +:10C3E000A088ADF80400ADF80620ADF8081068E0AC +:10C3F0002078000671D50920ADF804208DF80000E2 +:10C40000ADF8061002975DE02188C90565D5022DBB +:10C4100063D381B20A208DF80000707804285CD3C1 +:10C42000C6E72088400558D5012D56D10B208DF840 +:10C430000000A088ADF8040044E021E026E016E00A +:10C44000FFE72088000548D5052D46D30C208DF840 +:10C450000000A088ADF80400B6F803006D1FADF829 +:10C460000850ADF80600ADF80AA02AE035E02088B3 +:10C47000C00432D5012D30D10D208DF8000021E00F +:10C480002088800429D4B6F80100E080A07B000752 +:10C4900023D5032D21D3307800F03F001B2818D07E +:10C4A0000F208DF80000208840F40050A4F8000010 +:10C4B000B6F80100ADF80400ED1EADF80650ADF879 +:10C4C00008B0039769460598F5F7B2FC050008D057 +:10C4D00016E00E208DF80000EAE7072510E0082599 +:10C4E0000EE0307800F03F001B2809D01D2807D04F +:10C4F0000220059908F018F8208800F400502080E8 +:10C50000A07B400708D52046FFF70AFDC00703D1EE +:10C51000A07B20F00400A073284684E61FB5022803 +:10C5200006D101208DF8000088B26946F5F780FC3D +:10C530001FBD0000F8B51D46DDE906470E000AD014 +:10C5400004F0D6FC2346FF1DBCB231462A460094B7 +:10C5500004F0E3F8F8BDD0192246194618F0FAFAAB +:10C560002046F8BD2DE9FF4F8DB09B46DDE91B57F6 +:10C57000DDF87CA00C46082B05D0E06901F002F93B +:10C5800050B11020D2E02888092140F01000288006 +:10C590008AF80010022617E0E16901208871E2693B +:10C5A0004FF420519180E1698872E06942F60101FF +:10C5B0000181E069002181732888112140F0200069 +:10C5C00028808AF80010042638780A900A203870EB +:10C5D0004FF0020904F118004D460C9001F095FB54 +:10C5E000B04681E0BBF1100F0ED1022D0CD0A9EBAB +:10C5F0000800801C80B20221CDE9001005AB524634 +:10C600001E990D98FFF796FFBDF816101A988142F3 +:10C6100003D9F74800790F9004E003D10A9808B1D4 +:10C6200038702FE04FF00201CDE900190DF116032B +:10C6300052461E990D98FFF77DFF1D980088401BFC +:10C64000801B83B2C6F1FF00984200D203461E99B8 +:10C650000BA8D9B15FF00002DDF878C0CDE9032066 +:10C6600009EB060189B2CDE901C10F980090BDF830 +:10C67000161000220D9801F0CBFB387070B1C0B2DB +:10C68000832807D0BDF8160020833AE00AEB0901A1 +:10C690008A19E1E7022011B0BDE8F08FBDF82C0047 +:10C6A000811901F0FF08022D0DD09AF801204245B2 +:10C6B00006D1BDF82010814207D0B8F1FF0F04D099 +:10C6C0009AF801801FE08AF80180C9480068017863 +:10C6D000052902D1BDF81610818009EB08001FFA68 +:10C6E00080F905EB080085B2DDE90C1005AB0F9A67 +:10C6F00001F00EFB28B91D980088411B4145BFF68B +:10C7000071AF022D13D0BBF1100F0CD1A9EB0800B3 +:10C71000801C81B20220CDE9000105AB52461E9972 +:10C720000D98FFF707FF1D98058000203870002046 +:10C73000B1E72DE9F8439C46089E13460027B26BEB +:10C740009AB3491F8CB2F18FA1F57F45FF3D05D00B +:10C750005518AD882944891D8DB200E0002529199E +:10C76000B6F83C800831414520D82A44BCF8011075 +:10C7700022F8021BBCF8031022F8021B984622F88C +:10C78000024B914604F0A2FB4FF00C0C41464A4686 +:10C790002346CDF800C003F08CFFF587B16B002075 +:10C7A0002944A41D2144088003E001E0092700E09A +:10C7B00083273846BDE8F88310B50B88848F9C42E8 +:10C7C0000CD9846BE018048844B1848824F40044B4 +:10C7D000A41D23440B801060002010BD0A2010BD52 +:10C7E0002DE9F0478AB00025904689468246ADF88B +:10C7F000185007274BE0059806888088000446D427 +:10C80000A8F8006007A8019500970295CDE90350AC +:10C810004FF4007300223146504601F0F9FA04004B +:10C820003CD1BDF81800ADF8200005980488818837 +:10C83000B44216D10A0414D401950295039521F44B +:10C8400000410097049541F48043428821465046B8 +:10C8500001F0B4F804000BD10598818841F400413F +:10C86000818005AA08A94846FFF7A6FF0400DCD08E +:10C870000097059802950195039504950188BDF8E8 +:10C880001C300022504601F099F80A2C06D105AA66 +:10C8900006A94846FFF790FF0400ACD0ADF8185049 +:10C8A00004E00598818821F40041818005AA06A949 +:10C8B0004846FFF781FF0028F3D00A2C03D020461A +:10C8C0000AB0BDE8F0870020FAE710B50C46896B86 +:10C8D00086B051B10C218DF80010A18FADF8081071 +:10C8E000A16B01916946FAF734FC00204FF6FF7105 +:10C8F000A063E187A08706B010BD2DE9F0410D4689 +:10C900000746896B0020069E1446002911D0012B92 +:10C910000FD1324629463846FFF762FF002808D17A +:10C92000002C06D0324629463846BDE8F04100F0DA +:10C9300038BFBDE8F0812DE9FC411446DDE9087CF3 +:10C940000E46DDE90A15521DBCF800E092B296458C +:10C9500002D20720BDE8FC81ACF8002017222A7023 +:10C96000A5F80160A5F803300522CDE900423B4659 +:10C970002A46FFF7DFFD0020ECE770B50C461546B0 +:10C980004821204618F087F904F1080044F81C0FEC +:10C9900000204FF6FF71E06161842084A584172098 +:10C9A000E08494F82A0040F00A0084F82A0070BD60 +:10C9B0004FF6FF720A800146032007F0B5BD30B57F +:10C9C00085B00C460546FFF780FFA18E284629B1A9 +:10C9D00001218DF800106946FAF7BBFB0020E062E8 +:10C9E0002063606305B030BDB0F8400070470000C0 +:10C9F0005400002090F84620920703D44088088015 +:10CA00000020F3E70620F1E790F846209207EDD5E5 +:10CA1000A0F84410EAE70146002009880A0700D57B +:10CA2000012011F0F00F01D040F00200CA0501D53D +:10CA300040F004008A0501D540F008004A0501D500 +:10CA400040F010000905D1D540F02000CEE700B538 +:10CA5000034690F84600C00701D0062000BDA3F8A9 +:10CA600042101846FFF7D7FF10F03E0F05D093F89D +:10CA7000460040F0040083F8460013F8460F40F0EB +:10CA800001001870002000BD90F84620520700D524 +:10CA900011B1B0F84200A9E71720A7E710F8462F18 +:10CAA00061F3C3020270A1E72DE9FF4F9BB00E00B6 +:10CAB000DDE92B34DDE92978289D24D02878C107C9 +:10CAC00003D000F03F00192801D9012100E0002126 +:10CAD0002046FFF7D9FFB04215D32878410600F071 +:10CAE0003F010CD41E290CD0218811F47F6F0AD18C +:10CAF0003A8842B1A1F57F42FF3A04D001E0122901 +:10CB000001D1000602D504201FB0C5E5F9491D98E2 +:10CB10004FF0000A08718DF818A08DF83CA00FAAFC +:10CB20000A60ADF81CA0ADF850A02978994601F034 +:10CB30003F02701F5B1C04F1180C4FF0060E4FF003 +:10CB4000040BCDF858C01F2A7ED2DFE802F07D7DAD +:10CB5000107D267DAC7DF47DF37DF27DF17DF47D4D +:10CB6000F07D7D7DEF7DEE7D7D7D7D7DED0094F81A +:10CB70004610B5F80100890701D5032E02D08DF8C3 +:10CB800018B022E34FF40061ADF85010608003212B +:10CB90008DF83C10ADF84000D8E2052EEFD1B5F885 +:10CBA00001002083ADF81C00B5F80310618308B1C3 +:10CBB000884201D901207FE10020A07220814FF638 +:10CBC000FF702084169801F0A0F8052089F8000075 +:10CBD0000220029083460AAB1D9A16991B9801F019 +:10CBE00097F890BB9DF82E00012804D0022089F808 +:10CBF0000100102003E0012089F8010002200590C7 +:10CC0000002203A90BA805F0D0FDE8BB9DF80C009D +:10CC1000059981423DD13A88801CA2EB0B018142EB +:10CC200037DB02990220CDE900010DF12A034A46C3 +:10CC300041461B98FFF77EFC02980BF1020B801C0B +:10CC400080B217AA03A901E0A0E228E002900BA895 +:10CC500005F0ABFD02999DF80C00CDE9000117AB82 +:10CC60004A4641461B98FFF765FC9DF80C100AAB3D +:10CC70000BEB01001FFA80FB02981D9A084480B25A +:10CC8000029016991B9800E003E001F041F800289B +:10CC9000B6D0BBF1020F02D0A7F800B053E20A20D1 +:10CCA0008DF818004FE200210391072EFFF467AFC3 +:10CCB000B5F801002083ADF81C00B5F803206283AD +:10CCC00000283FF477AF90423FF674AF0120A07286 +:10CCD000B5F8050020810020A073E06900F052FD46 +:10CCE00078B9E16901208871E2694FF4205191809F +:10CCF000E1698872E06942F601010181E069002181 +:10CD00008173F01F20841E9860620720608416984B +:10CD100000F0FBFF072089F800000120049002903A +:10CD20000020ADF82A0028E01DE2A3E13AE1EAE0A4 +:10CD300016E2AEE086E049E00298012814D0E069EE +:10CD40008079012803D1BDF82800ADF80E000498C1 +:10CD500003ABCDE900B04A4641461B98FFF7EAFB1A +:10CD60000498001D80B20490BDF82A00ADF80C00B4 +:10CD7000ADF80E00059880B202900AAB1D9A169984 +:10CD80001B9800F0C5FF28B902983988001D05904E +:10CD90008142D1D20298012881D0E06980790128AE +:10CDA00005D0BDF82810A1F57F40FF3803D1BDF8AC +:10CDB0002800ADF80E00049803ABCDE900B04A4658 +:10CDC00041461B98FFF7B6FB0298BBE1072E02D045 +:10CDD000152E7FF4D4AEB5F801102183ADF81C10E8 +:10CDE000B5F80320628300293FF4E4AE91423FF698 +:10CDF000E1AE0121A1724FF0000BA4F808B084F855 +:10CE00000EB0052E07D0C0B2691DE26905F0AEFC78 +:10CE100000287FF444AF4FF6FF70208401A906AAD2 +:10CE200014A8CDF800B081E885032878214600F0E9 +:10CE30003F031D9A1B98FFF795FB8246208BADF8A8 +:10CE40001C0080E10120032EC3D14021ADF8501019 +:10CE5000B5F801102183ADF81C100AAAB8F1000F33 +:10CE600000D00023CDE9020304921D98CDF8048080 +:10CE7000009038880022401E83B21B9800F0C8FF43 +:10CE80008DF8180090BB0B2089F80000BDF8280031 +:10CE900037E04FF0010C052E9BD18020ADF85000FB +:10CEA000B5F801102183B5F803002084ADF81C10FB +:10CEB000B0F5007F03D907208DF8180085E140F414 +:10CEC0007C4222840CA8B8F1000F00D00023CDE9E9 +:10CED0000330CDE9018C1D9800903888401E83B244 +:10CEE0001B9800F095FF8DF8180028B18328A8D171 +:10CEF0000220BDE0540000200D2189F80010BDF88B +:10CF00003000401C1EE1032E04D248067FF537AEE8 +:10CF1000002017E1B5F80110ADF81C102878400684 +:10CF200002D58DF83CE002E007208DF83C004FF080 +:10CF300000080320CDE902081E9BCDF810801D9843 +:10CF40000193A6F1030B00901FFA8BF342461B9846 +:10CF500000F034FD8DF818008DF83C8029784906E2 +:10CF60000DD52088C00506D5208BBDF81C10884241 +:10CF700001D1C4F8248040468DF81880E2E083286F +:10CF800001D14FF0020A4FF48070ADF85000BDF8A7 +:10CF90001C002083A4F820B01E98606203206084E7 +:10CFA0001321CCE0052EFFF4EAADB5F80110ADF881 +:10CFB0001C10A28F62B3A2F57F43FE3B28D008224B +:10CFC0008DF83C204FF0000B0523CDE9023BDDF846 +:10CFD00078C0CDF810B01D9A80B2CDF804C040F4EE +:10CFE00000430092B5F803201B9800F0E7FC8DF891 +:10CFF0003CB04FF400718DF81800ADF85010832844 +:10D0000010D0F8B1A18FA1F57F40FE3807D0DCE049 +:10D010000B228DF83C204FF6FE72A287D2E7A4F8CF +:10D020003CB0D2E000942B4631461E9A1B98FFF785 +:10D0300080FB8DF8180008B183284BD1BDF81C0087 +:10D04000208355E700942B4631461E9A1B98FFF724 +:10D0500070FB8DF81800E8BBE18FA06B0844811DC0 +:10D060008DE882034388828801881B98FFF763FC60 +:10D07000824668E095F80180022E70D15FEA0800D0 +:10D0800002D0B8F1010F6AD109208DF83C0007A841 +:10D0900000908DF840804346002221461B98FFF700 +:10D0A0002CFC8DF842004FF0000B8DF843B050B9C6 +:10D0B000B8F1010F12D0B8F1000F04D1A18FA1F582 +:10D0C0007F40FF380AD0A08F40B18DF83CB04FF4BC +:10D0D000806000E037E0ADF850000DE00FA91B982C +:10D0E000FAF737F882468DF83CB04FF48060ADF81F +:10D0F0005000BAF1020F06D0FC480068C07928B190 +:10D100008DF8180027E0A4F8188044E0BAF1000F69 +:10D1100003D081208DF818003DE007A80090434619 +:10D12000012221461B98FFF7E8FB8DF818002146E5 +:10D130001B98FFF7CAFB9DF8180020B9192189F840 +:10D140000010012038809DF83C0020B10FA91B98E9 +:10D15000F9F7FFFF8246BAF1000F33D01BE018E069 +:10D160008DF818E031E02078000712D5012E10D19B +:10D170000A208DF83C00E088ADF8400003201B99A0 +:10D1800007F0D2F90820ADF85000C1E648067FF557 +:10D19000F6AC4FF0040A2088BDF8501008432080F8 +:10D1A000BDF8500080050BD5A18FA1F57F40FE385A +:10D1B00006D11E98E06228982063A6864FF0030AE5 +:10D1C0005046A1E49DF8180078B1012089F80000CC +:10D1D000297889F80110BDF81C10A9F802109DF8F3 +:10D1E000181089F80410052038802088BDF85010E8 +:10D1F00088432080E4E72DE9FF4F8846087895B002 +:10D20000012181404FF20900249C0140ADF820101B +:10D210002088DDF88890A0F57F424FF0000AFF3AA1 +:10D2200006D039B1000705D5012019B0BDE8F08F4F +:10D230000820FAE7239E4FF0000B0EA886F800B0F6 +:10D2400018995D460988ADF83410A8498DF81CB0CE +:10D25000179A0A718DF838B0086098F80000012814 +:10D260003BD0022809D003286FD1307820F03F004E +:10D270001D303070B8F80400E08098F800100320EA +:10D28000022904D1317821F03F011B31317094F82B +:10D290004610090759D505ABB9F1000F13D000218D +:10D2A00002AA82E80B000720CDE90009BDF834008E +:10D2B000B8F80410C01E83B20022159800F0A8FD33 +:10D2C0000028D1D101E0F11CEAE7B8F80400A6F883 +:10D2D0000100BDF81400C01C04E198F805108DF899 +:10D2E0001C1098F80400012806D04FF4007A022898 +:10D2F0002CD00328B8D16CE12188B8F8080011F4CB +:10D300000061ADF8201020D017281CD3B4F84010CD +:10D31000814218D3B4F84410172901D3814212D1A5 +:10D32000317821F03F01C91C3170A6F801000321BA +:10D33000ADF83410A4F8440094F8460020F0020040 +:10D3400084F8460065E105257EE177E1208808F153 +:10D35000080700F4FE60ADF8200010F0F00F1BD0BD +:10D3600010F0C00F03D03888228B9042EBD199B9CE +:10D37000B878C00710D0B9680720CDE902B1CDF860 +:10D3800004B00090CDF810B0FB88BA8839881598A1 +:10D3900000F014FB0028D6D12398BDF82010401CC3 +:10D3A00080294ED006DC10290DD020290BD0402931 +:10D3B00087D124E0B1F5807F6ED051457ED0B1F5A4 +:10D3C000806F97D1DEE0C80601D5082000E010206C +:10D3D00082460DA907AA0520CDE902218DF8380063 +:10D3E000ADF83CB0CDE9049608A93888CDE9000134 +:10D3F0005346072221461598FFF7B4F8A8E09DF898 +:10D400001C2001214FF00A0A002A9BD105ABB9F17B +:10D41000000F00D00020CDE902100720CDE900095F +:10D42000BDF834000493401E83B2218B002215986E +:10D4300000F0EEFC8DF81C000B203070BDF81400DD +:10D4400020E09DF81C2001214FF00C0A002A22D177 +:10D4500013ABB9F1000F00D00020CDE90210072076 +:10D46000CDE900090493BDF83400228C401E83B23C +:10D47000218B159800F0CCFC8DF81C000D2030702D +:10D48000BDF84C00401CADF8340005208DF8380084 +:10D49000208BADF83C00BCE03888218B88427FF4BB +:10D4A00052AF9DF81C004FF0120A00281CD1606A90 +:10D4B000A8B1B878C0073FF446AF00E018E0BA68FA +:10D4C0000720CDE902B2CDF804B00090CDF810B03D +:10D4D000FB88BA88159800F071FA8DF81C001320AB +:10D4E00030700120ADF8340093E0000054000020BB +:10D4F0003988208B8142D2D19DF81C004FF0160A4A +:10D500000028A06B08D0E0B34FF6FF7000215F4603 +:10D51000ADF808B0019027E068B1B978C907BED16D +:10D52000E18F0DAB0844821D03968DE80C02438801 +:10D530008288018809E0B878C007BCD0BA680DAB12 +:10D5400003968DE80C02BB88FA881598FFF7F3F96B +:10D5500005005ED0072D72D076E0019005AA02A9E1 +:10D560002046FFF729F90146E28FBDF80800824204 +:10D5700001D00029F1D0E08FA16B08440780019809 +:10D58000E08746E09DF81C004FF0180A40B1208B60 +:10D59000C8B13888208321461598FFF796F938E0FE +:10D5A00004F118000090237E012221461598FFF710 +:10D5B000A4F98DF81C000028EDD11920307001204D +:10D5C000ADF83400E7E7052521461598FFF77DF90A +:10D5D0003AE0208800F40070ADF8200050452DD1CD +:10D5E000A08FA0F57F41FE3901D006252CE0D8F8A8 +:10D5F00008004FF0160A48B1A063B8F80C10A187D4 +:10D600004FF6FF71E187A0F800B002E04FF6FF701F +:10D61000A087BDF8200030F47F611AD07823002263 +:10D620000320159906F0D6FE98F800002071208896 +:10D63000BDF82010084320800EE000E00725208878 +:10D64000BDF8201088432080208810F47F6F1CD004 +:10D650003AE02188814321809DF8380020B10EA94D +:10D660001598F9F776FD05469DF81C000028EBD0CB +:10D6700086F801A001203070208B70809DF81C007E +:10D6800030710520ADF83400DEE7A18EE1B11898C5 +:10D690000DAB0088ADF834002398CDE90304CDE943 +:10D6A0000139206B0090E36A179A1598FFF7FCF98F +:10D6B000054601208DF838000EA91598F9F749FDA7 +:10D6C00000B10546A4F834B094F8460040070AD5E6 +:10D6D0002046FFF7A0F910F03E0F04D114F8460FD2 +:10D6E00020F0040020701898BDF8341001802846FE +:10D6F0009BE500B585B0032806D102208DF8000017 +:10D7000088B26946F9F725FD05B000BD10B5384C63 +:10D710000B782268012B02D0022B2AD111E013785A +:10D720000BB1052B01D10423137023688A889A80DA +:10D730002268CB88D38022680B8913814989518163 +:10D740000DE08B8893802268CB88D38022680B8978 +:10D7500013814B8953818B899381096911612168F8 +:10D76000F9F7F7FC226800210228117003D0002885 +:10D7700000D0812010BD832010BD806B002800D018 +:10D78000012070478178012909D10088B0F5205F18 +:10D7900003D042F60101884201D1002070470720E2 +:10D7A0007047F0B587B0002415460E460746ADF821 +:10D7B000144010E0069801882980811DCDE90241BE +:10D7C0000721019404940091838842880188384697 +:10D7D00000F0F4F830B906AA05A93046FEF7ECFFD0 +:10D7E0000028E7D00A2800D1002007B0F0BD0000D3 +:10D7F0005400002010B58B7883B102789A4205D18D +:10D800000B885BB102E08B79091D4BB18B789A4292 +:10D81000F9D1B0F801300C88A342F4D1002010BD3A +:10D82000812010BD072826D012B1012A27D103E09C +:10D83000497801F0070102E04978C1F3C2010529E6 +:10D840001DD2DFE801F00318080C12000AB1032012 +:10D8500070470220704704280DD250B10DE0052812 +:10D8600009D2801E022808D303E0062803D003282B +:10D8700003D005207047002070470F20704781209B +:10D880007047C0B282060BD4000607D5FE48807AE6 +:10D890004143C01D01EBD00080B27047084670477D +:10D8A0000020704770B513880B800B781C0625D5B7 +:10D8B000F54CA47A844204D843F01000087000208C +:10D8C00070BD956800F0070605EBD0052D78F54092 +:10D8D00065F304130B701378D17803F0030341EA66 +:10D8E000032140F20123B1FBF3F503FB151192680C +:10D8F000E41D00FB012000EBD40070BD906870BDFA +:10D9000037B51446BDF8041011809DF804100A06BE +:10D910001ED5C1F30013DC49A568897A814208D875 +:10D92000FE2811D1C91DC9085A42284617F089F9A5 +:10D930000AE005EBD00100F00702012508789540C8 +:10D94000A843934018430870207820F010002070FE +:10D950003EBD2DE9F0410746C81C0E4620F00300ED +:10D96000B04202D08620BDE8F081C74D0020344689 +:10D970002E60AF802881AA72E8801AE0E988491CED +:10D98000E980810614D4E17800F0030041EA002028 +:10D9900040F20121B0FBF1F201FB12012068FFF718 +:10D9A00070FF2989084480B22881381A3044A06069 +:10D9B0000C3420784107E1D40020D4E72DE9FF4F53 +:10D9C00089B01646DDE9168A0F46994623F440458C +:10D9D000084600F00DFB04000FD0099803F00AF987 +:10D9E0000290207800060AD5A748817A02988142E1 +:10D9F00005D887200DB0BDE8F08F0120FAE7224658 +:10DA000001A90298FFF74EFF834600208DF80C0015 +:10DA10004046B8F1070F1AD001222146FFF702FF56 +:10DA20000028E7D12078400611D502208DF80C009F +:10DA3000ADF81070BDF80400ADF81200ADF8146038 +:10DA40001898ADF81650CDF81CA0ADF818005FEA94 +:10DA5000094004D500252E46A84601270CE0217870 +:10DA6000E07801F0030140EA012040F20121B0FB1F +:10DA7000F1F2804601FB12875FEA494009D5B845BB +:10DA800007D1A178207901F0030140EA0120B042DA +:10DA900001D3BE4201D90720ACE7A8191FFA80F9CB +:10DAA000B94501D90D20A5E79DF80C0028B103A9BF +:10DAB0000998F9F74CFB00289CD1B84507D1A0780C +:10DAC0004FEA192161F30100A07084F804901A98BC +:10DAD00000B10580199850EA0A0027D0199830B192 +:10DAE0000BEB06002A46199917F034F80EE00BEB01 +:10DAF00006085746189E099803F0E8F92B46F61DCC +:10DB0000B5B239464246009502F0D3FD224601A93E +:10DB10000298FFF7C7FE9DF80400224620F010008F +:10DB20008DF80400DDE90110FFF7EAFE002061E74F +:10DB30002DE9FF4FDFF8509182461746B9F80610DD +:10DB4000D9F8000001EB410100EB810440F2012013 +:10DB5000B2FBF0F185B000FB11764D46DDF84C804C +:10DB600031460698FFF78DFE29682A898B46611A8F +:10DB70000C3101441144AB8889B28B4202D8842015 +:10DB800009B038E70699CDB2290603D5A90601D513 +:10DB90000620F5E7B9F806C00CF1010C1FFA8CFC61 +:10DBA000A9F806C0149909B1A1F800C0A90602D5C8 +:10DBB000C4F8088007E0104480B2A9F80800191AD8 +:10DBC00001EB0B00A0602246FE200699FFF798FEAD +:10DBD000E77026712078390A61F30100320AA178D2 +:10DBE00040F0040062F30101A17020709AF8020075 +:10DBF0006071BAF80000E08000262673280602D57E +:10DC000099F80A7000E00127A80601D54FF0000836 +:10DC10004D4600244FF007090FE0CDE90268019658 +:10DC2000CDF800900496E9882046129B089AFFF7E9 +:10DC3000C5FE0028A4D1641CE4B2BC42EDD3002090 +:10DC40009EE72DE9F047804600F0D2F9070005D0A5 +:10DC5000002644460C4D40F2012919E00120BDE8A0 +:10DC6000F087204600F0C4F90278C17802F0030280 +:10DC700041EA0222B2FBF9F309FB13210068FFF726 +:10DC800000FE304486B201E0E8050020641CA4B226 +:10DC9000E988601E8142E4DCA8F10100E88028895F +:10DCA000801B288100203870D9E710B5144631B1A7 +:10DCB000491E218002F09EFFA070002010BD0120AF +:10DCC00010BD10B5D24904460088CA88904201D3DD +:10DCD0000A2010BD096800EB400001EB800250797A +:10DCE000A072D08820819178107901F0030140EA78 +:10DCF0000120A081A078E11CFFF7D4FD20612088DD +:10DD0000401C2080E080002010BD0121018270476E +:10DD10002DE9FF4F85B04FF6FF788246A3F80080CB +:10DD200048681F460D4680788DF8060048680088D0 +:10DD3000ADF8040000208DF80A00088A0C88A04283 +:10DD400000D304462C8241E0288A401C2882701DA2 +:10DD50006968FFF74FFDB8BB3988414501D1601EA6 +:10DD600038806888A04236D3B178307901F0030159 +:10DD700040EA012901A9701DFFF73CFD20BB29895C +:10DD800041452CD0002231460798FFF74BFDD8B90A +:10DD90002989494518D1E9680391B5F80AC0D6F830 +:10DDA00008B05046CDF800C003F090F8DDF800C090 +:10DDB0005A460CF1070C1FFA8CFC4B460399CDF820 +:10DDC00000C002F040FC50B1641CA4B2204600F038 +:10DDD0000FF90600B8D1641E2C820A20D0E67C80A0 +:10DDE0007079B871F088B8803178F07801F003016B +:10DDF00040EA01207881A7F80C90504602F0FAFE24 +:10DE0000324607F10801FFF74DFD38610020B7E603 +:10DE10002DE9FF4F87B081461C469246DDF860B081 +:10DE2000DDF85480089800F0E3F805000CD048466F +:10DE300002F0E0FE2978090608D57549897A814201 +:10DE400004D887200BB0D6E50120FBE7CAF309060A +:10DE50002A4601A9FFF726FD0746149807281CD07B +:10DE600000222946FFF7DEFC0028EBD12878400687 +:10DE700013D501208DF808000898ADF80C00BDF806 +:10DE80000400ADF80E00ADF81060ADF8124002A924 +:10DE90004846F9F75CF90028D4D12978E87801F0F0 +:10DEA000030140EA0121AA78287902F0030240EA3E +:10DEB0000220564507D0B1F5007F04D9611E81428A +:10DEC00001DD0B20BEE7864201D90720BAE7801B9F +:10DED00085B2A54200D92546BBF1000F01D0ABF8B1 +:10DEE0000050179818B1B9192A4616F033FEB8F148 +:10DEF000000F0DD03E4448464446169F02F0F8FFFE +:10DF00002146FF1DBCB232462B46009402F005FCB0 +:10DF1000002097E72DE9F04107461D4616460846C2 +:10DF200000F066F804000BD0384602F063FE21785A +:10DF3000090607D53649897A814203D8872012E538 +:10DF4000012010E522463146FFF7ACFC65B121788F +:10DF5000E07801F0030140EA0120B0F5007F01D82C +:10DF6000012000E0002028700020FCE42DE9F041B1 +:10DF700007461D461646084600F03AF804000BD046 +:10DF8000384602F037FE2178090607D52049897AFC +:10DF9000814203D88720E6E40120E4E422463146AA +:10DFA000FFF7AEFCFF2D14D02178E07801F00302DA +:10DFB00040EA022040F20122B0FBF2F302FB130020 +:10DFC00015B900F2012080B2E070000A60F301018F +:10DFD00021700020C7E410B50C4600F009F828B104 +:10DFE000C18821804079A070002010BD012010BDA3 +:10DFF0000749CA88824209D340B1096800EB400052 +:10E000006FF00B0202EB800008447047002070475D +:10E01000E805002070B50346002002466FF02F058A +:10E020000EE09C5CA4F130060A2E02D34FF0FF30C4 +:10E0300070BD00EB800005EB4000521C2044D2B2C2 +:10E040008A42EED370BD30B50A240AE0B0FBF4F387 +:10E0500004FB13008D18303005F8010C521E1846D1 +:10E06000D2B2002AF2D130BD30B500234FF6FF7591 +:10E0700010E0040A44EA002084B2C85C6040C0F3A7 +:10E080000314604005EA00344440E0B25B1C84EABB +:10E0900040109BB29342ECD330BD000010B582B06B +:10E0A000694601F07CFF002818BFFFDF9DF80000E3 +:10E0B000002448B1019890F8DD0028B1019880F85B +:10E0C000DD4001980AF0F1FAF8488068A0F8D240E3 +:10E0D00002B010BD2DE9F04704460D46062002F0BF +:10E0E0006BFD0646072002F067FD304400F0FF0894 +:10E0F000002718EB050618BF4FF000091DD0208837 +:10E10000401C80B22080B04228BFA4F8009025882F +:10E11000454501D3B54209D30621284602F0A4FDA6 +:10E1200020B90721284602F09FFD10B10020BDE86C +:10E13000F087781CC7B2BE42E1D84FF6FF7020804E +:10E140001220BDE8F08770B582B007F057FC0DF0E3 +:10E150007FFBD74C4FF6FF7600256683A683D5A1BB +:10E160002570D1E90001CDE9000165706946A01C68 +:10E1700016F0A6FEA11C601C14F073FC25721B2077 +:10E1800060814FF4A471A181E08121820321A174F7 +:10E190000422E274A082E082A4F13E002183057093 +:10E1A0004680C6480570A4F110000570468002B094 +:10E1B00070BDF8B5BD4D17460E466860297007F072 +:10E1C00097FB4FF6FF70ADF8000000216846FFF79F +:10E1D00081FFA0B90621BDF8000002F057FD0446FA +:10E1E0000721BDF8000002F051FD002C1CBF0028E3 +:10E1F000FFDF00216846FFF76DFF0028EAD0FFF738 +:10E20000A2FF287812F03CFC10F034F829786868F6 +:10E2100014F039FB28780CF01FFD30460AF051F954 +:10E2200007F004FD297868680BF094FB39462878DC +:10E2300015F0F5F9BDE8F8400DF00ABB10B5012462 +:10E24000002A1CBF002010BD002908BF022105D0F4 +:10E25000012918BF002401D0204610BD0FF02EF96F +:10E26000FAE72DE9F04F8BB0040008BFFFDF022171 +:10E270008F4E06F11C00FFF72DFF002818BFFFDFAF +:10E28000B6F81CA0062002F097FC0546072002F015 +:10E2900093FC284400F0FF0808F1010000F0FF099A +:10E2A0004FF0000BB78B474525D120460FF0C8FA39 +:10E2B000002840F0CE803078002800F0CE8084F82E +:10E2C00001B014202070C4F804B0C4F808B0C4F839 +:10E2D0000CB0C4F810B0C4F814B0C4F818B0C4F846 +:10E2E0001CB00220C4F820B0207186F800B00BB03A +:10E2F0000120BDE8F08F4F4520D1204607F030FCCB +:10E3000000287DD008F032F8002859D0207817284E +:10E3100056D12079002853D0E088072102F0A4FCD0 +:10E32000050008BFFFDF288807F0FBFAE088072117 +:10E3300002F0ACFC002818BFFFDF8AE004A93846D1 +:10E3400001F02DFE00285BD19DF8100048B107F0C8 +:10E3500062FCB84254D0214638460BF004FA80B330 +:10E3600077E00FF000FBB84277D02146384614F032 +:10E37000ABF900286DD1059800F1580590F8D00050 +:10E3800018B9E87E08B1012000E00020079095F858 +:10E39000370000281CBF95F8380010F0020F1CD081 +:10E3A00084F801B00120207084F804B0E78095F86B +:10E3B00039002072688F6081A88FA08185F837B0FE +:10E3C00047E0FFE7059800F1580590F80C01002898 +:10E3D000DBD1E87E0028D8D0D5E7384602F088FDAA +:10E3E0000290002808BFFFDF029801F097FF50B1AC +:10E3F00084F801B00F212170E7802081012000E026 +:10E400002BE0207125E0384602F060FD02900028E4 +:10E4100008BFFFDF079800B3029801F0D6FFE0B114 +:10E420009DF8100038B90598D0F8F8004188B94235 +:10E4300008BF80F800B0384607F073FA84F801B0DE +:10E440000C20207084F804B0E780287F207285F8C3 +:10E450001BB00BB00120BDE8F08F022106F11C00BB +:10E46000FFF738FE18B9B08B50457FF41BAF0BB0E7 +:10E470002046BDE8F04F15F018B910B513F08CF830 +:10E48000042803D013F088F8052802D110F00FF902 +:10E4900028B90AF0EBFA20B107F08AFD08B10C2088 +:10E4A00010BD0DF021FA002010BD00005C0000201E +:10E4B00032060020FFFFFFFF1F0000006800002061 +:10E4C00010B50446007800281EBF0128122010BD98 +:10E4D00013F062F8042806D013F05EF8052802D085 +:10E4E0000AF0C4FA28B10DF04EFB00281CBF0C2026 +:10E4F00010BD2078002816BF02280020012004F15A +:10E500001703E21D611CBDE810400DF045BA10B5BF +:10E510000446007800281EBF0128122010BD13F009 +:10E520003BF8042803D013F037F8052802D110F087 +:10E53000BEF828B90AF09AFA20B107F039FD08B1FF +:10E540000C2010BD2078002816BF022800200120D2 +:10E55000611C0DF08FF9002814BF0020072010BDAA +:10E5600010B50DF013FB002814BF0020302010BDA3 +:10E5700010B5044613F010F8042806D013F00CF878 +:10E58000052802D00AF072FA08B10C2010BD20460E +:10E590000DF0F6FA002010BD10B512F0FDFF0428B2 +:10E5A00006D012F0F9FF052802D00AF05FFA28B170 +:10E5B0000DF0E9FA00281CBF0C2010BD0DF045FA43 +:10E5C000002010BDFF2181704FF6FF718180FE4950 +:10E5D00049680A7882718A880281498841810121CB +:10E5E00041700020704710B5002482B0022A18D074 +:10E5F00014DC12F10C0F14D008DC12F1280F1CBF30 +:10E6000012F1140F12F1100F11D10AE012F1080FDC +:10E610001CBF12F1040F002A09D102E0D31E052B02 +:10E6200005D8012807D0022809D003280BD01224CE +:10E6300002B0204610BD104607F093FEF8E71046E2 +:10E640000FF0D4FDF4E708461446694601F0A7FC34 +:10E65000002818BF0224EBD19DF80000019880F833 +:10E6600057400024E4E710B5134601220EF029F9C3 +:10E67000002010BD10B5044612F08EFF052804BF1F +:10E680000C2010BD204612F0E9F9002010BD10B595 +:10E69000044612F081FF042806D012F07DFF052801 +:10E6A00002D00AF0E3F908B10C2010BD2146002089 +:10E6B00007F0A5F9002010BD10B5044612F078FA55 +:10E6C00050B10AF0C6F938B1207809F01EFF207861 +:10E6D00010F026F8002010BD0C2010BD10B5044627 +:10E6E00012F05AFF042806D012F056FF052802D077 +:10E6F0000AF0BCF908B10C2010BD2146012007F03A +:10E700007EF9002010BD38B504464FF6FF70ADF815 +:10E710000000A079E179884213D021791F299CBF9C +:10E7200061791F290DD80022114615F0B1FB40B9BF +:10E730000022E079114615F0ABFB10B9207A0728CA +:10E7400001D9122038BD0AF091F960B912F024FF06 +:10E7500048B900216846FFF7BDFC20B1204606F00D +:10E760007CF9002038BD0C2038BD70B50446807897 +:10E77000002582B01A2825D00EDC162844D2DFE806 +:10E7800000F0434343434321434343434343434311 +:10E7900043434343432121212A2835D00BDCA0F1F8 +:10E7A0001E000C2830D2DFE800F02F2F2F2F2F2F44 +:10E7B0002F2F2F2F2F0D3A38042825D2DFE800F015 +:10E7C000240224022088B0F5706F1DD2012669460C +:10E7D00001F0E5FB00281EBF022002B070BD9DF8CD +:10E7E0000000002801980BBF00F1F40100F5B8719A +:10E7F00000F1F50300F27113024612D192F8D00035 +:10E8000092F8732052B903E002B04FF0120070BDCD +:10E81000002818BF042801D0087868B102B00C2085 +:10E8200070BD92F80C0192F87320002AF6D10028EE +:10E8300018BF0428F0D1F1E70E70A07818709DF889 +:10E84000000048B1019890F8DD0028B1019880F8E7 +:10E85000DD50019809F029FF02B0002070BDF0B52D +:10E8600083B00C46694601F09AFB28B1204616F0A9 +:10E8700011FB03B00220F0BD0198002700F15805FC +:10E8800000F1080685F840703146204616F018FB66 +:10E8900095F840000028F5D103B0F0BD2DE9F04116 +:10E8A000044691F8550091F856300D4610F00C0FC3 +:10E8B0004FF0000608BF00232189A0880EF068F9F8 +:10E8C000696A814228BFBDE8F081401A401C4108B6 +:10E8D000A0886FF00E07401A80B2A08022896FF0E6 +:10E8E0000D0C511A8BB2238195F85410628811F0E7 +:10E8F0000C0F28D0B0F5747F38BF304606D350389F +:10E90000C11700EB91600CEBA01080B2824238BFBF +:10E910001046608095F85510E08811F00C0F1BD060 +:10E92000B3F5747F38BF324607D3A3F15001CA173D +:10E9300001EB92610CEBA1118AB2904228BF104604 +:10E94000E080BDE8F08102291ABF0CEBD00080B254 +:10E9500007EB9000DAD1D8E702291ABF0CEBD301FC +:10E960008AB207EB9301E8D1E6E7F0B587B00C4631 +:10E97000054604A901F013FB00281CBF07B0F0BD39 +:10E980009DF81000002814BF002201220599B1F85B +:10E990004A30FB2B28BFFB23B1F84CC0BCF1FB0F66 +:10E9A00028BF4FF0FB0C094FD7E90006BF68009065 +:10E9B00001960297ADF80230ADF806C06846FFF741 +:10E9C0006DFF658004E000005C000020E450020060 +:10E9D000BDF80400E080BDF808006081BDF80200C9 +:10E9E000A080BDF80600208107B00020F0BD2DE911 +:10E9F000F04788B004460088694601F0D0FA070065 +:10EA00001CBF08B0BDE8F087B4F806C02289ACF19D +:10EA10001B011220E12924BF08B0BDE8F087B2F540 +:10EA2000A47F3CBF08B0BDE8F08744F29025AA421D +:10EA300084BF08B0BDE8F08700266388A188A3F1F1 +:10EA40001B08B8F1E10F24BF08B0BDE8F087B1F5AD +:10EA5000A47F27BF8846454508B0BDE8F087112050 +:10EA6000BCF1FB0F92BFB2F5296F08B0BDE8F0878B +:10EA7000FB2B92BFB1F5296F08B0BDE8F087208865 +:10EA800006A901F08CFA002818BFFFDF35D19DF8E8 +:10EA9000180000280CBF012200220799B1F84A0093 +:10EAA000FB2828BFFB20B1F84C30FB2B28BFFB23F1 +:10EAB000DFF834AADAF800C0DAF80490DAF808A02F +:10EAC000CDF808C0CDF80C90CDF810A0ADF80A0034 +:10EAD000ADF80E3002A8FFF7E1FEBDF80C0060F3C0 +:10EAE0001F45BDF8100060F31F48BDF80A0060F331 +:10EAF0000F05BDF80E0060F30F0862881FFA88F159 +:10EB0000092091423CBF08B0BDE8F087A9B2E28875 +:10EB100091423CBF08B0BDE8F0874FEA1841A28897 +:10EB2000238901EB15411A4491423CBF08B0BDE86E +:10EB3000F0879DF800004FF001090028019840F689 +:10EB4000480808D000F5CD7580F89B91019890F8A1 +:10EB5000DE0140B307E000F5827580F80591019869 +:10EB600090F8280108B13A2718E0E08868806088AA +:10EB7000E8802089A880A088288101222846019960 +:10EB8000FFF78CFEA888404528BF40F64800A880C3 +:10EB9000288940451DD2288185F800906E7008B004 +:10EBA0003846BDE8F087E08868806088E880208982 +:10EBB000A880A0882881002228460199FFF76EFED0 +:10EBC000A888404528BF40F64800A88028894045CD +:10EBD000E1D340F64800DEE709E710B5044612F03D +:10EBE000DBFC042806D012F0D7FC052802D009F07F +:10EBF0003DFF28B10CF0C7FF00281CBF0C2010BD42 +:10EC00002078002816BF022800200120E279611C2C +:10EC10000DF03DF9002814BF0020022010BD2DE9A1 +:10EC2000F04383B006460088694601F0B8F9070052 +:10EC30001CBF03B0BDE8F083B088002818BF0128CE +:10EC400005D002281EBF122003B0BDE8F083E946BC +:10EC5000B17800290CBF07250D46F07800280CBFBD +:10EC60000724044615F0040F16BF002900210121D6 +:10EC700014F0040F16BF00280020012001424FF0BD +:10EC800009080AD001221146484601F0A0F90028DF +:10EC900038D003B04046BDE8F08381B100220121A5 +:10ECA000484601F094F90028F3D114F0040F29D05C +:10ECB00001221146484601F08AF918B343E080B1B9 +:10ECC00001220021484601F082F90028E1D115F027 +:10ECD000040F17D001221146484601F078F988B197 +:10ECE00025E015F0040F04F0040023D0C0B1012288 +:10ECF0001146484601F06BF900281CBF25F00405B9 +:10ED000024F0040400219DF800200120002A019A2B +:10ED10001CD082F8A501019A92F8F221BAB33FE023 +:10ED200000220121484601F052F90028EAD025F0DE +:10ED30000405E7E70028E5D001220021484601F05C +:10ED400046F90028DED024F00404DBE782F80F0146 +:10ED5000019A92F834213AB9019A92F80E211AB91F +:10ED6000019A92F87D200AB13A270CE0019A82F8C4 +:10ED70000E01019880F81051019880F81141019A14 +:10ED8000B088A2F81201019880F80F111AE0FFE78D +:10ED9000019A92F8A4211AB9019A92F87D200AB139 +:10EDA0003A270CE0019A82F8A401019880F8A65154 +:10EDB000019880F8A741019AB088A2F8A8010198AB +:10EDC00080F8A51103B03846BDE8F083817831F0B2 +:10EDD000070107BFC17831F00701122070471EE715 +:10EDE00002781221012A18BF002A05D0022A18BF72 +:10EDF000032A01D0084670474278002A18BF012A2A +:10EE000003D0022A18BF032AF4D1C27B12B9827838 +:10EE1000012AEFD1837833F00502EBD113F0050F0F +:10EE2000E8D030B4C278C488B0F80AC0002A18BF4D +:10EE3000012A04D1042C28BFBCF1040F02D230BC3B +:10EE400008467047052B07D0827B002AF7D0072A97 +:10EE5000F5D830BC01F0D6B80279B0F808C0838983 +:10EE6000002A18BF012AEAD1BCF1040F28BF042BE5 +:10EE7000E5D3E9E710B5044602781220012A0FD045 +:10EE8000002A18BF10BD012A26D012F085FB0528E4 +:10EE900004D011F01AFD002808BF10BD0C2010BDD1 +:10EEA0006178002918BF012906D0022918BF10BDBA +:10EEB000A188002908BF10BD6388002B1CBFA18852 +:10EEC0000029E0D003EB83035B0001EB8101B3EB8E +:10EED000012F28BF10BDD6E70FF015FB002804BF97 +:10EEE000122010BD0FF035FB00200FF0CEFB0028E4 +:10EEF00018BF10BD60780FF0BAFB002818BF10BD16 +:10EF0000A1886088BDE8104011F0A0BE427A12F0DE +:10EF1000070F0FD032F007030CD1012A18BF022AC5 +:10EF200003D0042A1CBF1120704790F83A301BB957 +:10EF3000012A01D0122070472DE9F00F4FF0000C8C +:10EF400012F0010F40F6774640F67B4337D069B1A7 +:10EF50004489B0F810C0271F43F6FD75AF423CBF8F +:10EF6000ACF10407AF4226D2644524D3C78AB0F877 +:10EF70001CC0458C048DB0F82E80B0F83490A7F1F9 +:10EF8000060A9A453CBFACF1060A9A4513D267457A +:10EF900098BFB5F5FA7F3CBFA4F10A07B7420AD281 +:10EFA0006D1C05FB0CFCBCEB840F04DAC84598BF54 +:10EFB0004FF0010C03D9BDE8F00F3020704712F07C +:10EFC000020F27D000EB4C04B4F81690A58BB4F8D0 +:10EFD0002280278DB4F82EA0A48EA9F1060B5B45E4 +:10EFE00084BFA5F1060B5B45E5D9A94598BFB8F5E7 +:10EFF000FA7F3CBFA7F10A09B145DCD208F101084C +:10F0000008FB05F5B5EB870FD5DAA24598BF0CF1E3 +:10F01000010CD0D812F0040F22D000EB4C02D78A9A +:10F02000B2F81CC0558C148DB2F82E80928EA7F1C8 +:10F0300006094B4584BFACF106094B45BBD9674572 +:10F0400098BFB5F5FA7F3CBFA4F10A03B342B2D230 +:10F050006B1C03FB0CF3B3EB840FACDA9045AAD81E +:10F0600002782AB1012A13D0BDE8F00F12207047B0 +:10F070000029817808D0002918BF012908D0022969 +:10F0800018BF032904D0EFE7002918BF0129EBD1ED +:10F090004078002818BF012803D0022818BF032891 +:10F0A000E2D1BDE8F00F0020704700212EE7017883 +:10F0B00011F0010F02D0406814F0CABA14F097BAE8 +:10F0C0002DE9F04F91B00D460246AFF61841D1E957 +:10F0D0000001CDE90E0111462846FFF717FF060093 +:10F0E0001CBF11B0BDE8F08F12F056FA04280CD006 +:10F0F00012F052FA052808D0FC4F387828B90EF0E3 +:10F1000032FCA0F57F41FF3903D011B00C20BDE8DF +:10F11000F08FF7480B90F7480C90F7480D900BAA2A +:10F12000062110A801F06EFD040002BF092011B0F5 +:10F13000BDE8F08F03210DF02EF9EC48818AA4F888 +:10F140004A10C28AA4F84C20C37C0093837C208898 +:10F1500001F045FE002818BFFFDF208806F0E0FB25 +:10F16000278804F10E094FF0000B4FF00A0A042122 +:10F17000484604F000FF48460DF0DFFA062001F093 +:10F180001BFD80461DE005A9062001F0F6FC05A840 +:10F1900001F0D1FC5FEA000B11D100BFBDF81800EF +:10F1A000B84206D00798042249460E3015F0A6FC56 +:10F1B00070B105A801F0BFFC5FEA000BEED0A8F12A +:10F1C0000108B8F1000F07DDBBF1000FDBD007E04D +:10F1D00048460DF0BBFAF2E7BBF1000F08BFFFDFB6 +:10F1E000D9F800000DF0CDFABAF1010A01D00028DB +:10F1F000BDD0C2A004F1120700680190032101A84C +:10F2000004F090FE002001A90A5C3A54401CC0B2F0 +:10F210000328F9D3A88B6080688CA080288DE080BB +:10F22000687A10F0040F18BF08277CD0DFF8BC8282 +:10F230003A461146B8F8180011F071FD0146A06277 +:10F24000204611F0AFFD17F00C0F09D001231A462C +:10F25000214600200DF0A5FC616A884288BF09267E +:10F260004FF0000984F85E9084F85F90A878002839 +:10F2700016BF0228002001206076D5F80300C4F8EC +:10F280001A00B5F80700E0830EA904F1080015F094 +:10F2900017FE4FF0010A84F800A1CDF81CA0B4F8C5 +:10F2A0004C0004F58277FB2828BFFB20B8F80A1031 +:10F2B000814238BF084694F855104FF4747C11F021 +:10F2C0000C0F1CBF0CEB80118AB26BD0B8F80C107D +:10F2D000914238BF0A46B4F84A10FB2928BFFB21E7 +:10F2E000B8F80E308B4238BF194694F854B01BF072 +:10F2F0000C0F1CBF0CEB81139BB25BD0B8F810C095 +:10F300009C4538BF63461B2918BFB3F5A47F5AD06C +:10F31000F8803A817980BB8021463846079AFFF70A +:10F32000BDFAB88800E031E040F64801884228BFC5 +:10F3300040F64800B8803889884228BF40F6480027 +:10F34000388187F800A000BF8DF800900121684641 +:10F3500004F0E8FD9DF8000000F00701C0F3C102D1 +:10F360001144C0F3401008448DF80000401D207681 +:10F3700009283CBF08302076002120460DF00BF80C +:10F3800068780FF0CBF8002E74D122E010F0010F56 +:10F3900018BF01277FF44AAF10F0020F14BF0227F5 +:10F3A000002743E7022907BF81003C31C1007031CB +:10F3B0008AB28BE7BBF1020F07BF8B003C33CB0057 +:10F3C00070339BB29AE71B2818BFB2F5A47F9FD178 +:10F3D000BAE7A9782878EA1C0FF073F8002808BF6C +:10F3E000122647D00FF0B5F8A9782878EA1C0FF05C +:10F3F00018F906003ED1687A10F0040F14BF0820F7 +:10F4000001200FF053F8060034D1214603200FF0FD +:10F4100032F906002ED1697A8DF80010697A11F060 +:10F42000010F06D06889ADF80200288AADF8040003 +:10F430000120697A11F0020F18BF401C11F0040F6F +:10F4400007D005EB40004189ADF80610008AADF801 +:10F450000800684611F0B9FB064695F83A00002806 +:10F4600018BF01200FF028F826B9204611F047FBFD +:10F47000060009D0208806F054FA2088062101F001 +:10F4800005FC002818BFFFDF304611B0BDE8F08F43 +:10F490000146002014E638B5144C207870B912F0FB +:10F4A0007BF8052805D00EF05EFAA0F57F41FF3904 +:10F4B00004D0684611F005FC10B113E00C2038BDF3 +:10F4C0000098008806F02DFA00980621008801F0C7 +:10F4D000DDFB002818BFFFDF0120207008480078FE +:10F4E000FCF788FC002038BDE45002003206002002 +:10F4F000F4050020680000202206002011223300BD +:10F500005C00002070B4B0F802C08188C388028912 +:10F5100044898089ACF1060640F67B45AE423CBF8B +:10F520008E1FAE4214D28C4598BFB3F5FA7F3EBF12 +:10F53000A2F10A0CFE4D15EB0C0509D25B1C5943D8 +:10F54000B1EB820F04DA84429EBF002070BC70478A +:10F55000302070BC70472DE9F047B0F802C0044677 +:10F560008188C388028947898689ACF1060940F6FB +:10F570007B4830200025C1453ABFA1F10609C145AD +:10F58000BDE8F0878C4598BFB3F5FA7F3DBFA2F187 +:10F590000A0CDFF89C8318EB0C08BDE8F0875B1CB5 +:10F5A0005943B1EB820FA8BFBDE8F087B74288BFCF +:10F5B000BDE8F0872088062101F056FB68B190F87D +:10F5C000D01090F8732042B9002918BF042904D044 +:10F5D000D0F8F8100A781AB106E00220BDE8F087EA +:10F5E000D0F84421127812B13A20BDE8F087052204 +:10F5F0008A71D0F8F8100D81D0F8F820A1885181D7 +:10F60000D0F8F820E1889181D0F8F8202189D181C3 +:10F61000D0F8F8100A894B899A429EBF8A79082A45 +:10F620009A4224BF1220BDE8F08722884A80D0F891 +:10F63000F800022101700020BDE8F087F0B583B02A +:10F6400005460DF0D9F8002802BF122003B0F0BD26 +:10F650000026B84F012429467C70B81C15F030FCF8 +:10F660007E706946062001F088FA002818BFFFDF87 +:10F67000684601F060FA002808BFBDF804500AD1BE +:10F68000029880F80041684601F055FA18B9BDF8B3 +:10F690000400A842F4D103B00020F0BD10B5044628 +:10F6A0000088062101F0E0FA68B190F8D01090F8D7 +:10F6B000732042B9002918BF042904D0D0F8F810EB +:10F6C0000A7812B105E0022010BDD0F8442112786A +:10F6D0000AB13A2010BD90F8962012F0010F04BF35 +:10F6E0000C2010BDD4F80220D4F806304A608B609C +:10F6F000D0F8F81062898A81D0F8F810E268C1F871 +:10F700000E202269C1F812206269C1F81620A26990 +:10F71000C1F81A20D0F8F82003211170D0F8F800B1 +:10F7200021884180002010BDF8B516460F460446DA +:10F7300009F09CF900281CBF0C20F8BD207812238A +:10F74000EF2801D91846F8BD6088ADF8000010F028 +:10F75000100F4FF000050CD010F0010F00F0020167 +:10F760001BD0B1B110F0080F08BF10F0040F1ED06D +:10F770001AE010F0080FE5D110F0200F18BF10F0BC +:10F78000030FDFD110F0010F18BF10F0020FD9D115 +:10F790000DE010F0040F0AD106E029B110F0080FB7 +:10F7A00008BF10F0040F02D010F00F0FCAD1B4F848 +:10F7B00002C01CF0080F08D1D4E90110884228BF0C +:10F7C0002029BFD3B0F1807FBCD2207B0028B9D0E4 +:10F7D0000728B7D8607B002818BF012803D002286B +:10F7E00018BF0328AED11CF0040F03D1022818BFA4 +:10F7F000032807D1A07B002818BF0128A2D11CF044 +:10F80000040F08D1607D002818BF012803D002280A +:10F8100018BF032896D1E07D1CF0100F02D00128FC +:10F8200011D08FE7012818BF03288BD11CF0100FCF +:10F8300009D1607E01281CBF0228032882D1A07E46 +:10F840000F283FF67FAFE07E002818BF01287FF425 +:10F8500079AF1CF0400F1CBF1120F8BD3D70A5759D +:10F8600056B9FF208DF800006946002006F065FDBE +:10F870006946002006F04CFD2046BDE8F84006F041 +:10F8800074BC002250E72DE9F0470446C0780F46CB +:10F89000122510B106F0DBFC50B1607804280AD0C4 +:10F8A00094F8038094F800906678B8F1FB0F12D9B1 +:10F8B0002846BDE8F08709F0D9F80028F8D006F00E +:10F8C0001EFD0028F4D106F0EEF9002804BFE07810 +:10F8D0000028EDD1E4E71FB1B8F11F0F23D9E7E706 +:10F8E00006F0E1F928B1B8F11F0F98BF032E07D039 +:10F8F000DEE7032E18BF042E02D0B8F1000FD7D0D8 +:10F9000009F0B4F8002818BF032E04D0042E1CBF41 +:10F910000C20BDE8F087484606F0BDF9002804BF7A +:10F920004220BDE8F087E07861781F2804E00000FD +:10F9300089F3FFFF3206002098BF03291CBF112066 +:10F94000BDE8F087211D06F0F8FC0020BDE8F08737 +:10F95000002198E72DE9F0470446C0788846122731 +:10F9600010B106F00AFD38B16578042D04D0E678B0 +:10F9700094F80090FB2E02D93846BDE8F087B8F124 +:10F98000000F02D01F2E21D9F6E706F08CF920B126 +:10F990001F2E98BF032D06D0EEE7032D18BF042DB0 +:10F9A00001D0002EE8D009F061F8002818BF032D1F +:10F9B00004D0042D1CBF0C20BDE8F087484606F09B +:10F9C0006AF9002804BF4220BDE8F087E07861783A +:10F9D0001F2898BF03291CBF1120BDE8F087211DF7 +:10F9E00006F096FC0020BDE8F0870021B2E72DE983 +:10F9F000F04304464078422583B0012808D8A07817 +:10FA000006F049F920B120781225012804D0A0B1D0 +:10FA100003B02846BDE8F08306F0C3FC20B1A088FF +:10FA20000028F5D08028F3D806F0C2FC68B16078D1 +:10FA30000028EDD0207801280BD007F077FE04468F +:10FA400008F08CFC002800F0038103B00C20BDE816 +:10FA5000F08306F0B5FA38B906F09CFC002802BF26 +:10FA6000122003B0BDE8F08309F000F80028ECD1C3 +:10FA700006F0D1F8A0F57F41FF39E6D106F0BFFAD4 +:10FA8000A08842F2107100FB01F6A079314606F021 +:10FA9000EFFB06F06BFCF8B10022072101A801F092 +:10FAA000B1F8040049D0FE480321846020460CF0E0 +:10FAB00079FB204607F067F8FA4DA88AA4F84A00B7 +:10FAC000E88AA4F84C0006F0EEF870B1288B01210A +:10FAD00008F0C8FDA06210E03146002008F018FDD3 +:10FAE000002818BFFFDF00F0BEB806F063FC2A8BC9 +:10FAF0000146104608F0B6FDA062014600222046ED +:10FB000007F017FE06F0CFF84FF00108C8B906F06D +:10FB100051FC10F00C0F14D001231A462146184650 +:10FB20000DF03FF8616A88420BD90721BDF8040047 +:10FB300001F0ACF8002818BFFFDF092003B0BDE8D2 +:10FB4000F083E87C0090AB7CEA8AA98A208801F0E7 +:10FB500046F9002818BFFFDF208805F0E1FE314696 +:10FB6000204608F0D5FC002818BFFFDF2146B4F876 +:10FB70004C00002204F5CD76FB2828BFFB206B89C2 +:10FB8000834238BF184691F855304FF4747413F01F +:10FB90000C0F1CBF04EB80131FFA83FC3BD000BF8B +:10FBA000B5F80C90E14528BFE146B1F84A30FB2B8F +:10FBB00028BFFB23B5F80EC09C4538BF634691F8BB +:10FBC00054C01CF00C0F1CBF04EB831C1FFA8CF7F5 +:10FBD0002AD02C8ABC4228BF3C461B2B18BFB4F548 +:10FBE000A47F2FD0F080A6F808907380B4803046B0 +:10FBF000FEF754FEB08840F64801884228BF40F620 +:10FC00004800B0803089884228BF40F648003081E3 +:10FC100086F8008027E0022B07BF83003C33C30037 +:10FC200070331FFA83FCBBE7BCF1020F07BF4FEA3A +:10FC3000830C0CF13C0C4FEAC30C0CF1700C1FFA56 +:10FC40008CF7C6E71B2818BFB9F5A47FCAD10AE014 +:10FC50004CB1208805F065FE2088072101F016F8D8 +:10FC6000002818BFFFDF002003B0BDE8F0830021AB +:10FC7000BDE610B50C46072100F0F6FF002804BFD2 +:10FC8000022010BD90F8731109B10C2010BD90F83E +:10FC90006510142912BF152990F8C0110029F4D15C +:10FCA0002168C0F874116168C0F87811A168C0F8C3 +:10FCB0007C11E168C0F88011012180F873110020E7 +:10FCC00010BD10B5072100F0CFFF002804BF0220AF +:10FCD00010BD90F8731109B10C2010BD90F865109B +:10FCE000142918BF1529F7D1022180F873110020BB +:10FCF00010BDF0B50E464BF68032122183B096420D +:10FD000017D8B6B1694600F04AF900281CBF03B005 +:10FD1000F0BD019800F15807841C25883246294619 +:10FD200038460CF035FA2088A842F6D103B00020FE +:10FD3000F0BD03B00846F0BD10B582B0044600889F +:10FD4000694600F02CF900281CBF02B010BD0198D4 +:10FD5000A37800F1580190F82C209A4202BF0C20A1 +:10FD600002B010BD7F220A728A720022CA72E17844 +:10FD700080F82D10217980F82E10A17880F82C10B1 +:10FD800002B0104610BD10B582B00C46694600F0B6 +:10FD900006F900281CBF02B010BD019890F873004E +:10FDA000002818BF0120207002B0002010BD30B51F +:10FDB00083B00D461446694600F0F1F800281CBFD8 +:10FDC00003B030BD019890F82C0001281EBF0C2014 +:10FDD00003B030BD019890F86010297090F8610070 +:10FDE000207003B0002030BD70B50D4616460721C7 +:10FDF00000F03AFF002804BF022070BD83884FF056 +:10FE0000010CC28841880CEB430C65451AD342F2C1 +:10FE1000107C02FB0CF240F6C41C01FB0CF1B2FB9F +:10FE2000F1F1491E8CB2B4F5FA7F88BF4FF4FA7431 +:10FE3000A54238BF2C46621C591CB2FBF1F251435B +:10FE4000491E8BB290F8AC11002908BF038433809F +:10FE5000002070BD10B50C46072100F005FF0028FA +:10FE600004BF022010BD80F8DF40002C1EBF90F8B8 +:10FE7000DD10002908F019FC002010BD01780029D0 +:10FE80001CBF4178002915D041881B2921BF8188DA +:10FE90001B29C18802290DD302680349406805E087 +:10FEA0005C00002032060020F40500200A65486549 +:10FEB000002070471220704710B5044610F02CFF48 +:10FEC000204608F09AFB002010BD2DE9F0411646AF +:10FED0000F46044601221146384610F020FF054621 +:10FEE0000121384608F0BEFB854228BF2846012381 +:10FEF000E100503189B2E631884206D901F196021B +:10FF0000401AB0FBF2F0401C83B233800020BDE801 +:10FF1000F08110B5044611F03FFB042806D011F023 +:10FF20003BFB052802D008F0A1FD08B10C2010BD54 +:10FF3000601C0BF082FF207800F0010006F05AF8F8 +:10FF4000207800F001000EF0FFFA002010BD10B57F +:10FF50000446072000F022FE00281CBF0C2010BD24 +:10FF6000207810F0010F11D000226078114613F0B4 +:10FF70008FFF00281CBF122010BDA0680AF0E9F90D +:10FF8000607861680AF0EEF9002010BD00200AF0E8 +:10FF9000E0F9002108460AF0E5F9002010BD70B52F +:10FFA0000C460546062100F05FFE606010B100209F +:10FFB000207070BD0721284600F056FE60600028C2 +:10FFC00004BF022070BD01202070002070BD10B55C +:10FFD00004468C46007813466168624638B10120B9 +:10FFE0000CF0DFFD6168496A884209D906E000200B +:10FFF0000CF0D7FD6168496A884201D9012010BD23 +:020000040001F9 +:10000000002010BD10B586B0044611F0C5FA0428D2 +:1000100041D011F0C1FA05283DD0A0788DF8080034 +:10002000A0788DF8000060788DF8040020788DF8B5 +:100030000300A07B8DF80500E07B002818BF01209D +:100040008DF80600A07810F0010F27D0E078012885 +:1000500008BF022003D000280CBF012000208DF82B +:100060000100E088ADF80A006089ADF80C00A078C6 +:1000700010F0040F26D02079012808BF022003D0F9 +:1000800000280CBF012000208DF802002089ADF867 +:100090000E00A08914E006B00C2010BD10F0040F73 +:1000A00010D0E078012808BF022003D000280CBF40 +:1000B000012000208DF80200E088ADF80E00608974 +:1000C000ADF8100002A810F080FD002804BF6846BB +:1000D0000EF02BFB06B010BD30B5058825F40044AA +:1000E00021448CB24FF4004194420AD2121B92B2C6 +:1000F0001B339A4201D2A94307E005F40041214392 +:1001000003E0A21A92B2A9431143018030BD084412 +:10011000083050434A31084480B2704770B51D46DC +:1001200016460B46044629463046049AFFF7EFFF71 +:100130000646B34200D2FFDF2821204614F0ABFD73 +:100140004FF6FF70A082283EB0B265776080B0F5B0 +:10015000004F00D9FFDF618805F13C00814200D2E9 +:10016000FFDF60880835401B343880B220801B28B0 +:1001700000D21B2020800020A07770BD81618861A3 +:1001800070472DE9F05F0D46C188044600F128094B +:10019000008921F4004620F4004800F062FB10B111 +:1001A0000020BDE8F09F4FF0000A4FF0010BB04572 +:1001B0000CD9617FA8EB0600401A0838854219DC8B +:1001C00009EB06000021058041801AE06088617F0C +:1001D000801B471A083F0DD41B2F00DAFFDFBD42FA +:1001E00001DC294600E0B9B2681A0204120C04D0FE +:1001F000424502DD84F817A0D2E709EB0600018032 +:10020000428084F817B0CCE770B5044600F12802AC +:10021000C088E37D20F400402BB11044028843885D +:1002200013448B4201D2002070BD00258A4202D3C4 +:100230000180458008E0891A0904090C418003D037 +:10024000A01D00F01EFB08E0637F008808331844FF +:1002500081B26288A01DFFF73FFFE575012070BDE8 +:1002600070B5034600F12804C588808820F4004654 +:100270002644A84202D10020188270BD9889358892 +:10028000A84206D3401B75882D1A2044ADB2C01E6B +:1002900005E02C1AA5B25C7F20443044401D0C8838 +:1002A000AC4200D90D809C8924B1002414700988C7 +:1002B000198270BD0124F9E770B5044600F12801E8 +:1002C000808820F400404518208A002825D0A18984 +:1002D000084480B2A08129886A881144814200D2F2 +:1002E000FFDF2888698800260844A189884212D146 +:1002F000A069807F2871698819B1201D00F0C1FABA +:1003000008E0637F28880833184481B26288201D82 +:10031000FFF7E2FEA6812682012070BD2DE9F041A3 +:10032000418987880026044600F12805B94218D083 +:1003300004F10A0821F400402844418819B14046DC +:1003400000F09FFA08E0637F00880833184481B208 +:1003500062884046FFF7C0FE761C6189B6B2B9429A +:10036000E8D13046BDE8F0812DE9F04104460B4666 +:1003700027892830A68827F40041B4F80A80014470 +:100380000D46B74201D10020ECE70AB1481D1060CC +:1003900023B1627F691D184614F0DCFB2E88698842 +:1003A00004F1080021B18A1996B200F06AFA06E059 +:1003B000637F62880833991989B2FFF78DFE47453C +:1003C00001D1208960813046CCE78188C088814294 +:1003D00001D1012070470020704701898088814247 +:1003E00001D1012070470020704770B58588C3880F +:1003F00000F1280425F4004223F4004114449D42F6 +:100400001AD08389058A5E1925886388EC18A6426C +:1004100014D313B18B4211D30EE0437F08325C1921 +:100420002244408892B2801A80B22333984201D28B +:1004300011B103E08A4201D1002070BD012070BDDE +:100440002DE9F0478846C1880446008921F400461A +:1004500004F1280720F4004507EB060900F001FA33 +:10046000002178BBB54204D9627FA81B801A002501 +:1004700003E06088627F801B801A083823D4E289F9 +:1004800062B1B9F80020B9F802303BB1E81A21771F +:10049000404518DBE0893844801A09E0801A21774A +:1004A00040450ADB607FE189083030443944084424 +:1004B000C01EA4F81280BDE8F087454503DB01208B +:1004C0002077E7E7FFE761820020F4E72DE9F74FA7 +:1004D000044600F12805C088884620F4004A608A56 +:1004E00005EB0A0608B1404502D20020BDE8FE8FA8 +:1004F000E08978B13788B6F8029007EB09018842A5 +:1005000000D0FFDF207F4FF0000B50EA090106D03A +:1005100088B33BE00027A07FB9463071F2E7E1895C +:1005200059B1607F2944083050440844B4F81F1082 +:1005300020F8031D94F821108170E28907EB080070 +:1005400002EB0801E1813080A6F802B002985F4614 +:1005500050B1637F30880833184481B26288A01D8F +:10056000FFF7BAFDE78121E0607FE1890830504460 +:10057000294408442DE0FFE7E089B4F81F1028441F +:10058000C01B20F8031D94F82110817009EB0800AE +:10059000E28981B202EB0800E08137807180029825 +:1005A000A0B1A01D00F06DF9A4F80EB0A07F401C12 +:1005B000A077A07D08B1E088A08284F816B000BFC3 +:1005C000A4F812B084F817B001208FE7E08928441E +:1005D000C01B30F8031DA4F81F10807884F8210098 +:1005E000EEE710B5818800F1280321F4004423448C +:1005F000848AC288A14212D0914210D0818971B9F7 +:10060000826972B11046FFF7E8FE50B910892832AE +:1006100020F40040104419790079884201D100206B +:1006200010BD184610BD00F12803407F0830084473 +:10063000C01E1060088808B9DB1E1360088849884E +:10064000084480B270472DE9F04100F12806407F50 +:100650001C4608309046431808884D88069ADB1ED1 +:10066000A0B1C01C80B2904214D9801AA04200DB15 +:10067000204687B298183A46414614F03FFA0028BF +:1006800016D1E01B84B2B844002005E0ED1CADB2E9 +:10069000F61EE8E7101A80B20119A94206D83044C4 +:1006A00022464146BDE8F04114F028BA4FF0FF3031 +:1006B00058E62DE9F04100F12804407F1E4608303D +:1006C00090464318002508884F88069ADB1E90B193 +:1006D000C01C80B2904212D9801AB04200DB304672 +:1006E00085B299182A46404614F034FA701B86B237 +:1006F000A844002005E0FF1CBFB2E41EEAE7101A80 +:1007000080B28119B94206D821183246404614F009 +:1007100021FAA81985B2284624E62DE9F04100F116 +:100720002804407F1E46083090464318002508885C +:100730004F88069ADB1E90B1C01C80B2904212D93D +:10074000801AB04200DB304685B298182A464146EE +:1007500014F000FA701B86B2A844002005E0FF1CCC +:10076000BFB2E41EEAE7101A80B28119B94206D876 +:1007700020443246414614F0EDF9A81985B22846C6 +:10078000F0E5401D704710B5044600F12801C2880D +:10079000808820F400431944904206D0A28922B9EF +:1007A000228A12B9A28A904201D1002010BD088885 +:1007B000498831B1201D00F064F80020208201201A +:1007C00010BD637F62880833184481B2201DFFF793 +:1007D00083FCF2E70021C18101774182C1758175F7 +:1007E000704703881380C28942B1C28822F4004353 +:1007F00000F128021A440A60C0897047002070473F +:1008000010B50446808AA0F57F41FF3900D0FFDF94 +:10081000E088A082E08900B10120A07510BD4FF6EC +:10082000FF71818200218175704710B50446808A6E +:10083000A0F57F41FF3900D1FFDFA07D28B9A08856 +:10084000A18A884201D1002010BD012010BD8188FD +:10085000828A914201D1807D08B100207047012039 +:10086000704720F4004221F400439A4207D100F47B +:10087000004001F40041884201D00120704700206F +:10088000704730B5044600880D4620F40040A84269 +:1008900000D2FFDF21884FF40040884328432080A6 +:1008A00030BD70B50C00054609D0082C00D2FFDF22 +:1008B0001DB1A1B2286800F044F8201D70BD0DB133 +:1008C00000202860002070BD0021026803E09388AA +:1008D0001268194489B2002AF9D100F032B870B513 +:1008E00000260D460446082900D2FFDF206808B91B +:1008F0001EE0044620688188A94202D001680029D0 +:10090000F7D181880646A94201D100680DE005F1C2 +:10091000080293B20022994209D32844491B02607D +:1009200081802168096821600160206000E0002664 +:10093000304670BD00230B608A8002680A60016047 +:10094000704700234360021D018102607047F0B5CB +:100950000F460188408815460C181E46AC4200D34D +:10096000641B3044A84200D9FFDFA019A84200D977 +:10097000FFDF3819F0BD2DE9F041884606460188B1 +:10098000408815460C181F46AC4200D3641B3844FF +:10099000A84200D9FFDFE019A84200D9FFDF708824 +:1009A0003844708008EB0400BDE8F0812DE9F04187 +:1009B000054600881E461746841B8846BC4200D365 +:1009C0003C442C8068883044B84200D9FFDFA0192D +:1009D000B84200D9FFDF68883044688008EB040023 +:1009E000E2E72DE9F04106881D460446701980B201 +:1009F000174688462080B84201D3C01B20806088FB +:100A0000A84200D2FFDF7019B84200D9FFDF60882A +:100A1000401B608008EB0600C6E730B50D46018834 +:100A2000CC18944200D3A41A4088984200D8FFDF23 +:100A3000281930BD2DE9F041C84D04469046A878EC +:100A40000E46A04200D8FFDF05EB8607B86A50F8D3 +:100A5000240000B1FFDFB868002816D0304600F04F +:100A600044F90146B868FFF73AFF05000CD0B86AB0 +:100A7000082E40F8245000D3FFDFB94842462946EB +:100A800050F82630204698472846BDE8F0812DE9E9 +:100A9000F8431E468C1991460F460546FF2C00D997 +:100AA000FFDFB14500D9FFDFE4B200954DB3002070 +:100AB0008046E81C20F00300A84200D0FFDF494632 +:100AC000DFF89892684689F8001089F8017089F873 +:100AD000024089F8034089F8044089F8054089F804 +:100AE000066089F80770414600F008F90021424687 +:100AF0000F464B460098C01C20F00300009012B136 +:100B00000EE00120D4E703EB8106B062002005E08F +:100B1000D6F828C04CF82070401CC0B2A042F7D3D1 +:100B20000098491C00EB8400C9B200900829E1D369 +:100B3000401BBDE8F88310B5044603F067FD08B11B +:100B4000102010BD2078854A618802EB80009278E1 +:100B50000EE0836A53F8213043B14A1C6280A180C1 +:100B6000806A50F82100A060002010BD491C89B2A5 +:100B70008A42EED86180052010BD70B505460C464E +:100B8000084603F043FD08B1102070BD082D01D3C5 +:100B9000072070BD25700020608070BD0EB56946CD +:100BA000FFF7EBFF00B1FFDF6846FFF7C4FF08B1B6 +:100BB00000200EBD01200EBD10B50446082800D34C +:100BC000FFDF6648005D10BD3EB50546002469465E +:100BD000FFF7D3FF18B1FFDF01E0641CE4B2684601 +:100BE000FFF7A9FF0028F8D02846FFF7E5FF001B14 +:100BF000C0B23EBD59498978814201D9C0B270471F +:100C0000FF2070472DE9F041544B062903D00729F6 +:100C10001CD19D7900E0002500244FF6FF7603EB00 +:100C2000810713F801C00AE06319D7F828E09BB2E6 +:100C30005EF823E0BEF1000F04D0641CA4B2A4450A +:100C4000F2D8334603801846B34201D100201CE796 +:100C5000BDE8F041EEE6A0F57F43FF3B01D0082957 +:100C600001D300207047E5E6A0F57F42FF3A0BD0A4 +:100C7000082909D2394A9378834205D902EB8101C8 +:100C8000896A51F820007047002070472DE9F04133 +:100C900004460D46A4F57F4143F20200FF3902D01D +:100CA000082D01D30720F0E62C494FF000088A7880 +:100CB000A242F8D901EB8506B26A52F82470002FDF +:100CC000F1D027483946203050F82520204690475B +:100CD000B16A284641F8248000F007F802463946F8 +:100CE000B068FFF727FE0020CFE61D49403131F8FC +:100CF00010004FF6FC71C01C084070472DE9F84306 +:100D0000164E8846054600242868C01C20F00300C3 +:100D100028602046FFF7E9FF315D4843B8F1000F36 +:100D200001D0002200E02A680146009232B100277B +:100D30004FEA0D00FFF7B5FD1FB106E001270020C7 +:100D4000F8E706EB8401009A8A602968641C08446D +:100D5000E4B22860082CD7D3EBE600005006002050 +:100D6000F050020070B50E461D46114600F0D4F852 +:100D700004462946304600F0D8F82044001D70BDD6 +:100D80002DE9F04190460D4604004FF0000610D0CA +:100D90000027E01C20F00300A04200D0FFDFDDB1FF +:100DA00041460020FFF77DFD0C3000EB850617B1B2 +:100DB00012E00127EDE7614F04F10C00A9003C604F +:100DC0002572606000EB85002060606813F063FFAF +:100DD00041463868FFF765FD3046BDE8F0812DE9F2 +:100DE000FF4F564C804681B020689A46934600B922 +:100DF000FFDF2068027A424503D9416851F8280094 +:100E000020B143F2020005B0BDE8F08F51460298D0 +:100E100000F082F886B258460E9900F086F885B246 +:100E20007019001D87B22068A14639460068FFF797 +:100E300056FD04001FD0678025802946201D0E9D89 +:100E400007465A4601230095FFF768F92088314686 +:100E500038440123029ACDF800A0FFF75FF92088FB +:100E6000C1193846FFF78AF9D9F800004168002017 +:100E700041F82840C7E70420C5E770B52F4C054668 +:100E8000206800B9FFDF2068017AA9420ED94268C4 +:100E900052F8251051B1002342F825304A880068E5 +:100EA000FFF748FD216800200A7A08E043F20200BB +:100EB00070BD4B6853F8203033B9401CC0B2824239 +:100EC000F7D80868FFF700FD002070BD70B51B4E15 +:100ED00005460024306800B9FFDF3068017AA94276 +:100EE00004D9406850F8250000B1041D204670BDAB +:100EF00070B5124E05460024306800B9FFDF306837 +:100F0000017AA94206D9406850F8251011B131F88C +:100F1000040B4418204670BD10B50A460121FFF7A6 +:100F2000F6F8C01C20F0030010BD10B50A460121E0 +:100F3000FFF7EDF8C01C20F0030010BD700000208A +:100F400070B50446C2F11005281913F003FE15F020 +:100F5000FF0108D0491EC9B2802060542046BDE878 +:100F6000704013F076BE70BD30B505E05B1EDBB29D +:100F7000CC5CD55C6C40C454002BF7D130BD10B5AF +:100F8000002409E00B78521E44EA430300F8013BB9 +:100F900011F8013BD2B2DC09002AF3D110BD2DE9D2 +:100FA000F04389B01E46DDE9107990460D000446F5 +:100FB00022D002460846F949FDF755FB102221468A +:100FC0003846FFF7DCFFE07B000606D5F34A3946DA +:100FD000102310320846FFF7C7FF10223946484653 +:100FE000FFF7CDFFF87B000606D5EC4A49461023F3 +:100FF00010320846FFF7B8FF1021204613F029FEF3 +:101000000DE0103EB6B208EB0601102322466846FA +:10101000FFF7AAFF224628466946FDF724FB102E5B +:10102000EFD818D0F2B241466846FFF789FF102387 +:101030004A46694604A8FFF797FF1023224604A9F1 +:101040006846FFF791FF224628466946FDF70BFBED +:1010500009B0BDE8F08310233A464146EAE770B58F +:101060009CB01E460546134620980C468DF8080095 +:10107000202219460DF1090013F06CFD20222146B3 +:101080000DF1290013F066FD17A913A8CDE90001A1 +:10109000412302AA31462846FFF781FF1CB070BDEC +:1010A0002DE9FF4F9FB014AEDDE92D5410AFBB49C1 +:1010B000CDE90076202320311AA8FFF770FF4FF00A +:1010C00000088DF808804FF001098DF8099054F858 +:1010D000010FCDF80A00A088ADF80E0014F8010C3D +:1010E0001022C0F340008DF8100055F8010FCDF824 +:1010F0001100A888ADF8150015F8010C2C99C0F363 +:1011000040008DF8170006A8824613F023FD0AA8B8 +:1011100083461022229913F01DFDA048352308387C +:1011200002AA40688DF83C80CDE900760E901AA99D +:101130001F98FFF734FF8DF808808DF8099020681C +:10114000CDF80A00A088ADF80E0014F8010C1022AA +:10115000C0F340008DF810002868CDF81100A88871 +:10116000ADF8150015F8010C2C99C0F340008DF86E +:101170001700504613F0EEFC58461022229913F047 +:10118000E9FC86483523083802AA40688DF83C906F +:10119000CDE900760E901AA92098FFF700FF23B042 +:1011A000BDE8F08FF0B59BB00C460546DDE9221096 +:1011B0001E461746DDE92032D0F801C0CDF808C040 +:1011C000B0F805C0ADF80CC00078C0F340008DF851 +:1011D0000E00D1F80100CDF80F00B1F80500ADF810 +:1011E000130008781946C0F340008DF815001088E8 +:1011F000ADF8160090788DF818000DF11900102246 +:1012000013F0A8FC0DF129001022314613F0A2FCC6 +:101210000DF139001022394613F09CFC17A913A8D0 +:10122000CDE90001412302AA21462846FFF7B7FE77 +:101230001BB0F0BDF0B5A3B017460D4604461E46E0 +:10124000102202A8289913F085FC06A8202239460E +:1012500013F080FC0EA82022294613F07BFC1EA967 +:101260001AA8CDE90001502302AA314616A8FFF7BB +:1012700096FE1698206023B0F0BDF0B589B0044604 +:10128000DDE90E070D463978109EC1F340018DF857 +:10129000001031789446C1F340018DF801101968AF +:1012A000CDF802109988ADF8061099798DF80810DC +:1012B0000168CDF809108188ADF80D1080798DF89E +:1012C0000F0010236A46614604A8FFF74DFE224630 +:1012D000284604A9FDF7C7F9D6F801000090B6F832 +:1012E0000500ADF80400D7F80100CDF80600B7F806 +:1012F0000500ADF80A000020039010236A4621463D +:1013000004A8FFF731FE2246284604A9FDF7ABF9F1 +:1013100009B0F0BD1FB51C6800945B6801931368A9 +:10132000029352680392024608466946FDF79BF90C +:101330001FBD10B588B00446106804905068059031 +:1013400000200690079008466A4604A9FDF78BF92D +:10135000BDF80000208008B010BD1FB51288ADF8A0 +:1013600000201A88ADF80220002201920292039216 +:10137000024608466946FDF776F91FBD7FB5074B63 +:1013800014460546083B9A1C6846FFF7E6FF2246CE +:1013900069462846FFF7CDFF7FBD00004851020097 +:1013A00070B5044600780E46012813D0052802D0F7 +:1013B000092813D10EE0A06861690578042003F0C4 +:1013C000B3F8052D0AD0782300220420616903F0C8 +:1013D00001F803E00420616903F0A6F831462046D5 +:1013E000BDE8704001F086B810B500F12D02C37958 +:1013F0009478411D64F003042340C371DB070DD0D2 +:101400004B79547923404B710B79127913400B714E +:101410008278C9788A4200D9817010BD00224A7151 +:101420000A71F5E74178012900D00C21017070475D +:101430002DE9F04F93B04FF0000B0C690D468DF87D +:1014400020B0097801260C2017464FF00D084FF008 +:10145000110A4FF008091B2975D2DFE811F01B00B3 +:10146000C30206031E035D037003A203B703F80360 +:10147000190461049304A004EC042A053405520500 +:101480005D05EE053106340663067F06F9061D0785 +:10149000E606EB0614B120781D282AD0D5F808807E +:1014A0005FEA08004FD001208DF82000686A022210 +:1014B0000D908DF824200A208DF82500A8690A9047 +:1014C000A8880028EED098F8001091B10F2910D20A +:1014D0007ED2DFE801F07D1349DEFEFDFCFBFAF968 +:1014E00038089CF8F70002282DD124B120780C2868 +:1014F00001D00026EFE38DF82020CBE10420696ABB +:1015000003F012F8A8880728EED1204600F0EDFF7E +:10151000022809D0204600F0E8FF032807D920461A +:1015200000F0E3FF072802D20120207004E0002C25 +:10153000B8D020780128D7D198F80400C11F0A2913 +:1015400002D30A2061E0C4E1A070D8F80010E16283 +:10155000B8F80410218698F8060084F832000120BB +:1015600028700320207044E00728BDD1002C99D0BA +:1015700020780D28B8D198F8031094F82F20C1F3E3 +:10158000C000C2F3C002104201D0062000E00720D4 +:10159000890707D198F805100142D2D198F80610B2 +:1015A0000142CED194F8312098F8051020EA0202C9 +:1015B0001142C6D194F8322098F8061090430142A7 +:1015C000BFD198F80400C11F0A29BAD2617D00E09A +:1015D00006E281427ED8D8F800106160B8F80410A5 +:1015E000218198F80600A072012028700E2020703A +:1015F00003208DF82000686A0D9004F12D000990F9 +:10160000601D0A900F300B9022E12875FDE3412800 +:1016100091D1204600F069FF042802D1E078C0078C +:1016200004D1204600F061FF0F2884D1A88CD5F8A2 +:101630000C8080B24FF0400BE669FFF747FC324662 +:1016400041465B464E46CDF80090FFF732F80B203E +:101650008DF82000686A0D90E0690990002108A8C3 +:10166000FFF79EFE2078042806D0A07D58B10128FF +:1016700009D003280AD049E30520207003202870F0 +:101680008DF82060CDE184F800A032E712202070B0 +:10169000E9E11128BCD1204600F027FF042802D13F +:1016A000E078C00719D0204600F01FFF062805D1BA +:1016B000E078C00711D1A07D02280ED0204600F0AE +:1016C00014FF08E0CAE081E06FE14EE121E101E1B1 +:1016D000E7E017E0ADE111289AD1102208F10101ED +:1016E00004F13C0013F036FA607801287ED0122015 +:1016F0002070E078C00760D0A07D0028C8D0012805 +:10170000C6D05AE0112890D1204600F0EEFE0828FD +:1017100004D0204600F0E9FE132886D104F16C00C5 +:10172000102208F10101064613F014FA2078082867 +:101730000DD014202070E178C8070DD0A07D0228BC +:101740000AD06278022A04D00328A1D035E009200B +:10175000F0E708B1012837D1C80713D0A07D0228CF +:101760001DD000200090D4E9062133460EA8FFF7D3 +:1017700076FC10220EA904F13C0013F0BFF9C8B1A9 +:10178000042042E7D4E90912201D8DE8070004F186 +:101790002C0332460EA8616BFFF76FFDE9E7606B23 +:1017A000C1F34401491E0068C84000F0010040F048 +:1017B0008000D7E72078092806D185F800908DF8B9 +:1017C000209033E32870ECE30920FBE711289AD13D +:1017D000204600F08AFE0A2802D1E078C00704D132 +:1017E000204600F082FE15288DD100E08DE104F145 +:1017F0003C00102208F10101064613F0ABF92078F5 +:101800000A2816D016202070D4E90932606B611DB9 +:101810008DE80F0004F15C0304F16C0247310EA85F +:10182000FFF7C0FC10220EA9304613F067F918B17B +:10183000F5E20B20207071E22046FFF7D5FDA0787D +:10184000216A0A18C0F11001104613F002FA23E3CE +:10185000394608A8FFF7A4FD06463BE20228B6D1A8 +:10186000204600F042FE042804D3204600F03DFE4E +:10187000082809D3204600F038FE0E2829D3204638 +:1018800000F033FE122824D2A07D02289FD10E2022 +:101890008DF82000686A0D9098F801008DF82400FA +:1018A000F0E3022893D1204600F01FFE002810D05C +:1018B000204600F01AFE0128F9D0204600F015FE5F +:1018C0000C28F4D004208DF8240098F801008DF83D +:1018D00025005EE21128FCD1002CFAD020781728D0 +:1018E000F7D16178606A022911D0002101EB410132 +:1018F000182606EBC1011022405808F1010113F02F +:1019000029F90420696A00F0E3FD2670F1E5012160 +:10191000ECE70B28DDD1002CDBD020781828D8D1BB +:101920006078616A02281CD05FF0000000EB400282 +:10193000102000EBC2000958B8F801000880607858 +:10194000616A02280FD0002000EB4002142000EB57 +:10195000C2000958404650F8032F0A6040684860AA +:1019600039E00120E2E70120EEE71128B1D1002C97 +:10197000AFD020781928ACD16178606A022912D0E2 +:101980005FF0000101EB41011C2202EBC1011022BA +:10199000405808F1010113F0DDF80420696A00F0F5 +:1019A00097FD1A20B6E00121ECE7082891D1002C20 +:1019B0008FD020781A288CD1606A98F8012001789D +:1019C00062F347010170616AD8F8022041F8012FE3 +:1019D000B8F8060088800420696A00F079FD8EE27C +:1019E000072012E63878012894D1182204F1140057 +:1019F000796813F0F4F8E079C10894F82F0001EA4F +:101A0000D001E07861F30000E070217D002974D1FD +:101A10002178032909D0C00725D0032028708DF82C +:101A20002090686A0D90412004E3607DA17888428F +:101A300001D90620E9E502262671E179204621F048 +:101A4000E001E171617A21F0F0016172A17A21F087 +:101A5000F001A172FFF7C8FC2E708DF82090686A23 +:101A60000D900720E6E20420ACE6387805289DD1E9 +:101A70008DF82000686A0D90B8680A900720ADF8CC +:101A800024000A988DF830B0616801602189818056 +:101A9000A17A817104202070F4E23978052985D17A +:101AA0008DF82010696A0D91391D09AE0EC986E8BE +:101AB0000E004121ADF824108DF830B01070A88CC4 +:101AC000D7F80C8080B24026A769FFF711FA41468B +:101AD0003A463346C846CDF80090FEF71EFE002178 +:101AE00008A8FFF75DFCE07820F03E00801CE07065 +:101AF0002078052802D00F200CE049E1A07D20B11C +:101B0000012802D0032802D002E10720BFE584F8B3 +:101B10000080EEE42070ECE4102104F15C0002F09F +:101B20002AFA606BB0BBA07D18B1012801D0052056 +:101B3000FDE006202870F7486063A063BEE23878B5 +:101B4000022894D1387908B12875B3E3A07D022822 +:101B500002D0032805D022E0B8680028F5D06063E1 +:101B60001CE06078012806D0A07994F82E10012896 +:101B700005D0E84806E0A17994F82E00F7E7B868A8 +:101B80000028E2D06063E078C00701D0012902D0CC +:101B9000E04803E003E0F8680028D6D0A063062000 +:101BA00010E68DF82090696A0D91E1784846C907E2 +:101BB00009D06178022903D1A17D29B1012903D07F +:101BC000A17D032900D00720287031E1387805284D +:101BD000BBD1207807281ED084F800A005208DF8FE +:101BE0002000686A0D90B8680A90ADF824A08DF8BE +:101BF00030B003210170E178CA070FD0A27D022A1C +:101C00001AD000210091D4E9061204F15C03401CB3 +:101C1000FFF725FA67E384F80090DFE7D4E90923AA +:101C2000211D8DE80E0004F12C0304F15C02401C20 +:101C3000616BFFF722FB56E3626BC1F34401491E5F +:101C40001268CA4002F0010141F08001DAE73878F9 +:101C50000528BDD18DF82000686A0D90B8680A90FB +:101C6000ADF824A08DF830B0042100F8011B10223B +:101C700004F15C0112F06EFF002108A8FFF790FB51 +:101C80002078092801D0132044E70A2020709BE522 +:101C9000E078C10742D0A17D012902D0022927D0D6 +:101CA00038E0617808A8012916D004F16C01009190 +:101CB000D4E9061204F15C03001DFFF7BBFA0A2009 +:101CC000287003268DF82080686A0D90002108A8EE +:101CD000FFF766FBDDE2C3E204F15C010091D4E9A9 +:101CE000062104F16C03001DFFF7A4FA0026E9E7C2 +:101CF000C0F3440114290DD24FF0006101EBB01084 +:101D00004FEAB060E0706078012801D01020BEE496 +:101D10000620FFE6607801283FF4B7AC0A2051E5C1 +:101D2000E178C90708D0A17D012903D10B202870D3 +:101D300004202FE028702DE00E2028706078616B61 +:101D4000012817D004F15C0304F16C020EA8FFF720 +:101D5000E1FA2046FFF748FBA0780EAEC0F1100173 +:101D6000304412F076FF06208DF82000686A09964C +:101D70000D909AE004F16C0304F15C020EA8FFF7E9 +:101D8000C9FAE9E73978022903D139790029D1D094 +:101D900029758FE28DF82000686A0D9058E5387833 +:101DA0000728F6D1D4E909216078012808D004F188 +:101DB0006C00CDE90002029105D104F16C0304E04E +:101DC00004F15C00F5E704F15C0304F14C007A686F +:101DD0000646216AFFF764F96078012821D1A078CE +:101DE000216A0A18C0F11001104612F032FFD4E93E +:101DF0000923606B04F12D018DE80F0004F15C03F1 +:101E000004F16C0231460EA800E055E2FFF7CAF972 +:101E100010220EA904F13C0012F070FE08B10B2054 +:101E2000AFE485F8008000BF8DF82090686A0D90BF +:101E30008DF824A00CE538780528AAD18DF820006B +:101E4000686A0D90B8680A90ADF824A08DF830B09B +:101E500080F80080617801291AD0D4E9093204F1B0 +:101E60002D01A66B03920096CDE9011304F16C03DA +:101E700004F15C0204F14C01401CFFF793F90021CE +:101E800008A8FFF78DFA6078012805D0152041E6F3 +:101E9000D4E90923611DE4E70E20287006208DF89F +:101EA0002000686ACDF824B00D90A0788DF8280045 +:101EB000CEE438780328C0D1E079C00770D00F2075 +:101EC0002870072066E7387804286BD11422391D62 +:101ED00004F1140012F083FE616A208CA1F809005D +:101EE000616AA078C871E179626A01F00301117238 +:101EF000616A627A0A73616AA07A81F82400162006 +:101F000060E485F800A08DF82090696A50460D9134 +:101F100090E00000485102003878052842D1B868A6 +:101F2000A8616178606A022901D0012100E00021E6 +:101F300001EB4101142606EBC1014058082102F0D3 +:101F40001AF86178606A022901D0012100E00021BD +:101F500001EB410106EBC101425802A8E169FFF71C +:101F60000DFA6078626A022801D0012000E00020AA +:101F700000EB4001102000EBC1000223105802A921 +:101F80000932FEF7F1FF626AFD4B0EA80932A16922 +:101F9000FFF7E3F96178606A022904D0012103E0C8 +:101FA00042E18BE0BDE0002101EB4101182606EB88 +:101FB000C101A27840580EA912F0CCFD6178606A88 +:101FC000022901D0012100E0002101EB410106EBD3 +:101FD000C1014058A1780844C1F1100112F039FE46 +:101FE00005208DF82000686A0D90A8690A90ADF868 +:101FF00024A08DF830B0062101706278616A022A4F +:1020000001D0012200E0002202EB420206EBC202F4 +:10201000401C8958102212F09DFD002108A8FFF7EE +:10202000BFF91220C5F818B028708DF82090686AA2 +:102030000D900B208DF824000AE43878052870D123 +:102040008DF82000686A0D90B8680A900B20ADF8F2 +:1020500024000A98072101706178626A022901D080 +:10206000012100E0002101EB4103102101EBC3013C +:1020700051580988A0F801106178626A022902D0DB +:10208000012101E02FE1002101EB4103142101EBCB +:10209000C30151580A6840F8032F4968416059E06C +:1020A0001920287001208DF8300077E6162028705E +:1020B0008DF830B0002108A8FFF772F9032617E168 +:1020C00014202870B0E6387805282AD18DF8200031 +:1020D000686A0D90B8680A90ADF824A08DF830B009 +:1020E00080F800906278616A4E46022A01D001228F +:1020F00000E0002202EB42021C2303EBC202401C60 +:102100008958102212F026FD002108A8FFF748F98F +:10211000152028708DF82060686A0D908DF8246075 +:102120003CE680E0387805287DD18DF82000686A8B +:102130000D90B8680A90ADF824900921017061698A +:10214000097849084170616951F8012FC0F80220EF +:102150008988C18020781C28A8D1A1E7E078C00731 +:1021600002D04FF0060C01E04FF0070C6078022817 +:102170000AD04FF0000000BF00EB040101F109019B +:1021800005D04FF0010004E04FF00100F4E74FF0FC +:1021900000000B78204413EA0C030B7010F8092F91 +:1021A00002EA0C02027004D14FF01B0C84F800C04C +:1021B000D2B394F801C0BCF1010F00D09BB990F8E4 +:1021C00000C0E0465FEACC7C04D028F0010606702F +:1021D000102606E05FEA887C05D528F00206067026 +:1021E00013262E70032694F801C0BCF1020F00D014 +:1021F00092B991F800C05FEACC7804D02CF00106C7 +:102200000E70172106E05FEA8C7805D52CF00206E7 +:102210000E701921217000260078D0BBCAB3C3BB51 +:102220001C20207035E012E002E03878062841D109 +:102230001A2019E4207801283CD00C283AD02046F6 +:10224000FFF7F0F809208DF82000686A0D9031E062 +:102250003878052805D00620387003261820287005 +:1022600046E005218DF82010686A0D90B8680A9044 +:102270000220ADF8240001208DF830000A9801708A +:10228000297D4170394608A8FFF78AF806461820CC +:102290002870012E0ED02BE001208DF82000686AF6 +:1022A0000D9003208DF82400287D8DF8250085F8F9 +:1022B00014B012E0287D80B11D20207017202870F6 +:1022C0008DF82090686A0D9002208DF82400394620 +:1022D00008A8FFF765F806460AE00CB1FE2020705A +:1022E0009DF8200020B1002108A8FFF759F810E45C +:1022F00013B03046BDE8F08F2DE9F04387B00C46AF +:102300004E6900218DF8041001202578034602272C +:102310004FF007094FF0050C85B1012D53D0022D68 +:1023200039D1FE2030708DF80030606A05900320AE +:102330008DF80400207E8DF8050063E021790129E5 +:1023400025D002292DD0032928D0042923D1B17DFD +:10235000022920D131780D1F042D04D30A3D032D0D +:1023600001D31D2917D12189022914D38DF80470B6 +:10237000237020899DF8041088421BD2082001E0B8 +:10238000405102008DF80000606A059057E07078B7 +:102390000128EBD0052007B0BDE8F0831D20307088 +:1023A000E4E771780229F5D131780C29F3D18DF861 +:1023B0000490DDE7083402F804CB94E80B0082E8CF +:1023C0000B000320E7E71578052DE4D18DF800C058 +:1023D000656A0595956802958DF8101094F804804B +:1023E000B8F1010F13D0B8F1020F2DD0B8F1030FDF +:1023F0001CD0B8F1040FCED1ADF804700E202870B7 +:10240000207E687000216846FEF7CAFF0CE0ADF838 +:1024100004700B202870207E002100F01F006870DF +:102420006846FEF7BDFF37700020B4E7ADF80470D2 +:102430008DF8103085F800C0207E68702770114636 +:102440006846FEF7ADFFA6E7ADF804902B70207F3D +:102450006870607F00F00100A870A07F00F01F008E +:10246000E870E27F2A71C0071CD094F8200000F0C9 +:102470000700687194F8210000F00700A87100219E +:102480006846FEF78DFF2868F062A8883086A87934 +:1024900086F83200A069407870752879B0700D20F8 +:1024A0003070C1E7A9716971E9E700B587B0042808 +:1024B0000CD101208DF800008DF80400002005915A +:1024C0008DF8050001466846FEF76AFF07B000BDBB +:1024D00070B50C46054602F027F821462846BDE8AF +:1024E00070407823002201F075BF08B10078704772 +:1024F0000C20704770B50C0005784FF000010CD02F +:1025000021702146F2F7A9FE69482178405D884292 +:1025100001D1032070BD022070BDF2F79EFE0020A5 +:1025200070BD0279012A05D000220A704B78012B78 +:1025300002D003E0042070470A758A610279930093 +:10254000521C0271C15003207047F0B587B00F468E +:1025500005460124287905EB800050F8046C70785A +:10256000411E02290AD252493A46083901EB80003D +:10257000314650F8043C2846984704460CB1012CDB +:1025800011D12879401E10F0FF00287101D00324DA +:10259000E0E70A208DF80000706A0590002101969E +:1025A0006846FFF7A7FF032CD4D007B02046F0BD44 +:1025B00070B515460A46044629461046FFF7C5FF82 +:1025C000064674B12078FE280BD1207C30B1002063 +:1025D0002870294604F10C00FFF7B7FF2046FEF7EC +:1025E00021FF304670BD704770B50E4604467C2111 +:1025F00012F051FB0225012E03D0022E04D005203B +:1026000070BD0120607000E065702046FEF70AFF93 +:10261000A575002070BD28B1027C1AB10A4600F1F0 +:102620000C01C5E70120704710B5044686B00420B0 +:1026300001F07AFF2078FE2806D000208DF80000F7 +:1026400069462046FFF7E7FF06B010BD7CB50E4691 +:1026500000218DF804104178012903D0022903D00C +:10266000002405E0046900E044690CB1217C89B1D3 +:102670006D4601462846FFF754FF032809D132462C +:1026800029462046FFF794FF9DF80410002900D04A +:1026900004207CBD04F10C05EBE730B40C46014688 +:1026A000034A204630BC034B0C3AFEF756BE0000EE +:1026B000845102004051020070B50D46040011D053 +:1026C00085B12101284612F0C4FA10224E4928464D +:1026D00012F040FA4C4801210838018044804560DE +:1026E000002070BD012070BD70B5474E0024054626 +:1026F000083E10E07068AA7B00EB0410817B9142D9 +:1027000008D1C17BEA7B914204D10C22294612F008 +:10271000F5F930B1641C30888442EBDB4FF0FF30B8 +:1027200070BD204670BD70B50D46060006D02DB1B7 +:10273000FFF7DAFF002803DB401C14E0102070BD17 +:10274000314C083C20886288411C914201D9042008 +:1027500070BD6168102201EB0010314612F0FAF9E9 +:102760002088401C20802870002070BD70B5144661 +:102770000D0018D0BCB10021A170022802D0102891 +:1027800011D105E0288870B10121A170108008E006 +:102790002846FFF7A9FF002805DB401CA070A88988 +:1027A0002080002070BD012070BD70B50546144624 +:1027B0000E000BD000203070A878012808D005D971 +:1027C0001149A1F108010A8890420AD9012070BD7F +:1027D00024B1287820702888000A507002200870E0 +:1027E0000FE064B14968102201EB00112046103956 +:1027F00012F0B0F9287820732888000A607310203E +:102800003070002070BD00007C0000202DE9F041F8 +:1028100090460C4607460025FE48072F00EB881619 +:1028200007D2DFE807F007070707040404000125C3 +:1028300000E0FFDF06F81470002D13D0F54880305B +:1028400000EB880191F82700202803D006EB400018 +:10285000447001E081F8264006EB440220205070CD +:1028600081F82740BDE8F081F0B51F4614460E46BA +:102870000546202A00D1FFDFE649E648803100EB1B +:10288000871C0CEB440001EB8702202E07D00CEBD9 +:10289000460140784B784870184620210AE092F8AB +:1028A0002530407882F82500F6E701460CEB410020 +:1028B00005704078A142F8D192F82740202C03D02F +:1028C0000CEB4404637001E082F826300CEB410409 +:1028D0002023637082F82710F0BD30B50D46CE4B33 +:1028E00044190022181A72EB020100D2FFDFCB4814 +:1028F000854200DDFFDFC9484042854200DAFFDF44 +:10290000C548401C844207DA002C01DB204630BD5C +:10291000C148401C201830BDBF48C043FAE710B57D +:1029200004460168407ABE4A52F82020114450B152 +:102930000220084420F07F40F0F71DF994F90810B8 +:10294000BDE81040C9E70420F3E72DE9F047B14E98 +:10295000803696F82D50DFF8BC9206EB850090F893 +:10296000264034E009EB85174FF0070817F81400EC +:10297000012806D004282ED005282ED0062800D005 +:10298000FFDF01F0E3F8014607EB4400427806EB75 +:10299000850080F8262090F82720A24202D120222C +:1029A00080F82720084601F0DCF82A46214601205D +:1029B000FFF72CFF9B48414600EB041002682046BD +:1029C000904796F82D5006EB850090F82640202C75 +:1029D000C8D1BDE8F087022000E003208046D0E7A0 +:1029E00010B58C4C2021803484F8251084F82610F2 +:1029F00084F82710002084F8280084F82D0084F83B +:102A00002E10411EA16044F8100B207460742073D6 +:102A10006073A0738449E0772075087048700021C6 +:102A20007C4A103C02F81100491CC9B22029F9D394 +:102A30000120EFF78EFF0020EFF78BFF012084F8D5 +:102A40002200F9F7A9F97948F9F7B5F9764CA41EEF +:102A500020707748F9F7AFF96070BDE81040EFF7E4 +:102A600005BF10B5EFF727FF6F4CA41E2078F9F7CC +:102A7000BBF96078F9F7B8F9BDE8104001F09EB8ED +:102A8000202070472DE9F34F624E0025803606EB7B +:102A9000810A89B09AF82500202822D0691E029167 +:102AA0006049009501EB00108146D0E90112C06831 +:102AB0000391CDE90420B08BADF81C00B07F8DF8F8 +:102AC0001E009DF81500C8B10227554951F8204055 +:102AD0000399E219114421F07F41019184B102214F +:102AE0000FE00120EFF735FF0020EFF732FFEFF79F +:102AF00000FF01F063F886F82F50A0E00427E4E718 +:102B000000218DF81810022801D0012820D1039847 +:102B1000391901440998081A9DF81C1020F07F40CB +:102B200001B10221333181420BD203208DF815000F +:102B30000398C4F13201401A20F07F403224039000 +:102B40000CE096F8240018B9F0F726FA00284CD0CB +:102B5000322C03D214B101F025F801E001F02EF877 +:102B6000314A107818B393465278039B121B002108 +:102B70009DF81840984601281AD0032818D0002044 +:102B80008DF81E00002A04DD981A039001208DF8AC +:102B900018009DF81C0000B102210398254A20F07E +:102BA0007F40039003AB099801F014F810B110E0D6 +:102BB0000120E5E79DF81D0018B99BF800000328E7 +:102BC00012D08DF81C50CDF80C808DF818408DF87F +:102BD0001E509DF8180058B103980123C119002216 +:102BE0001846EFF709FF06E000200BB0BDE8F08FB4 +:102BF0000120EFF7AEFE99F90C2001230020019986 +:102C0000EFF7FAFE012086F82F008AF828502022DC +:102C1000694611E098080020FF7F841E0020A1076C +:102C200094510200980600208E000020834201008B +:102C30004B290100FFFF3F00F94811F0D0FF0120B0 +:102C4000D3E72DE9F05FDFF8D883064608EB86006E +:102C500090F82550202D1FD0A8F180002C4600EBC5 +:102C60008617A0F50079DFF8BCB305E0A24607EBB4 +:102C70004A004478202C0AD0EFF70AFF09EB04132E +:102C80005A4601211B1D00F0A5FF0028EED0AC42E2 +:102C900002D0334652461EE0E34808B1AFF300804D +:102CA000EFF7F6FE98F82F206AB1D8F80C20411CF7 +:102CB000891A0902CA1701EB12610912002902DD03 +:102CC0000020BDE8F09F3146FFF7DCFE08B101208F +:102CD000F7E733462A4620210420FFF7C5FDEFE73A +:102CE0002DE9F041CE4C2569EFF7D2FE401B0002E2 +:102CF000C11700EB1160001200D4FFDF94F822002E +:102D000000B1FFDF012784F8227094F82E002028FC +:102D100000D1FFDF94F82E60202084F82E000025DB +:102D200084F82F5084F8205084F82150BF48256043 +:102D30000078022833D0032831D000202077A06803 +:102D4000401C05D04FF0FF30A0600120EFF701FEDE +:102D50000020EFF7FEFDEFF7FCFEEFF7F4FEEFF7D4 +:102D6000C8FD11F031F9B248056005604FF0E0216F +:102D70004FF40040B846C1F88002EFF784FF94F8A2 +:102D80002D703846FFF75DFF0028FAD0A448803840 +:102D900000EB871010F81600022802D006E0012090 +:102DA000CCE73A4631460620FFF730FD84F8238011 +:102DB00004EB870090F82600202804D09B48801E52 +:102DC0004078F9F717F8207F002803D0EFF7B1FE1D +:102DD0002577657746E50146914810B590F82D2096 +:102DE0000024803800EB821010F814302BB1641CE2 +:102DF000E4B2202CF8D3202010BD8E4800EB041044 +:102E0000016021460120FFF701FD204610BD10B5ED +:102E1000012801D0032800D171B3814A92F82D30E6 +:102E20007F4C0022803C04EB831300BF13F8124058 +:102E30000CB1082010BD521CD2B2202AF6D37B4A16 +:102E400048B1022807D0072916D2DFE801F015069D +:102E5000080A0C0E100000210AE01B2108E03A21AC +:102E600006E0582104E0772102E0962100E0B52138 +:102E700051701070002010BD072010BD6B4810B5B8 +:102E80004078EFF778FE80B210BD10B5202811D23F +:102E9000634991F82D30A1F1800202EB831414F8FC +:102EA00010303BB191F82D3002EB831212F8102054 +:102EB000012A01D0002010BD91F82D2001460020EC +:102EC000FFF7A4FC012010BD10B5EFF7E1FDBDE850 +:102ED0001040EFF750BE2DE9F0410E46504F0178FB +:102EE0002025803F0C4607EB831303E0254603EBC8 +:102EF00045046478944202D0202CF7D108E0202CBD +:102F000006D0A14206D103EB41014978017007E0E8 +:102F10000020A7E403EB440003EB45014078487030 +:102F2000454F7EB127B1002140F2DA30AFF3008087 +:102F30003078A04206D127B1002140F2DD30AFF356 +:102F40000080357027B1002140F2E230AFF30080FD +:102F5000012087E410B542680B689A1A1202D41750 +:102F600002EB1462121216D4497A91B1427A82B9F4 +:102F7000324A006852F82110126819441044001DAA +:102F8000891C081A0002C11700EB116000123228D8 +:102F900001DB012010BD002010BD2DE9F047814666 +:102FA0001F48244E00EB8100984690F825402020D1 +:102FB000107006F50070154600EB81170BE000BF9E +:102FC00006EB04104946001DFFF7C4FF28B107EBCC +:102FD00044002C704478202CF2D1297888F8001015 +:102FE00013E000BF06EB0415291D4846FFF7B2FFAA +:102FF00068B988F80040A97B99F80A00814201D895 +:103000000020E6E407EB44004478202CEAD10120BC +:10301000DFE42DE9FC410E4607460024054D18E08B +:1030200018090020FFFF3F00000000008E00002074 +:1030300000F50040980600200000000094510200B6 +:103040009DF8000005EB00108168384600F0D6FDC1 +:1030500001246B4601AA31463846FFF79EFF00283F +:10306000EED02046BDE8FC8170B50446FF4801253E +:10307000A54300EB841100EB8510402211F06AFD9E +:10308000FB4E26B1002140F25C40AFF30080F748D0 +:10309000803000EB850100EB8400D0F82500C1F8FA +:1030A000250026B100214FF48C60AFF30080284644 +:1030B00070BD2DE9FC418446EC481546089C00EBA8 +:1030C00085170E4617F81400012803D0022801D0F6 +:1030D0000020C7E70B46E74A0121604600F07AFD71 +:1030E000A8B101AB6A4629463046FFF756FF70B1DA +:1030F000DE489DF804209DF80010803000EB850626 +:103100008A4208D02B460520FFF7AEFB0BE02A468B +:103110002146042014E0202903D007EB4100407829 +:1031200001E096F8250007EB440148709DF8000087 +:10313000202809D007EB400044702A46214603208E +:10314000FFF764FB01208DE706F8254F0120F070A2 +:10315000F3E7C94901EB0010001DFFF7E0BB7CB5A8 +:103160001D46134604460E4600F108022146184645 +:10317000EFF70EFD94F908000F2804DD1F382072C8 +:103180002068401C206096B10220BC4951F82610EE +:10319000461820686946801B20F07F40206094F923 +:1031A00008002844C01C1F2803DA012009E004207D +:1031B000EBE701AAEFF7ECFC9DF8040010B10098D2 +:1031C000401C00900099206831440844C01C20F045 +:1031D0007F4060607CBD2DE9FE430C4606460978C1 +:1031E00060799072207998461546507241B19F4897 +:1031F000803090F82E1020290AD00069401D0BE085 +:10320000D4E90223217903B02846BDE8F043A6E7BC +:103210009B484178701D084420F07F4721790022A7 +:103220002846A368FFF79BFF3946284600F0E6FCD6 +:10323000D4E9023221796846FFF791FF41462846DA +:10324000019CFFF7E6FE2B4622460021304600F0A7 +:10325000C1FC002803D13146284600F0CFFCBDE870 +:10326000FE832DE9FE4F814600F084FC30B100273B +:1032700099F8000020B10020BDE8FE8F0127F7E794 +:103280007A4D7B4C4FF0000A803524B1002140F28A +:10329000D340AFF3008095F82D8085F823A0002659 +:1032A00024B100214FF49B60AFF300801FB940466A +:1032B000FFF7DAFE804624B100214FF49C60AFF3A3 +:1032C0000080EFF7E5FB43466A464946FFF783FF78 +:1032D00024B1002140F2E640AFF3008095F82E00C3 +:1032E00020280CD029690098401A0002C21700EB70 +:1032F0001260001203D5684600F080FC012624B15C +:1033000000214FF49E60AFF3008095F82300002861 +:10331000BBD124B1002140F2F640AFF30080EFF7BB +:10332000B7FB6B46534A002100F054FC0028A3D0A1 +:1033300027B941466846FFF76CFE064326B168464A +:10334000FFF7EDFAC9F8080024B1002140F2095056 +:10335000AFF3008001208FE72DE9FF5F8A468146A9 +:1033600000F008FC414C803410B39AF800000027AC +:1033700010B1012800D0FFDF3D4D25B1002140F202 +:103380007F50AFF300800120A84600905FEA080656 +:1033900004D0002140F28750AFF30080009800F085 +:1033A000E0FB94F82D50002084F8230067B119E069 +:1033B00094F82E000127202800D1FFDF9AF80000A2 +:1033C0000028D9D0FFDFD7E72846FFF74DFE054696 +:1033D00026B1002140F29150AFF3008094F8230011 +:1033E0000028D3D126B1002140F29B50AFF30080DA +:1033F000EFF74EFB83462B4601AA5146FFF7EBFE43 +:103400005FEA060804D0002140F2A250AFF300802A +:103410003B462A4601A95846CDF80090FFF749FEE1 +:10342000064604EB850090F828B0B8F1000F04D0F0 +:10343000002140F2A950AFF3008000F087FB00901C +:10344000B8F1000F04D0002140F2AF50AFF300807C +:1034500094F82300002899D1B8F1000F04D000217E +:1034600040F2B750AFF3008003490BE0980800200A +:1034700000000000FFFF3F0098060020945102006A +:103480008E00002001EB09100DF1040C00F1040086 +:103490009CE80E0080E80E004EB35FEA080604D0F8 +:1034A000002140F2C450AFF300803BEA070012D085 +:1034B00094F82E0020280ED126B1002140F2C950E8 +:1034C000AFF300802846FFF7BCFB20B99AF8000054 +:1034D000D8B3012849D0B8F1000F04D0002140F240 +:1034E000E650AFF30080284600F029FB01265FEA92 +:1034F000080504D0002140F2EF50AFF3008000989F +:1035000000F02FFB25B1002140F2F350AFF3008013 +:103510008EB194F82D0004EB800090F8260020284E +:1035200009D025B1002140F2FA50AFF30080F948EC +:103530004078F8F75FFC25B1002140F2FF50AFF36F +:10354000008004B03046BDE8F09FFFE7B8F1000FFF +:1035500004D0002140F2D150AFF3008094F82D2028 +:1035600049460420FFF752F9C0E7002E3FF40EAFA2 +:10357000002140F2DC50AFF3008007E72DE9F84F5F +:10358000E54D814695F82D004FF00008E34C4FF0D3 +:10359000010B474624B1002140F20D60AFF30080DB +:1035A000584600F0DEFA85F8237024B1002140F27D +:1035B0001260AFF3008095F82D00FFF755FD064629 +:1035C00095F8230028B1002CE4D000214FF4C3600B +:1035D0004BE024B1002140F21C60AFF30080CE48E4 +:1035E000803800EB861111F81900032856D13346B4 +:1035F00005EB830A4A469AF82500904201D1012042 +:1036000000E0002000900AF125000021FFF763FC94 +:1036100001460098014203D001228AF82820AF77A2 +:10362000E1B324B1002140F22160AFF300803246C3 +:1036300049460120FFF7EAF89AF828A024B10021B2 +:1036400040F22C60AFF3008000F080FA834624B192 +:10365000002140F23160AFF3008095F8230038B1CB +:10366000002C97D0002140F23560AFF3008091E745 +:10367000BAF1000F07D095F82E00202803D130466C +:10368000FFF7DFFAE0B124B1002140F24960AFF367 +:103690000080304600F053FA4FF0010824B10021B9 +:1036A00040F25260AFF30080584600F05AFA24B15D +:1036B000002140F25660AFF300804046BDE8F88F2D +:1036C000002CF1D0002140F24460AFF30080E6E727 +:1036D0000020EFF717B90120EFF714B98D480078F3 +:1036E00070472DE9F0418C4C94F82E0020281FD112 +:1036F00094F82D6004EB860797F82550202D00D113 +:10370000FFDF8549803901EB861000EB45004078EA +:1037100007F8250F0120F87084F82300294684F863 +:103720002E50324602202234FFF770F8002020701D +:103730000FE42DE9F0417A4E774C012538B101288C +:1037400021D0022879D003287DD0FFDFF0E700F0F8 +:1037500029FAFFF7C6FF207E00B1FFDF84F8215071 +:103760000020EFF7F6F8A168481C04D001230022DE +:103770001846EFF741F914F82E0F217806EB0111E6 +:103780000A68012154E0FFF7ACFF0120EFF7E1F8F0 +:1037900094F8210050B1A068401C07D014F82E0FF7 +:1037A000217806EB01110A68062141E0207EDFF84E +:1037B0006481002708F10208012803D002281ED0E6 +:1037C000FFDFB5E7A777EFF7B4F998F80000032813 +:1037D00001D165772577607D524951F8200094F832 +:1037E000201051B948B161680123091A0022184616 +:1037F000EFF702F9022020769AE7277698E784F817 +:10380000205000F0CFF9A07F50B198F80100616816 +:103810000123091A00221846EFF7EEF8257600E09A +:10382000277614F82E0F217806EB01110A68002183 +:10383000BDE8F041104700E005E036480078BDE8FB +:10384000F041F8F7D7BAFFF74CFF14F82E0F2178A4 +:1038500006EB01110A680521EAE710B52E4C94F831 +:103860002E00202800D1FFDF14F82E0F21782C4ADB +:1038700002EB01110A68BDE81040042110477CB535 +:10388000254C054694F82E00202800D1FFDFA068C3 +:10389000401C00D0FFDF94F82E00214901AA01EB63 +:1038A0000010694690F90C002844EFF771F99DF972 +:1038B00004000F2801DD012000E0002000990844E9 +:1038C0006168084420F07F41A16094F8210000283D +:1038D00007D002B00123BDE8704000221846EFF780 +:1038E0008BB87CBD30B5104A0B1A541CB3EB940F47 +:1038F0001ED3451AB5EB940F1AD3934203D9101A6D +:1039000043185B1C14E0954210D9511A0844401C1E +:1039100043420DE08C000020180900200000000048 +:103920009806002094510200FF7F841EFFDF0023D1 +:10393000184630BD0123002201460220EFF75CB893 +:103940000220EFF706B8EFF7A3B82DE9FC47B14C1A +:10395000054694F82E00202800D1FFDF642D58D3AF +:10396000AD4A0021521B71EB010052D394F82E2076 +:10397000A0462046DFF8A49290F82D7009EB0214BF +:10398000D8F8000001AA28446946EFF701F99DF92B +:103990000400002802DD0098401C0090A0680099F7 +:1039A00062684618B21A22F07F42B2F5800F30D218 +:1039B00008EB8702444692F82520202A0AD009EB1A +:1039C00002125268101A0002C21700EB12600012B5 +:1039D00088421EDBA068401C10D0EFF759F8A168A0 +:1039E000081A0002C11700EB11600012022810DD56 +:1039F0000120EEF7AEFF4FF0FF30A06020682844B2 +:103A0000206026F07F402061012084F82300BDE87B +:103A1000FC870020FBE72DE9F0477E4C074694F831 +:103A20002D00A4F1800606EB801010F8170000B9F5 +:103A3000FFDF94F82D50A046794C24B1002140F6C8 +:103A40006500AFF3008040F6710940F67A0A06EB94 +:103A5000851600BF16F81700012818D0042810D0CA +:103A600005280ED006280CD01CB100214846AFF323 +:103A7000008020BF002CEDD000215046AFF3008025 +:103A8000E8E72A4639460120FEF7C0FEF2E74FF08C +:103A9000010A4FF00009454624B1002140F681009B +:103AA000AFF30080504600F05CF885F8239024B115 +:103AB000002140F68600AFF3008095F82D00FFF757 +:103AC000D3FA064695F8230028B1002CE4D0002153 +:103AD00040F68C001FE024B100214FF40960AFF3E1 +:103AE000008005EB860000F1270133463A46263078 +:103AF000FFF7F1F924B1002140F69400AFF3008004 +:103B000000F024F8824695F8230038B1002CC3D089 +:103B1000002140F69A00AFF30080BDE785F82D60E4 +:103B2000012085F82300504600F01BF8002C04D03B +:103B3000002140F6A700AFF30080BDE8F0873549CB +:103B400081F82D00012081F82300704710B5354819 +:103B500008B1AFF30080EFF3108000F0010072B6FF +:103B600010BD10B5002804D12F4808B1AFF3008074 +:103B700062B610BD2D480068C005C00D10D01038C9 +:103B800040B2002806DA00F00F0000F1E02090F8C3 +:103B9000140D03E000F1E02090F8000440097047A4 +:103BA0000820704710B51B4C94F82400002804D15D +:103BB000F7F7D2FE012084F8240010BD10B5154C93 +:103BC00094F82400002804D0F7F7EFFE002084F8D2 +:103BD000240010BD10B51C685B68241A181A24F064 +:103BE0007F4420F07F40A14206D8B4F5800F03D275 +:103BF000904201D8012010BD002010BDD0E9003254 +:103C0000D21A21F07F43114421F07F41C0E90031F5 +:103C10007047000018090020FF1FA1079806002028 +:103C200000000000000000000000000004ED00E0C3 +:103C30002DE9F041044680074FF000054FF00106E2 +:103C400004D55C480560066024F00204E0044FF0EF +:103C5000FF3705D558484660C0F8087324F48054EF +:103C6000600003D55548056024F08044E0050FD579 +:103C70005348C0F80052C0F8087352490D60091D3E +:103C80000D60504A04210C321160066124F48074E6 +:103C9000A00409D54C484660C0F80052C0F808732B +:103CA0004A48056024F40054C4F38030C4F3C031A2 +:103CB000884200D0FFDF14F4404F14D044484660DF +:103CC000C0F8087343488660C0F80052C0F8087313 +:103CD00041490D600A1D16608660C0F808730D60CA +:103CE000166024F4404420050AD53C4846608660AE +:103CF000C0F80873C0F848733948056024F40064BC +:103D000010F03CF93748044200D0FFDFBDE8F081F5 +:103D100070B520250022134620FA02F1C90719D0F8 +:103D200051B201F01F060124B4404E09B60006F15D +:103D3000E026C6F88041C6F88042002906DA01F084 +:103D40000F0101F1E02181F8143D03E001F1E021D0 +:103D500081F80034521CAA42DED370BD70B5224CEB +:103D60000D462060FFF764FF2068FFF7D1FF28466B +:103D7000F7F7CFFE0FF022FD00F0ADF810F0FEF8DF +:103D800010F041F8F8F708F8BDE870400FF0C4BD36 +:103D900010B5154C2068FFF74BFF2068FFF7B8FF00 +:103DA00010F0ECF8F7F773FF0020206010BD0A2038 +:103DB00070470000FC1F004000C0004004E50140C7 +:103DC000008000400485004000D0004004D5004041 +:103DD00000E0004000F0004000F5004000B000406E +:103DE00008B50040FEFF0FFD9000002070B5264989 +:103DF0000A680AB30022154601244B685B1C4B601D +:103E00000C2B00D34D600E7904FA06F30E681E42A7 +:103E10000FD0EFF3108212F0010272B600D001222F +:103E20000C689C430C6002B962B6496801600020CE +:103E300070BD521C0C2AE0D3052070BD4FF0E0216C +:103E40004FF48000C1F800027047EFF3108111F0C9 +:103E5000010F72B64FF0010202FA00F20A4803683D +:103E600042EA0302026000D162B6E7E70648002199 +:103E700001604160704701218140034800680840AB +:103E800000D0012070470000940000202DE9F0418F +:103E900015460E460446002700F0E7F8A84215D361 +:103EA000002341200FE000BF94F84220A25CF254AE +:103EB00094F84210491CB1FBF0F200FB12115B1C9C +:103EC00084F84210DBB2AB42EED3012700F0D9F800 +:103ED0003846BDE8F081704910B5802081F80004B3 +:103EE0006E49002081F8420081F84100433181F899 +:103EF000420081F84100433181F8420081F84100DD +:103F000067480FF071FE6648401C0FF06DFEEEF73B +:103F1000C9FEBDE8104000F0B4B8402070475F48CB +:103F200000F0A3B80A4601465C48AFE7402070475E +:103F30005A48433000F099B80A4601465748433082 +:103F4000A4E7402101700020704710B50446534893 +:103F5000863000F08AF82070002010BD0A46014625 +:103F60004E4810B58630FFF791FF08B1002010BD14 +:103F700042F2070010BD70B50C460546412900D934 +:103F8000FFDF48480068103840B200F050F8C6B271 +:103F90000D2000F04CF8C0B2864203D2FFDF01E0F2 +:103FA000EEF7D0FE224629463C48FFF76FFF002877 +:103FB000F6D070BD2DE9F041394F002506463F1D72 +:103FC00057F82540204600F041F810B36D1CEDB2C3 +:103FD000032DF5D33148433000F038F8002825D0C0 +:103FE0002E4800F033F8002820D02C48863000F00E +:103FF0002DF800281AD0EEF77BFE29480FF0FCFDC3 +:10400000B0F5005F00D0FFDFBDE8F04124480FF0BD +:1040100009BE94F841004121265414F8410F401C78 +:10402000B0FBF1F201FB12002070D3E751E700284A +:1040300006DA00F00F0000F1E02090F8140D03E024 +:1040400000F1E02090F800044009704710F8411F8B +:104050004122491CB1FBF2F302FB1311407881426B +:1040600001D1012070470020704710F8411F4078AF +:10407000814201D3081A02E0C0F141000844C0B2F5 +:10408000704710B506480FF0B7FD002803D1BDE812 +:104090001040EEF718BE10BD0DE000E0480900200A +:1040A0009C00002004ED00E070B5154D2878401C00 +:1040B000C4B26878844202D0EEF7D5FE2C7070BD91 +:1040C0002DE9F0410E4C4FF0E02600BFEEF7C0FEA8 +:1040D00020BF40BF20BF677820786070D6F80052BC +:1040E000EDF71CF9854305D1D6F8040210B9207804 +:1040F000B842EBD0EEF7A7FE0020BDE8F08100004B +:10410000AC0000202DE9F041012528034FF0E0210B +:104110000026C1F880011E4CC4F800610C2000F09C +:104120002CF81C4801680268C94341F3001142F0B1 +:1041300010020260C4F804532560491C00E020BF4F +:10414000D4F80021002AFAD019B9016821F0100131 +:104150000160114807686560C4F80853C4F800613D +:104160000C2000F00AF83846BDE8F08110B504468E +:10417000FFF7C8FF2060002010BD00F01F020121E2 +:1041800091404009800000F1E020C0F880127047A3 +:1041900000C0004010ED00E008C500402DE9F047E8 +:1041A000FF4C0646FF21A06800EB06121170217833 +:1041B000FF2910D04FF0080909EB011109EB061790 +:1041C0004158C05900F0F4F9002807DDA1682078B3 +:1041D00001EB061108702670BDE8F08794F80080A6 +:1041E00045460DE0A06809EB05114158C05900F0A3 +:1041F000DFF9002806DCA068A84600EB0810057867 +:10420000FF2DEFD1A06800EB061100EB08100D7038 +:104210000670E1E7F0B5E24B0446002001259A68FC +:104220000C269B780CE000BF05EB0017D75DA7427A +:1042300004D106EB0017D7598F4204D0401CC0B2FE +:104240008342F1D8FF20F0BD70B5FFF77CFBD44C62 +:1042500008252278A16805EB0212895800F0A8F918 +:10426000012808DD2178A06805EB01114058BDE860 +:104270007040FFF75FBBFFF731FABDE87040F7F71A +:10428000B9BD2DE9F041C64C2578FFF75CFBFF2D49 +:104290006ED04FF00808A26808EB0516915900F09F +:1042A00087F90228A06801DD80595DE000EB051167 +:1042B00009782170022101EB0511425C5AB1521EAE +:1042C0004254815901F5800121F07F4181512846F6 +:1042D000FFF764FF34E00423012203EB051302EB34 +:1042E000051250F803C0875CBCF1000F10D0BCF57C +:1042F000007F10D9CCF3080250F806C00CEB423C0A +:104300002CF07F4C40F806C0C3589A1A520A09E0B4 +:10431000FF2181540AE0825902EB4C3222F07F42A5 +:104320008251002242542846FFF738FF0C21A06832 +:1043300001EB05114158E06850F8272038469047B6 +:104340002078FF2814D0FFF7FEFA2278A16808EB46 +:1043500002124546895800F02BF9012893DD217897 +:10436000A06805EB01114058BDE8F041FFF7E2BA43 +:10437000BDE8F081F0B51D4614460E460746FF2BFA +:1043800000D3FFDFA00700D0FFDF8548FF21002218 +:10439000C0E90247C5700671017042708270104614 +:1043A000012204E002EB0013401CE154C0B2A84219 +:1043B000F8D3F0BD70B57A4C064665782079854211 +:1043C00000D3FFDFE06840F825606078401C607033 +:1043D000284670BD2DE9FF5F1D468B460746FF242A +:1043E000FFF7B1FADFF8B891064699F80100B84234 +:1043F00000D8FFDF00214FF001084FF00C0A99F8B8 +:104400000220D9F808000EE008EB0113C35CFF2B73 +:104410000ED0BB4205D10AEB011350F803C0DC45B6 +:104420000CD0491CC9B28A42EED8FF2C02D00DE054 +:104430000C46F6E799F803108A4203D1FF2004B036 +:10444000BDE8F09F1446521C89F8022008EB0411C5 +:104450000AEB0412475440F802B00421029B0022E8 +:10446000012B01EB04110CD040F801204FF400782F +:1044700008234FF0020C454513D9E905C90D02D0B8 +:1044800002E04550F2E7414606EB413203EB0413EC +:1044900022F07F42C250691A0CEB0412490A81547F +:1044A0000BE005B9012506EB453103EB041321F0C0 +:1044B0007F41C1500CEB0411425499F80050204642 +:1044C000FFF76CFE99F80000A84201D0FFF7BCFE90 +:1044D0003846B4E770B50C460546FFF734FA064691 +:1044E00021462846FFF796FE0446FF281AD02C4D99 +:1044F000082101EB0411A8684158304600F058F833 +:1045000000F58050C11700EBD14040130221AA688A +:1045100001EB0411515C09B100EB4120002800DCE3 +:10452000012070BD002070BD2DE9F047884681460E +:10453000FFF770FE0746FF281BD0194D2E78A8689C +:104540003146344605E0BC4206D0264600EB061252 +:104550001478FF2CF7D10CE0FF2C0AD0A6420CD126 +:1045600000EB011000782870FF2804D0FFF76CFEE4 +:1045700003E0002030E6FFF7E3F941464846FFF745 +:10458000A9FF0123A968024603EB0413FF20C854C6 +:10459000A878401EB84200D1A87001EB041001E0D9 +:1045A000140A002001EB061100780870104613E68B +:1045B000081A0002C11700EB1160001270470000DA +:1045C00070B50446A0F500002D4EB0F1786F02D210 +:1045D0003444A4F500042B48844201D2012500E0B4 +:1045E000002500F043F848B125B9B44204D3264869 +:1045F000006808E0012070BD002070BD002DF9D1D9 +:10460000B442F9D321488442F6D2F3E710B5044608 +:10461000A0F50000B0F1786F03D219480444A4F566 +:10462000000400F023F84FF0804130B116480068D4 +:1046300004E08C4204D2012003E014488442F8D202 +:10464000002080F0010010BD10B520B1FFF7DEFFA3 +:1046500008B1012010BD002010BD10B520B1FFF73A +:10466000AFFF08B1012010BD002010BD0848094966 +:104670000068884201D10120704700207047000087 +:104680000000002000600200200000200800002040 +:10469000B0000020BEBAFECA0548064A0168914231 +:1046A00001D1002101600449012008607047000029 +:1046B000B0000020BEBAFECA40E5014053480021C8 +:1046C0000170417010218170704770B50546164623 +:1046D0000C460220EEF785F84C49012008704C4941 +:1046E000F01E08604B480560001F046070BD10B5E7 +:1046F0000220EEF776F8454901200870464800216F +:10470000C0F80011C0F80411C0F8081143494FF473 +:104710000000086010BD3D480178C9B1404A4FF41F +:10472000000111603C49D1F800310022002B1CBF70 +:10473000D1F80431002B02D0D1F8081111B1427028 +:10474000102103E00121417036490968817002702F +:104750000020EEF746B82D480178002904BF4078C4 +:1047600070472D48D0F80011002904BF022070477F +:10477000D0F8001100291CBFD0F80411002905D081 +:10478000D0F80801002804BF0120704700207047BE +:104790001E4800B50278204B4078C821491EC9B296 +:1047A00082B1D3F800C1BCF1000F10D0D3F80001E2 +:1047B00000281CBFD3F8040100280BD0D3F808014F +:1047C00050B107E0022802D0012805D002E00029FC +:1047D000E4D1FFDF002000BD012000BD0B480178BF +:1047E000002904BF807870470B48D0F800110029D9 +:1047F0001CBFD0F80411002902D0D0F8080108B17C +:104800001020704707480068C0B27047B40000200D +:1048100010F5004008F5004000F0004004F50140AC +:1048200008F5014000F40040524800210170417039 +:10483000704770B5064614460D460120EDF7D1FFCE +:104840004D480660001D0460001D05604B490020B6 +:10485000C1F850014A49032008604B4949480860A3 +:10486000091D4A48086070BD70B5424B012540EAF9 +:1048700002421D70464B42F080721A60454A116038 +:10488000454C0026C4F80461454A4449116000289B +:1048900002BFC4F80052256070BD012818BFFFDFB9 +:1048A000C4F80062256040493E48086070BD314848 +:1048B000017871B13A4A394911603749D1F8042178 +:1048C0000021002A08BF417002D0384A12684270A5 +:1048D00001700020EDF785BF26480178002904BF4C +:1048E000407870472C48D0F80401002808BF704772 +:1048F0002E480068C0B27047002808BF704730B526 +:104900001C480078002808BFFFDF2348D0F80411B6 +:10491000002918BF30BD0224C0F80443DFF890C05E +:10492000DCF80010C1F30015DCF8001041F01001B4 +:10493000CCF80010D0F80411002904BF4FF4004156 +:104940004FF0E02207D100BFC2F8801220BFD0F89C +:104950000431002BF8D02DB9DCF8001021F0100143 +:10496000CCF80010C0F8084330BD0B490120886026 +:1049700070470000B700002008F50040001000401C +:104980001CF500405011004098F501400CF000402B +:1049900004F5004018F5004000F00040000002035C +:1049A00008F501400000020204F5014000F4004057 +:1049B00010ED00E010B5FF480024012144700470A0 +:1049C00044728472C17280F821408462446314305E +:1049D00010F068FAF849601E0860091D0860091D9A +:1049E0000C60091D0860091D0C60091D0860091D87 +:1049F0000860091D0860091D0860091D0860091D7F +:104A00000860091D0860091D0860091D086010BDC7 +:104A1000EA48016801F00F01032904BF0120704733 +:104A2000016801F00F01042904BF022070470168EA +:104A300001F00F01052904D0006800F00F000628DE +:104A400007D1DF48006810F0060F0CBF08200420D3 +:104A5000704700B5FFDF012000BD30B4D5490268C2 +:104A6000DFF864C34A6142688A61007A08770A7D88 +:104A7000D44BACF1040401204AB10A7E00FA02F2E0 +:104A80001A608D7D002D0CBF2260CCF800204A7D7D +:104A9000002A04BF30BC70474A7E90401860C97D30 +:104AA00000290CBF2060CCF8000030BC704730B546 +:104AB0000024054601290AD0022908BF4FF080745E +:104AC00005D0042916BF08294FF0C744FFDF44F47E +:104AD000847040F48010BD49086045F44030091DE1 +:104AE00040F00070086030BD30B500240546012953 +:104AF0000AD0022908BF4FF0807405D0042916BFE0 +:104B000008294FF0C744FFDF44F4847040F480105C +:104B1000AE49086045F44030091D40F0007008605F +:104B2000AB48D0F80001002818BFFFDF30BD0221DC +:104B300010B44FF0E02301200022C3F88011DFF809 +:104B400094C2CCF80020CCF80000DFF88CC2DCF86E +:104B5000004024F07044CCF80040A04C40F25B6C64 +:104B6000C4F800C0241F40F2031CC4F800C0A4F124 +:104B7000040CCCF80000DFF844C20320CCF800009D +:104B8000DFF85CC29620CCF80000DFF85CC29548E4 +:104B9000CCF80000DFF858C29448CCF80000ACF123 +:104BA000040C9448CCF80000C3F880128849102007 +:104BB000C1F804037F4880F82D2010BC70477D4A5F +:104BC0000368C2F802308088D08011727047794B38 +:104BD00010B51A7A8A4208D101460622981C0FF0B5 +:104BE0008DFF002804BF012010BD002010BD7148BA +:104BF00090F8210070476F4A517010707047F0B5FF +:104C00000546800000F1804000F580508B88C0F898 +:104C100020360B78D1F8011043EA0121C0F80016C4 +:104C200005F10800012707FA00F6734C002A04BFBB +:104C30002068B04304D0012A18BFFFDF206830434A +:104C40002060206807FA05F108432060F0BD0FF0EE +:104C5000DDBA584890F82E007047564890F830005A +:104C60007047664AC17811600068654900020860B3 +:104C70007047252808BF02210ED0262808BF1A2118 +:104C80000AD0272808BF502106D00A2894BF042242 +:104C9000062202EB4001C9B25A4A11605A49086023 +:104CA0007047F0B4434B9D7A012D62D0022D1CBF9A +:104CB000F0BC704793F815C0BCF1000F04BFF0BC06 +:104CC000704700BF514C524F4FF47A7C012D57D0A2 +:104CD000DE7D5D7E002E18BF0126012908BF292137 +:104CE0000CD0022A0CBF4B4C012A03D0042A0CBF63 +:104CF0003C46494C04F2E141B1FBFCF1491F084438 +:104D00004649086046490020C1F84C01280286F057 +:104D1000010140EA015040F00311187F820002F1C6 +:104D2000804202F5C042C2F810153E4901EB8002F4 +:104D3000997EC80000F1804000F5F830C0F81425D5 +:104D4000DFF8E4C0C0F810C5D87EC30003F180438B +:104D500003F5F833C3F81425264AC3F810250122B9 +:104D600002FA01F102FA00F0084330490860F0BC91 +:104D7000704793F814C0BCF1000FA3D1F0BC70478A +:104D80009E7D1D7E002E18BF012601295DD0022ABE +:104D900004BF274C4FF47A7151D0012A08BF4FF459 +:104DA000C8614CD0042A06BF3C4640F69801214C0D +:104DB00042E00000240A0020000E004010150040D0 +:104DC00014140040180500500C0500501415004044 +:104DD00000100040FC1F00407817004038150040CC +:104DE0004415004000000C0408F5014040800040DC +:104DF000A4F5014010110040401600402415004069 +:104E00001C1500400815004054150040A224020063 +:104E1000D0FB010004360200C0D401004C850040E4 +:104E200000800040006000404C81004004F50140DB +:104E30006836020030D3010018BF40F6E441214437 +:104E400001F5FA71B1FBFCF158E7022A08BF4FF4F3 +:104E50007A710AD0012A08BF4FF4C86105D0042A2C +:104E60000CBF40F6980140F6E44149F6FC6211445B +:104E7000E8E72DE9F047FC4D0446032090468946BB +:104E8000C5F80002FA49F948086048460FF011FADF +:104E900040460FF0F9F9F74F0126002C04BFBE720F +:104EA0002E6007D0012C05D140460FF051FB0220A7 +:104EB000B8726E60F048C664F048006842464946E1 +:104EC000BDE8F047EDE62DE9F0410F46E64905461D +:104ED00003201646C1F80002E54CE448206038463D +:104EE0000FF0E7F930460FF0CFF930460FF030FB06 +:104EF000E04815B1012D09D011E001218172416B0B +:104F000041F4801141634FF4801007E00221817267 +:104F1000416B41F4001141634FF4001020603246B0 +:104F20003946BDE8F0410020BBE62DE9FF4FCE4CED +:104F30008246002581B003208946C4F80002CC4F88 +:104F4000CA48386003980FF0B4F904980FF09CF940 +:104F5000DFF82CB3C74E4FF00108BAF1000F03D0B1 +:104F6000BAF1010F21D035E0CBF8004096F82D00C2 +:104F7000012806D0022818BFFFDF0CD086F80A806F +:104F800028E0DDE9031396F82C2048460FF012FACA +:104F9000B16A4518F2E7DDE9031296F82C3048466D +:104FA0000FF096F9B16A4518E8E704980FF0D0FAC7 +:104FB000B448CBF8000096F82D00DDE90313012872 +:104FC00096F82C20484624D00FF03EFAB16A4518D6 +:104FD0000220B072AC480560AD49AC480860706B07 +:104FE00040F400207063D4F800924FF0100AC4F827 +:104FF00008A30026C4F80062A6484FF4802BC0F82E +:1050000000B0FF208DF80000C4F81061C4F81080D3 +:1050100009E00FF09BF9B16A4518D9E79DF8000047 +:10502000401E8DF800009DF8000018B1D4F8100162 +:105030000028F3D09DF80000002808BFFFDFC4F867 +:105040000061C4F80C61C4F81061C4F80461C4F8CC +:105050001461C4F81861904800680090C4F8009288 +:10506000C7F800B0C4F804A34FF4002038608248A9 +:10507000C0F84C8081480068A84228BFFFDF28465E +:10508000DDE9031205B0BDE8F04F0AE62DE9F84767 +:10509000754CD4F8000220F00B09D4F804034FF04B +:1050A000100AC0F30018C4F808A30026C4F8006270 +:1050B00078497A4808606F4D0127A87A012802D004 +:1050C000022803D014E0287D10B911E0687D78B182 +:1050D000A87EEA7E07FA00F007FA02F210430860A1 +:1050E000287F800000F1804000F5C040C0F81065C6 +:1050F000FF208DF80000C4F81061276105E000BFB3 +:105100009DF80000401E8DF800009DF8000018B1C9 +:10511000D4F810010028F3D09DF80000002808BF43 +:10512000FFDFC4F810616E72AE72EF72C4F80092C5 +:10513000B8F1000F18BFC4F804A3BDE8F8870068F1 +:10514000574920F07F40086070474FF0E02002216F +:10515000C0F88011C0F8801270474FF0E0210220A3 +:10516000C1F8000170474F49087070474E49086008 +:10517000704730B53F4C0546A06AA84228BFFFDF04 +:105180000120207300203C492561C1F844014748B3 +:105190000560606B40F480006063C80134490860BA +:1051A00030BD70B5334C0546414A0220207310686B +:1051B0000E4600F00F00032808BF012213D010682C +:1051C00000F00F00042808BF02220CD0106800F085 +:1051D0000F0005281BD0106800F00F0006281CBF28 +:1051E000FFDF012213D094F82D0094F82C10012831 +:1051F00015D028460FF086F91F4920610020C1F81C +:1052000044012169A06A08442849086070BD294802 +:10521000006810F0060F0CBF08220422E3E73346B3 +:1052200028460FF038F9E7E71A494FF48000086084 +:105230001048416B21F480014163002101737047E4 +:10524000C20002F1804202F5F8321B4BC2F8103561 +:10525000C2F8141501218140054801600548426BE0 +:105260001143416370470000001000400000040437 +:1052700004F50140240A0020008000404C850040D5 +:10528000ACF50140041000404885004048810040D2 +:10529000A8F5014008F501401811004000000C0479 +:1052A0003C150040B9000020041500404485004032 +:1052B000101500401414004004110040FB48012167 +:1052C0004160C1600021C0F84411F9480160F9480B +:1052D00081627047F8490860F848D0F8001241F040 +:1052E0004001C0F800127047F448D0F8001221F0D5 +:1052F0004001C0F80012F049002008607047EF48F4 +:10530000D0F8001221F01001C0F8001201218161D3 +:105310007047EA480021C0F81C11D0F8001241F093 +:105320001001C0F800127047E44981B0D1F81C2187 +:10533000012A1EBF002001B07047E14A126802F046 +:105340007F02524202700020C1F81C01DD48006853 +:105350000090012001B0704730B50C00054608BF31 +:10536000FFDF14F0010F1CBF012CFFDF002D0CBF6D +:1053700001200220CF4901284872CC72CF4904BFD6 +:10538000D1F8000240F0040007D0022807BFD1F88E +:10539000000240F00800FFDF30BDC1F8000230BD60 +:1053A0002DE9F84FDFF8209399F80000042828BF72 +:1053B000FFDFDFF8F8A2DAF84C11C448BD4C002634 +:1053C0004FF00108D1B1A17A012902D0022903D0FE +:1053D00014E0217D11B911E0617D79B1A17EE27EF9 +:1053E00008FA01F108FA02F211430160217F8900F5 +:1053F00001F1804101F5C041C1F81065B348616B0E +:1054000001606663217B002019B1DAF8441101299B +:1054100000D00021A27AA94D012A71D0022A76D0AB +:10542000D5F8101101290CBF1021002141EA000715 +:10543000A748016811F0FF0F03D0D5F81411012916 +:1054400000D0002184F82E10006810F0FF0F03D068 +:10545000D5F81801012800D0002084F82F009D48BD +:10546000006884F83000FFF776F9012818BF0020A3 +:1054700084F83100C5F80061C5F80C61C5F8106109 +:10548000C5F80461C5F81461C5F818619248006850 +:1054900000908648C0F8446190480068DFF810A288 +:1054A0000090DAF800006062AAF104000068A062CF +:1054B0008B48016801F00F01032908BF012013D0B8 +:1054C000016801F00F01042908BF02200CD0016817 +:1054D00001F00F01052929D0006800F00F0006280F +:1054E0001CBFFFDF012021D084F82C00A07ADFF858 +:1054F000F4B184F82D0002282DD11FE000E006E071 +:10550000D5F80C01012814BF0020082088E7D5F841 +:105510000C01012814BF00200220734A1268012ADE +:1055200014BF042200221043084379E76F48006843 +:1055300010F0060F0CBF08200420D5E7607850B1AA +:10554000DBF8001009780840217831EA000008BF34 +:1055500084F8208001D084F8206017F0020F07D073 +:1055600099F80010624A4908606A52F82110884789 +:1055700017F0010F18BF00210CD05E4A99F80030D7 +:10558000A06A52F82320904799F8000010F0010F0C +:105590002AD10AE017F0020F18BF0121EDD117F050 +:1055A000080F18BF0221E8D1EEE7DBF80000007811 +:1055B00000F00F00072828BF84F8216014D2DBF820 +:1055C0000000062200F10901A01C0FF097FA40B973 +:1055D000207ADBF800100978B0EBD11F08BF01205A +:1055E00000D0002084F82100E17A002011F0020FA1 +:1055F0001CBF17F0020F17F0040F19D111F0100F94 +:105600001CBF94F82F20002A02D094F831207AB1E0 +:1056100011F0080F1CBF94F82020002A08D111F0C7 +:10562000040F02D094F8211011B117F0010F00D02F +:105630000120617A19B170B1FFF728FD19E0234804 +:105640002D490160D5F8000220F00300C5F80002E2 +:1056500084F80B800DE04FF0000B012913D00229D4 +:1056600018BFFFDF4CD0A06A012258440021FFF789 +:1056700018FB17F0010F56D0204899F8001050F889 +:105680002100804770E0D5F8000220F00400C5F842 +:105690000002667284F80B80012384F80A801A469F +:1056A000002196200EF014FE3BE000000080004038 +:1056B00044850040240A002060150040001000408E +:1056C000481500401C110040B900002008F50140B9 +:1056D0004016004010140040181100404481004062 +:1056E0001015004004150040001400401414004040 +:1056F000AC510200F451020000000404B451020055 +:10570000D5F8000220F00800C5F80002667284F89F +:105710000B800220A07201231A46002196200EF071 +:1057200015FE83469FE717F0020F08D0624999F8EB +:10573000002028EA970051F82210884714E017F05B +:10574000080F06D05D4899F8001050F821008047F6 +:105750000AE017F0100F08BFFFDF05D0584899F88E +:10576000001050F821008047A07A022818BFBDE839 +:10577000F88F207B002808BFBDE8F88F5149C1F899 +:105780004461022814D0012818BFFFDFA16A2069F4 +:10579000884298BFFFDF2069CAF80000606B4A4961 +:1057A00040F4800060634FF480000860BDE8F88F2B +:1057B0002169A06A0844EFE70021444A81B000282B +:1057C00018BFC2F80012C2F80011C2F80C11C2F8DA +:1057D0001011C2F80411C2F81411C2F818113C4893 +:1057E0000068009001B07047012804BF282070476E +:1057F000022804BF18207047042812BF08284FF45D +:10580000A870704700B5FFDF282000BD012804BF45 +:1058100041F6A4707047022804BF41F288307047F7 +:10582000042804BF45F63C207047082804BF47F20F +:10583000AC10704700B5FFDF41F6A47000BD012831 +:1058400004BF41F2D4707047022804BF41F2040043 +:105850007047042812BF082842F6A000704700B520 +:10586000FFDF41F2D47000BD012812BF02280020E2 +:105870007047042812BF08284FF4C870704700B55D +:10588000FFDF002000BD11490820C1F800021249C5 +:1058900010480860124911480860091D1148086045 +:1058A000091D11480860091D1048086006494FF499 +:1058B0004020086070470000C4510200D45102002B +:1058C000E45102000080004004F501400010004057 +:1058D000181100400000040408F5014000110040C8 +:1058E000A0F50140141000401C11004010100040B1 +:1058F00010B53F4822210FF0ACF93D48017821F066 +:1059000010010170012107F0D9FD3A49002081F80A +:1059100022004FF6FF70888437490880488010BD08 +:10592000704734498A8C824218BF7047002081F842 +:1059300022004FF6FF70888470472D490160704740 +:105940002D49088070472B498A8CA2F57F43FF3B85 +:1059500003D0002101600846704791F822202549B4 +:10596000012A1ABF0160012000207047214901F17E +:10597000220091F82220012A04BF00207047012252 +:1059800002701D4800888884104670471A49488074 +:1059900070471849184B8A8C5B889A4206D191F857 +:1059A0002220002A1EBF016001207047002070479E +:1059B0001048114A818C5288914209D14FF6FF71EB +:1059C000818410F8221F19B1002101700120704755 +:1059D000002070470748084A818C5288914205D1BF +:1059E00090F8220000281CBF00207047012070475B +:1059F000820A00205C0A0020BA0000207047574A43 +:105A0000012340B1012818BF7047137008689060E7 +:105A100088889081704753700868C2F802008888AF +:105A2000D08070474D4A10B1012807D00EE0507861 +:105A300060B1D2F802000860D08804E0107828B184 +:105A40009068086090898880012070470020704726 +:105A5000424910B1012803D006E0487810B903E0AC +:105A6000087808B1012070470020704730B58DB02C +:105A70000C4605460D2104A80FF00DF9E0788DF8CD +:105A80001F0020798DF81E0060798DF81D002868B0 +:105A9000009068680190A8680290E86803906846E2 +:105AA0000DF026FF20789DF82F1088420CD16078E9 +:105AB0009DF82E10884207D1A0789DF82D108842BD +:105AC00002BF01200DB030BD00200DB030BD30B59B +:105AD0000C4605468DB04FF0030104F1030012B1EE +:105AE000FEF72AFA01E0FEF746FA60790D2120F070 +:105AF000C00040F04000607104A80FF0CCF8E078DE +:105B00008DF81F0020798DF81E0060798DF81D003A +:105B10002868009068680190A8680290E86803907F +:105B200068460DF0E5FE9DF82F0020709DF82E00D0 +:105B300060709DF82D00A0700DB030BD10B500292B +:105B400004464FF0060102D0FEF7F6F901E0FEF739 +:105B500012FA607920F0C000607110BDBE00002014 +:105B600070B5FF4E0446306890F8001100250129F9 +:105B700019D090F8FA10012924D090F8D0100129FA +:105B80002AD090F8F21001291CBF002070BD65706A +:105B900017212170D0F8F4106160B0F8F81021815D +:105BA00080F8F25016E065701C212170D0F80111C8 +:105BB0006160D0F80511A16090F80911217380F897 +:105BC000005107E0657007212170D0F8FC1061607A +:105BD00080F8FA50012070BD65701421217000F129 +:105BE000D2012022201D0EF0B5FF01212172306864 +:105BF00080F8D050DB48B0F8D420A0F8FC207268C0 +:105C0000537B80F8FE3080F8FA101088FBF75EF9BD +:105C1000FAF705FEDEE7D248006890F8D0100029B8 +:105C200014BFB0F8D4004FF6FF70704770B5CC4C7D +:105C30002068002808BFFFDF002520684570002885 +:105C400008BFFFDF2068417800291CBFFFDF70BD5F +:105C50004FF486710FF01FF82068FF2101707F213B +:105C600080F8361013214184282180F8CC100121BE +:105C700080F8B81080F8BD50FFF736FBFEF74BFDFB +:105C8000B94807F0A7F9B94807F0A4F9BDE8704092 +:105C9000B74807F09FB9B2490968097881420CBF3B +:105CA000012000207047AE48006890F82200C0F341 +:105CB000001070472DE9F04FA948D0F800C09CF8BB +:105CC0002400C0F38001C0F34002114400F0010041 +:105CD0000B18BCF822000025C0F3001139B31328BB +:105CE0001DD009DC102802BFA24830F81300BDE81F +:105CF000F08F122813D006E0152808D01D2804BF05 +:105D00009D48BDE8F08FFFDF2846BDE8F08F9B4936 +:105D1000002031F8131013FB0010BDE8F08F9849F4 +:105D2000002031F8131013FB0010BDE8F08F0024A1 +:105D30009CF8BA209CF8BB10924EDFF84CA2DFF81A +:105D40004CB210F0030F4FF4C8774FF4BF784FF404 +:105D5000A8797CD010F0010F17D0082904BF3C4669 +:105D600040200CD0042904BF4446102007D002294B +:105D700007BF05F11804042005F12804082000EBF2 +:105D8000400E0EEB0010204417E0082904BF3846EF +:105D900040240CD0042904BF4046102407D0022917 +:105DA00007BF05F11800042405F12800082404EBBE +:105DB000C40404EB440400EB44009CF8CCC0022A69 +:105DC00008BF4FF47A740DD0012A04BF56464FF431 +:105DD000C86407D0042A07BF5E4640F698046C4E9C +:105DE00040F6E444344404F2E7364FF47A74B6FBE8 +:105DF000F4F4C3EB031606EB860604EB8604082ACC +:105E000052D0042A4BD0022A0CBF05F1180605F126 +:105E100028064FF019020CBF4FF0040A4FF0080A91 +:105E200012FB0A6212FB0342082908BF40230BD071 +:105E3000042908BF102307D0022907BF4FF0180913 +:105E400004234FF028090823C3EBC30300E030E02C +:105E500003EB430309EB43031A4411F00C0F08BF93 +:105E60004FF0000C6244082908BF40210CD00429DF +:105E700004BF4746102107D0022907BF05F11807C4 +:105E8000042105F128070821C1EBC10101EB410103 +:105E900007EB41011144084400F526740EE0464624 +:105EA00014224FF0100ABBE73E4614224FF0400A7E +:105EB000B6E710F0020F18BFFFDF02D02046BDE8A2 +:105EC000F08F022A08BF4FF47A700DD0012A04BF68 +:105ED00056464FF4C86007D0042A07BF5E4640F616 +:105EE00098002B4E40F6E440304400F2E73C4FF47B +:105EF0007A70BCFBF0F0C3EB031C0CEB8C0C00EBDA +:105F00008C0C082A04BF142040220CD0042A44D050 +:105F1000022A0CBF05F1180705F128074FF01900F8 +:105F20000CBF0422082210FB027010FB03C00829DA +:105F300008BF40210BD0042908BF102107D0022937 +:105F400007BF4FF0180904214FF028090821C1EBC1 +:105F5000C10101EB410109EB410108441AE00000D5 +:105F6000CC000020A40A0020B00B0020D80B002099 +:105F7000000C002018520200F18913002052020088 +:105F80001052020068360200A2240200D0FB010079 +:105F900030D3010000F5B27490E714204746102278 +:105FA000C1E7F94840F271210068806A48437047B0 +:105FB000F548006890F83500002818BF01207047A8 +:105FC00010B5F24C207B022818BF032808D1207D91 +:105FD00004F1150105F0E8FD08281CBF012010BDE3 +:105FE000207B002816BF022800200120BDE81040B9 +:105FF000FFF72EBDE449096881F8300070472DE9AC +:10600000F047E14D2968087B002816BF02280020D0 +:10601000012048730E31FFF705FD2968087B02282F +:1060200016BF03280122002281F82F20082081F8C2 +:106030002D00487B0126002701F10E03012804BF33 +:106040005B7913F0C00F0AD001F10E03012804D1CF +:10605000587900F0C000402801D0002000E0012065 +:1060600081F82E00002A04BF91F8220010F0040FDE +:1060700006D0087D153105F097FD296881F82D00BF +:1060800028684760FCF720FF2968C04C4FF00009E2 +:10609000886094F82D0005F0A3FD804694F82F0049 +:1060A000002818BFB8F1000F04D01021404606F0B8 +:1060B000D4FB68B194F8300000281CBF94F82E007F +:1060C00000281DD0607B04F10E0101280ED012E0E3 +:1060D00066734A4604F10E014046FFF7F8FC94F857 +:1060E0002D1004F10E0005F074FE09E0487900F06F +:1060F000C000402831D0394604F10E00FFF71EFDE4 +:106100002868C77690F8220010F0040F08BFBDE899 +:10611000F087002794F82D0005F06BFD040008BF00 +:10612000BDE8F087102106F098FB002818BFBDE8F5 +:10613000F08728683A4600F11C01C6762046FFF732 +:10614000C6FC286800F11C01914806F07AFFBDE802 +:10615000F04701218E4806F08FBF05F073FE4A46D6 +:1061600004F10E01FFF7B3FCCAE778B5874904468E +:10617000854D407B08732968207808706088ADF8E9 +:10618000000080B200F00102C0F3400342EA430283 +:10619000C0F3800342EA8302C0F3C00342EAC302B1 +:1061A000C0F3001342EA0312C0F3401342EA431261 +:1061B000C0F3801042EA80104884E07D012808BFC7 +:1061C000012607D0022808BF022603D0032814BFE7 +:1061D000FFDF0826286880F8BA60607E012808BFC3 +:1061E000012607D0022808BF022603D0032814BFC7 +:1061F000FFDF0826286880F8BB60217B80F8241028 +:10620000418C1D290CBF002161688162617D80F88D +:106210003510A17B002916BF02290021012101753B +:10622000D4F80F10C0F81510B4F81310A0F8191016 +:10623000A17EB0F8CE2061F30302A0F8CE20E17E6B +:10624000012918BF002180F83410002078BD4E4885 +:106250000068408CC0F3001119B110F0040F05D094 +:1062600002E010F0020F01D00020704701207047BB +:10627000454A00231268C2F8C030B2F822C0BCF10F +:106280001D0F02BFC2F8C83082F8C4307047002921 +:1062900008BFC2F8C8300AD0936A40F2712C03FBE1 +:1062A0000CF31944491EB1FBF3F1C2F8C81082F88F +:1062B000C40070470346344810B50168D1F8C820BF +:1062C000002A1ABFD1F8C0C0BCF1000F012405D0CC +:1062D0009A4205D90124D01AC1F8C800204610BD41 +:1062E00091F82210002411F0010F1CBF40680088B3 +:1062F0004FF0430108BF002001F017F9EEE72248F4 +:10630000006890F8B70000280CBF012000207047FB +:1063100070B51F2834BF04461F2400221A4D286878 +:1063200080F8B920224678300EF014FC286801214C +:1063300080F8974080F8B91070BD10B51F2828BFAD +:106340001F20C2B2104C0023206880F8B83080F8BB +:10635000B72098300EF0FEFB2168012081F8B800CC +:1063600010BD0949096881F8BD00704706480068FA +:1063700090F8220000F0010070470348006890F890 +:106380002200C0F340007047CC000020A40A002087 +:10639000B00B0020FE48006890F82200C0F34010C7 +:1063A0007047FB48006890F82200C0F3C0007047B7 +:1063B00001207047F648006890F8BB00704770B540 +:1063C000FEF77CFFFEF730FFFEF760FEFEF7BDFE36 +:1063D000EF4C2068D0F8C010491CC0F8C01090F8ED +:1063E0003300002530B1FEF77FFFFEF794F92068F7 +:1063F00080F833502068457090F8C410F9B1D0F897 +:10640000C02091421BD8042002F08AFA206890F83C +:10641000220010F0010F0CD060684321008801F0C9 +:1064200084F860680088FAF751FDBDE87040FAF71B +:10643000E7B9BDE870404321002001F076B8D0F8FC +:10644000C81019B1D0F8C020914202D990F8370095 +:10645000D8B1042002F064FA206890F8220010F00D +:10646000010F0CD060683C21008801F05EF8606884 +:106470000088FAF72BFDBDE87040FAF7C1B9BDE816 +:1064800070403C21002001F050B8BDE87040002071 +:1064900002F046BA2DE9F84FBD4E804617463068E7 +:1064A0008B464FF0000A458C15F0030F10D015F005 +:1064B000010F05F0020005D0002808BF4FF0010AC7 +:1064C00006D004E0002818BF4FF0020A00D1FFDF19 +:1064D0004FF000094C4615F0010F05F002000BD0FB +:1064E00070B915F0040F0BD049F00800002F18BF49 +:1064F00040F0030440D090E010B115F0040F0DD02F +:1065000015F0070F10D015F0010F05F0020036D07E +:10651000002808BF15F0040F27D03DE0002F18BF5A +:1065200049F0090479D134E02FB149F0080415F09D +:10653000200F14D071E0316805F0200291F8770047 +:10654000104308BF49F0010467D049F0180415F062 +:10655000200F62D191F8BA1008295AD156E031685B +:1065600091F8BA10082951D153E049F00800002FE2 +:1065700018BF40F0010450D140F010044DE0002855 +:1065800018BF15F0040F07D0002F18BF49F00B04F7 +:1065900043D149F0180440E015F0030F3CD115F049 +:1065A000040F39D077B1316849F0080091F8BA107A +:1065B00008290CBF40F0020420F0020415F0200F5F +:1065C00022D02AE0316805F0200291F877001043CC +:1065D00008BF49F0030420D049F0180015F0200F3F +:1065E00009D000BF91F8BA10082914BF40F0020486 +:1065F00020F0020411E091F8BA20082A14BF40F0FC +:10660000010020F00100EDE7082902D024F0010488 +:1066100003E044F0010400E0FFDF15F0400F18BF75 +:10662000FFDFA8F8009098F80000072120F0200074 +:1066300088F80000404606F0D2FC5146404606F07D +:10664000D1FE2146404606F0D6FE14F0010F0CD0D4 +:106650003068062300F10E010022404606F0A8FE35 +:106660003068417B404606F0FAFC14F0020F1BD064 +:106670003068BBF1000F0BD000F11C010623012292 +:10668000404606F095FE0121404606F0F5FC0BE081 +:1066900000F1150106230122404606F089FE30680C +:1066A000017D404606F0E8FC14F0040F18BFFFDF40 +:1066B00014F0080F17D0CDF800903068BDF8001026 +:1066C0000223B0F8CE00020962F30B01ADF800100E +:1066D0009DF80110032260F307118DF8011069463F +:1066E000404606F065FE012F16D1306890F877001D +:1066F00090B1404606F072FE3368401CC0B293F879 +:106700007710C0F125008142B8BF084682B203F17C +:106710005801404606F09DFE0020002818BFFFDF0C +:106720000020002818BFFFDF0020002818BFFFDF6F +:10673000BDE8F88F2DE9F843154C2068002808BF04 +:10674000FFDF2068417811BB0178FF2926D00027A0 +:1067500080F83170877080F837703846FEF703FD97 +:10676000FEF7E5F9206890F9BD00FEF770FA0948D8 +:10677000FEF777FA0848FEF7E2FC206890F824005C +:1067800010F0010F0DD02520FEF773FA10E005E0A0 +:10679000CC0000200C520200095202000C20BDE87F +:1067A000F88310F0020F18BF262067D0FEF761FAB9 +:1067B000206890F8BA102520FEF779F9206880F853 +:1067C0002C70FEF7CAFC2068002190F8BA20084619 +:1067D000FEF779FB0F210520FEF70DFA2068FF4D2B +:1067E000012690F82E10002901BF90F82F100029E3 +:1067F00090F8220010F0040F70D0FCF765FB804683 +:10680000206841468068FDF76DF8F54990FBF1F985 +:1068100001FB190041424046FCF75FF80146206841 +:10682000816041684944416005F0BBF90146206838 +:10683000426891426DD8C0E901784FF0010895F89F +:106840002D0005F0CDF9814695F82F00002818BFDE +:10685000B9F1000F04D01021484605F0FEFFA0B1A9 +:1068600095F8300000281CBF95F82E00002824D091 +:10687000687B05F10E01012815D019E010F0040F16 +:1068800014BF2720FFDF91D192E732466E7305F1E6 +:106890000E014846FFF71BF995F82D1005F10E0083 +:1068A00005F097FA09E0487900F0C000402816D0BA +:1068B000414605F10E00FFF741F9206890F82200EB +:1068C00010F0040F25D095F82D0005F092F95FEA3D +:1068D00000081ED0102105F0C0FF40B119E005F0FE +:1068E000B1FA324605F10E01FFF7F1F8E5E720684D +:1068F000324600F11C01C6764046FFF7E8F82068F2 +:1069000000F11C01B74806F09CFB0121B54806F0D8 +:10691000B3FB2068417B0E30FEF751F9206890F8F8 +:10692000B81079B390F8B72080F8772000F198017B +:1069300058300EF054F9206890F82210C1F300117D +:10694000E9B9B0F8CE0002210609ADF8006068464A +:10695000FDF7F2FA28B1BDF80000C0F30B00B04219 +:1069600004D1BDF80000401CADF800002168BDF85E +:106970000000B1F8CE2060F30F12A1F8CE202068FD +:1069800080F8B870206890F8B91059B190F8972045 +:1069900080F8572000F1780138300EF020F9206897 +:1069A00080F8B9702068B0F8CE10D0F8C02009097E +:1069B00051FA82F190F8BC20DFF82CC211446346F2 +:1069C0000022E1FB0C3212096FF0240302FB0311D9 +:1069D00080F8BC1090F82210824E90F81B80C1F312 +:1069E000001106F1280900295DD03780317821F0A7 +:1069F00020013170408C132837D01CDC10284DD07A +:106A0000122846D0FFDF00BF05F10E01754806F0E1 +:106A10000AFB697B734806F022FB2068418C1D2924 +:106A200018BF15297ED090F8772000F15801304624 +:106A300006F04BFB7EE0152818BF1D28E2D101218E +:106A4000304606F0CCFA3078B8F1000F40F0200064 +:106A50003070206812D000F11C01304606F0F1FAC7 +:106A60000121304606F008FBCEE70021304606F053 +:106A7000B6FA307840F020003070C5E700F115011B +:106A8000304606F0DEFA2068017D304606F0F4FA62 +:106A9000BAE70621304606F0A2FAB5E702213046F1 +:106AA00006F09DFAB0E7002241463046FFF7F2FCBF +:106AB000206890F87710002904BF408C10F0010F77 +:106AC00005D110F0020F08BF10F0200F04D00122F2 +:106AD00041464846FFF7DEFCF07810F03F0F1CBF40 +:106AE000307910F0100F25D0304606F076FA226883 +:106AF000014692F82400C0F38003C0F3400C6344C5 +:106B000000F00100034492F82C00C0F38002C0F3AF +:106B1000400C624400F001001044181AC0B200F0AA +:106B200018FD00E006E00090032304226946304689 +:106B300006F03EFC206890F82200C0F30010B0B1CF +:106B40002A4E04213046378006F049FA05F10E013D +:106B5000304606F068FA697B304606F080FA206815 +:106B600000F1380190F85720304606F0D2FA05F0CF +:106B70008DF803211E4805F01CF9216881F83300C7 +:106B80000020BDE8F8831B49486070472DE9F843B1 +:106B9000184C8046206890F8312032B1408C1D2876 +:106BA00008BFFFDFBDE8F84309E4012631B390F8E0 +:106BB000BC00FEF75EF8206890F8BB102520FDF7BA +:106BC00076FF206801224FF4967190F8BB300020C8 +:106BD000FEF7ABF90848FEF7C9FA10E0A40A002056 +:106BE00040420F00B00B002053E4B36E000C0020B5 +:106BF000280C0020CC000020D80B002006E02068E4 +:106C00004670867080F83160BDE8F883F948FEF779 +:106C1000ADFA2068002590F8241090F82C0021EAA5 +:106C2000000212F0010F18BF01250ED111F0020F62 +:106C300004D010F0020F08BF022506D011F0040F97 +:106C400003D010F0040F08BF04250027B8F1000F8F +:106C50005CD0012D1CD0022D08BF26201CD0042D95 +:106C600014BFFFDF272017D0206890F8BA10252026 +:106C7000FDF71DFF206890F82210C1F3001171B1DB +:106C8000002201234FF496711046FEF74EF93DE0C5 +:106C90002520FDF7EEFFE7E7FDF7EBFFE4E790F8CF +:106CA000BA3001224FF496710020FEF73EF9D14828 +:106CB000C17811F03F0F1CBF007910F0100F25D0E4 +:106CC000CC4806F08AF92368014693F82420C2F3E1 +:106CD0008000C2F3400C604402F0010200EB020CA1 +:106CE00093F82C20C2F38000C2F34003184402F052 +:106CF00001020244ACEB0200C0B200F02AFC00909A +:106D0000032304226946BB4806F052FB206890F832 +:106D10002C10294380F82C1090F8242032EA01012D +:106D200011D04670408C132820D01BDC102808BFDF +:106D3000BDE8F883122819D0C0F30010002818BF4E +:106D4000FFDFBDE8F883418C1D2908BF80F82C7057 +:106D5000E7D0C1F30011002914BF80F8316080F83A +:106D60003170DEE7152818BF1D28E5D1BDE8F843CE +:106D700001210846FEF7F0BA9F4810B50068417837 +:106D800041B90078FF2805D000210846FFF7FEFE34 +:106D9000002010BDFEF792FAFEF746FAFEF776F9EC +:106DA000FEF7D3F90C2010BD93490120096881F842 +:106DB000370070479049096881F83200704770B514 +:106DC000002601F01DFC002800F0C4808A4C2068D9 +:106DD000417801220025012905D0022901D003298B +:106DE00070D0FFDF70BD81780225B1B390F822002A +:106DF00010F0030F67D08148FEF7B8F92068012230 +:106E0000962190F8BB301046FEF78FF8216891F874 +:106E1000BB0091F8CC1010F00C0F08BF0021962099 +:106E2000FEF7BFF92068457090F8330058B1FDF7C0 +:106E30005EFC206890F8BB0010F00C0F0CBF4020E7 +:106E40004520FEF747FA206890F83400002808BF74 +:106E500070BDBDE87040FEF75CBA418CC1F3001212 +:106E60009AB1102929D090F8330020B1FDF73FFCEA +:106E70004020FEF72FFA6148FEF778F9206890F875 +:106E8000221011F0040F1FD029E090F8242090F870 +:106E90002C309A4211D190F87700002808BF11F0E9 +:106EA000010F05D111F0020F08BF11F0200F51D0D2 +:106EB000BDE870400121084668E6BDE87040002149 +:106EC000012063E619E045E090F83500012814BF81 +:106ED0000328102646F00E010020FEF73DFA206838 +:106EE00090F83400002818BFFEF713FA002196200E +:106EF000FEF757F92068457070BD817801B3418C69 +:106F000011F0010F21D080F8D02090F8D210B0F805 +:106F1000D40000F00AFB60680088F9F7D7FFF9F7A2 +:106F20006FFC20684570FEF7C9F9FEF77DF9FEF7A2 +:106F3000ADF8FEF70AF9BDE87040032001F0F0BC9F +:106F40008178BDE87040012020E611F0020F04BFF7 +:106F5000FFDF70BDBDE87040FFF731BAFFF72FBA11 +:106F600010B5254C206890F8341049B13630FEF742 +:106F7000DBF918B921687F2081F83600FEF7BFF9E8 +:106F8000206890F8330018B1FEF7AEF9FDF7C3FBA7 +:106F900001F036FBA8B1206890F82210C1F300116F +:106FA00079B14078022818BFFFDF00210120FFF7E8 +:106FB000EDFD2068417800291EBF40780128FFDFE1 +:106FC00010BDBDE81040FFF7FAB92DE9F0470A4FB0 +:106FD0000E4603283A68518C12D092F8320001F024 +:106FE000010410F1000918BF4FF001094FF001082A +:106FF0000CE00000B00B0020CC000020280C00208A +:10700000C1F340044FF000094FF00208FDF721FEE4 +:10701000054634EA090008BFBDE8F0873868FF4C30 +:1070200090F8330060B104F016FE30700146FF287E +:1070300006D0E01C04F004FE307804F017FE05438F +:107040002078C0F380113868027D914209D100F1A7 +:1070500015010622E01C0DF051FD002808BF01209B +:1070600000D000203178FF2906D0C0B9386890F8E8 +:107070002D00884215D112E098B12078E11CC0F3B0 +:10708000801004F091FD064604F0F4FE38B130465D +:1070900004F0AFFD18B1102105F0DFFB08B10120AD +:1070A00000E00020396891F8221011F0040F01D09F +:1070B000F0B11AE0CDB9DA4890F83500002818BFD1 +:1070C000404515D114F8030B2146C0F3801004F09D +:1070D0006BFD044604F0CEFE38B1204604F089FD75 +:1070E00018B1102105F0B9FB10B10120BDE8F087FF +:1070F0000020BDE8F0872DE9F04FCA4D804683B0EF +:10710000286800274078022818BFFFDF28687F24FE +:1071100090F8341049B13630FEF706F9002804BF64 +:10712000286880F83640FEF7EAF8BC4805F077FF9B +:107130000646B8F1000F00F0B081B84806F008F933 +:10714000002800F0AA81FDF752FD002800F0A5817B +:107150003046B24EFF21DFF8D0A24FF000084FF0CA +:10716000030B4FF00109062880F0B881DFE800F03A +:10717000FEFEFE03FE8F8DF8001069460320FFF728 +:1071800024FF002828687CD090F8341011B190F8C2 +:10719000001159B12868807801283ED0A348FDF736 +:1071A000E5FF286880F801B000F07BB99DF8003059 +:1071B00080F80091017880F80111FF2B10D000F2C7 +:1071C0000312511E184604F01DFD002808BFFFDF02 +:1071D000286890F8021141F0020180F802110DE0D8 +:1071E0003178C1F3801180F802118D49D1F88721DF +:1071F000C0F80321B1F88B11A0F80711286800F23C +:10720000091690F836007F2808BFFFDF286890F83D +:107210003610317080F83640BCE7844CDAF80490C0 +:1072200004F12806A4F800800721204605F0D7FEC7 +:107230000021204606F0D6F84946204606F0DBF845 +:107240000623002206F10901204606F0B1F828685D +:10725000417B204605F003FF286800F1380190F8D3 +:107260005720204606F0F5F82046FDF77FFF2868F6 +:107270000122962190F8BB300020FDF756FE90E7E2 +:10728000FFE78078002840F00A8100F006B98DF809 +:10729000081002A90520FFF798FE0028286800F0D2 +:1072A000F78082786249002A7ED0A1F11F066C68BF +:1072B00090F8BB90D6F80F00C4F80E00B6F8130093 +:1072C0006082707D2075B07D6075B6F81700E08231 +:1072D000B6F819006080B6F81B00A080B6F81D0053 +:1072E000E08004F108000DF0EBFD96F8240000F0BA +:1072F0001F00207696F82400400984F86C0184F879 +:10730000549084F85590286890F8CC1084F8561062 +:1073100090F8BD0084F857009DF80810686800F0E8 +:1073200081F9022001F0FCFAA6F12804DAF80090B5 +:10733000A4F800800821204605F051FE00212046D7 +:1073400006F050F84946204606F055F869463046A2 +:1073500005F07EFE304605F098FE0146204605F019 +:107360007EFE062300226946204600E0B6E006F0D5 +:107370001FF86946304605F05DFE304605F078FEA0 +:107380000146204605F078FE062301226946204684 +:1073900006F00EF82046FDF7E9FE28680122962146 +:1073A00090F8BB30002000E005E0FDF7BEFD286846 +:1073B00080F801B075E06C683278184E607BC2F3DB +:1073C000401210406073D6F80F00C4F80E00B6F8F3 +:1073D00013006082707D2075B07D6075B6F817006F +:1073E000E082B6F819006080B6F81B00A080B6F8FD +:1073F0001D00E0804FF0010A04F108000DF060FD6F +:1074000096F8240000F01F00207696F8240040092A +:1074100084F86C0184F854A00CE00000280C0020D3 +:10742000A40A0020CC00002004520200000C00201E +:10743000470C002084F855A0286890F8CC1084F8F8 +:10744000561090F8BD0084F857009DF80810686841 +:1074500000F0E8F8286880F8D09090F8D210B0F8E2 +:10746000D40000F062F868680088F9F72FFDF9F79A +:10747000C7F9286880F80180FDF720FFFDF7D4FEEA +:10748000FDF704FEFDF761FE012001F049FA08E076 +:1074900090F82200C0F3001008B1012701E0FEF7C8 +:1074A0008EFF286890F8330018B1FDF71DFFFDF737 +:1074B00032F91FB100210120FFF768FB28684178ED +:1074C000002919BF4178012903B0BDE8F08F407849 +:1074D000032818BFFFDF03B0BDE8F08F286890F8DD +:1074E0002200C0F300100028D9D0D6E770B58A4C2E +:1074F00006460D462068807858B1FDF789FA216864 +:107500000346304691F8BB202946BDE8704001F0A3 +:1075100074BAFDF77DFA21680346304691F8BA2027 +:107520002946BDE8704001F068BA7C4A137882F8B9 +:10753000F530A2F8F60082F8F410012082F8F2008B +:1075400092F8C400002818BF92F8C00082F8F80032 +:10755000704778B50446704800230093006890F89F +:10756000BA20082A04BF4FF4C87240230DD0042A61 +:1075700004BF4FF4BF72102307D0022A07BF03F1E4 +:107580001802042303F128020823491D01FB0326E6 +:1075900090F8BC209DF8001062F3050141F0400511 +:1075A0008DF8005090F8BB00012826D002282BD07F +:1075B000082818BFFFDF2DD025F080008DF80000CF +:1075C000C4EB041106FB04F001EB810100EB810424 +:1075D0005348844228BFFFDF5248A0FB0410BDF887 +:1075E0000110000960F30C01ADF80110BDF80000B6 +:1075F0009DF8021040EA014078BD9DF8020020F09D +:10760000E0008DF80200D7E79DF8020020F0E000CE +:10761000203004E09DF8020020F0E00040308DF8BA +:107620000200C9E72DE9F0413B4D04460E462868AB +:1076300090F8D000002818BFFFDF0027286880F8E6 +:10764000D2702188A0F8D4106188A0F8EA10A1882F +:10765000A0F8EC10E188A0F8EE1094F86C1180F816 +:10766000F01090F82F1049B1427B00F10E01012A71 +:1076700004D1497901F0C001402935D090F830108B +:1076800041B1427B00F10E01012A04BF497911F09A +:10769000C00F29D0DE300DF001FC2348FF2E00780A +:1076A000C0F3801060761D48D0F88711C4F81A1016 +:1076B000B0F88B01E08328681ED0C0F8E410E18B9D +:1076C000A0F8E81000F1D802511E304604F09AFAF2 +:1076D000002808BFFFDF286890F8D71041F00201AA +:1076E00080F8D710BDE8F081D0F80E10C0F8DE1099 +:1076F000418AA0F8E210D0E7C0F8E470A0F8E87082 +:10770000617E80F8D710D4F81A10C0F8D810E18B39 +:10771000A0F8DC10BDE8F081CC000020A40A002015 +:10772000C4BF030089888888280C0020FE48406870 +:1077300070472DE9F0410F460646014614460120E8 +:1077400005F082FA054696F85500FEF75FF8014607 +:1077500096F85500022808BFF44807D0012808BF52 +:10776000F34803D004280CBFF248F34808444FF410 +:107770007A7100F2E140B0FBF1F0718840F27122C1 +:107780005143C0EB4100001BA0F5597402F0E4FD29 +:10779000002818BF1E3CAF4234BF28463846A042DE +:1077A00003D2AF422CBF3C462C467462BDE8F08148 +:1077B0002DE9FF4F8FB0044690F855601C9899460C +:1077C00040EA0900019094F86500002790460D28D2 +:1077D0000CBF012000200990B9F1000F04BF94F8FC +:1077E0000C0103282BD1099848B3B4F88E01404509 +:1077F00025D1D4F81401C4F80001608840F2E241B8 +:107800004843C4F80401B4F85A11B4F8E600084437 +:10781000C4F80801204602F0A9FDB4F89201E08204 +:1078200094F890016075B4F894016080B4F8960102 +:10783000A080B4F89801E080022084F80C01D4F80C +:1078400064010C90B4F8E6A0B4F85801D4F860B123 +:10785000D4F854110891B9F1000F03D094F8201115 +:1078600049B193E004F1E001059174310A9104F506 +:10787000A075091D07E004F59A710591091D0A918B +:1078800004F59275091D0B91B4F85810A8EB00008F +:10789000A8EB010109B200B20391002805DAD4F87F +:1078A0005001089001200190084694F80C1100291D +:1078B00071D0012900F04482022900F0658103297A +:1078C00018BFFFDF00F0848239460898FBF705F8FF +:1078D0000A99012640F2712208600B98A0F80080F6 +:1078E000002028702E710A980068A8606188D4F87A +:1078F00014015143C0EB41009049A0F54D708861DF +:107900004969814287BF059908600598016005981B +:10791000616A0068084400F5D270E86002F01CFD5E +:1079200010B1E8681E30E8606E71B4F8D000A0EBCA +:10793000080000B20028C4BF03206871099800281D +:107940001C9800F0C282C0B1B4F8F81000290CBF36 +:107950000020B4F8FA00A4F8FA0094F8FC20401CC7 +:107960005043884209D26879401E002805DD6E71B7 +:10797000B4F8FA00401CA4F8FA00B9F1000F00F0C6 +:10798000C78294F82001002800F0BE8213B00220C4 +:10799000BDE8F08FFFE7BBF1000F08BFFFDF94F8F1 +:1079A0005510614890F8280005F0FBFA0790E08A2E +:1079B00040F271214143079800EB410210980021E9 +:1079C000002806D000FB02F15D48B1FBF0F000F1A9 +:1079D0000101C4F81011608840F2E24100FB01F29D +:1079E00010994FF0000006D0554801FB02F1B1FBA1 +:1079F000F0F000F10100C4F8140186B221464FF006 +:107A00000100D4F828A005F01FF9074694F85500A6 +:107A1000FDF7FCFE014694F85500022808BF4348D4 +:107A200007D0012808BF424803D004280CBF4148B2 +:107A30004148084400F2E1414FF47A70B1FBF0F1A3 +:107A4000608840F271225043C1EB4000801BA0F5DA +:107A5000597602F081FC002818BF1E3EBA4534BF9B +:107A600038465046B04203D2BA452CBF56463E4631 +:107A7000666294F85500FDF7F7FE4FF47A7600F24F +:107A8000E140B0FBF6F000EB0B0794F85500FDF772 +:107A9000EBFE024694F85500022808BF234907D0A0 +:107AA000012808BF224903D004280CBF21492249DC +:107AB00002EB010AFDF7AAFE504400F2DB514FF43D +:107AC0007A70B1FBF0F0E18A40F271224A430799E3 +:107AD000D4F810A101EB4201081AA0EB0A003844C7 +:107AE000A0F12007607D40F2E24110FB01F0079019 +:107AF00094F8556016F00C0F18BF4DF6883103D17D +:107B00003046FDF783FE0146022E08BF074807D026 +:107B1000012E08BF064803D0042E0CBF05480648B6 +:107B2000084400F2E1410DE0500C00200436020050 +:107B3000A2240200D0FB0100C0D40100D400002028 +:107B400040420F004FF47A70B1FBF0F000EB4A01B5 +:107B5000079801EB000A3046FDF746FE504400F15D +:107B60006201FD48416194F85500FDF77DFE00F289 +:107B7000E1414FF47A70B1FBF0F05844381AB0F597 +:107B80003D7F38BFFFDF9FE6E28A40F27121D4F8E3 +:107B90000401514300EB410210980021002806D057 +:107BA00000FB02F1ED48B1FBF0F000F10101C4F877 +:107BB0001011618840F2E24001FB00F210994FF091 +:107BC000000006D0E54801FB02F1B1FBF0F000F146 +:107BD0000100C4F8140186B221464FF00100D4F828 +:107BE00028B005F031F8074694F85500FDF70EFE71 +:107BF000014694F85500022808BFD94807D001284B +:107C000008BFD84803D004280CBFD748D748084439 +:107C100000F2E1414FF47A70B1FBF0F0618840F27C +:107C200071225143C0EB4100801BA0F5597602F050 +:107C300093FB002818BF1E3EBB4534BF384658464C +:107C4000B04203D2BB452CBF5E463E466662BAF1E7 +:107C5000000F2FD11C9868B394F855603046FDF79B +:107C6000D5FD0146022E08BFBD4807D0012E08BF32 +:107C7000BC4803D0042E0CBFBB48BC48084400F2EB +:107C8000E1414FF47A70B1FBF0F0D4F81011E38ABF +:107C9000014440F27122D4F804015A4300EB42003F +:107CA000471A3046FDF7A0FD0C99081A3844A0F198 +:107CB00020070AE0E28A40F27121D4F8040151431E +:107CC00000EB4101D4F810010F1AD4F80821D4F8C0 +:107CD0001011D4F8000100FB021B607D40F2E2416C +:107CE00010FB01FA94F8556016F00C0F18BF4DF612 +:107CF000883103D13046FDF789FD0146022E08BFC9 +:107D0000974807D0012E08BF964803D0042E0CBF19 +:107D100095489648084400F2E1414FF47A70B1FB6F +:107D2000F0F000EB4B0082443046FDF75DFD50441F +:107D300000F1600188484161012084F80C01C3E52D +:107D4000618840F271235943D4F81421D4F800C15A +:107D5000C2EB410101FB00F70398D4F8081150442D +:107D6000401AD4F81031401E0CFB013100FB021BFD +:107D7000607D40F2E24110FB01FA94F8556016F084 +:107D80000C0F18BF4DF6883103D13046FDF73EFD8C +:107D90000146022E08BF724807D0012E08BF714865 +:107DA00003D0042E0CBF70487048084400F2E14133 +:107DB0004FF47A70B1FBF0F000EB4B008244304698 +:107DC000FDF712FD504400F16001634841617BE51D +:107DD000628840F27123D4F814115A43C1EB420176 +:107DE00001FB00F794F8640024281CBF94F8650098 +:107DF00024280BD1B4F88E01A8EB000000B20028B3 +:107E000004DB94F89101002818BF0646019870B36E +:107E1000BAF1000F2BD10C98002814BFBBF1000F52 +:107E2000FFDF94F8550010F00C0F14BF4DF68830AA +:107E3000FDF7ECFC022E08BF494907D0012E08BF10 +:107E4000484903D0042E0CBF47494849084400F272 +:107E5000E1414FF47A70B1FBF0F03F1A94F855000D +:107E6000FDF7C2FC0C99081A3844A0F120070398CA +:107E7000D4F81411504400FB01FA16F00C0F18BF8F +:107E80004DF6883103D13046FDF7C0FC0146022E85 +:107E900008BF334807D0012E08BF324803D0042E54 +:107EA0000CBF31483148084400F2E1414FF47A7088 +:107EB000B1FBF0F000EB4A0A3046FDF795FC504468 +:107EC00000F1600124484161FEE400287FF43CADEC +:107ED00094F80C0100283FF450AD618840F2712203 +:107EE000D4F814015143C0EB4101284604F0D7FDFA +:107EF0000004000C3FF441AD1D99002918BF088013 +:107F0000012013B0BDE8F08F94F85C01FBF736FB5D +:107F100094F85C012946FBF71FFA00281CBF89F082 +:107F2000010084F82101002013B0BDE8F08F2DE995 +:107F3000F04F0F4C074683B020788946064E002547 +:107F40004FF00208032804BF207BB8427DD160684F +:107F50003061207803280DE0D400002040420F005B +:107F600004360200A2240200D0FB0100C0D40100AC +:107F7000500C002018BFFFDF0327B9F1080F78D29B +:107F8000DFE809F0040E1B1B167777726562FEF7B7 +:107F9000D1FB002818BFFFDFB77003B0BDE8F08F3A +:107FA000FEF7EAFE002818BFFFDF03B0BDE8F08F40 +:107FB00003B0BDE8F04FFDF7F3B92775257494F8C9 +:107FC0002C00012658B14FF47A71A069FAF785FCAC +:107FD000A061002104F1100004F061FD1AE001210C +:107FE0006846FBF79FFF9DF8000042F21071000207 +:107FF000B0FBF1F201FB1205FDF7D3FF0544294662 +:10800000A069FAF76AFCA061294604F1100004F0A7 +:1080100046FD461C208C411C0A293CBF304420846C +:10802000606830B1208C401C0A2828BF84F8158075 +:1080300000D267753046FEF73DF9002804BF03B053 +:10804000BDE8F08F607A002801E014E011E01CBF69 +:1080500003B0BDE8F08F207B04F11001FBF77CF941 +:10806000002808BFFFDFA0E7207BFAF70EFF25708E +:108070009BE7FFDF99E7202F28BFFFDFDFF804A48D +:1080800007213AF81700F8F7EFFD040008BFFFDFFB +:10809000202F28BFFFDFFB48218830F817008842D7 +:1080A00018BFFFDF01273461B9F1080F80F0548158 +:1080B000DFE809F0049EA6A6A1F0F0EFC4F8605135 +:1080C000F580C4F8645194F8210138B9FAF7FCFE40 +:1080D000D4F82C11FBF706FC00281BDCB4F81E11A9 +:1080E000B4F85800814206D1B4F8D410081AA4F8A4 +:1080F000D600204605E0081AA4F8D600B4F81E11F0 +:108100002046A4F85810D4F84811C4F82C11C0F82F +:1081100050111DE0B4F81C11B4F85800091AA4F865 +:10812000D610B4F81C112046A4F85810D4F82C111D +:10813000C4F84811C4F85011D4F83411C4F8E01050 +:10814000D4F83811C4F85411B4F83C11A4F85811FB +:1081500001F0B6FFFAF792FE94F855A0814650461A +:10816000FDF754FBBAF1020F08BFC74909D0BAF1B5 +:10817000010F08BFC54904D0BAF1040F0CBFC449B0 +:10818000C44908444FF47A7100F2E140B0FBF1F1C8 +:10819000D4F8140140F27122014460885043C1EBCD +:1081A0004000A0F1300AB9F1B70F98BF4FF0B709FE +:1081B0002146012004F048FD4844AAEB0000A0F24B +:1081C0001939A2462146012004F03EFDDAF82410B8 +:1081D0009C30814288BF0D1AC6F80C904D4538BFBF +:1081E000A946C6F8089084F8207186F80280DCE67B +:1081F00002F0ADF801E0FDF7D3F884F82071D4E681 +:10820000FAF762FED4F8502101461046FBF76AFBEC +:1082100048B1628840F27123D4F814115A43C1EB7B +:108220004201B0FBF1F094F865100D290FD0B4F8BD +:108230005820B4F81E1113189942AEBF481C401CB8 +:108240001044A4F81E0194F8220178B905E0B4F8AE +:108250001E01401CA4F81E0108E0B4F81E01B4F889 +:10826000D410884204BF401CA4F81E01B4F85A017F +:10827000DFF82492401CA4F85A01B4F88000B4F846 +:108280007E10401AB4F85810401E08441FFA80FBB4 +:1082900024E053E060E000BF96F80080B8F10C0FD6 +:1082A00028BFFFDF39F8188094F86CA1BAF10C0FE1 +:1082B00028BFFFDF39F81A000023404481B202A82A +:1082C000CDE90050B4F81E212046FFF771FA0028CE +:1082D0003FF46BAE012818BFFFDF27D0B4F81E01B2 +:1082E000ABEB000000B20028D6DA082084F8740056 +:1082F00084F87370204601F034FB84F80C5194F834 +:108300005C514FF6FF77202D00D3FFDF5D4820F84A +:10831000157094F85C01FAF7B8FD202084F85C0130 +:10832000307903B0BDE8F04FF3F764BDB4F81E0137 +:10833000BDF808100844A4F81E01CFE794F80C011A +:10834000042818BFFFDF84F80C5194F85C514FF6F5 +:10835000FF77202DDAD3D8E7FFDF26E610B54F4CA4 +:10836000207850B101206072FEF724FD20780328A8 +:1083700005D0207A002808BF10BD0C2010BD207B3E +:10838000FBF7FCF8207BFBF746FB207BFAF77DFD33 +:10839000002808BFFFDF0020207010BD2DE9F04F3E +:1083A0003E4F83B0387801244FF0000840B17C7212 +:1083B0000120FEF7FFFC3878032818BF387A0DD06B +:1083C000DFF8DC9089F8034069460720F8F7D5FB11 +:1083D000002818BFFFDF4FF6FF7440E0387BFBF743 +:1083E000CDF8387BFBF717FB387BFAF74EFD0028FA +:1083F00008BFFFDF87F80080E2E7029800281CBF73 +:1084000090F80C1100292AD00088A0421CBFDFF888 +:1084100074A04FF0200B4AD00721F8F725FC040088 +:1084200008BFFFDF94F85C01FBF7F5FA84F80C81D4 +:1084300094F85C514FF6FF76202D28BFFFDF2AF815 +:10844000156094F85C01FAF720FD84F85CB1694688 +:108450000720F8F792FB002818BFFFDF22E06846EC +:10846000F8F769FB0028C8D021E0029800281CBF5B +:1084700090F80C11002915D00088A0F57F41FF3934 +:10848000CAD114E0840C002004360200A2240200A9 +:10849000D0FB0100C0D4010028520200500C002083 +:1084A000D40000206846F8F746FB0028DDD089F8A4 +:1084B000038087F82C8087F80B8003B00020BDE88C +:1084C000F08F70B50446FD4890F80004FC4D40095B +:1084D00095F800144909884218BFFFDF95F8140D7C +:1084E0004009F84991F800144909884218BFFFDF94 +:1084F000F549002001220C7188700A704870C8701C +:10850000F2490870BDE8704048E7EF4908707047CD +:108510002DE9F843ED4C06468846207800285CD1CA +:10852000EB48FAF758FC2073202856D003276660E2 +:108530002770002565722572AEB1012106F1FC009D +:10854000FBF719FD0620F8F737FB81460720F8F7FF +:1085500033FB96F8FC104844B1FBF0F200FB12101C +:10856000401C86F8FC00FAF789FCDA49091838BF84 +:1085700040F2F65000F23D1086B2FDF79BFBE06141 +:10858000FDF70FFD4FF0010950B384F80A90012167 +:108590006846FBF7C7FC9DF8000042F2107100022C +:1085A000B0FBF1F201FB12000644FAF78DFC3146F4 +:1085B000FAF793F9A061277567752574207B04F19C +:1085C0001001FAF7C9FE002808BFFFDF258400204C +:1085D000FEF7F0FB0020BDE8F8830C20BDE8F8832F +:1085E000FAF772FC3146FAF778F9A061A57284F8BF +:1085F0002C90A8F226502063DDE7B34948707047FD +:10860000B24810B5417A0124002918BF002409D1CD +:1086100090F82C1031B1416A006B814284BF002474 +:10862000FEF7C2FB204610BD70B5A74C0546E0889A +:10863000401CE080D4E902016278D5F86061002A2C +:108640001CBF324604F053FAA060864208D895F861 +:108650000C01012804D0E078002804BF012070BD7F +:10866000002070BD70B50C4640F2E24100FB01F500 +:108670002046FDF7CBF8022C08BF974907D0012C04 +:1086800008BF964903D0042C0CBF9549954908446E +:108690004FF47A7100F2E140B0FBF1F000F54D705B +:1086A00085428CBF281A002070BD2DE9F04F83B0A1 +:1086B0004FF00009044680F8209190F8DE00002871 +:1086C00007BF94F80C01032803B0BDE8F08FFAF758 +:1086D000FBFBD4F8502101461046FBF703F90028B4 +:1086E000DCBF03B0BDE8F08F628840F27123D4F89C +:1086F00014115A43C1EB4201B0FBF1F0411CB4F834 +:1087000058000144A4F81C11B4F8D410B4F81C218A +:10871000891A09B20029DCBF03B0BDE8F08F01213E +:1087200084F82211B4F88010B4F87E206E4F891AB4 +:10873000491E084485B2DFF890A10DF1080B25E031 +:108740009AF800600C2E28BFFFDF37F8166094F807 +:108750006C81B8F10C0F28BFFFDF37F81800CDE9A6 +:10876000009B3044B4F81C2181B201232046FFF75E +:108770001FF8002804BF03B0BDE8F08F01280FD018 +:10878000022812BFFFDF03B0BDE8F08FB4F81C0170 +:10879000281A00B20028BCBF03B0BDE8F08FCFE7B5 +:1087A000B4F81C01BDF808100844A4F81C01EDE75A +:1087B0002DE9F0430422002583B006297DD2DFE8AD +:1087C00001F0074B03191951044680F80C2107E00A +:1087D00004463D48C178002918BF84F80C210CD00C +:1087E000FAF77EFAA4F85A51B4F85800A4F81E011A +:1087F00084F8225103B0BDE8F08306780C2E28BF20 +:10880000FFDF394F94F80C0137F816604FF001097B +:10881000032807D00128E3D194F86C81B8F10C0F3C +:108820000AD308E0C4F80851C4F8005194F86C81E8 +:10883000B8F10C0F00D3FFDF37F81800CDE9009531 +:10884000304481B2B4F8D42000232046FEF7B0FFB4 +:10885000002818BFFFDFC3E7032180F80C1103B025 +:10886000BDE8F0830546876AB0F81401294686B250 +:10887000012004F0E9F9044695F85500FCF7C6FF1D +:1088800095F85510022908BF134907D0012908BFE0 +:10889000124903D004290CBF1149124908444FF46E +:1088A0007A7100F2E140B0FBF1F0698840F2712288 +:1088B0005143C0EB4100801B18E02DE001E000E0D7 +:1088C0000BE000E019E000E0D4000020500C002094 +:1088D0002F7F01000AFAFFFF04360200A2240200E3 +:1088E000D0FB0100C0D4010028520200A0F5597647 +:1088F00001F032FD002818BF1E3EA74234BF2046BB +:108900003846B04228BF344602D2A74228BF3C4670 +:108910006C6203B0BDE8F083FFDF03B0BDE8F08315 +:10892000F8B5894C0246874F00256168606A052AC0 +:1089300048D2DFE802F0032F34373E00A07A002649 +:1089400060B101216846FBF7F7FA9DF8000042F29A +:1089500010710002B0FBF1F201FB1206FDF721FBE2 +:108960008119A069F9F7B9FFA0612574032060752A +:10897000607A38B9207B04F11001FAF7EDFC002889 +:1089800008BFFFDF2584FAF7ABF93879BDE8F84076 +:10899000F3F730BABDE8F840002100F06DB8C1F837 +:1089A0006001F8BDD1F86001BDE8F840012100F098 +:1089B00063B884F82C50FAF793F93879BDE8F84099 +:1089C000F3F718BAFFDFF8BD70B55E4CA178022945 +:1089D00006BFE188002970BD2569C5F8640195F8D6 +:1089E0005500FCF701FFD5F86411081AA16801448D +:1089F000A160E1680844E06070BD70B5054651486B +:108A000090F802C0BCF1020F06BF006900F5B07417 +:108A10004E4C002904BF256070BD4FF47A760129C1 +:108A20000DD002291CBFFFDF70BD1046FCF707FF09 +:108A300000F2E140B0FBF6F0281A206070BD184645 +:108A4000FCF712FF00F2E140B0FBF6F0281A2060BC +:108A500070BD3D48007800281CBF0020704710B54D +:108A60000720F8F79BF880F0010010BD3648007829 +:108A7000002818BF012070472DE9F047324C82B022 +:108A8000002584F82C50D4F8188084F82810E5725A +:108A900081462570012727722946606803F082FB12 +:108AA0006168C1F85081267B81F85C61C1F86091F2 +:108AB000C1F85481B1F80080202E28BFFFDF244880 +:108AC00020F81680646884F80C51DFF87880A4F8E8 +:108AD000585198F800600C2E28BFFFDFDFF8749023 +:108AE00039F816A094F86C610C2E28BFFFDF39F816 +:108AF00016000023504481B200951A462046019585 +:108B0000FEF756FE002818BFFFDFC4F80851C4F86E +:108B1000005184F80C71A4F81E51A4F81C5184F87B +:108B20002251B4F85800401EA4F85800A4F85A5135 +:108B3000FAF7D6F898F8040002B0BDE8F047F3F76A +:108B400059B90000D4000020500C0020740C002003 +:108B5000840C00202852020070B5FE4C21690A885E +:108B6000A1F8FC2181F8FA0191F85400012808BF0E +:108B7000012508D0022808BF022504D0042816BF0A +:108B800008280325FFDF206980F8FE5190F8550082 +:108B9000012808BF012508D0022808BF022504D0FB +:108BA000042816BF08280325FFDF2069012180F86B +:108BB000FF5180F8F811002180F8A4112079BDE858 +:108BC0007040F3F717B92DE9F04FE24C83B0A0796C +:108BD00010F0010F04BF03B0BDE8F08FA0690123BE +:108BE0000521C578206990F86520583003F0EDFE26 +:108BF00068B1A81E0A2806D2DFE800F009090505B9 +:108C0000090905050909A07840F00800A070A078BE +:108C100000281CBF03B0BDE8F08FA0694FF0200909 +:108C20004FF00208C778002F1CBF012F162F1DD14F +:108C3000206990F8640003F0B1FEB8B1216991F8A1 +:108C400064001F2812D0202808D0162F0CBF84F8EB +:108C5000029084F8028003B0BDE8F08F262081F8EE +:108C60006400162F1CBF2A20FFF776FF47F6FE7A16 +:108C7000012600254FF0280B0C2F00F03B8109DC6A +:108C800080F05F84DFE807F05A3923CCFDFDFCFB60 +:108C9000FAFD9CC3152F00F046820DDC112F00F069 +:108CA000C783122F00F0C081132F00F0B081142F62 +:108CB00000F0CE8100F045BC162F00F06782182F1F +:108CC00000F0CC82FF2F00F0358400F03ABC206920 +:108CD0000123194690F86720583003F076FE0028EB +:108CE00040F03184A06904F081FC216981F87201AF +:108CF000072081F8670000F026BC206901230021CD +:108D000090F86520583003F060FE002800F0C98319 +:108D1000A06904F068FC2169A1F88E01B1F858201F +:108D2000801A00B28245A8BF002843DD01F5C87152 +:108D3000A06904F053FC0B20216937E0206901236E +:108D4000002190F86520583003F03FFE002800F025 +:108D5000A883A06904F01EFC002800F0F283A0693B +:108D60002169B0F80D20A1F88E21B1F85830D21A3F +:108D700012B29245A8BF002A1CDD027981F8902129 +:108D8000B0F80520A1F8922104F0F7FB2169A1F8C1 +:108D90009401A06904F0F4FB2169A1F89601A0698F +:108DA00004F0F5FB2169A1F898010D2081F8650018 +:108DB00000F0C9BB81F874B081F8736000F0C3BBE8 +:108DC00020690123002190F86520583003F0FDFD53 +:108DD000002820690CD0A0F88A5090F88C10491C0B +:108DE00080F88C105FF0100180F8651000F0ABBBCC +:108DF00090F8652001230521583003F0E6FD002896 +:108E00001CBF0820A07040F09E8300F04ABB206980 +:108E100090F86510112908BF122140F0A082E3E705 +:108E200020690123002190F86520583003F0CDFD22 +:108E300080B9206990F86520122A0BD00123052102 +:108E4000583003F0C2FD002818BF082000F0298325 +:108E500000F099B9206990F88E1031B9A0F88A50C5 +:108E600090F88C10491C80F88C1000F1E801A06982 +:108E700004F0D5FB206900F1C00103E0A4E0F6E2B4 +:108E800023E05EE3A06904F0D5FB206990F8C001FF +:108E9000002818BFFFDF20690188A0F8C21100F583 +:108EA000E271A06904F0A9FB206900F5E671A069F0 +:108EB00004F0ABFB206980F8C061142180F86510D4 +:108EC0002079F2F797FF00F03EBB206990F865101B +:108ED000172940F0448290F88C10491E49B280F85E +:108EE0008C100029B8BFFFDF1B20216981F86500C5 +:108EF00000F029BB206990F8661011F0020F09D02C +:108F000090F8642001230821583003F05EFD00280A +:108F100000F0C782206990F8900010F0020F14D181 +:108F2000A06904F09BFB216981F89100A069B0F869 +:108F30000520A1F89220B0F80700A1F8940091F85C +:108F4000900040F0020081F89000206990F89010A5 +:108F500002E00000F000002011F0010F05D02069B0 +:108F600090F8641006291CD114E090F8660010F007 +:108F7000020F18BFFFDF206990F8661041F0020170 +:108F800080F86610A0F88A5090F88C10491C80F880 +:108F90008C10E4E780F8645080F888502079F2F76C +:108FA00029FF206990F88C11042940F0CC8280F8C8 +:108FB0008C512079F2F71EFF206990F86410002987 +:108FC00040F0C18200F031BA206990F8660010F0DC +:108FD000010F77D16946A06904F047FB9DF80000B6 +:108FE00000F02501206980F896109DF8011001F02D +:108FF000410180F89710A0F88A5090F88C10491C15 +:1090000080F88C1090F8661041F001011CE0206996 +:109010000123092190F86420583003F0D6FC002881 +:1090200040F0378200F03DBA206990F8661011F0E8 +:10903000040F40F03682A0F88A5090F88C2041F05E +:109040000401521C80F88C2080F8661000F07BBA76 +:10905000206990F8660010F0300F33D1A06904F059 +:1090600021FB002800F06D822769A06904F016FB3F +:1090700038872769A06904F00DFB78872769A06904 +:1090800004F00EFBB8872769A06904F005FBF88798 +:10909000A07910F0020F03D06069C078142812D0B4 +:1090A000206990F864101C290DD090F84E10012909 +:1090B0000CD090F89B11002904BF90F89A11002958 +:1090C0000CD003E05CE0206980F84E60206990F8E5 +:1090D000661041F0100180F866101AE090F86610F2 +:1090E00041F0200180F866100288A0F8E021028F8C +:1090F000A0F8E221428FA0F8E421828F00F5D6711A +:10910000A0F8E621C08F888781F832602079F2F7D5 +:1091100071FE2069A0F88A5090F88C10491C80F8E4 +:109120008C1000F010BA206901230A2190F8642005 +:10913000583003F04AFC18B3A06904F0B3FAA8B1A0 +:109140002669A06904F0AAFA30872669A06904F0AC +:10915000A1FA70872669A06904F0A2FAB08726698F +:10916000A06904F099FAF08701F000FB206980F80B +:10917000885080F8645000BF01F0C8FA00F0E3B9ED +:10918000A07840F00100A07000F0DDB92069012353 +:109190000B2190F86520583003F017FC20B100BF78 +:1091A00084F8029000F0CFB920690123002190F8E3 +:1091B0006520583003F009FC002800F07281206916 +:1091C00090F864002428EBD0A06904F086FA002807 +:1091D00000F0B781206990F8961041F0040180F802 +:1091E0009610A1694A7902F0070280F851200979A6 +:1091F00001F0070180F8501090F8A531002B04BF52 +:1092000090F8A431002B1CD190F855C000F1540304 +:109210008C4502BF1978914280F87D6011D000F52D +:10922000D67180F8F2610288A0F8F42190F85020FD +:1092300080F8F62190F8510081F84B002079F2F780 +:10924000D9FD2069212180F86510A0F88A5090F896 +:109250008C10491C80F88C1000F075B9206990F8CA +:109260006410202914BF0027012790F865102229D7 +:1092700008BF00F1650804D0002F18BF00F1640892 +:109280006DD090F8961041F0040180F89610A06916 +:1092900004F045FAF0B3D4F81890484604F033FAD5 +:1092A0000090484604F033FA814603F042FD010085 +:1092B00018D0206990F854208A4213D090F8A43135 +:1092C00023B190F8A63113EA090F4BD0002F04BF49 +:1092D00090F8513013EA090F01D18A4242D890F830 +:1092E000A401B8B1DDF80090484603F022FD78B142 +:1092F000216991F8552082420AD091F8A40120B149 +:1093000091F8A70110EA090F2CD091F8A40108B137 +:109310006A4600E026E0A169206903F019FDE8B380 +:10932000A06904F0FAF92169A1F88E01B1F858207A +:10933000801A00B28245A8BF0028DCBF81F874B053 +:1093400081F873605CDD9DF8000081F890019DF864 +:10935000010081F89101242088F8000050E084F891 +:109360000280F0E0206990F8A40100281CBF1E20B4 +:10937000FFF7F2FBB7B1A0692169C07881F8CA0094 +:1093800006FA00F010F0807F08BFFFDF0A21206995 +:1093900080F8641090F88800002800E014E008BF0E +:1093A000FFDF0DE088F80050206990F88C10491E0E +:1093B00049B280F88C100029B8BFFFDF01F08BF9AB +:1093C000206980F87D50BEE0226992F8A40170B156 +:1093D000B2F8583092F85410B2F8A80102F5C772EA +:1093E00003F0A8FDD8B12169252081F86400206927 +:1093F00000F1650180F87D50884508BF80F8655010 +:10940000206900F1650188450FD190F88C10491E44 +:1094100049B280F88C100029B8BFFFDF93E000202C +:10942000FFF79AFB88F80050E1E780F888508AE05F +:10943000206990F8961041F0040180F89610A06918 +:1094400004F089F916287ED1206990F8640020285C +:1094500002D0262805D076E0A06904F080F9FFF755 +:109460007BFB206980F8645080F888506BE02069AD +:1094700090F864200E2A03D1A1690979122902D03B +:109480001C2A1AD10FE001230921583003F09DFA5C +:1094900038B1206980F87C5080F8885080F864509A +:1094A00051E0A6704FE0A1690979142904BF80F842 +:1094B000645080F888503FF45FAE202A03D1A16940 +:1094C0000979162914D0262A03D1A1690979162908 +:1094D0000ED0A1690979172904BF90F86520222AC6 +:1094E00013D0E2691AB1FF2908BF80F886612AE02B +:1094F00080F8645080F8885090F86500212818BFE3 +:109500001A2020D0FFF728FB1DE080F8655090F866 +:109510008C10491E49B280F88C100029B8BFFFDFBB +:10952000206980F87D5090F8A401002818BF002021 +:1095300009D0E7E7E06900281CBF206980F8866150 +:1095400001D101F0C8F82069D0E92A12491C42F182 +:109550000002C0E92A1203B0BDE8F08F70B5FB4EDF +:1095600005460C46306990F8CB00FE2818BFFFDF97 +:1095700032690020002C82F8CB501CBFA2F88A0070 +:1095800070BDA2F88400012082F8880070BD30B55B +:1095900085B005466846FCF7D6F9002808BFFFDF0E +:1095A000222100980BF055FB0321009803F09AFF4D +:1095B0000098017821F010010170294603F0C0FFE6 +:1095C000E24C0D2D04BF0621009830D00BDCA5F134 +:1095D00002000B2819D2DFE800F0201863191926C1 +:1095E000187018192C00152D7BD008DC112D2DD0EA +:1095F000122D18BF132D09D0142D30D005E0162DD3 +:1096000046D0172D6BD0FF2D6AD0FFDFFCF7AEF9E7 +:10961000002808BFFFDF05B030BD2069009990F831 +:10962000CC000871F2E72169009891F8CC10017123 +:10963000ECE7E26800981178017191884171090A9C +:1096400081715188C171090A0172DFE70321009815 +:1096500004F07FF80621009804F07FF8D6E720692F +:10966000B0F84410009804F005F82069B0F84610EE +:10967000009804F003F82069B0F84010009804F056 +:1096800001F82069B0F84210009803F0FFFFBDE731 +:109690002069009A90F8A611117190F8A7014BE08B +:1096A000206900F1F001009803F0C8FF206900F183 +:1096B000C401009803F0CCFFA8E7A549D1E9000157 +:1096C000CDE90201206902A990F8960000F025007A +:1096D0008DF80800009803F0F6FF97E701E019E025 +:1096E0002CE02069B0F84010009803F0CBFF20690F +:1096F000B0F84210009803F0C9FF2069B0F8441098 +:10970000009803F0B7FF2069B0F84610009803F006 +:10971000B5FF7BE7206990F8A41139B1009990F862 +:10972000A6210A7190F8A70148716FE7009A90F896 +:109730005410117190F85500507167E7206990F846 +:109740008721D0F88811009803F008FF5EE770B514 +:109750000C4605464FF4007120460BF09CFA25801C +:1097600070BDF7F78ABB2DE9F0410D46074607218A +:10977000F7F77AFA040008BFBDE8F08194F8AC016D +:109780000026B8B16E700920287094F8AC0178B149 +:10979000268484F8AC61D4F8AE016860D4F8B201D4 +:1097A000A860B4F8B601A88194F8AC010028EFD104 +:1097B0002E7144E094F8B801002837D094F8B8012D +:1097C0000D2818D00E2818BFFFDF38D12088F7F7F2 +:1097D0007DFB0746F7F729F8A0B96E700E202870B8 +:1097E00094F8BA0128712088E88084F8B861384676 +:1097F000F7F715F823E02088F7F768FB0746F7F737 +:1098000014F810B10020BDE8F0816E700D202870B2 +:1098100094F8BA0128712088E88094F8BE01287273 +:1098200084F8B8613846F6F7FAFF08E094F8F001DA +:1098300040B16E701020287084F8F061AF80012074 +:10984000BDE8F08194F8C00190B16E700A202870D4 +:109850002088A880D4F8C401D4F8C811C5F806003F +:10986000C5F80A10B4F8CC01E88184F8C061E6E7D5 +:1098700094F8CE0140B16E701A202870B4F8D0016F +:10988000A88084F8CE61DAE794F8EA0180B16E70BE +:109890001B20287094F8EA010028D0D084F8EA61EF +:1098A000D4F8EC01686094F8EA010028F6D1C6E724 +:1098B00094F8D2012F1DA0B16E701520287094F875 +:1098C000D201002818BF04F5EA75B8D084F8D26137 +:1098D000294638460BF0EBFA94F8D2010028F5D16E +:1098E000ADE794F8DE0150B16E701D20287084F849 +:1098F000DE6104F5F07138460BF0D9FA9FE794F871 +:10990000F20138B11E20287084F8F261D4F8F40115 +:10991000686094E794F8F801002808BFBDE8F0817A +:109920006E701620287094F8F801002887D000BFC8 +:1099300084F8F861D4F8FA016860B4F8FE0128816F +:1099400094F8F8010028F3D179E70000F000002036 +:1099500040520200FE4AD0600020D06110621171B6 +:109960007047002180F8641080F8651080F8681056 +:1099700090F8DE1011B10221FEF71ABF0321FEF7A5 +:1099800017BF2DE9F047F24C814686B020690D469D +:109990000088F7F7ADFA070008BFFFDFA07828437B +:1099A000A070A0794FF0000510F0200F20691CBFB7 +:1099B000A0F87E5080F8E45004D1B0F87E10491C25 +:1099C000A0F87E102069012690F86A1039B990F845 +:1099D000652001230621583002F0F7FF48B3E088E4 +:1099E00010F4006F07D0206990F86A10002918BFA2 +:1099F000A0F876501DD12069B0F87610491C89B2C4 +:109A0000A0F87610B0F878208A422CBF531A0023B1 +:109A1000B4F808C00CF1050C634598BF80F87C6071 +:109A2000914206D3A0F8765080F8F0612079F2F7E1 +:109A3000E1F9A0794FF0020A10F0600F11D020690F +:109A400090F8681011B1032906D00AE080F8686028 +:109A50000121FEF7ADFE04E080F868A00121FEF7C9 +:109A6000A7FE206990F86810012905D1E18811F45A +:109A7000807F18BF80F868A04FF00808B9F1000F88 +:109A800040F09981E28812F4007F18BFA0F8F850E6 +:109A900004D1B0F8F810491CA0F8F81012F0080F23 +:109AA00050D0A17800294DD190F8CB00FE2808BFF6 +:109AB000FFDFFE21206980F8CB1090F8651019298E +:109AC00007D0206990F864101F2911D027292AD0C7 +:109AD0002FE080F88D5090F88C10491E49B280F824 +:109AE0008C100029B8BFFFDF206980F86550E8E7D7 +:109AF00090F8650002F052FF80B120692621012311 +:109B000080F8641090F865200B21583002F05DFF5A +:109B1000002804BF2A20FFF71FF80AE0216920204F +:109B200081F8640005E080F8856180F8645080F871 +:109B30008850206990F86710082904BF84F800A0B5 +:109B400080F8CBA0FFF73FF8A07910F0040F07D002 +:109B5000A07828B9206990F86700072808BF267008 +:109B600000F038FCA07910F0100F09D0A07838B9B7 +:109B7000206990F865100B2904BF0C2180F865104E +:109B8000E07810F0080F11D020690123052190F82A +:109B90006520583002F019FF28B184F8028020694E +:109BA00080F8B85102E0002001F02AFBE0690028AB +:109BB0005BD000950195029503950495206990F876 +:109BC0005500FBF723FE4FF47A7100F5FA70B0FBF5 +:109BD000F1FA206990F85500FBF706FE5044ADF805 +:109BE000060020690188ADF80010B0F85810ADF8F3 +:109BF00004104188ADF8021090F8860130B1A069D8 +:109C0000C11C039103F058FC8DF81000206990F8F6 +:109C100085018DF80800E16968468847206980F869 +:109C2000865180F885510399F9B190F88411E1B912 +:109C300090F86410272918D09DF81010039AA1B14C +:109C40001378FF2B06D0072B02BF02295178FF297A +:109C500002D00AE01B2908D880F884610399C0F873 +:109C600088119DF8101080F8871100F0CCFD01F0EC +:109C7000BDFA0028206918BFA0F8D85004D1B0F868 +:109C8000D810491CA0F8D81001F0B3FA40B12169EE +:109C900091F8E40002289CBF401C81F8E40004D83D +:109CA000206990F8E400022806D92069A0F8D8506D +:109CB000A0F8DA5080F8E45020690123002190F8E0 +:109CC0006520583002F081FE20B9206990F86500C7 +:109CD0000C285AD120690123002190F864205830C3 +:109CE00002F073FEB0B320690123002190F86720D1 +:109CF000583002F06AFE68B3206990F868100229B3 +:109D000004BF90F8E40000283FD13846F6F75DFB29 +:109D100000B3206990F8CB10FE2936D1B0F8D210EC +:109D2000012932D980F8DD60B0F88010B0F87E20CB +:109D30008B1E9A42AFBF0121891A491E89B2B0F821 +:109D4000D82023899A422EBF01229A1A521C02E07F +:109D5000F000002019E038BF92B2914288BF11464E +:109D6000012908BF80F8DD5090F868218AB1B0F869 +:109D7000DA20B0F86A0182422FBF0120801A401C0D +:109D800080B2814288BF014603E02069012180F84A +:109D9000DD502069B0F85820114489B2A0F8D410E1 +:109DA00090F86830002B18BF012B5DD0022B1CBF30 +:109DB000032BFFDF09D0E088C0F340200028206992 +:109DC00018BFA0F8E65059D151E090F86730082B41 +:109DD00021D0B0F87E10B0F8802000278B1C9A426A +:109DE00006D3511A891E0F043F0C1CBF791E8FB277 +:109DF00090F87C1051B190F864200123092158306B +:109E000002F0E3FD002808BF002729D0206990F860 +:109E10006A1089B908E0B0F87E30032B24D3B0F87B +:109E200080101144491C1FE090F865200123062191 +:109E3000583002F0CAFD78B121690020B1F87820CD +:109E4000B1F876108B1C9A4203D3501A801E18BFAB +:109E5000401EB84238BF87B2002F1CBF781E87B2A1 +:109E60002069B0F8D4103944A0F8D010A3E7B0F8B6 +:109E7000E610B0F8D6201144A0F8E610206990F85A +:109E8000701139B990F8672001231946583002F053 +:109E90009CFD38B12069B0F88210B0F8D62011448A +:109EA000A0F88210206990F8883033B1B0F884109F +:109EB000B0F8D6201144A0F8841090F98C20002A24 +:109EC00006DDB0F88A10B0F8D6C06144A0F88A1058 +:109ED0004FF03D0CB9F1000F18BF80F874C049D1A4 +:109EE0002178022911D0012908BF90F872113FD0C2 +:109EF000A17821B380F8736011F0140F18BF1E21F0 +:109F000009D000BF80F8741050E090F8CC100629FA +:109F100018BF16212CE011F0080F18BF80F874C08C +:109F200044D111F0200F18BF2321EBD111F0030F02 +:109F300008BFFFDF2A20216981F8740032E02BB1CD +:109F4000B0F88410B0F88630994210D2002A05DDAE +:109F5000B0F88A10B0F88620914208D2B0F882207A +:109F6000B0F880108A4208D390F870212AB12221DB +:109F700080F8741080F8736018E090F868203AB1A7 +:109F8000B0F87E208A4228BF80F87480F2D209E0BF +:109F9000B0F87E10062905D33E2180F8741080F8B1 +:109FA000736003E0206990F8731079B1206980F83C +:109FB000645080F8655080F8685090F8DE100029F1 +:109FC00014BF02210321FEF7F3FB02E00021FEF79C +:109FD000EFFB206980F8DE5006B0BDE8F047FBF7E4 +:109FE000E7BCF84902468878CB78184313D1084675 +:109FF00000694AB1897911F0080F03D090F8670021 +:10A00000082808D001207047B0F84810028E91420D +:10A0100001D8FEF709BB0020704770B5E94C054632 +:10A020000E46E0882843E08015F0020F04D015F0BA +:10A03000010F18BFFFDF666115F0010F4FF000023E +:10A040004FF001001AD0A661F178062902D00B2941 +:10A050000BD013E0216991F86530172B0ED1002346 +:10A06000C1E9283381F8690008E0216991F8653079 +:10A07000112B04BF81F8692081F88E0015F0020FC2 +:10A0800018D06169C978052902D00B290BD011E0DD +:10A09000216991F86520152A0CD10022C1E92A22F4 +:10A0A00081F86A0006E0206990F86510102908BF61 +:10A0B00080F86A2015F0800F1CBF0820E07070BD8A +:10A0C0002DE9F84FBF4C00254FF00108E580A57041 +:10A0D000E5702570206168F30709074680F8DE8087 +:10A0E0000088F6F705FF5FEA000A08BFFFDF206976 +:10A0F0000088FBF725FC20690088FBF747FC2069F6 +:10A10000B0F8D21071B190F8CB10FE290FD190F8B1 +:10A11000701189B190F8672001231946583002F078 +:10A1200054FC88B1206990F8CB00FE2804D0206947 +:10A1300090F8CB00FFF72BFA206990F8DF10002988 +:10A1400018BF25811BD10FE02069A0F8825090F83C +:10A15000711180F8CC1000210220FFF7FFF920696F +:10A1600080F8DD500220E5E790F8AC1129B9018CA8 +:10A170008288914288BF218101D881882181B0F8ED +:10A18000D610491E8EB2B0F8D8103144A0F8D810BD +:10A1900090F8DC1000291CBFA0F8DA5080F8DC50E1 +:10A1A00004D1B0F8DA103144A0F8DA10B0F87E101B +:10A1B0003144A0F87E1090F86A1039B990F8652003 +:10A1C00001230621583002F000FC28B12069B0F8C4 +:10A1D00076103144A0F876102069B0F8D210012929 +:10A1E0009CBF491CA0F8D210002E18BF80F8E45084 +:10A1F00090F8DD10A1B1B0F8D800218988420FD2C3 +:10A200005046F6F7E2F858B1206990F8681139B174 +:10A21000B0F8DA10B0F86A01814228BF00F0ECFF14 +:10A22000206980F8DD5090F865100B2918BF0C29C3 +:10A2300016D1B0F85820B0F88E31D21A12B2002AD6 +:10A240000EDBD0F89011816090F894110173022117 +:10A2500001F0A8FF206980F8655080F898804AE0F6 +:10A26000242924D1B0F85810B0F88E21891A09B2E7 +:10A2700000291CDB90F8A42190F89011002908BF58 +:10A2800090F8541080F8541090F89111002908BFEC +:10A2900090F8551080F85510002A1CBF0020FEF7DA +:10A2A0005BFC206980F8655080F87D5023E090F8D1 +:10A2B0006410242918BF25291DD1B0F85810B0F812 +:10A2C0008E21891A09B2002915DB90F89011002916 +:10A2D00008BF90F8541080F8541090F8911100299C +:10A2E00008BF90F8551080F855100020FEF734FC98 +:10A2F000206980F86450216901F15800B1F8D62036 +:10A3000002F026F9206990F86811002918BFA0F81A +:10A31000DA502D4800902D4B2D4A3946484600F022 +:10A32000B3FE216A00291CBF6078FAF789FF206913 +:10A330000123052190F86520583002F046FB0028E3 +:10A3400008BFBDE8F88FBDE8F84F00F08EBC00F004 +:10A3500033BF1C49C86170471A48C069002818BF3C +:10A3600001207047174A50701162704710B50446BB +:10A37000B0F894214388B0F89611B0F898019A4249 +:10A3800001BFA3889942E38898420FD02388A4F89C +:10A39000B031A4F8B221A4F8B411A4F8B601012098 +:10A3A00084F8AC0107480079F1F724FD012120462B +:10A3B00001F0F8FE002084F86500032084F86800AE +:10A3C00010BD0000F000002083990100E39F010010 +:10A3D0001BA0010070B5FE4CA07910F0020F08BF61 +:10A3E00070BDA078002818BF70BD6169F8482722A9 +:10A3F000CB780E26002500690D2B78D00BDCA3F15D +:10A4000002030B2B1FD2DFE803F0201E808B9F2F4F +:10A410001E591E73D100152B00F02A810BDC112B65 +:10A4200065D0122B00F0F480132B00F0FF80142B6A +:10A4300000F00E8107E0162B00F03281172B00F0A0 +:10A440003F81FF2B35D0FFDF70BD90F867200123DF +:10A450001946583002F0B9FA002818BF70BD08201C +:10A46000216981F8670070BD90F8643009790A2B82 +:10A4700001BF90F8CA308B4280F8645080F8885051 +:10A4800008BF70BD90F8663013F0080F0DD023F0B0 +:10A49000080180F8661090F88C10491E49B280F8C7 +:10A4A0008C100029A8BF70BDCFE0FF291CBFFFDFC3 +:10A4B00070BD80F8642080F8845170BD90F866000B +:10A4C00010F0010F08BFFFDF216991F88C00401EDA +:10A4D00040B281F88C000028B8BFFFDF206990F8F7 +:10A4E000661021F0010100BF80F8661070BD21E008 +:10A4F00090F86500102818BFFFDF0121206980F85F +:10A500008D10112180F8651070BD90F86500142839 +:10A5100018BFFFDF0121206980F88D101521F1E7B8 +:10A5200090F86500152818BFFFDF1720216981F812 +:10A53000650070BD90F86500152818BFFFDF192071 +:10A54000216981F8650070BD90F865001B2818BF6F +:10A55000FFDF206980F88D5090F8B801002818BFFF +:10A56000FFDF206990F88E1049B180F88E50018885 +:10A57000A0F8BC1180F8BA5180F8B8610AE00188EF +:10A58000A0F8BC1180F8BA51012180F8BE110D214C +:10A5900080F8B8110088F6F799FCF6F731F92079C0 +:10A5A000F1F728FC206980F8655070BD90F88C1197 +:10A5B000042915D0206990F8661011F0020F08BF29 +:10A5C00070BD90F88C10491E49B280F88C1000299B +:10A5D000B8BFFFDF206990F8661021F0020183E721 +:10A5E00090F8642001230021583002F0EEF9002891 +:10A5F00008BFFFDF206990F8901011F0020F07BF2D +:10A60000062180F8641080F8885080F88C51D1E7DA +:10A6100090F8642001230021583002F0D6F9002878 +:10A6200008BFFFDF206980F8646070BD90F8661095 +:10A6300021F0040180F8661090F88C10491E49B290 +:10A6400080F88C100029A8BF70BDFFDF70BD00BF6F +:10A6500090F8642001230021583002F0B6F9002858 +:10A6600008BFFFDF1C20216981F8640070BD00BFB6 +:10A6700090F8660000F03000102818BFFFDF206956 +:10A6800090F8661021F0100180F8661090F88C1098 +:10A69000491E49B280F88C100029A8BF70BDD4E7CC +:10A6A00090F8642001230021583002F08EF9002830 +:10A6B00008BFFFDF1F20216981F8640070BD00BF63 +:10A6C00090F8650021281CBF0028FFDF22202169A7 +:10A6D00081F8650070BD3E49086990F8662012F067 +:10A6E000080F1EBF01208870704742F0080280F8F2 +:10A6F00066208969C97880F8C9100021A0F88A10FD +:10A7000090F88C10491C80F88C10704710B5304CB4 +:10A7100005212069FEF74CF8206990F84E100129B8 +:10A7200002BF022180F84E1010BD00F5D6710288DC +:10A73000A0F8D421028EA0F8D621828EA0F8D821CC +:10A74000028FB0F844309A4228BF1A46CA85828FD9 +:10A75000B0F84600824238BF10460886012081F8D2 +:10A7600026002079BDE81040F1F744BB184830B40A +:10A77000006990F84E30B0F832C0C48EB0F8401086 +:10A78000428F022B28D08A4238BF11460186C28FE1 +:10A79000B0F842108A4238BF11468186028FB0F865 +:10A7A00044108A4238BF11464186828FB0F8461065 +:10A7B0008A4238BF1146C186418E614588BF8C46AA +:10A7C000A0F832C0C18EA14288BF0C46C48601E009 +:10A7D000F000002030BC7047038E9A4228BF1A4612 +:10A7E000C58F838E9D4238BF2B468A4238BF1146A3 +:10A7F0000186B0F842108B4228BF0B4683860021A9 +:10A8000080F84E10CAE770B5FD4C206990F8CB1067 +:10A81000FE2906BFA178002970BD90F867200123AA +:10A820001946583002F0D1F8002818BF70BD2069D1 +:10A83000002590F8701159B1A0F8825090F871116C +:10A8400080F8CC10BDE8704000210220FEF786BEE3 +:10A8500090F8652001230421583002F0B6F8060074 +:10A860000CD0D4F810C09CF86500102861D01428D2 +:10A8700065D015287BD01B287ED0BEE0216991F8D9 +:10A88000660010F0010F05D0BDE8704001210920DD +:10A89000FEF764BE10F0020F0BD001210C20FEF772 +:10A8A0005DFE206990F8901041F0010180F8901051 +:10A8B00070BD10F0040F05D0BDE8704001211320D9 +:10A8C000FEF74CBE10F0080F09D091F8C90081F8CE +:10A8D000CC00BDE8704001210720FEF73FBE10F01C +:10A8E000100F02D091F89B0120B191F8650021284A +:10A8F00073D179E091F89A0188B1B1F89C01A1F87F +:10A900004000B1F89E01A1F84200B1F8A001A1F801 +:10A910004400B1F8A201A1F8460081F89A51FFF76E +:10A9200025FFFFF7F3FEBDE8704001211520FEF77B +:10A9300015BEBDE8704001210B20FEF70FBEF9F7F0 +:10A94000F7FA0C2838BF70BD08212069F030F9F7FC +:10A95000F3FA28B120690421C430F9F7EDFA00B9FF +:10A96000FFDFBDE8704001210420FEF7F7BD9CF831 +:10A97000730101280DD000E030E0022818BF70BD3F +:10A980009CF88E00D8B106208CF8CC000121022062 +:10A990001DE09CF8B801002818BF70BD0CF1B00391 +:10A9A00000220CF1E8010CF5BA7001F08AFF0121D8 +:10A9B0000520FEF7D3FD206980F8735170BD9CF827 +:10A9C000960010F0040F14BF11200D200121FEF796 +:10A9D000C5FD206980F8735170BD0EE0BDE8704080 +:10A9E00001210620FEF7BABD91F87D00C0B991F8AB +:10A9F000A40110B191F8A50190B1206901230021B3 +:10AA000090F86420583001F0E0FFC8B120690123BC +:10AA1000042190F86520583001F0D7FF30B10FE0E5 +:10AA2000BDE8704001211720FEF798BD206990F81D +:10AA30007C0028B1BDE8704000211220FEF78EBDD9 +:10AA4000206990F864200A2A2BD0002E18BF70BD10 +:10AA500001230021583001F0B8FF48B1206990F877 +:10AA60008C11042904BF90F8900010F0030F22D03D +:10AA700020690123002190F86420583001F0A5FFDF +:10AA800000287DD0206990F89A1111B190F89B119F +:10AA9000E9B190F8A411002972D090F8A511E9B39A +:10AAA000BDE090F8CA1080F8CC10BDE870400021DD +:10AAB0000720FEF753BD00210C20FEF74FFD206953 +:10AAC00090F8901041F0010180F8901070BDB0F83E +:10AAD0009C11A0F84010B0F89E11A0F84210B0F8F8 +:10AAE000A011A0F84410B0F8A211A0F8461080F808 +:10AAF0009A5190F8660010F0200F13D0FFF736FE41 +:10AB0000FFF704FE01211520FEF728FD206990F8CB +:10AB1000661021F0200141F0100100E008E080F80B +:10AB2000661070BDBDE8704000211420FEF716BD10 +:10AB300090F8652001230B21583001F046FFF8B949 +:10AB4000206990F85400012808BF012508D0022888 +:10AB500008BF022504D0042816BF08280325FFDFFC +:10AB6000206990F85500012808BF01260BD0022863 +:10AB700008BF022607D0042814BF0828032600E0D7 +:10AB80004DE018BFFFDFD4F810C0012D9CF8A601DE +:10AB900006D0022D07D0032D08BF042805D014E0ED +:10ABA000012812D101E002280FD19CF8A701012E43 +:10ABB00006D0022E07D0032E08BF04280FD004E0D1 +:10ABC000012802D10BE0022809D09CF8652001235E +:10ABD00003210CF1580001F0F8FE00BB16E0BCF8B0 +:10ABE00058309CF85410BCF8A8010CF5C77202F05C +:10ABF000A1F938B12169252081F8640070BD0000F9 +:10AC0000F00000200020FDF7A7FF08E020690123E5 +:10AC1000022190F86520583001F0D7FEB0B12069CC +:10AC20000123002190F86420583001F0CEFE002866 +:10AC300008BF70BD206990F88401002808BF70BD6E +:10AC40000021BDE87040FF20FEF788BCBDE87040E1 +:10AC500000211620FEF782BC30B5FB4C054620785B +:10AC6000002818BFFFDF657230BDF7490120087268 +:10AC700070472DE9F14FF54F39464D68284695F854 +:10AC8000551001F048FF95F8551080B211F00C0FE7 +:10AC90006FF00D0B7DD0B0F5747F38BF002006D368 +:10ACA0005038C11700EB91600BEBA01080B26E8E94 +:10ACB000864228BF0646E648DFF88C93C9F8240090 +:10ACC000786800F15808044609F13400678E40683E +:10ACD00094F8551090F86AA0204601F01CFF94F8F3 +:10ACE000551080B211F00C0F69D0B0F5747F38BFE9 +:10ACF000002406D35038C21700EB92600BEBA01073 +:10AD000084B2A74238BF3C46BAF1000F1CBF201DD9 +:10AD100084B2E0B2F9F7E8FE98F81200002859D0A2 +:10AD200008F15801CA4891E80E1000F5027484E851 +:10AD30000E10D8F86810C0F82112D8F86C10C0F8BE +:10AD4000251200F58170FAF711FAC0480078002842 +:10AD50000CBF0120002080F00101BE480176D8E937 +:10AD60001412C0E90412A0F58372D9F82410F9F77F +:10AD700060FD95F85500012808BF00220ED002287A +:10AD800008BF01220AD0042808BF032206D00828E1 +:10AD900000E008E01ABFFFDF00220222F1B201202A +:10ADA000F9F762FD1CE0022919BF0BEBD00080B25D +:10ADB0006FF00E0101EB90007FF479AF76E7022986 +:10ADC00019BF0BEBD00084B26FF00E0202EB9000C3 +:10ADD00097D195E7D9F82400FAF7C8F9F9F767FD94 +:10ADE000009850B195F82C00012808BFFAF791FAA5 +:10ADF000022089F80000BDE8F88F012295F855304F +:10AE000096211046FAF791F895F8550095F85610E6 +:10AE100010F00C0F08BF00219620FAF7C2F9E1E705 +:10AE20002DE9F04FDFF8248283B0414681464D681A +:10AE3000A1F11400009095F85D0005F15806012776 +:10AE4000A1F1340470B3012878D0022877D0032808 +:10AE500018BFFFDF74D0206A0823017821F00801B1 +:10AE60000170B27903EAC202114321F004010170BA +:10AE7000F279042303EA8202114321F010010170E8 +:10AE800096F805B0E06AF5F7B0FA8246FAF7A2FD47 +:10AE9000BBF1020F79D0BBF1010F77D0BBF1030FEB +:10AEA00075D089E000F0CAFB0146284601F044FE57 +:10AEB0001FFA80FB00F0C2FB10F00C0F6FF00D01C9 +:10AEC0004FF0000A20D0BBF5747F38BF504607D33F +:10AED000ABF15000C21700EB926001EBA01080B202 +:10AEE000298E814238BF0846ADF80800A5F8480011 +:10AEF0000098FAF74EFD90B1216AA77062694FF48D +:10AF00008060904703202CE0022819BF01EBDB0092 +:10AF100080B26FF00E0000EB9B00E1D1DFE701AAE9 +:10AF200002A9E06AF5F79CF9206210B196F8351095 +:10AF300039B10098FAF701FD77718CE713E016E05C +:10AF400026E09DF8041031B9A0F800A080F802A016 +:10AF5000012102F0C7FABDF80810206A02F001FCD6 +:10AF60000220707177E70098FAF7E7FC73E7B5F80D +:10AF70004800ADF8000001AA6946E06AF5F770F9EB +:10AF80002062002808BFFFDF65E708E00BE00EE065 +:10AF90000098FAF7FEFC002808BFFFDF5BE730EA05 +:10AFA0000A0009D106E030EA0A0005D102E0BAF150 +:10AFB000000F01D0012100E00021206A027842EA5E +:10AFC00001110170717C00291CBF7179012943D0E6 +:10AFD00006F158011E4891E80E1000F5027A8AE841 +:10AFE0000E10B16EC0F82112F16EC0F8251200F5F6 +:10AFF0008170FAF7BBF898F8000000280CBF012117 +:10B00000002114480176D6E91212C0E90412A0F515 +:10B010008371226AF9F70DFC95F85400012808BFE6 +:10B0200000220CD0022808BF012208D0042808BF43 +:10B03000032204D008281ABFFFDF00220222FB21CE +:10B040000020F9F711FC0BE014010020480100205A +:10B05000C80C0020D00E0020FAF788F8F9F727FC7A +:10B06000B9F1000F06D195F8543001229621002045 +:10B07000F9F75BFF6771206A0188E18180782074AD +:10B08000277003B0BDE8F08F2DE9F0471C46174646 +:10B0900081460D46FE4EDDF82080307828B9002F1D +:10B0A0001CBF002CB8F1000F00D1FFDFC6F81C80D8 +:10B0B000C6E90574C6E90D9500243472F471347143 +:10B0C000F4707471B471B470B481F24F05F1580822 +:10B0D0002888F5F70DFFF0622888F5F7F7FE306352 +:10B0E000F9F725FD95F95700F9F7B1FD05F11200C3 +:10B0F000FAF725F805F10E00F9F7B3FD38780028C6 +:10B100000CBF03200120FAF72EF898F81A00F9F77F +:10B11000B0FDFAF722F83878002804BFFF2095F830 +:10B12000545023D098F81260B5F8328095F8551035 +:10B13000284601F0F0FC95F8555080B215F00C0F40 +:10B140006FF00D0126D0B0F5747F06D35038C217CA +:10B1500000EB926001EBA01084B24046A04528BFEE +:10B160002046002E1CBF001D80B2C0B22946F9F750 +:10B17000BBFC38782A464FF00001B0B10120F9F746 +:10B18000A2FE7868D0F8E000F9F7F3FFBDE8F047D9 +:10B1900001206EE5022D19BF01EBD00084B26FF0E3 +:10B1A0000E0101EB9000D8D1D6E70020F9F78BFE15 +:10B1B000BDE8F047012033E6B64800B501783438E1 +:10B1C000007819B1022818BFFFDF00BD012818BFA1 +:10B1D000FFDF00BDAE4810B50078022818BFFFDFC2 +:10B1E000BDE8104000F0CCBA00F0CABAA8484079D7 +:10B1F0007047A74800797047A549012088717047BA +:10B200002DE9F0470600A348A14D406800F158041D +:10B21000686A90F8019018BF012E03D1296B09F0DC +:10B22000BBF96870687800274FF00108A0B10128C9 +:10B230003CD0022860D003281CBFFFDFBDE8F087A8 +:10B24000012E08BFBDE8F087286BF5F7C3FA687ACE +:10B25000BDE8F047F0F7CEBD012E14D0A86A002853 +:10B2600008BFFFDF6889C21CD5E9091009F072FC2C +:10B27000A86A686201224946286BF5F727F9022E71 +:10B2800008BFBDE8F087D4E91401401C41F100017A +:10B29000C4E91401E079012801D1E77101E084F8E3 +:10B2A0000780687ABDE8F047F0F7A4BD012E14D0FE +:10B2B000A86A002808BFFFDF6889C21CD5E9091009 +:10B2C00009F048FCA86A686200224946286BF5F735 +:10B2D000FDF8022E08BFBDE8F087D4E91410491C20 +:10B2E00040F10000C4E91410E07901280CBFE771B7 +:10B2F00084F80780BDE8F087012E06D0286BF5F7AB +:10B3000069FA022E08BFBDE8F087D4E91410491C81 +:10B3100040F10000C4E91410E0790128BFD1BCE776 +:10B320002DE9F0415B4F3846A7F13404406800F145 +:10B3300058052078012818BFFFDFA878012648B1FA +:10B340000021A970A670626904209047387800280F +:10B3500018BF2E71206A0321007831EA000004BF73 +:10B36000E878002805D1EE70216AA6706269022093 +:10B3700090470121002000F022FA18B1BDE8F04109 +:10B3800000F0FEB9BDE8F041002072E42DE9F14F74 +:10B39000404E4FF000083046A6F134054068317841 +:10B3A00000F1580A2878C146022818BFFFDFA88993 +:10B3B00040F40070A88171683078FF2091F8541033 +:10B3C000F9F792FB009800289AF8120000F0FD802F +:10B3D000F9F792FAF9F780FA012788B99AF812007A +:10B3E00070B1686A417859B100789AF80710C0F3D3 +:10B3F000C000884204D1EF70BDE8F84F00F0C0B93A +:10B40000686A41786981002908BFC5F8288003D09F +:10B41000286BF5F715F8A862A88940F02000A881EC +:10B4200085F804803078706800F1580B044690F875 +:10B430002C0001281AD1F9F762FF5946204601F085 +:10B4400080FA98B13078002870680CBF00F58A70D7 +:10B4500000F5F570218841809BF8081001719BF878 +:10B46000091041710770687AF0F7C4FC686A9AF8AD +:10B4700006100078C0F3800088423BD030787068B6 +:10B4800000F1580490F85D0080B302284CD003E02E +:10B49000140100204801002084F80580307800283D +:10B4A0001CBF2079002806D084F80480AF706A6938 +:10B4B000414610209047E07890B184F80380FAF775 +:10B4C00077FA002808BFFFDF0820AF706A69002103 +:10B4D0009047D4E91202411C42F10000C4E9121065 +:10B4E000A07901280CBF84F80680A771A88940F4D0 +:10B4F0008070A881686A9AF807300178C1F3C002A9 +:10B500009A424FD13278726801F0030102F1580477 +:10B51000012918BF022932D003291CBFE87940F065 +:10B52000040012D0E8713DE0E86AF4F7C5FE002897 +:10B5300008BFFFDFD4E91210491C40F10000C4E944 +:10B540001210687AF0F756FCA1E701F0E3FF90B122 +:10B55000A770A989384641F40061A981696AAF7072 +:10B560006A699047E079012803D100BF84F8078019 +:10B5700018E0E77116E0E87940F01000D2E7407873 +:10B58000F8B1A98941F40061A981A96A51B1FB28E8 +:10B59000F1D8287A002808BFB94603D080206A690C +:10B5A000002190470120009900F009F9B0B1B9F1EC +:10B5B000000F1CBF0020FFF723FEBDE8F84F00F08E +:10B5C000DFB8E0790128D4D1D0E7002818BFF9F717 +:10B5D000CCF9A88940F04000A881E3E7B9F1000F59 +:10B5E0001CBF0120FFF70CFE0020FFF719FCB9F18A +:10B5F000000F08BFBDE8F88F0220BDE8F84FFFE557 +:10B6000070B50D4606468E488D4900784C6850B19D +:10B61000F9F7FEF9034694F8542029463046BDE870 +:10B620007040FDF7EAB9F9F7F3F9034694F85420AE +:10B6300029463046BDE8704005F088BF804830B4E8 +:10B6400090F800C04268406802F1580192F86450D6 +:10B6500090F85400242D1CBF4B7B242B24D00821B0 +:10B6600001241F2D18BF202D47D0222B1CBF30BC1A +:10B67000704700BFBCF1000F04BF30BC704792F8A8 +:10B68000A63192F851201A4012F0040F5FD008281A +:10B6900018BF04286ED0082918BF04296AD00128D1 +:10B6A00018BF012969D062E0BCF1000F12D092F8F6 +:10B6B0009011002904BF30BC7047082818BF042827 +:10B6C00058D0082918BF042954D0012818BF0129CF +:10B6D00053D04CE092F8F210002904BF30BC704700 +:10B6E000082818BF042845D0082918BF042941D0CC +:10B6F000012818BF012940D039E0222BBAD0BCF173 +:10B70000000F04BF30BC704792F8A62112F0040F5E +:10B710000CD0082818BF04282CD0082918BF0429E9 +:10B7200028D0012818BF012927D020E012F0010FEE +:10B7300018BF2146EDD112F0020F04BF30BC704794 +:10B74000082818BF042815D0012816D00FE012F0E1 +:10B75000010F18BF21469AD112F0020F04BF30BC6E +:10B760007047082818BF042804D0012805D030BC31 +:10B770000220704730BC0820704730BC0120704761 +:10B780002F4910B54C68F9F799FDF9F74DFDF9F718 +:10B790007DFCF9F7DAFCF9F78AF894F82C00012817 +:10B7A00008BFF9F7ACFD274C00216269A0899047DA +:10B7B000E269E179E07890470020207010BD70B513 +:10B7C000204C0546002908BF012D05D12079401CD9 +:10B7D000C0B22071012831D8A169284688470028C5 +:10B7E0002CD0A179184839B1012D01BF4178002929 +:10B7F000017811F0100F21D0E179F9B910490978D9 +:10B80000002908BF012D05D000290CBF012100210E +:10B81000294311D10D49097811F0100F04BF0078A8 +:10B8200010F0100F0AD0A07840B9A06A20B9608942 +:10B8300010B111F0100F01D0002070BD012070BDBB +:10B840004801002014010020C80C00202201002023 +:10B8500010B540F2C311F74809F0FBF9FF220821A7 +:10B86000F54809F0EEF9F548002141704FF4617197 +:10B87000418010BD2DE9F0410E46054600F046FB23 +:10B88000EC4C102816D004EBC00191F84A0110F0DE +:10B89000010F1CBF0120BDE8F081607808283CBF83 +:10B8A000012081F84A011CD26078401C60700120A0 +:10B8B000BDE8F0816078082813D222780127501C57 +:10B8C000207004EBC2083068C8F84401B088A8F8BA +:10B8D0004801102A28BFFFDF88F8435188F84A71D1 +:10B8E000E2E70020BDE8F081D2480178491E4BB262 +:10B8F000002BB8BF704770B45FF0000500EBC301C8 +:10B9000091F84A1111F0010F3BD04278D9B2521E82 +:10B91000427000EBC10282F84A5190F802C0002246 +:10B92000BCF1000F0BD9841894F803618E4202D148 +:10B93000102A26D103E0521CD2B29445F3D80278E3 +:10B94000521ED2B202708A421BD000EBC20200EB40 +:10B95000C10CD2F84341CCF84341D2F84721CCF88E +:10B960004721847890F800C00022002C09D986185D +:10B9700096F8036166450AD1102A1CBF024482F87A +:10B980000311591E4BB2002BB8DA70BC7047521C21 +:10B99000D2B29442EBD8F4E72DE9F05F1F4690460F +:10B9A0000E46814600F0B2FAA24D0446102830D06F +:10B9B000A878002100280ED96A1892F80331A34212 +:10B9C00005D110291CBF1220BDE8F09F03E0491CDF +:10B9D000C9B28842F0D8082834D2102C1CD0AE78D6 +:10B9E0001022701CA87005EB061909F103004146EE +:10B9F00000F056FF09F183001022394600F050FF95 +:10BA0000A819002180F8034180F83B110846BDE8E1 +:10BA1000F09FA878082815D22C78CA46601C287098 +:10BA200005EBC4093068C9F84401B0884FF0000B39 +:10BA3000A9F84801102C28BFFFDF89F843A189F835 +:10BA40004AB1CCE70720BDE8F09F70B4794881780F +:10BA5000491E4BB2002BBCBF70BC704703F0FF0CFB +:10BA60008178491ECAB2827050FA83F191F80311AD +:10BA700094453ED000EB021500EB0C14D5F80360A2 +:10BA8000C4F80360D5F80760C4F80760D5F80B6008 +:10BA9000C4F80B60D5F80F60C4F80F60D5F8836068 +:10BAA000C4F88360D5F88760C4F88760D5F88B60E8 +:10BAB000C4F88B60D5F88F50C4F88F50851800EB10 +:10BAC0000C0402EB420295F803610CEB4C0C00EB0A +:10BAD000420284F8036100EB4C0CD2F80B61CCF805 +:10BAE0000B61B2F80F21ACF80F2195F83B2184F8D7 +:10BAF0003B2100EBC10292F84A2112F0010F33D131 +:10BB000090F802C00022BCF1000F0BD9841894F801 +:10BB100003518D4202D1102A26D103E0521CD2B229 +:10BB20009445F3D80278521ED2B202708A421BD0DA +:10BB300000EBC20200EBC10CD2F84341CCF8434108 +:10BB4000D2F84721CCF84721847890F800C0002231 +:10BB5000002C09D9851895F8035165450BD1102A99 +:10BB60001CBF024482F80311591E4BB2002BBFF6D2 +:10BB700075AF70BC7047521CD2B29442EAD8F3E75A +:10BB80002E49487070472D484078704738B14AF2C6 +:10BB9000B811884203D82949488001207047002005 +:10BBA000704726484088704710B500F0AFF910285C +:10BBB00014D0204A0146002092F802C0BCF1000FC8 +:10BBC0000CD9131893F803318B4203D1102818BFF6 +:10BBD00010BD03E0401CC0B28445F2D8082010BD5F +:10BBE00014498A78824286BF01EB0010833000201E +:10BBF000704710498A78824286BF01EB0010C01C52 +:10BC0000002070470B4B93F802C084459CBF002076 +:10BC10007047184490F8030103EBC00090F84331DB +:10BC20000B70D0F844111160B0F8480190800120E9 +:10BC300070470000F80E00205A010020500100203B +:10BC4000FE4A114491F80321FD490A7002684A60D6 +:10BC500080880881704710B5F8F79AFD002804BF66 +:10BC6000FF2010BDBDE81040F8F7B8BDF3498A7851 +:10BC700082429CBF00207047084490F8030101EB0A +:10BC8000C00090F84A0100F0010070472DE9F0472C +:10BC9000EA4F0026B0463878002886BF4FF0080AE1 +:10BCA000DFF8A093BDE8F08707EBC80505F5A271A2 +:10BCB00095F8430100F02AF9102808BF544610D027 +:10BCC000B978002400290BD93A1992F8032182424D +:10BCD00002D1102C05D103E0621CD4B2A142F3D8EA +:10BCE0000824B878A04286BF07EB0410C01C0020CF +:10BCF00095F84A1111F0010F16D050B1082C04D25A +:10BD0000391991F83B11012903D0102100F0A5FD4C +:10BD100050B109F806403046731C95F8432105F5EB +:10BD2000A271DEB2F8F76BFF08F1010000F0FF0826 +:10BD300038784045B8D8BDE8F0872DE9F041BF4CD0 +:10BD400000263546A07800288CBFBE4FBDE8F081A4 +:10BD50006119C0B291F80381A84286BF04EB0510B7 +:10BD6000C01C002091F83B11012903D0102100F0E4 +:10BD700074FD58B104EBC800BD5590F8432100F59F +:10BD8000A2713046731CDEB2F8F739FF681CC5B2E9 +:10BD9000A078A842DCD8BDE8F08110B5F8F759FFCB +:10BDA000002804BF082010BDF8F757FFA549085C1C +:10BDB00010BD0A46A24910B5497841B19F4B997808 +:10BDC00029B10244D81CF8F780FC012010BD0020E6 +:10BDD00010BD9A4A01EB410102EB41010268C1F832 +:10BDE0000B218088A1F80F0170472DE9F041934D98 +:10BDF00007460024A878002898BFBDE8F081C0B2AB +:10BE0000A04213D905EB041010F183060ED01021C7 +:10BE1000304600F022FD48B904EB440005EB400039 +:10BE200000F20B113A463046F9F751FE601CC4B2DD +:10BE3000A878A042E3D8BDE8F081014610228248EC +:10BE400000F02EBD8048704770B57C4D0446A87840 +:10BE5000A04206D905EB04101021833000F0FDFC50 +:10BE600008B1002070BD04EB440005EB400000F277 +:10BE70000B1070BD71498A78824206D9084490F847 +:10BE80003B01002804BF01207047002070472DE9C6 +:10BE9000F0410E46074615460621304600F0DDFC0F +:10BEA000664C98B1A17871B104F59D7011F0010F45 +:10BEB00018BF00F8015FA178490804D0457000F868 +:10BEC000025F491EFAD10120BDE8F08138463146B3 +:10BED00000F01CF8102816D0A3780021002B12D9EE +:10BEE000621892F80321824209D1102918BF08294B +:10BEF00009D0601880F83B510120BDE8F081491C51 +:10BF0000C9B28B42ECD80020BDE8F0812DE9F041A8 +:10BF10004A4D0646002428780F46002812D900BF53 +:10BF200005EBC40090F84311B14206D10622394610 +:10BF300000F5A27008F0E2FD38B1601CC4B22878A8 +:10BF4000A042EDD81020BDE8F0812046BDE8F08188 +:10BF50003A4910B44A7801EBC003521E4A700022DD +:10BF600083F84A2191F802C0BCF1000F0DD98B185B +:10BF700093F80341844204D1102A1CBF10BC7047BF +:10BF800003E0521CD2B29445F1D80A78521ED2B2C4 +:10BF90000A70824204BF10BC704701EBC00301EB82 +:10BFA000C202D2F843C1C3F843C1D2F84721C3F853 +:10BFB00047218C7891F800C00022002C9CBF10BC57 +:10BFC00070478B1893F80331634506D1102A1CBFC4 +:10BFD000114481F8030110BC7047521CD2B2944244 +:10BFE000EFD810BC704770B414490D188A78521EEF +:10BFF000D3B28B7095F80321984247D001EB031C14 +:10C0000001EB0014DCF80360C4F80360DCF807609F +:10C01000C4F80760DCF80B60C4F80B60DCF80F6054 +:10C02000C4F80F60DCF88360C4F88360DCF88760D4 +:10C03000C4F88760DCF88B6008E00000F80E002090 +:10C04000500100205A010020BB100020C4F88B6072 +:10C05000DCF88FC0C4F88FC001EB030C03EB430383 +:10C060009CF8034100EB400001EB430385F80341DA +:10C0700001EB4000D3F80B41C0F80B41B3F80F318E +:10C08000A0F80F319CF83B0185F83B0101EBC200A1 +:10C0900090F84A0110F0010F1CBF70BC70470020DF +:10C0A0008C78002C0DD90B1893F803C1944504D15A +:10C0B00010281CBF70BC704703E0401CC0B2844213 +:10C0C000F1D80878401EC0B20870904204BF70BC1E +:10C0D000704701EBC20301EBC000D0F843C1C3F8C5 +:10C0E00043C1D0F84701C3F847018C780B78002092 +:10C0F000002C9CBF70BC704701EB000C9CF803C186 +:10C100009C4506D110281CBF084480F8032170BC50 +:10C110007047401CC0B28442EED870BC704700002B +:10C1200010B50A7B02F01F020A73002202768B18F8 +:10C130001B7A03F0010C5B0803F00104A4445B08C4 +:10C1400003F00104A4445B0803F00104A4445B0869 +:10C1500003F0010464444FEA530C0CF00103234440 +:10C160004FEA5C0C0CF00104234403EB5C0300EB8E +:10C17000020C521C8CF8133090F818C0D2B26344F1 +:10C180000376052AD3D3D8B2252888BFFFDF10BD98 +:10C190000023C383428401EBC202521EB2FBF1F1C1 +:10C1A0000184704770B50025044603290DD04FF473 +:10C1B000FA4200297BD0012978D0022918BF70BD2E +:10C1C0000146BDE870405830AAE704F158067821CE +:10C1D000304608F060FDB571F57135737573F57310 +:10C1E000357475717576B576212086F83E0041204C +:10C1F00086F83F00FE2086F8730084F82C502584D2 +:10C20000012084F8540084F85500282184F8561041 +:10C210001B21218761874FF4A471E187A1871B212E +:10C22000218661864FF4A471E186A1861B21A4F8C2 +:10C230004010A4F844104FF4A471A4F84610A4F8D8 +:10C2400042101B21A4F84A10A4F84C10A4F848107E +:10C2500060734FF448606080A4F8D050A4F8D250C6 +:10C26000A4F8D450A4F8D650A4F8D850A4F8DA50C2 +:10C2700084F8DD5084F8DF50A4F8E65084F8E450E8 +:10C28000A4F8F850A4F8FA5084F89A5184F89B5115 +:10C2900084F8A45184F8A55184F8685184F8705149 +:10C2A00084F8735184F88C5170BD00E041E0A4F82B +:10C2B000E65084F8DE506088FE490144B1FBF0F19D +:10C2C000A4F878104BF68031A4F87A10E388A4F82B +:10C2D0007E50B4F882C0DB000CFB00FCB3FBF0F333 +:10C2E0009CFBF0FC5B1CA4F882C09BB203FB00FC2F +:10C2F00004F15801A4F88030BCF5C84FC4BF5B1EE0 +:10C300000B85B2FBF0F2521CCA8500F5802202F5C3 +:10C31000EE32531EB3FBF0F20A84CB8B03FB00F228 +:10C32000B2FBF0F0C883214604F15800BDE870402C +:10C33000F6E6A4F8E650B4F89411B4F89831B4F8DD +:10C3400002C004F15800A4F87E50B4F88240DB002B +:10C3500004FB0CF4B3FBF1F394FBF1F45B1C448598 +:10C360009BB203FB01F40385B4F5C84FC4BF5B1E49 +:10C370000385B2FBF1F2521CC285428C01EBC20272 +:10C38000521EB2FBF1F20284C28B02FB0CF2B2FB32 +:10C39000F1F1C18370BD70B50025044603290DD0AD +:10C3A0004FF4FA42002963D001297DD0022918BF39 +:10C3B00070BD0146BDE870405830B1E604F1580642 +:10C3C0007821304608F067FCB571F57135737573E7 +:10C3D000F573357475717576B576212086F83E0053 +:10C3E000412086F83F00FE2086F8730084F82C5028 +:10C3F0002584012084F8540084F85500282184F80D +:10C4000056101B21218761874FF4A471E187A18712 +:10C410001B21218661864FF4A471E186A1861B2130 +:10C42000A4F84010A4F844104FF4A471A4F84610E6 +:10C43000A4F842101B21A4F84A10A4F84C10A4F848 +:10C4400048106073A4F8D850202084F8DA0084F8EB +:10C45000D050C4F8D45084F8045184F8055184F8BD +:10C460000E5184F80F5184F8F45084F8005170BDD7 +:10C47000608890490144B1FBF0F1A4F878104BF6C4 +:10C480008031A4F87A10E388A4F87E50B4F882C012 +:10C49000DB000CFB00FC9CFBF0FCB3FBF0F304F1B5 +:10C4A0005801A4F882C000E022E05B1C9BB203FBB1 +:10C4B00000FCA4F88030BCF5C84FC4BF5B1E0B85E0 +:10C4C000B2FBF0F2521CCA8500F5802202F5EE3272 +:10C4D000531EB3FBF0F20A84CB8B03FB00F2B2FBDA +:10C4E000F0F0C883214604F15800BDE8704017E61B +:10C4F000D4F8F830B4F802C004F158005989DB8947 +:10C50000A4F87E50B4F88240DB0004FB0CF4B3FBCB +:10C51000F1F394FBF1F45B1C44859BB203FB01F443 +:10C520000385B4F5C84FC4BF5B1E0385B2FBF1F2AF +:10C53000521CC285428C01EBC202521EB2FBF1F2C8 +:10C540000284C28B02FB0CF2B2FBF1F1C18370BD1D +:10C550002DE9F003047E0CB1252C03D9BDE8F003CE +:10C5600012207047002A02BF0020BDE8F003704788 +:10C5700091F80DC01F2601234F4D4FF00008BCF16C +:10C58000000F73D0BCF1010F1EBF1F20BDE8F003E8 +:10C590007047B0F800C00A7C8F7B91F80F907A400A +:10C5A0004F7C87EA090742EA072282EA0C0C00273F +:10C5B0000CF0FF094FEA1C2C99FAA9F99CFAACFC83 +:10C5C0004FEA19694FEA1C6C49EA0C2C0CEB0C1C65 +:10C5D0007F1C9444FFB21FFA8CFC032FE8D38CEA33 +:10C5E000020C354F0022ECFB057212096FF0240596 +:10C5F00002FB05C2D2B201EBD207427602F0070578 +:10C600003F7A03FA05F52F4218BF82767ED104FBEC +:10C610000CF2120C521CD2B25FF0000400EB040CBE +:10C620009CF813C094453CBFA2EB0C02D2B212D3CB +:10C630000D194FF0000C2D7A03FA0CF73D421CBF88 +:10C64000521ED2B2002A71D00CF1010C0CF0FF0C7A +:10C65000BCF1080FF0D304F1010C0CF0FF04052C21 +:10C66000DCD33046BDE8F0037047FFE790F819C00F +:10C670000C7E474604FB02C20F4C4FF0000CE2FB5D +:10C68000054C4FEA1C1C6FF024040CFB0422D2B2B0 +:10C6900001EBD204427602F0070C247A03FA0CFC78 +:10C6A00014EA0C0F1FBF82764046BDE8F0037047C6 +:10C6B00004E00000FFDB050053E4B36E90F818C0FF +:10C6C000B2FBFCF40CFB1422521CD2B25FF000044B +:10C6D00000EB040C9CF813C094453CBFA2EB0C0289 +:10C6E000D2B212D30D194FF0000C2D7A03FA0CF8C8 +:10C6F00015EA080F1CBF521ED2B27AB10CF1010C20 +:10C700000CF0FF0CBCF1080FF0D300E011E004F1D5 +:10C71000010C0CF0FF04052CDAD3A2E70CEBC401EA +:10C7200081763846BDE8F0037047FFE70CEBC401A3 +:10C7300081764046BDE8F0037047FC4A0168126804 +:10C740001140FB4A126811430160704730B4F94947 +:10C75000F64B00244FF0010C0A78521CD2B20A703A +:10C76000202A08BF0C700D781A680CFA05F52A42C9 +:10C77000F2D0097802680CFA01F15140016030BC36 +:10C78000704770B46FF01F02010C02EA90251F235E +:10C79000A1F5AA4054381CBFA1F5AA40B0F155003C +:10C7A00009D0A1F52850AA381EBFA1F52A40B0F142 +:10C7B000AA00012000D100204FF0000C6246644620 +:10C7C0008CEA0106F6431643B6F1FF3F11D005F09F +:10C7D00001064FEA5C0C4CEAC63C03F00106520825 +:10C7E0006D085B08641C42EAC632162CE8D370BCA4 +:10C7F000704770BC00207047017931F01F0113BFF2 +:10C80000002000221146704710B4435C491C03F01D +:10C81000010C5B0803F00104A4445B0803F001046D +:10C82000A4445B0803F00104A4445B0803F0010482 +:10C83000A4445B0803F001045B08A44403F0010472 +:10C84000A4440CEB53031A44D2B20529DDDB012AC0 +:10C850008CBF0120002010BC704730B40022A1F131 +:10C86000010CBCF1000F11DD431E11F0010F08BFD8 +:10C8700013F8012F5C785FEA6C0C07D013F8025FA5 +:10C8800022435C782A43BCF1010CF7D1491E5CBFFE +:10C89000405C0243002A0CBF0120002030BC7047DE +:10C8A000130008BF704710B401EB030CD41A1CF836 +:10C8B00001CC5B1E00F804C013F0FF03F4D110BCE0 +:10C8C0007047F0B58DB0164610251C466A46AC463A +:10C8D00000EB0C03A5EB0C0713F8013CD355ACF1AE +:10C8E000010313F0FF0CF3D11546103210208446DB +:10C8F0000B18ACEB000713F8013C401ED35510F0A9 +:10C90000FF00F5D1284606F0F3FF86B1102005F1AF +:10C91000200201461318A1EB000C13F8013C401E45 +:10C9200004F80C3010F0FF00F4D10DB0F0BD089801 +:10C930002060099860600A98A0600B98E0600DB0D4 +:10C94000F0BD38B505460C466846F8F7EDFC002802 +:10C9500008BF38BD9DF900202272A07E607294F954 +:10C960000A100020511A48BF494295F82D308B42D9 +:10C97000C8BF38BDFF2B08BF38BDE17A491CC9B21A +:10C98000E17295F82E30994203D8A17A7F2918BF19 +:10C9900038BDA2720020E072012038BD0C2818BFFB +:10C9A0000B2810D00D2818BF1F280CD0202818BF26 +:10C9B000212808D0222818BF232804D024281EBFED +:10C9C000262800207047012070470C2963D2DFE839 +:10C9D00001F006090E13161B323C415C484E002A3A +:10C9E0005BD058E0072A18BF082A56D053E00C2A1B +:10C9F00018BF0B2A51D04EE00D2A4ED04BE0A2F1C9 +:10CA00000F000C2849D946E023B1A2F110000B28F1 +:10CA100043D940E0122A18BF112A3ED090F83600C0 +:10CA200020B1122A37D31A2A37D934E0162A32D342 +:10CA30001A2A32D92FE0A2F10F0103292DD990F83B +:10CA4000360008B31B2A28D925E0002B08BF042A8A +:10CA500021D122E013B1062A1FD01CE0012A1AD1ED +:10CA60001BE01C2A1CBF1D2A1E2A16D013E01F2AF9 +:10CA700018BF202A11D0212A18BF222A0DD0232A1C +:10CA80001CBF242A262A08D005E013B10E2A04D0A0 +:10CA900001E0052A01D000207047012070472DE9F0 +:10CAA000F04187680D4604462046F6F7DAFB98B158 +:10CAB000D5B13846A168F6F715FF002814DD2844E3 +:10CAC000401EB0FBF5F606FB05F13846F5F705FF0D +:10CAD000A0603046BDE8F081F6F7F6F940F2337118 +:10CAE000F5F7FBFEA060DFE70020BDE8F081904293 +:10CAF00028BF704770B50446101B642838BF6420F7 +:10CB000025188D4205D8F6F720FF00281CBF2846BF +:10CB100070BD204670BDC08E11F00C0F08BF70476D +:10CB2000B0F5296F38BF4FF42960704748520200B2 +:10CB30004C520200620100200246808E11F00C0F60 +:10CB400008BF704792F85530D18E13F00C0F04D007 +:10CB5000B1F5296F38BF4FF42961538840F2E24C98 +:10CB600003FB0CF3528E4FF4747C0CEB821C8C454F +:10CB70009CBF910101F57471591AA1F59671884213 +:10CB800028BF0846B0F5296F38BF4FF429607047B9 +:10CB9000084418449830002A14BF04210021084496 +:10CBA0007047F0B4002A14BF08220122002B14BFE2 +:10CBB0000824012412F00C0F8B8ECA8E25D091F818 +:10CBC0005550944615F00C0F04D0BCF5296F38BFB2 +:10CBD0004FF4296C4D8840F2E2466E434D8E4FF47F +:10CBE000747707EB851767459CBF4FEA851C0CF5EA +:10CBF000747CA6EB0C0CACF5967C634528BF6346B1 +:10CC0000B3F5296F38BF4FF4296314F00C0F04D02B +:10CC1000B2F5296F38BF4FF429621FFA83FC002850 +:10CC20000CBF0123002391F8560014F00C0F08BF2D +:10CC300000200CEB020108449830002B14BF0421A3 +:10CC400000210844F0BC70472DE9F00391F854200E +:10CC50000B8E12F00C0F4FF474771CBF07EB83138D +:10CC60009CB255D012F00C0F8B8ECA8E4D8E91F85F +:10CC700055C021D016461CF00C0F04D0B6F5296F14 +:10CC800038BF4FF42966B1F8028040F2E24908FB50 +:10CC900009F807EB8519B14502D8AE0106F574769F +:10CCA000A8EB0606A6F59676B34228BF3346B3F541 +:10CCB000296F38BF4FF42963A34228BF23469CB293 +:10CCC0001CF00C0F1CBF07EB85139BB228D000BFD4 +:10CCD0001CF00C0F04D0B2F5296F38BF4FF4296255 +:10CCE0009A4228BF1A4600280CBF0123002391F85E +:10CCF00056001CF00C0F08BF0020A1180844983003 +:10CD0000002B14BF042100210844BDE8F003704744 +:10CD1000022A07BF9B003C33DB0070339CB2A1E7C3 +:10CD2000BCF1020F07BFAB003C33EB0070339BB28A +:10CD3000CEE710F0010F1CBF0120704710F0020F6A +:10CD40001CBF0220704710F0040018BF0820704775 +:10CD50002DE9F0470446174689464FF0010808467A +:10CD600000F0D1FC0546484600F0D1FC10F0010F60 +:10CD700018BF012625D000BF15F0010F18BF0123F1 +:10CD80002AD000BF56EA030108BF4FF0000810F098 +:10CD9000070F08BF002615F0070F08BF002394F8FF +:10CDA0005400B0420CBF00203046387094F8551043 +:10CDB000994208BF00237B70002808BF002B25D1B3 +:10CDC00015E010F0020F18BF0226D5D110F0040FA5 +:10CDD00014BF08260026CFE715F0020F18BF022364 +:10CDE000D0D115F0040F14BF08230023CAE748462A +:10CDF00000F093FCB4F85810401A00B247F6FE71E8 +:10CE0000884201DC002801DC4FF0000816B1082E32 +:10CE10000CD018E094F85400012818BF022812D052 +:10CE200004281EBF0828FFDF032D0CD194F8A401AD +:10CE300048B1B4F8A801012894F8540006D0082895 +:10CE400001D0082038704046BDE8F087042818BF9C +:10CE50000420F7D1F5E7012814BF0228704710F02D +:10CE60000C0018BF0420704738B4CBB2C1F3072CB4 +:10CE7000C1B2C0F30724012B07D0022B09D0042B29 +:10CE800008BFBCF1040F2DD006E0BCF1010F03D1A7 +:10CE900028E0BCF1020F25D0012906D0022907D0D5 +:10CEA000042908BF042C1DD004E0012C02D119E094 +:10CEB000022C17D001EA0C0161F3070204EA030116 +:10CEC00061F30F22D1B211F0020F18BF022310D06C +:10CED000C2F307218DF8003011F0020F18BF0221B4 +:10CEE0001BD111E0214003EA0C03194061F3070252 +:10CEF000E6E711F0010F18BF0123E9D111F0040F8B +:10CF000014BF08230023E3E711F0010F18BF01212C +:10CF100003D111F0040118BF08218DF80110082B6E +:10CF200001BF000C012804208DF80000BDF80000AE +:10CF300038BC70474FF0000C082902D0042909D0F2 +:10CF400011E001280FD10420907082F803C01380F3 +:10CF500001207047012806D00820907082F803C095 +:10CF600013800120704700207047162A10D12A2212 +:10CF70000C2818BF0D280FD04FF0230C1F280DD000 +:10CF800031B10878012818BF002805D0162805D02F +:10CF900000207047012070471A70FBE783F800C03B +:10CFA000F8E7012908D002290BD0042912BF08296B +:10CFB00040F6A660704707E0002804BF40F2E24058 +:10CFC000704740F6C410704700B5FFDF40F2E24002 +:10CFD00000BD0000282107F03CBE4078704730B506 +:10CFE0000546007801F00F0220F00F001043287072 +:10CFF000092910D2DFE801F0050705070509050B2F +:10D000000D00062409E00C2407E0222405E0012499 +:10D0100003E00E2401E00024FFDF6C7030BD0078D7 +:10D0200000F00F0070470A68C0F803208988A0F854 +:10D0300007107047D0F803200A60B0F80700888016 +:10D0400070470A68C0F809208988A0F80D10704759 +:10D05000D0F809200A60B0F80D0088807047027887 +:10D06000402322F0400203EA81111143017070470E +:10D070000078C0F3801070470278802322F080028D +:10D0800003EAC1111143017070470078C00970476D +:10D09000027802F00F02072A16BF082AD0F80520EE +:10D0A000D0F80320C1F809200CBFB0F80920B0F86F +:10D0B0000720A1F80D200A7822F080020A7000787B +:10D0C000800942EAC0100870704770B514460E46D9 +:10D0D00005461F2A88BFFFDF2246314605F10900B9 +:10D0E00007F038FDA01D687070BD70B544780E461D +:10D0F0000546062C38BFFFDFA01F84B21F2C88BF57 +:10D100001F24224605F10901304607F023FD204681 +:10D1100070BD70B514460E4605461F2A88BFFFDF56 +:10D120002246314605F1090007F014FDA01D687084 +:10D1300070BD70B544780E460546062C38BFFFDF3B +:10D14000A01F84B21F2C88BFFFDF224605F1090112 +:10D15000304607F0FFFC204670BD0968C0F80F108C +:10D1600070470A88A0F8132089784175704790F8B5 +:10D17000242001F01F0122F01F02114380F8241027 +:10D180007047072988BF072190F82420E02322F068 +:10D19000E00203EA4111114380F8241070471F3068 +:10D1A00007F08EBE10B5044600F0E3FA002818BF61 +:10D1B000204410BDC17811F03F0F1BBF027912F05F +:10D1C000010F0022012211F03F0F1BBF037913F062 +:10D1D000020F002301231A4402EB4202530011F014 +:10D1E0003F0F1BBF027912F0080F0022012203EB50 +:10D1F000420311F03F0F1BBF027912F0040F00220F +:10D200000122134411F03F0F1BBF027912F0200FCF +:10D210000022012202EBC20203EB420311F03F0F96 +:10D220001BBF027912F0100F0022012202EB420212 +:10D230001A4411F03F0F1BBF007910F0400F00207F +:10D240000120104410F0FF0014BF01210021084408 +:10D25000C0B2704770B50278417802F00F02082A18 +:10D260004DD2DFE802F004080B4C4C4C0F14881F21 +:10D270001F280AD943E00C2907D040E0881F1F2847 +:10D2800003D93CE0881F1F2839D8012070BD4A1EF1 +:10D29000242A34D88446C07800258209032A09D07C +:10D2A00000F03F04601C884204D86046FFF782FF0C +:10D2B000A04201D9284670BD9CF803004FF001063A +:10D2C00010F03F0F1EBF1CF10400007810F0100F8B +:10D2D00013D064460421604600F04BFA002818BFC2 +:10D2E00014EB0000E6D0017801F03F012529E1D2DE +:10D2F00080780221B1EB501FDCD3304670BD002096 +:10D3000070BDC078800970470178002201F00F03DA +:10D310000121042B0BD0082B1CBF00207047437841 +:10D320000E2B04BFC3785FEA931C04D106E040785B +:10D33000801F1F2800D911460846704713F03F0F81 +:10D340001EBF007910F0010F10F0020FF4D1F2E7C8 +:10D3500010B4017801F00F01032920D0052921D153 +:10D360004478B0F81910B0F81BC0B0F81730827DBF +:10D37000222C17D1062915D3B1F5486F98BFBCF5FB +:10D38000FA7F0FD272B1082A98BF8A420AD28B4222 +:10D390009CBFB0F81D00B0F5486F03D805E0407899 +:10D3A0000C2802D010BC0020704710BC0120704730 +:10D3B0002DE9F0411F4614460D00064608BFFFDF69 +:10D3C0002146304600F0D5F9040008BFFFDF3019D0 +:10D3D0003A462946BDE8F04107F0BCBBC07800F0F2 +:10D3E0003F007047C02202EA8111C27802F03F027A +:10D3F0001143C1707047C9B201F00102C1F340038B +:10D400001A4402EB4202C1F3800303EB4202C1F370 +:10D41000C00302EB4302C1F3001303EB43031A44BE +:10D42000C1F3401303EBC30302EB4302C1F38013C8 +:10D430001A4412F0FF0202D0521CD2B20171C3781A +:10D4400002F03F0103F0C0031943C170511C417049 +:10D4500070472DE9F0410546C078164600F03F04BC +:10D46000C4F124000F46B042B8BFFFDF281932468E +:10D470003946001D07F06EFBA019401C6870BDE81E +:10D48000F0812DE9F04105464478C0780F4600F060 +:10D490003F06002C08BFFFDFA01B401E84B21F2CDC +:10D4A00088BF1F242FB1A819011D2246384607F056 +:10D4B00051FB2046BDE8F0814078704700B5027806 +:10D4C00001F0030322F003021A430270012914BF82 +:10D4D0000229002104D0032916BFFFDF012100BD6E +:10D4E000417000BD00B5027801F0030322F0030291 +:10D4F0001A430270012914BF0229002104D0032914 +:10D5000016BFFFDF012100BD417000BD007800F0B3 +:10D5100003007047417889B1C0780E2818BF0F28E2 +:10D5200003D0102818BF192802D3FB2904D905E01D +:10D53000BF4A105C884201D101207047002070472B +:10D5400030B501240546C17019293CBFB848445C78 +:10D5500002D3FF2918BFFFDF6C7030BD70B51546D0 +:10D560000E4604461B2A88BFFFDF65702A463146F7 +:10D57000E01CBDE8704007F0EDBAB0F80700704756 +:10D58000B0F809007047C172090A01737047B0F81A +:10D590000B00704730B4B0F80720A64DB0F809C0B2 +:10D5A000B0F805300179941F2D1998BFBCF5FA7FAA +:10D5B0000ED269B1082998BF914209D293429FBF08 +:10D5C000B0F80B00B0F5486F012030BC98BF704731 +:10D5D000002030BC7047001D07F072BC021D0846D9 +:10D5E000114607F06DBCB0F809007047007970472C +:10D5F0000A68426049688160704742680A608068D2 +:10D600004860704709888181704780890880704729 +:10D610000A68C0F80E204968C0F812107047D0F8A8 +:10D620000E200A60D0F81200486070470968C0F800 +:10D6300016107047D0F81600086070470A684260FC +:10D6400049688160704742680A6080684860704736 +:10D650000968C1607047C06808607047007970470A +:10D660000A68426049688160704742680A60806861 +:10D67000486070470171090A417170478171090A58 +:10D68000C17170470172090A417270478172090ABB +:10D69000C172704780887047C088704700897047A2 +:10D6A0004089704701891B2924BF4189B1F5A47FB6 +:10D6B00007D381881B2921BFC088B0F5A47F012032 +:10D6C0007047002070470A6842604968816070476F +:10D6D00042680A60806848607047017911F0070F5E +:10D6E0001BBF407910F0070F00200120704701791F +:10D6F00011F0070F1BBF407910F0070F0020012029 +:10D7000070470171704700797047417170474079E7 +:10D7100070478171090AC1717047C088704746A27D +:10D7200082B0D2E90012CDE900120179407901F00E +:10D73000070269461DF80220012A07D800F00700F9 +:10D74000085C01289EBF012002B07047002002B093 +:10D750007047017170470079704741717047407997 +:10D76000704730B50C460546FB2988BFFFDF6C705B +:10D7700030BDC378024613F03F0008BF7047052054 +:10D78000127903F03F0312F0010F36D0002914BFC5 +:10D790000B20704712F0020F32D0012914BF801DF8 +:10D7A000704700BF12F0040F2DD0022914BF401C97 +:10D7B000704700BF12F0080F28D0032914BF801C47 +:10D7C000704700BF12F0100F23D0042914BFC01CF3 +:10D7D000704700BF12F0200F1ED005291ABF12306B +:10D7E000C0B2704712F0400F19D006291ABF401C72 +:10D7F000C0B27047072918D114E00029CAD114E03B +:10D800000129CFD111E00229D4D10EE00329D9D1C9 +:10D810000BE00429DED108E00529E3D105E0062963 +:10D82000E8D102E0834288BF7047002070470000C3 +:10D830005052020086F3FFFF0001010201020203C1 +:10D840002DE9F041FC4D0446284600216A788068A5 +:10D8500001270E4612B1012A1ED006E090F866207C +:10D86000002A18BF6F7000D001216A78C2EB421203 +:10D8700000EB420292F82830194324D0667090F8E9 +:10D88000D90002F12A0170B12A22201D07F062F9A5 +:10D890000420207027710DE090F82820002A18BF7E +:10D8A0006E70E1D1E1E73C22201D07F053F905201D +:10D8B000207027716878A968C0EB401001EB400028 +:10D8C00080F828601DE090F8A410E9B190F8D90024 +:10D8D000012818BFFFDFA868D0F8A5106160D0F854 +:10D8E000A910A160D0F8AD10E160D0F8B1102161AD +:10D8F00090F8B5102175667013212170277180F89A +:10D90000A4600120BDE8F08190F82210012922D006 +:10D91000017801291CBF0020BDE8F0816670142148 +:10D920002170811C2022201D07F014F92672A9689D +:10D930000E70C24882888284D0F8C420527B80F85E +:10D94000262080F82270D1F8C4000088F3F7BEFAD0 +:10D95000F2F765FFD5E7667007212170416A6160C3 +:10D9600080F82260CDE7B44880680178002914BFB0 +:10D9700080884FF6FF7070472DE9F84F4FF0000890 +:10D98000894606460127CDF80080FFF748FBBDF821 +:10D990000010A94D21F06004ADF8004008284FD2D6 +:10D9A000DFE800F004070D4E184E132C44F003007E +:10D9B0000DE044F01500ADF80000474641E044F0AA +:10D9C000100000BFADF800003BE044F0020040F062 +:10D9D0001000F7E7A86890F8E000052818BFFFDFFF +:10D9E00044F01A00ADF80000A96891F8E71000298A +:10D9F00014BF40F0010020F00100E3E7A86890F8B0 +:10DA0000E01003290AD090F8E01006295DD090F8C4 +:10DA1000E000042818BFFFDF64D012E03046FFF7B3 +:10DA200070FC002818BFFFDF0AD1F07810F03F0F1C +:10DA30001FBF307910F0020F44F00400ADF8000071 +:10DA40004746BDF800000090BDF80000C0F3C00BD1 +:10DA5000A868CBEB4B1A00EB4A0090F8280000288E +:10DA600018BFBDE8F88F3046FFF7D9FA80467248F4 +:10DA7000806800EB4A0190F8C90001F12A040128EE +:10DA800008BF012508D0022808BF022504D00428B9 +:10DA900016BF08280325FFDF257300206073664842 +:10DAA000806890F8E11084F83B10FF21A1737F217A +:10DAB000E176BDF80010618190F8E01004291CBFE8 +:10DAC00090F8E01006293AD049E044F00A01ADF898 +:10DAD000001090F8FA00002814BF41F0040021F073 +:10DAE00004006FE73046FFF70CFCD8B1012804BFF3 +:10DAF00044F00100ADF8000014D0022818BFFFDF89 +:10DB00009FD144F00200ADF80000A96891F8FA1026 +:10DB1000002914BF40F0040020F00400ADF800001C +:10DB200047468EE7F07810F03F0F1FBF307910F0B6 +:10DB3000020FBDF8000040F0040082D042E790F8E8 +:10DB4000E200012808BF012508D0022808BF0225ED +:10DB500004D0042816BF08280325FFDF657304F1ED +:10DB600009000090344D28787F2808BFFFDF29780E +:10DB7000009801707F2028706FB1B8F1070F04F191 +:10DB80001C01304603D2FFF7B0FA207239E0FFF7EC +:10DB900078FC207204E000202072B8F1070F30D327 +:10DBA000B8F1070F0DD1A86890F8F91001B3D0F8BB +:10DBB000EA10C4F80210B0F8EE10E18090F8F0001E +:10DBC0006070A07A10F0040F0ED0A86890F8FA10D8 +:10DBD000E9B190F8F7102175D0F8F110C4F81510DC +:10DBE000B0F8F500A4F81900B8F1070F38D098E0A4 +:10DBF000F07810F03F0F1ABF307910F0010FFF20BE +:10DC0000DED0621CA11C304601F0E4FCD9E7B8F17B +:10DC1000070F1CBFB8F1010FFFDFB9F1000F08BFFC +:10DC2000FFDF99F800002075B8F1010F08D0B8F1B6 +:10DC3000070F0BD075E0000064010020CC1000201D +:10DC400004F115013046FFF703FA6AE0012130467E +:10DC5000FFF7A8FA0168C4F815108088A4F8190025 +:10DC6000F07810F03F0F1CBF317911F0080F1AD077 +:10DC7000A86890F8E020042A06D090F8E000032875 +:10DC800011D111F0100F0ED003213046FFF78AFAA0 +:10DC9000407803210009A0733046FFF783FA00881B +:10DCA000C0F30B002082F07810F03F0F1CBF3079DA +:10DCB00010F0400F13D0FE48FFF723FBA96891F83E +:10DCC000E020032A14D006213046FFF76BFA0078D3 +:10DCD000E076A86890F8E010062922D118E0A8683C +:10DCE00090F8FB10002918BF90F8F800F0D1F0E789 +:10DCF00091F8C910042914BF08290028E3D1F0784D +:10DD000010F03F0F1CBF307910F0080FDBD1E0E7B7 +:10DD100090F8E9100909A173B0F8E800C0F30B000E +:10DD20002082A968012001EB4A0181F82800BBF19B +:10DD3000000F14BF06200520BDE8F84F03F02CBAF1 +:10DD40002DE9F041DB4DAA6892F8D930002B6ED056 +:10DD50007F27012611B10978FE2914D0804692F858 +:10DD60002800002818BFBDE8F08102F12A044046CF +:10DD7000FFF755F90021082879D2DFE800F0515368 +:10DD800056787878595CCA4C92F8A400002818BFDD +:10DD9000BDE8F08182F8A66092F8DD0018B1F6F7D0 +:10DDA000DAFC012829D02046FFF762F90146A8686D +:10DDB00080F8A71000F1A8012046FFF73BF92046A4 +:10DDC000FFF763F90146A86880F8AE1000F1AF01D3 +:10DDD0002046FFF73DF9A86800F1B50428787F28B0 +:10DDE00008BFFFDF287820702F70A86880F8A46033 +:10DDF000BDE8F041052003F0CFB9F6F7EFFCA968C4 +:10DE000001F1A802A731FDF7FDFE002808BFFFDFE2 +:10DE1000A86890F8A71041F0020180F8A710CEE79B +:10DE2000A17209E0A67221720CE0032001E021E05A +:10DE30000220A07200E0FFDF04F10B014046FFF773 +:10DE400054F92072621CA11C404601F0C3FB2878E3 +:10DE500009347F2808BFFFDF287820702F70A8685A +:10DE600080F82860BDE8F041052003F095B92172E3 +:10DE7000BDE8F081BDE8F0417EE570B58D4C002233 +:10DE8000A06890F8C910104602F0D4FF002831D0E5 +:10DE9000F7F763F9A068884990F8DF000D5C284621 +:10DEA000F6F7E7FEA06880F8E15090F8C91008295D +:10DEB00016BF04290F202520F6F7F9FDA0680021E0 +:10DEC00090F8C9200120F6F7D4FF7948F7F74EF90A +:10DED000A068D0F80001F7F74CF9A06890F8C910D5 +:10DEE00080F8E21090F8C800032814BF0228012926 +:10DEF00008D103E0BDE8704001F0A5BB0821002077 +:10DF0000F7F72AFAA06890F8C91080F8E210F7F73E +:10DF100000FAA06890F8C95090F8DD0040B1F6F71B +:10DF2000E6FB15F00C0F0CBF40205520F7F7D2F997 +:10DF3000A168032081F8E00070BD2DE9F0410F4693 +:10DF4000904605460321FFF72DF94078594C020908 +:10DF5000A06890F8E91062F3071180F8E910032136 +:10DF60002846FFF71FF90188A068B0F8E82061F3A0 +:10DF70000B02A0F8E82080F8E77090F8C91001299A +:10DF800005D090F8E000032808BFBDE8F081E878EC +:10DF90004FF0010610F03F0F1CBF287910F0400F22 +:10DFA00009D006212846FFF7FDF80178A06880F81F +:10DFB000F81080F8FB60A06890F8E01003292AD0E0 +:10DFC000E97811F03F0F1CBF297911F0010F08D03B +:10DFD00000F1F002911F284601F0FCFAA06880F8D9 +:10DFE000F960E87810F03F0F1ABF287910F0020F9F +:10DFF000BDE8F08101212846FFF7D4F8A168026846 +:10E00000C1F8F1208088A1F8F50081F8F78081F847 +:10E01000FA60BDE8F081022F18BF012FD0D1BDE812 +:10E02000F0812DE9F84F0446C07810F03F0F1CBF77 +:10E03000207910F0020F05D010F0010F18BF4FF03B +:10E04000010901D14FF0000900271A4DB9F1000F65 +:10E050005BD020780026C70901212046FFF7A2F8EF +:10E060003FB1407900F0C000402808BF4FF00108E0 +:10E0700001D04FF00008A86890F8C810032906D115 +:10E0800090F8C110002918BF90F8CC0001D190F889 +:10E09000DE00FDF7A5FD070015D01021FEF7DDFB22 +:10E0A000B8F1000F0FD001212046FFF77BF805E003 +:10E0B000D811002064010020785202000146384641 +:10E0C000F7F7D4FC0646A868B8F1000F90F8B970CD +:10E0D00018BF47F00207E07810F03F0F1CBF20790F +:10E0E00010F0020F0ED02046FEF7CFFF824601212E +:10E0F0002046FFF757F85146F6F769FD002818BF8C +:10E10000012000D1002030435BD0E07810F03F0FB9 +:10E110001EBF217911F0100F11F0080F3FD004211C +:10E120002046FFF73FF80646A86890F8E20002F0A4 +:10E1300078FE0146304601F0A8FAA0B13A46002127 +:10E140002046FFF7FAFEF848FFF7DBF80146A8681B +:10E1500080F8E6103188A0F8E310B17880F8E51077 +:10E160000120BDE8F88FA86890F8E20001283AD1B4 +:10E17000E07810F03F0F1CBF207910F0010F32D073 +:10E18000B9F1000F04D100212046FFF7F5FB2AE08A +:10E190008DF8007069462046FFF7EEFB23E010F093 +:10E1A0003F0F1CBF217911F0100F1CD110F03F0F51 +:10E1B0001CBF207910F0010F15D0B9F1000FE7D185 +:10E1C000E1E7A86890F8CA00032818BF02280AD11E +:10E1D000B8F1000F07D036B9D448694600680090FE +:10E1E0002046FFF7C9FB0020BDE8F88FD0498968B9 +:10E1F00081F80A01704770B5CD4DA86890F8E0101D +:10E20000022919BF90F8E010012900210C461CBF1B +:10E210000C2070BDC1EB411200EB4202034682F8B4 +:10E220002840491CC9B20229F4D3047080F8224066 +:10E2300093F8DD0030B1F7F757F8F6F76CFAA868F5 +:10E2400080F8DD40A868012180F8DC4080F8C1102A +:10E2500080F8C84080F8DF40282180F80B1180F852 +:10E260000A41A0F8E34080F8E540072180F8C0109B +:10E27000002070BDAE4810B58068002180F8E01025 +:10E28000012180F8E010FFF7B6FF002818BFFFDF7C +:10E2900010BD2DE9F047A64C07460C26A06890F863 +:10E2A000E01001291FBF90F8E00002280C20BDE813 +:10E2B000F087F6F73CFCA06890F90A01F6F7C7FC76 +:10E2C000A06890F8C91080F8E21090F8C0100125FD +:10E2D000002978D090F8C8004FF00009032802D038 +:10E2E000022805D008E00521924801F03AFA03E03F +:10E2F0000321904801F035FAA06890F8D810002961 +:10E3000004BF90F8DB00002843D0F4F7DDFD06469B +:10E31000A0683146D0F8D400F5F7E4FA864990FBBE +:10E32000F1F801FB180041423046F4F7D6FA0146F5 +:10E33000A068C0F8D410D0F8D0104144C0F8D01074 +:10E34000FDF72FFC0146A068D0F8D020914220D8DC +:10E35000C0E9349690F8DB0000281CBF0120FDF7CF +:10E3600044FD0121A06890F8DC20002A1CBF90F831 +:10E37000D820002A0DD090F8B93000F1BA02012B54 +:10E3800004D1527902F0C002402A14D0BA30F7F713 +:10E39000D5FBA06890F8B910BA30F6F710FC0F2141 +:10E3A0000720F6F728FCA068002690F8E010012965 +:10E3B00018D112E007E0FDF745FDA1682A46BA3101 +:10E3C000F7F785FBE5E790F8E010022904BF80F835 +:10E3D000E0500C2006D1BDE8F08780F804510221FE +:10E3E00080F8E010A06890F8C10088B1FDF7A5FCA6 +:10E3F00003214D48FDF7DDFC0146A06880F8DD10E3 +:10E40000C0F800714D48F6F79AFE3046BDE8F08737 +:10E41000FDF73CFCECE738B5454CA06890F8E010FF +:10E4200002291CBF0C2038BD012180F80511A0F87D +:10E43000081129208DF800006846F5F77DFD30B100 +:10E44000A0689DF8001090F80601884205D1A068E8 +:10E4500090F80601401C8DF80000A1689DF80000AE +:10E4600081F806010220F6F77EFE3548F6F7F9FB43 +:10E47000A168DFF8D0C0002091F8C03091F8DF200B +:10E48000521CACFB02546408A4EB8404224481F8BF +:10E49000DF2023FA02F212F0010F03D1401CC0B2B8 +:10E4A0000328EBD3FFF7E9FC002038BD2049896839 +:10E4B00081F8C900002070471D49896881F8DA0099 +:10E4C000704710B51A4CA36893F8B830022B14BFEC +:10E4D000032B00280BD100291ABF0229012000209C +:10E4E0001146FDF761FB08281CBF012010BDA06884 +:10E4F00090F8B800002816BF022800200120BDE8CF +:10E500001040F7F7A5BA0A48806890F8B8000028CC +:10E5100016BF022800200120F7F79ABA044989683B +:10E5200081F8B80070470000D81100206C5202003A +:10E53000640100200012002040420F0075520200CA +:10E540007B520200ABAAAAAAF749896881F8DC00CD +:10E55000704770B5F44CA16891F8B800002816BF58 +:10E5600002280020012081F8B900BA31F7F75AFAE1 +:10E57000A06890F8B810022916BF032901210021D4 +:10E5800080F8DB1090F8B920002500F1BA03012AC9 +:10E5900004BF5B7913F0C00F0AD000F1BA03012A5F +:10E5A00004D15A7902F0C002402A01D0002200E0D2 +:10E5B000012280F8D820002A04BF002970BDC0F8CD +:10E5C000D050F4F781FCA168C1F8D40091F8DB00C9 +:10E5D00000281CBF0020FDF708FC0026A06890F86A +:10E5E000DC1000291ABF90F8D810002970BD90F8EF +:10E5F000B92000F1BA01012A04D1497901F0C00122 +:10E60000402905D02946BDE87040BA30F7F796BAE0 +:10E61000FDF718FCA1683246BDE87040BA31F7F743 +:10E6200056BA70B5C04D0C4600280CBF012300231C +:10E63000A96881F8C13081F8CB004FF0080081F85B +:10E64000CC000CD1002C1ABF022C01200020114656 +:10E65000FDF7AAFAA968082881F8CC0001D00020AB +:10E6600070BD022C14BF032C1220F8D170BD0028FD +:10E6700018BF112070470328AB4A926808BFC2F840 +:10E68000C41082F8C8000020704710B5044602F09C +:10E6900083FF052809D002F07FFF042805D0A24897 +:10E6A000806880F8D940002010BD0C2010BD9E4825 +:10E6B000816891F8C800032804D0012818BF0228F7 +:10E6C00007D004E091F8CB00012808BF7047002074 +:10E6D000704791F8CA00012814BF03280120F6D121 +:10E6E000704710B5F6F7EAFDF6F79EFDF6F7CEFC9B +:10E6F000F6F72BFD8C4CA06890F8DD0038B1F6F7EA +:10E70000F3FDF6F708F8A168002081F8DD00A068A5 +:10E71000012180F80411022180F8E010002010BDD2 +:10E720008149896881F8FC0070477F4902788968CF +:10E73000012A06D0042A24D0052A0CBF1120122059 +:10E74000704742780023032A08BFC1F8C43081F81B +:10E75000C820012281F8C920C27881F8B820027946 +:10E76000002A16BF022A0123002381F8C13081F854 +:10E77000CA20427981F8C020807981F8DA0000202F +:10E78000704782780023032A08BFC1F8C43081F89B +:10E79000C8200822DEE764488068704700F053BF55 +:10E7A0002DE9F84F00256048F6F7BEFD5E4C4FF0AE +:10E7B0007F0A002808BF84F800A0F6F7A0FD5B4898 +:10E7C000FEF72DFCA0700146A06890F8E2204FF003 +:10E7D00003084FF000094FF0010B012A10D0042A62 +:10E7E0001CBF082AFFDF00F05782A06890F8DD0008 +:10E7F00018B1F6F779FDF5F78EFF2846BDE8F88FDA +:10E800004A4D0026A5F58677072936D290F8C10033 +:10E8100028B9F6F71EFA002808BF002600D0012606 +:10E82000A06890F8DD0080B1FDF715FAA168FF2817 +:10E8300081F8DE0001460DD0E81CFDF701FAA06862 +:10E8400090F8DE00FDF712FA0643A06890F8DE00AB +:10E85000FF2817D1FDF7A1FA87F8DE0097F8C1105D +:10E8600081B108280ED12878E91CC0F38010FDF78B +:10E870009BF9082818BF002604E002BF90F8D900D1 +:10E8800000280126A07808283CD2DFE800F03FB934 +:10E89000043B3B3B17FD36B1A06890F8C800012847 +:10E8A00018BF022803D0F6F7F1FB45469DE7F6F7BF +:10E8B000EDFB00211D48FFF743FAF6E716B3A06809 +:10E8C00090F8C800022802D0012815D01AE00021D3 +:10E8D0001648FFF735FAA0680825C0F8E790C0F899 +:10E8E000EB90C0F8EF90C0F8F390C0F8F79080F884 +:10E8F000FB9080F8E79078E700210C48FFF720FABA +:10E9000000F040B9F6F7C2FB03256EE70020002EA9 +:10E9100071D0A26892F8C810022909D0012925D027 +:10E92000032928D06AE0000064010020D8110020EB +:10E930000021FE48FFF704FAA16891F8050128B10B +:10E94000401E10F0FF0081F8050154D1C1F8E79096 +:10E95000C1F8EB90C1F8EF90C1F8F390C1F8F790CF +:10E9600081F8FB90082081F8E7B047E00021EF48EC +:10E97000FFF7E6F941E0D2F8C400E978837E9942D6 +:10E980001BD12979C37E994217D16979037F9942B6 +:10E9900013D1A979437F99420FD1E979837F9942B5 +:10E9A0000BD1297AC37F994207D12978437EC1F3DD +:10E9B0008011994208BF012100D0002192F8CB209C +:10E9C000012A01D079B10CE059B900F11A01D748F8 +:10E9D000FEF730FBD548FEF74BFBA168D1F8C41019 +:10E9E00048760A200AE097F8CC00082803D097F868 +:10E9F000DE108142F5D0F6F749FB03200546F4E628 +:10EA0000A06890F8DB1000290CBF4FF0010B4FF00D +:10EA1000000B4FF000082978CA0905F1090107D059 +:10EA2000497901F0C001402908BF4FF0010901D028 +:10EA30004FF0000990F8C810032906D190F8C110D2 +:10EA4000002918BF90F8CC0001D190F8DE00FDF746 +:10EA5000C7F85FEA000A13D01021FDF7FEFE002878 +:10EA600018BF4FF0010BB9F1000F04BFA06890F878 +:10EA7000B9A00FD005F109015046F6F7F7FF80461F +:10EA8000A06890F8B9A000E093E0B9F1000F18BFBA +:10EA90004AF0020A90F8C81003290ED0F6F7F6FAE9 +:10EAA000F6B3F6F7A4F850EA08006DD08DF800A090 +:10EAB00069469E48FFF744F964E0D0F8C400E9785D +:10EAC000827E91421BD12979C27E914217D1697908 +:10EAD000027F914213D1A979427F91420FD1E97906 +:10EAE000827F91420BD1297AC27F914207D1297846 +:10EAF000407EC1F38011814208BF012500D000256E +:10EB000097F8DE00082806D097F8CC10884208BF96 +:10EB10004FF0010901D04FF00009B8F1000F00E0FB +:10EB200032E005D1BBF1000F04D0F6F760F808B170 +:10EB3000012100E000214EB197F8CB00012803D05D +:10EB400020B955EA090001D0012000E0002001426F +:10EB500016D0A06890F8CB10012908BF002D0DD168 +:10EB6000D0F8C40000F11A017048FEF763FA6F484C +:10EB7000FEF77EFAA168D1F8C41048760A2534E67B +:10EB8000F6F784FA032530E6A06890F8CA00032857 +:10EB900018BF0228F6D1B9F1000FF3D0B8F1000F79 +:10EBA000F0D163486946406800906048FFF7C8F8B4 +:10EBB000E8E7A06890F8DA0000283FF4A3AEF6F783 +:10EBC00065FAA06890F8D9100029DBD1C0F8E79069 +:10EBD000C0F8EB90C0F8EF90C0F8F390C0F8F79051 +:10EBE00080F8FB9080F8F8A05048FEF78AFB50B3FD +:10EBF000012836D00228C5D1A068032590F8C800A6 +:10EC0000032814BF0020012036EA00003FF4EDADD8 +:10EC1000464E1820F17811F03F0F3FF4E6AD317900 +:10EC200088437FF4E2AD04213046FEF7BBFA074685 +:10EC3000A06890F8E20002F0F4F80146384600F0CF +:10EC400024FDE8BBD1E5002E9CD0A06890F8C80058 +:10EC5000012818BF022895D13448FFF7E2F980BB9C +:10EC600090E7002E8ED0314D1820E97811F03F0F3B +:10EC700088D02979884385D104212846FEF792FA65 +:10EC80000646A06890F8E20002F0CBF80146304654 +:10EC900000F0FBFC98BB75E707297FF433AEC0F8A2 +:10ECA000E790C0F8EB90C0F8EF90C0F8F390C0F890 +:10ECB000F79080F8FB90012680F8F8A01B4801E04F +:10ECC0007FE01AE0FEF71DFB38B1012818D00228BA +:10ECD0004DD0F6F7DBF9454687E5F6F7D7F9A0689A +:10ECE00090F8C800012818BF02287FF44BAF0F48E6 +:10ECF000FFF797F900283FF445AF042575E522E0BA +:10ED0000F6F7C4F9094D1820E97811F03F0F3FF4E8 +:10ED100039AF297988437FF435AF04212846FEF7BF +:10ED200041FA0646A06890F8E20003E0D8110020FE +:10ED30006C52020002F075F80146304600F0A5FC66 +:10ED400000283FF41FAF002201212846FFF7F5F805 +:10ED5000F748FEF7D6FA0146A06880F8E610318839 +:10ED6000A0F8E310B17880F8E51004253DE503250F +:10ED7000F6F78CF9A06890F8C800032814BF0020AB +:10ED8000012036EA00003FF430ADE94E1820F1785A +:10ED900011F03F0F3FF429AD317988437FF425AD61 +:10EDA00004213046FEF7FEF90746A06890F8E2001D +:10EDB00002F037F80146384600F067FC00283FF4BF +:10EDC00014AD002202213046FFF7B7F8D848FEF70D +:10EDD00098FA0146A06880F8E6103988A0F8E31098 +:10EDE000B97880F8E5100425FFE42DE9F041D14C15 +:10EDF000A0680078002818BFFFDF0025A068012761 +:10EE00008570D0F8C4100A8882804A8842838A8834 +:10EE10008283C988C18380F82050C74990F8DB20DD +:10EE2000A1F59A764AB10A78C2F38013CA1C23B1BD +:10EE3000527902F0C002402A33D090F8DC2042B16F +:10EE400011F8032BC2F380121AB1497911F0C00FE7 +:10EE500027D00E3006F022F8A06890F8DD0018B137 +:10EE6000F5F779FC012824D0A068D0F8C4104A7EB8 +:10EE7000C271D1F81A208260C98B818145610583F6 +:10EE8000A0680770D0F8C42090F80A1182F85710D3 +:10EE9000D0F8C4000088F2F719F8BDE8F041F1F7A6 +:10EEA000AFBCD6F83711C0F80E10B6F83B1141824E +:10EEB000D2E7F5F793FCA16801F10802C91DFCF740 +:10EEC000A1FE002808BFFFDFA068C17941F0020160 +:10EED000C171D6F80F114161B6F813110183CFE764 +:10EEE0002DE9F047934C0746FF21A0680025012635 +:10EEF00080F8DE1090F8C800012818BF022802D060 +:10EF0000032818BFFFDF5FB18948FEF7A3F918B9DE +:10EF10008748FEF7F9F918B100F07BFC05463FE0A1 +:10EF2000A06890F8E0007F27082839D2DFE800F0D9 +:10EF3000383838041725352B7E48F6F7F5F90028C0 +:10EF400008BF2770F6F7DBF9A06890F8DD0018B16C +:10EF5000F6F7CAF9F5F7DFFBF6F798F82BE07548F6 +:10EF6000F6F7E2F9002808BF2770F6F7C8F9A0689D +:10EF700090F8DD000028EFD0EAE76E48F6F7D4F904 +:10EF800030B9277004E06B48F6F7CEF90028F8D0C6 +:10EF9000F6F7B5F9F6F77AF80DE000F03DFE0AE075 +:10EFA0000C2D80F02B82DFE805F04CFCFB06FAF913 +:10EFB000F9F90AF84ECBBDE8F047FEF75EBF002234 +:10EFC0000121022001F036FF002800F05B815A4940 +:10EFD000A1F12800FEF75CF8A068574E90F8B91030 +:10EFE0003046FEF73CF8A06800F1BA013046FEF763 +:10EFF0001AF8A06890F8DB10C1B190F8C810032986 +:10F0000006D190F8C110002918BF90F8CC0001D1AA +:10F0100090F8DE00FCF718FF050007D0012130460C +:10F02000FEF71DF829463046FDF7FDFF4248F6F78A +:10F030009DF801210846F6F78FF9A168082081F8AC +:10F04000E000BDE8F087A06890F8E21090F80B218E +:10F0500011F00C0F08BF002290F8E210032001F01D +:10F06000E9FE002800F00E81344D0A2085F8E0000A +:10F07000012002F091F805F59A71A1F12800FEF740 +:10F0800007F8A06805F59A7790F8B9103846FDF7AB +:10F09000E6FFA06800F1BA013846FDF7C4FFA0689A +:10F0A00090F8DB10C1B190F8C810032906D190F890 +:10F0B000C110002918BF90F8CC0001D190F8DE00F3 +:10F0C000FCF7C2FE060007D001213846FDF7C7FF56 +:10F0D00031463846FDF7A7FFA2681749D2F8C400A9 +:10F0E000C08AC875000A0876D2F8C400407D8875C9 +:10F0F0000846F6F73BF8D5F8C4100F4820234A7BA2 +:10F10000017803EA421221F0200111430170084AFC +:10F11000D5F8C4001278417BC2F34012114041730C +:10F12000D5F8C41095F80B0181F85600BDE8F087BA +:10F13000D81100206401002000120020CC10002013 +:10F14000A06890F8E21090F80B2111F00C0F08BFA6 +:10F15000002290F8E210052001F06CFE00287CD01F +:10F16000FE4D0B2085F8E000022002F015F805F5B1 +:10F170009A71A1F12800FDF78BFFA06805F59A7838 +:10F1800090F8B9104046FDF76AFFA06800F1BA0197 +:10F190004046FDF748FFA06804E047E02EE1A5E007 +:10F1A0009DE098E090F8DB10C1B190F8C8100329F9 +:10F1B00006D190F8C110002918BF90F8CC0001D1F9 +:10F1C00090F8DE00FCF740FE070007D00121404622 +:10F1D000FDF745FF39464046FDF725FFA068E04AA8 +:10F1E000D0F8C410C98AD175090A1176D0F8C400C4 +:10F1F0001146407D88750846F5F7B8FFD5F8C4007C +:10F200004673A06890F8E230012296210020F5F7BD +:10F210008CFED348017821F020010170A068D5F858 +:10F22000C41090F80B0181F856007FE7A06890F8B1 +:10F23000E21090F80B2111F00C0F08BF002290F89B +:10F24000E210042001F0F6FD38B1C549A1F1280013 +:10F25000FDF71EFFC24EA06800E013E090F8B91061 +:10F260003046FDF7FCFEA06800F1BA013046FDF71C +:10F27000DAFEA06890F8DB10E9B190F8C810032915 +:10F2800004D00AE0BDE8F04700F0DDB990F8C11005 +:10F29000002918BF90F8CC0001D190F8DE00FCF7EF +:10F2A000D3FD050007D001213046FDF7D8FE2946E1 +:10F2B0003046FDF7B8FEAA48F5F758FFA06890F869 +:10F2C000E230012296210020F5F72FFEA1680920E7 +:10F2D00081F8E0002AE7A06880F8E06026E7A068EF +:10F2E000022180F8046180F8E0101FE7A66816F894 +:10F2F000E31F11F0800F0CBF1E204FF49670B6F87C +:10F300000120C2F30C0212FB00F7C80908BF4FF03E +:10F310001E0906D0002806BFFFDF4FF000094FF49A +:10F320009679B078400908BF012507D0012808BFA9 +:10F33000022503D0022814BF00250825A06890F8F4 +:10F34000E20001F06EFDA7EB0008307808EB09073A +:10F35000C0F38010002808BF4FF4FA7A05D006BF2A +:10F36000FFDF4FF0000A4FF0320A7C4890F8FC9023 +:10F37000B9F10C0F28BFFFDF7A487B4A30F819003B +:10F380000AEB000101FB0720511CB0FBF1F000F17A +:10F3900020094F44F5F7E1FE307800F03F06304693 +:10F3A000F5F767FCA06880F8E16029462520F5F7AD +:10F3B0007EFB0122A8EB09012B461046F5F7B5FDAF +:10F3C0006A48F5F7D3FE00213846F5F7EAFEA06853 +:10F3D00080F8E250F5F79DFFA06890F8DD0040B19D +:10F3E000F5F785F915F00C0F0CBF50205520F5F7F7 +:10F3F00071FFA168042081F8E00097E6FFDF95E641 +:10F400005B4810B5806890F8E0000C286BD2DFE80C +:10F4100000F06A6A6A6A6A6A6A6A0615533453486F +:10F42000F5F7A4FEF5F775FF514C00219620F5F78E +:10F43000B8FEA168052081F8E00010BD4B48F5F743 +:10F4400095FE4B4CA06890F8E230012296211046C0 +:10F45000F5F76BFDA16891F8E20091F80B1110F03F +:10F460000C0F08BF00219620F5F79BFEF5F751FF22 +:10F47000A168062081F8E00010BD3C48F5F776FE53 +:10F480003B4CA06890F8E230012296211046F5F737 +:10F490004CFDA16891F8E20091F80B1110F00C0FEF +:10F4A00008BF00219620F5F77CFEF5F732FFA16832 +:10F4B000072081F8E00010BDF5F700FFF5F7B4FE76 +:10F4C000F5F7E4FDF5F741FE29480121806880F851 +:10F4D0000411022180F8E010FFF787FCBDE810401E +:10F4E000032001F059BEFFDF10BD70B5204CA068AD +:10F4F00090F8E0007F25082828BF70BDDFE800F005 +:10F500004D4D4D172304470A1948F5F70DFF30B943 +:10F51000257004E01648F5F707FF0028F8D0F5F746 +:10F52000EEFEF5F7B3FDBDE87040FEF7A6BC10484F +:10F53000F5F7FAFE002808BF2570F5F7E0FEBDE8F4 +:10F54000704000F080B80A48F5F7EEFE002808BFCA +:10F550002570F5F7D4FEA0680CE00000CC10002068 +:10F5600000120020805202003F420F00D8110020FC +:10F570006401002090F8DD0018B1F5F7B5FEF5F74D +:10F58000CAF8F5F783FDBDE87040FEF776BC00F0E1 +:10F5900043FBBDE87040FEF770BC70BD70B5F84C21 +:10F5A00006460D46012909D0A06890F8E23090F88F +:10F5B000E2203046BDE8704001F0C8BFF5F728FAF8 +:10F5C000A16891F8E220034629463046BDE8704024 +:10F5D00001F0BCBF70B50646E94814460D46806888 +:10F5E00090F8DD0018B1F5F7B6F801280ED03046D6 +:10F5F000FDF73EFD20703046FDF711FD072813D2C0 +:10F6000029463046BDE87040FDF714BDF5F7E6F831 +:10F610002A462146FCF7F6FA002808BFFFDF2078CB +:10F6200040F00200207070BD3046FDF7F8FC07285E +:10F6300018BF70BD00213046FDF7B4FD0168296098 +:10F640008088A88070BD10B5F5F738FEF5F7ECFDA1 +:10F65000F5F71CFDF5F779FDC94CA06890F8DD00C1 +:10F6600038B1F5F741FEF5F756F8A168002081F8AA +:10F67000DD00A068012180F80411022180F8E0106B +:10F68000BDE81040002001F087BD2DE9F0410D4696 +:10F690000178044611F0800F0CBF1E204FF49670C5 +:10F6A000B4F80120C2F30C0212FB00F6C80908BF2F +:10F6B0001E2105D0002806BFFFDF00214FF4967100 +:10F6C000701BA278520908BF012707D0012A08BF82 +:10F6D000022703D0022A14BF00270827B0F5877F2E +:10F6E0002EBFAE420020BDE8F08145182078C0F35F +:10F6F0008010002808BF4FF4FA7603D006BFFFDF62 +:10F70000002632269F4890F8FC400C2C28BFFFDFD3 +:10F710009D489E4A30F81400311801FB0520511C09 +:10F72000B0FBF1F0203005449548806890F8E20085 +:10F73000F6F76CF804463846F6F768F84FF47A7135 +:10F7400084423ABF001B00F2E730201AB0FBF1F010 +:10F7500034BF42192A1A3946BDE8F041012001F0B0 +:10F7600069BB70B50D460446FDF734FC032D4AD045 +:10F77000052D18BF70BD05212046FDF730FC804DDA +:10F78000A868D0F8C40000F10E012046FDF7E5FCA2 +:10F79000A868D0F8C40000F112012046FDF7E1FC92 +:10F7A000A868D0F8C410497DA175D0F8C410C98AE2 +:10F7B000E175090A2176D0F8C41049886176090AF2 +:10F7C000A176D0F8C4108988E176090A2177D0F8AB +:10F7D000C410C9886177090AA177D0F8C40000F184 +:10F7E00008012046FDF7DBFCA868D0F8C400017EC4 +:10F7F0002046FDF7BCFCA86890F8FC102046BDE848 +:10F800007040FDF7BEBC2046BDE870400321FDF707 +:10F81000E6BB2DE9F04FDFF8688183B04FF0000AB6 +:10F82000D8F8080090F8E000594E01274FF003097E +:10F8300055464FF07F0BA6F12804082880F0E78199 +:10F84000DFE800F0FEFEFE0407B3FDFCFEF7A8FFB4 +:10F85000A8E04B48F5F768FD002808BF88F800B01D +:10F86000F5F74DFDD8F8080090F8D900002818BF2A +:10F87000FFDF4848FDF7D3FB88F80300E078002657 +:10F8800010F03F0F1CBF207910F0080F11D0414835 +:10F89000FDF737FD60B1012802D0022808D008E04A +:10F8A000E07810F03F0F1CBF207910F0010F00D05E +:10F8B00001260296D8F8080090F8DD0018B1F5F797 +:10F8C00013FDF4F728FFE1782A460020134611F0D3 +:10F8D0003F0F1ABF217911F0020F2F4647D0D8F8F9 +:10F8E0000800DFF8B0A0002590F8DB0000280CBF6E +:10F8F000012600269AF800000121C4095046FDF7B0 +:10F9000051FC34B1407900F0C000402808BF012408 +:10F9100000D00024D8F8080090F8C810032906D1B8 +:10F9200090F8C110002918BF90F8CC0001D190F8D0 +:10F93000DE00FCF755F95FEA000B0FD01021FCF751 +:10F940008CFF002818BF012644B101215046FDF765 +:10F9500029FC01465846F6F789F80546D8F808000C +:10F960002200334690F8B90018BF40F0020098F822 +:10F970000310072910D0F5F789FBCA4600F048B9F3 +:10F9800064010020CC100020805202003F420F0092 +:10F9900000120020D8110020CDE900072946029866 +:10F9A00000F07BF9824600F033B9FC48FDF737FBE5 +:10F9B00088F80400E078717A88421CD12079B17A05 +:10F9C000884218D16079F17A884214D1A079317BCC +:10F9D000884210D1E079717B88420CD1207AB17BCA +:10F9E000884208D120783178C0F38010B0EBD11F65 +:10F9F00008BF012400D00024F5F748FBE848F5F7DC +:10FA000093FC002808BF88F800B0F5F778FC98F858 +:10FA1000040004283BD1B4B30095D8F80820DF488F +:10FA2000694692F8D9307BB3054692F8660050BB20 +:10FA3000042002F1680482F8720002E029E07DE00F +:10FA4000E5E06932A11C2846FFF7C4FD04F10B0173 +:10FA50002846FDF76EFBC0B220721F2884BF1F200E +:10FA6000207298F8000009347F2808BFFFDF98F85B +:10FA70000000207088F800B0D8F8080080F86670A0 +:10FA8000062001F089FB02E0FFE7FDF775FFCA469B +:10FA9000BEE04FF0030AC248F5F746FC002808BF55 +:10FAA00088F800B0F5F72BFCBC48FDF7B8FA05461E +:10FAB000BA48FDF726FC082D08BF00287ED1E17862 +:10FAC000032011F03F0F79D02179884376D10021AE +:10FAD000B248FDF767FB062206F1090105F00EF8B2 +:10FAE00000286BD1AD48FDF7C3FA0446AD48FDF7D9 +:10FAF000CCFA844262D10121A848FDF753FB0622CB +:10FB0000F11C04F0FBFF002858D1A448FDF7BDFA12 +:10FB10000446A448FDF7ACFA844279D1F5F7CEFB50 +:10FB2000F5F782FBF5F7B2FAF5F70FFB4FF0020A93 +:10FB3000FFF75BF9042001F02FFB69E04FF0030AA7 +:10FB4000F5F7A4FA9648F5F7EFFB002808BF88F808 +:10FB500000B0F5F7D4FB9148FDF761FA81468F4874 +:10FB6000FDF7CFFBB9F1070F08BF002850D1E178AE +:10FB7000012011F03F0F4BD02179884348D100215B +:10FB80008648FDF70FFB062206F1090104F0B6FFD7 +:10FB9000A0B98248FDF76CFA04468248FDF775FA71 +:10FBA000844235D1D8F8080090F8041139B3B0F880 +:10FBB000082190F80611012A07D900E028E0520830 +:10FBC000A0F8082108BFA0F80871012914BF002976 +:10FBD0000D21C943C1EBC10202EB011190F80521CF +:10FBE000D24302EB8203C3EB82121144B0F8082126 +:10FBF000890CB1FBF2F302FB131180F8051180F8B8 +:10FC00000471694665480095FDF7B6FE00E0FFDF28 +:10FC100003B05046BDE8F08F10B5F5F737FA6048ED +:10FC2000F5F782FB5E4C002804BF7F202070F5F7BB +:10FC300066FBA06890F8041119B1002180F8041146 +:10FC400010BDB0F8082190F80611FF2A0AD24FF62D +:10FC5000FF7303EA4202A0F80821FF2A84BFFF22B3 +:10FC6000A0F80821012914BF00290D21C943C1EBC7 +:10FC7000C10202EB011290F80511C94301EB8103A7 +:10FC8000C3EB81111144B0F80821890CB1FBF2F3E8 +:10FC900002FB131180F80511CFE72DE9F84F8346D9 +:10FCA0009946924688463D480A9FFDF72AFB3B4EFF +:10FCB0003B4D002800F03C81012803D0022800F0D1 +:10FCC0007781BAE0002403213448FDF76BFABBF1D9 +:10FCD000000F6BD0A96891F8E720012A66D142781D +:10FCE00091F8E9301209B2EB131F5FD10088B1F827 +:10FCF000E810C0F30B00C1F30B01884256D127482E +:10FD0000FDF7FFFAA96891F8E62090424ED191F8EC +:10FD1000C800012818BF022802D0032847D0AEE04F +:10FD2000F5F7B4F9F07810F03F0F1CBF307910F000 +:10FD3000020F18D0194C2046FDF7A7F906460121FD +:10FD40002046FDF72FFA3146F4F741FF002818BF8F +:10FD5000012050EA08000BD08DF8007069460F486A +:10FD6000FDF70AFE18E000210C48FDF705FE13E040 +:10FD7000A86890F8CA00032818BF02280CD1BAF16D +:10FD8000000F09D0B8F1000F06D107486946806816 +:10FD900000900248FDF7F0FD032470E0D811002028 +:10FDA00064010020001200206C52020064E0002177 +:10FDB0009848FDF7F7F9A9680622D1F8C4101A315E +:10FDC00004F09CFE50B99348FDF752F9A968D1F8A8 +:10FDD000C410497E884208BF012400D00024F07876 +:10FDE00010F03F0F1CBF307910F0020F03D0B8F1B4 +:10FDF000000F47D056E0A86890F8CB10012901D039 +:10FE0000ACB11FE0F4B900218248FDF7CBF9A96835 +:10FE10000268D1F8C410C1F81A208088C8837D48D0 +:10FE2000FDF726F9A968D1F8C41048760AE090F8E1 +:10FE3000DE1090F8CC00814204D0F5F727F90320BA +:10FE4000BDE8F88FA86890F8E21011F00C0F11D0FF +:10FE500090F8E21011F00C0F0ED00123D0F8C4106E +:10FE60001A460020FCF79DFEA968D1F8C410496A23 +:10FE7000884201D80B2402E0F5F708F90324204654 +:10FE8000BDE8F88FB9F1000F0ED0624E3046FDF795 +:10FE9000FCF8074601213046FDF784F93946F4F7AE +:10FEA00096FE08B1012200E00022A96891F8CB007B +:10FEB000012807D040B92CB991F8DE3091F8CC1068 +:10FEC0008B4201D1012100E000210A42D4D0012857 +:10FED00008BF002C12D100214E48FDF763F9A96834 +:10FEE0000268D1F8C410C1F81A208088C883494834 +:10FEF000FDF7BEF8A968D1F8C4104876A86890F854 +:10FF0000E21011F00C0FB5D090F8E21011F00C0FC8 +:10FF1000B2D00123D0F8C4101A460020FCF741FEED +:10FF2000A968D1F8C410496A8842A5D8A2E700BFE1 +:10FF3000F5F7ACF803213748FDF734F9BBF1000FB2 +:10FF40005DD0A96891F8E7205ABB427891F8E93072 +:10FF50001209B2EB131F52D10088B1F8E810C0F3B8 +:10FF60000B00C1F30B01884249D12A48FDF7C9F9BA +:10FF7000A96891F8E620904241D191F8C800012883 +:10FF800018BF02283BD1F07810F03F0F1CBF30792A +:10FF900010F0020F06D08DF8007069461D48FDF77D +:10FFA000EBFC2CE000211B48FDF7E6FC27E000BF3E +:10FFB000F5F76CF8A86890F8C80003281FD015481A +:10FFC000FDF79FF9A96891F8E620904217D1F278E1 +:10FFD000092012F03F0F12D0327990430FD1BBF1BC +:10FFE000000F0CD091F8C8000228DBD191F8050170 +:10FFF00040B1401E10F0FF0081F8050102D003203F +:020000040002F8 +:10000000BDE8F88F3A4601210248FDF796FF092026 +:10001000BDE8F88FD81100202DE9FF4F07460C46A8 +:10002000488881B040F2E24148430090E08A0026CF +:1000300000FB01FB94F8640091460D2818BF0C28C2 +:100040001FD024281EBF94F8650024284FF0000A12 +:1000500017D0049818B10121204602F018FC94F83A +:10006000540094F8558094F8D010054661B10129E8 +:100070006DD0022952D0032918BFFFDF67D000F0EE +:10008000D5B84FF0010AE4E7B9F1000F08BFFFDF70 +:10009000FD4EB068002808BFFFDF94F85410FB48FD +:1000A00090F82400FCF77DFF009094F85400F5F7D9 +:1000B000C6FB00F2E7314FF47A79B1FBF9F1F2486F +:1000C00080680E1894F85400F5F7B9FB014694F8CF +:1000D0005400022804BFEE484FF47A720DD0012874 +:1000E00004BFEC484FF4C86207D0042807BFEA48B1 +:1000F00040F69802E94840F6E4421044084400F211 +:10010000E731B1FBF9F10098401A00EB0B01DE4832 +:10011000406930440844061D012015E0DA48A9F181 +:1001200001018068084308BFFFDFDD48B9F1000F17 +:10013000006800EB0B0606D0D348806800F222303E +:10014000B04288BFFFDF032084F8D0006DE094F850 +:100150006410009E24291EBF94F86520242A2529B6 +:100160004FD1B4F85810B4F8F020891A491C09B2DC +:10017000002946DB94F8F210002942D00D4694F88D +:10018000F310002918BF8846022804BFC0494FF465 +:100190007A700DD0012804BFBE494FF4C86007D063 +:1001A000042807BFBC4940F69800BC4940F6E4402B +:1001B0000144022D04BFB6484FF47A720DD0012DD0 +:1001C00004BFB4484FF4C86207D0042D07BFB2483B +:1001D00040F69802B14840F6E4421044814208D902 +:1001E000081A00F5FA714FF47A70B1FBF0F006448A +:1001F00007E0401A00F5FA714FF47A70B1FBF0F0A5 +:10020000361AB9F1000F10D0DFF87C92D9F8080047 +:1002100020B9B9F80200002818BFFFDFD9F808009C +:1002200000F22230B04288BFFFDF06B9FFDF31465F +:10023000D4F8D400F2F751FBC4F8D400B860002021 +:1002400038704FF0010987F80490204602F00DFC49 +:10025000AAF10101084208BF87F8059006D094F87A +:10026000D00001280CBF0220032078714046D4F84A +:1002700024B0F5F7CBFA0146022D04BF84484FF4B1 +:100280007A720DD0012D04BF82484FF4C86207D0A6 +:10029000042D07BF804840F69802804840F6E442AB +:1002A0001044084400F23F614FF47A70B1FBF0F063 +:1002B000584400F5C970F860049830EA0A0004BF99 +:1002C00005B0BDE8F08F31463846FCF7E8FB85B253 +:1002D000204602F0CAFBA8420FD8054687F80590D1 +:1002E00006FB05F1D4F8D400F2F7F7FAB86031460E +:1002F0003846FCF7D4FB284485B22946204602F054 +:10030000C6FAB868C4F8D40005B0BDE8F08F2DE98E +:10031000F0430446634885B00D4690F80004DFF8CA +:100320008891400999F800144909884218BFFFDFF5 +:10033000DFF85481002708F14406082D80F00E8173 +:10034000DFE805F0046872726DFEFEB6202C28BF4F +:10035000FFDF36F814000621F0F786FC050008BF21 +:10036000FFDF202C28BFFFDF36F8140029888842E1 +:1003700018BFFFDF95F8D000002808BFFFDF284630 +:1003800001F089FFC8F80870A8F80270294600201B +:10039000C8F81470FCF758FC00F19804686AA04291 +:1003A00025D995F85500F5F731FA014695F854002E +:1003B000022804BF36484FF47A720DD0012804BFDA +:1003C00034484FF4C86207D0042807BF324840F6CB +:1003D0009802324840F6E442104408444FF47A71DF +:1003E00000F23F60B0FBF1F1686A0844071B294640 +:1003F0000020C8F80C70FCF727FC698840F2E24244 +:1004000051439830081AA0F22230C8F8100005B005 +:10041000BDE8F08305B0BDE8F04302F013B905B0C4 +:10042000BDE8F043F4F7BCBF99F8140D1F4940092B +:1004300091F800144909884218BFFFDF202C28BF1B +:10044000FFDF36F814000621F0F70EFC050008BFA8 +:10045000FFDF202C28BFFFDF36F8140029888842F0 +:1004600018BFFFDF0022012329466846FFF7D4FDAD +:1004700095F8DA006946F2F76FFF002808BFFFDF42 +:1004800005B0BDE8F08300002812002044120020CF +:1004900068360200A2240200D0FB010030D3010024 +:1004A0007401002001E000E00BE000E019E000E052 +:1004B000202C28BFFFDF36F814000621F0F7D4FB0C +:1004C000050008BFFFDF202C28BFFFDF36F814002F +:1004D0002988884218BFFFDF95F8D000042818BF8C +:1004E000FFDF85F8D07095F8DA404FF6FF79202CC1 +:1004F00028BFFFDF26F8149095F8DA00F2F7C5FC64 +:10050000002808BFFFDF202085F8DA00D5F8E000DA +:10051000002804BFD5F8DC00C8F8180008D0D5E9D9 +:1005200039121144826911448161D5E93701C860EB +:10053000D5F8DC0000281CBFD5F8E010016100E010 +:100540000CE004D1D5F8E000002818BF8761FE4810 +:10055000007805B0BDE8F043EBF74CBCFFDF05B019 +:10056000BDE8F0832DE9F05FF84E07468B46F08B2F +:100570007568401CF08330784FF00008002808BFF1 +:10058000FFDF07D0DFF8C89304282ED0052818BF56 +:10059000FFDF5BD05846FEF7FEF8040008BFFFDF20 +:1005A00029463069F2F799F9B86087F80080012090 +:1005B000387194F8C900022808BFE64807D001281E +:1005C00008BFE54803D004280CBFE448E4484FF4D2 +:1005D0007A7100F2E140B0FBF1F0B168FA30084402 +:1005E000F860307804287DD183E0002AD2D0D6F894 +:1005F00010A0D9F8184034B3A146E468002CFBD110 +:10060000B9F1000F1FD099F80000002808BFFFDFE4 +:10061000D9F81410D9F8040001445046F3F762F9F0 +:10062000002807DA291A491E91FBF5F101FB0504A0 +:100630002A4604E090FBF5F101FB15042A4694429A +:1006400088BFFFDF00E044462546A3E7002AA1D08B +:10065000B569002D08BFFFDF0024D5F8E420D9F8E4 +:1006600018002346611E58B18369934228BF9942FE +:1006700084BF194604460346C0680028F4D104B973 +:100680001C46C5F8E040D035002C04BFC5F80C80EE +:10069000C9F8185005D0E068E560E860002818BF88 +:1006A0000561D5F81090C5F81880B9F1000F0ED08B +:1006B000D9F8180048B1D5F814A0504538BFFFDF6D +:1006C000D9F81800A0EB0A00A861C9F81880002C1E +:1006D00008BFC6F8208009D02078002808BFFFDFB7 +:1006E000616900E00AE060680844306240F6B835AD +:1006F00050E7F08B0A2838BF032000D3022078711E +:10070000F08B012807D938467168FCF7C8F9014613 +:10071000F08B0844F083B8683061BDE8F09F2DE9A4 +:10072000F04107468F4884B00D4690F80004DFF88A +:100730003882400998F800144909884218BFFFDF41 +:1007400001200026082D814C80F0BB80DFE805F0F9 +:1007500004718C8C87B9B9A5607320736078002808 +:100760001CBF04B0BDE8F0817948866046612673FD +:100770003846FEF710F8050008BFFFDF95F8C900FE +:10078000022804BF79494FF47A720DD0012804BFC2 +:1007900071494FF4C86207D0042807BF6F4940F67B +:1007A0009802734940F6E44211444FF47A7201F220 +:1007B000E731B1FBF2F1A2688C18F5F715F80246A3 +:1007C00095F8C900082808BF082127D004280CBFC5 +:1007D0000221002322D002280CBF1821282119440D +:1007E000042816BF08280F2325235B1D082808BFEF +:1007F000402007D0042808BF102003D002280CBFD7 +:100800000420082013FB0010801A201AFDF741FD78 +:10081000002818BFFFDF04B0BDE8F08101EB410103 +:1008200001F12803082814BF04284FF4A871D6D07A +:10083000D1E7617851B1207B002808BFFDF751FF57 +:10084000667304B0BDE8F041F2F74ABAA073FDF751 +:10085000E2FD002818BFFFDF04B0BDE8F08104B05E +:10086000BDE8F041F4F79CBD98F8140D41494009EA +:1008700091F800144909884218BFFFDF0022394669 +:100880006846FFF76FFE69463846F2F765FD0028B7 +:1008900008BFFFDF04B0BDE8F0812078052818BF4D +:1008A000FFDF207F002808BFFFDF26772670207D2E +:1008B000F2F7EBFA002808BFFFDF267504B0BDE8A9 +:1008C000F081FFDF04B0BDE8F0812DE9F0411F4C5D +:1008D0000026207804281FBF207805280C20BDE8BA +:1008E000F08101206070607B0025A8B1EFF31080DB +:1008F00010F0010F72B60CBF00270127607B0028A3 +:100900001CBFA07B002805D0FDF7EBFE6573A57327 +:10091000F2F7E6F92FB903E0207DF2F72FFE00E0B1 +:1009200062B6207DF3F777F8207F28B1257720780D +:10093000052818BFFFDF0C2665702570207DF2F7B3 +:10094000A4FA002818E000007001002044120020E2 +:100950002812002004360200A2240200D0FB01006D +:10096000C0D4010001E000E00BE000E068360200C6 +:1009700030D3010019E000E008BFFFDF25753046E5 +:10098000BDE8F0812DE9F04FFB4883B000780028E6 +:1009900018BFFFF79AFF0120DFF8E08388F8000016 +:1009A00069460620F0F7E9F8002818BFFFDF0027A6 +:1009B0004FF6FF7934E0029800281CBF90F8D01061 +:1009C00000292DD0008848451CBFDFF8B4A34FF0A4 +:1009D000200B3BD00621F0F747F9040008BFFFDFEA +:1009E00094F8DA00F3F717F884F8D07094F8DA5036 +:1009F0004FF6FF76202D28BFFFDF2AF8156094F808 +:100A0000DA00F2F742FA002808BFFFDF84F8DAB014 +:100A100069460620F0F7B1F8002818BFFFDF10E0A4 +:100A20006846F0F788F80028C5D00FE00298002843 +:100A30001CBF90F8D010002903D000884845C9D1C8 +:100A400004E06846F0F777F80028EFD088F80070E7 +:100A5000C8F8187003B00020BDE8F08F10B5C94C7D +:100A600060B101280CBF40F6C410FFDF06D0A068BB +:100A700041F66A01884228BFFFDF10BDA060F6E79B +:100A800010B5DFF800C3BC4C00238CF800002370C5 +:100A90006370237723736373A3732020A36120758E +:100AA000A4F11C004370423010214FF6FF724280C7 +:100AB00020F8042F491EFAD1CCF80830DCF80800E1 +:100AC00041F66A01884228BFFFDFFFF75BFF40F66F +:100AD000C41101206160F4F799FE00F2E7314FF490 +:100AE0007A70B1FBF0F042F210710844A0606168C6 +:100AF000A1F21731884298BF0146A16010BDF0B540 +:100B00009D4C054685B0207800281EBF0C2005B0FE +:100B1000F0BD95F8546095F855006F6AF4F776FECD +:100B2000022E04BF98494FF47A720DD0012E04BFF3 +:100B300096494FF4C86207D0042E07BF944940F687 +:100B40009802944940F6E442114408444FF47A7103 +:100B500000F23F60B0FBF1F0384400F22230C5F8FB +:100B6000E400A56195F8D000002818BFFFDF002041 +:100B7000824948610521217060702077E0838648B2 +:100B8000F2F729F92075202808BFFFDFF2F79CF95A +:100B90002061217D01226846FFF7E4FC207D694643 +:100BA000F2F7DAFB002808BFFFDF002005B0F0BD38 +:100BB0007148007800281CBF0020704710B506203F +:100BC000EFF7ECFF80F0010010BD70B56A4C0546F0 +:100BD0002078002818BFFFDF2878012832D00428A9 +:100BE0001CBF112070BDE8882E89082540F27121B4 +:100BF000484360602846F4F709FE4FF47A7100F22A +:100C0000E730B0FBF1F040F2712206FB0200A06079 +:100C1000022D08BF614A07D0012D08BF5B4A03D0EF +:100C2000042D0CBF5A4A5E4A02F2E142B2FBF1F1D6 +:100C30006268511AA1F28A21884298BF01460020B9 +:100C4000A16070BD6888AE880125CFE710B584B07B +:100C500008431EBF112004B010BD474C2078002867 +:100C60001EBF0C2004B010BD002060700421217054 +:100C7000E0834948F2F7AFF82075202808BFFFDF6E +:100C80003E48806938B10146C0680028FBD111B1E7 +:100C9000F2F71AF905E0F2F717F940F6B831F1F773 +:100CA0001CFE2061217D01226846FFF75BFC207D50 +:100CB0006946F2F751FB002808BFFFDF002004B0AF +:100CC00010BD70B52C4CA1690160FFF7FEFD00233B +:100CD00000BBA169D1F8E0205AB1D1E939C5AC44D3 +:100CE0009569AC44C2F818C0D1E9372CCCF80C2077 +:100CF00005E0DFF888C0D1F8DC20CCF81820D1F866 +:100D0000DC20D1F8E010002A18BF116102D10029BF +:100D100018BF8B61A36170BD18494870704770B5EA +:100D200040F2E24300FB03F510460C46F4F76EFD7B +:100D3000022C04BF14494FF47A720DD0012C04BF69 +:100D400012494FF4C86207D0042C07BF104940F67F +:100D50009802104940F6E442114408444FF47A7175 +:100D600000F23F60B0FBF1F000F2223085428CBF10 +:100D7000281A002070BD0000441200202812002014 +:100D80006C1200207001002068360200A2240200CC +:100D9000D0FB010030D301001F070200043602001F +:100DA000C0D4010070B50D46064601460020FBF791 +:100DB0004BFF044696F85500F4F728FD014696F8D7 +:100DC0005400022804BFFB4A4FF47A700DD001286A +:100DD00004BFF94A4FF4C86007D0042807BFF74A98 +:100DE00040F69800F64A40F6E440104408444FF4B8 +:100DF0007A7100F23F60B0FBF1F0718840F271222D +:100E00005143C0EB4100A0F22230A54234BF21463D +:100E10002946814203D2A5422CBF28462046706253 +:100E200070BD10B5F4F7E0FCE6498A684968511ACC +:100E3000084410BD2DE9F04FE24B04252827D3F8D4 +:100E400008B04FF010080BF198044FF008094FF06C +:100E5000000C4FF4C8734FF4BF764FF0400A0628D9 +:100E60007CD2DFE800F00351214E246C14200429C9 +:100E700011D0082908D02A20022910D010FB0940DF +:100E800000252821294458E0554610FB054000BFA5 +:100E90004FF4A871F6E710FB08402E25F8E710FB89 +:100EA000054065461821EDE704F5317473E0D0B2D2 +:100EB00011F00C0F08BF0020082904BF00F5BA612B +:100EC00040200ED0042917D002290CBF0CF15C0180 +:100ED0000CF1B001014407BF0CF1180304203B469C +:100EE000082000EBC00000EB400003EB400008448A +:100EF000204400F19C044EE000F28E213346102085 +:100F0000EFE704F5B07446E0082908BF40200CD094 +:100F1000042904BF3346102007D0022907BF0CF173 +:100F2000180304200CF128030820C0EBC00000EBDC +:100F3000400003EB40000BEB020144182BE0D0B261 +:100F400011F00C0F08BF0020082904BF00F535611F +:100F5000402010D0042918D0022900E01AE00CBF6C +:100F60000CF1B4010CF5B071014407BF0CF118038A +:100F700004203B46082000EB400202EB001018441E +:100F80000844204400F19C0405E000F2EE313346B1 +:100F90001020F0E7FFDF8C488068A0428CBF012062 +:100FA0000020BDE8F08F10B5864C607828B1D4E9F8 +:100FB0000301A268FBF79BFDE060D4E902018842CF +:100FC0009CBF2078002814BF0020012010BD0422FF +:100FD0002DE9F04F774E784FDFF8E081DFF8E091B0 +:100FE00085B04FF47A7A052980F0D280DFE801F0ED +:100FF0000A2B0331920080F8D02005B0BDE8F04FF5 +:10100000F1F76EBE04466F480078002818BF84F8D8 +:10101000D02004D005B0BDE8F04FF1F761BE012249 +:10102000002321466846FEF7F7FF94F8DA00694688 +:10103000F2F792F9002808BFFFDFB4F85800401C0F +:10104000A4F85800E6E7032180F8D01005B0BDE809 +:10105000F08F8346408840F2E24148435B49086094 +:10106000DBF8F80059460089ABF81600DBF8F80009 +:1010700080798BF81500DBF8F8004089ABF80200A6 +:10108000DBF8F8008089ABF80400DBF8F800C089D1 +:10109000ABF806000020DBF82850FBF7D5FD04462E +:1010A0009BF85500F4F7B2FB9BF85410022908BFD7 +:1010B0004FF47A710DD0012904BF3E464FF4C86148 +:1010C00007D0042907BF464640F698014E4640F631 +:1010D000E4413144084400F23F60B0FBFAF1BBF850 +:1010E000020040F271225043C1EB4000A0F22230D6 +:1010F000A54234BF21462946814203D2A5422CBFD6 +:1011000028462046CBF8240002208BF8D00005B0FA +:10111000BDE8F08F83460146856A0020FBF794FD09 +:1011200004469BF85500F4F771FB9BF85410022914 +:1011300008BF4FF47A710DD0012904BF3E464FF429 +:10114000C86107D0042907BF464640F698014E46BD +:1011500040F6E4413144084400F23F60B0FBFAF04D +:10116000BBF8021040F271225143C0EB4100A0F2E3 +:101170002230A54234BF21462946814203D2A542EE +:101180002CBF28462046CBF8240005B0BDE8F08FE0 +:10119000FFDF05B0BDE8F08F2DE9F043DFF83080C8 +:1011A0000126002498F80010074D85B0072880F02C +:1011B000C6810FE068360200A2240200D0FB0100C5 +:1011C00030D30100281200204412002074010020B6 +:1011D00070010020DFE800F0041A1AFCFCFBFB00A1 +:1011E000EC830846EAF706FE6878002840F066813E +:1011F000297D00226846FFF7B5F9287D6946F2F798 +:10120000ABF8002808BFFFDF00F058B902280CBF78 +:1012100001260026287DFDF7BEFA040008BFFFDF87 +:1012200094F8E2103046FBF7BCFEDFF874930146F9 +:101230002869D9F80820002E024408BF4FF4FC703A +:101240007DD094F8E20094F80B3110F00C0F08BF39 +:10125000002394F8E20008281EBF94F8E200042856 +:101260004FF0000C00F0C68094F8E20008281ABF86 +:1012700094F8E20004284FF4A87005D094F8E20036 +:1012800002280CBF18202820844494F8E200082883 +:1012900008BF40200BD094F8E200042808BF1020BB +:1012A00005D094F8E20002280CBF04200820C0EB0F +:1012B000C00606EB4010604494F8E2C0BCF1080F91 +:1012C0001EBF94F8E2C0BCF1040F00267ED000BF20 +:1012D00094F8E2C0BCF1080F1ABF94F8E2C0BCF168 +:1012E000040F4FF4A87C08D094F8E2C0BCF1020FC0 +:1012F0000CBF4FF0180C4FF0280C664494F8E2C075 +:10130000BCF1080F08BF4FF0400C10D094F8E2C0B9 +:10131000BCF1040F08BF4FF0100C08D094F8E2C0E5 +:10132000BCF1020F0CBF4FF0040C4FF0080C0CEB9B +:101330004C0707EB0C1CB4446044184400E001E087 +:1013400000F59A7010440844061D94F8E200F4F782 +:101350005DFA024694F8E200022808BF91480BD0DB +:1013600094F8E200012808BF8F4805D094F8E20005 +:1013700004280CBF8D488E4894F8E210022908BF5B +:101380004FF47A710ED094F8E210012908BF4FF49F +:10139000C86107D094F8E21004290CBF40F6980108 +:1013A00040F6E441084410444FF47A7100F2E7300B +:1013B000B0FBF1F0A96940F2E243301A4A88D0311B +:1013C00002FB03F7D9F818208A4202E01CE0B0E0E3 +:1013D0005DE008BF00262BD0296AF2F783FA0028C7 +:1013E0001EDA391A4A1E92FBF7F202FB070639464B +:1013F0001BE000BF94F8E200082818BF022000EBB1 +:10140000400000F1280C2FE794F8E2C0BCF1080F6F +:1014100018BF4FF0020C0CEB4C0C0CF1280657E7F0 +:1014200090FBF7F202FB170639468E4288BFFFDFBA +:10143000D8F80800864208D2A86940F27122418893 +:10144000C1824A4306EB420605E040F2E240B6FBA9 +:10145000F0F0A969C88294F8E210A86980F85410E5 +:1014600094F8E21080F8551005214175C08A6FF498 +:101470001C71484306EB400040F63541C9F81400A2 +:10148000B0EB410F28BFFFDF05B0BDE8F0830428B3 +:101490000CBF01270027EC830846EAF7ABFC2E7748 +:1014A00085F82470A8692969C0F8D41080F8D04064 +:1014B0002978052918BFFFDF07D000BFF1F710FC1E +:1014C0006C73AC7305B0BDE8F083002808BFFFDF84 +:1014D000A86990F8D000002818BFFFDFA86990F82D +:1014E000DA00202818BFFFDF3248F1F774FCA96941 +:1014F0000646202881F8DA000F8828BFFFDF2E4833 +:1015000020F81670A86990F8DA00202808BFFFDFDD +:10151000002301226846A969FEF77EFDA869694695 +:1015200090F8DA00F1F718FF002808BFFFDFAC6180 +:10153000C4E705B00846BDE8F043EAF75BBCFFDF4F +:1015400005B0BDE8F08316494860704770B5144D8A +:101550000446002904BFA86070BD4FF47A760129C3 +:1015600010D002291CBFFFDF70BD6888401C688056 +:101570001046F4F764F900F2E730B0FBF6F0201AF9 +:10158000A86070BD1846F4F76FF900F2E730B0FBC1 +:10159000F6F0201AA86070BD084800787047000077 +:1015A0002812002068360200A2240200D0FB0100AD +:1015B00030D301000F0302006C12002044120020FF +:1015C000FB490C28896881F8CB001ABF132818281A +:1015D0007047002211280FD0072808BF7047152830 +:1015E0000AD001281ABF002802287047A1F88420D9 +:1015F000012081F888007047A1F88A20704770B5F3 +:10160000EB4CA1680A88A1F83E2181F83C0191F8D1 +:101610005400012808BF012508D0022808BF022570 +:1016200004D0042816BF08280325FFDFA06880F82F +:10163000405190F85500012808BF012508D0022824 +:1016400008BF022504D0042816BF08280325FFDFA1 +:10165000A068012180F8415180F83A11002180F8FA +:101660000E11E078BDE87040EAF7C4BBD04A01290A +:1016700092681BD0002302290FD0032922D030B357 +:1016800001282FD0032818BF704792F86400132850 +:101690001CBF1628182805D1704792F8CB000028E7 +:1016A00008BF7047D2F8F8000370704792F8CB007B +:1016B000012808BF704700BFD2F8FC000178491E1E +:1016C0000170704792F8CB000328EBD17047D2F835 +:1016D000F800B2F858108288891A09B20029A8BF08 +:1016E00003707047B2F85800B2F80211401A00B205 +:1016F0000028E1DA70472DE9F041AD4C00260327C0 +:10170000D4F808C0012590B12069C0788CF8CA00CF +:1017100005FA00F010F4000F08BFFFDFA06880F8A2 +:101720006470A0F8846080F88850BDE8F0810023E0 +:101730009CF8652019460CF15800FBF746F9002883 +:1017400004BF6570BDE8F0816078002818BFBDE86F +:10175000F0812069C178A06880F8C91080F86570B0 +:10176000A0F88A6080F88C50BDE8F08170B5904C8C +:1017700084B0207910F0010F04BF04B070BD20695F +:1017800000230521C578A06890F864205830FBF745 +:101790001CF9002818BF062D09D020DC022D1CBF23 +:1017A000042D052D03D0607840F00800607060784B +:1017B00000281CBF04B070BD2069C078801E1628A8 +:1017C00080F00783DFE800F011FE89A7D52CFEFD2D +:1017D000FE7FFCD2FEFEFEC5FBFAF9F8F7F60B2DF4 +:1017E0001CBF0D2D112DDED1E1E7A06800230121E2 +:1017F00090F867205830FBF7E8F8002840F05C8349 +:101800002069FBF7F3FEA16881F8F600072081F854 +:101810006700002081F88C0081F8880000F04CBB44 +:10182000A0680921002390F864205830FBF7CDF818 +:1018300018B120690079122812D0A0680A2100236B +:1018400090F864205830FBF7C0F818B1206900798F +:10185000142820D020690079162840F02D8324E038 +:10186000A0680125002390F8642009215830FBF777 +:10187000ACF8002808BF657000F01E83607800286F +:1018800040F01A83A16881F87C0081F8880081F813 +:10189000640000F011BBA168002081F86400A1F889 +:1018A000840081F8880000F035BAA06890F86410D0 +:1018B0001F2940F00183002180F8641080F888100F +:1018C0001A2000F0F7BAA06890F864100F2927D109 +:1018D000002180F86910122137E0A06890F86410A8 +:1018E00013291DD1D0F8F81000884988814218BF0B +:1018F000FFDFA068D0F8F80000F126012069FBF7AF +:10190000A2FEA06800F1C4012069FBF7A4FE162026 +:10191000A16800F05BB9A26892F86400162802D0B2 +:10192000022000F03BBAD2F8F80002F1B00300F157 +:101930001E0100220E30FAF7C4FFA0680021C0E9A2 +:101940002811012180F86910182180F8641000F036 +:10195000B3BA2069FBF7FFFE032840F0AD8220698F +:10196000FBF7FDFE01F00FFC00F0A6BA206900793C +:10197000F8E7A06890F864101A29D1D1002580F802 +:101980008D5080F88850D0F8F8100088498881423E +:1019900018BFFFDFA068D0F8F8100D70D0F8441120 +:1019A0000A78002A18BFFFDF7ED190F88E200AE067 +:1019B0007C0100203BE2B7E182E126E1F2E009E1AF +:1019C0002CE09FE0AAE17AB180F88E500288CA80AC +:1019D000D0F844110D71D0F844210E211170D0F8C7 +:1019E00044210188518010E00288CA80D0F8441157 +:1019F0000D71D0F8442101211172D0F844210D213C +:101A00001170D0F84421018851800088EFF75EFA08 +:101A1000EEF7F6FEE078EAF7EDF9BEE0A068002305 +:101A2000194690F865205830FAF7CFFF50B9A068F2 +:101A30000023082190F864205830FAF7C6FF0028E8 +:101A400000F0FA816078002840F03682A06890F8B3 +:101A5000900010F0020F14D12069FBF7FFFDA16880 +:101A600081F891002069B0F80520A1F89220B0F823 +:101A70000700A1F8940091F8900040F0020081F86E +:101A80009000A06890F8901011F0010F14D190F818 +:101A90006520002319465830FAF797FF002808BF41 +:101AA000FFDF0121A06800E077E080F8651080F892 +:101AB0008C100021A0F88A10A06890F86410012909 +:101AC00007D1002180F8641080F88810E078EAF7E8 +:101AD00091F9A168D1F8F800098842888A4204BFC8 +:101AE0000178042940F0E88100250570E078EAF7E4 +:101AF00081F9A06890F86410002908BF80F8885028 +:101B000000F0DAB9A0680023072190F8642058306B +:101B1000FAF75BFF002800F08F816078002840F022 +:101B2000CB8102A92069FBF7D3FD9DF808000025B1 +:101B300000F02501A06880F896109DF8091001F0CA +:101B4000410180F8971080F88850D0F8F81000888C +:101B50004988814218BFFFDFA068D0F8F8100D70E7 +:101B6000D0F844110A78002A18BFFFDF15D1028887 +:101B7000CA80D0F844110D71D0F84411029A8A60DD +:101B8000039ACA60D0F84421082111700188D0F866 +:101B900044014180E078EAF72DF9A06880F86450AC +:101BA00000F08AB9A0680023092190F86420583019 +:101BB000FAF70BFF002800F03F816078002840F022 +:101BC0007B81A16881F87C0081F8880081F864003D +:101BD00000F072B9A0680023194690F865205830CB +:101BE000FAF7F3FE002800F027816078002840F023 +:101BF0006381A0680021A0F88A10012180F88C1070 +:101C0000022180F8651000F057B9A068002319463A +:101C100090F865205830FAF7D8FE00287FD0206968 +:101C2000FBF740FD002879D0A5682069FBF736FD59 +:101C30002887A5682069FBF72DFD6887A5682069BE +:101C4000FBF72EFDA887A5682069FBF725FDE8872F +:101C5000A06890F864101C2913BF90F84E10012161 +:101C600080F84E10012907D090F80511002904BF13 +:101C700090F80411002903D01E2180F8651017E0A8 +:101C80001D2180F865100288A0F82A21028FA0F893 +:101C90002C21428FA0F82E21828F00F58A71A0F8A6 +:101CA0003021C08FC88301200875E078EAF7A2F8D8 +:101CB000A0680021A0F88A10012180F88C10FBE0B8 +:101CC000A06800230A2190F864205830FAF77DFEBE +:101CD00018B32069FBF7E6FCA8B1A5682069FBF7FB +:101CE000DDFC2887A5682069FBF7D4FC6887A56818 +:101CF0002069FBF7D5FCA887A5682069FBF7CCFC19 +:101D0000E88700F019FFA168002081F8880081F8B9 +:101D1000640000BF00F0E1FECEE000E059E0607832 +:101D200040F001006070C7E0A0680023194690F8F9 +:101D300065205830FAF749FE78B3A06890F864003F +:101D4000232812BF2428607840F0200026D068465F +:101D5000F3F71FFE002808BF002104D0009802A955 +:101D6000C0788DF80800A06801AB162290F86400D6 +:101D7000FBF7FBF8A0B1A0689DF80420162180F8BD +:101D8000EC2080F8ED10192180F86510012180F811 +:101D90008C100021A0F88A108EE04DE060708BE07E +:101DA0002069FBF79AFCA0B12269107900F00701C5 +:101DB000A06880F85010527902F0070280F8512094 +:101DC00090F80F31002B04BF90F80E31002B04D097 +:101DD00022E00020FFF78FFC6EE090F855C000F184 +:101DE00054038C4501BF19789142012180F87D1080 +:101DF00012D00288A0F8362190F8502000F58A71A0 +:101E000080F8382190F8510081F82500012081F8F0 +:101E10002000E078E9F7EEFFA068212180F8651046 +:101E2000012180F88C100021A0F88A1044E0A068FD +:101E300090F864001F2801D00120AFE72069FBF76C +:101E400056FC88B32069A2680179407901F0070146 +:101E500061F30705294600F0070060F30F21012018 +:101E600082F888000025A2F88450232082F86400BC +:101E7000566DD2F81001FAF7F7FFF2B2C1B28A42FA +:101E800007BFA16881F8F250A26882F8F210C6F389 +:101E90000721C0F30720814219BFA16881F8F30030 +:101EA000A06880F8F35007E0FFE70120FFF723FC6C +:101EB0005FF01E00FFF7A3FBA068D0E92A12491CBF +:101EC00042F10002C0E92A1204B070BD2DE9F047CA +:101ED000FE4D04464FF00007687808436870287983 +:101EE00010F0200F2846806818BFA0F87E7004D13B +:101EF000B0F87E10491CA0F87E1090F86A100126F8 +:101F000039B990F86420002306215830FAF75DFDB6 +:101F100058B3A88810F4006F07D0A86890F86A102A +:101F2000002918BFA0F876701FD1A868B0F8761005 +:101F3000491C89B2A0F87610B0F878208A422CBFEC +:101F4000511A00218288521D8A4228BF80F87C6085 +:101F5000B0F87610B0F87820914206D3A0F87670E9 +:101F600080F81A61E878E9F745FF287910F0600FEA +:101F700008D0A86890F8681021B980F8686001213D +:101F8000FFF725F84FF00808002C56D16878002894 +:101F900051D1287910F0040F0DD0A86890F8640092 +:101FA000032808BFFFDFA86890F86710072904BF5F +:101FB0002E7080F8677001F036F9287910F0080F5C +:101FC00019D06878B8B9A868002190F8CB00FFF75D +:101FD0004DFBA86890F8CB00FE2808BFFFDFFE216C +:101FE000A86880F8CB1090F86710082903D1022167 +:101FF000297080F86770FFF7B9FBA87810F0080F18 +:1020000016D0A8680023052190F864205830FAF70C +:10201000DCFC50B185F80180A868D0F8441108783C +:102020000D2808BF0020087002E00020F9F7E8F84A +:10203000A86801F031F800F0C9FDA868A14600F1D8 +:10204000580490F8F40030B9E27B002301212046C7 +:10205000FAF7BBFC10B1608D401C60853D21B9F1E1 +:10206000000F18D12878022808BF16200ED00128AA +:1020700004BFA86890F8F60008D06878E8B110F0BE +:10208000140F1CBF1E20207702D005E0207703E04C +:1020900010F0080F02D02177E67641E010F0030F30 +:1020A00003D02A202077E6763AE010F0200F08BF10 +:1020B000FFDF23202077E67632E094F8300028B165 +:1020C000A08D411CA185E18D884213D294F8340083 +:1020D00028B1608E411C6186E18D88420AD2618DF3 +:1020E000208D814203D3AA6892F8F42012B9E28DC0 +:1020F000914203D322202077E67611E0217C31B192 +:10210000E18C814228BF84F81C80C5D206E0E08CB7 +:10211000062803D33E202077E67601E0E07EA0B1DA +:102120002773677327740221A868FEF750FFA86819 +:1021300090F8CB10012904D1D0F8FC000178491E99 +:102140000170E878E9F756FE03E00021A868FEF781 +:102150003EFFBDE8F047F3F72BBC5C4A517893781B +:10216000194314D111460128896809D0107910F05B +:10217000040F03D091F86700072808D001207047AA +:10218000B1F84800098E884201D8FEF70CBF002044 +:10219000704770B54D4C06460D46A0883043A08070 +:1021A00016F0020F04D016F0010F18BFFFDFE56034 +:1021B00016F0010F18BF256116F0020F4FF0000254 +:1021C0004FF0010117D0E878062802D00B280BD079 +:1021D00011E0A06890F86420182A0CD10022C0E910 +:1021E0002A2280F86A1006E0A06890F8641012298C +:1021F00008BF80F86A2016F0800F1CBF0820A0706E +:1022000016F4806F08BF70BDA268B2F858009188BC +:102210000844801DE97880B2012908BFA2F80201B4 +:102220001ED0002904BFD2F8F810888018D01829D1 +:1022300016D192F8F210002904BF92F8F330002B67 +:102240000BD011F00C0F1EBF92F8543013F00C0F8E +:10225000994203D092F8F31001B90020A2F8F000DF +:10226000E9782846012909D071B1182918BF70BD35 +:10227000B2F8F010BDE87040FBF74BBAB2F80211AB +:102280004172090AA97270BDD2F8F81089884173A9 +:10229000090AA97370BDF0B50C4C85B00026A0608A +:1022A000A6806670A670054626700088F3F748FB86 +:1022B000A0680088F3F76AFBB5F8D800A168401C55 +:1022C00082B201F15800FAF743F901E07C010020E5 +:1022D000002818BFFFDF95F8650024280AD1B5F85B +:1022E0005810B5F8F000081A00B20028A4BF6078B2 +:1022F000002806D095F86400242818BF25283BD173 +:1023000019E0A06890F8F210002908BF90F8541066 +:1023100080F8541090F8F310002908BF90F8551079 +:1023200080F855100020FFF76AF985F86560A1680C +:1023300081F87D6020E0B5F85810B5F8F000081A73 +:1023400000B20028A4BF6078002815D1A06890F8DA +:10235000F210002908BF90F8541080F8541090F83B +:10236000F310002908BF90F8551080F85510002090 +:10237000FFF745F985F86460A5F8D860A06890F883 +:10238000881039B1B0F88410B0F88620914224BF8B +:1023900005B0F0BD90F88C1039B1B0F88A10B0F8E3 +:1023A0008620914224BF05B0F0BDB0F88220B0F87D +:1023B00080108A4224BF05B0F0BD90F8682092B327 +:1023C000B0F87E208A4224BF05B0F0BD90F8CB70F3 +:1023D000FE2F00F01E816846F3F7B5FA002808BF0B +:1023E000FFDF2221009802F034FC03210098FBF764 +:1023F00079F80098017821F0100101703946FBF757 +:102400009FF8192F80F0E380DFE807F028201446BA +:10241000E1E1E21A71E1E2E264E1E1E1E1D4E2E268 +:102420007B94ADE1B600B0F87E10062924BF05B05C +:10243000F0BDCBE7A068009990F8F5000871C7E0FF +:10244000A168009891F8CC100171C1E0A068D0F8A3 +:10245000FC00411C0098FBF7BEF8B9E0A1680098A9 +:10246000D1F8F82092790271D1F8F82012894271DE +:10247000120A8271D1F8F8205289C271120A0272CE +:10248000D1F8F82092894272120A8272D1F8F810BB +:10249000C989FBF778F89BE0A068D0F8F800011D27 +:1024A0000098FBF7A5F8A068D0F8F80000F10C013F +:1024B0000098FBF7A7F8A068D0F8F80000F11E011B +:1024C0000098FBF7A5F8A06800F1C0010098FBF7A1 +:1024D000ADF87DE0626900981178017191884171D1 +:1024E000090A81715188C171090A017270E0FE49BF +:1024F000D1E90001CDE9020102A90098FBF7B0F88B +:1025000066E0A068B0F844100098FBF7B3F8A06844 +:10251000B0F846100098FBF7B1F8A068B0F840108A +:102520000098FBF7AFF8A068B0F842100098FBF7EE +:10253000ADF84DE0A068B0F840100098FBF7A2F8A5 +:10254000A068B0F842100098FBF7A0F8A068B0F8B7 +:1025500044100098FBF78EF8A068B0F84610009879 +:10256000FBF78CF834E0A068009990F810210A710C +:1025700090F8110148712BE0A06890F8F300FAF789 +:102580006AFC01460098FBF7C0F8A16891F8F200D8 +:1025900010F00C0F1CBF91F8541011F00C0F02D06A +:1025A000884218BF0020FAF756FC01460098FBF756 +:1025B000A8F80DE0A06890F8ED100098FBF7C9F8B6 +:1025C000A06890F8EC100098FBF7C7F800E0FFDF78 +:1025D000F3F7CCF9002808BFFFDF0098C178012984 +:1025E00003D049B118290FD013E0A168B1F8021146 +:1025F0004172090A81720CE0A168D1F8F81089884B +:102600004173090A817304E0A168B1F8F010FBF787 +:1026100080F8B6480090B64BB64A29463046F8F7DF +:1026200033FDA0680023052190F864205830FAF7A4 +:10263000CCF9002804BF05B0F0BD05B0BDE8F040FE +:10264000F8F713BBAC48806890F8881029B1B0F84F +:102650008410B0F8862091421AD290F88C1029B1DB +:10266000B0F88A10B0F88620914211D2B0F88220DA +:10267000B0F880108A420BD290F86820B0F87E0043 +:1026800022B1884204D200BFF8F796BD0628FBD3DA +:10269000002001461AE470B50C46064615464FF474 +:1026A000A471204602F0F7FA2680002D08BFFFDF54 +:1026B0002868C4F8F8006868C4F8FC00A868C4F882 +:1026C000440170BDEEF7D9BB2DE9F0410D46074638 +:1026D0000621EEF7C9FA040008BFBDE8F081D4F87E +:1026E00044110026087858B14A8821888A4207D1C7 +:1026F000092810D00E281DD00D2832D008284CD023 +:1027000094F81A01002857D06E701020287084F8B1 +:102710001A61AF803EE06E7009202870D4F8440141 +:10272000416869608168A9608089A881D4F8440102 +:1027300006702FE00846EEF7C9FB0746EEF775F87E +:10274000B0B96E700E202870D4F8440140686860FB +:10275000D4F8440106703846EEF761F80120BDE870 +:10276000F0810846EEF7B2FB0746EEF75EF810B1CF +:102770000020BDE8F0816E700D202870D4F844016F +:102780004168696000892881D4F8440106703846A0 +:10279000EEF745F80120BDE8F0816E700820287042 +:1027A000D4F8440141688268C0686960AA60E86042 +:1027B000D4F844010670EDE794F81C01B0B16E70D6 +:1027C0001520287094F81C010028E3D084F81C61BF +:1027D000D4F81E016860D4F82201A860B4F826017C +:1027E000A88194F81C010028F0D1D3E794F82801BF +:1027F00070B16E701D20287084F82861D4F82A0109 +:102800006860D4F82E01A860B4F83201A881C1E74D +:1028100094F8340140B16E701E20287084F8346141 +:10282000D4F836016860B5E794F8140180B16E7091 +:102830001B20287094F814010028ABD084F8146190 +:10284000D4F81601686094F814010028F6D1A1E7C5 +:1028500094F83A01002808BFBDE8F0816E70162098 +:10286000287094F83A01002894D000BF84F83A61A7 +:10287000D4F83C016860B4F84001288194F83A012A +:102880000028F3D186E71C4A5061D17070472DE9CA +:10289000F0470446481E85B238BFBDE8F08704F112 +:1028A00008080126DFF850904FF0090A5FF0000792 +:1028B000B4F8D800401CA4F8D800B4F87E00401C3E +:1028C000A4F87E0094F86A0040B994F864200023CC +:1028D000062104F15800FAF778F838B3B4F8760016 +:1028E000401C80B20AE0000098520200CD1E020097 +:1028F0005B210200932102007C010020A4F87600F5 +:10290000B4F8781081422CBF0A1A0022A3885B1DFC +:10291000934228BF84F87C60884207D3A4F876707D +:1029200084F81A6199F80300E9F764FA94F88800CA +:1029300020B1B4F88400401CA4F8840094F88C0002 +:1029400020B1B4F88A00401CA4F88A0094F8F4007E +:1029500040B994F867200023012104F15800FAF7E8 +:1029600034F820B1B4F88200401CA4F8820094F836 +:1029700064000C2802D00D2820D067E0B4F858007D +:10298000411CB4F80201814260D1D4F8FC00411C22 +:10299000404602F095FA02212046F9F7FCFCD4F8F3 +:1029A000FC000078002808BFFFDF0121FE20FEF7B1 +:1029B0005DFE84F8647084F8986047E0B4F85800CD +:1029C000411CD4F8F800808881423FD1D4F84401FA +:1029D0000178002918BFFFDF22D12188C180D4F8F7 +:1029E000F8004189D4F844010181D4F8F8008189C4 +:1029F000D4F844014181D4F8F800C189D4F84401E5 +:102A00008181D4F844010771D4F8440180F800A012 +:102A1000D4F844012188418099F80300E9F7EAF9E4 +:102A200001212046F9F7B7FC03212046FEF7CFFA33 +:102A3000D9F80800D0F8F8000078022818BFFFDFA6 +:102A40000221FE20FEF712FE84F86470B4F85800EC +:102A5000401C691EA4F858008DB2BFF429AFBDE830 +:102A6000F087F94AC2E90601704770B50446B0F82C +:102A70007E0094F86810002908BFC0F1020503D059 +:102A8000B4F88010081A051F94F87C0040B194F83F +:102A900064200023092104F15800F9F796FFA0B142 +:102AA000B4F8766094F86A0058B994F8642000236A +:102AB000062104F15800F9F788FF002808BF2846CE +:102AC00003D0B4F87800801B001F8542C8BF0546BC +:102AD000002DD4BF0020A8B270BD042110B5DA4C7F +:102AE000A068FEF774FAA06890F84E10012902BFA2 +:102AF000022180F84E1010BD00F58A710288A0F8FE +:102B00001E21028EA0F82021828EA0F82221028FA1 +:102B1000B0F844309A4228BF1A460A82828FB0F831 +:102B20004600824238BF1046488201200872E07891 +:102B3000BDE81040E9F75EB9C34830B4806890F84A +:102B40004E30B0F832C0C48EB0F84010428F022B25 +:102B500025D08A4238BF11460186C28FB0F8421094 +:102B60008A4238BF11468186028FB0F844108A42EB +:102B700038BF11464186828FB0F846108A4238BF6E +:102B80001146C186418E614588BF8C46A0F832C08F +:102B9000C18EA14288BF0C46C48630BC7047038EEC +:102BA0009A4228BF1A46C58F838E9D4238BF2B4656 +:102BB0008A4238BF11460186B0F842108B4228BFC6 +:102BC0000B468386002180F84E10CDE770B59E4CF1 +:102BD000A06890F8CB10FE2906BF6178002970BD6F +:102BE00090F86720002301215830F9F7EEFE002805 +:102BF00018BF70BDA06890F8F41021B1BDE8704016 +:102C00000220FEF7DDBC90F86420002319465830FE +:102C1000F9F7DBFE40B1A06890F87C0020B1BDE878 +:102C200070401220FEF7CCBCA068002590F864200C +:102C3000122A1FD004DC032A3FD0112A1FD003E040 +:102C4000182A35D0232A43D0002304215830F9F71D +:102C5000BCFE002818BF70BDD4F808C09CF8650001 +:102C600019286ED03BDC01286ED002287AD00328C8 +:102C70005DD038E0BDE870400B20FEF7A1BCF1F755 +:102C800057F90C2838BF70BDA0680821D0F8F800AB +:102C90001E30F1F751F928B1A0680421C030F1F7D6 +:102CA0004BF900B9FFDFBDE870400320FEF788BC98 +:102CB000BDE870400620FEF783BC90F8CA1080F88B +:102CC000CC100720FEF77CFCA06880F8645070BD33 +:102CD0001820FEF775FCA068A0F8845070BD1E286F +:102CE00048D021286CD0DCF8F800012601780029B2 +:102CF00074D04088BCF8001088426FD100239CF843 +:102D0000642019460CF15800F9F75FFE002865D0E1 +:102D1000A068D0F8F810097802297DD003297CD06A +:102D200004297BD0052908BF082078D0C8E09CF88A +:102D3000C9008CF8CC000720FEF742FCA06800F028 +:102D40007AB97CE000E00DE00C20FEF739FCA068C9 +:102D5000A0F88A5090F8901041F0010180F890108E +:102D600000F069B91320FEF72BFCA068A0F88A5088 +:102D700000F061B99CF80501002818BF70BD9CF8EF +:102D8000040188B1BCF80601ACF84000BCF80801A9 +:102D9000ACF84200BCF80A01ACF84400BCF80C01E5 +:102DA000ACF846008CF80451FFF7C6FEFFF795FE1D +:102DB0001520FEF705FCA068A0F88A5000F03BB98A +:102DC0009CF87D0058B18CF8F2508CF8F350182024 +:102DD000FEF7F6FBA068A0F88A5070BD70E09CF882 +:102DE0000F01002818BF70BD9CF80E01002808BF15 +:102DF00070BDDCE91416DCF81001FAF735F8F2B210 +:102E0000C1B28A4207BFA16881F8F250A26882F875 +:102E1000F210C6F3072103E018E01DE03DE024E0D6 +:102E2000C0F30720814219BFA16881F8F300A068B0 +:102E300080F8F3501820BDE87040FEF7C1BB1120A8 +:102E4000FEF7BEFBA068F6E07C01002090F865006C +:102E5000F9F7A4FDA0BB08E090F8691041B190F823 +:102E60006A00002808BFFFDF0A20FEF7A9FB27E061 +:102E7000F1F75EF80C2823D3A0680821D0F8F800F9 +:102E80001E30F1F759F828B1A0680421C030F1F7DD +:102E900053F800B9FFDF0320E7E790F8900010F047 +:102EA000030F0DD10C20FEF78BFBA168A1F8845015 +:102EB00081F8886091F8900040F0010081F890005E +:102EC000A06890F8CB10FE2918BF70BD90F8642060 +:102ED000002319465830F9F778FD002808BF70BD67 +:102EE000A06890F80011E9B3A1690978D1BB90F806 +:102EF0006500F9F753FDA8BBA068B0F858100A297F +:102F000031D900F108010522E06901F0F7FD002840 +:102F1000A06804BF80F8005170BDD0F8FC000178B3 +:102F200061B1411C0522E06901F0E8FD002818BFED +:102F300070BDA068D0F8FC00007830B9A068E169E5 +:102F4000D0F8FC00401C01F0BBFFA068D0F8FC00EA +:102F50000178491C01700120FEF732FBA06880F85F +:102F6000005170BDFFE7A06890F8041111B190F80E +:102F70000511E1B390F80E11002908BF70BD90F85B +:102F80000F11002918BF70BD90F86500F9F706FD14 +:102F9000002818BF70BDA06890F85400012808BF31 +:102FA000012508D0022808BF022504D0042816BF36 +:102FB00008280325FFDFA06890F85500012808BF06 +:102FC000012608D0022808BF022604D0042816BF14 +:102FD00008280326FFDFA268012D92F810012DD0EA +:102FE000022D2ED0032D08BF04282CD03BE0FFE794 +:102FF000B0F80611A0F84010B0F80811A0F842107F +:10300000B0F80A11A0F84410B0F80C11A0F846105E +:1030100080F8045190F865001D2804D0BDE8704088 +:103020001420FEF7CDBAFFF787FDFFF756FD1520F8 +:10303000FEF7C6FAA06880F8655070BD012812D16D +:1030400001E002280FD192F81101012E06D0022EC4 +:1030500007D0032E08BF04280AD004E0012802D1BB +:1030600006E0022804D0BDE870401620FEF7A8BA9A +:10307000B2F8583092F85410B2F81201F032F9F761 +:1030800059FF20B1A168252081F8640070BDBDE81A +:1030900070400020FEF7B3BA70B5044690F86400A3 +:1030A00000250C2814D00D2818BF70BDB4F85800A6 +:1030B000D4F8F810401C8988884218BF70BDD4F835 +:1030C0004401FF4E0178002918BFFFDF45D122E0FF +:1030D000B4F85800B4F80211401C884218BF70BD03 +:1030E000D4F8FC00411C04F1080001F0E9FE0221C3 +:1030F0002046F9F750F9D4F8FC000078002808BF02 +:10310000FFDF0121FE20FEF7B1FA84F864500120B0 +:1031100084F8980070BD2188C180D4F8F800D4F8F4 +:10312000441140890881D4F8F800D4F8441180890A +:103130004881D4F8F800D4F84411C0898881D4F8C3 +:1031400044010571D4F8441109200870D4F84411E1 +:1031500020884880F078E8F74DFE01212046F9F7F5 +:103160001AF903212046FDF732FFB068D0F8F800C5 +:103170000078022818BFFFDF0221FE20FEF776FA52 +:1031800084F8645070BD70B5CD4CA16891F864208E +:10319000162A11BF132A91F88E20002A62781BBFCD +:1031A00002206070002A70BD81F8C800002581F8F7 +:1031B0008D5081F88850D1F8F800098840888842FD +:1031C00018BFFFDFA068D0F8F8000078032818BF08 +:1031D000FFDF0321FE20FEF749FAA068D0F8441172 +:1031E0000A78002A18BFFFDF19D10288CA80D0F8F8 +:1031F000442190F8C8101171D0F844110D72D0F824 +:1032000044210D211170D0F844210188518000889B +:10321000EDF75CFEEDF7F4FAE078E8F7EBFDA06877 +:1032200080F8645070BD10B5A54C207910F0020FE5 +:1032300008BF10BD6078002818BF10BDE068C078D6 +:10324000192880F06781DFE800F05F4F0D8EF7F7F7 +:10325000A5223FF76F82B0F7F7F7F7F6E2DFF8F451 +:10326000F3F7F200A0680023012190F8672058309E +:10327000F9F7ABFB002818BF10BD0821A06880F843 +:103280006710002180F8881080F88C1010BDA068AD +:103290000023194690F865205830F9F796FB18B1CD +:1032A000A168002081F88C00A0680023194690F8DE +:1032B00064205830F9F789FB002808BF10BD0020B2 +:1032C000A16881F8880010BDA0680023194690F815 +:1032D00064205830F9F779FB002808BFFFDF04208D +:1032E000A16881F8640010BDA0680023194690F819 +:1032F00064205830F9F769FB002808BFFFDF0C2075 +:10330000A16881F8640010BDA0680023194690F8F8 +:1033100064205830F9F759FB002808BFFFDF0D2063 +:10332000A16881F8640010BDA0680023194690F8D8 +:1033300064205830F9F749FB002808BFFFDF01215E +:10334000A06880F88D100F2180F8641010BDA0686F +:1033500090F86400122818BFFFDF0121A06880F8F0 +:103360008E101121F0E7A0680023194690F8642020 +:103370005830F9F72AFB28B9A06890F88E00002889 +:1033800008BFFFDF0121A06880F88D10132180F8AD +:10339000641010BDA06890F86400182818BFFFDF03 +:1033A0001A20A16881F8640010BDA068D0F8F81058 +:1033B00003884A889A4204BF0978042919D190F8F1 +:1033C0006420002319465830F9F7FFFA002808BF97 +:1033D000FFDFA06890F8901011F0020F04BF0121E8 +:1033E00080F8641005D0002180F88810D0F8F8002B +:1033F0000170A0680023194690F865205830F9F74D +:10340000E4FA002808BF10BD0020A1687FE0A06892 +:103410000023194690F864205830F9F7D6FA0028AE +:1034200008BFFFDF0520A16881F8640010BD30E00F +:103430001FE012E001E066E06CE0A068002319469E +:1034400090F864205830F9F7C0FA002808BFFFDF71 +:103450001C20A16881F86400E8E7A06800231946F1 +:1034600090F865205830F9F7B0FA002808BFFFDF60 +:10347000CAE7A0680023194690F864205830F9F78D +:10348000A4FA002808BFFFDF1F20A16881F86400AC +:10349000CCE7A06890F8651021291CD090F8641042 +:1034A000232918BFFFDFC1D190F8F210002907BF10 +:1034B00090F8F3100029242180F8641002E0000045 +:1034C0007C0100207FF4FBAE002180F864100846E8 +:1034D000FEF795F8F3E690F8F210002907BF90F890 +:1034E000F3100029242180F865108DD1002180F887 +:1034F000651080F87D1090F80E0100281CBF002098 +:10350000FEF77DF880E7A168002081F8650081F86A +:103510008C008BE7FFDF89E770B58D4C0829207A96 +:1035200063D2DFE801F0041A5A5A2662625A80B167 +:10353000F1F7FDFA012211461046F1F7C4FCF2F74B +:10354000A2F90020A072F1F794FBBDE87040F1F7FA +:1035500004BEBDE87040EFF7C3BBD4E90001EFF74C +:10356000BCF92060A07A401CC0B2A07228281CD3ED +:1035700070BDA07A0025401EC6B2E0683044F1F765 +:10358000D3FE10B9E1687F208855A07A272828BF8C +:1035900001252846F2F710F9A07A282809D2401C04 +:1035A000C0B2A072282828BF70BDBDE87040F1F7F6 +:1035B00060BB207A00281CBF012000F085F8F1F7DD +:1035C00065FDF1F7C2FD0120E07262480078E8F77E +:1035D00011FCBDE87040EFF783BB002808BF70BD49 +:1035E0000020BDE8704000F06FB8FFDF70BD10B57F +:1035F000574C207A002804BF0C2010BD00202072F8 +:10360000E072607AEFF7BAFF607AF0F704FA607A56 +:10361000EFF73BFC00280CBF1F20002010BD00224C +:1036200070B54B4C06460D46207A68B12272E272A4 +:10363000607AEFF7A3FF607AF0F7EDF9607AEFF7C1 +:1036400024FC002808BFFFDF4248E560067070BD1B +:1036500070B5050007D0A5F5E8503F494C388142C8 +:103660009CBF122070BD3A4CE068002804BF0920BE +:1036700070BD207A00281CBF0C2070BD3748EFF7C2 +:10368000AAFB6072202804BF1F2070BDEFF71CFC4E +:103690002060002D1CBF284420600120656020723E +:1036A000002000F011F8002070BD2949CA7A002AD4 +:1036B00004BF002070471F22027000224270CB68B6 +:1036C0004360CA72012070472DE9F04184B007467B +:1036D000EFF7FAFB1E4D8046414668682C6800EB08 +:1036E000800046002046F0F7FDF8B04206DB68682F +:1036F000811B4046EFF7F1F80446286040F233762C +:1037000021464046F0F7EEF8B04204DA3146404632 +:10371000EFF7E3F8044600208DF8000040F2E76080 +:10372000039004208DF80500002F14BF0120032012 +:103730008DF8040068460294EFF793FD687A6946B5 +:10374000EFF70AFE002808BFFFDF04B0BDE8F081F4 +:10375000AC1200209C010020B5EB3C0019350200A2 +:103760002DE9F0410C4612490D68114A1149083201 +:103770001160A0F12001312901D301200CE0412882 +:1037800010D040CC0C4F94E80E0007EB8000241FB3 +:1037900050F8807C3046B84720600548001D056021 +:1037A000BDE8F0812046DDF71BFDF5E706207047F8 +:1037B0001005024001000001A052020010B552485D +:1037C00000F012FA00B1FFDF4F48401C00F00CFA85 +:1037D000002800D0FFDF10BD2DE9F14F4B4ED6F889 +:1037E00000B00127484800F007FADFF81C8128B92B +:1037F0005FF0000708F1010000F014FA444C0025C6 +:103800004FF0030901206060C4F80051C4F804516E +:10381000009931602060DFF8FCA018E0DAF80000C1 +:10382000C00614D50E2000F064F8EFF3108010F0FD +:10383000010072B600D00120C4F80493D4F800113E +:1038400019B9D4F8041101B920BF00B962B6D4F88F +:10385000000118B9D4F804010028DFD0D4F804011D +:103860000028CFD137B1C6F800B008F1010000F050 +:10387000C3F911E008F1010000F0BEF90028B9D148 +:10388000C4F80893C4F80451C4F800510E2000F0A5 +:1038900030F81D4800F0C6F90020BDE8F88F2DE98A +:1038A000F0438DB00D46064600240DF110090DF1D0 +:1038B000200817E004EB4407102255F8271068464B +:1038C00001F048F905EB870710224846796801F0B6 +:1038D00041F96846FFF780FF10224146B86801F0C1 +:1038E00039F9641CB442E5DB0DB00020BDE8F0837B +:1038F00072E700F01F02012191404009800000F1B1 +:10390000E020C0F8801270479D01002004E50040CF +:1039100000E0004010ED00E0A94900200870704769 +:1039200070B5A84D01232B60A74B1C68002CFCD060 +:10393000002407E00E6806601E68002EFCD0001D03 +:10394000091D641C9442F5D30020286018680028E3 +:10395000FCD070BD70B59A4E04469C4D307802285C +:1039600000D0FFDFAC4200D3FFDF71699848012926 +:1039700003D847F23052944201DD03224271491CC0 +:103980007161291BC16092497078EFF7E5FC00284E +:1039900000D1FFDF70BD70B5894C0D46617888425B +:1039A00000D0FFDF894E082D4BD2DFE805F04A0436 +:1039B0001E2D4A4A4A382078022800D0FFDF032013 +:1039C0002070A078012801D020B108E0A06800F0A4 +:1039D0001BFE04E004F1080007C8FFF7A1FF052063 +:1039E0002070BDE87040EFF77BB9EFF76DFA014644 +:1039F0006068EFF777FFB04202D2616902290BD30A +:103A00000320F0F722FA12E0EFF75EFA0146606851 +:103A1000EFF768FFB042F3D2BDE870409AE7207834 +:103A200002280AD0052806D0FFDF04202070BDE858 +:103A3000704000F0BBB8022000E00320F0F705FA68 +:103A4000F3E7FFDF70BD70B50546EFF73DFA5C4C5C +:103A500060602078012800D0FFDF5D4901200870F8 +:103A60000020087104208D6048715848C860022009 +:103A700020706078EFF770FC002800D1FFDF70BD88 +:103A800010B54F4C207838B90220F0F7F4F918B986 +:103A90000320F0F7F0F908B1112010BD4D48EFF701 +:103AA0009AF96070202804D0012020700020606105 +:103AB00010BD032010BD2DE9F041144600EB840732 +:103AC0000E4605463F1F00F0B2FD4FF080521169CF +:103AD000484306EB8401091FB14201D2012100E0F5 +:103AE00000211CB11269B4EB920F02D90920BDE884 +:103AF000F081394A95420ED3AF420CD3854205D2AC +:103B0000874203D245EA0600800701D01020EEE785 +:103B1000964200D309B10F20E9E7304830490068E8 +:103B2000884205D0224631462846FFF7F9FE10E0CC +:103B3000FFF7A6FF0028DAD1214800218560C0E9FF +:103B4000036481704FF4A97104FB01F01830FFF792 +:103B50007AFF0020CBE770B54FF080550446286906 +:103B60001D49B1FBF0F0844201D20F2070BD00F07E +:103B70005EFDA04201D8102070BD184818490068A9 +:103B8000884204D02869604300F03EFD0CE0FFF756 +:103B900077FF0028F0D1296909486143816001213C +:103BA00081701048FFF74FFF002070BD10B5044C26 +:103BB0006078EFF76AF900B9FFDF0020207010BDD0 +:103BC000A001002004E5014000E40140105C0C006D +:103BD000BC1200209739020000600200B0000020F3 +:103BE000BEBAFECA7C5E0100002101700846704723 +:103BF0000146002008707047EFF3108101F00101C9 +:103C000072B60278012A01D0012200E000220123CD +:103C1000037001B962B60AB1002070474FF400503A +:103C20007047E9E7EFF3108111F0010F72B64FF022 +:103C30000002027000D162B600207047F2E7000077 +:103C40007B490968016000207047794908600020BD +:103C5000704701218A0720B1012804D042F20400F4 +:103C60007047916700E0D1670020704771490120DB +:103C7000086042F20600704708B504236D4A190730 +:103C8000103230B1C1F80433106840F00100106008 +:103C90000BE0106820F001001060C1F8083300202C +:103CA000C1F80801644800680090002008BD011FA9 +:103CB0000B2909D85F4910310A6822F01E0242EA36 +:103CC000400008600020704742F2050070470F284E +:103CD00009D8584910310A6822F4706242EA00207B +:103CE00008600020704742F205007047000100F1B3 +:103CF0008040C0F8041900207047000100F18040A6 +:103D0000C0F8081900207047000100F18040D0F889 +:103D10000009086000207047012801D9072070477A +:103D2000464A52F8200002680A43026000207047A9 +:103D3000012801D907207047404A52F82000026844 +:103D40008A43026000207047012801D9072070478C +:103D50003A4A52F8200000680860002070470200CC +:103D600037494FF0000003D0012A01D007207047E7 +:103D70000A607047020033494FF0000003D0012A67 +:103D800001D0072070470A60704708B54FF40072F1 +:103D9000510510B1C1F8042308E0C1F80823002040 +:103DA000C1F8240124481C3000680090002008BDA0 +:103DB00008B58022D10510B1C1F8042308E0C1F88C +:103DC00008230020C1F81C011B4814300068009033 +:103DD000002008BD08B54FF48072910510B1C1F8FC +:103DE000042308E0C1F808230020C1F8200112488C +:103DF000183000680090002008BD0D49383109686E +:103E00000160002070474FF080410020C1F8080198 +:103E1000C1F82401C1F81C01C1F820014FF0E020D5 +:103E2000802180F800140121C0F8001170470000C3 +:103E300000040040000500400801004064530200F7 +:103E400078050040800500406249634B0A68634979 +:103E50009A42096801D1C1F3100101600020704746 +:103E60005C495D4B0A685D49091D9A4201D1C0F366 +:103E700010000860002070475649574B0A685749A0 +:103E800008319A4201D1C0F3100008600020704749 +:103E900030B5504B504D1C6842F20803AC4202D082 +:103EA000142802D203E0112801D3184630BDC30004 +:103EB0004B481844C0F81015C0F81425002030BD38 +:103EC0004449454B0A6842F209019A4202D0062849 +:103ED00002D203E0042801D308467047404A01217A +:103EE00042F83010002070473A493B4B0A6842F2D2 +:103EF00009019A4202D0062802D203E0042801D325 +:103F000008467047364A012102EBC000416000209C +:103F1000704770B52F4A304E314C156842F2090394 +:103F200004EB8002B54204D0062804D2C2F800187F +:103F300007E0042801D3184670BDC1F31000C2F891 +:103F40000008002070BD70B5224A234E244C15682D +:103F500042F2090304EB8002B54204D0062804D2E1 +:103F6000D2F8000807E0042801D3184670BDD2F843 +:103F70000008C0F310000860002070BD174910B59C +:103F80000831184808601120154A002102EBC003CF +:103F9000C3F81015C3F81415401C1428F6D30020DC +:103FA00006E0042804D302EB8003C3F8001807E0FE +:103FB00002EB8003D3F80048C4F31004C3F80048B0 +:103FC000401C0628EDD310BD04490648083108609E +:103FD00070470000B0000020BEBAFECA00F50140E4 +:103FE00000F001400000FEFF7E4B1B6803B19847C4 +:103FF000BFF34F8F7C4801687C4A01F4E0611143B4 +:104000000160BFF34F8FFEE710B5EFF3108010F0A3 +:10401000010F72B601D0012400E0002400F0D9F8AD +:1040200050B1DDF777F9EEF71CFDEFF7B1FEDEF7E3 +:10403000ECFE6F490020086004B962B6002010BD94 +:1040400070B50C460546EFF3108010F0010F72B604 +:1040500001D0012600E0002600F0BBF818B106B937 +:1040600062B6082070BDDDF7D1F8DDF757F90246DA +:10407000002043099B0003F1E02300F01F01D3F867 +:104080000031CB40D9071BD0202803D222FA00F1FF +:10409000C90722D141B2002906DA01F00F0101F16E +:1040A000E02191F8141D03E001F1E02191F80014E2 +:1040B0004909082911D281B101290ED004290CD057 +:1040C000401C6428D5D3DEF777FE4949494808608B +:1040D0002046F0F775FA60B904E006B962B641F21D +:1040E000010070BD3F4804602DB12846F0F7B5FAD5 +:1040F00018B110242CE0404D19E02878022802D98C +:104100004FF4805424E007240028687801D0F8B9DF +:1041100008E0E8B120281BD8A878212818D8012861 +:1041200016D001E0A87898B9E8780B2810D8334960 +:10413000802081F8140DDDF7F1F82946EFF70EFE27 +:10414000EEF74EFC00F0A6FA2846DDF7B5F8044677 +:1041500006B962B61CB1FFF757FF204670BD0020BC +:1041600070BD10B5044600F034F800B10120207095 +:10417000002010BD224908600020704770B50C4631 +:1041800020490D681F49204E08310E60102807D0C5 +:1041900011280CD012280FD0132811D0012013E0C1 +:1041A000D4E90001FFF74CFF354620600DE0FFF732 +:1041B0002BFF0025206008E02068FFF7D2FF03E016 +:1041C0000F4920680860002020600E48001D05602F +:1041D00070BD074807490068884201D10120704737 +:1041E00000207047B80100200CED00E00400FA0543 +:1041F000B0000020BEBAFECA6C5302000BE000E023 +:1042000004000020100502400100000100B5D8495B +:1042100002282DD021DC10F10C0F08BFF42027D08C +:104220000FDC10F1280F08BFD82021D010F1140F97 +:1042300008BFEC201CD010F1100F08BFF02017D0E1 +:1042400020E010F1080F08BFF82011D010F1040F82 +:104250000CBFFC2000280BD014E0C01E062811D291 +:10426000DFE800F00E0C0A080503082000E0072034 +:10427000086000BD0620FBE70520F9E70420F7E70A +:104280000320F5E7FFDF00BD00B5BA49012808BFEC +:1042900003200CD0022808BF042008D0042808BF3F +:1042A000062004D0082816BFFFDF052000BD0860E7 +:1042B00000BDB149002804BF086820F0010005D006 +:1042C000012806BF086840F0010070470860704789 +:1042D00070B51E460546012924D0022A04BFA7480E +:1042E0004FF47A710DD0012A04BFA5484FF4C8617C +:1042F00007D0042A07BFA34840F69801A24840F619 +:10430000E44144181846F1F781FA04443046F1F7C5 +:10431000ABFA20444FF47A7100F27120B0FBF1F057 +:10432000281A70BD022A08BF4FF47A700AD0012AF9 +:1043300008BF4FF4C86005D0042A0CBF40F69800AF +:1043400040F6E44049F608514418DBE770B51446DE +:104350000546012908BF49F6CA660DD0022B08BFE1 +:104360008A4807D0012B08BF854803D0042B0CBF17 +:104370008448874800F1FA061046F1F760FA012CEC +:1043800008BF4FF47A710AD0022C08BF4FF4FA71BB +:1043900005D0042C0CBF4FF4FA614FF4FA51711A96 +:1043A00008444FF47A7100F28920B0FBF1F0281A2A +:1043B000801E70BD70B514460646012930D0022B10 +:1043C00004BF6E494FF47A700DD0012B04BF6C49C5 +:1043D0004FF4C86007D0042B07BF6A4940F6980025 +:1043E000694940F6E4400D181046F1F728FA012C0F +:1043F00008BF4FF47A710AD0022C08BF4FF4FA714B +:1044000005D0042C0CBF4FF4FA614FF4FA51691A2D +:1044100008444FF47A716438B0FBF1F0301A70BD83 +:10442000022B08BF4FF47A700AD0012B08BF4FF45B +:10443000C86005D0042B0CBF40F6980040F6E4405D +:1044400049F608514518CFE770B5164604460129CC +:1044500008BF49F6CA650DD0022B08BF4B4807D0EC +:10446000012B08BF464803D0042B0CBF45484848E1 +:1044700000F1FA051046F1F7C9F905443046F1F7A5 +:10448000F3F928444FF47A7100F2E140B0FBF1F007 +:10449000201A801E70BD2DE9F04107461E460C46CD +:1044A00015461046082A16BF04284DF68830F1F745 +:1044B000ADF907EB4701C1EBC71100EBC100012CBF +:1044C00008BF4FF47A710AD0022C08BF4FF4FA717A +:1044D00005D0042C0CBF4FF4FA614FF4FA51471881 +:1044E0002046F1F7ACF9381A4FF47A7100F60F60F4 +:1044F000B0FBF1F42846F1F777F920443044401D31 +:10450000BDE8F08170B5054614460E460846F1F741 +:104510007DF905EB4502C2EBC512C0EBC205304682 +:10452000F1F7A2F92D1A2046082C16BF04284DF6E3 +:104530008830F1F76BF928444FF47A7100F6B73000 +:10454000B0FBF1F52046F1F74FF92844401D70BD4E +:104550001049082818BF0428086803BF20F46C50CD +:1045600040F4444040F0004020F0004008607047B4 +:104570000C1500401015004050160040683602002F +:10458000A2240200D0FB010030D301000436020057 +:10459000C0D40100401700402DE9FE430C46804680 +:1045A000F8F7B4FF074698F80160204601A96A466B +:1045B000ECF717F905000DD0012F02D00320BDE85C +:1045C000FE83204602AA0199ECF72DF80298B0F874 +:1045D00003000AE0022F14D1042E12D3B8F803000E +:1045E000BDF80020011D914204D8001D80B2A91918 +:1045F000814202D14FF00000E1E702D24FF001000A +:10460000DDE74FF00200DAE70B4A022111600B49A7 +:104610000B68002BFCD0084B1B1D18600868002895 +:10462000FCD00020106008680028FCD070474FF0D4 +:10463000805040697047000004E5014000E40140FB +:1046400002000B464FF00000014620D0012A04D0A2 +:10465000022A04D0032A0DD103E0012002E0022047 +:1046600015E00320072B05D2DFE803F00406080A53 +:104670000C0E100007207047012108E0022106E01F +:10468000032104E0042102E0052100E00621EEF709 +:10469000BEBB0000F9480521817000210170417006 +:1046A0007047F7490A78012A05D0CA681044C860E3 +:1046B0004038EFF7E4B88A6810448860F8E70028CB +:1046C00019D00378EF49F04A13B1012B0ED011E055 +:1046D0000379012B00D06BB943790BB1012B09D1C0 +:1046E0008368643B8B4205D2C0680EE00379012BDE +:1046F00002D00BB10020704743790BB1012BF9D1E7 +:10470000C368643B8B42F5D280689042F2D80120A6 +:104710007047DB4910B501220A700279A2B100226C +:104720000A71427992B104224A718268D34C5232A2 +:104730008A60C0681434C8606060EEF7C5FBCF497A +:1047400020600220887010BD0322E9E70322EBE716 +:1047500070B5044609B1012000E00320C84D0021D6 +:104760002970217901B100202871607968B1042095 +:10477000C24E6871A168F068EEF7AFF8A860E06813 +:104780005230E8600320B07070BD0320F0E72DE9DF +:10479000F04105460226EEF79EFF006800B1FFDFFC +:1047A000B64C01273DB12878B0B1012805D00228C8 +:1047B00010D0032813D027710CE06868C82807D3ED +:1047C000EFF7C3F820B16868FFF76BFF012603E03D +:1047D000002601E000F05CF93046BDE8F081207869 +:1047E0000028F7D16868FFF76AFF0028E3D06868FF +:1047F000017879B1A078042800D0FFDF0121686832 +:10480000FFF7A6FF9E49E078EEF7A6FD0028E1D16C +:10481000FFDFDFE7FFF77DFF6770DBE72DE9F0479C +:10482000964C8846E178884200D0FFDFDFF84C9252 +:1048300000250127924E09F11409B8F1080F75D22D +:10484000DFE808F0040C28527A808D95A0780328C0 +:1048500002D0022800D0FFDFBDE8F087A07803284F +:1048600002D0022800D0FFDF0420A070257120783C +:10487000002878D1FFF715FF3078012806D0B068FE +:10488000E06000F025F92061002060E0E078EEF7BC +:1048900060FCF5E7A078032802D0022800D0FFDFF3 +:1048A000207800286DD1A078032816D0EEF70CFBF5 +:1048B00001464F46D9F80000EFF714F800280EDB48 +:1048C000796881420BDB081AF0606D49E078EEF7F9 +:1048D00043FD0028C0D1FFDFBEE7042028E004200C +:1048E000EFF7B3FAA570B7E7A078032802D0022843 +:1048F00000D0FFDF207888BBA078032817D0EEF720 +:10490000E3FA01464F46D9F80000EEF7EBFF002826 +:10491000E5DB79688142E2DB081AF0605849E0780B +:10492000EEF71AFD002897D1FFDF95E740E005205C +:10493000EFF78BFAA7708FE7A078042800D0FFDF8D +:10494000022004E0A078042800D0FFDF0120A16845 +:104950008847FFF71CFF054630E004E011E0A0782F +:10496000042800D0FFDFBDE8F04700F091B8A07840 +:10497000042804D0617809B1022800D0FFDF207834 +:1049800018B1BDE8F04700F08CB8207920B10620BE +:10499000EFF75BFA2571CDE7607838B13849E078F8 +:1049A000EEF7DAFC00B9FFDF657055E70720BFE7D7 +:1049B000FFDF51E73DB1012D03D0FFDF022DF9D11B +:1049C0004AE70420C3E70320C1E770B5050004D01F +:1049D0002A4CA078052806D101E0102070BD0820DF +:1049E000EFF749FA08B1112070BD2848EEF7F3F946 +:1049F000E070202803D00020A560A07070BD0320C7 +:104A000070BD1E4810B5017809B1112010BD817824 +:104A1000052906D0012906D029B101210170002005 +:104A200010BD0F2010BD00F03CF8F8E770B5134C36 +:104A30000546A07808B1012809D155B12846FFF7ED +:104A40003EFE40B1287840B1A078012809D00F205F +:104A500070BD102070BD072070BD2846FFF759FEBD +:104A600003E000212846FFF773FE0549E078EEF7E2 +:104A700073FC00B9FFDF002070BD0000BC01002006 +:104A8000CC1200203D860100FF1FA1071D48020037 +:104A90000A4810B5006900F013F8BDE81040EEF7C1 +:104AA0001FB9064810B5C078EEF7EFF900B9FFDF7F +:104AB0000820EFF7CAF9BDE81040EBE5BC01002083 +:104AC0000C490A6848F202139A4302430A6070478D +:104AD000084A116848F2021301EA03009943116081 +:104AE00070470246044B10201344FC2B01D8116080 +:104AF00000207047C80602400018FEBF40EA0103CC +:104B000010B59B070FD1042A0DD310C808C9121F76 +:104B10009C42F8D020BA19BA884201D9012010BDB0 +:104B20004FF0FF3010BD1AB1D30703D0521C07E07D +:104B3000002010BD10F8013B11F8014B1B1B07D1E1 +:104B400010F8013B11F8014B1B1B01D1921EF1D152 +:104B5000184610BD032A40F2308010F0030C00F01C +:104B6000158011F8013BBCF1020F624498BF11F8A7 +:104B700001CB00F8013B38BF11F8013BA2F1040260 +:104B800098BF00F801CB38BF00F8013B11F00303D8 +:104B900000F02580083AC0F0088051F8043B083A3C +:104BA00051F804CBA0E80810F5E7121D5CBF51F8DE +:104BB000043B40F8043BAFF30080D20724BF11F858 +:104BC000013B11F801CB48BF11F8012B24BF00F8BD +:104BD000013B00F801CB48BF00F8012B704710B52E +:104BE000203AC0F00B80B1E81850203AA0E81850E5 +:104BF000B1E81850A0E81850BFF4F5AF5FEA027CA6 +:104C000024BFB1E81850A0E8185044BF18C918C014 +:104C1000BDE810405FEA827C24BF51F8043B40F8B5 +:104C2000043B08BF7047D20728BF31F8023B48BF9A +:104C300011F8012B28BF20F8023B48BF00F8012BD8 +:104C4000704702F0FF0343EA032242EA024200F007 +:104C500002B84FF000020429C0F0128010F0030CDB +:104C600000F01B80CCF1040CBCF1020F18BF00F85F +:104C7000012BA8BF20F8022BA1EB0C0100F00DB80E +:104C80005FEAC17C24BF00F8012B00F8012B48BF6C +:104C900000F8012B70474FF0000200B51346944610 +:104CA0009646203922BFA0E80C50A0E80C50B1F184 +:104CB0002001BFF4F7AF090728BFA0E80C5048BF98 +:104CC0000CC05DF804EB890028BF40F8042B08BF36 +:104CD000704748BF20F8022B11F0804F18BF00F832 +:104CE000012B7047FEDF04207146084219D1069956 +:104CF000124A914215DC069902394878DF2810D112 +:104D00000878FE2807D0FF280BD14FF001004FF0A4 +:104D100000020B4B184741F201000099019A084B21 +:104D20001847084B002B02D01B68DB6818474FF070 +:104D3000FF3071464FF00002014B1847006002003F +:104D4000E93F020004000020184819497047FFF7A6 +:104D5000FBFFDCF733FA00BD4FF4805015490968BA +:104D6000884203D1144A13605B68184700BD0000F5 +:104D700020BFFDE74FF480500E490968884210D1EA +:104D80000E4B18684FF0FF318842F1D080F308884D +:104D90004FF02021884204DD0948026803210A43BC +:104DA00002600848804708488047FFDFE012002083 +:104DB000E01200200000002004000020006002003B +:104DC0001409004099460100594D02000420714623 +:104DD000084202D0EFF3098101E0EFF3088188690E +:104DE00002380078102813DB20280FDB2C280BDB7F +:104DF0000A4A12680A4B9A4203D1602804DB094A26 +:104E00001047022008607047074A1047074A1047BA +:104E1000074A12682C32126810470000B0000020C8 +:104E2000BEBAFECA21130000613702007D410200B4 +:104E3000040000200D4B0E4908470E4B0C49084753 +:104E40000D4B0B4908470D4B094908470C4B0849C6 +:104E500008470C4B064908470B4B054908470B4BC5 +:104E6000034908470A4B02490847000051BB0000AC +:104E70000D2F00006D2C0000092B0000972A000068 +:104E80000F2D00003D1300005328000029BE000034 +:104E9000C91100000021016001717047002101600B +:104EA00081807047002101604160017270470A688B +:104EB0004B6802604360B1F808C0A0F808C07047B2 +:104EC0000A6802600B79037170470000B995000011 +:104ED00043970000A1980000C5980000FF980000CB +:104EE0003399000065990000959900000B9A000025 +:104EF00091960000A7120000A7120000794400005C +:104F0000C5440000E94400007D45000099460000CA +:104F10005B4700008D47000075480000074900000E +:104F20005B490000414A0000614A0000DF150000B3 +:104F30000316000033150000871500003516000029 +:104F4000C91600006360000013620000E7650000FE +:104F5000FD660000876700000568000069680000C2 +:104F60008D6900005D6A0000C96A0000834A000084 +:104F7000894A0000934A000089410000FB4A000072 +:104F80005D410000874C0000BF4C0000294D00002F +:104F90000F4E0000254E0000A7120000A7120000CF +:104FA000A7120000A7120000A7120000A71200001D +:104FB000A7120000A7120000BF2400004525000032 +:104FC000612500007D2500000B270000A7250000BB +:104FD000B1250000F325000015260000F126000091 +:104FE00033270000A7120000A7120000678300000B +:104FF0008783000089830000CD830000FB830000CD +:10500000E9840000778500008B850000D9850000C9 +:10501000C98600006F880000998900007B7300003A +:10502000B1890000A7120000A7120000D1B400004F +:105030003BB600008FB60000FBB60000ABB7000027 +:105040000100000000000000100110013A02000001 +:105050001A020000FB900000E9900000FFFFFFFF34 +:105060000000FFFFCDAC0000293D000065200000DE +:10507000C5730000618E0000000000000000020007 +:10508000000000000002000000000000000100001D +:105090000000000013810000F38000006181000027 +:1050A00041240000032400002324000037A800004E +:1050B00063A800006BAA000059590000818100001C +:1050C00000000000B18100008F24000000000000FB +:1050D00000000000000000004DA9000000000000DA +:1050E000ED59000000000000900A0000900A000046 +:1050F000DB560000DB5600005544000079AB000091 +:1051000047760000771F0000972602004F970100A6 +:10511000195700001957000077440000DBAB00006E +:10512000CB760000E91F0000C5260200639701004E +:1051300070017001400038005C002400480100024A +:1051400000000300656C74620000000000000000B5 +:1051500000000000000000008700000000000000C8 +:105160000000000000000000BE83605ADB0B3760C7 +:1051700038A5F5AA9183886C010000003114010064 +:10518000F9220100000000010206030405000000EE +:105190000700000000000000060000000A000000F8 +:1051A0003200000073000000B4000000C989010053 +:1051B00047150200616F0100D5B10100EBF4010059 +:1051C000D5B10100F77001008DB30100E1EE0100DF +:1051D0008DB30100BF6D010021B3010001F4010096 +:1051E00021B301005D6F0100E9B101009DE70100FD +:1051F000E9B10100ED74010001B601009DF5010067 +:1052000001B601000300000001555555D6BE898E38 +:105210000000C706C70CC71200006B030F06B308D7 +:105220000000B704A708970CF401FA009600640088 +:105230004B0032001E0014000A00050002000100AD +:105240000041000000000000AAAED7AB15412010BD +:105250000C0802170D0101020909010106020918D3 +:10526000180301010909030305000000FE00000006 +:10527000FE000000FE555555252627D6BE898E0016 +:10528000F401FA00960064004B0032001E00140086 +:105290000A00050002000100254100000000000096 +:1052A000493E0200613E0200793E0200913E02004A +:1052B000C13E0200E93E0200133F0200473F0200E8 +:1052C000573B0200B73A0200AD370200E34A020042 +:1052D000E93B0200F93B0200253C0200433F01008C +:1052E0004B3F01005D3F0100533C02006D3C02005A +:1052F000413C02004B3C0200793C0200AF3C020002 +:10530000CF3C0200ED3C0200FB3C0200093D0200E4 +:10531000193D0200313D0200493D02005F3D02009F +:10532000753D0200000000007FB90000D5B9000003 +:10533000EBB9000041460200D93702009F38020055 +:10534000CB490200034A02002D4A0200ED3D010054 +:105350006D4101008B3D0200B13D0200D53D0200D0 +:10536000FB3D02001C05004020050040001002002B +:105370009053020008000020D001000044110000FA +:10538000C8530200D801002008110000A01100003D +:10539000011813C8140250201A0102227C2720FB96 +:1053A000349B5F801280021A10138B091B20480463 +:1053B0001ACE0401200B50A40AAC01300912CB63B1 +:0853C0007F010B68CC10A00076 +:00000001FF diff --git a/softdevice/s140/6.0.0/hex/s140_nrf52840_6.0.0-6.alpha_softdevice.hex b/softdevice/s140/6.0.0/hex/s140_nrf52840_6.0.0-6.alpha_softdevice.hex deleted file mode 100644 index 748fbdf..0000000 --- a/softdevice/s140/6.0.0/hex/s140_nrf52840_6.0.0-6.alpha_softdevice.hex +++ /dev/null @@ -1,9118 +0,0 @@ -:020000040000FA -:10000000000400200108000095040000E107000042 -:100010009F040000A9040000B304000000000000D9 -:1000200000000000000000000000000025080000A3 -:10003000BD04000000000000C7040000D10400005F -:10004000DB040000E5040000EF040000F9040000F8 -:10005000030500000D050000170500002105000044 -:100060002B050000350500003F0500004905000094 -:10007000530500005D0500006705000071050000E4 -:100080007B050000850500008F0500009905000034 -:10009000A3050000AD050000B7050000C105000084 -:1000A000CB050000D5050000DF050000E9050000D4 -:1000B000F3050000FD050000070600001106000022 -:1000C0001B060000250600002F0600003906000070 -:1000D000430600004D0600005706000061060000C0 -:1000E0006B060000750600007F0600008906000010 -:1000F000930600009D060000A7060000B106000060 -:10010000BB0600001FB500F003F88DE80F001FBD0F -:1001100000F06CBBF0B54FF6FF734FF4B4751A46A0 -:100120006E1E11E0A94201D3344600E00C46091BC3 -:1001300030F8027B641E3B441A44F9D19CB204EBB4 -:10014000134394B204EB12420029EBD198B200EBB6 -:10015000134002EB124140EA0140F0BDB24992B0B7 -:100160000446D1E90001CDE91001FF224021684693 -:1001700000F0E2FA94E80F008DE80F00684610A93D -:1001800002E004C841F8042D8842FAD110216846E3 -:10019000FFF7C0FF1090AA208DF8440000F0F1F89E -:1001A0004FF01024A06910226946803000F0F2F868 -:1001B000A069082210A900F0EDF800F0D6F84FF081 -:1001C00080510A69496900684A43824201D8102077 -:1001D00070470020704710B5D0E900214FF08050E3 -:1001E00002EB8103026944696243934209D84FF0EC -:1001F0001022536903EB81030169406941438B423B -:1002000001D9092010BD5069401C01D0002010BD4B -:100210000F2010BD70B501680446844D4FF01020CA -:10022000072950D2DFE801F0330419293C1E2500CC -:10023000D4E9026564682946304600F0BDF82A46D4 -:100240002146304600F0A6F8AA002146304600F0CC -:1002500047FA002800D0032070BD00F0F9FA4FF4EF -:10026000805007E0201DFFF7AAFF0028F4D100F01E -:10027000EFFA60682860002070BD241D94E8070034 -:10028000920000F02DFA0028F6D00E2070BD806993 -:10029000401C12D0201DFFF79EFF0028F6D109E078 -:1002A0008069401C09D0201DFFF789FF0028EDD18F -:1002B000606820B12046FFF751FF042070BD00F0B8 -:1002C00060F800F052F8072070BD10B50C461828F1 -:1002D00002D00120086010BD2068FFF79BFF20605E -:1002E00010BD4FF01024A069401C05D0A569A66977 -:1002F00080353079AA2808D06069401C2DD060690B -:100300000068401C29D060692CE010212846FFF7C6 -:1003100001FF316881421CD1A16901F18002C03125 -:1003200005E030B108CA51F8040D984201D101200E -:1003300000E000208A42F4D158B1286810B10428A6 -:1003400003D0FEE7284600F049F83849686808609D -:1003500008E000F016F800F008F84FF4805001684B -:10036000491C01D000F04EFAFEE7BFF34F8F304832 -:100370000168304A01F4E06111430160BFF34F8F1F -:10038000FEE74FF010208169491C02D0806900F01F -:1003900058B870472DE9F04117460D46064600242F -:1003A00006E03046296800F05FF8641C2D1D361DFC -:1003B000BC42F6D3BDE8F08170B50C4605464FF45B -:1003C000806608E0284600F03CF8B44205D3A4F566 -:1003D000806405F58055002CF4D170BD4168044659 -:1003E00009B1012500E000254FF010267069A268D0 -:1003F000920000F075F938B145B17669A568646876 -:100400004FF48010844203D3FFF7BBFFFFF7ADFF2B -:100410008542F9D229463046FFF7CEFF2A462146CB -:100420003046FFF7B7FFEFE7740800000000002038 -:100430000CED00E00400FA05144801680029FCD026 -:100440007047134A0221116010490B68002BFCD041 -:100450000F4B1B1D186008680028FCD0002010609E -:1004600008680028FCD07047094B10B501221A60BB -:10047000064A1468002CFCD0016010680028FCD0EB -:100480000020186010680028FCD010BD00E4014076 -:1004900004E5014008208F490968095808471020E1 -:1004A0008C4909680958084714208A49096809587D -:1004B00008471820874909680958084730208549A6 -:1004C00009680958084738208249096809580847C7 -:1004D0003C20804909680958084740207D4909683F -:1004E0000958084744207B490968095808474820AB -:1004F00078490968095808474C207649096809581D -:100500000847502073490968095808475420714921 -:1005100009680958084758206E490968095808476A -:100520005C206C49096809580847602069490968D6 -:10053000095808476420674909680958084768202E -:1005400064490968095808476C20624909680958D4 -:10055000084770205F4909680958084774205D49B9 -:1005600009680958084778205A490968095808470E -:100570007C2058490968095808478020554909686E -:1005800009580847842053490968095808478820B2 -:1005900050490968095808478C204E49096809588C -:1005A000084790204B490968095808479420494951 -:1005B00009680958084798204649096809580847B2 -:1005C0009C204449096809580847A0204149096806 -:1005D00009580847A4203F49096809580847A82036 -:1005E0003C49096809580847AC203A490968095844 -:1005F0000847B0203749096809580847B4203549E9 -:10060000096809580847B820324909680958084755 -:10061000BC203049096809580847C0202D4909689D -:1006200009580847C4202B49096809580847C820B9 -:100630002849096809580847CC20264909680958FB -:100640000847D0202349096809580847D420214980 -:10065000096809580847D8201E49096809580847F9 -:10066000DC201C49096809580847E0201949096835 -:1006700009580847E4201749096809580847E8203D -:100680001449096809580847EC20124909680958B3 -:100690000847F0200F49096809580847F4200D4918 -:1006A000096809580847F8200A490968095808479D -:1006B000FC2008490968095808475FF4807005491B -:1006C000096809580847000003480449024A034BD7 -:1006D0007047000000000020800800008008000033 -:1006E00040EA010310B59B070FD1042A0DD310C8AF -:1006F00008C9121F9C42F8D020BA19BA884201D901 -:10070000012010BD4FF0FF3010BD1AB1D30703D048 -:10071000521C07E0002010BD10F8013B11F8014BFE -:100720001B1B07D110F8013B11F8014B1B1B01D11A -:10073000921EF1D1184610BD02F0FF0343EA0322D6 -:1007400042EA024200F005B87047704770474FF028 -:1007500000020429C0F0128010F0030C00F01B808E -:10076000CCF1040CBCF1020F18BF00F8012BA8BF9C -:1007700020F8022BA1EB0C0100F00DB85FEAC17C60 -:1007800024BF00F8012B00F8012B48BF00F8012B13 -:1007900070474FF0000200B5134694469646203944 -:1007A00022BFA0E80C50A0E80C50B1F12001BFF42A -:1007B000F7AF090728BFA0E80C5048BF0CC05DF890 -:1007C00004EB890028BF40F8042B08BF704748BFDE -:1007D00020F8022B11F0804F18BF00F8012B704752 -:1007E000014B1B68DB6818470000002009480A49D4 -:1007F0007047FFF7FBFFFFF785FC00BD20BFFDE75B -:10080000064B1847064A1060016881F30888406863 -:10081000004700008008000080080000E30200009C -:10082000000000201EF0040F0CBFEFF30881EFF36F -:100830000981886902380078182803D100E0000097 -:10084000074A1047074A12682C3212681047000006 -:1008500000B5054B1B68054A9B58984700BD000032 -:10086000CB0200000000002070080000040000001F -:10087000001000000000000000FFFFFF0090D00308 -:10100000481300201D3B0200CDBB00008F3A0200B8 -:10101000CDBB0000CDBB0000CDBB00000000000038 -:10102000000000000000000000000000753B02000E -:10103000CDBB000000000000CDBB0000CDBB000018 -:10104000DD3B0200E33B0200CDBB0000CDBB000056 -:10105000CDBB0000CDBB0000CDBB0000CDBB000070 -:10106000E93B0200CDBB0000CDBB0000EF3B02001E -:10107000CDBB0000F53B0200FB3B0200013C02003F -:10108000CDBB0000CDBB0000CDBB0000CDBB000040 -:10109000CDBB0000CDBB0000CDBB0000CDBB000030 -:1010A000CDBB0000073C0200CDBB0000CDBB000063 -:1010B000CDBB0000CDBB0000CDBB0000CDBB000010 -:1010C0000D3C0200CDBB0000CDBB0000CDBB00003D -:1010D000CDBB0000CDBB0000CDBB0000CDBB0000F0 -:1010E000CDBB0000CDBB0000CDBB0000CDBB0000E0 -:1010F000CDBB0000CDBB0000CDBB0000CDBB0000D0 -:10110000CDBB0000CDBB000000F002F822F0F3FCE4 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D122F0E8FCAFF2090EBAE80F0013F08B -:10113000010F18BFFB1A43F001031847802F02006C -:10114000A02F02000A4410F8014B14F00F0508BF4D -:1011500010F8015B240908BF10F8014B6D1E05D083 -:1011600010F8013B6D1E01F8013BF9D1641E03D05C -:10117000641E01F8015BFBD19142E4D3704700008B -:101180000023002400250026103A28BF78C1FBD890 -:10119000520728BF30C148BF0B6070471FB500F031 -:1011A0003DF88DE80F001FBD1EF0040F0CBFEFF3DC -:1011B0000880EFF30980014A104700003B2E000031 -:1011C0008269034981614FF00100104470470000BB -:1011D000D511000001B41EB400B512F045FA01B4F7 -:1011E0000198864601BC01B01EBD0000F0B4404627 -:1011F000494652465B460FB402A0013001B506488D -:10120000004700BF01BC86460FBC80468946924617 -:101210009B46F0BC704700000911000022F068BC3A -:1012200070B51A4C054609202070A01C00F05FF82C -:101230005920A08029462046BDE8704007F0AEBF87 -:1012400007F0B7BF70B50C461149097829B1A0F174 -:101250006001552908D3012013E0602804D06928D3 -:1012600002D043F201000CE020CC0A4E94E80E00BC -:1012700006EB8000A0F58050241FD0F8806E284631 -:10128000B047206070BD01207047000008000020BA -:101290001C000020603C020010B504460021012023 -:1012A00000F03CF800210B2000F038F80421192050 -:1012B00000F034F804210D2000F030F804210E2055 -:1012C00000F02CF804210F2000F028F80421C84376 -:1012D00000F024F80621162000F020F80621152041 -:1012E00000F01CF82046FFF79BFF002010BD4FF6D2 -:1012F000FE7101807047FFF7A3BF10487047104A86 -:1013000010B514680E4B0F4A08331A60FFF79AFFA6 -:101310000B48001D046010BD704770474907090E57 -:10132000002806DA00F00F0000F1E02080F8141D1C -:10133000704700F1E02080F80014704703F9004284 -:101340001005024001000001FE48002101604160DB -:10135000018170472DE9F743044692B091464068F9 -:1013600012F048FC40B1606812F04DFC20B9607882 -:1013700000F00300022801D0012000E00020F14E1F -:101380004D463072484612F0F1FB18B1102015B0EE -:10139000BDE8F0832946012001F02AFF0028F6D19C -:1013A00001258DF842504FF4C050ADF840000022A6 -:1013B00010A9284606F090FB0028E8D18DF842508D -:1013C0004FF428504FF00008ADF8400047461C216C -:1013D0006846CDF81C8022F02EFB9DF81C0008AA60 -:1013E00020F00F00401C20F0F00010308DF81C00A1 -:1013F00020788DF81D0061789DF81E0061F3420091 -:1014000040F001008DF81E009DF800000AA940F090 -:1014100002008DF800002089ADF83000ADF8327080 -:10142000608907AFADF834000B97606810AC0E9080 -:101430000A94684606F045F90028A8D1BDF82000B6 -:1014400030808DF8425042F60120ADF840009DF802 -:101450001E0008AA20F00600801C20F001008DF874 -:101460001E000220ADF83000ADF8340013A80E9035 -:101470000AA9684606F025F9002888D1BDF82000A1 -:101480007080311D484600F033F9002887D18DF86F -:10149000425042F6A620ADF840001C216846CDF827 -:1014A0001C8022F0C8FA9DF81C00ADF8345020F0E2 -:1014B0000F00401C20F0F00010308DF81C009DF84B -:1014C0001D0008AA20F0FF008DF81D009DF81E00E9 -:1014D0000AA920F0060040F00100801C8DF81E00D3 -:1014E0009DF800008DF8445040F002008DF8000097 -:1014F000CDE90A4711A80E90ADF83050684606F0C5 -:10150000E0F8002899D1BDF82000F08000203EE7E7 -:101510003EB504460820ADF80000204612F026FB38 -:1015200008B110203EBD2146012001F061FE0028D7 -:10153000F8D12088ADF804006088ADF80600A088D6 -:10154000ADF80800E088ADF80A007E4801AB6A46B5 -:101550008088002106F0BAFCBDF800100829E1D00F -:1015600003203EBD1FB50446002002900820ADF8C0 -:101570000800CDF80CD0204612F0F8FA10B1102077 -:1015800004B010BD6F4802AA81884FF6FF7006F0C4 -:10159000E4FE0028F4D1BDF80810082901D003208A -:1015A000EEE7BDF800102180BDF802106180BDF8A3 -:1015B0000410A180BDF80610E180E1E701B582B01A -:1015C0000220ADF800005F4802AB6A464088002167 -:1015D00006F07CFCBDF80010022900D003200EBDEF -:1015E0001CB5002100910221ADF80010019012F00D -:1015F000E3FA08B110201CBD52486A4641884FF6F4 -:10160000FF7006F0AAFEBDF800100229F3D00320F7 -:101610001CBDFEB54B4C06461546207A0F46C0074A -:1016200005D0084612F0A2FA18B11020FEBD0F2016 -:10163000FEBDF82D01D90C20FEBD304612F096FA01 -:1016400018BB208801A905F082FD0028F4D130786C -:101650008DF80500208801A906F017FC0028EBD1C1 -:1016600000909DF800009DF8051040F002008DF8F4 -:101670000000090703D040F008008DF80000208822 -:10168000694606F09FFB0028D6D1ADF808502088A7 -:101690003B4602AA002106F019FCBDF80810A94239 -:1016A000CAD00320FEBD7CB5054600200090019005 -:1016B0000888ADF800000C462846019512F09AFA09 -:1016C00018B9204612F078FA08B110207CBD15B187 -:1016D000BDF8000050B11B486A4601884FF6FF7004 -:1016E00006F03BFEBDF8001021807CBD0C207CBDC7 -:1016F00030B593B0044600200D460090142101A897 -:1017000022F099F91C2108A822F095F99DF8000013 -:10171000CDF808D020F00F00401C20F0F000103071 -:101720008DF800009DF8010020F0FF008DF8010009 -:101730009DF8200040F002008DF8200001208DF877 -:10174000460001E0E601002042F60420ADF8440026 -:1017500011A801902088ADF83C006088ADF83E00EB -:10176000A088ADF84000E088ADF842009DF8020086 -:1017700006AA20F00600801C20F001008DF802006F -:101780000820ADF80C00ADF810000FA8059001A9D5 -:1017900008A805F096FF002803D1BDF8180028809E -:1017A000002013B030BD0000F0B5007B059F1E4641 -:1017B00014460D46012800D0FFDF0C2030803A206F -:1017C0003880002C08D0287A032806D0287B0128EE -:1017D00000D0FFDF17206081F0BDA889FBE72DE96D -:1017E000F04786B0144691F80C900E9A0D46B9F168 -:1017F000010F0BD01021007B2E8A8846052807D0C8 -:10180000062833D0FFDF06B0BDE8F0870221F2E7FB -:10181000E8890C2100EB400001EB400018803320E8 -:101820001080002CEFD0E889608100271AE0009634 -:10183000688808F1020301AA696900F085FF06EBD8 -:101840000800801C07EB470186B204EB4102BDF89B -:10185000040090810DF1060140460E3210F02CFA82 -:101860007F1CBFB26089B842E1D8CCE73420108039 -:10187000E889B9F1010F11D0122148430E301880C8 -:10188000002CC0D0E88960814846B9F1010F00D032 -:101890000220207300270DF1040A1FE00621ECE767 -:1018A0000096688808F1020301AA696900F04CFFFC -:1018B00006EB0800801C86B2B9F1010F12D007EBCD -:1018C000C70004EB4000BDF80410C18110220AF1EA -:1018D0000201103022F00EF87F1CBFB26089B842BE -:1018E000DED890E707EB470104EB4102BDF80400A6 -:1018F000D0810AF102014046103210F0DDF9EBE729 -:101900002DE9F0470E4688B090F80CC096F80C8090 -:10191000378AF5890C20109902F10C044FF0000A67 -:10192000BCF1030F08D0BCF1040F3ED0BCF1070F8F -:101930007DD0FFDF08B067E705EB850C00EB4C00BE -:10194000188031200880002AF4D0A8F1060000F0A9 -:10195000FF09558125E0182101A822F06CF80097B5 -:101960007088434601AA716900F0EEFEBDF80400DC -:101970002080BDF80600E080BDF808002081A21C90 -:101980000DF10A01484610F097F9B9F1000F00D0A7 -:1019900018B184F804A0A4F802A007EB080087B2ED -:1019A0000A346D1EADB2D6D2C4E705EB850C00EB50 -:1019B0004C00188032200880002ABBD0A8F1050016 -:1019C00000F0FF09558137E000977088434601AA6F -:1019D000716900F0B9FE9DF80600BDF80410E180C1 -:1019E0002179420860F3000162F34101820862F349 -:1019F0008201C20862F3C301020962F304114209C1 -:101A000062F34511820962F386112171C009607188 -:101A1000BDF80700208122460DF10901484610F06B -:101A20004BF918B184F802A0A4F800A000E007E088 -:101A300007EB080087B20A346D1EADB2C4D279E755 -:101A4000A8F1020084B205FB08F000F10E0CA3F827 -:101A500000C035230B80002AA6D0558194810097C1 -:101A600083B270880E32716900F06EFE62E72DE974 -:101A7000F84F1E460A9D0C4681462AB1607A00F551 -:101A80008070D080E089108199F80C000C274FF00D -:101A900000084FF00E0A0D2873D2DFE800F09E0711 -:101AA0000E1C28303846556A737373002146484629 -:101AB0000095FFF779FEBDE8F88F207B9146082856 -:101AC00002D0032800D0FFDF378030200AE000BFBB -:101AD000A9F80A80EFE7207B9146042800D0FFDFB9 -:101AE000378031202880B9F1000FF1D1E3E7207B66 -:101AF0009146042800D0FFDF37803220F2E7207BB8 -:101B00009146022800D0FFDF37803320EAE7207BB0 -:101B10001746022800D0FFDF3420A6F800A0288056 -:101B2000002FC8D0A7F80A80C5E7207B17460428F5 -:101B300000D0FFDF3520A6F800A02880002FBAD003 -:101B40004046A7F80A8012E0207B1746052802D0FD -:101B5000062800D0FFDF1020308036202880002F9C -:101B6000A9D0E0897881A7F80E80B9F80E00B88175 -:101B7000A1E7207B9146072800D0FFDF3780372080 -:101B8000B0E72AE04FF0120018804FF0380017003D -:101B9000288090D0E0897881A7F80E80A7F810807F -:101BA00099F80C000A2805D00B2809D00C280DD074 -:101BB000FFDF80E7207B0A2800D0FFDF01200AE05A -:101BC000207B0B2800D0FFDF042004E0207B0C28C2 -:101BD00000D0FFDF052038736DE7FFDF6BE770B5DE -:101BE0000C46054601F07DFA20B10078222804D287 -:101BF000082070BD43F2020070BD052128460EF09A -:101C000067FC206008B1002070BD032070BD30B4B7 -:101C10004880087820F00F00C01C20F0F0009030C1 -:101C200001F8080B1DCA81E81D0030BC07F037BB66 -:101C30002DE9FF4784B00027824602970798904617 -:101C4000894612300AF012F8401D20F0030607986A -:101C500028B907A95046FFF7C2FF002853D1B9F1B0 -:101C6000000F05D00798017B19BB052504681BE010 -:101C700098F80000092803D00D2812D0FFDF45E0B6 -:101C8000079903254868B0B3497B42887143914264 -:101C900038D98AB2B3B2011D0EF08BFA0446078020 -:101CA00002E0079C042508340CB1208810B1032DF4 -:101CB00028D02BE00798012112300AF009F8ADF87E -:101CC0000C00024602AB2946504608F02AF90700EC -:101CD00001D1A01C029007983A461230C8F80400BF -:101CE000A8F802A003A94046029B09F0FEFFC0B17C -:101CF000072814D200E005E0DFE800F00608111123 -:101D00000F0A0C00132015E6002013E6112011E63F -:101D100008200FE643F203000CE607200AE6032042 -:101D200008E6BDF80C002346CDE900702A4650466F -:101D3000079900F019FD57B9032D08D10798B3B2E0 -:101D4000417B406871438AB2011D0EF046FAB9F139 -:101D5000000FD9D0079981F80C90D5E72DE9FE4FF7 -:101D600091461A881C468A468046FAB102AB49461B -:101D700008F0D7F8050019D04046A61C27880EF0B9 -:101D8000EBFC3246072629463B4600960EF0F7F854 -:101D900020882346CDE900504A465146404600F08F -:101DA000E3FC002020800120BDE8FE8F0020FBE73F -:101DB00010B586B01C46AAB104238DF800301388F4 -:101DC000ADF808305288ADF80A208A788DF80E20D8 -:101DD0000988ADF80C1000236A462146FFF728FF5A -:101DE00006B010BD1020FBE770B50D4605210EF0C2 -:101DF0006FFB040000D1FFDF294604F11200BDE8AB -:101E0000704009F04EBF2DE9F8430D46804600268C -:101E100007F042FA04462878102878D2DFE800F06C -:101E2000773B345331311231313108313131313175 -:101E30002879001FC0B2022801D0102810D114BB8D -:101E4000FFDF35E004B9FFDF052140460EF040FB1F -:101E5000007B032806D004280BD0072828D0FFDFFA -:101E6000072655E02879801FC0B2022820D050B143 -:101E7000F6E72879401FC0B2022819D0102817D0E1 -:101E8000EEE704B9FFDF13E004B9FFDF287901288A -:101E90000ED1172137E0052140460EF019FB07004F -:101EA00000D1FFDF07F11201404609F0D7FE2CB147 -:101EB0002A4621464046FFF7AAFE29E01321404664 -:101EC00002F038FC24E004B9FFDF052140460EF0A3 -:101ED000FFFA060000D1FFDF694606F1120009F0A3 -:101EE000C7FE060000D0FFDFA988172901D21722FC -:101EF00000E00A46BDF80000824202D9014602E035 -:101F000005E01729C5D3404600F03EFCD0E7FFDFCF -:101F10003046BDE8F883401D20F0030219B102FBF2 -:101F200001F0001D00E000201044704713B5009838 -:101F300050B100244FEA0D000EF0E5F8002C02D15C -:101F4000F74A009911601CBD01240020F4E72DE937 -:101F5000F0470C4615462421204621F06CFD05B9BA -:101F6000FFDFA87860732888DFF8B4A3401D20F055 -:101F70000301AF788946DAF800000EF0E2F80600B7 -:101F800000D1FFDF4FF000082660A6F8008077B18F -:101F900009FB07F1091D0AD0DAF800000EF0D1F8AC -:101FA000060000D1FFDF6660C6F8008001E0C4F8DB -:101FB0000480298804F11200BDE8F04709F040BE12 -:101FC0002DE9F047804601F112000D46814609F0E7 -:101FD0004DFE401DD24F20F003026E7B144629684F -:101FE00038680EF0D9F83EB104FB06F2121D03D09A -:101FF000696838680EF0D0F805200EF011FA044632 -:1020000005200EF015FA201A012802D138680EF0CA -:102010008DF849464046BDE8F04709F026BE70B548 -:10202000054605210EF054FA040000D1FFDF04F14B -:1020300012012846BDE8704009F010BE2DE9F04FAE -:1020400091B04FF0000BADF834B0ADF804B0478854 -:102050000C4605469246052138460EF039FA060030 -:1020600000D1FFDF24B1A780A4F806B0A4F808B01F -:10207000297809220B20B2EB111F7DD12A7A04F1B5 -:10208000100138274FF00C084FF001090391102A76 -:1020900073D2DFE802F072F2F1F07F08D2888D9FF0 -:1020A0003DDBF3EEB6B6307B022800D0FFDFA88917 -:1020B00008EBC001ADF804103021ADF83410002C4D -:1020C00025D06081B5F80E9000271DE004EBC7080D -:1020D000317C88F80E10F189A8F80C10CDF800902A -:1020E0006888042304AA296900F02EFBBDF81010AB -:1020F000A8F8101009F10400BDF812107F1C1FFA97 -:1021000080F9A8F81210BFB26089B842DED80DE19C -:10211000307B022800D0FFDFE98908EBC100ADF871 -:1021200004003020ADF83400287B0A90001FC0B2B4 -:102130000F90002CEBD06181B5F81090002725E0BE -:10214000CDF800906888696903AA0A9B00F0FCFA40 -:102150000A9804EBC70848441FFA80F908F10C02FA -:1021600004A90F980FF0A8FD18B188F80EB0A8F8D0 -:102170000CB0BDF80C1001E0D4E0CFE0A8F81010CE -:10218000BDF80E107F1CA8F81210BFB26089B842CB -:10219000D6D8CBE00DA8009001AB224629463046A8 -:1021A000FFF71DFBC2E0307B082805D0FFDF03E00E -:1021B000307B082800D0FFDFE8891030ADF804003C -:1021C0003620ADF83400002C3FD0A9896181F18917 -:1021D000A18127E0307B092800D0FFDFA88900F12A -:1021E0000C01ADF804103721ADF83410002C2CD0C0 -:1021F0006081E8890090AB89688804F10C02296944 -:1022000056E0E8893921103080B2ADF80400ADF80D -:102210003410002C74D0A9896181287A0E280AD044 -:1022200002212173E989E181288A0090EB8968887D -:102230006969039A3CE00121F3E70DA8009001AB26 -:10224000224629463046FFF75BFB6FE0307B0A28C9 -:1022500000D0FFDF1220ADF80400ADF834704CB3AD -:10226000A9896181A4F810B0A4F80EB084F80C908C -:102270005CE020E002E031E039E042E0307B0B2816 -:1022800000D0FFDF288AADF834701230ADF80400BA -:1022900084B104212173A9896181E989E181298AB5 -:1022A0002182688A00902B8A688804F11202696989 -:1022B00000F04AFA3AE0307B0C2800D0FFDF122011 -:1022C000ADF80400ADF834703CB305212173A4F8D7 -:1022D0000AB0A4F80EB0A4F810B027E00DA8009042 -:1022E00001AB224629463046FFF75EFA1EE00DA8F4 -:1022F000009001AB224629463046FFF7B8FB15E0B7 -:1023000036E03B21ADF80400ADF8341084B3A4F8F6 -:102310000690A4F808B084F80AB007E0FFDF05E0F3 -:1023200010000020297A012919D0FFDFBDF8040030 -:10233000AAF800007CB1BDF834002080BDF804008C -:102340006080BDF83400392805D03B2803D03C28F4 -:1023500001D086F80CB011B00020BDE8F08F3C2110 -:10236000ADF80400ADF8341014B1697AA172DDE75C -:10237000FFE7AAF80000EEE72DE9F84356880F467C -:1023800080461546052130460EF0A2F8040000D123 -:10239000FFDF123400943B46414630466A6809F03C -:1023A000D6FDB6E570B50D4605210EF091F8040096 -:1023B00000D1FFDF294604F11200BDE8704009F0AA -:1023C00062BC70B50D4605210EF082F8040000D104 -:1023D000FFDF294604F11200BDE8704009F080BC1F -:1023E00070B5054605210EF073F8040000D1FFDF3B -:1023F00004F1080321462846BDE870400422ADE4FC -:1024000070B5054605210EF063F8040000D1FFDF2A -:10241000214628462368BDE8704005229EE470B539 -:10242000064605210EF054F8040000D1FFDF04F148 -:10243000120009F01BFC401D20F0030511E0011DF6 -:1024400000880322431821463046FFF787FC002806 -:102450000BD0607BABB2684382B26068011D0DF0A7 -:10246000F2FE606841880029E9D170BD70B50E4662 -:10247000054606F011FF040000D1FFDF01202072A5 -:1024800066726580207820F00F00C01C20F0F000FC -:1024900030302070BDE8704006F001BF2DE9F043F8 -:1024A0008BB00D461446814606A9FFF798FB00281D -:1024B00014D14FF6FF7601274FF420588CB103203A -:1024C0008DF800001020ADF8100007A8059007AAAD -:1024D000204604A90FF00FFC78B107200BB0BDE82F -:1024E000F0830820ADF808508DF80E708DF80000CC -:1024F000ADF80A60ADF80C800CE00698A178017484 -:102500002188C1818DF80E70ADF80850ADF80C80AF -:10251000ADF80A606A4602214846069BFFF788FB31 -:10252000DCE708B501228DF8022042F60202ADF880 -:1025300000200A4603236946FFF73AFC08BD08B5A8 -:1025400001228DF8022042F60302ADF800200A466F -:1025500004236946FFF72CFC08BD00B587B079B1AC -:1025600002228DF800200A88ADF808204988ADF8CD -:102570000A1000236A460521FFF75AFB07B000BD89 -:102580001020FBE709B1072312E40720704770B55C -:1025900088B00D461446064606A9FFF720FB002822 -:1025A0000ED17CB10620ADF808508DF80000ADF8D2 -:1025B0000A40069B6A460821DC813046FFF738FB5B -:1025C00008B070BD05208DF80000ADF80850F0E7A8 -:1025D00000B587B059B107238DF80030ADF8082059 -:1025E000039100236A460921FFF722FBC6E710206A -:1025F000C4E770B588B00C460646002506A9FFF76B -:10260000EEFA0028DCD106980121123009F060FBB7 -:102610009CB12178062921D2DFE801F020050516BA -:102620000318801E80B2C01EE28880B20AB1A3687F -:102630001BB1824203D90C20C2E71020C0E7042955 -:1026400004D0A08850B901E00620B9E7012913D0D1 -:10265000022905D004291CD005292AD00720AFE77C -:1026600009208DF800006088ADF80800E088ADF81A -:102670000A00A068039023E00A208DF8000060881B -:10268000ADF80800E088ADF80A00A0680A250390BC -:1026900016E00B208DF800006088ADF80800A088D7 -:1026A000ADF80A00E088ADF80C00A0680B25049096 -:1026B00006E00C208DF8000060788DF808000C25ED -:1026C0006A4629463046069BFFF7B2FA78E700B51E -:1026D00087B00D228DF80020ADF8081000236A465F -:1026E0001946FFF7A5FA49E700B587B071B1022294 -:1026F0008DF800200A88ADF808204988ADF80A1046 -:1027000000236A460621FFF793FA37E7102035E7E2 -:1027100070B586B0064601200D46ADF808108DF85C -:102720000000014600236A463046FFF781FA0400A4 -:1027300008D12946304605F0E3FB0021304605F07C -:10274000FDFB204606B070BDF8B51C4615460E468A -:10275000069F0DF0EFFF2346FF1DBCB231462A460F -:1027600000940DF0D8FBF8BD30B41146DDE902420B -:102770003CB1032903D0002330BC08F05ABA01232E -:10278000FAE71A8030BC704770B50C460546FFF773 -:102790002BFB2146284605F0C2FB2846BDE87040C9 -:1027A000012105F0CBBB00004FF0E0224FF40041C7 -:1027B0000020C2F88011204908702049900208606A -:1027C000704730B51C4D04462878A04218BF002C35 -:1027D00002D0002818BFFFDF2878A04208BF30BD14 -:1027E0002C701749154A0020ECB1164DDFF858C07F -:1027F000131F012C0DD0022C1CBFFFDF30BD086061 -:1028000003200860CCF800504FF4000010601860FE -:1028100030BD086002200860CCF800504FF04070D6 -:102820001060186030BD086008604FF06070106084 -:1028300030BD00B5FFDF00BD1800002008F50140E5 -:1028400000F500403803002014F5004070B50B205F -:1028500000F0B5F9082000F0B2F900210B2000F0DB -:10286000C4F90021082000F0C0F9EC4C0125656096 -:10287000A5600020C4F84001C4F84401C4F8480130 -:102880000B2000F0A7F9082000F0A4F90B2000F0BD -:102890008BF9256070BD10B50B2000F090F9082071 -:1028A00000F08DF9DD48012141608160DC490A6852 -:1028B000002AFCD10021C0F84011C0F84411C0F832 -:1028C00048110B2000F086F9BDE81040082000F008 -:1028D00081B910B50B2000F07DF9BDE8104008204B -:1028E00000F078B900B530B1012806D0022806D032 -:1028F000FFDF002000BDCB4800BDCB4800BDCA486B -:10290000001D00BD70B5C9494FF000400860C84DBA -:10291000C00BC5F80803C74800240460C5F840414F -:102920000820C43500F04BF9C5F83C41C24804709A -:1029300070BD08B5B94A002128B1012811D002287C -:102940001CD0FFDF08BD4FF48030C2F80803C2F886 -:102950004803B3483C300160C2F84011BDE808406C -:10296000D0E74FF40030C2F80803C2F84803AC487F -:1029700040300160C2F84411AB480CE04FF48020B5 -:10298000C2F80803C2F84803A54844300160C2F801 -:102990004811A548001D0068009008BD70B5164696 -:1029A0000D460446022800D9FFDF00229B48012380 -:1029B00004F110018B4000EB8401C1F8405526B1B1 -:1029C000C1F84021C0F8043303E0C0F80833C1F86F -:1029D0004021C0F8443370BD2DE9F0411C46154636 -:1029E00030B1012834D0022839D0FFDFBDE8F081B2 -:1029F000891E002221F07F411046FFF7CFFF012CF6 -:102A000024D000208C4E8A4F012470703C6189498B -:102A100000203C3908600220091D08608549042017 -:102A20003039086083483D350560C7F8004208200A -:102A300000F0D0F82004C7F80403082000F0B4F830 -:102A40007A49E007091F08603470CFE70120D9E711 -:102A5000012B02D00022012005E00122FBE7012B1F -:102A600004D000220220BDE8F04197E70122F9E7F7 -:102A70006B480068704770B500F0C7F8674C0546B2 -:102A8000D4F840010026012809D1D4F80803C00376 -:102A900005D54FF48030C4F80803C4F84061D4F879 -:102AA000440101280CD1D4F80803800308D54FF461 -:102AB0000030C4F80803C4F84461012010F0E0F8C5 -:102AC000D4F8480101280CD1D4F80803400308D5F4 -:102AD0004FF48020C4F80803C4F84861022010F0C5 -:102AE000CFF85648056070BD70B500F08EF8524DB5 -:102AF0000446287858B1FFF705FF687820B1002018 -:102B000085F8010010F0BCF84C48046070BD03204B -:102B1000F8E74FF0E0214FF40010C1F800027047D1 -:102B2000152000F057B8424901200861082000F044 -:102B300051B83F494FF47C10C1F808030020024609 -:102B400001EB8003C3F84025C3F84021401CC0B20C -:102B50000628F5D37047410A43F609525143C0F3A2 -:102B6000080010FB02F000F5807001EB5020704768 -:102B700010B5430B48F2376463431B0C5C020C60D6 -:102B80002F4C03FB04002F4B4CF2F72443435B0D07 -:102B900013FB04F404EB402000F580704012107029 -:102BA00008681844086010BD00F01F020121914020 -:102BB0004009800000F1E020C0F80011704700F0EB -:102BC0001F02012191404009800000F1E020C0F87F -:102BD0008011704700F01F020121914040098000E0 -:102BE00000F1E020C0F8801270474907090E002864 -:102BF00006DA00F00F0000F1E02080F8141D7047A5 -:102C000000F1E02080F8001470470C48001F0068B5 -:102C10000A4A0D49121D11607047000000B00040C3 -:102C200004B500404081004044B1004008F5014037 -:102C3000008000404085004038000020140502401C -:102C4000F7C2FFFF6F0C0100010000010A4810B538 -:102C50000468094909480831086010F0A5F80648D9 -:102C6000001D046010BD0649002008604FF0E021FF -:102C70000220C1F8800270471005024001000001E7 -:102C8000FC1F004010B50D2000F06FF8C4B26FF0CB -:102C9000040000F06AF8C0B2844200D0FFDF3A4975 -:102CA0000120086010BD70B50D2000F048F8374CC9 -:102CB0000020C4F800010125C4F804530D2000F0E1 -:102CC00049F825604FF0E0216014C1F8000170BDA3 -:102CD00010B50D2000F033F82C480121416000218F -:102CE000C0F80011BDE810400D2000F033B82848AE -:102CF00010B5046826492748083108602349D1F8EF -:102D00000001012804D0FFDF2148001D046010BD30 -:102D10001D48001D00680022C0B2C1F8002110F05B -:102D20001BFCF1E710B51948D0F800110029FBD0C1 -:102D3000FFF7DDFFBDE810400D2000F00BB800F0FC -:102D40001F02012191404009800000F1E020C0F8FD -:102D50008011704700F01F0201219140400980005E -:102D600000F1E020C0F880127047002806DA00F079 -:102D70000F0000F1E02090F8140D03E000F1E020D6 -:102D800090F800044009704704D5004000D000408E -:102D9000100502400100000110B5202000F075F878 -:102DA000202000F07DF84449202081F800044349A8 -:102DB00000060860091D42480860FEF79EFA3F4978 -:102DC000C83108603F48D0F8041341F00101C0F851 -:102DD0000413D0F8041341F08071C0F8041336498D -:102DE00001201C39C1F8000110BD10B5202000F0F1 -:102DF0004CF8324800210160001D01602F4A481E36 -:102E0000E83A10602F4AC2F808032C4BC833196007 -:102E1000C2F80001C2F860012B490860BDE810400B -:102E2000202000F03DB825492848EC39086070475B -:102E300022492648E8390860704770B51F4A806902 -:102E4000E83A224911601F49D1F800610023204D62 -:102E50001D4A5C1E1EB1A84206D300210FE0D1F826 -:102E6000606186B1A84209D2C1F80031C1F8603171 -:102E70001460BDE87040202000F012B81168BDE871 -:102E8000704020F003BEFFDF70BD00F01F02012183 -:102E900091404009800000F1E020C0F880117047A7 -:102EA00000F01F02012191404009800000F1E02064 -:102EB000C0F880127047000020E000E000060240E9 -:102EC000C413002000000240000402400100000181 -:102ED000005002004FF0E0214FF00070C1F8800177 -:102EE000C1F88002384B802283F80024C1F8000129 -:102EF000704700B502460420344903E001EBC003EB -:102F00001B792BB1401EC0B2F8D2FFDFFF2000BDFD -:102F100041F8302001EBC00100224A718A71012280 -:102F20000A7100BD294A002102EBC00001717047FF -:102F300010B50446042800D3FFDF244800EBC40486 -:102F40002079012800D0FFDF6079A179401CC0B250 -:102F5000814200D060714FF0E0214FF00070C1F865 -:102F6000000210BD2DE9F0411948056818491948BB -:102F7000083108601448042690F80004134F4009F3 -:102F8000154C042818D0FFDF16E0217807EBC100AC -:102F90000279012A08D1427983799A4204D0427990 -:102FA000827157F8310080472078401CC0B22070F1 -:102FB000042801D300202070761EF6B2E5D2044822 -:102FC000001D0560BDE8F08119E000E074060020F6 -:102FD00010050240010000015000002070B50C46B1 -:102FE000054609F051F921462846BDE870400AF02F -:102FF00034BA704770477047704770477047000099 -:103000002CFFFFFFDBE5B15100500200FEFFFFFF88 -:103010008C000000808D5B0086FA71F377B11C5242 -:103020008E1A95B8DDF423C04F8DD92A30B5F94DED -:10303000044610280AD0112C06D02846122CC1783C -:1030400006D0132C08D0FFDFEC7030BDFFDFFBE7AC -:103050001129F9D0FFDFF7E71129F5D0FFDFF3E7FA -:1030600070B50EF0B3FF044610F04CF9201AC4B24C -:1030700006200DF0D5F9054606200DF0D9F92E1AD7 -:1030800007200DF0CDF9054607200DF0D1F9E149F3 -:10309000281A3218C87812280DD000231A44132891 -:1030A0000BD0002002440878022808D000201044E9 -:1030B000201AC0B270BD0123F0E70120F2E7012021 -:1030C000F5E7D44810B5817900F10700490805D02B -:1030D0000BF0AAF9BDE8104005F014BF0BF07DF924 -:1030E000F8E702210DF0F4B92DE9FC411D469046A8 -:1030F0000E460746FFF7F5FF04000AD02078222885 -:1031000004D3A07FC0F34010A84205D10820BDE839 -:10311000FC8143F20200FAE7ADF800703DB10120F6 -:103120008DF802008DF803608DF8048002E0002025 -:103130008DF8020068460CF0A5FAA07F65F34510F3 -:10314000A0770020E3E730B50446A1F120000D464A -:103150000A284AD2DFE800F005070C1C2328353A7C -:103160003F44FFDF42E0207820283FD1FFDF3DE0F1 -:10317000A8480178032939D0C078132836D02078A0 -:10318000242833D0252831D023282FD0FFDF2DE06D -:10319000207822282AD0232828D8FFDF26E020788C -:1031A000222823D0FFDF21E0207822281ED02428E7 -:1031B0001CD026281AD0272818D0292816D0FFDF9F -:1031C00014E02078252811D0FFDF0FE02078252893 -:1031D0000CD0FFDF0AE02078252807D0FFDF05E0CC -:1031E0002078282802D0FFDF00E0FFDF257030BD07 -:1031F00030B50B8840F67B444FF6FF72022801D0B1 -:10320000934204D09D1FA54224D2022802D04D88AB -:10321000954203D04D88AD1FA5421BD24C88A342D6 -:1032200018D88B88B3F5FA7F14D2022802D0C88848 -:10323000904205D0C88840F677450A38A84209D29E -:10324000C888904208D0944206D05B1C6343B3EB1D -:10325000800F01DB072030BD002030BD70B5144663 -:103260000D46064610F082FC58B90DB1A54201D9B1 -:103270000C2070BD002408E056F8240010F076FC05 -:1032800008B1102070BD641CE4B2AC42F4D300203D -:1032900070BD2DE9F0411F4690460E4605004FF0E7 -:1032A000000465D010F0AFFC18B9286810F0ABFC32 -:1032B00010B11020BDE8F08128680028A88802D04D -:1032C000B84202D84FE00028F4D00920F2E729687C -:1032D000085DB0B1671CCA5D152A2DD03BDC3AD21F -:1032E000DFE802F03912222228282A2A313139391E -:1032F00039393939393939392200085D30BB641C14 -:10330000E4B2A242F9D833E00228DED1A01C085C66 -:1033100088F80000072801D2400701D40A20C9E735 -:10332000307840F0010015E0C143C90707E00128EB -:1033300007D010E00620BDE70107A1F18051002968 -:10334000F5D01846B6E73078810701D50B20B1E7F4 -:1033500040F0020030702868005D3844C4B2A8888C -:10336000A04202D2B1E74FF4485382B2A242AED893 -:1033700000209FE710B50278540809D0012243F2DB -:103380000223012C07D0022C0DD0032C13D10FE007 -:103390000020087005E080790324B4EB901F0AD167 -:1033A0000A70002010BD8079B2EB901F03D1F7E7BF -:1033B00080798009F4D0184610BD164A117C39B1C5 -:1033C000517C022908D0032908D043F2022070471B -:1033D0000146901D01F09ABC032100E0012101701B -:1033E0000020704738B50C460546694601F08EFC52 -:1033F00000280DD19DF80010207861F3470020705F -:1034000055F8010FC4F80100A888A4F805000020B1 -:1034100038BD0000D001002038B51378C0B10228B3 -:1034200016D0FEA46D46246800944C7905EB9414E4 -:10343000247864F34703137003280ED003F0FE00D2 -:1034400010700868C2F801008888A2F80500DFE75C -:1034500023F0FE0313700228EED1D8B240F0010031 -:10346000EEE738B50C460978222901D20820CFE7CB -:10347000ADF800008DF8022068460BF01CF805F04E -:1034800041FD050003D121212046FFF75CFE2846BF -:10349000BEE71FB5ADF800001088ADF802005088F7 -:1034A000ADF80400D088ADF808009088ADF80600AB -:1034B0000020ADF80A00ADF80C0068460BF0CCFD1A -:1034C00005F020FD04B010BD1CB500208DF80000F3 -:1034D000CDF80100ADF80500D148007C022801D0EC -:1034E000012000E000208DF8070068460BF037F956 -:1034F000002800D0FFDF1CBD2DE9FF470220C84E89 -:103500008DF804000027B08AADF80600B84643F2F3 -:1035100002094DE001A80CF042FF050006D0B08A78 -:10352000A8B3A6F81480ADF806803FE0039CA07F06 -:1035300001072DD504F124000090A28EBDF80800EB -:10354000214604F1360301F0B6FD050005D04D45D6 -:103550002BD0112D3DD0FFDF3BE0A07F20F00800F5 -:10356000A077E07F810861F30000C10861F34100AA -:10357000E07794F8210000F01F0084F82000207804 -:10358000282827D129212046FFF7DDFD22E015E07C -:1035900040070BD5BDF80800214604F10E02FFF7E5 -:1035A00078FF05000DD04D4510D100257F1CFFB2DE -:1035B00002200CF035FF401CB842ABD8052D12D0CC -:1035C00008E0A07F20F00400A07703E0112D00D0D8 -:1035D000FFDF0025BDF80600B082052D05D0284686 -:1035E00004B0BDE8F087A6F814800020F8E770B5B5 -:1035F0000646FFF776FD054605F04EFE040000D1B5 -:10360000FFDF6680207820F00F00801C20F0F000A3 -:10361000203020700620207295F83E006072BDE8D0 -:10362000704005F03CBE2DE9F04786B0040000D1A3 -:10363000FFDF20787A4E20F00F00801C20F0F00091 -:103640007030207060680178091F1A2932D2DFE8D3 -:1036500001F00DEC31313154EB310DEBEB41EC313C -:10366000310D77ECEC313131ECECEAE9868830460B -:10367000FFF737FD0546304607F0D9F9E0B160683D -:10368000807985F83E0021212846FFF75CFD304611 -:10369000FEF7C5FC304603F057FF3146022010F01C -:1036A00019FAA87F20F01000A877FFF725FF00285F -:1036B00000D0FFDF06B094E7207820F0F000203043 -:1036C000207006202072668060688079607205F044 -:1036D000E6FDD8E785882846FFF703FD00B9FFDF40 -:1036E00060688078012800D0FFDF6068817906B0CB -:1036F0002846BDE8F04707F077BD86883046FFF7DB -:10370000F0FC050000D1FFDF05F0C9FD606831461F -:10371000C088288160680089688160684089A881C4 -:10372000022010F0D7F90020A875A87F00F0030050 -:103730000228BFD1FFF7E0FE0028BBD0FFDFB9E7CA -:1037400080783C2803D0002502280AD000E001251B -:10375000002720B13C2802D0022800D0FFDF17B19B -:10376000B7E00127F5E705F09AFD1DB1B07801F04B -:1037700092FAA0E06568B5F804A0A879AD1C01280C -:1037800006D03079814605F02FFB070003D101E018 -:10379000B078F7E7FFDF0022022150460CF08FFEE1 -:1037A000040000D1FFDF22212046FFF7CCFC28795E -:1037B000012800D00220A17F804668F30101A17793 -:1037C000288B2081688B6081A88BA08184F822904F -:1037D0008DF80880B8680090F86801906A46032167 -:1037E00050460CF06CFE00B9FFDFB888ADF8100051 -:1037F000B8788DF8120004AA052150460CF05FFE3F -:1038000000B9FFDFB888ADF80C00F8788DF80E002D -:1038100003AA042150460CF052FE07E00302FF0108 -:10382000D00100206FE068E061E073E000B9FFDFE5 -:10383000062105F1120001F094FA00B368798007BF -:1038400000D5FFDF6979E07D61F34700E075D5F8C9 -:103850000600A0616889A083062105F10C0001F033 -:1038600080FAB0B1B0794108607861F347006070C8 -:10387000D6F80700C4F80200B6F80B0012E0E07DAD -:1038800020F0FE00801CE075D5F81200A061E88AE7 -:10389000E1E7607820F0FE00801C6070E868C4F802 -:1038A0000200288AE080B8F1010F04D0B8F1020FBD -:1038B0000FD0FFDFFEE63078032800D0FFDF0021C5 -:1038C000084610F007F906B00120BDE8F04701F006 -:1038D000B1B9F078132800D0FFDF0021062010F0E6 -:1038E000F9F806B01120BDE8F047FFF79FBB06B01E -:1038F0002046BDE8F04701F089BE05F0D0FCB07C61 -:1039000040F0020004E005F0CAFCB07C40F0040086 -:10391000B074CFE606B0BDE8F04705F0C0BC2DE9B5 -:10392000F04705460078914600270209F7480C4603 -:103930003E46012A6CD000234FF6FF71022A68D060 -:10394000072A0AD00A2A70D0FFDF00BFA9F800605A -:103950000CB127806680002043E6D5F804C09CF8AF -:103960000020162A7ED00CDC102A21D004DC052A87 -:103970005CD0092A59D10DE0142A22D0152AF9D198 -:10398000CCE01A2A0BD01B2A6DD01C2A6CD01D2A21 -:10399000F0D19DE012271026BCF8040006E11C2798 -:1039A0000926A4B3BCF80200A080686800794CE145 -:1039B0001B2709265CB30320207268684088A0801A -:1039C000C4E79CF802003C2829D0102718260CF1E7 -:1039D000020CE4B1BCF80200A080BCF818006082C0 -:1039E000BCF818002082BCF81A00A082BCF81C00A9 -:1039F000E0829CF8050004F108020CF10601FFF7D3 -:103A00000BFD9CF8040028B10120E0739EE703E061 -:103A1000AFE0CFE00220F8E7A9F800609BE71B27A2 -:103A20000926002CF8D0237290E710E11D274026CC -:103A3000002CF1D0A180696804F10A02081DCB783E -:103A400001461846FFF7E8FC68681F22C07A6077D5 -:103A50006868808920816868807AE07704F12000B6 -:103A6000696802E045E021E06CE01C311FF042FF94 -:103A7000696804F1110201F115000B7D0146184639 -:103A8000FFF7CAFC6868807B01F07AF920766868E5 -:103A9000C07B01F075F960766868408A6083686869 -:103AA000007CA0776868C07E20774FE7202710262B -:103AB000002CB1D0A180686804F10902807A2072DC -:103AC0006968081DCB7801461846FFF7A5FC3DE75D -:103AD00021270A26002C9FD0BCF80210A18069681B -:103AE00009792172696849796172817C21F0040148 -:103AF00057E022270B26002C8ED0BCF80400A080B3 -:103B00006868807820726868807901F039F960729D -:103B10006868C07901F034F9A07217E724271026ED -:103B2000002C86D0BCF80200A08068680079208153 -:103B30006868007A60816868C088A0816868408988 -:103B4000E08103E723271026002CB2D0BCF8021036 -:103B5000A1806968898821816968C98861816968EB -:103B60000989A18169684989E181817C21F002018B -:103B700017E0297A012903D0022914D0FFDFE5E6F6 -:103B80001F271026002C94D06988A180A989218143 -:103B9000E9896181298AA181698AE181817C21F099 -:103BA00001018174D2E6122768881026214601F0AF -:103BB000C5F8CBE6287A072850D2DFE800F0373D79 -:103BC0003D484848040011270926002C94D0B5F838 -:103BD00002804046FFF785FA90F822A0A4F80480FE -:103BE000687A2072042140460CF084FC052140468E -:103BF0000CF080FC002140460CF07CFC012140468A -:103C00000CF078FC032140460CF074FC0221404685 -:103C10000CF070FC062140460CF06CFC072140467D -:103C20000CF068FC504601F036F88FE61B27092699 -:103C3000002C8AD0A180F6E61B270926002C84D010 -:103C4000A180287A012800D0022020727EE64A4610 -:103C500021462846BDE8F04701F05EBEFFDF75E66D -:103C600070B52A4DE878132801D0082070BD0BF0FC -:103C7000CAF905F047F9040002D1287901F00BF8E0 -:103C8000002106200FF026FF204670BD1CB51F48FE -:103C9000C078122801D008201CBD00208DF800003B -:103CA00068460AF0EDFE05F02DF90028F4D1002158 -:103CB00006200FF00FFF1120FFF7B8F900201CBD00 -:103CC0001CB5124C2178012916D000218DF8001066 -:103CD00001218DF801108DF8020068460BF06DFC93 -:103CE00005F010F9002808D1002108460FF0F2FE77 -:103CF0002078032802D004E008201CBDA07800F042 -:103D0000CAFF012000F096FF00201CBDD00100205A -:103D100070B5002538B1022818D0062837D00728FA -:103D200000D0FFDF70BD0020FFF7CAFF0028F9D1E7 -:103D300005F0B2FA0028F5D0017821F00F01891CB6 -:103D400021F0F0012031017005723FE08EB2304663 -:103D5000FFF7C7F9040000D1FFDF20782128E1D068 -:103D600005F09AFA60B1017821F00F01891C21F069 -:103D7000F00110310170022101724680A57525E025 -:103D800021463046BDE870401322FFF76ABBFE486B -:103D9000C478122C03D0132C04D0FFDF70BDFFF7C2 -:103DA00075FF01E0FFF75CFF0028F7D105F074FA1A -:103DB0000028F3D0017821F00F01891C21F0F001D7 -:103DC00020310170122C05D002210172BDE8704033 -:103DD00005F065BA0121F8E72DE9F04116460C001F -:103DE000804600D1FFDF307820F00F00801C20F0EB -:103DF000F000103030702078012804D0022817D04D -:103E0000FFDFBDE8F0814046FFF76BF9050000D108 -:103E1000FFDF0320A87505F042FA94E80F0008368A -:103E200086E80F00D848817C41F001018174E8E701 -:103E30004046FFF756F9050000D1FFDFA1884FF695 -:103E4000FF700027814202D1E288824203D0814282 -:103E500001D1E08840B105F022FA94E80F0008365D -:103E600086E80F00AF75CCE7A87D0128C9D178237B -:103E70000022414602200FF083FD0220A875C0E712 -:103E800038B505460C4608460FF070FE20BB203DB5 -:103E9000072D51D2DFE805F0041C383D43493100BD -:103EA000002107200FF0ECFD08B1112038BDA01C47 -:103EB0000BF03EF905F026F805003ED1002208235C -:103EC000114607200FF05CFD072836D0FFDF34E0F5 -:103ED00060680FF08FFE08B1102038BD618820881F -:103EE0006A460BF01DFC05F00DF8050025D1606851 -:103EF00018B3BDF8001001801FE0A07800F00101A8 -:103F000020880BF043FC14E0206801F0A3FF054675 -:103F100013E0207800F001000BF0B4FC09E02078F9 -:103F200000F001000AF04CFA03E0618820880BF0F1 -:103F300086FB04F0E7FFEAE70725284638BD70B5A1 -:103F400005460C4608460FF037FE08B1102070BD3C -:103F5000203D072D1BD2DFE805F0041818181A1AA7 -:103F600018002088FFF7BDF820B10078222804D27D -:103F7000082070BD43F2020070BD2088A11C0AF029 -:103F800016FBBDE8704004F0BDBF062070BD0720E1 -:103F900070BD7D48801D704738B516217A481FF0E6 -:103FA00028FD012000F046FE1120FFF73FF8764C77 -:103FB0006846E11D05F006F99DF80010A07961F34F -:103FC000470020F00100A071002020744FF46170C0 -:103FD000E08102206074FFF774F800B1FFDFFDF7A5 -:103FE000B3F901F0D0FA38BD10B50C464021204697 -:103FF0001FF0FFFCA07F20F00300A077202020709E -:104000000020A07584F8230010BD70477CB50546DC -:104010000FF0ACFD08B110207CBD5B4CA11DD4F8A5 -:1040200006000090D4F80A0001902846FFF7DAF95C -:104030000028F1D1FFF745F80028EDD00099C4F829 -:104040000610BDF8041061819DF8061021737CBD37 -:1040500010B504460FF0B0FD08B1102010BD4A495C -:1040600022468879C91D4008FFF7D6F9002010BD07 -:10407000FEB50D4604004FF0000712D00822FFF7EE -:10408000EDF8002812D1002609E000BF54F8260000 -:104090006946FFF76FF9002808D1761CF6B2AE42E8 -:1040A000F4D30AF091F810B143F20320FEBD364E6E -:1040B0007771FCB100271AE054F8270002A9FFF736 -:1040C00059F900B1FFDF9DF808008DF8000054F8A1 -:1040D000270050F8011FCDF801108088ADF80500C9 -:1040E00068460AF0BBF800B1FFDF7F1CFFB2AF42A9 -:1040F000E2D375710020FEBD2DE9F0478AB0154668 -:10410000894604001DD00F4608222946FFF7A6F86D -:10411000002810D1002612E054F82600694610301D -:1041200000F0F4FD002806D13FB157F826000FF04B -:104130001DFD10B110200AB00EE4761CF6B2AE429E -:10414000EAD30026A5F101081CE000BF06F1010A30 -:104150000AF0FF0712E000BF54F82600017C4A086D -:1041600054F827100B7CB2EB530F05D10622113007 -:1041700011311FF093FB70B17F1CFFB2AF42EBD344 -:104180000AF0FF06464501E0D0010020DEDB4E4686 -:1041900024B1012003E043F20520CCE700200AF01F -:1041A0008EF810B90AF09FF810B143F20420C2E76C -:1041B00064B300270DF1170826E000BF54F827006C -:1041C0006946103000F0A2FD00B1FFDF54F827006F -:1041D000102250F8111FCDF801108088ADF80500AD -:1041E00054F827100DF107001FF084FB96B156F824 -:1041F0002710102240461FF07DFB684609F0FCFFA7 -:1042000000B1FFDF7F1CFFB2AF42D7D3FFF75CF9ED -:10421000002090E7404601F011FEEEE730B585B092 -:1042200004460FF0A3FC18B960680FF0ECFC10B165 -:10423000102005B030BD60884AF2B811884206D817 -:104240002078F94D28B1012806D0022804D0072093 -:10425000EFE7FEF736FF17E06078022804D0032866 -:1042600002D043F20220E4E76874C1B2002000905B -:10427000ADF8040002292BD0032926D0FFDF6846C1 -:104280000AF0D2F804F03EFE0028D2D1606801F0B6 -:10429000C8FD207858B101208DF800000DF1010013 -:1042A00001F0CCFD68460BF0CFFA00B1FFDF2078BB -:1042B0002874FFF709F9608860B1E88180B209F0DD -:1042C000F6FF00B1FFDF0020B3E78DF80500D6E769 -:1042D0004020FAE74FF46170EFE710B504460FF0A5 -:1042E0006BFC20B9606838B10FF084FC08B1102075 -:1042F00010BD606801F0A2FDCB48C1896180417C9E -:104300006170007C2070002010BD30B58FB000209F -:1043100015468DF830008DF82C008DF828008DF8AA -:1043200034000C4651EA050016D01F230AAA0CA936 -:104330002046FEF7AEFF00280CD11F230DAA0BA9C3 -:104340002846FEF7A6FF002804D19DF82C00C007E0 -:1043500004D00A200FB030BD0720FBE7ACB103202A -:104360008DF8010001208DF80200A088ADF804004E -:10437000A2880DF1060021681FF0BCFA68460AF019 -:10438000EBFF04F0BFFD0028E4D13DB12879296896 -:104390000AF0FDFF04F0B6FD0028DBD1A2499DF82C -:1043A000280048700020D5E72DE9F0478EB0804600 -:1043B0004FF000099DA00C468DF81C90D0E900102C -:1043C000CDE90810924620460FF0D0FB88B920793D -:1043D000400703D520680FF0C9FB50B9924D012763 -:1043E000287C50B1687C022807D120680FF00BFCB4 -:1043F00018B110200EB0BDE8F0872878012801D050 -:104400000820F7E707200CF013F820B92079C0073F -:1044100001D01220EEE7FEF723FE18B1A088C109F3 -:104420007ED101E01320E5E7A168824BA1F12002D3 -:104430009A4206D3020773D5002971D1A1890029B8 -:104440006ED169784FEA4070C90709D0002810DBA7 -:10445000A089002864D044F25061884260D801E00D -:10446000002806DB287C50B1687C022807D1206830 -:1044700028B107A92068FEF77DFF0028BAD1207C6B -:1044800030B1012806D0022806D0032848D105E023 -:10449000002604E0012602E0022600E00326A088B0 -:1044A000C10701D181071DD5410712D48EB16979A9 -:1044B000002935D06978890702D043F2012099E7B5 -:1044C000810706D5C00706D1022E29D0032E27D09A -:1044D00008E0C00706D0504600F0C0FB002889D194 -:1044E00085F802A08DF80080A088ADF80200A068D1 -:1044F0000190A06802900DF10D00FEF75EFF00B183 -:10450000FFDF9DF81C008DF80E002079400706D4CF -:10451000287C68B1687C02280AD1206840B100E09C -:1045200059E0206850F8011FCDF80F10808802E094 -:104530004846CDF80F90ADF813008DF81560E07B7C -:10454000C0F34002014662F35F01C0F3800041EA1C -:10455000800008A9085C8DF80C00E0B37F208DF87E -:104560001600E07C8DF81800207D032100F07F000C -:104570008DF81A00207DC0098DF81B00627C072091 -:10458000012A39D0022A9AD0042A98D18DF817101E -:104590002079C00609D4A27C0720012A2FD0022A44 -:1045A00030D0042A8BD18DF819100CA968460AF076 -:1045B000BAFE04F0A7FC002891D18DF828708DF880 -:1045C00029708DF82A80A089ADF82C00A07B8DF889 -:1045D0002E000AA800E00DE00AF0EFFF04F092FCC4 -:1045E0000028D2D12079C00710D0A87800F046FB6F -:1045F00003200CE00720FDE68DF81770C8E78DF862 -:104600001970D2E702208DF81900CEE7022000F0E1 -:1046100011FB2079000719D4A089B8B164280BD305 -:104620006421B0FBF1F008E0D0010020070605048A -:1046300003020100E0FFFF00012000228300114679 -:1046400010460FF09DF908B10320D3E60020D1E613 -:104650002DE9FC4107460D46032608460FF0D3FA24 -:10466000002865D13846FEF73CFD040005D02078CF -:10467000222805D20820BDE8FC8143F20200FAE7B7 -:10468000A07F00F0030C2DB129466046FEF7B0FD77 -:104690000600F0D1BCF1010F05D0BCF1020F18D01B -:1046A000FFDF3046E7E7A07D2946022801D011B19F -:1046B00007E01120DFE76846FCF754FF0028DAD155 -:1046C0006946384606F053FD0600EAD10120A07580 -:1046D000E7E7A07D032803D1F748807CC00701D01D -:1046E00035B30EE025B1A07F40071FD4002100E0C4 -:1046F0000121384606F05BFD0600D2D1A075002DE1 -:10470000CFD02A4621463846FEF7C3FE064611287A -:10471000C7D1A07F4107C4D4296844F80E1F696837 -:10472000616040F0040020740026BAE71126B8E763 -:104730001020A0E770B50C460546FEF7D2FC01003C -:1047400005D022462846BDE87040FEF78ABE43F2F7 -:10475000020070BD10B509F0EDFDBDE8104004F099 -:10476000D1BB0123FEF7C0BC00231A461946FEF751 -:10477000BBBC30B587B004460FF0F8F910B110207B -:1047800007B030BD204600F0B5FA0028F8D1CA4D78 -:10479000E878112801D00820F2E7FEF761FC38B173 -:1047A0002078C0F34100012804D0032802D003E0A0 -:1047B0001320E5E76879E8B36846FEF7FEFD00B12F -:1047C000FFDF20780125C0F341008DF801006178FA -:1047D000072001293AD00229D2D00429D0D10420BF -:1047E0008DF80200207800F001008DF80300608849 -:1047F000ADF80600A088ADF80A0068460AF09FF8F8 -:1048000004F080FB0028BBD18DF810508DF811000A -:10481000ADF812002089ADF8140004A80AF030F9B0 -:1048200004F070FB0028ABD1E088642811D280B17D -:10483000012000E008E000F073FA0400A0D112208B -:10484000FEF7F4FB20469BE7072099E78DF802501E -:10485000C8E76421B0FBF1F0EBE72DE9F047964E95 -:10486000074690B0F0789A4615460C46122803D1B8 -:10487000FFF70CFA002816D120460FF077F9E8BBB5 -:1048800028460FF073F9C8BB204600F033FA002821 -:1048900009D129460220FEF7ABFC002803D1F078AD -:1048A000112802D0082010B0A5E506200BF0C0FDAD -:1048B00038B12078C0F34100012804D0032802D089 -:1048C00003E01220EFE7707928B1FEF7C9FB022858 -:1048D00003D21320E7E70720E5E720784FF001092E -:1048E000C0F341008DF8000061780720012915D040 -:1048F0000229D8D00429D6D1042000E015E08DF893 -:1049000009006088ADF80A00A088ADF81000207892 -:104910004FF000084008C00703D020E08DF8099050 -:10492000EFE738460FF022F908B11020BBE73878DE -:10493000400808D0012809D0022807D0032805D054 -:1049400043F20220AFE78DF8028001E08DF802907B -:1049500057F8010FCDF80300B888ADF807000DF146 -:104960000100FEF72AFD08B103209CE72888ADF876 -:1049700016006888ADF81C00A888ADF82200E88809 -:10498000ADF82800ADF82E80ADF83480504600F028 -:1049900065F9002887D186F804A068460AF030FB44 -:1049A00004F0B0FA00288DD1307900F067F9E08882 -:1049B00064280AD248B1012000F0B2F9040089D17C -:1049C0001320FEF733FB20466DE76421B0FBF1F0C6 -:1049D000F2E770B505460C4608460FF0EDF808B151 -:1049E000102070BD2846FEF77CFB38B101782229E3 -:1049F00002D3807F800604D4082070BD43F20200F9 -:104A000070BD214628460AF072FEBDE8704004F0F1 -:104A100079BA38B505460C4608460FF0A7F808B134 -:104A2000102038BD2846FEF75CFB20B10078222814 -:104A300004D2082038BD43F2020038BD1E48807CF5 -:104A4000400701D5112038BD2078C00802D1607818 -:104A5000C00801D0072038BDADF8005020788DF88F -:104A6000020060788DF80300684609F05EFF04F0EC -:104A700049FA38BD2DE9F0418EB014460D46064680 -:104A8000FEF72FFB070006D03878222806D2082030 -:104A90000EB0BDE8F08143F20200F9E728460FF0BE -:104AA000B2F830B94FF0000864B120460FF0A2F818 -:104AB00020B11020ECE70000D0010020C4F80080F5 -:104AC000A4F80480B648807C800701D51120DFE778 -:104AD00097F8220004F088F98088011DFB2901D293 -:104AE000001D00E0FB20C0B26A46294600F0DDF858 -:104AF000ADF81060BDF80200ADF81200BDF8060078 -:104B0000ADF81400BDF80000ADF81600BDF80400C3 -:104B1000ADF8180007A904A809F0C9FD00B1FFDF2E -:104B2000BDF81E00ADF80800BDF82000ADF80A0081 -:104B3000BDF82200BDF82410BDF800200844ADF8EF -:104B40000C0007201B2AA3D3BDF802101B299FD3FA -:104B5000FB2A9DD8FB299BD806278A4210D1012128 -:104B6000104600F056F8BDF80410884208D1BDF890 -:104B70000200012100F04DF8BDF80610884201D076 -:104B8000384685E7BDF8080028B9BDF80A1011B904 -:104B9000BDF80C1029B35DB1298849B1698839B1D4 -:104BA00024B102982060BDF80C00A08013206FE7AC -:104BB000BDF80010BDF80A20081A80B2ADF8000058 -:104BC000BDF80210891AADF80210012100F021F899 -:104BD000ADF80400BDF80200012100F01AF8ADF8AC -:104BE0000600ADF82860BDF80200ADF82A00BDF857 -:104BF0000600ADF82C00BDF80000ADF82E00BDF8A1 -:104C00000400ADF830000AA809F0F0FC04F07AF9CD -:104C10003EE711F00C0F04D04FF4747101EB8010DB -:104C200006E0022902D0C000703001E080003C3074 -:104C300080B2704730B55A4D040008D0012C04D022 -:104C4000022C06D0032C04D0FFDF2C7030BDFFDF18 -:104C5000FBE728780128F8D0FFDFF6E710B5044617 -:104C600004F0C2F830B1407830B1204604F0BBFB0C -:104C7000002010BD072010BD122010BD10B504F09B -:104C8000B3F8040000D1FFDF607800B9FFDF60787F -:104C9000401E607010BD10B504F0A6F8040000D1ED -:104CA000FFDF6078401C607010BD10B5144631B154 -:104CB0000A68226049686160218839B107E0208074 -:104CC00060800121FFF7A5FFA0800DE020806188B2 -:104CD00001B96080A08820B920880121FFF799FFE1 -:104CE000A080E088002804D160880121FFF791FFAF -:104CF000E08010BD4188042906D38088042803D3AE -:104D0000884201D800207047072070470278520877 -:104D100004D0012A02D043F202207047FEF72ABBDA -:104D200010B548B183000022114606200EF028FE7F -:104D3000062801D0032010BD002010BD70B50C0066 -:104D400006460DD0FEF7CDF9050000D1FFDFA680A5 -:104D500028892081288960816889A081A889E081CB -:104D600070BD10B500231A4603E0845C2343521C37 -:104D7000D2B28A42F9D30BB1002010BD012010BD80 -:104D800000B540B1012805D0022803D0032804D083 -:104D9000FFDF002000BDFF2000BD042000BD00009B -:104DA000D001002010B504460EF0E0FE08B110203E -:104DB00010BD2078C0F30210042807D860780728B7 -:104DC00004D3A178102901D8814201D2072010BD57 -:104DD000E078410706D421794A0703D4000701D4BB -:104DE000080701D5062010BD002010BD10B51378AE -:104DF0005C08C37F64F30003C3771478A40864F3EA -:104E00004103C3771078C309487863F341004870C1 -:104E100013781C090B7864F347130B701378DB08C5 -:104E200063F3000048705078487110BD10B5C47825 -:104E30000B7864F300030B70C478640864F34103D7 -:104E40000B70C478A40864F382030B70C478E40880 -:104E500064F3C3030B700379117863F300011170DD -:104E600003795B0863F34101117003799B0863F3D5 -:104E7000820111700079C00860F3C301117010BD88 -:104E800070B514460D46064604F006FA80B1017866 -:104E9000182221F00F01891C21F0F001A03100F847 -:104EA000081B21461EF06BFDBDE8704004F0F7B909 -:104EB00029463046BDE870401322FEF7D2BA10B53D -:104EC000FE4C94F8300000280CD104F120014FF67C -:104ED000FF72A1F110000CF075FE00B1FFDF0120A0 -:104EE00084F8300010BD2DE9F047064608A8894631 -:104EF00090E830041F469046142128461EF09BFD82 -:104F00000021CAF80010B8F1000F03D0B9F1000F6A -:104F100003D114E03878C00711D020680EF04CFEA1 -:104F2000C8BBB8F1000F07D1206812302860206894 -:104F3000143068602068A8602168CAF800103878CA -:104F4000800725D560680EF055FE20BBB9F1000F33 -:104F500022D0FFF71EF80168C6F8C8118188A6F8AC -:104F6000CC11807986F8CE01FFF7A9FFD34F203707 -:104F7000EF60626862B196F8C80106F2C911400894 -:104F80001032FEF749FA1022394660681EF0B2FC72 -:104F90000020BDE8F08706E0606820B1E860606846 -:104FA000C6F8C401F4E71020F3E730B505460878E9 -:104FB0000C4620F00F00401C20F0F0011031217051 -:104FC0000020607095F8230030B104280FD0052828 -:104FD00011D0062814D0FFDF20780121B1EB101F7B -:104FE00004D295F8200000F01F00607030BD21F061 -:104FF000F000203002E021F0F00030302070EBE7CC -:1050000021F0F0004030F9E710B510B190F8BD4044 -:1050100044B1AA4890F83540002064B1086010609F -:10502000186010BD00F1BC040C6000F1E40100F553 -:1050300086701160F4E7A14C34340C60EFE700B5E2 -:105040008BB00723CDE902128DF8013001919B4905 -:10505000002364310591099301468DF810306846AC -:105060000CF088FD002800D0FFDF0BB000BD70B54C -:1050700090B015460C4602220646ADF808200921DC -:1050800003AB04F04EFF0490002812D00C208DF8E2 -:10509000010004208DF8040004F59A740996059423 -:1050A0008DF818500AA968460CF064FD00B1FFDFC6 -:1050B000012010B070BD10B588B00C460A99ADF84B -:1050C0000000C3B11868CDF802005868CDF806009A -:1050D000ADF80A20102203A81EF00CFC68460AF066 -:1050E00057F803F00FFF002803D1A17F41F0100112 -:1050F000A17708B010BD0020CDF80200E6E72DE949 -:10510000F0470646808A88B080B20D468246FDF799 -:10511000E8FF04463078DFF8A4914FF00008A9F1C9 -:105120003807112873D2DFE800F072F735093677B7 -:105130007E94A3E7F6F5F4F35BF3F300A07F00F0B1 -:105140000300012806D0002150460BF0C1F90500EC -:1051500003D101E00121F7E7FFDF99F85C10C907EF -:1051600002D0D9F860000BE0032105F121000EF018 -:10517000D4F9D5F821005249B0FBF1F201FB12003D -:10518000C5F821007068A867B068E867207825280E -:1051900000D0FFDFE6E0A07F00F00300012806D08A -:1051A000002150460BF094F9060003D101E00121E3 -:1051B000F7E7FFDF3078810702D52178252904D071 -:1051C00040F00100307008B0E3E60220287096F845 -:1051D0002000287106F121003136C5E90206F2E708 -:1051E000A07F00F00300012806D0002150460BF0FC -:1051F0006FF9040003D101E00121F7E7FFDF207818 -:10520000C10605D51320287041346C60DBE7B8E196 -:1052100040F008002070D6E72848082138380EF002 -:105220007CF9032012E01022684671681EF062FBD0 -:10523000102204A8B1681EF05DFB6F60D6E9010181 -:105240003A4609F0B6F800B1FFDF042028706F601D -:10525000B9E7E07FC00600D5FFDF307CB28800F000 -:10526000010308B05046BDE8F047092105F0E1BC54 -:1052700004B9FFDF716821B1102204F124001EF08F -:1052800039FB28212046FDF75EFFA07F00F00300D8 -:1052900002280ED104F12400002300901A46214672 -:1052A0005046FFF708FF11280CD029212046FDF7B2 -:1052B0004AFF307A84F8200085E700002C020020A5 -:1052C00040420F00A07F000700D5FFDF14F81E0F3B -:1052D00040F008002070A4F81680C4F81880C4F8C4 -:1052E0001C806178084661F38200410861F3C300C5 -:1052F0006070307AE07066E7A07F00F0030001285C -:105300000BD0002150460BF0E3F8040008D106E072 -:105310001AE032E16DE044E02BE00121F2E7FFDF2B -:10532000022104F189000EF0F8F81020287004F52D -:10533000E4706860B4F88910298204F18000FB49A8 -:105340006861C5E902913EE7A07F00F003000128F3 -:1053500005D0002150460BF0BBF818B901E001213F -:10536000F8E7FFDF08B0324621465046BDE8F04777 -:1053700086E504B9FFDF207821289DD930790128FE -:1053800003D1E07F40F01000E077324621465046DE -:10539000FFF776FD08B02046BDE8F0472321FDF772 -:1053A000D2BE3279AA8005F108030921504604F0E3 -:1053B000B8FDE86010B11120287004E7A07F00F06C -:1053C0000300012806D0002150460BF081F80400AC -:1053D00003D101E00121F7E7FFDF04F166010223B9 -:1053E0001022081F0AF0F9FE80F800803179417020 -:1053F000E9E6A07F00F00300012806D00021504616 -:105400000BF066F8050003D101E00121F7E7FFDFAB -:1054100095F8880000F00300012879D1A07F00F002 -:105420000307E07FC0F3400616B1012F04D02BE044 -:1054300095F8A400C0072AD0D5F8C01119B395F883 -:105440008720087C62F387000874E27FD5F8C011DA -:1054500062F341000874D5F8C01166F300000874C7 -:10546000AEB1D5F8C001102204F124018C351EF034 -:1054700041FA287E40F001002876287820F00100CB -:1054800005F88C0900E016B1022F04D02CE095F845 -:105490008C00C00726D0D5F8BC1119B395F8872029 -:1054A000087C62F387000874E27FD5F8BC1162F3D0 -:1054B00041000874D5F8BC1166F3000008748EB181 -:1054C000D5F8BC01102204F124018C351EF012FA2B -:1054D000287840F0010005F8180B287820F001002A -:1054E00005F8A409022F44D05FF0000000EB400053 -:1054F00005EBC00090F88C00800709D595F8800076 -:10550000D5F8C421400805F181011032FDF784FF70 -:1055100005208DF8000095F888006A4600F0030029 -:105520008DF8010095F88C108DF8021095F8A40004 -:105530008DF803002146504601F038FA20782528DE -:1055400005D0212807D0FFDF2078222803D9222187 -:105550002046FDF7F8FDA07F00F0030001280AD0E7 -:10556000002150460AF0C6FF00283FF438AEFFDFA6 -:1055700029E60120BAE70121F3E7716881F801808B -:1055800021E6FFDF1FE670B5684C0025103C04F8EB -:105590005C5F65600CF0BBFA6449A1F1100003F098 -:1055A00037FE04F82C5C0620607260487C30206175 -:1055B0005030A0611030E06170BD70B50D46FDF750 -:1055C00090FD040000D1FFDF4FF4E87128461EF083 -:1055D00032FA56485430686104F124002861A07FF3 -:1055E00000F00300012809D05FF0020105F59A7070 -:1055F0000CF08EFA002800D0FFDF70BD0121F5E726 -:105600000A46014602F59A700CF0A2BA70B505463A -:10561000406886B001780A2906D00D2933D00E29BA -:105620002FD0FFDF06B070BD46883046FDF759FD2C -:10563000040000D1FFDF20782128F3D028281BD1D7 -:10564000686802210C3001F0A6F9A8B16868082149 -:10565000001D01F0A0F978B104F12401304609F0F1 -:10566000AEFF03F04FFC00B1FFDF06B02046BDE8FF -:1056700070402921FDF767BD06B0BDE8704003F01A -:105680000EBE01218171686886883046FDF729FDCC -:10569000040000D1FFDFA07F00F00301022902D146 -:1056A00020F01000A077207821280AD0686881793E -:1056B00009B1807880B1A07F00F0030002285ED09D -:1056C000FFDFA07F00F003000228ABD1FDF714FF3D -:1056D0000028A7D0FFDFA5E703F0E1FDE07FC107C9 -:1056E00028D0800705D594F8200000F01F0010286E -:1056F0001ED0052084F82300207829281CD02428D7 -:10570000DFD1314605200EF0E5F922212046FDF7D4 -:105710001AFDA07F00F0030001282ED000213046A2 -:105720000AF0E8FE0028CCD0FFDFCAE73C020020E8 -:105730000620DFE70420DDE7A07F00F0030001285A -:1057400006D0002130460AF0C3FE050003D101E077 -:105750000121F7E7FFDF25212046FDF7F4FC0F20AC -:105760008DF80000694605F59A700CF0E8F90228FA -:10577000A7D00028A5D0FFDFA3E70121CFE703F0E2 -:105780008EFD9EE72DE9F0438BB09946154688467D -:105790000646FDF7A6FC04004FD0207822284CD303 -:1057A00023284AD0E07FC00647D4A07F00F0030042 -:1057B000012806D0002130460AF08AFE070002D0F8 -:1057C0000CE00121F7E7A07F00F00300012805D1DC -:1057D0000121002230460AF072FE074601AB02AA00 -:1057E00003A93846FFF710FC039800B9FFDF4FB15B -:1057F000039807F59A7787612078222806D0242815 -:1058000004D007E003990020886103E025212046A9 -:10581000FDF799FC03980B21417046628580C0E931 -:105820000289029901610199416104A90CF0A2F970 -:10583000022802D0002800D0FFDF0BB0BDE8F083C3 -:1058400070B586B00546FDF74CFC017822291CD9BD -:10585000807F00F00300012806D0002128460AF0CE -:1058600037FE04002FD101E00121F7E7FFDF2AE036 -:10587000B4F8620004F1660630440178427829B138 -:1058800021462846FFF7F3FBB0B9CBE6ADF804207C -:105890000921284602AB04F044FB03900028F4D011 -:1058A00011208DF80000694604F59A700CF047F954 -:1058B000022801D000B1FFDF02231022314604F19B -:1058C00062000AF0C0FCB4F864000028D0D1A9E658 -:1058D00010B586B00446FDF704FC0178222919D9D9 -:1058E000807F00F00300012806D0002120460AF046 -:1058F000EFFD040003D101E00121F7E7FFDF1220F3 -:105900008DF80000694604F59A700CF018F900282B -:1059100000D0FFDF06B010BD2DE9F05F05460C4654 -:1059200000270078904601093E46BA4604F1080B6C -:1059300002297CD0072902D00A2909D142E06868EF -:1059400001780A2905D00D292CD00E292AD0FFDF95 -:10595000B2E114271C26002C6AD04088A080FDF7F5 -:10596000C0FB5FEA000900D1FFDF99F817005A4633 -:10597000400809F11801FDF74FFD68688089208211 -:1059800069684868C4F812008868C4F81600A07EE8 -:1059900020F0060040F00100A07699F81E0040F0CB -:1059A00040014DE01A270A26002CD5D08088A0801F -:1059B000FDF797FB050000D1FFDF59462846FFF7AA -:1059C000F4FA79E10CB1A88BA080287A0D287CD05C -:1059D00006DC01287AD0022808D0032804D135E05B -:1059E0000F2874D0102873D0FFDF65E11E27092629 -:1059F000002CB1D0A088FDF774FB5FEA000900D14C -:105A0000FFDF287B00F003000128207A1BD020F064 -:105A100001002072297B890861F341002072297BF3 -:105A2000C90861F382002072297B090901E038E18D -:105A3000EBE061F3C300207299F81E0040F0800192 -:105A400089F81E1038E140F00100E2E713270D2627 -:105A5000002CAAD0A088FDF744FB8146807F00F08F -:105A60000300012806D00021A0880AF031FD0500BE -:105A700003D101E00121F7E7FFDF99F81E0000F0F4 -:105A80000302012A59D0E86F817801F0030101294E -:105A9000217A54D021F00101217283789B0863F3AD -:105AA000410121728378DB0863F3820121728378DC -:105AB0001B0963F3C3012172037863F3061121729A -:105AC000437863F3C711217203E060E0A6E08DE044 -:105AD0009EE084F809A0C178A172012A32D04279EF -:105AE000E17A62F30001E1724279520862F3410106 -:105AF000E1724279920862F38201E1724279D2083E -:105B000062F3C301E1720279217B62F30001217328 -:105B10000279520862F3410121730279920862F31B -:105B2000820121730079C00860F3C301217399F8E1 -:105B30000000232859D9262168E0A86FA4E741F086 -:105B40000101A9E70279E17A62F30001E1720279C9 -:105B5000520862F34101E1720279920862F3820114 -:105B6000E1720279D20862F3C301E1724279217BCA -:105B700062F3000121734279520862F341012173FB -:105B80004279920862F3820121734079CBE71827AA -:105B90001026D4B3A088FDF7A4FA8346807F00F0D6 -:105BA0000300012807D00021A0880AF091FC5FEAD9 -:105BB000000903D101E00121F6E7FFDFE868A060FA -:105BC00099F8000040F0040189F8001099F80100EC -:105BD000800708D5012020739BF8000023286BD98B -:105BE000272158464FE084F80CA065E015270F26C2 -:105BF0005CB1A088FDF775FA814606225946E8682F -:105C000008F0E0F80120A0739BE03FE048463AE04E -:105C100016270926D4B3287B20724DE0287B19274C -:105C20000E269CB3C4F808A0A4F80CA0012807D045 -:105C3000022805D0032805D0042803D0FFDF0DE09B -:105C4000207207E0697B042801F00F0141F0800118 -:105C500021721CD0607A20F003006072A088FDF7EA -:105C600040FA05460078212826D0232800D0FFDFFF -:105C7000A87F00F00300012811D00021A0880AF0BD -:105C800039FC22212846FDF75EFA15E004E0607A2F -:105C900020F00300401CE0E7A8F8006011E00121BB -:105CA000ECE70CB16888A080287A03282BD0042860 -:105CB0000AD005284BD0FFDFA8F800600CB1278080 -:105CC00066800020BDE8F09F15270F26002CE3D04A -:105CD000A088FDF706FA807F00F00300012806D0B7 -:105CE0000021A0880AF0F4FB050003D101E00121A6 -:105CF000F7E7FFDFD5F821000622594608F062F8E1 -:105D000084F80EA0D8E717270926002CC4D0A08855 -:105D1000FDF7E7F98146807F00F00300012806D0F7 -:105D20000021A0880AF0D4FB050003D101E0012185 -:105D3000F7E7FFDF6878800701D5022000E0012047 -:105D4000207299F800002328B6D927215EE7192789 -:105D50000E26002CA0D0A088FDF7C3F95FEA000949 -:105D600000D1FFDFC4F808A0A4F80CA084F808A0B4 -:105D7000A07A40F00300A07299F81F1061F382002E -:105D8000A07299F81F10C1F34002114205D099F892 -:105D9000201001F01F0110292CD020F00800A07263 -:105DA00099F81F004108607A61F3C3006072697A54 -:105DB00001F003010129A5D140F00400607299F8B7 -:105DC0001E00E97A00F00300012816D0607B61F321 -:105DD00000006073AA7A217B62F300012173EA7AE2 -:105DE000520862F341006073A87A400860F34101F1 -:105DF000217361E740F00800D1E7207B61F30000E8 -:105E00002073AA7A617B62F300016173EA7A520817 -:105E100062F341002073A87A400860F34101617386 -:105E20004AE710B5FE4C30B10146102204F12000C3 -:105E30001DF060FD012084F8300010BD10B504464F -:105E4000FFF73DF8F64920461022BDE8104020310A -:105E50001DF050BD70B5F24D06004FF0000413D098 -:105E60000DF084FE08B110240CE00621304607F046 -:105E700090FF411C05D028665FF0010085F85C00AA -:105E800000E00724204670BD0020F7E7007810F0FE -:105E90000F0204D0012A05D0022A0CD110E000091B -:105EA00009D10AE00009012807D0022805D00328FB -:105EB00003D0042801D007207047087000207047E5 -:105EC0000620704705282AD2DFE800F003070F17E5 -:105ED0001F00087820F0FF001EE0087820F00F0077 -:105EE000401C20F0F000103016E0087820F00F0081 -:105EF000401C20F0F00020300EE0087820F00F0069 -:105F0000401C20F0F000303006E0087820F00F0050 -:105F1000401C20F0F000403008700020704707203F -:105F200070472DE9F041804688B00D4600270846AD -:105F30000DF069FEA8B94046FDF7D3F8040003D080 -:105F40002078222815D104E043F2020008B0BDE811 -:105F5000F08145B9A07F010603D500F003000228B7 -:105F600001D01020F2E7A07FC10601D4010702D5BD -:105F70000DB10820EAE7E17FC90601D50D20E5E76C -:105F800000F00300022805D125B12846FEF70AFFDC -:105F90000700DBD1A07F00F00300012806D000211C -:105FA00040460AF095FA060002D00DE00121F7E71D -:105FB000A07F00F0030001280CD000210022404601 -:105FC0000AF07DFA060007D0A07F00F00300022847 -:105FD00004D009E00121F1E70420B7E725B12A4602 -:105FE00031462046FEF702FF07AB1A4669463046A7 -:105FF000FFF70AF8009800B9FFDF00990C204870FD -:1060000006F59A70C1F82480486100200881A07FBD -:1060100000F00300012828D0EDB302200871301DE4 -:1060200088613078400908777078C0F3400048777D -:10603000287800F00102887F62F301008877E27F10 -:1060400062F382008877E27F520862F3C3008877A8 -:10605000727862F304108877A878C87701F121027A -:1060600028462031FEF7E2FE22E001200871287860 -:1060700000F00102087E62F3010008762A785208D7 -:1060800062F3820008762A78920862F3C3000876E9 -:106090002A78D20800E007E062F304100876242191 -:1060A0002046FDF750F80BE0032008710520087624 -:1060B00025212046FDF747F8A07F20F08000A0773B -:1060C00001A900980BF056FD022801D000B1FFDFB6 -:1060D00038463BE72DE9FF4F524A0D4699B09A46A4 -:1060E00007CA14AB002783E807001998FCF7F9FFEB -:1060F000060006D03078262806D008201DB0BDE85E -:10610000F08F43F20200F9E7B07F00F00309B9F124 -:10611000010F03D0B9F1020F07D008E03DB91B9879 -:10612000FEF740FE0028E9D101E01B9880BBB07F5C -:1061300000F00300012806D0002119980AF0C8F9E0 -:10614000040003D101E00121F7E7FFDF852D28D00E -:1061500007DCF5B1812D1ED0822D1ED0832D08D1F4 -:106160001DE0862D1FD0882D1FD0892D1FD08A2D90 -:106170001FD00F2020710F281DD003F08DF8E0B143 -:1061800001208DF83400201D0E902079B8B160E117 -:1061900011E00020EEE70120ECE70220EAE703200F -:1061A000E8E70520E6E70620E4E70820E2E7092023 -:1061B000E0E70A20DEE70720A0E711209EE7B9F11B -:1061C000010F17D0D4E91E50804602200190012013 -:1061D0000090A87898F80210C0F3C000C1F3C00185 -:1061E00008405FEA000B63D050460DF0BFFC00286A -:1061F00072D133E0D4E91E85012001900220009085 -:10620000214630461B9AFEF7F1FD1B98007800F0FE -:106210000101A87861F30100A870F17F04E000009B -:106220002C020020B43D020061F38200A870F17FCF -:10623000490861F3C300A870617861F30410A87085 -:106240002078400928706078C0F3400068701B987F -:106250008078E870002068712871BAE7DAF80C00DD -:106260000DF084FCC0BBDAF81C000DF07FFC98BB7D -:10627000DAF80C00A060DAF81C00E06098F8010081 -:10628000617800F0010041EA4000607098F8021067 -:10629000C0B2C1F30011891E08406070002084F86C -:1062A0002000009906F1170002290BD001210AE015 -:1062B00098F80110607801F00101FD2242EA4101E5 -:1062C0000840E2E7002104EB810188610199701C1C -:1062D000022902D0012101E028E0002104EB810124 -:1062E0008861A87800F00300012849D198F80200DD -:1062F00000F00300012843D1B9F1010F04D12A1D98 -:10630000691D1B98FEF792FD287998F80410084043 -:106310008DF82C00697998F8052011408DF830101F -:1063200008432DD050460DF021FC08B11020E5E6C1 -:106330000AF1100004F5DE7104F190020490B9F145 -:10634000020F3CD00090CDE9012100210BAB5A4651 -:106350002046FEF7C8FD0028E9D104F5E07104F1FC -:10636000A802B9F1010F30D004980090CDE90121C5 -:1063700000210CAB5A462046FEF7B5FD0028D6D1C9 -:106380006078800740D4A87898F80210C0F38000A5 -:10639000C1F38001084337D0297898F8000014AA87 -:1063A000B9F1010F17D032F810204B00DA4012F08B -:1063B000030718D0012F1ED0022F12D11DE0CDF8F7 -:1063C00000A0CDE901210121C0E7CDF800A0CDE971 -:1063D00001210121CDE732F811204300DA4002F01B -:1063E0000307032F07D0BBF1000F0DD0012906D002 -:1063F000042904D008E00227F5E70127F3E7012884 -:1064000001D0042800D10427F07F40F001006BF395 -:106410004100F077607881074FF003000CD5A07140 -:10642000BBF1000F15D100BF8DF85C0017AA3146F3 -:10643000199800F0BBFA0CE00221022F18D0012FAE -:1064400018D0042F22D00020A071F07F20F001008E -:10645000F07725213046FCF776FE0DA904F59A70F9 -:106460000BF06DFB10B1022800D0FFDF002045E6E5 -:10647000A171D9E7A1710D2104F124001DF0DBFA0F -:10648000207840F0020020700420CDE70120A071A8 -:10649000DFE72DE9F04387B09046894604460025A2 -:1064A000FCF71FFE060006D03078272806D008200B -:1064B00007B0BDE8F08343F20200F9E7B07F00F0D7 -:1064C0000300012806D0002120460AF001F804004C -:1064D00003D101E00121F7E7FFDFA7795FEA0900B7 -:1064E00005D0012821D0B9F1020F26D110E0B8F172 -:1064F000000F22D1012F05D0022F05D0032F05D088 -:10650000FFDF2DE00C252BE0012529E0022527E007 -:1065100040460DF02BFBB0B9032F0ED1102241469F -:1065200004F121001DF0E6F91AE0012F02D0022F3C -:1065300003D104E0B8F1000F12D00720B8E74046BD -:106540000DF014FB08B11020B2E7102104F1210076 -:106550001DF04FFA0621404607F01BFCC4F821004D -:106560002078252140F0020020703046FCF7EBFD3A -:106570002078C10714D020F00100207002208DF88F -:10658000000004F1210002908DF80450694604F5E2 -:106590009A700BF0D4FA022804D018B1FFDF01E0A2 -:1065A00084F82050002083E730B587B00D460446BC -:1065B000FCF797FD88B1807F00F0030001280FD021 -:1065C0000021204609F084FF04000ED028460DF07B -:1065D000CDFA38B1102007B030BD43F20200FAE71F -:1065E0000121EEE72078400701D40820F3E729468F -:1065F00004F14100202205461DF07CF9207840F08E -:106600001000207001070FD520F008002070132023 -:106610008DF80000694604F59A7001950BF08FFA29 -:10662000022801D000B1FFDF0020D4E770B50D468D -:106630000646FCF756FD18B1017827291FD102E064 -:1066400043F2020070BD807F00F00300012806D0F5 -:106650000021304609F03CFF040003D101E0012194 -:10666000F7E7FFDFA079022809D16078C00706D0DC -:106670002A4621463046FEF7FAFC10B10FE008200A -:1066800070BDB4F864000E280BD204F16601022339 -:106690001022081F09F0A1FD0121017045700020A2 -:1066A00070BD112070BD70B5064686B014460D460B -:1066B00008460DF05BFA18B920460DF07DFA10B1CE -:1066C000102006B070BDA6F57F40FF380ED03046D2 -:1066D000FCF707FD38B1417822464B08811C18466B -:1066E000FCF79AFE07E043F20200EAE72046FDF7D6 -:1066F000AFFC0028E5D11021E01D0CF00EFFE21DDB -:1067000029466846FEF79BFC102204F11700019908 -:106710001DF0F0F80020D4E72DE9F041044686B0E2 -:1067200015468846002708460DF06DFA18B9284628 -:106730000DF069FA10B1102006B008E42046FCF70D -:10674000D0FC060003D03078272818D102E043F2AD -:106750000200F1E7B07F00F00300012806D000211D -:10676000204609F0B5FE040003D101E00121F7E75E -:10677000FFDF2078400702D56078800701D4082029 -:10678000DAE7B07F00F00300012818D0D4E91E0139 -:10679000407800B1B5B1487810B1B8F1000F11D010 -:1067A000C5B1EA1D6846E168FEF749FC102205F113 -:1067B000170001991DF072F830B104270AE0D4E9FE -:1067C0001E10E5E70720B7E71022E91D04F13100AC -:1067D0001DF090F8B8F1000F06D0102208F1070163 -:1067E00004F121001DF086F82078252140F00200F8 -:1067F00020703046FCF7A7FC2078C10716D020F0A7 -:106800000100207002208DF8000004F121000290A8 -:10681000103003908DF80470694604F59A700BF0FF -:106820008EF9022804D018B1FFDF01E084F820704F -:10683000002081E7F8B515460E460746FCF751FCE7 -:10684000040004D02078222804D00820F8BD43F2A8 -:106850000200F8BDA07F00F00300022802D043F23E -:106860000500F8BD30460DF081F918B928460DF045 -:106870007DF908B11020F8BD00953288B31C21467F -:106880003846FEF718FC112814D00028F3D1297CD3 -:106890004A08E17F62F30001E1772A7C62F341015B -:1068A000E177297C890884F82010A17F21F08001FC -:1068B000A177F8BDA17F0907FBD4D6F80200C4F880 -:1068C0003600D6F80600C4F83A003088A0861022B8 -:1068D000294604F124001DF00DF8287C4108E07FD2 -:1068E00061F38200E077297C61F3C300E077287CC4 -:1068F000800884F82100A07F40F00800A0770020E5 -:10690000D3E770B50D4606460BB1072070BDFCF706 -:10691000E8FB040007D02078222802D3A07F40069D -:1069200004D4082070BD43F2020070BDA5B1294611 -:10693000304608F044FE02F0E5FA297C4A08E17F7F -:1069400062F30001E1772A7C62F34101E177297C5F -:10695000890884F8201004E0304608F058FE02F060 -:10696000D1FAA17F21F04001A17770BD70B50D462D -:10697000FCF7B7FB040005D028460DF01DF920B147 -:10698000102070BD43F2020070BD29462046FEF77C -:106990000CFB002070BD04E010F8012B0AB10020B0 -:1069A0007047491E89B2F7D20120704770B515466D -:1069B000064602F071FC040000D1FFDF207820F0D1 -:1069C0000F00801C20F0F0002030207066802868C6 -:1069D000A060BDE8704002F062BC000018B1817890 -:1069E000012938D101E010207047018842F60112D8 -:1069F000881A914231D018DC42F60102A1EB020064 -:106A000091422AD00CDC41B3B1F5C05F25D06FF4C0 -:106A1000C050081821D0A0F57060FF381BD11CE0D1 -:106A200001281AD002280AD117E0B0F5807F14D0CF -:106A300008DC012811D002280FD003280DD0FF2830 -:106A400009D10AE0B0F5817F07D0A0F58070033846 -:106A500003D0012801D0002070470F2070470B2879 -:106A600026D008DC1BD2DFE800F01C2025251A25E3 -:106A7000292325271E0011281CD008DC0C2817D03C -:106A80000D281DD00F2815D0102808D110E082281D -:106A900009D0842810D0852810D0872812D0032050 -:106AA0007047002070470520704743F2030070478D -:106AB000072070470F20704704207047062070475A -:106AC0000C20704743F20200704738B50C460500B1 -:106AD00041D06946FFF7DAF9002819D19DF8001076 -:106AE000607861F3020060706946681CFFF7CEF9B8 -:106AF00000280DD19DF80010607861F3C50060702A -:106B0000A978C1F34101012903D0022905D007204A -:106B100038BD217821F0200102E0217841F02001E8 -:106B20002170410704D0A978C90861F3861060700C -:106B3000607810F0380F07D0A978090961F3C71001 -:106B4000607010F0380F02D16078400603D52078CD -:106B500040F040002070002038BD70B50446002091 -:106B6000088015466068FFF7B0FF002816D120891D -:106B7000A189884211D860688078C0070AD0B1F531 -:106B8000007F0AD840F20120B1FBF0F200FB1210A6 -:106B9000288007E0B1F5FF7F01D90C2070BD01F21C -:106BA00001212980002070BD10B50478137864F3AA -:106BB000000313700478640864F3410313700478CD -:106BC000A40864F3820313700478E40864F3C30335 -:106BD00013700478240964F30413137004786409AF -:106BE00064F3451313700078800960F38613137003 -:106BF00031B10878C10701D1800701D5012000E03B -:106C0000002060F3C713137010BD4278530702D001 -:106C100002F0070306E012F0380F02D0C2F3C203FD -:106C200000E001234A7863F302024A70407810F0D2 -:106C3000380F02D0C0F3C20005E0430702D000F0D5 -:106C4000070000E0012060F3C5024A7070472DE99B -:106C5000F04F95B00D00804615D0B8F1000F16D05A -:106C6000122128461CF0C5FE4FF6FF7B05AA012124 -:106C7000584606F0CEFE0024264637464FF42059EB -:106C80006FF4205A75E0102015B0BDE8F08F072092 -:106C9000FAE700BF9DF81E0001280AD1BDF81C00CC -:106CA00048450BD010EB0A000AD001280CD002286E -:106CB0000CD0042C0ED0052C0FD10DE0012400E0E7 -:106CC0000224BDF81A6008E0032406E00424BDF89D -:106CD0001A7002E0052400E00624BDF81A104145B0 -:106CE00047D12C74BEB34FF0000810AA4FF0070A2A -:106CF000CDE90282CDE900A80DF13C091023CDF8C1 -:106D0000109042463146584606F036FF08BBBDF8A3 -:106D10003C002A46C0B210A90AF0CEFFC8B9AE8125 -:106D2000CFB1CDE900A80DF1080C0AAE40468CE8C1 -:106D30004102132300223946584606F01DFF40B990 -:106D4000BDF83C00F11CC01EC0B22A1D0AF0B4FF01 -:106D500010B1032098E70AE0BDF82900E881062C6D -:106D600005D19DF81E00A872BDF81C0028810020E6 -:106D70008AE705A806F059FE00288BD0FFF76FFEC2 -:106D800082E72DE9F0471C46DDE90978DDF820901F -:106D900015460E00824600D1FFDF0CB1208818B1E5 -:106DA000D5B11120BDE8F087022D01D0012100E00E -:106DB000002106F1140005F01DFDA8F800000246B0 -:106DC0003B462946504603F0ACF8C9F8000008B924 -:106DD000A41C3C600020E5E71320E3E7F0B4144670 -:106DE000DDE904528DB1002314B1022C09D101E078 -:106DF000012306E00D7CEE0703D025F001050123F9 -:106E00000D742146F0BC03F014BF1A80F0BC70472B -:106E10002DE9FE4F91461A881C468A468046FAB1F3 -:106E200002AB494603F07DF8050019D04046A61C88 -:106E3000278809F091FC3246072629463B460096F2 -:106E400009F09DF820882346CDE900504A46514676 -:106E50004046FFF7C3FF002020800120BDE8FE8FE1 -:106E60000020FBE72DE9F04786B09146DDE90E46AC -:106E70000F46824603AA05A904A8109D8DE80700C5 -:106E80009846324621465046FFF77BFF049909B1E8 -:106E9000012200E000222A70002817D1F84A03AB33 -:106EA0001060059A009104F11400CDE901204A46D2 -:106EB0003946504606F055F890B108280ED2DFE862 -:106EC00000F00407040D0D090B0B002006B069E764 -:106ED0001120FBE70720F9E70820F7E70320F5E793 -:106EE000BDF80C100498CDE9000143463246214616 -:106EF0005046FFF773FFE8E72DE9F04389B00D46F0 -:106F0000DDE9108781461C461646142103A81CF0B3 -:106F100092FD012002218DF810108DF80C008DF8E3 -:106F20001170ADF8146064B1A278D20709D08DF861 -:106F30001600E088ADF81A00A088ADF81800A06827 -:106F4000079008A80095CDE90110424603A94846DC -:106F50006B68FFF787FF09B0BDE8F083F0B58BB031 -:106F600000240646069407940727089405A8099468 -:106F7000019400970294CDE903400D461023224668 -:106F8000304606F0F9FD78B90AA806A901940097E1 -:106F90000294CDE90310BDF8143000222946304692 -:106FA00006F0C0FB002801D0FFF759FD0BB0F0BD83 -:106FB00006F060BA2DE9FC410C468046002602F03E -:106FC0006BF9054620780D287ED2DFE800F0BC077B -:106FD00013B325BD49496383AF959B00A84800685A -:106FE00020B1417841F010014170ADE0404602F01F -:106FF00083F9A9E00421404609F06AFA070000D1AC -:10700000FFDF07F11401404605F088FBA5BB132103 -:107010004046FDF78FFB97E00421404609F058FAFF -:10702000070000D1FFDFE088ADF800000020B88144 -:107030009DF80000010704D5C00602D5A088B881DC -:1070400005E09DF8010040067ED5A088F88105B9CD -:10705000FFDF22462946404601F068FC022673E025 -:10706000E188ADF800109DF8011009060FD507283A -:1070700003D006280AD00AE024E00421404609F0A3 -:1070800027FA060000D1FFDFA088F0810226CDB9E3 -:10709000FFDF17E00421404609F01AFA070000D18B -:1070A000FFDF07F1140006F01CFA90F0010F02D187 -:1070B000E079000648D5387C022640F0020038749A -:1070C00005B9FFDF224600E03DE02946404601F0D9 -:1070D0002DFC39E00421404609F0FAF9017C002D2D -:1070E00001F00206C1F340016171017C21F002014F -:1070F0000174E7D1FFDFE5E702260121404602F0F7 -:107100002DF921E00421404609F0E2F905466068C6 -:1071100000902089ADF8040001226946404602F043 -:107120003EF9287C20F0020028740DE0002DC9D122 -:10713000FFDFC7E7022600214046FBF742F9002D9A -:10714000C0D1FFDFBEE7FFDF3046BDE8FC813EB5C2 -:107150000C0009D001466B4601AA002006F08EFD06 -:1071600020B1FFF77CFC3EBD10203EBD00202080FA -:10717000A0709DF8050002A900F00700FEF7A2FE2E -:1071800050B99DF8080020709DF8050002A9C0F3D1 -:10719000C200FEF797FE08B103203EBD9DF808002F -:1071A00060709DF80500C109A07861F30410A0701B -:1071B0009DF80510890961F3C300A0709DF80410C3 -:1071C000890601D5022100E0012161F342009DF80A -:1071D000001061F30000A07000203EBD70B51446A1 -:1071E00006460D4651EA040005D075B108460CF07C -:1071F00001FD78B901E0072070BD2946304606F050 -:107200009EFD10B1BDE8704029E454B120460CF059 -:10721000F1FC08B1102070BD21463046BDE8704039 -:1072200095E7002070BD2DE9FC5F0C4690460546B1 -:10723000002701780822007A3E46B2EB111F7DD16B -:1072400004F10A0100910A31821E4FF0020A04F192 -:10725000080B0191092A72D2DFE802F0EDE005F592 -:1072600028287BAACE006888042109F031F906009D -:1072700000D1FFDFB08928B152270726C3E0000004 -:107280002803002051271026002C7DD06888A0807C -:107290000120A071A88900220099FFF79FFF002814 -:1072A00073D1A8892081288AE081D1E0B5F81290B5 -:1072B000072824D1E87B000621D5512709F11400C5 -:1072C00086B2002CE1D0A88900220099FFF786FF42 -:1072D00000285AD16888A08084F806A0A889208157 -:1072E0000120A073288A2082A4F81290A88A009016 -:1072F00068884B46A969019A01F0F5FAA8E0502781 -:1073000009F1120086B2002C3ED0A889002259460D -:10731000FFF764FF002838D16888A080A889E08042 -:10732000287A072813D002202073288AE081E87B7E -:10733000C0096073A4F81090A88A01E085E082E09B -:10734000009068884B4604F11202A969D4E7012035 -:10735000EAE7B5F81290512709F1140086B2002C23 -:1073600066D06888042109F0B3F883466888A08055 -:10737000A88900220099FFF731FF00286ED184F818 -:1073800006A0A889208101E052E067E00420A073F4 -:10739000288A2082A4F81290A88A009068884B4618 -:1073A000A969019A01F09FFAA989ABF80E104FE084 -:1073B0006888FBF796FE07466888042109F088F87C -:1073C000064607B9FFDF06B9FFDF687BC00702D0BA -:1073D0005127142601E0502712264CB36888A0805C -:1073E000502F06D084F806A0287B594601F08BFA6E -:1073F0002EE0287BA11DF9E7FE49A8894989814231 -:1074000005D1542706269CB16888A08020E0532728 -:107410000BE06888A080A889E08019E068880421D2 -:1074200009F056F800B9FFDF55270826002CF0D1E7 -:10743000A8F8006011E056270726002CF8D06888CD -:10744000A080002013E0FFDF02E0012808D0FFDF6A -:10745000A8F800600CB1278066800020BDE8FC9F82 -:1074600057270726002CE3D06888A080687AA0718F -:10747000EEE7401D20F0030009B14143091D01EB77 -:107480004000704713B5DB4A00201071009848B1E6 -:107490000024684608F037FE002C02D1D64A009935 -:1074A00011601CBD01240020F4E770B50D460646AE -:1074B00086B014465C2128461CF0BDFA04B9FFDFF3 -:1074C000A0786874A2782188284601F046FA002046 -:1074D000A881E881228805F11401304605F003F9FE -:1074E0006A460121304606F094FA19E09DF803003F -:1074F000000715D5BDF806103046FFF72FFD9DF8A3 -:107500000300BDF8061040F010008DF80300BDF830 -:107510000300ADF81400FF233046059A06F0DAFBAD -:10752000684606F082FA0028E0D006B070BD10B5BB -:107530000C4601F1140005F00DF90146627C20466D -:10754000BDE8104001F03EBA70B50546042108F0D0 -:10755000BFFF040000D1FFDF04F114010C462846F0 -:1075600005F0DCF821462846BDE8704005F0DDB89E -:1075700070B58AB00C460646FBF7B3FD050014D083 -:107580002878222827D30CB1A08890B101208DF84B -:107590000C0003208DF8100000208DF8110054B16C -:1075A000A088ADF81800206807E043F202000AB096 -:1075B00070BD0920FBE7ADF81800059004213046A6 -:1075C00008F086FF040000D1FFDF04F1140005F08D -:1075D000D8F8000701D40820E9E701F05DFE60B1AA -:1075E00008A802210094CDE9011095F8232003A9F1 -:1075F00030466368FFF736FCD9E71120D7E72DE95D -:10760000F04FB2F802A0834689B01546894650462D -:10761000FBF767FD07460421504608F059FF002696 -:10762000044605964FF002080696ADF81C6007B9AF -:10763000FFDF04B9FFDF4146504603F062FE60B948 -:1076400007AA06A905A88DE807004246214650462C -:107650006368FFF796FB00B1FFDF664807AB066083 -:10766000DDE9051204F11400CDF80090CDE9032006 -:10767000CDE9013197F82320594650466B6805F053 -:10768000C9F806000AD0022E04D0032E14D0042E0E -:1076900000D0FFDF09B03046BDE8F08FBDF81C0018 -:1076A0000028F7D00599CDE9001042462146504602 -:1076B0006368FFF793FBEDE7687840F008006870B7 -:1076C000E8E72DE9F04F9BB004464FF00008494829 -:1076D000ADF85480ADF83080ADF85080A0F8088047 -:1076E000ADF81480ADF81880ADF82080ADF81C809E -:1076F000007916460D464746012808D0022806D0D4 -:10770000032804D0042802D008201BB0C4E7204678 -:107710000CF02CFAD0BB28460CF028FAB0BB6068FD -:107720000CF071FA90BB606848B160892189884289 -:1077300002D8B1F5007F01D90C20E6E780460BAAFC -:1077400006A92846FFF709FA0028DED16868807884 -:10775000C0F34100022808D19DF8190010F0380F3D -:1077600003D028690CF046FA80B905A92069FFF713 -:10777000ACF90028C9D1206950B1607880079DF824 -:10778000150000F0380002D5C0B301E011E0A8BB3D -:107790009DF8140080060ED59DF8150010F0380FE6 -:1077A00003D060680CF026FA18B960680CF02BFA68 -:1077B00008B11020A9E707A96069FFF786F900283A -:1077C000A3D1606940B19DF81D0000F007010129B7 -:1077D0003FD110F0380F3CD008A9A069FFF775F928 -:1077E000002892D19DF81C00800632D49DF820001C -:1077F000800604E0280300201400002029E028D49B -:10780000A06940B19DF8210000F00701012920D1B5 -:1078100010F0380F1DD0E06818B10078C8B11C28EE -:1078200017D20EAA611C2046FFF7BEF90120B94607 -:1078300060F30F27BA4607468DF84E0042F6030064 -:10784000ADF84C000DF13B0217A928680AF053FA75 -:1078500008B1072059E79DF85C0016A9CDF8009003 -:10786000C01CCDE9019100F0FF0B00230BF20122B7 -:10787000514613A806F010F8F0BBBDF85800099067 -:10788000FE482A8929690092CDE901106B89BDF86B -:107890002C202868069905F0FFFF01007ED1207892 -:1078A0004FF0020AC10601D480062BD5ADF80C902A -:1078B000606950B907A906A8FFF7A7F99DF81D0050 -:1078C00020F00700401C8DF81D009DF81C008DF86D -:1078D0004E7040F0C8008DF81C0042F60210ADF862 -:1078E0004C000CA903AACDF800A0CDE9012100238A -:1078F00040F2032213A800E01EE0079905F0CCFF38 -:1079000001004BD1DD484D4608385B460089ADF893 -:1079100039000EA8CDE90290CDF80490CDF8109072 -:107920004FF007090022CDF80090BDF858104FF62F -:10793000FF7005F0F7FE10B1FFF791F8E5E69DF84E -:107940003800000625D52946012060F30F218DF867 -:107950004E704FF42450ADF84C00ADF810506278E2 -:107960009DF81000002362F300008DF8100062788B -:10797000CDF800A0520862F341008DF8100004AA6F -:10798000CDE9012540F2032213A805F085FF01008F -:1079900004D1606888B32069A8B900E086E005A931 -:1079A00006A8FFF732F96078800706D49DF8150025 -:1079B00020F038008DF8150005E09DF8140040F027 -:1079C00040008DF814008DF84E7042F60110ADF8AD -:1079D0004C00208940F20121B0FBF1F201FB1202C0 -:1079E000606814ABCDF80080CDE90103002313A833 -:1079F000059905F051FF010058D12078C00729D022 -:107A0000ADF80C50A06950B908A906A8FFF7FDF819 -:107A10009DF8210020F00700401C8DF821009DF802 -:107A200020008DF84E7040F040008DF8200042F6A6 -:107A30000310ADF84C0015A903AACDF800A0CDE9BC -:107A40000121002340F2032213A8089905F024FF26 -:107A500001002BD1E06868B32946012060F30F21B3 -:107A60008DF84E7042F60410ADF84C00E06800232B -:107A700002788DF8602040788DF86100E06818AADF -:107A80004088ADF86200E06800798DF86400E06835 -:107A9000C088ADF86500CDF80090CDE901254FF420 -:107AA000027213A805F0F8FE010003D0099800F057 -:107AB000B5FF2AE6714803210838017156B10089E3 -:107AC0003080BDF850007080BDF83000B080BDF847 -:107AD0005400F080002018E670B501258AB01646E3 -:107AE0000B46012802D0022816D104E08DF80E5072 -:107AF0004FF4205003E08DF80E5042F60100ADF82F -:107B00000C005BB10024601C60F30F2404AA08A9D8 -:107B100018460AF0F0F818B1072048E5102046E5AD -:107B200004A99DF820205548CDE90021801E02902F -:107B30000023214603A802F2012205F0ADFE10B198 -:107B4000FEF78DFF33E54D4808380EB1C18831800E -:107B5000057100202BE5F0B593B0074601268DF89E -:107B60003E6041F60100ADF83C0012AA0FA9304674 -:107B7000FFF7B2FF002848D1404C0025083CE7B38E -:107B80001C2102A81BF057FF9DF808008DF83E60ED -:107B900040F020008DF8080042F60520ADF83C00CA -:107BA0000E959DF83A00119520F00600801C8DF886 -:107BB0003A009DF838006A4620F0FF008DF8380042 -:107BC0009DF8390009A920F0FF008DF83900042044 -:107BD000ADF82C00ADF830000EA80A9011A80D9059 -:107BE0000FA80990ADF82E5002A8FFF76AFD0028F3 -:107BF0000BD1BDF80000608100E008E0BDF8040092 -:107C0000A081401CE0812571002013B0F0BD65818A -:107C1000A581BDF84800F4E72DE9F74F1749A0B05A -:107C20000024083917940A79A146012A04D0022AAF -:107C300002D0082023B02FE5CA88824201D0062056 -:107C4000F8E721988A46824201D10720F2E7012015 -:107C50002146ADF848004FF6FF7860F30F21ADF8EC -:107C60004A808DF86E0042F6020B06918DF8724044 -:107C7000ADF86CB0ADF870401CA901E030030020F5 -:107C80001391ADF8508012A805F0F3FE00252E46A2 -:107C90002F460DAB072212A9404605F0EDFE78B144 -:107CA00082285DD195B38EB3ADF86450ADF86660AF -:107CB0009DF85E008DF8144019AC012864D06BE08B -:107CC0009DF83A001FB3012859D1BDF83810594525 -:107CD0001FD118A809A901940294CDE90310072027 -:107CE0000090BDF8361010230022404605F044FFF6 -:107CF000B0BBBDF86000042801D006284AD1BDF809 -:107D00002410219881423AD10F2093E73AE00128CC -:107D100035D1BDF83800B0F5205F03D042F601013F -:107D200088422CD1BAF80600BDF83610884201D13D -:107D3000012700E0002705B19EB1219881421ED1A4 -:107D400018A809AA01940294CDE903200720009005 -:107D50000D4610230022404605F00EFF00B902E058 -:107D60002DE04E460BE0BDF86000022801D010283F -:107D700010D1C0B217AA09A909F09EFF50B9BDF8E9 -:107D8000369086E7052055E705A917A8221D09F0BA -:107D9000B2FF08B103204DE79DF814000023001D39 -:107DA000C2B28DF8142022980092CDE901401BA8A0 -:107DB000069905F071FD10B902228AF80420FEF739 -:107DC0004EFE37E710B50B46401E88B084B205AAB8 -:107DD00000211846FEF7E8FE00200DF1080C06AA67 -:107DE00005A901908CE807000720009001230022DC -:107DF00021464FF6FF7005F095FC0446BDF81800CB -:107E0000012800D0FFDF2046FEF729FE08B010BD94 -:107E1000F0B5F94F044687B038790E46032804D0F0 -:107E2000042802D0082007B0F0BD04AA03A9204608 -:107E3000FEF793FE0500F6D160688078C0F341003C -:107E400002280AD19DF80D0010F0380F05D02069E6 -:107E50000BF0D0FE08B11020E5E7208905AA2169C2 -:107E60008DE807006389BDF810202068039905F0AC -:107E700013FD10B1FEF7F3FDD5E716B1BDF8140000 -:107E80003080042038712846CDE7F8B50C0006464E -:107E90000BD001464FF6FF7500236A46284605F0D1 -:107EA000EDFE20B1FEF7DBFDF8BD1020F8BD694600 -:107EB0002046FEF70AFE0028F8D1A078314600F0EF -:107EC00001032846009A05F005FFEBE730B587B0BF -:107ED000144600220DF1080C05AD01928CE82C002F -:107EE000072200920A46014623884FF6FF7005F0EC -:107EF00019FCBDF814102180FEF7B1FD07B030BDAC -:107F000070B50D46042108F0E3FA040000D1FFDF4C -:107F1000294604F11400BDE8704004F02BBC70B594 -:107F20000D46042108F0D4FA040000D1FFDF2946F1 -:107F300004F11400BDE8704004F03FBC70B50D467C -:107F4000042108F0C5FA040000D1FFDF294604F13E -:107F50001400BDE8704004F057BC70B5054604211C -:107F600008F0B6FA040000D1FFDF21462846236856 -:107F7000BDE870400122FEF74BBF70B506460421F4 -:107F800008F0A6FA040000D1FFDF04F1140004F0A9 -:107F9000E1FB401D20F0030511E0011D00880022D7 -:107FA000431821463046FEF733FF00280BD0607C93 -:107FB000ABB2684382B2A068011D08F044F9A06822 -:107FC00041880029E9D170BD70B50546042108F04B -:107FD0007FFA040000D1FFDF214628466368BDE830 -:107FE00070400222FEF714BF70B50E46054601F040 -:107FF00053F9040000D1FFDF012020726672658012 -:10800000207820F00F00001D20F0F000403020709C -:10801000BDE8704001F043B910B50446012900D015 -:10802000FFDF2046BDE810400121FAF7CAB92DE96B -:10803000F04F97B04FF0000A0C008346ADF818A03F -:10804000D04619D0E06830B1A068A8B10188ADF879 -:108050001810A0F800A05846FBF743F8070043F2B9 -:10806000020967D03878222862D30421584608F0E4 -:108070002FFA050005D103E0102017B0BDE8F08FFE -:10808000FFDF05F1140004F065FB401D20F003063E -:10809000A078012803D0022801D00720EDE720882E -:1080A00078B1401C81B209AA584605F0B2FC09A873 -:1080B00005F0BBFC9DF82E204FF45051012A0DD144 -:1080C00002E043F20300D8E7BDF82C20A2F52453C8 -:1080D000023B03D1822801D0A0B901E00846CCE7D9 -:1080E000E068B0B1CDE902A0072006AACDF804A04F -:1080F00000900492A2882188BDF81830584605F0F7 -:1081000011FB10B1FEF7ABFCB7E7A168BDF8180092 -:1081100008809DF82700C00602D543F20140ACE775 -:108120000D9838B1A1780078012905D080071AD4BC -:108130000820A2E74846A0E7C007F9D002208DF842 -:108140003C00A8684FF00009A0B1697C42887143E7 -:1081500091420FD98AB2B3B2011D08F02AF88046C5 -:10816000A0F800A006E003208DF83C00D5F80080C0 -:108170004FF001099DF8280010F0380F00D1FFDF03 -:108180009DF828001D49C0F3C200084497F8231049 -:1081900010F8010C884201D90F206EE72088ADF855 -:1081A000400014A90095CDE90191434607220FA98B -:1081B0005846FEF757FE002885D19DF8500050B96B -:1081C000A078012807D1687CB3B2704382B2A86856 -:1081D000011D08F002F800204FE770B5064615466D -:1081E0000C460846FEF7FAFB002809D12A4621462C -:1081F0003046BDE870406FE428030020BE3D020019 -:1082000070BD09E570B51E4614460D0009D044B195 -:10821000616831B138B1F849C988814203D007207B -:1082200070BD102070BD2068FEF7D8FB0028F9D182 -:10823000324621462846BDE87040FFF742BA70B585 -:1082400015460C0006D038B1EB490989814203D0AC -:10825000072070BD102070BD2068FEF7BFFB00280E -:10826000F9D129462046BDE87040D1E570B50646F3 -:1082700086B00D46144610460BF09EFCD0BB6068DD -:108280000BF0C1FCB0BBA6F57F40FF3803D03046F1 -:10829000FAF727FF80B128466946FEF7D8FC002888 -:1082A0000CD19DF810100F2008293CD2DFE801F016 -:1082B00008060606060A0A0843F2020006B070BD68 -:1082C0000320FBE79DF80210012908D1BDF800103A -:1082D000B1F5C05FF2D06FF4C052D142EED09DF83C -:1082E000061001290DD1BDF80410A1F52851062969 -:1082F00007D200E028E0DFE801F0030304030303F2 -:10830000DCE79DF80A1001290ED1BDF80810B1F57F -:10831000245FD3D0A1F524510239CFD00129CDD08B -:10832000022901D1CAE7FFDF606878B9002305AAF6 -:108330002946304605F0A2FC10B1FEF790FBBDE7E0 -:108340009DF81400800601D41020B7E7618822460A -:1083500028466368FFF7BAFDB0E72DE9F043814690 -:1083600087B08846144610460BF026FC18B1102042 -:1083700007B0BDE8F083002306AA4146484605F051 -:108380007DFC10B1FEF76BFBF2E79DF81800C0060C -:1083900002D543F20140EBE70025072705A8019528 -:1083A00000970295CDE9035062884FF6FF7341466E -:1083B000484605F0E1FB060013D160680BF0FCFBBA -:1083C00060B960680195CDE9025000970495238853 -:1083D00062884146484605F0CFFB0646BDF81400CA -:1083E00020803046CEE739B1834B0A889B899A4278 -:1083F00002D843F20300704719E610B586B07E4CF0 -:108400000423ADF81430638943B1A4898C4201D2AE -:10841000914205D943F2030006B010BD0620FBE7E8 -:10842000ADF81010002100910191ADF8003002214B -:108430008DF8021005A9029104A90391ADF812204C -:108440006946FFF7F4FDE7E72DE9FC4781460E4654 -:1084500008460BF08BFB88BB4846FAF742FE5FEA02 -:1084600000080AD098F80000222829D304214846A1 -:1084700008F02EF8070005D103E043F20200BDE842 -:10848000FC87FFDF07F1140004F07BF90546307824 -:10849000012803D0022804D00720F0E7A8070FD551 -:1084A00002E015F01C0F0BD0B079341DC00709D0C5 -:1084B000E08838B1A0680BF059FB18B11020DEE756 -:1084C0000820DCE732782088002628B3A0F20113C8 -:1084D0000721112B18D20CD2DFE803F00B090D0B8A -:1084E0001D0B121D100B0B1D1D1D1D0B1D00022A47 -:1084F00011D10846C3E7012AFBD00CE02A0700E0AF -:10850000EA06002AF5DA06E0A0F5C0721F2A02D9B1 -:108510007D3A022AEDD8C6B200F0BEFE50B198F8FE -:108520002300CDE90006FA89234639464846FEF77E -:10853000E3FCA4E71120A2E72DE9F04F8BB01F4622 -:1085400015460C4683460026FAF7CBFD28B1007885 -:10855000222805D208200BB090E543F20200FAE78A -:10856000B80801D00720F6E7032F00D100274FF607 -:10857000FF79CCB1022D72D320460BF044FB30B909 -:1085800004EB0508A8F101000BF03DFB08B1102039 -:10859000E1E7AD1EAAB22146484605F024FC38F8B2 -:1085A000021C88425BD1ADB21349B80702D5888955 -:1085B000401C00E001201FFA80F8F80701D08F89E5 -:1085C00000E04F4605AA4146584605F022FA4FF012 -:1085D000070A4FF00009D4B3204608E0408810286D -:1085E0003DD8361D304486B2AE4238D2A01902883A -:1085F0004245F3D353E00000280300209DF8170004 -:1086000002074CD594B304EB0608361DB8F80230C7 -:10861000B6B2102B23D89A19AA4220D8B8F8002055 -:1086200091421CD1C0061CD5CDE900A90DF1080C62 -:108630000AAAA11948468CE80700B8F800100022E1 -:10864000584605F06FF820B1FEF709FA83E726E0F7 -:1086500005E0B8F80200BDF82810884201D00B20D0 -:1086600079E7B8F80200304486B207E0FFE7C006B9 -:1086700004D55846FEF772FC002889D19DF81700F2 -:10868000BDF81A1020F010008DF81700BDF8170083 -:10869000ADF80000FF235846009A05F01BFB05A823 -:1086A00005F0C3F918B9BDF81A10B942A6D90421CA -:1086B000584607F00DFF040000D1FFDFA2895AB130 -:1086C000CDE900A94D46002321465846FEF714FC8B -:1086D0000028BBD1A5813EE700203CE72DE9FF4FF4 -:1086E0008BB01E4617000D464FF0000412D0B008A4 -:1086F00002D007200FB0C1E4032E00D100265DB1E7 -:1087000008460BF077FA28B93888691E08440BF040 -:1087100071FA08B11020EDE7C64AB00701D5D1893A -:1087200000E00121F0074FF6FF7802D0D089401E0B -:1087300000E0404686B206AA0B9805F06AF94FF0B1 -:1087400000094FF0070B0DF1140A38E09DF81B00EB -:10875000000734D5CDF80490CDF800B0CDF80890DE -:10876000CDE9039A434600220B9805F005FA60BB59 -:1087700005B3BDF814103A8821442819091D8A420E -:1087800030D3BDF81E2020F8022BBDF8142020F8AD -:10879000022BCDE900B9CDE90290CDF810A0BDF8CB -:1087A0001E10BDF8143000220B9805F0E5F908B151 -:1087B00003209FE7BDF814002044001D84B206A8E2 -:1087C00005F033F920B1822806D0FEF748F991E789 -:1087D000BDF81E10B142B9D934B17DB13888A11CA1 -:1087E000884203D20C2085E7052083E722462946EC -:1087F000404605F0F8FA014628190180A41C3C8087 -:10880000002077E710B504460BF0D6F908B1102028 -:1088100010BD8848C0892080002010BDF0B58BB005 -:108820000D460646142103A81BF005F901208DF81A -:108830000C008DF8100000208DF81100ADF81450D8 -:108840003046FAF74EFC48B10078222812D30421B2 -:10885000304607F03DFE040005D103E043F202007C -:108860000BB0F0BDFFDF04F11400074603F089FFF1 -:10887000800601D40820F3E7207C022140F00100AB -:10888000207409A80094CDE90110072203A93046FD -:108890006368FEF7E7FA20B1217C21F00101217421 -:1088A000DEE729463046F9F77DFD08A9384603F092 -:1088B00057FF00B1FFDFBDF82040172C01D2172071 -:1088C00000E02046A84201D92C4602E0172C00D235 -:1088D000172421463046FFF722FB21463046F9F7A0 -:1088E00083FA0020BCE7F8B51C4615460E46069FE5 -:1088F00007F020FF2346FF1DBCB231462A460094F4 -:1089000007F009FBF8BD70B50C4605460E21204660 -:108910001BF06FF8002020802DB1012D01D0FFDF6A -:1089200070BD062000E00520A07170BD10B5488024 -:108930000878134620F00F00001D20F0F000803072 -:108940000C4608701422194604F108001BF017F8B1 -:1089500000F0A5FC3748046010BD2DE9F047DFF8B2 -:10896000D890491D064621F0030117460C46D9F858 -:10897000000007F0E6FB050000D1FFDF4FF0000824 -:108980003560A5F800802146D9F8000007F0D9FB32 -:10899000050000D1FFDF7560A5F800807FB104FB02 -:1089A00007F1091D0BD0D9F8000007F0CAFB04003D -:1089B00000D1FFDFB460C4F80080BDE8F087C6F8DE -:1089C0000880FAE72DE9F0411746491D21F003021E -:1089D000194D064601681446286807F0DDFB22465B -:1089E0007168286807F0D8FB3FB104FB07F2121D3D -:1089F00003D0B168286807F0CFFB042007F010FD12 -:108A00000446042007F014FD201A012804D1286828 -:108A1000BDE8F04107F08ABBBDE8F08110B50C4617 -:108A200004F0C3FF00B1FFDF2046BDE81040FEF7B1 -:108A300016B80000280300201400002038B50C46AA -:108A4000817B828819B14189914200D90A462280EE -:108A5000C188121D90B26A4606F0CCFEBDF8000037 -:108A6000032800D30320C1B2208800F075FF38BD71 -:108A700038B50C46817B828819B10189914200D9B1 -:108A80000A462280C188121D90B26A4606F0B2FEE4 -:108A9000BDF80000022800D30220C1B2208800F0F7 -:108AA0005BFF401CC0B238BD2DE9FF5F0C46FF499B -:108AB00081463C22D1E90201CDE9020109F103001E -:108AC00020F00301C91C21F0030100916846114602 -:108AD00007F019FBF64E002C02D1F649009A8A6085 -:108AE000009901440091357E05F1010504D1E8B2F9 -:108AF00009F088F800B1FFDF00984FF0000B00EBA1 -:108B00000510C01C20F0030100915CB9707A327A24 -:108B100081F800B01044C2B2B08B80B204F0CDFD39 -:108B200000B1FFDF0098F1690844009021466846D3 -:108B300000F0DCFE0098C01C20F003000090737A67 -:108B4000327AB17A04B1002007F0D3FB00990844CF -:108B500000902146684600F00AFF00273D46B246D5 -:108B600096F801800CE0284600F0A3FE06468178C6 -:108B70008088F9F7D0F971786D1C00FB0177EDB2B0 -:108B80004545F0D10098C01C20F00300009004B1CE -:108B900000203946F9F7CAF90099002708440090E7 -:108BA0003D469AF801800CE0284600F082FE064619 -:108BB000C1788088FEF75DFC71786D1C00FB017741 -:108BC000EDB24545F0D10098C01C20F003000090A4 -:108BD00004B100203946FEF755FC00994FF000081B -:108BE0000844009045469AF801700EE0284600F0CF -:108BF00060FE0646807B30B106F1080001F0C9FE38 -:108C0000727800FB02886D1CEDB2BD42EED1009877 -:108C1000C01C20F00300009004B10020414601F088 -:108C2000BCFE00990844C01D20F007000090ECBB7A -:108C3000A24AA1491160111D401E086005F09EF86E -:108C40009C484178C06805F073F99A481030C078A4 -:108C50008DF8040010B1012804D005E001208DF842 -:108C6000040001E08DF804B001A805F0CBFBFBF790 -:108C700093F98F4802AA00210C30F8F76BFB00B182 -:108C8000FFDF9AF81900FEF766FF00B1FFDF8848A2 -:108C90004FF4F67144301AF0CEFE8548042144307A -:108CA00080F8E91180F8EA11062100E003E080F87D -:108CB000EB1103210171009904B0A1EB0900BDE89B -:108CC000F09F70B57A4C06464434207804EB40158A -:108CD000E078083590B9A01990F8E80100280ED086 -:108CE000A0780F2800D3FFDF202128461AF0A3FE2A -:108CF000687866F3020068700120E070284670BD55 -:108D00002DE9F04105460C460027007805219046E4 -:108D10003E46B1EB101F00D0FFDF287A50B101288A -:108D20000ED0FFDFA8F800600CB12780668000201D -:108D3000BDE8F0810127092674B16888A08008E0A9 -:108D40000227142644B16888A0802869E060A88AB8 -:108D50002082287B2072E5E7A8F80060E7E710B5DD -:108D6000544C6068C11D21F00701814200D0FFDF33 -:108D70004F480121002201704270017203234372A7 -:108D800081720273052282821F22C28241734CA229 -:108D900002610A22027641764FF4B061C1616168D6 -:108DA000416010BD30B5434C1568636810339D4277 -:108DB00002D20420136030BD3D4B5D785A6802EB4F -:108DC0000512107051700320D08017209080012070 -:108DD000D0709070002090735878401C5870606874 -:108DE00010306060002030BD70B506463048002469 -:108DF000457807E0204600F05CFD0178B14204D0E0 -:108E0000641CE4B2AC42F5D1002070BDF7B5064653 -:108E100008780C4608B3FFF7E7FF0546202E08D078 -:108E2000232E17D0212E31D0222E2FD0242E2BD11D -:108E300014E000F049FD0DB1697800E00021401A0E -:108E400081B2A0780144FF291ED830B1A088022841 -:108E50001CD219E06088172818D215E0227AAAB12E -:108E60006188172910D3A08817280DD3A3795BB187 -:108E7000E3794BB1402A07D84FF6FB72914201D8F3 -:108E8000904203D90420FEBD0720FEBD65B92078BD -:108E900002AA0121FFF786FF0028F6D12078FFF70C -:108EA000A3FF050000D1FFDF203E0DE0C43D02001E -:108EB000440400201C0000200000002000060240A6 -:108EC0006E52463578000000052E18D2DFE806F015 -:108ED000030B0E081100A0786870A088E8800FE0EE -:108EE0006088A8800CE0A078A87009E0A078E870FD -:108EF00006E054F8020FA8606068E86000E0FFDF59 -:108F00000020FEBD1E2829D00EDC0C2822D008DC53 -:108F1000092825D2DFE800F013241524241C1C188E -:108F20001A0012281CD119E0302817D018DDA0F142 -:108F30003A00032814D2DFE800F00F1309000020E4 -:108F4000704743F202007047042070470D207047BD -:108F50000F20704708207047112070470720704786 -:108F60000320704710B5007800F0010006F039FCCE -:108F7000BDE81040C6E70EB5017801F001018DF89B -:108F80000010417801F001018DF801100178C1F362 -:108F900040018DF802104178C1F340018DF80310B3 -:108FA000017889088DF80410417889088DF805103A -:108FB00081788DF80610C1788DF8071000798DF84A -:108FC0000800684605F045FAFFF79CFF0EBD2DE945 -:108FD000F84FDFF8F883FE4C00261FE0012000F078 -:108FE00009FD0120FFF76DFE05463C214746D8F8F4 -:108FF000080007F0A6F8686000B9FFDF686804F0B1 -:10900000EAFFA8B12846FAF70EFB284600F0F8FC64 -:1090100020B93C226968B86807F0BEF894F9E90104 -:109020000428DBDA022007F0FBF907460025A6E05A -:109030003C226968D8F8080007F0AEF8F2E7B8F803 -:1090400002104046491C89B2A8F80210B94201D367 -:10905000002141800221B8F8020007F039FA002807 -:1090600065D0B8F80200694606F02DFBFFF74AFF0D -:1090700000B1FFDF9DF8000078B1B8F8020007F0FA -:109080006BFB5FEA000900D1FFDF484606F0D7FD21 -:1090900018B1B8F8020002F023F9B8F8020007F09E -:1090A00049FB5FEA000900D1FFDF484606F0BFFD3B -:1090B000E8BB0321B8F8020007F00AFA5FEA000BE8 -:1090C00048D1FFDF46E000BFDBF8100010B10078A8 -:1090D000FF2849D0022000F08DFC0220FFF7F1FDAF -:1090E0008246484606F0AFFECAF8040000B9FFDF2A -:1090F000DAF8040006F077FF002100900170B8F85C -:1091000002105046AAF8021001F0F0FD484606F0A1 -:109110006CFF00B9FFDF504600F072FC18B99AF8F6 -:109120000100000704D50099CBF8101012E024E0EC -:10913000DBF8100038B10178491C11F0FF01017013 -:1091400008D1FFDF06E000221146484600F0AFFBE1 -:1091500000B9FFDF94F9EA01022805DBB8F8020044 -:1091600001F088FD0028AFD194F9E901042804DB5F -:10917000484606F09EFF00B101266D1CEDB2BD42CF -:1091800004D294F9EA010228BFF659AF002E7FF409 -:1091900023AFBDE8F84F032000F02CBC10B58B4C7A -:1091A000E06008682061AFF2D910F9F7A2FE6070A4 -:1091B00010BD8748002144380170844801708549FA -:1091C0004160704770B505464FF080500C46D0F8AE -:1091D000A410491C05D1D0F8A810C9430904090CF2 -:1091E0000BD050F8A01F01F00101297041682160E7 -:1091F0008068A080287830B970BD062120460AF02A -:109200008CF901202870607940F0C000607170BD59 -:1092100070B54FF080540D46D4F88010491C0BD126 -:10922000D4F88410491C07D1D4F88810491C03D104 -:10923000D4F88C10491C0CD0D4F880100160D4F8FC -:1092400084104160D4F888108160D4F88C10C1601B -:1092500002E010210AF061F9D4F89000401C0BD113 -:10926000D4F89400401C07D1D4F89800401C03D1D6 -:10927000D4F89C00401C09D054F8900F2860606816 -:109280006860A068A860E068E86070BD2846BDE836 -:10929000704010210AF041B94D48007911E570B5D0 -:1092A0004B4CE07830B3207804EB4010407A00F06B -:1092B0000700204490F9E801002800DCFFDF207857 -:1092C000002504EB4010407A00F00700011991F8E6 -:1092D000E801401E81F8E8012078401CC0B22070EF -:1092E0000F2800D12570A078401CA0700AF050F81B -:1092F000E57070BDFFDF70BD3EB50546032107F088 -:10930000E7F80446284607F015FA054604B9FFDFDA -:10931000206918B10078FF2800D1FFDF01AA694653 -:10932000284600F0C4FA60B9FFDF0AE0002202A973 -:10933000284600F0BCFA00B9FFDF9DF8080000B134 -:10934000FFDF9DF80000411E8DF80010EED220696D -:109350000199884201D1002020613EBD70B50546CB -:10936000A0F57F400C46FF3800D1FFDF012C01D073 -:10937000FFDF70BDFFF790FF040000D1FFDF207812 -:1093800020F00F00401D20F0F0005030207065806C -:109390000020207201202073BDE870407FE72DE996 -:1093A000F04116460D460746FFF776FF040000D150 -:1093B000FFDF207820F00F00401D20F0F00050303B -:1093C0002070678001202072286805E01C000020C2 -:1093D00088040020C81300202061A888A08226737A -:1093E000BDE8F0415BE77FB5FFF7FEFC040000D16C -:1093F000FFDF02A92046FFF721FB054603A920460F -:10940000FFF736FB8DF800508DF80100BDF808001D -:10941000001DADF80200BDF80C00001DADF8040001 -:10942000E088ADF80600684606F0C4F9002800D0D0 -:10943000FFDF7FBD2DE9F047DFF8FC9305460027ED -:1094400099F8000010B10820BDE8F08728460AF01E -:10945000B3FB08B11020F7E7F84C207808B9FFF704 -:109460007EFC607A217A0844C6B200F02DFAB04240 -:1094700007D2301AC1B22A460020FFF793FC07003A -:10948000E2D1D9F804004E46C01C20F00300C9F810 -:10949000040000F01DFB716800EB0108012140464B -:1094A000FFF702FB064629684044884202D8B6F519 -:1094B000803F15D328600020FFF796FC05000DD0F3 -:1094C00005F11300D9F8041020F003004E4688423D -:1094D00000D0FFDF6078401E607075600420B3E745 -:1094E00000214046FFF7E0FA0446A64200D0FFDF25 -:1094F00004EB0801C9F8041029604FF6FF71A9F8C0 -:109500000210012189F8001038469DE72DE9F0414D -:109510000446C94817460E46007808B1082007E4FB -:1095200008460AF023FB08B11020F8E7C34D28785D -:1095300008B9FFF714FC601E1E2807D8012C22D1A1 -:109540003078FE281FD828760020E8E7A4F1200014 -:109550001F2805D8E0B23A463146BDE8F04155E44F -:10956000A4F140001F2805D831462046BDE8F0414F -:1095700000F06EBAA4F1A0001F2804D80020A02C8F -:1095800003D0A12C06D00720C9E7317801F00101F2 -:109590006976C4E731680922F82901D38B0701D025 -:1095A0001046BCE76B7B03F00303012B04D1EB8A6D -:1095B000D7339CB28C42F3D8E961B0E72DE9F0478C -:1095C00081460E4608460AF0F7FA48B948460AF0BE -:1095D00011FB28B909F1030020F00301494501D02E -:1095E000102031E795484FF0000A4430817869B186 -:1095F0004178804600EB4114083437883246002118 -:10960000204600F00BFA050004D027E0A6F800A0E1 -:10961000052019E7B9F1000F24D03088B84201D9EC -:109620000C251FE0607800F00705284600F0E2F9FD -:1096300008EB0507324697F8E8014946401C87F8D1 -:10964000E801204607F5F47700F0E8F90546387898 -:10965000401E3870032000F0CDF92DB10C2D01D043 -:10966000A6F800A02846EFE66078734E00F00701E8 -:10967000012923D002290CD0032933D0FFDF98F829 -:1096800001104046491CC9B288F801100F2934D096 -:1096900035E0616821B1000702D46088FFF72CFE35 -:1096A00098F8EA014746012802D17078F9F740FCA2 -:1096B00097F9EA010428E2DBFFDFE0E7616819B10E -:1096C0003C22B06806F068FD98F8E9014746032897 -:1096D00002D17078F9F72CFC97F9E9010428CEDB68 -:1096E000FFDFCCE7C00602D56088FFF705FE98F9DA -:1096F000EB010628C3DBFFDFC1E780F801A081781A -:10970000491E8170617801F0070101EB080090F8B3 -:10971000E811491C80F8E811A4E770B50D4604462D -:109720000AF024FA18B928460AF046FA08B11020BF -:1097300070BD29462046BDE8704008F09ABA70B561 -:10974000044615460E4608460AF010FA18B928468F -:109750000AF032FA08B1102070BD022C03D0102C90 -:1097600001D0092070BD2A463146204608F0A4FAEF -:109770000028F7D0052070BD70B514460D4606468A -:109780000AF0F4F938B928460AF016FA18B9204652 -:109790000AF030FA08B1102070BD22462946304642 -:1097A00008F0A9FA0028F7D0072070BD3EB504469E -:1097B0000AF002FA08B110203EBD684604F0A9FD87 -:1097C000FFF7A0FB0028F7D19DF806002070BDF838 -:1097D00008006080BDF80A00A08000203EBD70B582 -:1097E00005460C4608460AF005FA20B93CB1206847 -:1097F0000AF0E2F908B1102070BDA08828B1214616 -:109800002846BDE87040FDF7B3BE092070BD70B5B5 -:1098100004460D4608460AF0A9F930B9601E1E2814 -:1098200019D828460AF0A2F908B1102070BD022C00 -:1098300006D9072070BD00001C0000204404002051 -:1098400004B9FFDFF74800EB840050F8041C2846F9 -:10985000BDE870400847A4F120001F28E9D8294638 -:109860002046BDE87040FAF70BBB70B504460D46C4 -:1098700008460AF0A1F930B9601E1E280DD8284606 -:109880000AF074F908B11020D4E7012C01D0022CA1 -:1098900001D10620CEE70720CCE7A4F120001F2845 -:1098A000F9D829462046BDE87040FAF748BB06F0D3 -:1098B0008DB930B5DC4D04466878A04200D8FFDF92 -:1098C000686800EB041030BD70B5D74800252C4601 -:1098D000467807E02046FFF7ECFF4078641C2844F8 -:1098E000C5B2E4B2B442F5D12846A3E72DE9F04170 -:1098F0000C46064600F024F907463068C01C20F0EC -:10990000030232601CBBC8483B46092120300AF0E4 -:1099100007F8002408E0092C11D2DFE804F005075D -:109920000509090B05050700C04804E0C04802E02E -:10993000C04800E0C0480AF013F8054600E0FFDF29 -:10994000A54200D0FFDF641CE4B2092CE3D33068E9 -:1099500000EB07103060E2E5021D5143452900D2BB -:1099600045210844C01CB0FBF2F0C0B270472DE99D -:10997000FC5F0646AC484FF000088B46474644461D -:1099800090F8019022E02046FFF793FF050000D1F8 -:10999000FFDF687869463844C7B22846FFF74EF8BB -:1099A000824601A92846FFF763F80346BDF8040084 -:1099B0005246001D81B2BDF80000001D80B206F0C5 -:1099C00005FE6A78641C00FB0288E4B24C45DAD1DB -:1099D0003068C01C20F003003060BBF1000F00D0E5 -:1099E00000204246394606F0FFFD316808443060E9 -:1099F000BDE8FC9F8C49443108710020C870704755 -:109A000089494431CA782AB10A7801EB42110831F8 -:109A1000814201D001207047002070472DE9F041BC -:109A200006460078154600F00F0400201080601EE6 -:109A30000F46052800D3FFDF7A482A46103000EB96 -:109A40008400394650F8043C3046BDE8F0411847E0 -:109A500070B50C46402804D0412823D0422806D1B6 -:109A60001BE0607821784518A178814201D9072050 -:109A7000E0E6FF2D08D808F0A9FA064609F042FCF6 -:109A8000301A801EA84201DA1220D3E666482188E7 -:109A90000181A17881720020CCE6BDE870400846C3 -:109AA00000F07FB8062508460AF060F8102618B9BD -:109AB00020680AF05BF808B13046BBE62068017800 -:109AC000FF2903D10AF096F80028F5D12846B1E61F -:109AD0002DE9F05F4FF000095348C8464F464E4607 -:109AE0004D46CB464C4690F801A011E02046FFF7CA -:109AF000E0FE4178827809F10109884412FB017780 -:109B0000C27812FB0166807B10FB0155641CE4B235 -:109B10005445EBD10BEB890000EBC80000EB87004C -:109B200000EB860000EBC5013F48027A01EBC20161 -:109B3000427A807A01EBC20101EBC000BDE8F09FE0 -:109B40002DE9F047DFF8E09000252C4699F8092030 -:109B500099F8081099F801700A44D6B299F80A20C9 -:109B6000114401F0FF0808E02046FFF7A2FE817BC8 -:109B7000407811FB0055641CE4B2BC42F4D199F862 -:109B80000800401C304430444044401C0EB10121C8 -:109B900000E0002108444419FF2C00D9FFDFE0B2A7 -:109BA00052E438B50446407800F00300012803D0A1 -:109BB00002280BD0072038BD606858B10AF023F89E -:109BC000D0B960680AF016F820B915E0606809F0AD -:109BD000CDFF88B969462046FCF758F90028EAD13C -:109BE000607800F00300022808D19DF8000028B139 -:109BF000606809F0FFFF08B1102038BD6189F829BD -:109C00000DD8208988420AD8607800F003020648FF -:109C1000012A13D1D731C26989B28A420ED20920F2 -:109C200038BD0000C43D020044040020113D000086 -:109C300065AA0000DD2F0000D319010094E80E0092 -:109C400000F10C0585E80E000AB900218182002090 -:109C5000E6E700002DE9F04107461446884608462D -:109C600001F020FD064608EB88001C22796802EB13 -:109C7000C0000D18688C58B14146384601F01AFDF5 -:109C8000014678680078C200082305F120000CE046 -:109C9000E88CA8B14146384601F013FD01467868CA -:109CA00008234078C20005F1240006F0CCFA38B150 -:109CB000062121726681D0E90010C4E9031009E091 -:109CC000287809280BD00520207266816868E0603A -:109CD000002028702046BDE8F04101F0D9BC0720E3 -:109CE00020726681F4E72DE9F04116460D460746DD -:109CF000406801EB85011C2202EBC101441820469B -:109D000001F001FD40B10021708865F30F2160F37F -:109D10001F41082009F0DEFE092020703246294646 -:109D20003846BDE8F04195E72DE9F0410E4607467B -:109D300000241C21F07816E004EB8403726801EB28 -:109D4000C303D25C6AB1FFF7A7FA050000D1FFDFB9 -:109D50006F802A4621463046FFF7C5FF0120BDE847 -:109D6000F081641CE4B2A042E6D80020F7E770B5A9 -:109D7000064600241C21C0780AE000BF04EB8403DF -:109D8000726801EBC303D5182A782AB1641CE4B2C7 -:109D9000A042F3D8402070BD2821284619F029FEA2 -:109DA000706880892881204670BD70B50346002008 -:109DB0001C25DC780DE000BF00EB80065A6805EB3F -:109DC000C6063244167816B1128A8A4204D0401C64 -:109DD000C0B28442F0D8402070BDF0B504460020E7 -:109DE0001C26E5780EE000BF00EB8007636806EBF9 -:109DF000C7073B441F788F4202D15B78934204D05F -:109E0000401CC0B28542EFD84020F0BD0078032846 -:109E100001D000207047012070470078022801D04F -:109E200000207047012070470078072801D00020EB -:109E30007047012070472DE9F041064688461078AA -:109E4000F1781546884200D3FFDF2C781C27641C6C -:109E5000F078E4B2A04201D8201AC4B204EB840125 -:109E6000706807EBC1010844017821B14146884779 -:109E700008B12C7073E72878A042E8D14020287000 -:109E80006DE770B514460B880122A240134207D13A -:109E900013430B8001230A22011D06F09EF9047072 -:109EA00070BD2DE9FF4F81B00878DDE90E7B9A4641 -:109EB00091460E4640072CD4019806F04DFC040054 -:109EC00000D1FFDF07F1040820461FFA88F105F0F2 -:109ED00088FD050000D1FFDF204629466A4605F0CF -:109EE000D4FF0098A0F80370A0F805A0284606F05B -:109EF0007AF8017869F306016BF3C7110170204607 -:109F00001FFA88F105F0B0FD00B9FFDF019803F0FA -:109F100083FF06EB0900017F491C017705B0BDE80E -:109F2000F08F2DE9F84F0E469A46914607460321D9 -:109F300006F0CEFA0446008DDFF8B485002518B18E -:109F400098F80000B0421ED1384606F005FC070024 -:109F500000D1FFDF09F10401384689B205F041FD67 -:109F6000050010D0384629466A4605F08EFF009855 -:109F700000210A460180817004F01AF80098C01D83 -:109F8000CAF8000021E098F80000B04216D104F1B0 -:109F9000260734F8341F012000FA06F911EA090FE8 -:109FA00000D0FFDF2088012340EA090020800A2238 -:109FB000391D384606F02CF9067006E0324604F1E9 -:109FC000340104F12600FFF75CFF0A2188F8001035 -:109FD0002846BDE8F88FFEB514460D46064602AB8E -:109FE0000C220621FFF79DFF002826D002996878F1 -:109FF00012220A70801C487008224A80A8702088AB -:10A0000088806088C880A0880881E0884881002412 -:10A010000C20CDE900040523062229463046FFF72F -:10A0200040FF214666F31F41F0230022012009F082 -:10A03000A7FC6878801C68700120FEBDFEB5144640 -:10A040000D460622064602AB1146FFF76AFF0028BE -:10A0500012D0029B132000211870A878587002209B -:10A0600058809C800620CDE9000102460523294640 -:10A070003046FFF716FF0120FEBD2DE9FE430C46DA -:10A08000804644E002AB0E2207214046FFF749FF1D -:10A09000002841D060681C2267788678BF1C06EBD8 -:10A0A000860102EBC1014518029814210170477026 -:10A0B0000A214180698A0181E98A4181A9888180D8 -:10A0C000A9898181304601F0EDFA02990523072222 -:10A0D000C8806F700420287000250E20CDE900058F -:10A0E00021464046FFF7DDFE294666F30F2168F35F -:10A0F0001F41F0230022082009F042FC6078FD494E -:10A10000801C607062682046921CFFF794FE6068B5 -:10A1100080784028B6D10120BDE8FE83FEB50D460B -:10A12000064638E002AB0E2207213046FFF7F9FE63 -:10A13000002835D068681C23C17801EB810203EB4D -:10A14000C2028418029815220270627842700A22B4 -:10A150004280A2894281A2888281084601F0A2FA47 -:10A16000014602988180618AC180E18A0181A088CC -:10A17000B8B10020207000210E20CDE90001052398 -:10A18000072229463046FFF78CFE6A68DA492846DE -:10A19000D21CFFF750FE6868C0784028C2D1012069 -:10A1A000FEBD0620E6E72DE9FE430C46814644E06D -:10A1B000204601F092FAD0B302AB082207214846AC -:10A1C000FFF7AFFE0028A7D060681C2265780679EB -:10A1D000AD1C06EB860102EBC10147180298B7F8E7 -:10A1E000108006210170457004214180304601F045 -:10A1F00059FA0146029805230722C180A0F804807D -:10A200007D70082038700025CDE9000521464846BC -:10A21000FFF747FE294666F30F2169F31F41F0233C -:10A220000022082009F0ACFB6078801C6070626836 -:10A23000B2492046121DFFF7FEFD606801794029F2 -:10A24000B6D1012068E72DE9F34F83B00E4680E0D8 -:10A25000304601F042FA002875D071681C2091F850 -:10A26000068008EB880200EBC2000C18414630461D -:10A2700001F027FA0146A078C30070684078C20058 -:10A2800004F1240005F0FBFF07468088E18B401AAB -:10A2900080B2002581B3AA46218B814200D80846AE -:10A2A0008146024602AB07210398FFF73AFE010000 -:10A2B00028D0BAF1000F03D0029AB8880225108086 -:10A2C0008B46E28B3968A9EB05001FFA80FA0A4435 -:10A2D0000398009206F040FAED1D009A5946534645 -:10A2E000009505F04CFEE08B504480B2E083B988C5 -:10A2F000884209D1012508E0FFE7801C4FF0010AE0 -:10A3000080B2C9E7002009E60025CDE90095238A3F -:10A31000072231460398FFF7C4FDE089401EE08123 -:10A320008DB1A078401CA0707068F178427811FB64 -:10A3300002F1CAB2816901230E3005F04EFF80F8A8 -:10A3400000800020E08372686D493046921DFFF75F -:10A3500072FD7068817940297FF47AAF0120DDE5D4 -:10A3600070B5064648680D4614468179402910D1DB -:10A3700004EB84011C2202EBC101084401F0E4F962 -:10A38000002806D06868294684713046BDE87040D0 -:10A3900059E770BDFEB50C460746002645E020464D -:10A3A00001F09BF9D8B360681C22417901EB81016F -:10A3B00002EBC1014518688900B9FFDF02AB082232 -:10A3C00007213846FFF7ADFD002833D002996078A9 -:10A3D00016220A70801C487004204880606840790A -:10A3E00001F060F9014602980523072281806989FE -:10A3F000C1800820CDE9000621463846FFF751FD0F -:10A400006078801C6070A88969890844B0F5803F35 -:10A4100000D3FFDFA88969890844A8816E8162683A -:10A4200038492046521DFFF706FD606841794029F2 -:10A43000B5D10120FEBD30B5438C458BC3F3C704B5 -:10A44000002345B1838B641EED1AC38A6D1E1D4423 -:10A4500095FBF3F3E4B22CB1008918B1A04200D807 -:10A46000204603444FF6FF70834200D30346138017 -:10A470000C7030BD2DE9FC41074616460D46486874 -:10A4800002EB86011C2202EBC10144186A4601A9B5 -:10A490002046FFF7D0FFA089618901448AB2BDF848 -:10A4A0000010914212D0081A00D50020608168681F -:10A4B000407940280AD1204601F03CF9002805D017 -:10A4C0006868294646713846FFF764FFBDE8FC819D -:10A4D0002DE9FE4F8946804615465088032105F038 -:10A4E000F7FF8346B8F8020040280DD240200CE068 -:10A4F000300000200D9E00001B9E0000299E0000E1 -:10A5000049B7000035B70000403880B282460146A6 -:10A51000584601F0E2F800287ED00AEB8A001C229F -:10A52000DBF8041002EBC0000C18204601F0EBF839 -:10A53000002877D1B8F80000E18A88423CD8A18988 -:10A54000D1B348456ED100265146584601F0B2F8C5 -:10A55000218C0F18608B48B9B9F1020F62D3B8F89B -:10A5600004006083618A884226D80226A9EB06008F -:10A570001FFA80F9B888A28B801A002814DD49469A -:10A58000814500DA084683B26888696802913968B3 -:10A590000A44CDE9003206F0CDF8DDE90121F61DCF -:10A5A000009B009605F0B7FCA18B01EB090080B27F -:10A5B000A083618B884207D9688803B05246594608 -:10A5C000BDE8F04F01F0DDB81FD14FF0090028724F -:10A5D000B8F802006881D7E90001C5E90401608B81 -:10A5E000A881284601F054F85146584601F062F817 -:10A5F0000146DBF8040008230078C20004F12000C3 -:10A6000005F021FE0020A0836083A0890AF0FF02EC -:10A61000401EA081688800E004E003B05946BDE810 -:10A62000F04F27E7BDE8FE8F2DE9F04106461546BD -:10A630000F461C46184609F099FA18B9206809F027 -:10A64000BBFA08B1102015E47168688C0978B0EB8A -:10A65000C10F01D313200DE43946304601F02AF82A -:10A660000146706808230078C20005F1200005F05B -:10A67000B4FDD4E90012C0E900120020E3E710B5F0 -:10A680000446032105F024FF0146007800F0030092 -:10A69000012804D08A8A2046BDE81040CEE4204636 -:10A6A000BDE8104001F1140295E470B504460321A1 -:10A6B00005F00EFF054601462046FFF774FD002811 -:10A6C00016D029462046FFF765FE002810D02946FF -:10A6D0002046FFF723FD00280AD029462046FFF731 -:10A6E000CCFC002804D029462046BDE87040AAE5ED -:10A6F00070BD2DE9F0410C4680461EE0E1784278BD -:10A7000011FB02F1CAB2816901230E3005F09BFDF5 -:10A71000077860681C22C179491EC17107EB870167 -:10A72000606802EBC10146183946204600F0D5FFAB -:10A7300018B1304600F0E0FF20B16068C17900290F -:10A74000DCD180E7FEF7A8FD050000D1FFDF0A207D -:10A750002872384600F0A6FF68813946204600F08E -:10A76000B0FF0146606808234078C20006F124006B -:10A7700005F069FDD0E90010C5E90310A5F80280D5 -:10A78000284600F085FFB07800B9FFDFB078401EA2 -:10A79000B07058E770B50C460546032105F098FEE9 -:10A7A00001464068C2792244C2712846BDE8704023 -:10A7B0009FE72DE9FE4F8246507814460F464FF032 -:10A7C000000800284FD0012807D0022822D0FFDF40 -:10A7D0002068B8606068F86024E702AB0E220821A8 -:10A7E0005046FFF79EFB0028F2D002981521052362 -:10A7F0000170217841700A214180C0F80480C0F8BE -:10A800000880A0F80C80628882810E20CDE90008C3 -:10A81000082221E0A678304600F044FF054606EB0A -:10A8200086012C22786802EBC1010822465A02AB4D -:10A8300011465046FFF775FB0028C9D00298072142 -:10A840000170217841700421418008218580C680F3 -:10A85000CDE9001805230A4639465046FFF721FB8B -:10A8600087F80880DEE6A678022516B1022E13D0FE -:10A87000FFDF2A1D914602AB08215046FFF751FB2E -:10A880000028A5D002980121022E01702178417084 -:10A890004580868002D005E00625EAE7A188C180D0 -:10A8A000E1880181CDE90098052308223946504608 -:10A8B000D4E710B50446032105F00AFE014600F175 -:10A8C00008022046BDE8104073E72DE9F05F0C4612 -:10A8D00001281DD0957992F80480567905EB850101 -:10A8E0001F2202EBC10121F0030B08EB060111FB53 -:10A8F00005F14FF6FF7202EAC10909F1030115FBE8 -:10A900000611F94F21F0031A40B101283DD124E08E -:10A910006168E57891F800804E78DFE759467868FD -:10A9200005F00FFC606000B9FFDF5946606819F060 -:10A9300082F8E5705146786805F003FC616848616B -:10A9400000B9FFDF6068426902EB0901816160685C -:10A9500080F800806068467017E060685246416980 -:10A96000786805F019FC5A466168786805F014FCAF -:10A97000032005F055FD0446032005F059FD201A7B -:10A98000012802D1786805F0D1FB0BEB0A00BDE885 -:10A99000F09F02460021022097E713B5009858B1B6 -:10A9A0000024684605F0AFFBCF490A22002C0A704C -:10A9B00001D1009A4A601CBD01240020F2E770B565 -:10A9C0000C4615463821204619F035F801266670E8 -:10A9D0000A2104F11C0019F02EF805B9FFDF297ACD -:10A9E000207861F301002070A879002817D02A464A -:10A9F00021460020FFF769FF616840208870616888 -:10AA0000C8706168087161684871616888716168BF -:10AA1000288808816168688848816068868170BD7F -:10AA2000C878002802D0002201204EE7704770B598 -:10AA30000546002165F31F41012009F04BF8032171 -:10AA4000284605F045FD040000D1FFDF21462846D9 -:10AA5000FFF76AF9002804D0207840F01000207039 -:10AA6000012070BD2DE9FF4180460E460F0CFEF718 -:10AA700013FC050007D06F800321384605F028FD40 -:10AA8000040008D106E004B03846BDE8F0411321C7 -:10AA9000F9F750BEFFDFB8F1010F05D0B8F1080F8C -:10AAA00018D0FFDFBDE8FF8120782A4620F008009B -:10AAB00020700020ADF8020002208DF800004FF653 -:10AAC000FF70ADF80400ADF8060069463846F9F7A6 -:10AAD00083F9E7E7C6F3072101EB81021C236068D5 -:10AAE00003EBC202805C042803D008280AD0FFDFF1 -:10AAF000D8E7012000904FF440432A46204600F05A -:10AB000009FECFE704B02A462046BDE8F041FFF732 -:10AB1000EAB82DE9F05F0027B0F80A9090460C469D -:10AB200005463E46B9F1400F01D2402001E0A9F1AF -:10AB300040001FFA80FA287AC01E08286BD2DFE88E -:10AB400000F00D04192058363C4772271026002CBF -:10AB50006CD0D5E90301C4E902015CE0702712263C -:10AB6000002C63D00A2205F10C0104F1080018F052 -:10AB700006FF50E071270C26002C57D0E868A06033 -:10AB800049E0742710269CB3D5E90301C4E902010A -:10AB90006888032105F09CFC8346FEF77DFB024696 -:10ABA0006888508051465846FFF754F833E07527BF -:10ABB0000A26ECB1A88920812DE076271426BCB1A5 -:10ABC00005F10C0004F1080307C883E8070022E040 -:10ABD0007727102664B1D5E90301C4E9020168882A -:10ABE000032105F075FC01466888FFF782FD12E03D -:10ABF0001CE073270826CCB16888032105F068FCA7 -:10AC000001460078C00606D56888FFF78DF810B9B0 -:10AC10006888F8F7ECFCA8F800602CB12780A4F84D -:10AC2000069066806888A0800020B0E6A8F80060E2 -:10AC3000FAE72DE9FC410C461E46174680460321E3 -:10AC400005F046FC05460A2C0AD2DFE804F00505AB -:10AC50000505050509090907042303E0062301E0AA -:10AC6000FFDF0023CDE90076224629464046FFF764 -:10AC700018F92BE438B50546A0F57F40FF3830D0F1 -:10AC8000284605F057FD040000D1FFDF204605F0FF -:10AC9000DAF8002815D001466A46204605F0F5F896 -:10ACA00000980321B0F80540284605F011FC054640 -:10ACB000052C03D0402C05D2402404E0007A80B15A -:10ACC000002038BD403CA4B2214600F006FD40B152 -:10ACD000686804EB84013E2202EBC101405A00285F -:10ACE000EFD0012038BD0000300000202DE9F04FEA -:10ACF000044689B0408805F01DFD050000D1FFDF46 -:10AD000006AA2846616800F0C1FC069D001F81B2BA -:10AD100035F8032F6B888A4205D1042B0AD0052B06 -:10AD20001DD0062B15D022462846FFF7D1FB09B0CF -:10AD3000BDE8F08F16462D1D224629463046F7F70E -:10AD40001BFB0828F3D1224629463046FCF757FC66 -:10AD5000EDE76088291D6368FAF714FDE7E71746F9 -:10AD60006088032105F0B4FB4FF000088DF80480E3 -:10AD70000646ADF80680042FD9D36A79002AD6D0CA -:10AD800028794FF6FF794FF01C0A13282CD008DCE5 -:10AD9000012878D0062847D0072875D0122874D10A -:10ADA00006E0142872D0152871D016286DD1ACE1B8 -:10ADB0000C2F6AD1307800F00301012965D040F0F2 -:10ADC000080030706879B07001208DF8040028897F -:10ADD000ADF808006889ADF80A00A889ADF80C0044 -:10ADE000E889ADF80E0019E0B07890429FD1307834 -:10ADF00001079CD5062F9AD120F00800307060889A -:10AE0000414660F31F41012008F064FE02208DF8E6 -:10AE10000400ADF808902889ADF80A006088224641 -:10AE200001A9F8F7D9FF82E7082F80D12F89B5F85B -:10AE30000A90402F01D2402001E0A7F1400080B2EB -:10AE400080460146304600F048FC08B3716808EBC4 -:10AE500088002C2202EBC000095A4945E3D1FE4884 -:10AE600007AAD0E90210CDE9071068798DF81C0017 -:10AE700008F0FF058DF81E5060883146FFF799FCF9 -:10AE80002246294639E0B6E014E03CE039E0E6E04D -:10AE9000F148D0E90010CDE907106879ADF82070CD -:10AEA0008DF81C00ADF82290608807AA3146FFF7A4 -:10AEB00080FC3CE7082FB6D16889B5F808804028A7 -:10AEC00001D2402000E0403887B23946304600F0D9 -:10AED00004FC0028A7D007EB870271680AEBC200C8 -:10AEE0000844028A42459ED1017808299BD14078C6 -:10AEF0006979884297D1F9B222463046FEF7F3FECF -:10AF000015E70E2F07D0CDF81C80CDF8208068798A -:10AF10008DF81C00C8E76989EF898B46B5F80C905D -:10AF20003046FEF742FFABF14001402901D3092032 -:10AF30004AE0B9F1170F01D3172F01D20B2043E0DC -:10AF400040280ED000EB800271680AEBC200084472 -:10AF50000178012903D1407869798842A9D00A2073 -:10AF600032E03046FEF703FF014640282BD001EBCC -:10AF7000810372680AEBC30002EB0008012288F823 -:10AF800000206A7988F8012070682A894089B842CF -:10AF900000D938462D8A03232372A282E7812082BA -:10AFA000A4F80C906582084600F07CFB6081A8F84C -:10AFB0001490A8F81870A8F80E50A8F810B0204601 -:10AFC00000F066FBB3E6042005212172A4F80A8094 -:10AFD000E08101212173A049D1E90421CDE90721B4 -:10AFE00069798DF81C10ADF81E00608807AA3146FB -:10AFF000FFF7DFFBE3E7062FE4D3B078904215D1EB -:10B000003078010712D520F0080030706088414682 -:10B0100060F31F41012008F05DFD02208DF804005F -:10B020002889ADF80800ADF80A90F7E6042130460B -:10B03000FEF7D3FE05464028C4D0022083030090CB -:10B0400022462946304600F065FB4146608865F39C -:10B050000F2160F31F41082008F03CFD67E60E2F2A -:10B06000B0D104213046FEF7B8FE81464028A9D071 -:10B070004146608869F30F2160F31F41082008F002 -:10B0800029FD288A0790E88900907068AF89408977 -:10B09000B84200D938468346B5F80A802889059019 -:10B0A000484600F0FFFA6081079840B10220079BF4 -:10B0B000009022464946304600F02CFB37E6B8F1B6 -:10B0C000170F1ED3172F1CD3042020720098608204 -:10B0D000E781A4F810B0A4F80C8009EB890271682C -:10B0E0000AEBC2000D1800990598A5F81480A5F880 -:10B0F00018B0E9812882204600F0CAFA062028709C -:10B1000015E601200B230090D3E7082FA6D129894B -:10B110003046FEF74AFE074640289FD007EB8702DD -:10B1200071680AEBC2000844804600F0ECFA00287F -:10B1300094D16D89B8F80E002844B0F5803F05D34E -:10B1400060883A46314600F01CFBF0E5002D85D0C2 -:10B15000A8F80E0060883A463146FFF701F908204A -:10B160002072384600F09EFA6081A58127E770B50D -:10B170000D460646032105F0ABF9040004D0207803 -:10B18000000704D5112070BD43F2020070BD2A46AD -:10B1900021463046FEF71FFF18B9286860616868CD -:10B1A000A061207840F008002070002070BD70B5CC -:10B1B0000D460646032105F08BF9040004D02078E3 -:10B1C000000704D4082070BD43F2020070BD2A4677 -:10B1D00021463046FEF732FF00B9A582207820F0E4 -:10B1E00008002070002070BD2DE9F04F0E4691B090 -:10B1F0008046032105F06CF90446404605F0ACFAA0 -:10B2000007460020079008900990ADF830000A909A -:10B2100002900390049004B9FFDF0DF1080917BBF9 -:10B22000FFDF20E038460BA9002204F0CFFC9DF898 -:10B230002C0000F07F050A2D00D3FFDF6019017F8D -:10B24000491E01779DF82C0000060CD52A460CA952 -:10B2500007A8FEF716FE01E0EC3D020019F8051004 -:10B26000491C09F80510761EF6B2DBD204F1340051 -:10B27000FC4D04F1260BDFF8F0A304F12A07069039 -:10B2800010E05846069900F06EFA064628700A2823 -:10B2900000D3FFDF5AF8261040468847E08CC05D97 -:10B2A000B04202D0208D0028EBD10A202870EE4D4C -:10B2B0004E4628350EE00CA907A800F054FA0446C3 -:10B2C000375D55F8240000B9FFDF55F824203946D2 -:10B2D00040469047BDF81E000028ECD111B027E58C -:10B2E00010B5032105F0F4F8040000D1FFDF0A21B6 -:10B2F00004F11C0018F09FFB207840F0040020703F -:10B3000010BD10B50C46032105F0E2F801190A7FC3 -:10B3100001211AB9808EA140084000D0012010BD43 -:10B320002DE9F84F894615468246032105F0D0F8ED -:10B33000070004D0284608F019FC40B903E043F2A6 -:10B340000200BDE8F88F484608F036FC08B110202E -:10B35000F7E7786828B169880089814201D9092016 -:10B36000EFE7B9F800001C2418B1402809D24020AA -:10B3700008E03846FEF7FBFC8046402819D1132030 -:10B38000DFE7403880B280460146384600F0A5F934 -:10B3900048B108EB8800796804EBC000085C01281C -:10B3A00003D00820CDE70520CBE7FDF775FF0600A9 -:10B3B0000BD008EB8800796804EBC0000C18B9F8D2 -:10B3C000000020B1E88910B113E01120B9E7288806 -:10B3D000172802D36888172801D20720B1E76868C8 -:10B3E00038B12B1D224641463846FFF71DF900288B -:10B3F000A7D104F10C0269462046FFF71CF8288803 -:10B4000060826888E082B9F8000030B102202070C4 -:10B41000E889A080E889A0B12BE003202070A889EA -:10B42000A08078688178402905D180F8028039466B -:10B430005046FEF722FE404600F034F9A9F800001D -:10B4400021E07868218B4089884200D90846208312 -:10B45000A6F802A004203072B9F800007081E089DB -:10B460007082F181208B3082A08AB081304600F05A -:10B470000FF97868C178402905D180F803803946F2 -:10B480005046FEF74BFE00205BE770B50D460646C2 -:10B49000032105F01DF8040003D0402D04D24025FF -:10B4A00003E043F2020070BD403DADB2294600F01A -:10B4B00014F958B105EB85011C22606802EBC1014B -:10B4C000084400F020F918B1082070BD052070BDB7 -:10B4D0002A462146304600F054F9002070BD2DE97F -:10B4E000F0410D4616468046032104F0F1FF044664 -:10B4F000402D01D2402500E0403DADB28CB129463F -:10B5000000F0EBF880B105EB85011C22606802EBCE -:10B51000C1014718384600F0F6F838B10820BDE8F8 -:10B52000F08143F20200FAE70520F8E733463A4695 -:10B5300029462046FFF778F80028F0D1EAB22146E4 -:10B540004046FEF797FF0020E9E72DE9F0410D4660 -:10B5500016468046032104F0BBFF0446402D01D26D -:10B56000402500E0403DAFB224B1304608F0FEFA7D -:10B5700038B902E043F20200D1E7306808F0F6FA89 -:10B5800008B11020CBE73946204600F0A6F860B19C -:10B5900007EB87011C22606802EBC10145182846B1 -:10B5A00000F0B1F818B10820B9E70520B7E7B08876 -:10B5B000A98A884201D90C20B1E76168E88C4978F2 -:10B5C000B0EBC10F01D31320A9E73946204600F0A4 -:10B5D00078F80146606808234078C20005F124002D -:10B5E00004F0FBFDD6E90012C0E90012FAB22146D0 -:10B5F0004046FEF7B5FE002091E72DE9F0470D46E5 -:10B600001F4690468146032104F062FF0446402D08 -:10B6100001D2402001E0A5F1400086B23CB14DB11D -:10B62000384608F0E7FA50B11020BDE8F08743F241 -:10B630000200FAE76068C8B1A0F80C8024E0314647 -:10B64000204600F04AF888B106EB86011C226068AB -:10B6500002EBC1014518284600F055F840B108201A -:10B66000E3E7000030000020043E02000520DCE794 -:10B67000A5F80880F2B221464846FEF7FBFE1FB14E -:10B68000A8896989084438800020CEE704F0FDBB12 -:10B69000017821F00F01491C21F0F00110310170F7 -:10B6A000FDF7FDBD10B50446402800D9FFDF40344A -:10B6B000A0B210BD406842690078484302EBC00068 -:10B6C0007047C2784068037812FB03F24378406900 -:10B6D00001FB032100EBC1007047C2788A4209D9FF -:10B6E000406801EB81011C2202EBC101405C08B102 -:10B6F00001207047002070470078062801D90120FA -:10B700007047002070470078062801D0012070475C -:10B7100000207047F0B401EB81061C27446807EB5A -:10B72000C6063444049D05262670E3802571F0BCCE -:10B73000FEF790BA10B5418911B1FFF7DDFF08B1EE -:10B74000002010BD012010BD10B5C18C8278B1EB76 -:10B75000C20F04D9C18911B1FFF7CEFF08B1002093 -:10B7600010BD012010BD10B50C4601230A22011D99 -:10B7700004F069FD007821880122824091432180F4 -:10B7800010BDF0B402EB82051C264C6806EBC50523 -:10B79000072363554B681C79402C03D11A71F0BC08 -:10B7A000FEF701BDF0BC704710B5EFF3108000F05C -:10B7B000010472B6F9484178491C4170407801286B -:10B7C00001D107F005FE002C00D162B610BD70B5A6 -:10B7D000F24CE07848B90125E570FFF7E5FF07F086 -:10B7E000FFFD20B1002007F0DAFD002070BD4FF012 -:10B7F00080406571C0F80453F7E770B5EFF310802F -:10B8000000F0010572B6E54C607800B9FFDF6078A2 -:10B81000401E6070607808B907F0DEFD002D00D191 -:10B8200062B670BDDD4810B5C17821B1002141710B -:10B83000C170FFF7E2FF002010BD10B5044607F00D -:10B84000CFFDD649C978084000D0012020600020F3 -:10B8500010BD2DE9F05FDFF844934278817889F8D4 -:10B860000620002689F80710074689F80860007846 -:10B87000354620B101280FD002280FD0FFDF07F096 -:10B88000BCFD98B107F0C0FDB0420FD1304607F0C3 -:10B89000BFFD0028FAD047E00126F0E7FFF784FF5C -:10B8A00007F09EFD0028FBD00226E8E70120840770 -:10B8B000E060C4F80451BA490E600107D1F844129F -:10B8C000B74AC1F3423124321160B54934310860BE -:10B8D0004FF0020BC4F804B3A060DFF8C8A2DAF896 -:10B8E0000010C94341F3001101F10108DAF800101A -:10B8F00041F01001CAF8001000E020BFD4F80401A4 -:10B900000028FAD0304607F083FD0028FAD0B8F1BD -:10B91000000F05D1DAF8001021F01001CAF800106C -:10B92000C4F808B3C4F8045199F807004C4670B144 -:10B93000387860B907F054FD074607F0B9FE6FF09C -:10B94000004117B1C4E9031001E0C4E9030116B1D5 -:10B950002571BDE8F09F0127BE0727714FF0190838 -:10B96000C6F80883B761C6F80051C6F80C51C6F88E -:10B97000105107F035FD10B1A770376100E0277056 -:10B98000FFF712FF8649A07920310860C6F80483CA -:10B99000DFE770B5050000D1FFDF4FF080424FF0C8 -:10B9A000FF30C2F808030021C2F80011C2F80411E8 -:10B9B000C2F80C11C2F81011784C617007F016FD36 -:10B9C00010B10120E07060702846BDE8704040E78B -:10B9D0002DE9FE4F74480068734A744908321160BB -:10B9E0008C070290D4F8080108B1012500E0002579 -:10B9F000D4F8240100B101208246D4F81C0100B122 -:10BA000001208346D4F8200100B101200190D4F830 -:10BA1000000110B14FF0010801E04FF00008D4F828 -:10BA2000040108B1012700E00027D4F80C0100B19F -:10BA300001208146D4F8100108B1012100E0002165 -:10BA4000009145EA080127EA0100009920EA09006F -:10BA5000884320EA0A0030EA0B0000D0FFDF00260E -:10BA600025B1C4F80861012007F099FCBAF1000F74 -:10BA700004D0C4F82461092007F091FCBBF1000F49 -:10BA800004D0C4F81C610A2007F089FC019820B199 -:10BA9000C4F820610B2007F082FC404D4FF0010AF2 -:10BAA000B8F1000F10D0C4F80061687918B16E7158 -:10BAB000002007F074FC287830B107F091FC18B131 -:10BAC00085F802A0C4F810A00FB1C4F80461B9F160 -:10BAD000000F0AD0C4F80C61A87800B9FFDFAE707F -:10BAE0002E70C4F814A0FFF788FE009828B1C4F89F -:10BAF0001061287908B100F021F82B490298091D3E -:10BB00000860BDE8FE8F70B5244DE87808B907F0ED -:10BB100063FC01208407A061A87850B1D4F80C011F -:10BB200020B9002007F074FC0028F7D10020C4F8E9 -:10BB30000C014FF0FF30C4F8080370BD2DE9F0414F -:10BB4000164C4FF080470125E079F0B1012803D071 -:10BB5000217A401E814218DA07F042FC064607F0BF -:10BB6000A7FDE179012902D9217A491C21720EB180 -:10BB7000216900E0E168411A022902DA11F1020F9D -:10BB800016DC0EB1206100E0E060FFF70DFE07F06B -:10BB900027FC80B13D61A5700EE000003C00002054 -:10BBA0001805004010ED00E0100502400100000102 -:10BBB0007D61BDE8F081257000202072F9E700006A -:10BBC0000F4A12680D498A420CD118470C4A126874 -:10BBD0000A4B9A4206D101B507F038FDF7F723F971 -:10BBE000BDE8014007490968095808470648074960 -:10BBF000054A064B7047000000000000BEBAFECAAE -:10BC0000B00000200400002048130020481300204A -:10BC1000F8B51D46DDE906470E000AD004F09CFD8C -:10BC20002346FF1DBCB231462A46009404F0A7F912 -:10BC3000F8BDD0192246194617F05CFE2046F8BD23 -:10BC400070B50D460446102117F0D3FE258117204C -:10BC50006081A07B40F00A00A07370BD4FF6FF72B8 -:10BC60000A800146032007F035BF704700897047FE -:10BC7000827BD30701D1920703D4808908800020FA -:10BC8000704705207047827B920700D581817047FD -:10BC900001460020098841F6FE52114200D00120E1 -:10BCA000704700B50346807BC00701D0052000BD6A -:10BCB00059811846FFF7ECFFC00703D0987B40F08E -:10BCC00004009873987B40F001009873002000BD39 -:10BCD000827B520700D509B1408970471720704711 -:10BCE000827B61F3C302827370472DE9FC5F0E46CD -:10BCF000044601789646012000FA01F14DF6FF5204 -:10BD000001EA020962684FF6FF7B1188594506D0A7 -:10BD1000B9F1000F06D041F6FE55294202D00120AC -:10BD2000BDE8FC9F41EA090111801D0014D04FF0CD -:10BD3000000C85F800C023780521032267464FF0E8 -:10BD4000020A0E2B74D2DFE803F0F809252F4762B0 -:10BD50006974479092B3D0D70420E1E761682089E5 -:10BD60008B7B9B077DD5172848D30B89834245D30E -:10BD70008989172901D3814240D185F800A0A5F80F -:10BD800001003280616888816068817B21F0020156 -:10BD90008173C5E0042028702089A5F8010060891E -:10BDA000A5F803003180BBE0208A3188C01D1FFA4E -:10BDB00080F8414522D3062028702089A5F801008B -:10BDC0006089A5F80300A089A5F805000721208A4D -:10BDD000CDE9000163693EE0082B10D008202870EF -:10BDE0002089A5F801006089A5F8030031806A1D4B -:10BDF000694604F10C0005F07EFF10B15FE01020F1 -:10BE0000EDE730889DF800100844308088E00A2073 -:10BE100028702089A5F80100328045E00C202870A8 -:10BE20002089A5F801006089A5F8030031803BE076 -:10BE300083E02189338800EB41021FFA82F84345F1 -:10BE40003DD3B8F1050F3AD30E222A700BEA410117 -:10BE5000CDE90010E36860882A467146FFF7D8FEF6 -:10BE600000E04DE0A6F800805AE04020287060898C -:10BE70003188C01C1FFA80F8414520D328787146CC -:10BE800020F03F00123028702089A5F80100608959 -:10BE9000CDE9000260882A46E368FFF7B9FEA6F8FC -:10BEA0000080287840063BD461682089888037E08C -:10BEB000A0893288401D1FFA80F8424501D204272C -:10BEC0003EE0162028702089A5F801006089A5F8B9 -:10BED0000300A089CDE9000160882A4671462369E4 -:10BEE000FFF796FEA6F80080DEE718202870207A7B -:10BEF0006870A6F800A013E061680A88920401D473 -:10BF000005271DE0C9882289914201D0062717E044 -:10BF10001E21297030806068018821F40051018061 -:10BF2000B9F1000F0CD0618878230022032007F0BC -:10BF300027FD61682078887007E0A6F800C0032715 -:10BF40006068018821EA090101803846E8E62DE9A8 -:10BF5000FF4F85B01746129C0D001E461CD030784E -:10BF6000C10703D000F03F00192801D9012100E0EA -:10BF700000212046FFF7ACFEA8420DD32088A0F593 -:10BF80007F41FF3908D03078410601D4000605D53D -:10BF9000082009B0BDE8F08F0720FAE700208DF8EF -:10BFA00000008DF8010030786B1E00F03F0C01217D -:10BFB000A81E4FF0050A4FF002094FF0030B9AB28A -:10BFC000BCF1200F75D2DFE80CF08B10745E746842 -:10BFD000748C749C74B674BB74C974D574E2747434 -:10BFE00074F274F074EF74EE748B052D78D18DF8C3 -:10BFF0000090A0788DF804007088ADF806003079C4 -:10C000008DF80100707800F03F000C2829D00ADC80 -:10C01000A0F10200092863D2DFE800F01262156285 -:10C020001A621D622000122824D004DC0E281BD0C6 -:10C030001028DBD11BE016281FD01828D6D11FE00E -:10C040002078800701E020784007002848DAEFE0F8 -:10C0500020780007F9E72078C006F6E72078800608 -:10C06000F3E720784006F0E720780006EDE7208827 -:10C07000C005EAE720884005E7E720880005E4E7F7 -:10C080002088C004E1E72078800729D5032D27D137 -:10C090008DF800B0B6F8010082E0217849071FD57D -:10C0A000062D1DD381B27078012803D0022817D144 -:10C0B00002E0CAE0022000E0102004228DF80020F7 -:10C0C00072788DF80420801CB1FBF0F2ADF80620E8 -:10C0D00092B242438A4203D10397ADF80890A7E099 -:10C0E0007AE02078000777D598B282088DF800A012 -:10C0F000ADF80420B0EB820F6ED10297ADF80610B8 -:10C1000096E02178C90667D5022D65D381B2062055 -:10C110008DF80000707802285ED300BFB1FBF0F20A -:10C120008DF80400ADF8062092B242438A4253D102 -:10C13000ADF808907BE0207880064DD5072003E01D -:10C14000207840067FD508208DF80000A088ADF843 -:10C150000400ADF80620ADF8081068E0207800066D -:10C1600071D50920ADF804208DF80000ADF8061057 -:10C1700002975DE02188C90565D5022D63D381B2A0 -:10C180000A208DF80000707804285CD3C6E7208868 -:10C19000400558D5012D56D10B208DF80000A08800 -:10C1A000ADF8040044E021E026E016E0FFE7208837 -:10C1B000000548D5052D46D30C208DF80000A08839 -:10C1C000ADF80400B6F803006D1FADF80850ADF8E7 -:10C1D0000600ADF80AA02AE035E02088C00432D578 -:10C1E000012D30D10D208DF8000021E02088800441 -:10C1F00029D4B6F80100E080A07B000723D5032DE9 -:10C2000021D3307800F03F001B2818D00F208DF884 -:10C210000000208840F40050A4F80000B6F80100A7 -:10C22000ADF80400ED1EADF80650ADF808B0039768 -:10C2300069460598F5F7E7FD050008D016E00E20E1 -:10C240008DF80000EAE7072510E008250EE03078B9 -:10C2500000F03F001B2809D01D2807D003200599B6 -:10C2600007F038FC208800F400502080A07B4007B5 -:10C2700008D52046FFF70CFDC00703D1A07B20F0B6 -:10C280000400A073284684E61FB5032806D10120C8 -:10C290008DF8000088B26946F5F7B5FD1FBD0000B6 -:10C2A000F8B51D46DDE906470E000AD004F054FA41 -:10C2B0002346FF1DBCB231462A46009403F05FFEC0 -:10C2C000F8BDD0192246194617F014FB2046F8BDD8 -:10C2D0002DE9FF4F8DB09B46DDE91B57DDF87CA0B3 -:10C2E0000C46082B05D0E06901F000F950B1102090 -:10C2F000D2E02888092140F0100028808AF8001038 -:10C30000022617E0E16901208871E2694FF42051AB -:10C310009180E1698872E06942F601010181E0697A -:10C32000002181732888112140F0200028808AF89C -:10C330000010042638780A900A2038704FF002095D -:10C3400004F118004D460C9001F093FBB04681E0DB -:10C35000BBF1100F0ED1022D0CD0A9EB0800801CF0 -:10C3600080B20221CDE9001005AB52461E990D980E -:10C37000FFF796FFBDF816101A98814203D9F748C7 -:10C3800000790F9004E003D10A9808B138702FE0CB -:10C390004FF00201CDE900190DF1160352461E9926 -:10C3A0000D98FFF77DFF1D980088401B801B83B20E -:10C3B000C6F1FF00984200D203461E990BA8D9B1DE -:10C3C0005FF00002DDF878C0CDE9032009EB06013B -:10C3D00089B2CDE901C10F980090BDF81610002276 -:10C3E0000D9801F0C9FB387070B1C0B2832807D036 -:10C3F000BDF8160020833AE00AEB09018A19E1E74B -:10C40000022011B0BDE8F08FBDF82C00811901F0B9 -:10C41000FF08022D0DD09AF80120424506D1BDF843 -:10C420002010814207D0B8F1FF0F04D09AF80180A4 -:10C430001FE08AF80180C94800680178052902D107 -:10C44000BDF81610818009EB08001FFA80F905EB92 -:10C45000080085B2DDE90C1005AB0F9A01F00CFB6A -:10C4600028B91D980088411B4145BFF671AF022DC8 -:10C4700013D0BBF1100F0CD1A9EB0800801C81B2C6 -:10C480000220CDE9000105AB52461E990D98FFF739 -:10C4900007FF1D980580002038700020B1E72DE9C6 -:10C4A000F8439C46089E13460027B26B9AB3491F77 -:10C4B0008CB2F18FA1F57F45FF3D05D05518AD88B1 -:10C4C0002944891D8DB200E000252919B6F83C8069 -:10C4D0000831414520D82A44BCF8011022F8021B3B -:10C4E000BCF8031022F8021B984622F8024B914632 -:10C4F00004F020F94FF00C0C41464A462346CDF893 -:10C5000000C003F008FDF587B16B00202944A41D8D -:10C510002144088003E001E0092700E08327384632 -:10C52000BDE8F88310B50B88848F9C420CD9846BCE -:10C53000E018048844B1848824F40044A41D2344F2 -:10C540000B801060002010BD822010BD2DE9F04747 -:10C550008AB00025904689468246ADF818500727D4 -:10C560004BE0059806888088000446D4A8F800604F -:10C5700007A8019500970295CDE903504FF4007389 -:10C5800000223146504601F0F7FA04003CD1BDF8D4 -:10C590001800ADF82000059804888188B44216D1AF -:10C5A0000A0414D401950295039521F400410097E3 -:10C5B000049541F4804342882146504601F0B2F888 -:10C5C00004000BD10598818841F40041818005AABF -:10C5D00008A94846FFF7A6FF0400DCD0009705989D -:10C5E00002950195039504950188BDF81C30002241 -:10C5F000504601F097F8822C06D105AA06A94846B4 -:10C60000FFF790FF0400ACD0ADF8185004E0059897 -:10C61000818821F40041818005AA06A94846FFF7D8 -:10C6200081FF0028F3D0822C03D020460AB0BDE859 -:10C63000F0870020FAE710B50C46896B86B051B13F -:10C640000C218DF80010A18FADF80810A16B01919D -:10C650006946FAF7AFFC00204FF6FF71A063E1874F -:10C66000A08706B010BD2DE9F0410D460746896B45 -:10C670000020069E1446002911D0012B0FD132460E -:10C6800029463846FFF762FF002808D1002C06D063 -:10C69000324629463846BDE8F04100F036BFBDE8D5 -:10C6A000F0812DE9FC411446DDE9087C0E46DDE908 -:10C6B0000A15521DBCF800E092B2964502D207203E -:10C6C000BDE8FC81ACF8002017222A70A5F80160B3 -:10C6D000A5F803300522CDE900423B462A46FFF784 -:10C6E000DFFD0020ECE770B50C46154648212046DA -:10C6F00017F0A1F904F1080044F81C0F00204FF6D0 -:10C70000FF71E06161842084A5841720E08494F89F -:10C710002A0040F00A0084F82A0070BD4FF6FF722C -:10C720000A800146042007F0D5B930B585B00C4623 -:10C730000546FFF780FFA18E284629B101218DF81B -:10C7400000106946FAF736FC0020E062206360635F -:10C7500005B030BDB0F84000704700005400002024 -:10C7600090F84620920703D4408808800020F3E721 -:10C770000620F1E790F846209207EDD5A0F8441086 -:10C78000EAE70146002009880A0700D5012011F0D8 -:10C79000F00F01D040F00200CA0501D540F00400BE -:10C7A0008A0501D540F008004A0501D540F0100087 -:10C7B0000905D1D540F02000CEE700B5034690F83A -:10C7C0004600C00701D0062000BDA3F8421018465D -:10C7D000FFF7D7FF10F03E0F05D093F8460040F06A -:10C7E000040083F8460013F8460F40F0010018706B -:10C7F000002000BD90F84620520700D511B1B0F8D6 -:10C800004200A9E71720A7E710F8462F61F3C302FB -:10C810000270A1E72DE9FF4F9BB00E00DDE92B343C -:10C82000DDE92978289D24D02878C10703D000F0BD -:10C830003F00192801D9012100E000212046FFF71F -:10C84000D9FFB04215D32878410600F03F010CD43F -:10C850001E290CD0218811F47F6F0AD13A8842B189 -:10C86000A1F57F42FF3A04D001E0122901D1000670 -:10C8700002D504201FB0C5E5F9491D984FF0000A04 -:10C8800008718DF818A08DF83CA00FAA0A60ADF8C9 -:10C890001CA0ADF850A02978994601F03F02701F06 -:10C8A0005B1C04F1180C4FF0060E4FF0040BCDF892 -:10C8B00058C01F2A7ED2DFE802F07D7D107D267DE4 -:10C8C000AC7DF47DF37DF27DF17DF47DF07D7D7DA9 -:10C8D000EF7DEE7D7D7D7D7DED0094F84610B5F811 -:10C8E0000100890701D5032E02D08DF818B022E38C -:10C8F0004FF40061ADF85010608003218DF83C10BA -:10C90000ADF84000D8E2052EEFD1B5F80100208344 -:10C91000ADF81C00B5F80310618308B1884201D955 -:10C9200001207FE10020A07220814FF6FF7020845B -:10C93000169801F09EF8052089F800000220029068 -:10C9400083460AAB1D9A16991B9801F095F890BB87 -:10C950009DF82E00012804D0022089F80100102043 -:10C9600003E0012089F8010002200590002203A9BC -:10C970000BA805F0C0F9E8BB9DF80C0005998142B1 -:10C980003DD13A88801CA2EB0B01814237DB029932 -:10C990000220CDE900010DF12A034A4641461B98C9 -:10C9A000FFF77EFC02980BF1020B801C80B217AAE5 -:10C9B00003A901E0A0E228E002900BA805F09BF992 -:10C9C00002999DF80C00CDE9000117AB4A4641469B -:10C9D0001B98FFF765FC9DF80C100AAB0BEB0100F0 -:10C9E0001FFA80FB02981D9A084480B202901699A3 -:10C9F0001B9800E003E001F03FF80028B6D0BBF13F -:10CA0000020F02D0A7F800B053E20A208DF81800F8 -:10CA10004FE200210391072EFFF467AFB5F8010044 -:10CA20002083ADF81C00B5F80320628300283FF492 -:10CA300077AF90423FF674AF0120A072B5F80500C1 -:10CA400020810020A073E06900F050FD78B9E16911 -:10CA500001208871E2694FF420519180E169887268 -:10CA6000E06942F601010181E06900218173F01F54 -:10CA700020841E98606207206084169800F0F9FFF9 -:10CA8000072089F800000120049002900020ADF8F2 -:10CA90002A0028E01DE2A3E13AE1EAE016E2AEE076 -:10CAA00086E049E00298012814D0E06980790128E5 -:10CAB00003D1BDF82800ADF80E00049803ABCDE912 -:10CAC00000B04A4641461B98FFF7EAFB0498001D58 -:10CAD00080B20490BDF82A00ADF80C00ADF80E004D -:10CAE000059880B202900AAB1D9A16991B9800F027 -:10CAF000C3FF28B902983988001D05908142D1D220 -:10CB00000298012881D0E0698079012805D0BDF81C -:10CB10002810A1F57F40FF3803D1BDF82800ADF8FB -:10CB20000E00049803ABCDE900B04A4641461B987D -:10CB3000FFF7B6FB0298BBE1072E02D0152E7FF45B -:10CB4000D4AEB5F801102183ADF81C10B5F8032060 -:10CB5000628300293FF4E4AE91423FF6E1AE012149 -:10CB6000A1724FF0000BA4F808B084F80EB0052EA7 -:10CB700007D0C0B2691DE26905F09EF800287FF475 -:10CB800044AF4FF6FF70208401A906AA14A8CDF87F -:10CB900000B081E885032878214600F03F031D9A04 -:10CBA0001B98FFF795FB8246208BADF81C0080E1B7 -:10CBB0000120032EC3D14021ADF85010B5F801106B -:10CBC0002183ADF81C100AAAB8F1000F00D0002391 -:10CBD000CDE9020304921D98CDF8048000903888B6 -:10CBE0000022401E83B21B9800F0C6FF8DF818008B -:10CBF00090BB0B2089F80000BDF8280037E04FF00B -:10CC0000010C052E9BD18020ADF85000B5F8011025 -:10CC10002183B5F803002084ADF81C10B0F5007F27 -:10CC200003D907208DF8180085E140F47C42228466 -:10CC30000CA8B8F1000F00D00023CDE90330CDE9F6 -:10CC4000018C1D9800903888401E83B21B9800F01C -:10CC500093FF8DF8180028B18328A8D10220BDE0E9 -:10CC6000540000200D2189F80010BDF83000401C50 -:10CC70001EE1032E04D248067FF537AE002017E1EF -:10CC8000B5F80110ADF81C102878400602D58DF8D3 -:10CC90003CE002E007208DF83C004FF00008032044 -:10CCA000CDE902081E9BCDF810801D980193A6F1D6 -:10CCB000030B00901FFA8BF342461B9800F032FDE5 -:10CCC0008DF818008DF83C80297849060DD520880C -:10CCD000C00506D5208BBDF81C10884201D1C4F8D0 -:10CCE000248040468DF81880E2E0832801D14FF07F -:10CCF000020A4FF48070ADF85000BDF81C0020838C -:10CD0000A4F820B01E986062032060841321CCE058 -:10CD1000052EFFF4EAADB5F80110ADF81C10A28F96 -:10CD200062B3A2F57F43FE3B28D008228DF83C2059 -:10CD30004FF0000B0523CDE9023BDDF878C0CDF8BC -:10CD400010B01D9A80B2CDF804C040F400430092A8 -:10CD5000B5F803201B9800F0E5FC8DF83CB04FF4CB -:10CD600000718DF81800ADF85010832810D0F8B17C -:10CD7000A18FA1F57F40FE3807D0DCE00B228DF8B3 -:10CD80003C204FF6FE72A287D2E7A4F83CB0D2E076 -:10CD900000942B4631461E9A1B98FFF780FB8DF8B6 -:10CDA000180008B183284BD1BDF81C00208355E73B -:10CDB00000942B4631461E9A1B98FFF770FB8DF8A6 -:10CDC0001800E8BBE18FA06B0844811D8DE8820349 -:10CDD0004388828801881B98FFF763FC824668E0DD -:10CDE00095F80180022E70D15FEA080002D0B8F1F8 -:10CDF000010F6AD109208DF83C0007A800908DF83A -:10CE000040804346002221461B98FFF72CFC8DF8FA -:10CE100042004FF0000B8DF843B050B9B8F1010F4C -:10CE200012D0B8F1000F04D1A18FA1F57F40FF38D7 -:10CE30000AD0A08F40B18DF83CB04FF4806000E084 -:10CE400037E0ADF850000DE00FA91B98FAF7B2F8E3 -:10CE500082468DF83CB04FF48060ADF85000BAF1D6 -:10CE6000020F06D0FB480068C07928B18DF8180081 -:10CE700027E0A4F8188044E0BAF1000F03D0812025 -:10CE80008DF818003DE007A8009043460122214696 -:10CE90001B98FFF7E8FB8DF8180021461B98FFF759 -:10CEA000CAFB9DF8180020B9192189F8001001204B -:10CEB00038809DF83C0020B10FA91B98FAF77AF84A -:10CEC0008246BAF1000F33D01BE018E08DF818E06D -:10CED00031E02078000712D5012E10D10A208DF8FC -:10CEE0003C00E088ADF8400004201B9906F0F2FDFC -:10CEF0000820ADF85000C1E648067FF5F6AC4FF0CB -:10CF0000040A2088BDF8501008432080BDF8500066 -:10CF100080050BD5A18FA1F57F40FE3806D11E9864 -:10CF2000E06228982063A6864FF0030A5046A1E4E9 -:10CF30009DF8180078B1012089F80000297889F857 -:10CF40000110BDF81C10A9F802109DF8181089F8FE -:10CF50000410052038802088BDF8501088432080B8 -:10CF6000E4E72DE9FF4F8846087895B0012181401C -:10CF70004FF20900249C0140ADF820102088DDF814 -:10CF80008890A0F57F424FF0000AFF3A02D029B105 -:10CF9000000703D5012019B0BDE8F08F239E4FF0A4 -:10CFA000000B0EA886F800B018995D460988ADF808 -:10CFB0003410A8498DF81CB0179A0A718DF838B052 -:10CFC000086098F8000001283BD0022809D0032807 -:10CFD0006FD1307820F03F001D303070B8F8040079 -:10CFE000E08098F800100320022904D1317821F064 -:10CFF0003F011B31317094F84610090759D505AB34 -:10D00000B9F1000F13D0002102AA82E80B0007201B -:10D01000CDE90009BDF83400B8F80410C01E83B291 -:10D020000022159800F0A8FD0028D1D101E0F11CE4 -:10D03000EAE7B8F80400A6F80100BDF81400C01C27 -:10D0400004E198F805108DF81C1098F804000128E8 -:10D0500006D04FF4007A02282CD00328B8D16CE116 -:10D060002188B8F8080011F40061ADF8201020D034 -:10D0700017281CD3B4F84010814218D3B4F84410D8 -:10D08000172901D3814212D1317821F03F01C91C07 -:10D090003170A6F801000321ADF83410A4F8440063 -:10D0A00094F8460020F0020084F8460065E105256A -:10D0B0007EE177E1208808F1080700F4FE60ADF812 -:10D0C000200010F0F00F1BD010F0C00F03D03888F4 -:10D0D000228B9042EBD199B9B878C00710D0B968CB -:10D0E0000720CDE902B1CDF804B00090CDF810B022 -:10D0F000FB88BA883988159800F014FB0028D6D12F -:10D100002398BDF82010401C80294ED006DC102941 -:10D110000DD020290BD0402987D124E0B1F5807FA4 -:10D120006ED051457ED0B1F5806F97D1DEE0C80654 -:10D1300001D5082000E0102082460DA907AA05208D -:10D14000CDE902218DF83800ADF83CB0CDE9049668 -:10D1500008A93888CDE900015346072221461598D1 -:10D16000FFF7B6F8A8E09DF81C2001214FF00A0A4D -:10D17000002A9BD105ABB9F1000F00D00020CDE90A -:10D1800002100720CDE90009BDF834000493401EC9 -:10D1900083B2218B0022159800F0EEFC8DF81C0064 -:10D1A0000B203070BDF8140020E09DF81C200121F8 -:10D1B0004FF00C0A002A22D113ABB9F1000F00D0B6 -:10D1C0000020CDE902100720CDE900090493BDF845 -:10D1D0003400228C401E83B2218B159800F0CCFCC9 -:10D1E0008DF81C000D203070BDF84C00401CADF8CF -:10D1F000340005208DF83800208BADF83C00BCE0F1 -:10D200003888218B88427FF452AF9DF81C004FF084 -:10D21000120A00281CD1606AA8B1B878C0073FF490 -:10D2200046AF00E018E0BA680720CDE902B2CDF8B9 -:10D2300004B00090CDF810B0FB88BA88159800F0C3 -:10D2400071FA8DF81C00132030700120ADF8340005 -:10D2500093E00000540000203988208B8142D2D115 -:10D260009DF81C004FF0160A0028A06B08D0E0B310 -:10D270004FF6FF7000215F46ADF808B0019027E03F -:10D2800068B1B978C907BED1E18F0DAB0844821DE2 -:10D2900003968DE80C0243888288018809E0B878FB -:10D2A000C007BCD0BA680DAB03968DE80C02BB88F2 -:10D2B000FA881598FFF7F5F905005ED0072D72D0B2 -:10D2C00076E0019005AA02A92046FFF72BF9014656 -:10D2D000E28FBDF80800824201D00029F1D0E08F32 -:10D2E000A16B084407800198E08746E09DF81C0088 -:10D2F0004FF0180A40B1208BC8B1388820832146EE -:10D300001598FFF798F938E004F118000090237E93 -:10D31000012221461598FFF7A6F98DF81C00002878 -:10D32000EDD1192030700120ADF83400E7E7052574 -:10D3300021461598FFF77FF93AE0208800F4007045 -:10D34000ADF8200050452DD1A08FA0F57F41FE39CA -:10D3500001D006252CE0D8F808004FF0160A48B195 -:10D36000A063B8F80C10A1874FF6FF71E187A0F811 -:10D3700000B002E04FF6FF70A087BDF8200030F447 -:10D380007F611AD0782300220420159906F0F8FA5C -:10D3900098F8000020712088BDF8201008432080F4 -:10D3A0000EE000E007252088BDF82010884320808B -:10D3B000208810F47F6F1CD03AE0218881432180BF -:10D3C0009DF8380020B10EA91598F9F7F3FD054630 -:10D3D0009DF81C000028EBD086F801A001203070D9 -:10D3E000208B70809DF81C0030710520ADF8340052 -:10D3F000DEE7A18EE1B118980DAB0088ADF83400DE -:10D400002398CDE90304CDE90139206B0090E36A4C -:10D41000179A1598FFF7FEF9054601208DF8380098 -:10D420000EA91598F9F7C6FD00B10546A4F834B069 -:10D4300094F8460040070AD52046FFF7A2F910F0FD -:10D440003E0F04D114F8460F20F004002070189805 -:10D45000BDF83410018028469DE500B585B004284C -:10D4600006D102208DF8000088B26946F9F7A2FDC6 -:10D4700005B000BD10B5384C0B782268012B02D0E6 -:10D48000022B2AD111E013780BB1052B01D1042313 -:10D49000137023688A889A802268CB88D380226898 -:10D4A0000B891381498951810DE08B889380226813 -:10D4B000CB88D38022680B8913814B8953818B8958 -:10D4C0009381096911612168F9F774FD22680021CF -:10D4D0000228117003D0002800D0812010BD8320C5 -:10D4E00010BD806B002800D0012070478178012991 -:10D4F00009D10088B0F5205F03D042F601018842CF -:10D5000001D10020704707207047F0B587B0002494 -:10D5100015460E460746ADF8144010E006980188FF -:10D520002980811DCDE902410721019404940091D5 -:10D53000838842880188384600F0F4F830B906AA9A -:10D5400005A93046FEF7EEFF0028E7D0822800D17B -:10D55000002007B0F0BD00005400002010B58B780B -:10D5600083B102789A4205D10B885BB102E08B79D6 -:10D57000091D4BB18B789A42F9D1B0F801300C8873 -:10D58000A342F4D1002010BD812010BD072826D071 -:10D5900012B1012A27D103E0497801F0070102E026 -:10D5A0004978C1F3C20105291DD2DFE801F0031853 -:10D5B000080C12000AB103207047022070470428AB -:10D5C0000DD250B10DE0052809D2801E022808D3E3 -:10D5D00003E0062803D0032803D00520704700206D -:10D5E00070470F20704781207047C0B282060BD46D -:10D5F000000607D5FE48807A4143C01D01EBD000EC -:10D6000080B27047084670470020704770B5138895 -:10D610000B800B781C0625D5F54CA47A844204D8DF -:10D6200043F010000870002070BD956800F00706F8 -:10D6300005EBD0052D78F54065F304130B701378D6 -:10D64000D17803F0030341EA032140F20123B1FB47 -:10D65000F3F503FB15119268E41D00FB012000EBBC -:10D66000D40070BD906870BD37B51446BDF8041085 -:10D6700011809DF804100A061ED5C1F30013DC4981 -:10D68000A568897A814208D8FE2811D1C91DC90828 -:10D690005A42284616F0A5F90AE005EBD00100F041 -:10D6A0000702012508789540A84393401843087065 -:10D6B000207820F0100020703EBD2DE9F041074693 -:10D6C000C81C0E4620F00300B04202D08620BDE800 -:10D6D000F081C74D002034462E60AF802881AA72A9 -:10D6E000E8801AE0E988491CE980810614D4E178D1 -:10D6F00000F0030041EA002040F20121B0FBF1F20A -:10D7000001FB12012068FFF770FF2989084480B2ED -:10D710002881381A3044A0600C3420784107E1D4C5 -:10D720000020D4E72DE9FF4F89B01646DDE9168ABF -:10D730000F46994623F44045084600F00DFB0400CF -:10D740000FD0099802F08AFE0290207800060AD5D0 -:10D75000A748817A0298814205D887200DB0BDE89C -:10D76000F08F0120FAE7224601A90298FFF74EFF49 -:10D77000834600208DF80C004046B8F1070F1AD000 -:10D7800001222146FFF702FF0028E7D1207840065A -:10D7900011D502208DF80C00ADF81070BDF8040012 -:10D7A000ADF81200ADF814601898ADF81650CDF829 -:10D7B0001CA0ADF818005FEA094004D500252E46EC -:10D7C000A84601270CE02178E07801F0030140EA47 -:10D7D000012040F20121B0FBF1F2804601FB1287EB -:10D7E0005FEA494009D5B84507D1A178207901F011 -:10D7F000030140EA0120B04201D3BE4201D9072013 -:10D80000ACE7A8191FFA80F9B94501D90D20A5E7A1 -:10D810009DF80C0028B103A90998F9F7C9FB002865 -:10D820009CD1B84507D1A0784FEA192161F30100D6 -:10D83000A07084F804901A9800B10580199850EAF5 -:10D840000A0027D0199830B10BEB06002A46199927 -:10D8500016F050F80EE00BEB06085746189E099894 -:10D8600002F068FF2B46F61DB5B2394642460095D8 -:10D8700002F051FB224601A90298FFF7C7FE9DF86E -:10D880000400224620F010008DF80400DDE90110AC -:10D89000FFF7EAFE002061E72DE9FF4FDFF8509126 -:10D8A00082461746B9F80610D9F8000001EB41018D -:10D8B00000EB810440F20120B2FBF0F185B000FBE7 -:10D8C00011764D46DDF84C8031460698FFF78DFE07 -:10D8D00029682A898B46611A0C3101441144AB88AE -:10D8E00089B28B4202D8842009B038E70699CDB2BC -:10D8F000290603D5A90601D58520F5E7B9F806C0A4 -:10D900000CF1010C1FFA8CFCA9F806C0149909B19E -:10D91000A1F800C0A90602D5C4F8088007E01044A9 -:10D9200080B2A9F80800191A01EB0B00A06022468A -:10D93000FE200699FFF798FEE77026712078390AD5 -:10D9400061F30100320AA17840F0040062F30101A2 -:10D95000A17020709AF802006071BAF80000E080AF -:10D9600000262673280602D599F80A7000E00127E0 -:10D97000A80601D54FF000084D4600244FF00709D6 -:10D980000FE0CDE902680196CDF800900496E98891 -:10D990002046129B089AFFF7C5FE0028A4D1641CFC -:10D9A000E4B2BC42EDD300209EE72DE9F04780466B -:10D9B00000F0D2F9070005D0002644460C4D40F295 -:10D9C000012919E00120BDE8F087204600F0C4F9E4 -:10D9D0000278C17802F0030241EA0222B2FBF9F3B5 -:10D9E00009FB13210068FFF700FE304486B201E016 -:10D9F00094060020641CA4B2E988601E8142E4DC25 -:10DA0000A8F10100E8802889801B28810020387057 -:10DA1000D9E710B5144631B1491E218002F01EFD30 -:10DA2000A070002010BD012010BD10B5D2490446E1 -:10DA30000088CA88904201D3822010BD096800EB9B -:10DA4000400001EB80025079A072D088208191784B -:10DA5000107901F0030140EA0120A081A078E11CC7 -:10DA6000FFF7D4FD20612088401C2080E08000204A -:10DA700010BD0121018270472DE9FF4F85B04FF69F -:10DA8000FF788246A3F8008048681F460D468078DC -:10DA90008DF8060048680088ADF8040000208DF875 -:10DAA0000A00088A0C88A04200D304462C8241E078 -:10DAB000288A401C2882701D6968FFF74FFDB8BB9B -:10DAC0003988414501D1601E38806888A04236D32C -:10DAD000B178307901F0030140EA012901A9701DF4 -:10DAE000FFF73CFD20BB298941452CD0002231465F -:10DAF0000798FFF74BFDD8B92989494518D1E9683E -:10DB00000391B5F80AC0D6F808B05046CDF800C069 -:10DB100002F010FEDDF800C05A460CF1070C1FFAA7 -:10DB20008CFC4B460399CDF800C002F0BEF950B111 -:10DB3000641CA4B2204600F00FF90600B8D1641EA0 -:10DB40002C828220D0E67C807079B871F088B88011 -:10DB50003178F07801F0030140EA01207881A7F8DC -:10DB60000C90504602F07AFC324607F10801FFF7AC -:10DB70004DFD38610020B7E62DE9FF4F87B08146A3 -:10DB80001C469246DDF860B0DDF85480089800F03D -:10DB9000E3F805000CD0484602F060FC297809063D -:10DBA00008D57549897A814204D887200BB0D6E51B -:10DBB0000120FBE7CAF309062A4601A9FFF726FD63 -:10DBC0000746149807281CD000222946FFF7DEFCE0 -:10DBD0000028EBD12878400613D501208DF80800E5 -:10DBE0000898ADF80C00BDF80400ADF80E00ADF8D3 -:10DBF0001060ADF8124002A94846F9F7D9F900289B -:10DC0000D4D12978E87801F0030140EA0121AA780B -:10DC1000287902F0030240EA0220564507D0B1F508 -:10DC2000007F04D9611E814201DD0B20BEE78642E0 -:10DC300001D90720BAE7801B85B2A54200D9254645 -:10DC4000BBF1000F01D0ABF80050179818B1B9190B -:10DC50002A4615F04FFEB8F1000F0DD03E4448465D -:10DC60004446169F02F078FD2146FF1DBCB23246A5 -:10DC70002B46009402F083F9002097E72DE9F0414C -:10DC800007461D461646084600F066F804000BD00D -:10DC9000384602F0E3FB2178090607D53649897A30 -:10DCA000814203D8872012E5012010E52246314643 -:10DCB000FFF7ACFC65B12178E07801F0030140EAA0 -:10DCC0000120B0F5007F01D8012000E0002028707D -:10DCD0000020FCE42DE9F04107461D4616460846A3 -:10DCE00000F03AF804000BD0384602F0B7FB217878 -:10DCF000090607D52049897A814203D88720E6E4BE -:10DD00000120E4E422463146FFF7AEFCFF2D14D09B -:10DD10002178E07801F0030240EA022040F201227B -:10DD2000B0FBF2F302FB130015B900F2012080B240 -:10DD3000E070000A60F3010121700020C7E410B513 -:10DD40000C4600F009F828B1C18821804079A07004 -:10DD5000002010BD012010BD0749CA88824209D3A6 -:10DD600040B1096800EB40006FF00B0202EB80004D -:10DD700008447047002070479406002010B506F054 -:10DD8000D7F8F4F711FD05F06FFFBDE8104006F07D -:10DD900021B870B50346002002466FF02F050EE053 -:10DDA0009C5CA4F130060A2E02D34FF0FF3070BD08 -:10DDB00000EB800005EB4000521C2044D2B28A42A6 -:10DDC000EED370BD30B50A240AE0B0FBF4F304FBD7 -:10DDD00013008D18303005F8010C521E1846D2B2CF -:10DDE000002AF2D130BD30B500234FF6FF7510E0A8 -:10DDF000040A44EA002084B2C85C6040C0F3031403 -:10DE0000604005EA00344440E0B25B1C84EA401004 -:10DE10009BB29342ECD330BD10B582B0694601F09D -:10DE20003EFD002818BFFFDF9DF8000000240128F8 -:10DE300009D1019890F8D50028B1019880F8D54013 -:10DE400001980CF06DFFFE488068A0F8CA4002B04F -:10DE500010BD2DE9F04704460D46062002F0E0FA19 -:10DE60000646072002F0DCFA304400F0FF080027E5 -:10DE700018EB050618BF4FF000091DD02088401C84 -:10DE800080B22080B04228BFA4F800902588454584 -:10DE900001D3B54209D30621284602F019FB20B967 -:10DEA0000721284602F014FB10B10020BDE8F087DE -:10DEB000781CC7B2BE42E1D84FF6FF702080122016 -:10DEC000BDE8F08770B5DFA182B0D1E90001CDE9EE -:10DED000000106F0A3FF11F079FFDC4C4FF6FF764E -:10DEE00000256683A683257065706946A01C15F021 -:10DEF000B2FEA11C601C0EF033FC25721B20608159 -:10DF00004FF4A471A181E08121820321A174042234 -:10DF1000E274A082E082A4F13E0021830570468075 -:10DF2000CB480570A4F110000570468002B070BDAA -:10DF3000F8B5C34D0E466860297006F0E9FE4FF64D -:10DF4000FF70ADF8000000216846FFF782FFA0B91E -:10DF50000621BDF8000002F0CDFA04460721BDF805 -:10DF6000000002F0C7FA002C1CBF0028FFDF0021D0 -:10DF70006846FFF76EFF0028EAD0FFF7A3FF287876 -:10DF80000BF099F909F0F5F8297868680EF0FCFAB9 -:10DF9000287811F0ABF830460CF0D3FD07F04AF8C2 -:10DFA0002978686810F006F8BDE8F84011F00EBF57 -:10DFB00010B50124002A1CBF002010BD002908BF95 -:10DFC000022105D0012918BF002401D0204610BD30 -:10DFD00013F0DAFCFAE72DE9F04F8BB0040008BF2C -:10DFE000FFDF0221994E06F11C00FFF732FF0028E7 -:10DFF00018BFFFDFB6F81CA0062002F011FA054694 -:10E00000072002F00DFA284400F0FF0808F1010093 -:10E0100000F0FF094FF0000BB78B474519D12046A0 -:10E0200008F03EFB002840F0BD803078002800F06A -:10E03000BD8084F801B0142020702021A01C15F0B0 -:10E04000D8FC0220A07086F800B00BB00120BDE81B -:10E05000F08F4F451CD1204606F092FF00287AD061 -:10E060002078142804BFA0783C2853D1A088072129 -:10E0700002F02EFA050008BFFFDF288806F061FED7 -:10E08000A088072102F036FA002818BFFFDF89E0D8 -:10E0900004A9384601F003FC00285CD19DF810006B -:10E0A00048B106F0BCFFB84255D0214638460FF0C3 -:10E0B00081FE80B376E008F08BFBB84276D0214633 -:10E0C00038460EF073F900286CD1059800F1580518 -:10E0D00090F8C80018B9A87E08B1012000E000201F -:10E0E000079095F8350000281CBF95F8360010F011 -:10E0F000020F1CD084F801B00120207084F802B017 -:10E10000A78095F83700A071288F2081688F6081E3 -:10E1100085F835B046E0FFE7059800F1580590F81E -:10E1200004010028DBD1A87E0028D8D0D5E73846E6 -:10E1300002F012FB0290002808BFFFDF029801F0F6 -:10E140001EFD48B184F801B00F212170A780E08046 -:10E150000120A07026E029E0384602F0EBFA029098 -:10E16000002808BFFFDF079800B3029801F05FFDA9 -:10E17000E0B19DF8100038B90598D0F8F00041885A -:10E18000B94208BF80F800B0384606F0DAFD84F8DE -:10E1900001B00C20207084F802B0A780E87EA07146 -:10E1A00085F81AB00BB00120BDE8F08F022106F10E -:10E1B0001C00FFF74EFE18B9B08B50457FF42CAF12 -:10E1C0000BB00020BDE8F08F10B50BF0F1FD042876 -:10E1D00003D00BF0EDFD052802D109F0CBF928B9E9 -:10E1E0000CF087FF20B107F036F808B10C2010BD05 -:10E1F00011F037FE002010BD10B50446007800284D -:10E200001EBF0128122010BD0BF0D2FD042806D03D -:10E210000BF0CEFD052802D00CF06BFF28B111F0F9 -:10E220006AFF00281CBF0C2010BD2078002816BFF4 -:10E2300002280020012004F11703E21D611C09E0FF -:10E240005C000020FFFFFFFF1F000000DE06002033 -:10E2500068000020BDE8104011F05ABE10B5044619 -:10E26000007800281EBF0128122010BD0BF0A0FD71 -:10E27000042803D00BF09CFD052802D109F07AF99F -:10E2800028B90CF036FF20B106F0E5FF08B10C20EC -:10E2900010BD2078002816BF022800200120611C34 -:10E2A00011F0A6FD002814BF0020072010BD10B5F6 -:10E2B00011F024FF002814BF0020302010BD10B53D -:10E2C00004460BF075FD042806D00BF071FD0528FF -:10E2D00002D00CF00EFF08B10C2010BD204611F04A -:10E2E00007FF002010BD10B50BF062FD042806D01A -:10E2F0000BF05EFD052802D00CF0FBFE28B111F0FA -:10E30000FAFE00281CBF0C2010BD11F055FE0020A5 -:10E3100010BDFF2181704FF6FF718180FE49496871 -:10E320000A7882718A88028149884181012141707D -:10E330000020704710B5002482B0022A18D014DCE7 -:10E3400012F10C0F14D008DC12F1280F1CBF12F1CF -:10E35000140F12F1100F10D10AE012F1080F1CBFB8 -:10E3600012F1040F002A08D102E0D31E062B04D8B4 -:10E3700038B1012809D002280BD0122402B020465F -:10E3800010BD104607F01EF9F8E7104608F0B0FE81 -:10E39000F4E708461446694601F081FA002818BFE0 -:10E3A0000224EBD19DF80000019880F8544000242D -:10E3B000E4E710B51346012212F029FD002010BD3C -:10E3C00010B504460BF0F4FC052804BF0C2010BD6A -:10E3D00020460AF05EFF002010BD10B504460BF089 -:10E3E000E7FC042806D00BF0E3FC052802D00CF073 -:10E3F00080FE08B10C2010BD2146002006F00FFD64 -:10E40000002010BD10B504460AF0EDFF50B10CF02D -:10E4100063FE38B120780CF0B8FB207809F0E3F8FF -:10E42000002010BD0C2010BD10B504460BF0C0FC40 -:10E43000042806D00BF0BCFC052802D00CF059FED5 -:10E4400008B10C2010BD2146012006F0E8FC002098 -:10E4500010BD38B504464FF6FF70ADF80000A07946 -:10E46000E179884213D021791F299CBF61791F2946 -:10E470000DD80022114614F0A7FB40B90022E07924 -:10E48000114614F0A1FB10B9207A072801D91220F7 -:10E4900038BD0CF02EFE60B90BF08AFC48B90021A3 -:10E4A0006846FFF7D6FC20B1204605F06FFD00203E -:10E4B00038BD0C2038BD70B504468078002582B088 -:10E4C0001A2825D00EDC162841D2DFE800F04040A3 -:10E4D000404040214040404040404040404040405B -:10E4E000402121212A2832D00BDCA0F11E000C286B -:10E4F0002DD2DFE800F02C2C2C2C2C2C2C2C2C2CAE -:10E500002C0D3A38042822D2DFE800F02102210243 -:10E510002088B0F5706F1AD20126694601F0BFF964 -:10E5200000281EBF022002B070BD9DF80000002828 -:10E5300001980BBF00F1EC0100F5B37100F1ED02A1 -:10E5400000F2671290F8723012D173B903E002B092 -:10E550004FF0120070BD90F8C830002B1CBF90F82F -:10E56000C800042801D0087868B102B00C2070BD42 -:10E57000002BFAD190F80431002B1CBF90F8040155 -:10E580000428F0D1F1E70E70A07810709DF800001B -:10E59000012809D1019890F8D50028B1019880F898 -:10E5A000D55001980CF0BCFB02B0002070BDF0B556 -:10E5B00083B00C46694601F072F928B1204615F087 -:10E5C0003DFB03B00220F0BD0198002700F1580583 -:10E5D00000F1080685F83E703146204615F03BFBF9 -:10E5E00095F83E000028F5D103B0F0BD2DE9F041CB -:10E5F00082B004460088694601F051F900281CBF2A -:10E6000002B0BDE8F0812289E1880123684601F06B -:10E610005EF900281CBF02B0BDE8F081A2886188C5 -:10E620000023684601F053F906001CBF02B0BDE8A4 -:10E63000F0819DF800000127002801984FF00008A4 -:10E6400008D000F5C47580F88971019890F8C80168 -:10E65000C8B107E000F1FC0580F8FD70019890F862 -:10E66000200108B13A261CE0E08868802089A88053 -:10E670006088E880A088288101222846019912F04C -:10E68000E1FD2F700DE0E08868802089A880608817 -:10E69000E880A088288100222846019912F0D2FD46 -:10E6A0002F7085F8018002B03046BDE8F08130B5AA -:10E6B00087B00D460446008804A901F0F0F8002850 -:10E6C0001CBF07B030BD9DF81000002814BF002209 -:10E6D0000122E0880599B1F8483098428CBFC01AF1 -:10E6E000002068806388B1F84A0083428CBF181A02 -:10E6F0000020A8800020009001900290E088ADF8F2 -:10E7000002002089ADF804006088ADF80600A088FA -:10E71000ADF80800684601E05C00002012F092FDB0 -:10E720002089BDF80410401AE880A088BDF80810C0 -:10E73000401A2881E088BDF80210411A6888814299 -:10E74000C8BF084668806088BDF80610411AA888CE -:10E750008142C8BF0846A88007B0002030BD10B570 -:10E7600004460BF025FB042806D00BF021FB0528FE -:10E7700002D00CF0BEFC28B111F0BDFC00281CBF7B -:10E780000C2010BD2078002816BF02280020012090 -:10E79000E279611C11F032FE002814BF0020022033 -:10E7A00010BD2DE9F04182B004460088694601F0B1 -:10E7B00076F806001CBF02B0BDE8F081E846A078FC -:10E7C000002814BF05460725E17800290CBF07245F -:10E7D0000C4615F0040F16BF00280020012014F08D -:10E7E000040F16BF00290021012108424FF009073C -:10E7F0000AD001221146404601F081F8002838D0A5 -:10E8000002B03846BDE8F08180B1002201214046C7 -:10E8100001F075F80028F3D114F0040F29D001227B -:10E820001146404601F06BF818B343E081B1012274 -:10E830000021404601F063F80028E1D115F0040FF3 -:10E8400017D001221146404601F059F888B125E061 -:10E8500015F0040F04F0040023D0C0B101221146CA -:10E86000404601F04CF800281CBF25F0040524F0B8 -:10E87000040400219DF800200120002A019A1CD0E8 -:10E8800082F89301019A92F8DC219AB33BE00022CE -:10E890000121404601F033F80028EAD025F00405B4 -:10E8A000E7E70028E5D001220021404601F027F8E3 -:10E8B0000028DED024F00404DBE782F80701019A87 -:10E8C00092F82C213AB9019A92F806211AB9019AC4 -:10E8D00092F87B200AB13A2608E0019A82F80601F4 -:10E8E000019880F80851019880F80941019880F852 -:10E8F000071116E0FFE7019A92F892211AB9019ADE -:10E9000092F87B200AB13A2608E0019A82F8920137 -:10E91000019880F89451019880F89541019880F809 -:10E92000931102B03046BDE8F081817831F00701E3 -:10E9300007BFC17831F007011220704731E710B5E9 -:10E9400004460178122086B0012918BF002904D09E -:10E9500002291EBF032906B010BD6178002918BF27 -:10E96000012904D002291EBF032906B010BDA278D8 -:10E9700032F005011CBF06B010BD12F0050F04BF38 -:10E9800006B010BDE178B4F806C0638900291EBF47 -:10E99000012906B010BDBCF1040F2EBF042B06B038 -:10E9A00010BD052A3DD000BF0BF002FA042846D066 -:10E9B0000BF0FEF9052842D0A0788DF80000A07871 -:10E9C0008DF80C0060788DF8100020788DF80F001D -:10E9D000A07810F0010F35D0E078012808BF0220A0 -:10E9E00003D000280CBF012000208DF80D00E08826 -:10E9F000ADF802006089ADF80400A07810F0040FB3 -:10EA000034D02079012808BF022003D000280CBF91 -:10EA1000012000208DF80E002089ADF80600A089A5 -:10EA200022E021792389A28900291EBF012906B08D -:10EA300010BD042B2EBF042A06B010BDB4E706B0EB -:10EA40000C2010BD10F0040F10D0E078012808BF92 -:10EA5000022003D000280CBF012000208DF80E00FA -:10EA6000E088ADF806006089ADF8080068460AF055 -:10EA7000C7FC002804BF03A808F0BAFD06B010BD0B -:10EA800010B5044602781220012A0FD0002A18BFC0 -:10EA900010BD012A26D00BF08BF9052804D00AF00E -:10EAA00030FB002808BF10BD0C2010BD6178002984 -:10EAB00018BF012906D0022918BF10BDA18800295E -:10EAC00008BF10BD6388002B1CBFA1880029E0D0BF -:10EAD00003EB83035B0001EB8101B3EB012F28BF44 -:10EAE00010BDD6E708F072FC002804BF122010BD4C -:10EAF00008F081FC002008F02BFD002818BF10BD95 -:10EB0000607808F017FD002818BF10BDA188608844 -:10EB1000BDE810400AF0B6BC2DE9F04F91B00C46AC -:10EB2000AFF6E002D2E90012CDE90D120546607A97 -:10EB300010F007034FF0120004BF11B0BDE8F08FD2 -:10EB4000012B18BF022B05D0042B1EBF112011B0C2 -:10EB5000BDE8F08F4FF0000C13F0010F4FF03001C3 -:10EB600040F67B4238D075B1B4F80AC0278AACF1C0 -:10EB7000040843F6FD76B0453CBFA7F10408B04554 -:10EB800026D2BC4524D3E78AB4F81CC0B4F822A02E -:10EB9000268DB4F82E90B4F83480A7F1060B934577 -:10EBA0003CBFACF1060B934512D2674598BFBAF54E -:10EBB000FA7F3EBFA6F10A0AFE4F17EB0A0707D2FB -:10EBC000B6EBDC0F04D9C14598BF4FF0010C03D957 -:10EBD00011B00846BDE8F08F13F0020F29D004EB06 -:10EBE0004C09B9F81680B9F81C60B9F822E0B9F8F8 -:10EBF0002870B9F82EA0B9F83490A8F1060B5A4540 -:10EC000084BFA6F1060B5A45E2D9B04598BFBEF5C0 -:10EC1000FA7F3EBFA7F10A0BDFF8988318EB0B08C9 -:10EC2000D6D2B7EBD60FD3D9CA4598BF0CF1010C99 -:10EC3000CED813F0040F22D004EB4C03DE8AB3F8D5 -:10EC40001CC0B3F822901F8DB3F82E809B8EA6F1C6 -:10EC5000060A524584BFACF1060A5245B8D966454A -:10EC600098BFB9F5FA7F3EBFA7F10A06D14A12EB69 -:10EC70000602ADD2B7EBDC0FAAD99845A8D8217807 -:10EC800021B1012915D011B0BDE8F08FA17855B19F -:10EC9000002918BF01290CD0022918BF032908D068 -:10ECA00011B0BDE8F08F00291EBF012911B0BDE8E9 -:10ECB000F08F6178002918BF012905D002291EBFF5 -:10ECC000032911B0BDE8F08F0BF072F804280CD0C6 -:10ECD0000BF06EF8052808D0B74E307828B907F049 -:10ECE00077FDA0F57F41FF3903D011B00C20BDE8BE -:10ECF000F08FB2480A90B2480B90B2480C900AAA22 -:10ED000006210FA801F0B2FB050002BF092011B0D7 -:10ED1000BDE8F08F032111F0EDFDB18AA5F8481090 -:10ED2000F28AA5F84A20F07C0090B37C288801F094 -:10ED30008AFC002818BFFFDF288806F001F82F881A -:10ED400005F10E094FF0000B4FF00A0A0421484666 -:10ED500004F0E3FB484611F096FF062001F060FB4B -:10ED600080461CE003A9062001F03BFB03A801F04C -:10ED700016FB5FEA000B10D1BDF81000B84206D0B8 -:10ED80000598042249460E3014F088FD70B103A89E -:10ED900001F005FB5FEA000BEED0A8F10108B8F125 -:10EDA000000F07DDBBF1000FDCD007E0484611F093 -:10EDB00073FFF2E7BBF1000F08BFFFDFD9F80000D7 -:10EDC00011F085FFBAF1010A01D00028BED07EA063 -:10EDD00005F1120700680290032102A804F074FBF9 -:10EDE000002002A90A5C3A54401CC0B20328F9D39F -:10EDF000A08B6880608CA880208DE88095F85220D8 -:10EE000095F85110308B0AF0A6FB0146A8622846FF -:10EE10000AF0E4FB4FF0000885F85E8085F85F801B -:10EE2000A07800281ABF0228012000206876D4F8B4 -:10EE30000300C5F81A00B4F80700E8830DA905F12E -:10EE4000080014F008FF4FF0010985F8F890708968 -:10EE5000B5F84A1005F1FC074A46884228BF084623 -:10EE600095F852304FF4747B13F00C0F1CBF0BEB72 -:10EE7000811189B25AD0B3898B4238BF1946B6F88E -:10EE80000EC0B5F848309C4528BF9C4695F851A067 -:10EE90001AF00C0F1CBF0BEB83139BB24ED0368ABB -:10EEA0009E4238BF3346BCF11B0F18BFB3F5A47F99 -:10EEB0004DD0F8803981A7F802C0BB80294638467A -:10EEC00012F0C0F987F800908DF8008001216846A3 -:10EED00004F0FAFA9DF8000000F00701C0F3C10247 -:10EEE0001144C0F3401008448DF80000401D2876FE -:10EEF00009283CBF083028760021284611F0FAFC8A -:10EF0000607808F06EFAA1782078E21C08F03CFAEC -:10EF1000002808BF122665D008F06DFAA178207885 -:10EF2000E21C08F0E1FA060017D05BE0022B07BFF5 -:10EF300089003C31C900703189B29CE7BAF1020FF7 -:10EF400007BF9B003C33DB0070339BB2A7E71B2855 -:10EF500018BFB1F5A47FACD1B6E7607A10F0040F0A -:10EF600014BF0820012008F009FA06003AD129460A -:10EF7000032008F0E3FA060034D1617A8DF8081016 -:10EF8000617A11F0010F06D06089ADF80A00208A7D -:10EF9000ADF80C000120617A11F0020F18BF401C7F -:10EFA00011F0040F14D004EB40004189ADF80E10AD -:10EFB000008A0BE089F3FFFFDE060020A006002098 -:10EFC00068000020CE06002011223300ADF81000AA -:10EFD00002A80AF015FA060004D128460AF0AAF998 -:10EFE000060009D0288805F0ACFE2888062101F02B -:10EFF00081FA002818BFFFDF304611B0BDE8F08F5E -:10F000000146002088E538B5F74C207870B90AF041 -:10F01000CFFE052805D007F0DBFBA0F57F41FF39C7 -:10F0200004D068460AF069FA10B113E00C2038BD2C -:10F030000098008805F085FE00980621008801F000 -:10F0400059FA002818BFFFDF01202070E748007838 -:10F05000F3F76EFF002038BD70B542880446911F5B -:10F0600040F67B433020994228BF70BDA188A1F1B2 -:10F07000060C9C4528BF70BD8A429CBFE288B2F551 -:10F08000FA7F28BF70BD2289DFF864C3A2F10A03AA -:10F090001CEB030C28BF70BDB2EBD10F98BF70BD45 -:10F0A0006189A289914288BF70BD00252088062110 -:10F0B00001F00EFA78B190F8721061B990F8C810AA -:10F0C00000291CBF90F8C810042904D0D0F8F01013 -:10F0D0000A7812B105E0022070BDD0F83C21127808 -:10F0E0000AB13A2070BD05228A71D0F8F0100D8166 -:10F0F000D0F8F020A1885181D0F8F020E1889181EA -:10F10000D0F8F0202189D181D0F8F0100A894B89FC -:10F110009A429EBF8A79082A9A4224BF122070BD63 -:10F1200022884A80D0F8F00002210170002070BDD2 -:10F13000F0B583B0054611F005FE002802BF12208D -:10F1400003B0F0BD0026A84F012429467C70B81CEE -:10F1500014F081FD7E706946062001F042F9002816 -:10F1600018BFFFDF684601F01AF9002808BFBDF894 -:10F1700004500AD1029880F8F840684601F00FF96F -:10F1800018B9BDF80400A842F4D103B00020F0BDC6 -:10F1900010B504460088062101F09AF978B190F87C -:10F1A000721061B990F8C81000291CBF90F8C810FF -:10F1B000042904D0D0F8F0100A7812B105E002203A -:10F1C00010BDD0F83C2112780AB13A2010BD90F859 -:10F1D000942012F0010F04BF0C2010BDD4F80220BF -:10F1E000D4F806304A608B60D0F8F01062898A81CA -:10F1F000D0F8F010E268C1F80E202269C1F81220A0 -:10F200006269C1F81620A269C1F81A20D0F8F0206E -:10F2100003211170D0F8F00021884180002010BD3A -:10F22000017881B0EF296CD8D0E901C3634503D2DE -:10F23000817811F0080F64D04188ADF8001011F00A -:10F24000100F0CD011F0010F01F0020215D082B1A5 -:10F2500011F0080F08BF11F0040F18D014E011F0DE -:10F26000080F4ED111F0010F18BF11F0020F48D155 -:10F270000DE011F0040F0AD106E02AB111F0080FD9 -:10F2800008BF11F0040F02D011F00F0F39D14188DF -:10F29000C27D11F0100F02D0012A0DD031E0012AF9 -:10F2A00018BF032A2DD111F0100F05D1427E012A7B -:10F2B0001CBF022A032A24D1027B12B3072A20D8BA -:10F2C000427B002A18BF012A03D0022A18BF032A52 -:10F2D00017D111F0040F1EBF827B002A012A10D122 -:10F2E000427D002A18BF012A03D0022A18BF032A30 -:10F2F00007D1C27E002A18BF012A02D1807E0F28C2 -:10F3000002D9122001B07047B3F1807F02D2BCF164 -:10F31000200F05D211F0080F02BF112001B0704775 -:10F32000002001B0704770B50D4604460BF0E1FEB9 -:10F3300000281CBF0C2070BD2046FFF771FF00287D -:10F3400018BF70BD00202870607B05F0A6FF204626 -:10F35000BDE8704006F07AB810B5014682881220E8 -:10F360001F2A88BF10BD4B78042B06D0032B08D072 -:10F37000002A08BF10BD112010BD002A18BF10BD03 -:10F38000F9E71046891D06F004F9002010BD1F287A -:10F3900084BF1220704770B50D46044606F0DBF8B6 -:10F3A000002804BF122070BD2946204606F0DCF874 -:10F3B000002070BD2DE9F0434278122183B0012A6C -:10F3C00003D903B00846BDE8F0830078012811D0C6 -:10F3D0000028F6D10AF0FAFC04460BF011FB0028D5 -:10F3E00040F0E78000F0D6B8DE0600205C00002088 -:10F3F00089F3FFFF002AE4D005F04EFE58B105F076 -:10F4000032FF10B906F0EAF828B10BF072FE0028BE -:10F4100040F0CF8003E003B01220BDE8F08305F098 -:10F42000FEFDA0F57F41FF3940F0C38005F03DFFB0 -:10F4300006F0CDF800287DD00022072101A801F0B8 -:10F4400015F8040002BF092003B0BDE8F083FB48B3 -:10F4500003218460204611F05BF9204606F00AFC87 -:10F46000F74D0121A88AA4F84800E88AA4F84A00C8 -:10F47000288B0BF032FCA062288B01210BF02DFCB5 -:10F480000146002220460AF0A4FC06F0AEF810F077 -:10F490000C0F08D001231A462146184611F009FE28 -:10F4A000616A88426FD8E87C0090AB7CEA8AA98ABE -:10F4B000208801F0C8F8002818BFFFDF208805F079 -:10F4C0003FFC20460BF064FB002818BFFFDF2146FD -:10F4D0006889B4F84A30002204F5C476984228BFFF -:10F4E0001846044691F852004FF4747710F00C0F50 -:10F4F0001CBF07EB831083B233D0A889984238BF72 -:10F500000346E889B1F848C0604528BF6046804698 -:10F5100091F8510010F00C0F1CBF07EB8C1080B25B -:10F5200027D000BFB5F810C0844538BF6046B8F199 -:10F530001B0F00E00EE018BFB0F5A47F24D0F480CC -:10F540003381A6F80280B080304611F07BFE0120A6 -:10F5500030702AE000200BF01BFB002818BFFFDFF3 -:10F5600023E0022807BF98003C30D800703083B2F7 -:10F57000C3E7022807BF4FEA8C003C304FEACC00BB -:10F58000703080B2CEE714E01B2C18BFB3F5A47F17 -:10F59000D5D10AE04CB1208805F0D3FB20880721A3 -:10F5A00000F0A8FF002818BFFFDF002003B0BDE86F -:10F5B000F08303B00C20BDE8F0830121FAE610B51A -:10F5C0000C46072100F084FF002804BF022010BD74 -:10F5D00090F8691109B10C2010BD90F8641014293D -:10F5E00012BF152990F8AA110029F4D12168C0F89A -:10F5F0006A116168C0F86E11A168C0F87211E16803 -:10F60000C0F87611012180F86911002010BD10B5F5 -:10F61000072100F05DFF002804BF022010BD90F814 -:10F62000691109B10C2010BD90F86410142918BF9D -:10F630001529F7D1022180F86911002010BDF0B51D -:10F640000E464BF68032122183B0964217D8B6B1DF -:10F65000694600F024F900281CBF03B0F0BD0198F2 -:10F6600000F15807841C258832462946384611F097 -:10F6700045F82088A842F6D103B00020F0BD03B0C1 -:10F680000846F0BD10B582B004460088694600F017 -:10F6900006F900281CBF02B010BD01987F22014668 -:10F6A00080F8602080F86120002280F86220A07835 -:10F6B00081F82C00E07881F82D00207981F82E0067 -:10F6C00002B0104610BD10B582B00C46694600F07D -:10F6D000E6F800281CBF02B010BD019890F8720037 -:10F6E000002818BF0120207002B0002010BD10B506 -:10F6F00082B00C46694600F0D2F800281CBF02B068 -:10F7000010BD019890F82C0001281EBF0C2002B0FB -:10F7100010BD019890F86000207002B0002010BD6C -:10F7200070B50D461646072100F0D2FE002804BF32 -:10F73000022070BD83884FF0010CC28841880CEB19 -:10F74000430C65451AD342F2107C02FB0CF240F6E2 -:10F75000C41C01FB0CF1B2FBF1F1491E8CB2B4F5F3 -:10F76000FA7F88BF4FF4FA74A54238BF2C46621C5A -:10F77000591CB2FBF1F25143491E8BB290F896111D -:10F78000002908BF03843380002070BD10B50C46EB -:10F79000072100F09DFE002804BF022010BD80F864 -:10F7A000D740002C1EBF90F8D51000290BF0B8FAF6 -:10F7B000002010BD017800291CBF417800290ED01F -:10F7C00041881B2921BF81881B29C188022906D3B2 -:10F7D0001C49026840680A6548650020704712208D -:10F7E000704710B5044609F0B3FE20460BF041FA0D -:10F7F000002010BD2DE9F04116460F4604460122B7 -:10F800001146384609F0A7FE0546012138460BF09F -:10F8100064FA854228BF28460123E100503189B2AD -:10F82000E631884206D901F19602401AB0FBF2F0A7 -:10F83000401C83B233800020BDE8F0815C000020D2 -:10F84000DE060020A006002010B504460AF0B0FA3B -:10F85000042806D00AF0ACFA052802D00BF049FCC7 -:10F8600008B10C2010BD601C10F09EFD207800F047 -:10F87000010005F015FD207800F0010007F0B6FD4D -:10F88000002010BD10B504460BF033FC00281CBF4F -:10F890000C2010BD204605F090FE002010BD70B574 -:10F8A0000C460546062100F013FE606010B10020F2 -:10F8B000207070BD0721284600F00AFE6060002815 -:10F8C00004BF022070BD01202070002070BD002800 -:10F8D00008BFFB2006D04068002B14BFB0F84800DA -:10F8E000B0F84A001B2924BF8842B2F5A47F04D394 -:10F8F000104880189CBF002070471220704710B538 -:10F9000004468C46007813466168624638B101208F -:10F9100011F0CFFB6168496A884209D906E00020EE -:10F9200011F0C7FB6168496A884201D9012010BD06 -:10F93000002010BDB8F7FFFF30B5058825F400445E -:10F9400021448CB24FF4004194420AD2121B92B26D -:10F950001B339A4201D2A94307E005F40041214339 -:10F9600003E0A21A92B2A9431143018030BD0844BA -:10F97000083050434A31084480B2704770B51D4684 -:10F9800016460B46044629463046049AFFF7EFFF19 -:10F990000646B34200D2FFDF2821204614F04BF880 -:10F9A0004FF6FF70A082283EB0B265776080B0F558 -:10F9B000004F00D9FFDF618805F13C00814200D291 -:10F9C000FFDF60880835401B343880B220801B2858 -:10F9D00000D21B2020800020A07770BD816188614B -:10F9E00070472DE9F05F0D46C188044600F12809F3 -:10F9F000008921F4004620F4004800F064FB10B1B7 -:10FA00000020BDE8F09F4FF0000A4FF0010BB04519 -:10FA10000CD9617FA8EB0600401A0838854219DC32 -:10FA200009EB06000021058041801AE06088617FB3 -:10FA3000801B471A083F0DD41B2F00DAFFDFBD42A1 -:10FA400001DC294600E0B9B2681A0204120C04D0A5 -:10FA5000424502DD84F817A0D2E709EB06000180D9 -:10FA6000428084F817B0CCE770B5044600F1280254 -:10FA7000C088E37D20F400402BB110440288438805 -:10FA800013448B4201D2002070BD00258A4202D36C -:10FA90000180458008E0891A0904090C418003D0DF -:10FAA000A01D00F020FB08E0637F008808331844A5 -:10FAB00081B26288A01DFFF73FFFE575012070BD90 -:10FAC00070B5034600F12804C588808820F40046FC -:10FAD0002644A84202D10020188270BD988935883A -:10FAE000A84206D3401B75882D1A2044ADB2C01E13 -:10FAF00005E02C1AA5B25C7F20443044401D0C88E0 -:10FB0000AC4200D90D809C8924B10024147009886E -:10FB1000198270BD0124F9E770B5044600F128018F -:10FB2000808820F400404518208A002826D0A0892B -:10FB300010B9A069807F2871A089218A084480B209 -:10FB4000A08129886A881144814200D2FFDF288879 -:10FB50006988A389421800259A420DD119B1201D48 -:10FB600000F0C1FA07E0637F62880833184481B26D -:10FB7000201DFFF7E1FEA5812582012070BD2DE942 -:10FB8000F041418987880026044600F12805B942E2 -:10FB900019D004F10A0800BF21F40040284441882C -:10FBA00019B1404600F09FFA08E0637F00880833EF -:10FBB000184481B262884046FFF7BEFE761C618918 -:10FBC000B6B2B942E8D13046BDE8F0812DE9F04146 -:10FBD00004460B4627892830A68827F40041B4F84C -:10FBE0000A8001440D46B74201D10020ECE70AB17A -:10FBF000481D106023B1627F691D184613F07AFE1C -:10FC00002E88698804F1080021B18A1996B200F0A3 -:10FC10006AFA06E0637F62880833991989B2FFF7B0 -:10FC20008BFE474501D1208960813046CCE7818831 -:10FC3000C088814201D101207047002070470189AE -:10FC40008088814201D1012070470020704770B543 -:10FC50008588C38800F1280425F4004223F400417C -:10FC600014449D421AD08389058A5E1925886388C9 -:10FC7000EC18A64214D313B18B4211D30EE0437F8C -:10FC800008325C192244408892B2801A80B2233331 -:10FC9000984201D211B103E08A4201D1002070BD27 -:10FCA000012070BD2DE9F0478846C18804460089CF -:10FCB00021F4004604F1280720F4004507EB06096B -:10FCC00000F001FA002178BBB54204D9627FA81B7D -:10FCD000801A002503E06088627F801B801A083844 -:10FCE00023D4E28962B1B9F80020B9F802303BB1FF -:10FCF000E81A2177404518DBE0893844801A09E08A -:10FD0000801A217740450ADB607FE1890830304462 -:10FD100039440844C01EA4F81280BDE8F087454568 -:10FD200003DB01202077E7E7FFE761820020F4E7AB -:10FD30002DE9F74F044600F12805C088884620F4D5 -:10FD4000004A608A05EB0A0608B1404502D200204D -:10FD5000BDE8FE8FE08978B13788B6F8029007EBEE -:10FD60000901884200D0FFDF207F4FF0000B50EAEE -:10FD7000090106D088B33BE00027A07FB946307167 -:10FD8000F2E7E18959B1607F2944083050440844C2 -:10FD9000B4F81F1020F8031D94F821108170E28937 -:10FDA00007EB080002EB0801E1813080A6F802B001 -:10FDB00002985F4650B1637F30880833184481B29F -:10FDC0006288A01DFFF7B8FDE78121E0607FE1892F -:10FDD00008305044294408442DE0FFE7E089B4F896 -:10FDE0001F102844C01B20F8031D94F821108170B7 -:10FDF00009EB0800E28981B202EB0800E08137805C -:10FE000071800298A0B1A01D00F06DF9A4F80EB0A9 -:10FE1000A07F401CA077A07D08B1E088A08284F874 -:10FE200016B000BFA4F812B084F817B001208FE715 -:10FE3000E0892844C01B30F8031DA4F81F10807807 -:10FE400084F82100EEE710B5818800F1280321F441 -:10FE500000442344848AC288A14212D0914210D027 -:10FE6000818971B9826972B11046FFF7E8FE50B915 -:10FE70001089283220F40040104419790079884212 -:10FE800001D1002010BD184610BD00F12803407FAD -:10FE900008300844C01E1060088808B9DB1E1360D3 -:10FEA00008884988084480B270472DE9F04100F184 -:10FEB0002806407F1C4608309046431808884D8825 -:10FEC000069ADB1EA0B1C01C80B2904214D9801AE1 -:10FED000A04200DB204687B298183A46414613F00C -:10FEE000DDFC002816D1E01B84B2B844002005E0F8 -:10FEF000ED1CADB2F61EE8E7101A80B20119A94256 -:10FF000006D8304422464146BDE8F04113F0C6BC55 -:10FF10004FF0FF3058E62DE9F04100F12804407F12 -:10FF20001E46083090464318002508884F88069AD8 -:10FF3000DB1E90B1C01C80B2904212D9801AB04230 -:10FF400000DB304685B299182A46404613F0D2FCB1 -:10FF5000701B86B2A844002005E0FF1CBFB2E41E5F -:10FF6000EAE7101A80B28119B94206D82118324640 -:10FF7000404613F0BFFCA81985B2284624E62DE9B7 -:10FF8000F04100F12804407F1E4608309046431897 -:10FF9000002508884F88069ADB1E90B1C01C80B2ED -:10FFA000904212D9801AB04200DB304685B29818D0 -:10FFB0002A46414613F09EFC701B86B2A8440020DE -:10FFC00005E0FF1CBFB2E41EEAE7101A80B28119F7 -:10FFD000B94206D820443246414613F08BFCA8199A -:10FFE00085B22846F0E5401D704710B5044600F183 -:10FFF0002801C288808820F400431944904206D02A -:020000040001F9 -:10000000A28922B9228A12B9A28A904201D1002083 -:1000100010BD0888498831B1201D00F064F8002027 -:100020002082012010BD637F62880833184481B2AA -:10003000201DFFF781FCF2E70021C1810177418299 -:10004000C1758175704703881380C28942B1C28827 -:1000500022F4004300F128021A440A60C089704764 -:100060000020704710B50446808AA0F57F41FF3913 -:1000700000D0FFDFE088A082E08900B10120A075F8 -:1000800010BD4FF6FF71818200218175704710B558 -:100090000446808AA0F57F41FF3900D1FFDFA07DB3 -:1000A00028B9A088A18A884201D1002010BD012072 -:1000B00010BD8188828A914201D1807D08B10020E3 -:1000C00070470120704720F4004221F400439A4217 -:1000D00007D100F4004001F40041884201D0012022 -:1000E00070470020704730B5044600880D4620F464 -:1000F0000040A84200D2FFDF21884FF4004088432F -:100100002843208030BD70B50C00054609D0082C6E -:1001100000D2FFDF1DB1A1B2286800F044F8201D15 -:1001200070BD0DB100202860002070BD0021026864 -:1001300003E093881268194489B2002AF9D100F0CB -:1001400032B870B500260D460446082900D2FFDFFC -:10015000206808B91EE0044620688188A94202D0C0 -:1001600001680029F7D181880646A94201D10068BB -:100170000DE005F1080293B20022994209D3284408 -:10018000491B02608180216809682160016020604C -:1001900000E00026304670BD00230B608A800268B4 -:1001A0000A600160704700234360021D0181026004 -:1001B0007047F0B50F460188408815460C181E465A -:1001C000AC4200D3641B3044A84200D9FFDFA01921 -:1001D000A84200D9FFDF3819F0BD2DE9F04188466B -:1001E00006460188408815460C181F46AC4200D3CD -:1001F000641B3844A84200D9FFDFE019A84200D9A7 -:10020000FFDF70883844708008EB0400BDE8F0819F -:100210002DE9F041054600881E461746841B884696 -:10022000BC4200D33C442C8068883044B84200D99A -:10023000FFDFA019B84200D9FFDF6888304468802A -:1002400008EB0400E2E72DE9F04106881D4604466C -:10025000701980B2174688462080B84201D3C01B6F -:1002600020806088A84200D2FFDF7019B84200D910 -:10027000FFDF6088401B608008EB0600C6E730B5F2 -:100280000D460188CC18944200D3A41A40889842A5 -:1002900000D8FFDF281930BD2DE9F041C94D0446D3 -:1002A0009046A8780E46A04200D8FFDF05EB8607EF -:1002B000B86A50F8240000B1FFDFB868002816D0F3 -:1002C000304600F046F90146B868FFF73AFF0500EE -:1002D0000CD0B86A082E40F8245000D3FFDFBA488B -:1002E0004246294650F82630204698472846BDE821 -:1002F000F0812DE9F84305001E4602EB0600174683 -:100300008946C4B200952FD000218846FF2800D925 -:10031000FFDFE81C20F00300A84200D0FFDFB1455A -:1003200000D9FFDF4946DFF89C92684689F8001043 -:1003300089F8017089F8024089F8034089F804407F -:1003400089F8054089F8066089F80770414600F091 -:1003500009F9002142460F464B460098C01C20F088 -:100360000300009012B10FE00121CEE703EB8106FC -:10037000B062002006E000BFD6F828C04CF820701C -:10038000401CC0B2A042F7D30098491C00EB840087 -:10039000C9B200900829E0D3401BBDE8F88310B52E -:1003A000044603F009FC08B1102010BD2078854AEE -:1003B000618802EB800092780EE0836A53F8213066 -:1003C00043B14A1C6280A180806A50F82100A0607D -:1003D000002010BD491C89B28A42EED861800520F8 -:1003E00010BD70B505460C46084603F0E5FB08B1A4 -:1003F000102070BD082D01D3072070BD257000208E -:10040000608070BD0EB56946FFF7EBFF00B1FFDFFE -:100410006846FFF7C4FF08B100200EBD01200EBDE5 -:1004200010B50446082800D3FFDF6648005D10BD04 -:100430003EB5054600246946FFF7D3FF18B1FFDF3C -:1004400001E0641CE4B26846FFF7A9FF0028F8D079 -:100450002846FFF7E5FF001BC0B23EBD5949897829 -:10046000814201D9C0B27047FF2070472DE9F041A9 -:10047000544B062903D007291CD19D7900E00025A3 -:1004800000244FF6FF7603EB810713F801C00AE062 -:100490006319D7F828E09BB25EF823E0BEF1000FA5 -:1004A00004D0641CA4B2A445F2D833460380184695 -:1004B000B34201D100201AE7BDE8F041ECE6A0F517 -:1004C0007F43FF3B01D0082901D300207047E3E6BA -:1004D000A0F57F42FF3A0BD0082909D2394A937818 -:1004E000834205D902EB8101896A51F820007047E7 -:1004F000002070472DE9F04104460D46A4F57F41E8 -:1005000043F20200FF3902D0082D01D30720EEE6A6 -:100510002C494FF000088A78A242F8D901EB8506F1 -:10052000B26A52F82470002FF1D0274839462030A3 -:1005300050F8252020469047B16A284641F824808B -:1005400000F007F802463946B068FFF725FE0020A4 -:10055000CDE61D49403131F810004FF6FC71C01C4A -:10056000084070472DE9F843164E8846054600249A -:100570002868C01C20F0030028602046FFF7E9FF30 -:10058000315D4843B8F1000F01D0002200E02A6835 -:100590000146009232B100274FEA0D00FFF7B3FD8C -:1005A0001FB106E001270020F8E706EB8401009A5E -:1005B0008A602968641C0844E4B22860082CD7D3F8 -:1005C000EBE60000FC060020543E020070B50E462B -:1005D0001D46114600F0D4F804462946304600F086 -:1005E000D8F82044001D70BD2DE9F04190460D461D -:1005F00004004FF0000610D00027E01C20F003009C -:10060000A04200D0FFDFDDB141460020FFF77BFDB7 -:100610000C3000EB850617B112E00127EDE7614FC2 -:1006200004F10C00A9003C602572606000EB8500BD -:100630002060606813F0FFF941463868FFF763FDFA -:100640003046BDE8F0812DE9FF4F564C804681B021 -:1006500020689A46934600B9FFDF2068027A424537 -:1006600003D9416851F8280020B143F2020005B0D7 -:10067000BDE8F08F5146029800F082F886B25846E5 -:100680000E9900F086F885B27019001D87B22068B7 -:10069000A14639460068FFF754FD04001FD067806B -:1006A00025802946201D0E9D07465A4601230095A8 -:1006B000FFF764F92088314638440123029ACDF8C7 -:1006C00000A0FFF75BF92088C1193846FFF786F9CB -:1006D000D9F800004168002041F82840C7E704200D -:1006E000C5E770B52F4C0546206800B9FFDF2068CC -:1006F000017AA9420ED9426852F8251051B100235F -:1007000042F825304A880068FFF746FD216800203E -:100710000A7A08E043F2020070BD4B6853F82030BB -:1007200033B9401CC0B28242F7D80868FFF7FEFC1C -:10073000002070BD70B51B4E05460024306800B91E -:10074000FFDF3068017AA94204D9406850F82500DB -:1007500000B1041D204670BD70B5124E0546002440 -:10076000306800B9FFDF3068017AA94206D94068D5 -:1007700050F8251011B131F8040B4418204670BD13 -:1007800010B50A460121FFF7F2F8C01C20F0030063 -:1007900010BD10B50A460121FFF7E9F8C01C20F092 -:1007A000030010BD7000002070B5044600780E46AE -:1007B000012813D0072802D00B2813D10EE0A0681F -:1007C00061690578052003F085F9052D0AD07823A5 -:1007D00000220520616903F0D3F803E00520616978 -:1007E00003F078F931462046BDE8704001F016B9B3 -:1007F00010B500F13902C3799478411D64F0030407 -:100800002340C371DB070DD04B79547923404B71E2 -:100810000B79127913400B718278C9788A4200D91A -:10082000817010BD00224A710A71F5E741780129F3 -:1008300000D00C21017070472DE9F74F88B00020DF -:100840008C690D468DF80400012709781646384654 -:100850004FF007094FF0110A4FF00A0B262973D207 -:10086000DFE811F02600AF02F10209034F035A033B -:100870007303A103B603DF030C042F0449048404AB -:100880009504B404BF04DF04010529054C057B056C -:100890009605A405C405C605CF05030626067A06F7 -:1008A000B906BE06F10613078C07B10779077E0764 -:1008B00014B121781D2929D0D5F808805FEA0801F4 -:1008C00042D001208DF80400686A02228DF80820C9 -:1008D00006908DF809B0286A0390A8880028EFD008 -:1008E00098F8001091B10F2910D27DD2DFE801F005 -:1008F0007C134BDBFDFCFBFAF9F82C089EF7F600A5 -:10090000022821D124B120780C2801D00027F1E35E -:100910008DF80420AAE10520696A03F0DBF8A888B5 -:100920000728EED1204601F074F8022809D02046AD -:1009300001F06FF8032808D9204601F06AF807286B -:1009400003D20120207005E0B0E1002CB8D020785F -:100950000128D6D198F80400C11F0A2903D300BF8B -:1009600085F81CB02CE2A070D8F80010A163B8F88C -:100970000410A18798F8060084F83E000120287032 -:100980000320207046E00728BBD1002C98D02078A7 -:100990000D28B6D198F8031094F83B20C1F3C0009D -:1009A000C2F3C002104201D0062000E007208907F0 -:1009B00007D198F805100142D2D198F806100142EB -:1009C000CED194F83D2098F8051020EA0202114299 -:1009D000C6D194F83E2098F8061090430142BFD14A -:1009E00098F80400C11F00E0E8E10A29B8D2617F4D -:1009F000814201D9062075E3D8F800106160B8F88B -:100A00000410218198F80600A072012028700E20A1 -:100A1000207003208DF80400686A069004F1390004 -:100A20000290601D0390173004900BE2412890D192 -:100A3000204600F0EEFF042802D1E078C00704D180 -:100A4000204600F0E6FF0F289ED1A88CD5F80C8038 -:100A500080B24FF04009676AFFF76CFE3A460827FC -:100A600041464B460097FFF756FA0D208DF80400DB -:100A7000686A0690606A0290002101A8FFF794FE60 -:100A80002078042806D0A07F38B1012805D003289B -:100A900006D062E305202070AFE184F800A035E7BE -:100AA0001220207065E01128C1D1204600F0B1FF6E -:100AB000042802D1E078C0070FD0204600F0A9FF3B -:100AC000062805D1E078C00707D1A07F022804D00E -:100AD000204600F09EFF1128A9D107E0AAE07AE0A5 -:100AE00051E130E103E1E2E0C8E01AE0102208F150 -:100AF000010104F1480012F0FDFE607801280DD0DC -:100B000012202070E078C00703D0A07F88B30128AE -:100B10002FD085F800B08DF804B0C7E384F80090BA -:100B200027E0112890D1204600F073FF082804D058 -:100B3000204600F06EFF132886D12869D8B1686975 -:100B4000C8B104F17800102208F10101074612F043 -:100B5000D1FE2078082812D014202070E078C00739 -:100B60000FD0A07F022818D06178022912D0032864 -:100B7000CFD10420F0E300208DF8040096E0092096 -:100B8000EBE70B202870296901204870206CC1E92F -:100B900001073CE208B101286FD10B2028702969B8 -:100BA00081F80190606A4860206AC1E9020723E287 -:100BB000206CE2780068C2F34402521ED04000F07C -:100BC000010040F0800000E000200874E06A486105 -:100BD00026E20746FEE31128D0D1204600F019FF97 -:100BE0000A2802D1E078C00704D1204600F011FFA6 -:100BF0001528C3D1102208F1010104F1480012F0B8 -:100C000079FE20780A2810D0162020701220287033 -:100C100029690920487004F1580048602030886034 -:100C20001038C860206C086162E30B2020709BE2E2 -:100C30002870EFE30228A1D1204600F0EAFE042844 -:100C400004D3204600F0E5FE082809D3204600F032 -:100C5000E0FE0E2892D3204600F0DBFE12288DD253 -:100C6000A07F02288AD110208DF80400686A0690BF -:100C700098F801008DF80800F6E321E20228ABD1D4 -:100C8000204600F0C6FE002810D0204600F0C1FE2D -:100C90000128F9D0204600F0BCFE0C28F4D0042036 -:100CA0008DF8080098F801008DF80900D3E11128AB -:100CB000FCD1002CFAD020781728F7D16178E06AAF -:100CC000022912D05FF0000101EB4101182606EB6A -:100CD000C1011022405808F1010112F00BFE05205D -:100CE000696A00F089FE267010E60121ECE70B2806 -:100CF000DCD1002CDAD020781828D7D16178E06ACE -:100D000002291CD05FF0000101EB4101102202EB2F -:100D1000C1014158B8F8010008806078E16A0228F2 -:100D20000FD0002000EB4002142000EBC200095855 -:100D3000404650F8032F0A604068486039E00121BE -:100D4000E2E70120EEE71128B0D1002CAED02078E8 -:100D50001928ABD16078E16A022812D05FF0000058 -:100D600000EB40021C2000EBC2001022085808F1E2 -:100D7000010112F0BFFD0520696A00F03DFE1A2056 -:100D8000BDE00120ECE7082890D1002C8ED020781F -:100D90001A288BD1E06A98F80120017862F34701A4 -:100DA0000170E16AD8F8022041F8012FB8F8060076 -:100DB00088800520696A00F01FFE15E385F81C9005 -:100DC000F0E33078012893D11C2204F11C007168F3 -:100DD00012F0D5FDE07994F83B10C00800EAD1008C -:100DE000E17860F30001E170207F002879D120785C -:100DF00003280AD0C8073FF455AE032028708DF8A9 -:100E000004B0686A06904120A3E3607FA17888421D -:100E10003FF6F0AD02272771E179204621F0E0018D -:100E2000E171617A21F0F0016172A17A21F0F001A3 -:100E3000A172FFF7DDFC2F708DF804B0686A069090 -:100E40008DF80890FAE3307811289DD18DF8049040 -:100E5000696A0691B16800208DF814000391ADF81D -:100E6000089008466168016021898180A17A8171BA -:100E700004202070F8E23078112885D18DF8049094 -:100E8000686A0690301D02AB07C883E8070041205E -:100E9000ADF8080000208DF8140008460C21017000 -:100EA000A88CCA4680B2F7684FF04009D4F8208079 -:100EB000FFF752FC42464FF0080839464B46CDF842 -:100EC0000080FFF75CF8002101A8FFF76DFCE078D7 -:100ED00020F03E00801CE0702078052802D00F2012 -:100EE0000DE0B7E0A07F20B1012802D0032803D095 -:100EF00035E184F800A03CE684F8008006E5207027 -:100F000004E530780328A0D170680168A1664068C4 -:100F1000E0660520287044E23078032895D1706897 -:100F20000168216740686067206C58B9A07F18B1DC -:100F3000012801D0062031E185F80090FE482064A8 -:100F4000606446E385F8009043E33078022894D14A -:100F5000307900287ED1A07F02280BD00328F1D160 -:100F6000607801280BD0A07994F83A1001280AD0B3 -:100F7000F1480BE0B06800286DD0206411E0A17941 -:100F800094F83A00F2E7B0680028F5D02064E078E1 -:100F9000C00701D0012901D0E74802E0F06800282D -:100FA000EAD06064CEE78DF804B0696A0691E17812 -:100FB0005846C90709D06178022903D1A17F29B118 -:100FC000012903D0A17F032900D0082028706FE1F8 -:100FD0003178112997D1B168296209212970E27805 -:100FE0002969D2070DD081F80190206A4860606AB3 -:100FF000886004F16800C860A07F02287FF4E4AD37 -:10100000D6E54870206C486004F16800886004F1FF -:101010003800C860201D0861206B4861606B8861E2 -:101020001BE2E1783078C90701D0062100E00A21EF -:1010300088428CD1207807281DD084F800A000BFFA -:101040008DF80490686A0690286A0390ADF808A0AD -:10105000002401E0BFE02AE28DF81440032100F8EB -:10106000011B1022716812F045FC002101A8FFF756 -:101070009BFB2C624AE408202070E1E730781128BD -:10108000A8D18DF80490686A0690B068039000209B -:101090008DF814000398ADF808A0042100F8011B96 -:1010A000102204F1680112F025FC002101A8FFF7CD -:1010B0007BFB2078092801D0132020E784F800B0BA -:1010C00016E0E1783078C90701D0062100E00A2156 -:1010D0008842AED1102204F14800716812F0DEFBA4 -:1010E00010B1042028777DE3207809283FF411AD62 -:1010F0000C209DE56EE2E078C10735D0A17F012983 -:1011000002D002291BD02CE00D202870296981F81B -:1011100001B06078012809D0206A4860606A886060 -:1011200004F16800C860103008614FE5606A4860EB -:10113000206A886004F17800C8601038F4E7C0F3D2 -:10114000440114290DD24FF0006101EBB0104FEAB9 -:10115000B060E0706078012801D01020A1E4062082 -:10116000CDE66078012885D00E2061E53078092829 -:1011700086D185F800B00F208DF80400686A0690CB -:1011800070680290002101A8FFF70EFBE9E7E07804 -:10119000C00706D0A07F01281FD10F20287004208F -:1011A000FFE015202870296902204870206C4860F3 -:1011B0006078012805D004F1780088601038C86094 -:1011C0004BE104F1680088601030F8E730780228BD -:1011D000CED1307908B1287702E3102028700E2094 -:1011E000DFE030781328F7D185F800A029690820BE -:1011F000487070684860607801280DD004F168007C -:1012000088601030C860206B0861606B486104F131 -:1012100058008861A06A20E004F1780088601038E6 -:10122000F0E730780728D7D16078012819D1A17864 -:10123000A06A0844C1F1100112F0DBFB12202870F3 -:1012400029690920487004F15800486020308860FE -:101250001038C860206C086143E0C861E06A086229 -:10126000FBE01320B8E130780828B5D1102204F152 -:101270004800716812F012FB08B10B2032E72078A9 -:101280000B28EED02046FFF7B3FAA078A16A0A181F -:10129000C0F11001104612F0ACFB16202870082097 -:1012A0008DF80400686A069000206FE0686A069076 -:1012B0008DF808A0C2E1307811288DD1B06828627D -:1012C0001420287029690920487004F158004860EA -:1012D000103088601030C860606C08616078012848 -:1012E00006D004F139004861206B8861606BB4E777 -:1012F000601D4861606B8861206BAEE7307808281C -:1013000091D18DF80490686A0690286A00270390AE -:10131000ADF808A08DF814700D2100F8011B102203 -:10132000716812F0E7FA002101A8FFF73DFA2F6279 -:101330006078012804D001E0C53F02001520DEE5F9 -:101340001620287008208DF80400686A029706901D -:10135000A0788DF80C0071E150E030780B2884D132 -:10136000162028706078022802D12046FFF740FA44 -:10137000A07871680A18C0F11001104612F039FB0C -:1013800008208DF80400686A069070680290DFE714 -:1013900030780F2891D1E079C0076FD017202870DE -:1013A00009208DF80400686A069047E1307810281B -:1013B0007DD11422311D04F11C0012F0E0FAE16A23 -:1013C000208DA1F80900E16AA078C871E17901F0E7 -:1013D000030100E0F4E1E26A1172E16A627A0A73E1 -:1013E000E16AA07A81F82400212021E41920F3E0A9 -:1013F000307811285BD1B06828621A202870052047 -:10140000CFE73078032852D16078E16A022802D011 -:10141000012001E0DDE0002000EB4002142000EBA1 -:10142000C20273688A5819681160596851601B219B -:101430002970D5E9041205234B70636A4B60677805 -:10144000E36A022F01D0012700E0002707EB4707DE -:1014500000EBC7001858C1E90202686A48620898A0 -:1014600000F0F3FAFFF7B5BBD3E130780E281ED1B8 -:101470006078E26A022802D0012001E06AE10020DF -:1014800000EB4001102000EBC1000223105809328C -:10149000716810F03DFC1C202870296904204870F8 -:1014A000206A4860E06A09308860FE4887E678E094 -:1014B00030780D2875D16178E06A022901D00121C8 -:1014C00000E0002101EB4101182707EBC101A278E0 -:1014D0004058716812F00EFA6078E16A022801D073 -:1014E000012000E0002000EB400207EBC200B846FC -:1014F0000958A0780A18C0F11001104612F079FAC4 -:101500008DF80490686A0690286A00270390ADF869 -:1015100008A08DF81470062101706178E26A022932 -:1015200001D0012100E0002101EB410308EBC301E0 -:10153000401C5158102212F0DDF9002101A8FFF7DC -:1015400033F91D202F6228708DF804B0686A069068 -:101550000B208DF8080071E03178112921D18DF828 -:101560000490696A0691B16803910B21ADF80810E7 -:10157000039981F800906378E26A022B01D001237D -:1015800000E0002303EB4303102707EBC303D2580B -:101590001288A1F801206278E36A022A03D00122AE -:1015A00002E09FE01EE1002202EB4207142202EB60 -:1015B000C7029A58136841F8033F52684A605CE0DA -:1015C0002120287000208DF81400014601A8FFF7A3 -:1015D000EBF8032722E11F2028708DF804B065E6A0 -:1015E000307811287ED18DF80490686A0690B06832 -:1015F000039000208DF814000398ADF808A0082788 -:1016000007706178E26A022901D0012100E000211F -:1016100001EB41031C2101EBC301401C5158102276 -:1016200012F068F9002101A8FFF7BEF82020287009 -:101630008DF804B0686A06908DF80870314601A8EC -:10164000FFF7B2F80EE7317811294BD18DF80490ED -:10165000696A0691B16803910821ADF808100399F1 -:1016600009220A70E269127852084A70E26952F857 -:10167000013FC1F802309288CA8021781C299FD18D -:10168000242129708DF81400D8E7E078C00702D033 -:101690004FF0060C01E04FF0070C6078022809D0EB -:1016A0004FF0000000EB040101F1090105D04FF0FB -:1016B000010004E04FF00100F4E74FF000000B7868 -:1016C000204413EA0C030B7010F8092F02EA0C02F5 -:1016D000027004D14FF01B0C84F800C0D2B394F810 -:1016E00001C000E049E0BCF1010F00D093B990F8CF -:1016F00000C05FEACC7804D02CF0010707701827EF -:1017000006E05FEA8C7805D52CF0020707701E27EB -:101710002F70032794F801C0BCF1020F00D092B9DA -:1017200091F800C05FEACC7804D02CF001070F706C -:10173000172106E05FEA8C7805D52CF002070F70C0 -:101740001921217000270078D0BBCAB3C3BB1C206D -:10175000207035E002E03078122841D12520C8E41D -:10176000207801283CD00C283AD02046FFF75EF8BC -:101770000B208DF80400686A069031E031784FF054 -:101780002308112905D012203070032785F8008026 -:1017900044E08DF80490696A0691B16803918DF870 -:1017A000140002210398ADF8081005210170297F6B -:1017B0004170314601A8FEF7F7FF074685F8008023 -:1017C000012F0DD02AE08DF80400686A06900320EE -:1017D0008DF80800287F8DF809000020287712E096 -:1017E000287F80B11D202070222028708DF804B041 -:1017F000686A069002208DF80800314601A8FEF7BD -:10180000D3FF07460AE00CB1FE2020709DF80400CB -:1018100020B1002101A8FEF7C7FF2BE40BB038462A -:10182000BDE8F08FF0B587B00C464E6900218DF809 -:10183000041001202578034602274FF0070C85B1DC -:10184000012D54D0022D3AD1FE2030708DF8003099 -:10185000606A059003208DF80400207E8DF8050055 -:1018600064E02179012926D002292DD0032928D02E -:10187000042924D1B17F022921D131780D1F042DF3 -:1018800004D30A3D032D01D31D2918D12189022932 -:1018900015D300BF8DF80470237020899DF80410C3 -:1018A000884201E0BD3F020017D20A208DF80000F7 -:1018B000606A059057E070780128EBD0052007B0EA -:1018C000F0BD1D203070E5E771780229F6D131783E -:1018D0000C29F4D18DF804C0DEE71120083402F899 -:1018E000040B94E80B0082E80B000320E7E715786F -:1018F000112DE4D18DF800C0656A059595680295B3 -:101900008DF8101094F804E0BEF1010F13D0BEF171 -:10191000020F2DD0BEF1030F1CD0BEF1040FCED1AB -:10192000ADF804700E202870207E68700021684693 -:10193000FEF73AFF0CE0ADF804700B202870207E13 -:10194000002100F01F0068706846FEF72DFF377019 -:101950000020B4E7ADF804708DF810300520287031 -:10196000207E6870277011466846FEF71DFFA6E7C7 -:10197000ADF804C02B70207F6870607F00F001001C -:10198000A870A07F00F01F00E870E27F2A71C007F6 -:101990001CD094F8200000F00700687194F8210032 -:1019A00000F00700A87100216846FEF7FDFE2868D8 -:1019B000B063A888B087A87986F83E00A06940780F -:1019C00070772879B0700D203070C1E7A971697106 -:1019D000E9E700B587B005280CD101208DF800009B -:1019E0008DF80400002005918DF805000146684639 -:1019F000FEF7DAFE07B000BD70B50C46054602F0F2 -:101A000069F821462846BDE870407823002201F09D -:101A1000B7BF08B1007870470C20704770B50C0054 -:101A200005784FF000010CD021702146F3F767FBD9 -:101A300072482178405D884201D1032070BD0220A8 -:101A400070BDF3F75CFB002070BD027B032A05D05C -:101A500000220A704B780B2B02D003E00420704761 -:101A60000A770A62027B9300521C0273C150032062 -:101A70007047F0B587B00F4605460124287B05EB7B -:101A8000800050F8046C7078411E0C290AD25B4922 -:101A90003A46123101EB8000314650F8043C2846AA -:101AA000984704460CB1012C11D1287B401E10F040 -:101AB000FF00287301D00324E0E70C208DF800001C -:101AC000706A0590002101966846FFF7A7FF032C76 -:101AD000D4D007B02046F0BD70B515460A4604467E -:101AE00029461046FFF7C5FF064674B12078FE2848 -:101AF0000BD1207E30B100202870294604F10C0063 -:101B0000FFF7B7FF2046FEF791FE304670BD7047E5 -:101B100070B50E460446882111F08DFF0225012E76 -:101B200003D0022E04D0052070BD0120607000E0BB -:101B300065702046FEF77AFEA577002070BD28B1BB -:101B4000027E1AB10A4600F10C01C5E70120704778 -:101B500010B5044686B0052001F0BCFF2078FE28B1 -:101B600006D000208DF8000069462046FFF7E7FF09 -:101B700006B010BD7FB50E4600218DF80C104178DF -:101B80000B2903D00C2903D0002405E0846900E070 -:101B900044690CB1217E91B16D4601462846FFF79C -:101BA00054FF032809D1324629462046FFF794FF07 -:101BB0009DF80C10002900D0042004B070BD04F181 -:101BC0000C05EAE710B590B00C4607900B480421CD -:101BD000801E08900A488DF8191009900F926946E6 -:101BE00006A8FFF7C7FF002805D11022204601995B -:101BF00011F080FE002010B010BD0000A63E0200D3 -:101C0000BD3F020070B50D46040011D085B1210121 -:101C1000284611F0EEFE10224E49284611F06AFEC9 -:101C20004C4801210838018044804560002070BD87 -:101C3000012070BD70B5474E00240546083E10E0F7 -:101C40007068AA7B00EB0410817B914208D1C17BB4 -:101C5000EA7B914204D10C22294611F01FFE30B1DB -:101C6000641C30888442EBDB4FF0FF3070BD2046AF -:101C700070BD70B50D46060006D02DB1FFF7DAFF36 -:101C8000002803DB401C14E0102070BD314C083CE0 -:101C900020886288411C914201D9042070BD61688E -:101CA000102201EB0010314611F024FE2088401C68 -:101CB00020802870002070BD70B514460D0018D02B -:101CC000BCB10021A170022802D0102811D105E07A -:101CD000288870B10121A170108008E02846FFF724 -:101CE000A9FF002805DB401CA070A88920800020E7 -:101CF00070BD012070BD70B5054614460E000BD0B6 -:101D000000203070A878012808D005D91149A1F128 -:101D100008010A8890420AD9012070BD24B12878B0 -:101D200020702888000A5070022008700FE064B10B -:101D30004968102201EB00112046103911F0DAFD3C -:101D4000287820732888000A6073102030700020E3 -:101D500070BD00007C0000202DE9F04190460C464B -:101D600007460025FE48072F00EB881607D2DFE85C -:101D700007F00707070704040400012500E0FFDF60 -:101D800006F81470002D13D0F548803000EB880160 -:101D900091F82700202803D006EB4000447001E0B2 -:101DA00081F8264006EB44022020507081F827403D -:101DB000BDE8F081F0B51F4614460E460546202AC0 -:101DC00000D1FFDFE649E648803100EB871C0CEBD1 -:101DD000440001EB8702202E07D00CEB460140782F -:101DE0004B784870184620210AE092F82530407858 -:101DF00082F82500F6E701460CEB410005704078BB -:101E0000A142F8D192F82740202C03D00CEB4404D7 -:101E1000637001E082F826300CEB410420236370EC -:101E200082F82710F0BD30B50D46CE4B4419002284 -:101E3000181A72EB020100D2FFDFCB48854200DDA9 -:101E4000FFDFC9484042854200DAFFDFC548401C39 -:101E5000844207DA002C01DB204630BDC148401C1B -:101E6000201830BDBF48C043FAE710B504460168EA -:101E7000407ABE4A52F82020114450B10220084452 -:101E800020F07F40F0F767FE94F90810BDE810409D -:101E9000C9E70420F3E72DE9F047B14E803696F804 -:101EA0002D50DFF8BC9206EB850090F8264034E018 -:101EB00009EB85174FF0070817F81400012806D022 -:101EC00004282ED005282ED0062800D0FFDF01F0F0 -:101ED000E5F8014607EB4400427806EB850080F800 -:101EE000262090F82720A24202D1202280F8272025 -:101EF000084601F0DEF82A4621460120FFF72CFFB4 -:101F00009B48414600EB041002682046904796F833 -:101F10002D5006EB850090F82640202CC8D1BDE856 -:101F2000F087022000E003208046D0E710B58C4CFB -:101F30002021803484F8251084F8261084F8271096 -:101F4000002084F8280084F82D0084F82E10411E0B -:101F5000A16044F8100B2074607420736073A07348 -:101F60008449E07720750870487000217C4A103C55 -:101F700002F81100491CC9B22029F9D30120F0F759 -:101F8000D8FC0020F0F7D5FC012084F82200F0F7FF -:101F9000A1FF7948F0F7ADFF764CA41E207077487A -:101FA000F0F7A7FF6070BDE81040F0F74FBC10B528 -:101FB000F0F771FC6F4CA41E2078F0F7B3FF607847 -:101FC000F0F7B0FFBDE8104001F0A0B82020704746 -:101FD0002DE9F34F624E0025803606EB810A89B069 -:101FE0009AF82500202822D0691E029160490095A8 -:101FF00001EB00108146D0E90112C0680391CDE9E0 -:102000000420B08BADF81C00B07F8DF81E009DF849 -:102010001500C8B10227554951F820400399E2192B -:10202000114421F07F41019184B102210FE0012090 -:10203000F0F77FFC0020F0F77CFCF0F74AFC01F0A1 -:1020400065F886F82F508AE00427E4E700218DF830 -:102050001810022801D001281BD103983919014416 -:102060000998081A20F07F4033280BD903208DF8F7 -:1020700015000398C4F13201401A20F07F40322449 -:1020800003900CE096F8240018B901F0A9F9002893 -:102090004DD0322C03D214B101F02CF801E001F044 -:1020A00035F8344A107820B393465278039B121BBC -:1020B00000219DF81840984601281BD0032819D00C -:1020C0005FF000008DF81E00002A04DD981A0390CE -:1020D00001208DF818009DF81C0000B10221039822 -:1020E000274A20F07F40039003AB099801F01AF8CB -:1020F00010B110E00120E5E79DF81D0018B99BF82C -:102100000000032812D08DF81C50CDF80C808DF8FB -:1021100018408DF81E509DF8180058B103980123FF -:10212000C11900221846F0F757FC06E000200BB05A -:10213000BDE8F08F0120F0F7FCFB99F90C2001239A -:1021400000200199F0F748FC012086F82F008AF85A -:102150002850034820226946803011F010FC11E01D -:1021600044090020FF7F841E0020A107E83E0200F2 -:10217000440700208E0000202F380100971E010028 -:10218000FFFF3F000120D2E72DE9F05FDFF8408438 -:10219000064608EB860090F82550202D1FD0A8F1A8 -:1021A00080002C4600EB8617A0F50079DFF824B4F8 -:1021B00005E0A24607EB4A004478202C0AD0F0F74D -:1021C00057FC09EB04135A4601211B1D00F0AAFF1E -:1021D0000028EED0AC4202D0334652461EE0FE4804 -:1021E00008B1AFF30080F0F743FC98F82F206AB1F4 -:1021F000D8F80C20411C891A0902CA1701EB126198 -:102200000912002902DD0020BDE8F09F3146FFF7EA -:10221000DFFE08B10120F7E733462A4620210420DB -:10222000FFF7C8FDEFE72DE9F041E94C2569F0F72C -:102230001FFC401B0002C11700EB1160001200D40C -:10224000FFDF94F8220000B1FFDF012784F822703D -:1022500094F82E00202800D1FFDF94F82E60202073 -:1022600084F82E00002584F82F5084F8205084F83C -:102270002150DA4825600078022833D0032831D075 -:1022800000202077A068401C05D04FF0FF30A060F0 -:102290000120F0F74EFB0020F0F74BFBF0F749FC74 -:1022A000F0F741FCF0F715FB10F02AFDCC48056073 -:1022B00005604FF0E0214FF40040B846C1F88002BD -:1022C000F0F7D1FC94F82D703846FFF75DFF002839 -:1022D000FAD0BF48803800EB871010F816000228AB -:1022E00002D006E00120CCE73A4631460620FFF74F -:1022F00033FD84F8238004EB870090F82600202823 -:1023000004D0B648801E4078F0F712FE207F0028E7 -:1023100003D0F0F7FEFB2577657749E50146AC4829 -:1023200010B590F82D200024803800EB821000BFFB -:1023300010F814302BB1641CE4B2202CF8D3202008 -:1023400010BDA84800EB0410016021460120FFF7F2 -:1023500003FD204610BD10B5012801D0032800D18F -:1023600071B39B4A92F82D30994C0022803C04EBCB -:10237000831300BF13F812400CB1082010BD521C8B -:10238000D2B2202AF6D3954A48B1022807D00729AD -:1023900016D2DFE801F01506080A0C0E1000002125 -:1023A0000AE01B2108E03A2106E0582104E07721E9 -:1023B00002E0962100E0B52151701070002010BDA0 -:1023C000072010BD854810B54078F0F7C4FB80B2F7 -:1023D00010BD10B5202811D27D4991F82D30A1F102 -:1023E000800202EB831414F810303BB191F82D30C9 -:1023F00002EB831212F81020012A01D0002010BD38 -:1024000091F82D2001460020FFF7A6FC012010BD09 -:1024100010B5F0F72DFBBDE81040F0F79CBB2DE99F -:10242000F0410E466A4F01782025803F0C4607EBAD -:10243000831303E0254603EB45046478944202D0FD -:10244000202CF7D108E0202C06D0A14206D103EBC6 -:1024500041014978017007E00020A9E403EB440042 -:1024600003EB4501407848705F4F7EB127B10021F2 -:1024700040F2DA30AFF300803078A04206D127B1C5 -:10248000002140F2DD30AFF30080357027B100212C -:1024900040F2E230AFF30080012089E410B54268D9 -:1024A0000B689A1A1202D41702EB1462121216D495 -:1024B000497A91B1427A82B94C4A006852F82110A7 -:1024C000126819441044001D891C081A0002C11723 -:1024D00000EB11600012322801DB012010BD00204A -:1024E00010BD2DE9F047814639483E4E00EB810092 -:1024F000984690F825402020107006F5007015468B -:1025000000EB81170BE000BF06EB04104946001DED -:10251000FFF7C4FF28B107EB44002C704478202C4F -:10252000F2D1297888F8001013E000BF06EB0415FB -:10253000291D4846FFF7B2FF68B988F80040A97B1B -:1025400099F80A00814201D80020E8E407EB440032 -:102550004478202CEAD10120E1E42DE9FC410E462B -:10256000074600241F4D08E09DF8000005EB001011 -:102570008168384600F0EAFD01246B4601AA314625 -:102580003846FFF7AEFF0028EED02046BDE8FC81BC -:1025900070B504460E4801258038A54300EB841130 -:1025A00000EB8510402211F0A5F90F4E26B1002155 -:1025B00040F25C40AFF30080054800EB850100EB82 -:1025C0008400D0F82500C1F82500AEB100210FE04D -:1025D000C4090020FFFF3F00000000008E00002023 -:1025E00000F500404407002000000000E83E020023 -:1025F0004FF48C60AFF30080284670BD2DE9FC419C -:102600008446FF481546089C00EB85170E4617F8D0 -:102610001400012803D0022801D00020B6E70B46A1 -:10262000F84A0121604600F07DFDA8B101AB6A4681 -:1026300029463046FFF755FF70B1F1489DF8042058 -:102640009DF80010803000EB85068A4208D02B46AA -:102650000520FFF7AFFB0BE02A462146042014E0DB -:10266000202903D007EB4100407801E096F82500CF -:1026700007EB440148709DF80000202809D007EBC3 -:10268000400044702A4621460320FFF765FB0120E5 -:102690007CE706F8254F0120F070F3E7DA4901EBFB -:1026A0000010001DFFF7E1BB7CB51D461346044634 -:1026B0000E4600F1080221461846F0F759FA94F93F -:1026C00008000F2804DD1F3820722068401C20609D -:1026D00096B10220CD4951F8261046182068694667 -:1026E000801B20F07F40206094F908002844C01C23 -:1026F0001F2803DA012009E00420EBE701AAF0F724 -:1027000037FA9DF8040010B10098401C0090009921 -:10271000206831440844C01C20F07F4060607CBDCC -:102720002DE9FE430C4606460978607990722079BF -:1027300098461546507241B1B148803090F82E103D -:1027400020290AD00069401D0BE0D4E90223217939 -:1027500003B02846BDE8F043A6E7AD484178701DB8 -:10276000084420F07F47217900222846A368FFF71C -:102770009BFF3946284600F0E9FCD4E90232217972 -:102780006846FFF791FF41462846019CFFF7E5FEAA -:102790002B4622460021304600F0C4FC002803D11D -:1027A0003146284600F0D2FCBDE8FE832DE9FE4FFD -:1027B000814600F087FC38B15FF0000799F800000F -:1027C00020B10020BDE8FE8F0127F7E78C4D914C2A -:1027D0004FF0000A803524B1002140F2D340AFF31E -:1027E000008095F82D8085F823A0002624B10021D3 -:1027F0004FF49B60AFF300801FB94046FFF7C8FE5F -:10280000804624B100214FF49C60AFF30080F0F7C4 -:102810002FF943466A464946FFF782FF24B100215B -:1028200040F2E640AFF3008095F82E0020280CD04F -:1028300029690098401A0002C21700EB12600012CA -:1028400003D5684600F082FC012624B100214FF434 -:102850009E60AFF3008095F823000028BBD124B11F -:10286000002140F2F640AFF30080F0F701F96B462B -:10287000644A002100F056FC0028A3D027B9414645 -:102880006846FFF76AFE064326B16846FFF7EDFA91 -:10289000C9F8080024B1002140F20950AFF30080CC -:1028A00001208FE72DE9FF5F8A46814600F00AFC90 -:1028B000534C803410B39AF80000002710B101285F -:1028C00000D0FFDF534D25B1002140F27F50AFF320 -:1028D00000800120A84600905FEA080604D000218D -:1028E00040F28750AFF30080009800F0E2FB94F8CC -:1028F0002D50002084F8230067B119E094F82E00D1 -:102900000127202800D1FFDF9AF800000028D9D045 -:10291000FFDFD7E72846FFF73BFE054626B100213B -:1029200040F29150AFF3008094F823000028D3D1F7 -:1029300026B1002140F29B50AFF30080F0F798F8E9 -:1029400083462B4601AA5146FFF7EAFE5FEA0608D6 -:1029500004D0002140F2A250AFF300803B462A464B -:1029600001A95846CDF80090FFF748FE064604EB53 -:10297000850090F828B0B8F1000F04D0002140F293 -:10298000A950AFF3008000F089FB0090B8F1000F70 -:1029900004D0002140F2AF50AFF3008094F8230040 -:1029A000002899D1B8F1000F04D0002140F2B750AF -:1029B000AFF3008014490DF1040C01EB09109CE801 -:1029C0000E0000F1040080E80E002EB35FEA080656 -:1029D00004D0002140F2C450AFF300803BEA07006E -:1029E00020D094F82E0020281CD126B1002140F2DE -:1029F000C950AFF300802846FFF7C6FB90B90CE042 -:102A000044090020FFFF3F0044070020E83E020089 -:102A10008E0000200000000010E09AF80000D8B3FB -:102A2000012849D0B8F1000F04D0002140F2E6504F -:102A3000AFF30080284600F02AFB01265FEA080574 -:102A400004D0002140F2EF50AFF30080009800F076 -:102A500030FB25B1002140F2F350AFF300808EB17E -:102A600094F82D0004EB800090F82600202809D06F -:102A700025B1002140F2FA50AFF30080F9484078C8 -:102A8000F0F756FA25B1002140F2FF50AFF3008075 -:102A900004B03046BDE8F09FFFE7B8F1000F04D066 -:102AA000002140F2D150AFF3008094F82D20494628 -:102AB0000420FFF751F9C0E7002E3FF40DAF0021CD -:102AC00040F2DC50AFF3008006E72DE9F84FE64D09 -:102AD000814695F82D004FF00008E44C4FF0010BB3 -:102AE000474624B1002140F20D60AFF30080584604 -:102AF00000F0DFFA85F8237024B1002140F2126063 -:102B0000AFF3008095F82D00FFF742FD064695F8DB -:102B1000230028B1002CE4D000214FF4C3604BE027 -:102B200024B1002140F21C60AFF30080CE48803811 -:102B300000EB861111F81900032856D1334605EB36 -:102B4000830A4A469AF82500904201D1012000E00C -:102B5000002000900AF125000021FFF760FC0146EB -:102B60000098014203D001228AF82820AF77E1B310 -:102B700024B1002140F22160AFF300803246494683 -:102B80000120FFF7E9F89AF828A024B1002140F2CB -:102B90002C60AFF3008000F081FA834624B100215D -:102BA00040F23160AFF3008095F8230038B1002C7B -:102BB00097D0002140F23560AFF3008091E7BAF181 -:102BC000000F07D095F82E00202803D13046FFF7DC -:102BD000DBFAE0B124B1002140F24960AFF300809C -:102BE000304600F054FA4FF0010824B1002140F2C1 -:102BF0005260AFF30080584600F05BFA24B1002128 -:102C000040F25660AFF300804046BDE8F88F002CDC -:102C1000F1D0002140F24460AFF30080E6E70020ED -:102C2000EFF760BE0120EFF75DBE8E480078704779 -:102C30002DE9F0418C4C94F82E0020281FD194F8F7 -:102C40002D6004EB860797F82550202D00D1FFDF7B -:102C50008549803901EB861000EB4500407807F884 -:102C6000250F0120F87084F82300294684F82E509F -:102C7000324602202234FFF76FF8002020700CE467 -:102C80002DE9F0417A4E784C012538B1012821D048 -:102C9000022879D003287DD0FFDFF0E700F02AFA80 -:102CA000FFF7C6FF207E00B1FFDF84F8215000202F -:102CB000EFF73FFEA168481C04D00123002218460C -:102CC000EFF78AFE14F82E0F217806EB01110A683F -:102CD000012154E0FFF7ACFF0120EFF72AFE94F842 -:102CE000210050B1A068401C07D014F82E0F2178A5 -:102CF00006EB01110A68062141E0207EDFF86481BD -:102D0000002708F10208012803D002281ED0FFDFA7 -:102D1000B5E7A777EFF7FDFE98F80000032801D18B -:102D200065772577607D534951F8200094F820108D -:102D300051B948B161680123091A00221846EFF71A -:102D40004BFE022020769AE7277698E784F82050F9 -:102D500000F0D0F9A07F50B198F80100616801231C -:102D6000091A00221846EFF737FE257600E027768D -:102D700014F82E0F217806EB01110A680021BDE836 -:102D8000F041104700E005E036480078BDE8F0412A -:102D9000F0F7CEB8FFF74CFF14F82E0F217806EBB2 -:102DA00001110A680521EAE710B52F4C94F82E00AE -:102DB000202800D1FFDF14F82E0F21782C4A02EBD7 -:102DC00001110A68BDE81040042110477CB5264C6B -:102DD000054694F82E00202800D1FFDFA068401C93 -:102DE00000D0FFDF94F82E00214901AA01EB00106A -:102DF000694690F90C002844EFF7BAFE9DF90400EB -:102E00000F2801DD012000E00020009908446168DE -:102E1000084420F07F41A16094F82100002807D0E9 -:102E200002B00123BDE8704000221846EFF7D4BD80 -:102E30007CBD30B5104A0B1A541CB3EB940F1FD352 -:102E4000451AB5EB940F1BD3934203D9101A4318BC -:102E50005B1C15E0954211D9511A0844401C4342AD -:102E60000EE000008C000020C409002000000000DB -:102E700044070020E83E0200FF7F841EFFDF00239E -:102E8000184630BD0123002201460220EFF7A4BD01 -:102E90000220EFF74EBDEFF7EBBD2DE9FC47B14C3B -:102EA000054694F82E00202800D1FFDF642D58D36A -:102EB000AD4A0021521B71EB010052D394F82E2031 -:102EC000A0462046DFF8A49290F82D7009EB02147A -:102ED000D8F8000001AA28446946EFF749FE9DF999 -:102EE0000400002802DD0098401C0090A0680099B2 -:102EF00062684618B21A22F07F42B2F5800F30D2D3 -:102F000008EB8702444692F82520202A0AD009EBD4 -:102F100002125268101A0002C21700EB126000126F -:102F200088421EDBA068401C10D0EFF7A1FDA1680D -:102F3000081A0002C11700EB11600012022810DD10 -:102F40000120EFF7F6FC4FF0FF30A0602068284426 -:102F5000206026F07F402061012084F82300BDE836 -:102F6000FC870020FBE72DE9F0477E4C074694F8EC -:102F70002D00A4F1800606EB801010F8170000B9B0 -:102F8000FFDF94F82D50A046794C24B1002140F683 -:102F90006500AFF3008040F6710940F67A0A06EB4F -:102FA000851600BF16F81700012818D0042810D085 -:102FB00005280ED006280CD01CB100214846AFF3DE -:102FC000008020BF002CEDD000215046AFF30080E0 -:102FD000E8E72A4639460120FEF7BEFEF2E74FF049 -:102FE000010A4FF00009454624B1002140F6810056 -:102FF000AFF30080504600F05CF885F8239024B1D0 -:10300000002140F68600AFF3008095F82D00FFF711 -:10301000BFFA064695F8230028B1002CE4D0002121 -:1030200040F68C001FE024B100214FF40960AFF39B -:10303000008005EB860000F1270133463A46263032 -:10304000FFF7EDF924B1002140F69400AFF30080C2 -:1030500000F024F8824695F8230038B1002CC3D044 -:10306000002140F69A00AFF30080BDE785F82D609F -:10307000012085F82300504600F01BF8002C04D0F6 -:10308000002140F6A700AFF30080BDE8F087354986 -:1030900081F82D00012081F82300704710B53548D4 -:1030A00008B1AFF30080EFF3108000F0010072B6BA -:1030B00010BD10B5002804D12F4808B1AFF300802F -:1030C00062B610BD2D480068C005C00D10D0103884 -:1030D00040B2002806DA00F00F0000F1E02090F87E -:1030E000140D03E000F1E02090F80004400970475F -:1030F0000820704710B51B4C94F82400002804D118 -:10310000F8F752FB012084F8240010BD10B5154CCF -:1031100094F82400002804D0F8F76FFB002084F80E -:10312000240010BD10B51C685B68241A181A24F01E -:103130007F4420F07F40A14206D8B4F5800F03D22F -:10314000904201D8012010BD002010BDD0E900320E -:10315000D21A21F07F43114421F07F41C0E90031B0 -:1031600070470000C4090020FF1FA107440700208A -:1031700000000000000000000000000004ED00E07E -:103180002DE9F041044680074FF000054FF001069D -:1031900004D55D480560066024F00204E0044FF0A9 -:1031A000FF3705D559484660C0F8087324F48054A9 -:1031B000600003D55648056024F08044E0050FD533 -:1031C0005448C0F80052C0F8087353490D60091DF7 -:1031D0000D60514A04210C321160066124F48074A0 -:1031E000A00409D54D484660C0F80052C0F80873E5 -:1031F0004B48056024F40054C4F38030C4F3C0315C -:10320000884200D0FFDF14F4404F14D04548466098 -:10321000C0F8087344488660C0F80052C0F80873CC -:1032200042490D600A1D16608660C0F808730D6083 -:10323000166024F4404420050AD53D484660866067 -:10324000C0F80873C0F848733A48056024F4006475 -:103250000FF030FD3848044200D0FFDFBDE8F081B8 -:1032600070B520250022134620FA02F1C90719D0B3 -:1032700051B201F01F060124B4404E09B60006F118 -:10328000E026C6F88041C6F88042002906DA01F03F -:103290000F0101F1E02181F8143D03E001F1E0218B -:1032A00081F80034521CAA42DED370BD70B5234CA5 -:1032B0000D462060FFF764FF2068FFF7D1FF284626 -:1032C000F8F767FB0FF000F900F0D7F80FF0F2FC09 -:1032D0000FF037FCEFF7FEFDBDE870400FF0A2B92C -:1032E00010B5164C2068FFF74BFF2068FFF7B8FFBA -:1032F0000FF0E0FCF8F707FC0020206010BD0F483D -:10330000006870470A207047FC1F004000C0004062 -:1033100004E50140008000400485004000D00040EA -:1033200004D5004000E0004000F0004000F50040FF -:1033300000B0004008B50040FEFF0FFD90000020E7 -:1033400070B522490A680AB30022154601244B6869 -:103350005B1C4B600C2B00D34D600E7904FA06F316 -:103360000E681E420FD0EFF3108212F0010272B607 -:1033700000D001220C689C430C6002B962B6496817 -:103380000160002070BD521C0C2AE0D3052070BDE6 -:103390004FF0E0214FF48000C1F800027047EFF3D6 -:1033A000108111F0010F72B64FF0010202FA00F223 -:1033B0000648036842EA0302026000D162B6E7E70A -:1033C0000248002101604160704700009400002025 -:1033D000012081070860704701208107486070471D -:1033E00012480068C00700D0012070470F48001F36 -:1033F0000068C00700D0012070470C480830006802 -:10340000C00700D00120704708481030006870479E -:1034100006490C310A68D20306D5096801F0030198 -:10342000814201D101207047002070470C04004008 -:103430002DE9F04115460E460446002700F0E7F856 -:10344000A84215D3002341200FE000BF94F842208A -:10345000A25CF25494F84210491CB1FBF0F200FB5C -:1034600012115B1C84F84210DBB2AB42EED3012791 -:1034700000F0D9F83846BDE8F081704910B58020D9 -:1034800081F800046E49002081F8420081F8410073 -:10349000433181F8420081F84100433181F8420014 -:1034A00081F8410067480FF057FA6648401C0FF05A -:1034B00053FAEFF7E7FBBDE8104000F0B4B8402046 -:1034C00070475F4800F0A3B80A4601465C48AFE782 -:1034D000402070475A48433000F099B80A460146E8 -:1034E00057484330A4E7402101700020704710B5D1 -:1034F00004465348863000F08AF82070002010BD42 -:103500000A4601464E4810B58630FFF791FF08B1D4 -:10351000002010BD42F2070010BD70B50C460546F4 -:10352000412900D9FFDF48480068103840B200F058 -:1035300050F8C6B20D2000F04CF8C0B2864203D25B -:10354000FFDF01E0EFF7EEFB224629463C48FFF79C -:103550006FFF0028F6D070BD2DE9F041394F0025EE -:1035600006463F1D57F82540204600F041F810B3AD -:103570006D1CEDB2032DF5D33148433000F038F81F -:10358000002825D02E4800F033F8002820D02C4801 -:10359000863000F02DF800281AD0EFF799FB294863 -:1035A0000FF0E2F9B0F5005F00D0FFDFBDE8F041B9 -:1035B00024480FF0EFB994F841004121265414F843 -:1035C000410F401CB0FBF1F201FB12002070D3E769 -:1035D00051E7002806DA00F00F0000F1E02090F833 -:1035E000140D03E000F1E02090F80004400970475A -:1035F00010F8411F4122491CB1FBF2F302FB1311E9 -:103600004078814201D1012070470020704710F8B6 -:10361000411F4078814201D3081A02E0C0F1410005 -:103620000844C0B2704710B506480FF09DF9002855 -:1036300003D1BDE81040EFF736BB10BD0DE000E050 -:10364000F40900209C00002004ED00E016490878F1 -:103650004A78401CC0B2904205D0144B01221A6037 -:10366000BFF34F8F087070472DE9F0410E4C4FF0BB -:10367000E02600BFEFF7DCFB20BF40BF20BF67782C -:1036800020786070D6F80052EDF737FE854305D1FB -:10369000D6F8040210B92078B842EBD0EFF7C3FB9C -:1036A0000020BDE8F0810000AC00002018050240B9 -:1036B0002DE9F041012528034FF0E0210026C1F853 -:1036C00080011E4CC4F800610C2000F02CF81C484E -:1036D00001680268C94341F3001142F01002026020 -:1036E000C4F804532560491C00E020BFD4F8002131 -:1036F000002AFAD019B9016821F0100101601148BF -:1037000007686560C4F80853C4F800610C2000F035 -:103710000AF83846BDE8F08110B50446FFF7C8FF47 -:103720002060002010BD00F01F02012191404009DF -:10373000800000F1E020C0F88012704700C0004017 -:1037400010ED00E008C500402DE9F047FF4C0646AB -:10375000FF21A06800EB061211702178FF2910D01C -:103760004FF0080909EB011109EB06174158C05940 -:1037700000F0F4F9002807DDA168207801EB0611BC -:1037800008702670BDE8F08794F8008045460DE08B -:10379000A06809EB05114158C05900F0DFF9002875 -:1037A00006DCA068A84600EB08100578FF2DEFD1D5 -:1037B000A06800EB061100EB08100D700670E1E741 -:1037C000F0B5E24B0446002001259A680C269B7850 -:1037D0000CE000BF05EB0017D75DA74204D106EB54 -:1037E0000017D7598F4204D0401CC0B28342F1D891 -:1037F000FF20F0BD70B5FFF74EFBD44C08252278B2 -:10380000A16805EB0212895800F0A8F9012808DD2B -:103810002178A06805EB01114058BDE87040FFF722 -:1038200031BBFFF702FABDE87040EFF781BB2DE92D -:10383000F041C64C2578FFF72EFBFF2D6ED04FF0E0 -:103840000808A26808EB0516915900F087F90228CC -:10385000A06801DD80595DE000EB05110978217059 -:10386000022101EB0511425C5AB1521E42548159AA -:1038700001F5800121F07F4181512846FFF764FF67 -:1038800034E00423012203EB051302EB051250F888 -:1038900003C0875CBCF1000F10D0BCF5007F10D9CD -:1038A000CCF3080250F806C00CEB423C2CF07F4CE5 -:1038B00040F806C0C3589A1A520A09E0FF21815401 -:1038C0000AE0825902EB4C3222F07F428251002200 -:1038D00042542846FFF738FF0C21A06801EB051180 -:1038E0004158E06850F82720384690472078FF2854 -:1038F00014D0FFF7D0FA2278A16808EB02124546EF -:10390000895800F02BF9012893DD2178A06805EB98 -:1039100001114058BDE8F041FFF7B4BABDE8F081AD -:10392000F0B51D4614460E460746FF2B00D3FFDFB9 -:10393000A00700D0FFDF8548FF210022C0E9024731 -:10394000C57006710170427082701046012204E059 -:1039500002EB0013401CE154C0B2A842F8D3F0BD02 -:1039600070B57A4C064665782079854200D3FFDF32 -:10397000E06840F825606078401C6070284670BDA3 -:103980002DE9FF5F1D468B460746FF24FFF783FAAC -:10399000DFF8B891064699F80100B84200D8FFDF79 -:1039A00000214FF001084FF00C0A99F80220D9F8D5 -:1039B00008000EE008EB0113C35CFF2B0ED0BB42E6 -:1039C00005D10AEB011350F803C0DC450CD0491CAB -:1039D000C9B28A42EED8FF2C02D00DE00C46F6E7C1 -:1039E00099F803108A4203D1FF2004B0BDE8F09F8C -:1039F0001446521C89F8022008EB04110AEB041249 -:103A0000475440F802B00421029B0022012B01EB35 -:103A100004110CD040F801204FF4007808234FF037 -:103A2000020C454513D9E905C90D02D002E0455005 -:103A3000F2E7414606EB413203EB041322F07F42EA -:103A4000C250691A0CEB0412490A81540BE005B903 -:103A5000012506EB453103EB041321F07F41C150F2 -:103A60000CEB0411425499F800502046FFF76CFE0D -:103A700099F80000A84201D0FFF7BCFE3846B4E731 -:103A800070B50C460546FFF706FA0646214628465D -:103A9000FFF796FE0446FF281AD02C4D082101EBB3 -:103AA0000411A8684158304600F058F800F58050DD -:103AB000C11700EBD14040130221AA6801EB0411A9 -:103AC000515C09B100EB4120002800DC012070BDF1 -:103AD000002070BD2DE9F04788468146FFF770FE53 -:103AE0000746FF281BD0194D2E78A868314634466A -:103AF00005E0BC4206D0264600EB06121478FF2CE7 -:103B0000F7D10CE0FF2C0AD0A6420CD100EB01103B -:103B100000782870FF2804D0FFF76CFE03E0002037 -:103B200030E6FFF7B5F941464846FFF7A9FF012304 -:103B3000A968024603EB0413FF20C854A878401E6E -:103B4000B84200D1A87001EB041001E0C00A0020C7 -:103B500001EB061100780870104613E6081A0002FF -:103B6000C11700EB116000127047000070B50446E9 -:103B7000A0F500002D4EB0F1786F02D23444A4F5C8 -:103B800000042B48844201D2012500E0002500F00A -:103B900043F848B125B9B44204D32648006808E088 -:103BA000012070BD002070BD002DF9D1B442F9D3C1 -:103BB00021488442F6D2F3E710B50446A0F5000090 -:103BC000B0F1786F03D219480444A4F5000400F062 -:103BD00023F84FF0804130B11648006804E08C4271 -:103BE00004D2012003E014488442F8D2002080F07F -:103BF000010010BD10B520B1FFF7DEFF08B10120B4 -:103C000010BD002010BD10B520B1FFF7AFFF08B107 -:103C1000012010BD002010BD0848094900688842F5 -:103C200001D10120704700207047000000000020F3 -:103C3000005002002000002008000020B0000020FA -:103C4000BEBAFECA0548064A0168914201D1002168 -:103C5000016004490120086070470000B0000020A6 -:103C6000BEBAFECA40E501405348002101704170D0 -:103C700010218170704770B5054616460C4602202B -:103C8000EEF79FFD4C49012008704C49F01E08607A -:103C90004B480560001F046070BD10B50220EEF7B0 -:103CA00090FD45490120087046480021C0F80011E8 -:103CB000C0F80411C0F8081143494FF4000008602F -:103CC00010BD3D480178C9B1404A4FF40001116070 -:103CD0003C49D1F800310022002B1CBFD1F804313F -:103CE000002B02D0D1F8081111B14270102103E06D -:103CF0000121417036490968817002700020EEF799 -:103D000060BD2D480178002904BF407870472D48D8 -:103D1000D0F80011002904BF02207047D0F800112C -:103D200000291CBFD0F80411002905D0D0F80801E3 -:103D3000002804BF01207047002070471E4800B5CE -:103D40000278204B4078C821491EC9B282B1D3F80D -:103D500000C1BCF1000F10D0D3F8000100281CBF37 -:103D6000D3F8040100280BD0D3F8080150B107E0C4 -:103D7000022802D0012805D002E00029E4D1FFDFAB -:103D8000002000BD012000BD0B480178002904BFC0 -:103D9000807870470B48D0F8001100291CBFD0F87C -:103DA0000411002902D0D0F8080108B11020704792 -:103DB00007480068C0B27047B400002010F500400A -:103DC00008F5004000F0004004F5014008F501400E -:103DD00000F400404D48002101704170704770B5FB -:103DE000064614460D460120EEF7EBFC48480660F7 -:103DF000001D0460001D056070BD70B5434B0125BA -:103E000040EA02421D70434B42F080721A60424AFF -:103E10001160424C0026C4F80461414A4FF04071E1 -:103E20001160002802BFC4F80052256070BD01284F -:103E300018BFFFDFC4F8006225604FF000703949F9 -:103E4000086070BD3148017879B1354A4FF0407152 -:103E500011603249D1F804210021002A08BF4170C5 -:103E600002D0314A1268427001700020EEF7A9BCFE -:103E700026480178002904BF407870472748D0F8C9 -:103E80000401002808BF704727480068C0B2704787 -:103E9000002808BF704730B51C480078002808BFCC -:103EA000FFDF1E48D0F80411002918BF30BD0224DE -:103EB000C0F80443DFF874C0DCF80010C1F300154B -:103EC000DCF8001041F01001CCF80010D0F804111B -:103ED000002904BF4FF400414FF0E02207D100BF9A -:103EE000C2F8801220BFD0F80431002BF8D02DB9D1 -:103EF000DCF8001021F01001CCF80010C0F80843E5 -:103F000030BD06490120886070470000B7000020DE -:103F100008F5004004F5004018F5004000F00040AE -:103F200008F5014004F5014000F4004010ED00E008 -:103F300010B5FB480024012144700470447284725F -:103F4000C17280F821408462446314300FF07EFE19 -:103F5000F449601E0860091D0860091D0C60091DF8 -:103F60000860091D0C60091D0860091D0860091D15 -:103F70000860091D0860091D0860091D0860091D09 -:103F80000860091D0860091D086010BD30B4E449CF -:103F90000268DFF898C34A6142688A61007A08774C -:103FA0000A7DE14BACF1040401204AB10A7E00FA1B -:103FB00002F21A608D7D002D0CBF2260CCF800202B -:103FC0004A7D002A04BF30BC70474A7E904018608A -:103FD000C97D00290CBF2060CCF8000030BC7047C0 -:103FE00010B5002401280AD0022808BF4FF08074C1 -:103FF00005D0042816BF08284FF0C744FFDF44F45B -:10400000837040F40030CA490860091DC94808603F -:1040100010BD10B50446012908BF00210BD00229AC -:1040200008BF4FF0807106D0042917BF08294FF050 -:10403000C741FFDF002141F4847040F48010BC4987 -:104040000860E0B240F44030091D40F000700860A4 -:10405000B948D0F80001002818BFFFDF10BD0120CB -:1040600010B44FF0E02202214FF0000CC2F8801192 -:10407000B24BC3F800C01860B14C40F25B632360E0 -:10408000241F40F203132360231F1860AD4B03204D -:104090001860AD4B96201860AD4BAC481860AE4B25 -:1040A000AC4818601B1FAD481860C2F88012A249C6 -:1040B0001020C1F804039A4880F82DC010BC704746 -:1040C000974A0368C2F802308088D0801172704726 -:1040D000934890F821007047914A517010707047D2 -:1040E000F0B50546800000F1804000F580508B88D7 -:1040F000C0F820360B78D1F8011043EA0121C0F84E -:10410000001605F10800012707FA00F6944C002A72 -:1041100004BF2068B04304D0012A18BFFFDF206825 -:1041200030432060206807FA05F108432060F0BDA5 -:104130000EF016BF7A4890F82E007047784890F835 -:1041400030007047874AC1781160006886490002D4 -:1041500008607047252808BF02210ED0262808BF16 -:104160001A210AD0272808BF502106D00A2894BF58 -:104170000422062202EB4001C9B27C4A11607C494C -:1041800008607047F0B4664B9D7A012D61D0022D16 -:104190001CBFF0BC704793F815C0BCF1000F04BF02 -:1041A000F0BC70474FF47A7C012D724C724F57D09F -:1041B000DE7D5D7E002E18BF0126012908BF292162 -:1041C0000CD0022A0CBF6D4C012A03D0042A0CBF6C -:1041D0003C466B4C04F2E141B1FBFCF1491F084441 -:1041E0006849086068490020C1F84C01280286F03F -:1041F000010140EA015040F00311187F820002F1F2 -:10420000804202F5C042C2F81015604901EB8002FD -:10421000997EC80000F1804000F5F830C0F8142500 -:10422000DFF86CC1C0F810C5D87EC30003F180432D -:1042300003F5F833C3F81425484AC3F810250122C2 -:1042400002FA01F102FA00F0084352490860F0BC9A -:10425000704793F814C0BCF1000FA3D1F0BC7047B5 -:104260009E7D1D7E002E18BF0126012919D0022A2D -:1042700004BF494C4FF47A710CD0012A08BF4FF4A7 -:10428000C86107D0042A07BF3C4640F69801434C5A -:1042900040F6E441214401F5FA7100BFB1FBFCF1A5 -:1042A0009CE7022A08BF4FF47A710AD0012A08BF9E -:1042B0004FF4C86105D0042A0CBF40F6980140F6BF -:1042C000E44149F6FC621144E8E72DE9F0411A4D5A -:1042D0000446032016460F46C5F800022D491B4828 -:1042E000086038460EF0B4FE30460EF07BFE3046D5 -:1042F0000EF026FE0A4B0120002C04BF98722860A5 -:1043000004D0012C02D10221997268601E49C86450 -:104310001C48006832463946BDE8F04132E70000EB -:10432000D00A0020000E0040180500500C05005077 -:10433000141500402500030200100040FC1F00403F -:1043400038150040101500404415004000000404DA -:1043500008F5014040800040A4F5014010110040E4 -:1043600040160040241500401C1500400815004070 -:1043700054150040A2240200D0FB010004360200C4 -:10438000C0D401004C850040008000400060004027 -:104390004C81004004F501406836020030D3010032 -:1043A0002DE9F041054616460F460320FE49C1F8A7 -:1043B0000002FF4CFD48206038460EF049FE3046B2 -:1043C0000EF010FE30460EF0BBFDFA4815B1012D7F -:1043D00009D011E001218172416B41F480114163E8 -:1043E0004FF4801007E002218172416B41F400110B -:1043F00041634FF40010206032463946BDE8F04179 -:104400000020BFE62DE9FF4FE74C8246002581B032 -:1044100003208946C4F80002E54FE4483860039859 -:104420000EF016FE04980EF0DDFD04980EF088FDE7 -:10443000E148E04E4FF00108BAF1000F03D0BAF1A5 -:10444000010F20D030E0046096F82D00012806D03E -:10445000022818BFFFDF0CD086F80A8024E0DDE9CF -:10446000031396F82C2048460EF071FEB16A4518E9 -:10447000F2E7DDE9031296F82C3048460EF0F5FD20 -:10448000B16A4518E8E7CD49016096F82D00DDE9ED -:104490000313012896F82C20484624D00EF0A1FEE4 -:1044A000B16A45180220B072C5480560C649C548C2 -:1044B0000860706B40F400207063D4F800924FF0F5 -:1044C000100AC4F808A30026C4F80062BF484FF4DD -:1044D000802BC0F800B0FF208DF80000C4F81061F8 -:1044E000C4F8108009E00EF0FEFDB16A4518D9E766 -:1044F0009DF80000401E8DF800009DF8000018B1E6 -:10450000D4F810010028F3D09DF80000002808BF5F -:10451000FFDFC4F80061C4F80C61C4F81061C4F88E -:104520000461C4F81461C4F81861A94800680090D7 -:10453000C4F80092C7F800B0C4F804A34FF40020F8 -:104540003860A448C0F84C80A3480068A84228BF3F -:10455000FFDF2846DDE9031205B0BDE8F04F11E6A4 -:104560002DE9F847904CD4F8000220F00309D4F864 -:1045700004034FF0100AC0F30018C4F808A3002683 -:10458000C4F800629149894808608A4D0127A87AD9 -:10459000012802D0022803D014E0287D10B911E0D0 -:1045A000687D78B1A87EEA7E07FA00F007FA02F289 -:1045B00010430860287F800000F1804000F5C04073 -:1045C000C0F81065FF208DF80000C4F81061276165 -:1045D00005E000BF9DF80000401E8DF800009DF82A -:1045E000000018B1D4F810010028F3D09DF80000A5 -:1045F000002808BFFFDFC4F810616E72AE72EF7260 -:10460000C4F80092B8F1000F18BFC4F804A3BDE8C5 -:10461000F8870068714920F07F40086070474FF0CC -:10462000E0200221C0F88011C0F8801270474FF0DE -:10463000E0210220C1F80001704769490870704705 -:1046400068490860704730B55A4C0546A06AA842D0 -:1046500028BFFFDF0120207300205E492561C1F8DB -:10466000440161480560606B40F480006063C801EC -:104670004F49086030BD70B54E4C054602200E46CD -:1046800020730EF0C4FC94F82D10012994F82C101E -:104690000ED0024628460EF002FE4E492061002050 -:1046A000C1F844012169A06A08444F49086070BDFF -:1046B0000246334628460EF0BBFDEEE743494FF471 -:1046C000800008603B48416B21F480014163002178 -:1046D000017370473F4801214160C1600021C0F86B -:1046E0004411414801603348816270473F4940208E -:1046F00008602D48D0F8001241F04001C0F80012C7 -:1047000070472948D0F8001221F04001C0F800128B -:1047100036490020086070472348D0F8001221F085 -:104720001001C0F800120121816170471E4800216C -:10473000C0F81C11D0F8001241F01001C0F80012AE -:104740007047194981B0D1F81C21012A1EBF0020F1 -:1047500001B07047264A126802F07F02524202708E -:104760000020C1F81C01234800680090012001B01E -:10477000704730B50C00054608BFFFDF14F0010F8D -:104780001CBF012CFFDF002D0CBF012002200949B6 -:1047900001284872CC72044904BFD1F8000240F0ED -:1047A000040030D0022827E000100040000004047C -:1047B00004F50140D00A0020ACF50140041000408F -:1047C0004885004048810040A8F5014008F50140B7 -:1047D00018110040008000404C8500403C1500400E -:1047E000B9000020041500404485004060150040D9 -:1047F000481500401C11004007BFD1F8000240F0EE -:104800000800FFDF30BDC1F8000230BD2DE9F84FD0 -:10481000DFF8F893D9F84C21FE4CFD494FF0010820 -:10482000A07A0025CAB1012802D0022803D014E0E2 -:10483000227D12B911E0627D7AB1A27EE37E08FA90 -:1048400002F208FA03F31A430A60227F920002F18F -:10485000804202F5C042C2F81055ED49626B0A6011 -:104860006563217B29B1D9F84411012908BF0122D0 -:1048700000D00022E84FD7F8101101290CBF4021C9 -:104880000021012805BFD7F80C31012B002320237C -:104890001943012805BFD7F80431012B0023102349 -:1048A0001943DE4B022804BFD3F800C0BCF1010F4E -:1048B00007D1D7F80CC1BCF1010F08BF4FF0080CAD -:1048C00001D04FF0000C4CEA0101022804BF1B6824 -:1048D000002B05D1D7F80C31012B08BF042300D0E1 -:1048E00000231943022803D1002A18BF022200D155 -:1048F00000221143022804BFD7F80401012805D182 -:10490000D9F84401012818BF012000D1002040EA55 -:104910000106C348016811F0FF0F03D0D7F8141146 -:10492000012900D0002184F82E10006810F0FF0F3C -:1049300003D0D7F81801012800D0002084F82F00F8 -:10494000B848006884F83000B7480068402803D1B0 -:10495000FFF7D7F9012800D0002084F83100C7F80C -:104960000051C7F80C51C7F81051C7F80451C7F8E7 -:104970001451C7F81851AD4800680090A348C0F81A -:104980004451AB480068DFF8AC920090D9F80000C1 -:104990006062A9F104000068A0620EF038FB84F8A0 -:1049A0002C00A07ADFF890B284F82D0002280CD1F8 -:1049B000607850B1DBF8001009780840217831EABE -:1049C000000008BF84F8208001D084F82050DFF870 -:1049D0006CA216F0010F15D09AF80010984A4908F9 -:1049E000606A52F8211088470121964A9AF80030EF -:1049F000A06A52F8232090479AF8000010F0010FA7 -:104A00000BD025E016F0200F18BF0221EDD116F0D3 -:104A1000020F18BF0021E8D1EEE7DBF800000078B4 -:104A200000F00F000728DBF800001AD200F109019E -:104A30000622A01C0EF032FF00BB207ADBF800102B -:104A40000978B0EBD11F31D12EE000BF84F82100EE -:104A5000E17A002011F0020F18BF16F0040F27D0E2 -:104A60003DE0007910F0010FDBF8000007D000F105 -:104A70000B010622A01C0EF011FF70B116E0411DC3 -:104A80000622A01C0EF00AFF80B9207ADBF8001085 -:104A90000978B0EBD11F09D106E0207ADBF80010CD -:104AA0000978B0EBD11F01D10120CFE70020CDE77D -:104AB00011F0100F1CBF94F82F20002A02D094F898 -:104AC000312062B111F0080F1CBF94F82020002A99 -:104AD00005D111F0040F03D094F8211001B9012081 -:104AE000617A31B106F0020210430ED0FFF738FDB3 -:104AF00019E0474854490160D7F8000220F003004C -:104B0000C7F8000284F80B800DE04FF0000B01297C -:104B10002BD0022918BFFFDF39D0A06A01225844E8 -:104B20000021FFF72FFB16F0020F05D047489AF837 -:104B3000001050F82100804716F00C0F07D04448B1 -:104B40009AF8001050F82110C6F3C000884716F0FC -:104B5000200F05D03F489AF8001050F821008047F8 -:104B60009AF80000022825D02AE0D7F8000220F0A9 -:104B70000400C7F80002657284F80B80012384F8F2 -:104B80000A801A46002196200EF06FFA10E0D7F83E -:104B9000000220F00800C7F80002657284F80B805C -:104BA0000220A07201231A46002196200EF09BFAE3 -:104BB0008346B2E706F06E00402806D102F04CFDB5 -:104BC0009AF80000042828BFFFDFA07A022818BF47 -:104BD000BDE8F88F207B002808BFBDE8F88F0B499F -:104BE000C1F8445102283DD0012818BFFFDFA16A57 -:104BF0002069884298BFFFDFD4F81000C9F8000090 -:104C0000606B40F48000606326E00000008000409C -:104C100008F50140D00A00200010004000140040B8 -:104C2000401600401014004060150040181100406C -:104C3000448100404485004004150040B900002034 -:104C4000003F0200383F020000000404083F020059 -:104C5000183F0200283F02002C494FF480000860F2 -:104C6000BDE8F88F2169A06A0844C7E7012804BF9E -:104C700028207047022804BF18207047042812BF5C -:104C800008284FF4A870704700B5FFDF282000BD4A -:104C9000012804BF41F6A4707047022804BF41F206 -:104CA00088307047042804BF44F6904070470828B5 -:104CB00004BF47F2AC10704700B5FFDF41F6A470A7 -:104CC00000BD012804BF41F2D4707047022804BF20 -:104CD00041F204007047042812BF082842F6A000E1 -:104CE000704700B5FFDF41F2D47000BD012812BF4C -:104CF000022800207047042812BF08284FF4C8700B -:104D0000704700B5FFDF002000BD000004F5014042 -:104D100010B53F4822210EF06CFE3D48017821F08D -:104D20001001017001210CF02FFE3A49002081F89A -:104D300022004FF6FF70888437490880488010BDF4 -:104D4000704734498A8C824218BF7047002081F82E -:104D500022004FF6FF70888470472D49016070472C -:104D60002D49088070472B498A8CA2F57F43FF3B71 -:104D700003D0002101600846704791F822202549A0 -:104D8000012A1ABF0160012000207047214901F16A -:104D9000220091F82220012A04BF0020704701223E -:104DA00002701D4800888884104670471A49488060 -:104DB00070471849184B8A8C5B889A4206D191F843 -:104DC0002220002A1EBF016001207047002070478A -:104DD0001048114A818C5288914209D14FF6FF71D7 -:104DE000818410F8221F19B1002101700120704741 -:104DF000002070470748084A818C5288914205D1AB -:104E000090F8220000281CBF002070470120704746 -:104E10002E0B0020080B0020BA0000207047574AD4 -:104E2000012340B1012818BF7047137008689060D3 -:104E300088889081704753700868C2F8020088889B -:104E4000D08070474D4A10B1012807D00EE050784D -:104E500060B1D2F802000860D08804E0107828B170 -:104E60009068086090898880012070470020704712 -:104E7000424910B1012803D006E0487810B903E098 -:104E8000087808B1012070470020704730B58DB018 -:104E90000C4605460D2104A80EF0CDFDE0788DF8F6 -:104EA0001F0020798DF81E0060798DF81D0028689C -:104EB000009068680190A8680290E86803906846CE -:104EC0000DF09CFB20789DF82F1088420CD1607863 -:104ED0009DF82E10884207D1A0789DF82D108842A9 -:104EE00002BF01200DB030BD00200DB030BD30B587 -:104EF0000C4605468DB04FF0030104F1030012B1DA -:104F0000FEF7ECFA01E0FEF708FB60790D2120F0D6 -:104F1000C00040F04000607104A80EF08CFDE07805 -:104F20008DF81F0020798DF81E0060798DF81D0026 -:104F30002868009068680190A8680290E86803906B -:104F400068460DF05BFB9DF82F0020709DF82E0049 -:104F500060709DF82D00A0700DB030BD10B5002917 -:104F600004464FF0060102D0FEF7B8FA01E0FEF762 -:104F7000D4FA607920F0C000607110BDBE0000203E -:104F800070B5FE4E0446306890F8EA1000250129FD -:104F900029D090F8E410012937D090F8C2100129E7 -:104FA0001CBF002070BD65701421217000F1C40188 -:104FB0002022A01C0EF09EFC0121A171306880F817 -:104FC000C250EF48B0F8C620A0F8E6207268537BC4 -:104FD00080F8E83080F8E4101088FBF7ABFBFBF7B3 -:104FE00050F8012070BD65701B212170D0F8EB10C6 -:104FF000C4F80210D0F8EF10C4F8061090F8F310BF -:10500000A17280F8EA50012070BD657007212170FF -:10501000D0F8E610C4F8021080F8E450E1E7D74871 -:10502000006890F8C210002914BFB0F8C6004FF60F -:10503000FF70704770B5D14C2068002808BFFFDFB3 -:10504000002520680570002808BFFFDF2068017870 -:1050500000291CBFFFDF70BDF4210EF0ECFC2068BE -:105060007F2180F8361013214184282180F8BE105A -:10507000012180F8B81080F8BD50FFF742FBFEF721 -:1050800020FEC0480CF032FABF480CF02FFABDE801 -:105090007040BE480CF02ABAB84800688078704763 -:1050A0002DE9F04FB5484FF00005036893F8240050 -:1050B000C0F38001C0F34002114400F0010001443C -:1050C000588C10F0100F27D013281DD009DC1028A1 -:1050D00002BFAF4830F81100BDE8F08F122813D09E -:1050E00006E0152808D01D2804BFAA48BDE8F08FA7 -:1050F000FFDF2846BDE8F08FA74A002032F81120D4 -:1051000011FB0020BDE8F08FA44A002032F81120E6 -:1051100011FB0020BDE8F08F002410F0010F08BF44 -:10512000FFDF71D093F8BA2093F8BB0093F8BEC0AC -:10513000022A04BF9A4B4FF47A740DD0012A04BF9F -:10514000984B4FF4C86407D0042A07BF964B40F62B -:105150009804964B40F6E44423444FF47A7403F2E7 -:10516000E733B3FBF4F3C1EB011404EB840403EB6A -:10517000840928234FF4C8744FF4BF764FF0180801 -:105180004FF4A877082A48D0042A40D0022A0CBF3E -:1051900005F1180205F128024FF0190A0CBF4FF073 -:1051A000040B4FF0080B1AFB0B2212FB019208288C -:1051B00008BF402109D0042808BF102105D00228CB -:1051C00007BF474604211F460821C1EBC10101EB7F -:1051D000410107EB4101114410F00C0F08BF4FF0E3 -:1051E000000C6144082823D004281CD0022824D0B5 -:1051F00005F5BC700144082000EB400202EB0010F2 -:105200001844084400F277242046BDE8F08F324667 -:105210004FF0140A4FF0100BC5E722464FF0140A66 -:105220004FF0400BBFE73346102001F21E41E3E789 -:105230002346402001F54161DEE705F1C00001444D -:1052400005F118030420D7E74C4840F271210068AB -:10525000806A484370474948006890F83500002844 -:1052600018BF0120704710B5454C207B022818BF9D -:10527000032808D1207D04F115010AF04DFF08280C -:105280001CBF012010BD207B002816BF0228002073 -:105290000120BDE81040FFF7EBBD394908737047A6 -:1052A0003649096881F8300070472DE9F047334DE1 -:1052B0002968087B002816BF0228002001204873B7 -:1052C0000E31FFF7BFFD2968087B022816BF0328AF -:1052D0000122002281F82F20082081F82D00487B30 -:1052E0000126002701F10E03012804BF5B7913F0AA -:1052F000C00F0AD001F10E03012804D1587900F043 -:10530000C000402801D0002000E0012081F82E00DC -:10531000002A04BF91F8220010F0040F06D0087D87 -:1053200015310AF0F9FE296881F82D0028684760D8 -:10533000FDF76EF82968124C4FF00009886094F868 -:105340002D000AF005FF804694F82F00002818BFB2 -:10535000B8F1000F04D0102140460BF024FD38B303 -:1053600094F8300000281CBF94F82E00002838D094 -:10537000607B04F10E01012829D02DE0CC00002033 -:10538000500B0020440C00206C0C0020940C0020DA -:10539000583F0200D0891300603F0200503F0200D6 -:1053A00068360200A2240200D0FB010030D30100C5 -:1053B000FFE766734A4604F10E014046FFF797FD8A -:1053C00094F82D1004F10E000AF0BAFF09E04879B4 -:1053D00000F0C000402831D0394604F10E00FFF73C -:1053E000BDFD2868C77690F8220010F0040F08BFB2 -:1053F000BDE8F087002794F82D000AF0B2FE040003 -:1054000008BFBDE8F08710210BF0CDFC002818BFC5 -:10541000BDE8F08728683A4600F11C01C6762046B0 -:10542000FFF765FD286800F11C01FE480CF095F8B7 -:10543000BDE8F0470121FB480CF0AAB80AF0B9FF1B -:105440004A4604F10E01FFF752FDCAE72DE9F84183 -:10545000044640884FF0000710F0110F02D010F002 -:10546000600F02D01120BDE8F8816088ADF800001F -:1054700080B200F00101C0F3400241EA4201C0F3F2 -:10548000800241EA8201C0F3C00241EAC201C0F3D6 -:10549000001241EA0211C0F34012E34D41EA421109 -:1054A000C0F3801041EA801029684FF00108488459 -:1054B000E07D012808BF012607D0022808BF022688 -:1054C00003D0032814BFFFDF0826286880F8BA60DD -:1054D00090F8221011F0100F18BF80F8BB8029D06F -:1054E000296881F8BC70207B81F82400488C1D2835 -:1054F0000EBF8F6260688862607D81F83500A07B96 -:10550000002816BF0228002001200875D4F80F00DB -:10551000C1F81500B4F81300A1F81900A07EB1F885 -:10552000C02060F30302A1F8C02081F802800020AF -:10553000BDE8F881607E012808BF012607D0022857 -:1055400008BF022603D0032814BFFFDF08262868FF -:1055500080F8BB60C4E7B448006890F8220010F0FF -:10556000100018BF0120704770B51F2834BF0446D3 -:105570001F240022AC4D286880F8B92022467830DC -:105580000EF0B8F92868012180F8974080F8B9102A -:1055900070BD10B51F2828BF1F20C2B2A24C002327 -:1055A000206880F8B83080F8B72098300EF0A2F963 -:1055B0002168012081F8B80010BD9B49096881F875 -:1055C000340070479849096881F8BD0070479648D3 -:1055D000006890F8220000F00100704792480068CF -:1055E00090F82200C0F3401070478F48006890F890 -:1055F000BB00704770B5FFF76DF8FFF75FF8FEF777 -:10560000AFFFFFF70CF8884C0025206890F83300B6 -:1056100030B1FFF776F8FEF754FB206880F833507E -:1056200020680570408C1D2804D0BDE87040002023 -:1056300005F096BC042005F093FC206890F8C200A9 -:10564000002818BFFFDF206890F83710002908BF36 -:1056500070BD017D80F8C910D0F81510C0F8CA10CF -:10566000B0F81910A0F8CE103C2180F8C410616881 -:105670000A88A0F8C620012280F8C2200888FBF71B -:1056800059F8FAF7EFFC206880F8375070BD2DE923 -:10569000F84F654E81460024306890468A46458C16 -:1056A00015F0030F0ED015F0010F05F0020004D025 -:1056B000002808BF012405D003E0002818BF0224F9 -:1056C00000D1FFDF4FF0000B00945C465F4615F001 -:1056D000010F4FF0010005F002010DD091B915F056 -:1056E000040F0FD047F00801B8F1000F18BF41F0C8 -:1056F00003041DD007462EE021B115F0040F08BFAA -:10570000FFDF28D015F0070F08BFFFDF23D015F00B -:10571000010F10D015F0020F08BF15F0040F11D1C2 -:1057200047F00801B8F1000F18BF41F00104E1D1C2 -:1057300041F010040FE015F0020F1CBF15F0040F2C -:10574000FFDF08D115F0030F04D115F0040F18BFC7 -:10575000FFDF00D1FFDF15F0400F18BFFFDF99F822 -:105760000000072120F0200089F8000048460BF0D7 -:10577000C2FE484600990CF09EF8214648460CF0BF -:10578000A3F814F0010F0CD03068062300F10E01CD -:10579000002248460CF06DF83068417B48460BF01B -:1057A000EAFE14F0020F1BD03068BAF1000F0BD0E4 -:1057B00000F11C010623012248460CF05AF8012191 -:1057C00048460BF0E5FE0BE000F11501062301222F -:1057D00048460CF04EF83068017D48460BF0D8FE84 -:1057E00014F0040F18BFFFDF14F0080F17D0CDF826 -:1057F00000B03068BDF800100223B0F8C000020904 -:1058000062F30B01ADF800109DF80110032260F364 -:1058100007118DF80110694648460CF02AF8DFB1EF -:10582000306803E0440C0020CC00002090F87700A2 -:1058300090B148460CF03BF83368401CC1B293F875 -:105840007700C1F125018842B8BF01468AB203F151 -:10585000580148460CF066F80020002818BFFFDF0A -:105860000020002818BFFFDF0020002818BFFFDF3E -:10587000BDE8F88F2DE9F843F64C2068002808BFF2 -:10588000FFDF2068017809BB8178F9B1002680F834 -:105890003160467080F837603046FEF7CEFEFEF786 -:1058A000DEFB206890F9BD00FEF742FCEA48FEF7F7 -:1058B00049FCEA48FEF7ADFE206890F8240010F09D -:1058C000010F06D02520FEF745FC09E00C20BDE8BD -:1058D000F88310F0020F18BF262066D0FEF73AFCBE -:1058E000206890F8BA00FEF77BFB206880F82C60F7 -:1058F000FEF79DFE2068002190F8BA200846FEF7CA -:105900004FFD0F210520FEF7E7FB20680127D44D4E -:1059100090F82E10002901BF90F82F10002990F860 -:10592000220010F0040F70D0FCF772FD8046206852 -:1059300041468068FDF77DFACA4990FBF1F901FB09 -:10594000190041424046FCF76EFA0146206881602A -:105950004168494441600AF0DCFB01462068426826 -:1059600091426DD8C0E901684FF0010895F82D000B -:105970000AF0EEFB814695F82F00002818BFB9F118 -:10598000000F04D0102148460BF00DFAA0B195F895 -:10599000300000281CBF95F82E00002824D0687B1A -:1059A00005F10E01012815D019E010F0040F14BF05 -:1059B0002720FFDF92D193E73A466F7305F10E017E -:1059C0004846FFF794FA95F82D1005F10E000AF0FD -:1059D000B7FC09E0487900F0C000402816D04146E5 -:1059E00005F10E00FFF7BAFA206890F8220010F0D7 -:1059F000040F25D095F82D000AF0B3FB5FEA0008EC -:105A00001ED010210BF0CFF940B119E00AF0D1FC03 -:105A10003A4605F10E01FFF76AFAE5E720683A46D3 -:105A200000F11C01C7764046FFF761FA206800F1DB -:105A30001C018D480BF091FD01218B480BF0A8FD56 -:105A40002068417B0E30FEF73BFB206890F8B810D1 -:105A500079B390F8B72080F8772000F1980158309A -:105A60000DF08DFF206890F8221011F0100F1DD15D -:105A7000B0F8C00002210709ADF800706846FDF7D4 -:105A80002DFD28B1BDF80000C0F30B00B84204D1D1 -:105A9000BDF80000401CADF800002168BDF8000012 -:105AA000B1F8C02060F30F12A1F8C020206880F880 -:105AB000B860206890F8B91059B190F8972080F834 -:105AC000572000F1780138300DF059FF206880F838 -:105AD000B9602068644E90F82210C77E06F128084D -:105AE00011F0100F59D0317821F020013170408C25 -:105AF000132834D01BDC10284AD0122843D0FFDFF3 -:105B000005F10E0158480BF01AFD697B56480BF061 -:105B100032FD2068418C1D2918BF152973D090F8DB -:105B2000772000F1580130460BF05BFD6BE0152843 -:105B300018BF1D28E3D1012130460BF0DCFC307882 -:105B400040F020003070206897B100F11C01304611 -:105B50000BF003FD012130460BF01AFDD0E70021C8 -:105B600030460BF0C8FC307840F020003070C7E7BA -:105B700000F1150130460BF0F0FC2068017D304645 -:105B80000BF006FDBCE7062130460BF0B4FCB7E78E -:105B9000022130460BF0AFFCB2E700223946304616 -:105BA000FFF775FD012239464046FFF770FDF0789A -:105BB00010F03F0F1CBF307910F0100F23D030468B -:105BC0000BF097FC2368014693F82400C0F3800291 -:105BD000C0F3400C624400F00100024493F82C0032 -:105BE000C0F38003C0F3400C634400F0010018448C -:105BF000101AC0B200F06AFC009003230422694628 -:105C000030460BF036FE206890F8220010F0100F9E -:105C100015D0164E042130460BF06DFC05F10E0137 -:105C200030460BF08CFC697B30460BF0A4FC2068FE -:105C300000F1380190F8572030460BF0F6FC0AF0DE -:105C4000DCFA0B480AF06DFB216881F83300002074 -:105C5000BDE8F883CC0000204C3F0200493F020021 -:105C6000500B002040420F00440C0020940C0020F8 -:105C7000BC0C0020FE49486070472DE9F843FC4CFD -:105C80008046206890F8312032B1408C1D2808BF32 -:105C9000FFDFBDE8F843ADE40126D9B190F8BC00C0 -:105CA000FEF758FA206890F8BB00FEF799F92068D3 -:105CB00001224FF4967190F8BB300020FEF7A2FB52 -:105CC000EC48FEF7BDFC20680670467080F8316035 -:105CD000BDE8F883E848FEF7B3FC2068002590F89B -:105CE000241090F82C0021EA000212F0010F18BFD6 -:105CF00001250ED111F0020F04D010F0020F08BFE1 -:105D0000022506D011F0040F03D010F0040F08BFD5 -:105D100004250027B8F1000F5BD0012D1BD0022D08 -:105D200008BF26201BD0042D14BFFFDF272016D06C -:105D3000206890F8BA00FEF753F9206890F8221016 -:105D400011F0100F0ED0002201234FF4967110466F -:105D5000FEF758FB3DE02520FEF7FCF9E8E7FEF7EB -:105D6000F9F9E5E790F8BA3001224FF49671002076 -:105D7000FEF748FBC048C17811F03F0F1CBF007907 -:105D800010F0100F25D0BC480BF0B3FB2368014680 -:105D900093F82420C2F38000C2F3400C604402F068 -:105DA000010200EB020C93F82C20C2F38000C2F336 -:105DB0004003184402F001020244ACEB0200C0B2FE -:105DC00000F084FB0090032304226946AA480BF0EC -:105DD00050FD206890F82C10294380F82C1090F882 -:105DE000242032EA010111D00670408C13281FD004 -:105DF0001ADC102808BFBDE8F883122818D000BFAD -:105E000010F0100F18BFFFDFBDE8F883418C1D298B -:105E100008BF80F82C70E7D011F0100F14BF80F885 -:105E2000316080F83170DFE7152818BF1D28E7D1F1 -:105E3000BDE8F84301210846FEF79BBC8C4810B52D -:105E40000068017839B9807828B100210846FFF749 -:105E500014FF002010BDFEF73DFCFEF72FFCFEF7FF -:105E60007FFBFEF7DCFB0C2010BD81490120096897 -:105E700081F8370070477E49096881F83200704721 -:105E800070B5002604F0F8FE60B1794C2068027805 -:105E900001210025012A09D0022A01D0032A6AD053 -:105EA000FFDF70BDBDE87040FFF7A4BB417802255D -:105EB00009B37248FEF7C4FB20680122962190F8CE -:105EC000BB301046FEF79EFA216891F8BB0091F8AE -:105ED000BE1010F00C0F08BF00219620FEF7CBFB80 -:105EE0002068057090F83400012818BF70BDBDE827 -:105EF0007040FEF71BBC418C11F0100F12D010291E -:105F00001BD090F8330018B1FDF7C7FEFEF7EEFB8B -:105F10005A48FEF795FB206890F8221011F0040F04 -:105F200010D01AE090F8241090F82C00814204D18F -:105F3000BDE87040012108469FE6BDE870400021A1 -:105F400001209AE690F83500012814BF0328102696 -:105F500046F00E010020FEF70CFC206890F834009B -:105F6000012808BFFEF7E2FB00219620FEF783FB25 -:105F70002068057070BD4278EAB190F8222012F0D6 -:105F8000010F04BFFFDF70BD80F8C2106068008899 -:105F9000FAF7D0FBFAF766F820680570FEF79AFB6F -:105FA000FEF78CFBFEF7DCFAFEF739FBBDE870402C -:105FB000032004F0D5BF4178BDE8704001205CE6C5 -:105FC00010B52B4C206890F83410012909D13630D7 -:105FD000FEF7B7FB18B921687F2081F83600FEF77D -:105FE0009BFB206890F8330018B1FEF78AFBFDF7A1 -:105FF00068FE04F041FEA8B1206890F8221011F06C -:10600000100F0FD00078022818BFFFDF00210120F9 -:10601000FFF733FE2068017800291EBF00780128B1 -:10602000FFDF10BDBDE81040FFF7E4BA2DE9F04FE7 -:1060300083B005464FF00008FEF77CF80C4C814613 -:1060400020680078022818BFFFDF20684FF07F0A21 -:1060500090F83410012937D008480BF06CFAFF266D -:106060000746002D71D005480BF0D3FB002807E050 -:10607000CC0000206C0C0020440C0020BC0C002044 -:1060800063D0FEF725F800285FD02068FF4D90F818 -:10609000330068B10AF096F80646FF2808D001469A -:1060A000E81C0AF07EF830460AF097F840EA090941 -:1060B0003846F74F4FF0010B062880F0F181DFE8FA -:1060C00000F0FDFDFD0EFD863630FEF73AFB0028A0 -:1060D00004BF206880F836A0FEF71EFBBCE72068EE -:1060E00090F8220010F0020F69D0B9F1000F18D11A -:1060F00097F83500002818BF022860D12878E91CDD -:10610000C0F380100AF008F881460AF06AF940B13D -:1061100048460AF026F820B110210AF044FE002873 -:106120004DD020684178012910D090F83410012911 -:1061300004BF90F8EA1000290CD0D648FEF780FA88 -:1061400021680320087000F082B93CE0FFF752FAA2 -:1061500000F07DB980F8EAB0FF2180F8EB10FF2E47 -:1061600010D007F1ED02511E30460AF003F8002866 -:1061700008BFFFDF206890F8EC1041F0020180F8C2 -:10618000EC100DE02978C1F3801180F8EC10C049C3 -:10619000D1F86F21C0F8ED20B1F87311A0F8F1101B -:1061A000206800F1F30590F836007F2808BFFFDF74 -:1061B000206890F83610297080F836A0BDE7206876 -:1061C00040780028C2D14FF0010800F040B928788B -:1061D000C0F380112068027D914209D100F11501C0 -:1061E0000622E81C0DF05AFB002808BF012000D051 -:1061F0000020FF2E05D0B8B997F82D00B04215D178 -:1062000012E098B12878E91CC0F3801009F084FFEF -:1062100082460AF0E6F838B1504609F0A2FF18B1FC -:1062200010210AF0C0FD08B1012000E00020216823 -:10623000498C11F0010F23D011F0040F01D0F8B1F7 -:106240001AE0B9F1000F17D197F83500002818BFF0 -:10625000012815D12878E91CC0F3801009F05CFFF3 -:1062600007460AF0BEF838B1384609F07AFF18B18F -:1062700010210AF098FD18B1206890F8321031B161 -:10628000206890F8220010F0100F9CD15EE7427851 -:106290008149002A7DD0A1F11F07656890F8BB9065 -:1062A000D7F80F00C5F80E00B7F813006882787DA4 -:1062B0002875B87D6875B7F8170000E0F0E0E8824F -:1062C000B7F819006880B7F81B00A880B7F81D0060 -:1062D000E88005F108000DF0BEFC97F8240000F0FE -:1062E0001F00287697F82400400985F8640185F896 -:1062F000519085F85290206890F8BE1085F85310A0 -:1063000090F8BD0085F854003146606800F048F907 -:10631000022004F025FE6148A7F1280505F12806B2 -:106320000768082128460BF0E6F8002128460BF004 -:10633000C2FA394628460BF0C7FA694630460BF0D8 -:1063400013F930460BF02DF9014628460BF013F9EE -:1063500006230022694628460BF08BFA6946304630 -:106360000BF0F4F830460BF00FF9014628460BF01D -:106370000FF906230122694628460BF07AFA2846CF -:10638000FEF75EF920680122962190F8BB300020CC -:1063900000E005E0FEF736F821680320087056E0BB -:1063A00067682A78394D787BC2F3401210407873C1 -:1063B000D5F80F00C7F80E00B5F813007882687D95 -:1063C0003875A87D7875B5F81700F882B5F819000A -:1063D0007880B5F81B00B880B5F81D00F8804FF044 -:1063E000010907F108000DF036FC95F8240000F0D3 -:1063F0001F00387695F82400400987F8640187F873 -:10640000519087F85290206890F8BE1087F853108A -:1064100090F8BD0087F854003146606800F0C0F87D -:10642000206880F8C2B060680088FAF783F9F9F74D -:1064300019FE216800200870FEF74CF9FEF73EF9BE -:10644000FEF78EF8FEF7EBF8012004F089FD2068D6 -:1064500090F8330018B1FEF754F9FDF732FCB8F1AB -:10646000000F03D000210120FFF707FC206801780E -:10647000002919BF0178012903B0BDE8F08F007829 -:10648000032818BFFFDF03B0BDE8F08FBC0C00206D -:10649000500B0020940C0020DB0C0020483F020031 -:1064A000206890F8220010F0100F7FF48CAE4DE6BB -:1064B000764A1268537823B192F8BB20134604F051 -:1064C000DFBD92F8BA20134604F0DABD78B5044671 -:1064D0006E4800230093006890F8BA20082A04BF91 -:1064E0004FF4C87240230DD0042A04BF4FF4BF728A -:1064F000102307D0022A07BF03F11802042303F177 -:1065000028020823491D01FB032690F8BC209DF8B2 -:10651000001062F3050121F040058DF8005090F85D -:10652000BB00012827D002282CD0082818BFFFDF85 -:106530002ED000BF25F080008DF80000C4EB0411C0 -:1065400006FB04F001EB810100EB8104504884421A -:1065500028BFFFDF4F48A0FB0410BDF80110000961 -:1065600060F30C01ADF80110BDF800009DF80210B9 -:1065700040EA014078BD9DF8020020F0E0008DF86F -:106580000200D7E79DF8020020F0E000203004E090 -:106590009DF8020020F0E00040308DF80200C9E7CD -:1065A00070B53A4D04460E46286890F8C20000289F -:1065B00018BFFFDF0021286880F8C4102288A0F8E7 -:1065C000C6206288A0F8DC20A288A0F8DE20E2883D -:1065D000A0F8E02094F8642180F8E22090F82F20C1 -:1065E0004AB1437B00F10E02012B04D1527902F033 -:1065F000C002402A35D090F8302042B1437B00F1F0 -:106600000E02012B04BF527912F0C00F29D0C0F83E -:10661000D01000BFA0F8D4101F49204AFF2E0978DF -:10662000C1F380116176D2F86F11C4F81A10B2F874 -:106630007321E2831BD0C0F8D610E18BA0F8DA10EA -:1066400000F1CA02511E304609F094FD002808BF2F -:10665000FFDF286890F8C91041F0020180F8C910E6 -:1066600070BDD0F80E10C0F8D010418AD2E7D630F5 -:106670000DF0E8FA2868617E80F8C910D4F81A1085 -:10668000C0F8CA10E18BA0F8CE1070BDCC0000207D -:10669000C4BF030089888888BC0C0020500B0020F0 -:1066A0002DE9F041FF4D0446284600216A784068F4 -:1066B00001270E4612B1012A1ED006E090F8642090 -:1066C000002A18BF6F7000D001216A78C2EB021255 -:1066D00000EB820292F82830194324D0667090F8BB -:1066E000D50002F12A0170B12A22A01C0DF002F996 -:1066F00004202070A7700DE090F82820002A18BF11 -:106700006E70E1D1E1E73A22A01C0DF0F3F805200C -:106710002070A77068786968C0EB001001EB8000FA -:1067200080F8286021E090F8A01009B390F8D50017 -:10673000012818BFFFDF6868D0F8A110C4F8021064 -:10674000D0F8A510C4F80610D0F8A910C4F80A10A3 -:10675000D0F8AD10C4F80E1090F8B110A1746670A6 -:1067600013212170A77080F8A0600120BDE8F0819E -:1067700090F82210012922D0017801291CBF0020A5 -:10678000BDE8F081667014212170811C2022A01CBC -:106790000DF0B0F8A67169680E70C34882888284D3 -:1067A000D0F8C020527B80F8262080F82270D1F8E3 -:1067B000C0000088F9F7BEFFF9F763FCD5E7667003 -:1067C00007212170416AC4F8021080F82260CCE7EA -:1067D000B44840680178002914BF80884FF6FF70E4 -:1067E00070472DE9F05FAF4E4FF0000A4FF00108FF -:1067F000726892F8D530002B6FD011B10978FE295C -:1068000013D0054692F82800002818BFBDE8F09F75 -:1068100002F12A0428460AF08EFE082879D2DFE821 -:1068200000F052555A7878785D60A04C92F8A0003C -:10683000002818BFBDE8F09F82F8A28092F8D80027 -:1068400018B1FDF75EFA01282AD020460AF09CFE16 -:106850000146706880F8A31000F1A40120460AF0F8 -:1068600075FE20460AF09DFE0146706880F8AA1069 -:1068700000F1AB0120460AF077FE706800F1B10428 -:1068800030787F2808BFFFDF307820707F2030709D -:10689000706880F8A080BDE8F05F032003F071B855 -:1068A000FDF772FA716801F1A402A33109F062FCEC -:1068B000002808BFFFDF706890F8A31041F00201C4 -:1068C00080F8A310CDE784F80AA00BE084F80A80D2 -:1068D00084F808A00CE0032001E01EE00220A07272 -:1068E00000E0FFDF04F10B0128460AF08AFE207267 -:1068F000621CA11C284601F057FE307809347F281D -:1069000008BFFFDF307820707F20307000F035B98D -:10691000FFE784F808A0BDE8F09F054692F828003C -:106920008946002818BFBDE8F09F4FF0010B2846AC -:106930000AF001FE07467068002100F12A048186F2 -:1069400090F8C500012808BF4FF0010A0AD00228BC -:1069500008BF4FF0020A05D0042816BF08284FF0E0 -:10696000030AFFDF84F80CA060894FF0000A20F0D2 -:106970006000608184F80DA0FF21A1737F21617602 -:10698000082F75D2DFE807F0040A0E747474061835 -:1069900040F0010040F01200608106E040F0150078 -:1069A000608167E040F01000608104F11A01284620 -:1069B0000AF027FE207264E0706890F8DC1011B3D2 -:1069C00090F8DD00012808BF4FF0010A0AD0022824 -:1069D00008BF4FF0020A05D0042816BF08284FF060 -:1069E000030AFFDF84F80DA028460AF0EBFE80B30F -:1069F000012818BFFFDF1DD004F11A0128460AF054 -:106A0000A9FF207240E028460AF0DCFE002818BFEB -:106A1000FFDF02D084F808A036E0E87810F03F0FDE -:106A20001CBF287910F0020FF4D0608940F00400F8 -:106A30006081EFE7608940F001006081E97811F042 -:106A40003F0F1FBF297911F0020F40F00400608151 -:106A5000D2E700E00CE0E87810F03F0F1CBF287987 -:106A600010F0020FC8D0608940F004006081C3E7D5 -:106A70004FF0000B84F808A0BBF1000F08BFBDE881 -:106A8000F09F072F2ED314D1706890F8F11001B346 -:106A9000D0F8E210C4F80210B0F8E610E18090F8E7 -:106AA000E80005E0D4000020E40C0020E80D002000 -:106AB0006070A07A10F0040F2AD0B9F1000F08BF5F -:106AC000FFDF99F80000A074012F11D0072F15D017 -:106AD0001EE0E87810F03F0F1ABF287910F0010F80 -:106AE000FF20DED0621CA11C284601F05DFDE0E71E -:106AF00004F1130128460AF037FD09E00121284678 -:106B00000AF0CDFE0168C4F813108088A4F81700BD -:106B1000307804F109097F2808BFFFDF307889F851 -:106B200000007F203070072F27D1E87810F03F0F4A -:106B30001CBF287910F0080F11D0716891F8DC2083 -:106B4000012A05D091F8DC1049B910F0100F06D0D9 -:106B5000032128460AF0A3FE40780009A073E878D4 -:106B600010F03F0F1CBF287910F0400F0DD0062108 -:106B700028460AF094FE00786076706880F82880D5 -:106B8000BDE8F05F032002F0FCBE706890F8F310DF -:106B9000002918BF90F8F000EED1EEE72DE9F05F84 -:106BA000FF4C5FEA00087CD098F8001011F0800FCD -:106BB0000CBF1E204FF49670B8F80120C2F30C02EF -:106BC00012FB00F9C80908BF4FF01E0B06D00028C1 -:106BD00006BFFFDF4FF0000B4FF4967B98F80200E2 -:106BE000400908BF012507D0012808BF022503D0AE -:106BF000022814BF00250825002D59D0606809EB34 -:106C00000B0A90F8DD00082816BF04284DF68830DE -:106C1000FEF73EF807462846082D16BF04284DF615 -:106C20008830FEF735F80646606890F8DD00FEF71C -:106C30001DF801464FF47A70B7423ABFF21B02F2D8 -:106C4000E732BA1BB2FBF0F034BF5044AAEB0000AD -:106C5000421A2946012002F009FD10B3606890F83D -:106C6000DD0002F0FAFCA9EB000606EB0B07FDF7CE -:106C7000DEFC98F8000000F03F00FDF76BFA2846B4 -:106C8000FDF7AEF901222B4631461046FDF7BAFB5F -:106C9000C448FDF7D5FC00213846FDF7ECFC6068E0 -:106CA00000E005E080F8DD50012180F8DC1032E0E2 -:106CB0006068002290F8C510104602F0D7FC00254D -:106CC00088B3FDF7B4FC6068B74990F8DA00085C57 -:106CD000FDF740FA606890F8C500FDF781F960683B -:106CE000002190F8C5200120FDF7EFFAAD48FDF72F -:106CF000A7FC6068D0F8F800FDF7A5FC606890F884 -:106D0000C51080F8DD1080F8DC5080F8F15080F874 -:106D1000F25080F8F350606890F8C410032918BF4F -:106D2000022928D11FE0FFE7FDF7D4FCFDF7C6FCE0 -:106D3000FDF716FCFDF773FC606890F8D80030B1E1 -:106D4000FDF7DFFCFCF7BDFF606880F8D850606895 -:106D5000012180F8FC10022180F8DB10BDE8F05F13 -:106D6000002002F00EBE90F8DC00012803D00121C3 -:106D70000020FDF7FEFCFDF7D9FC606890F8D80014 -:106D800018B1FCF78AFFFDF7B1FC6168032081F8B8 -:106D9000DB00BDE8F09F2DE9F041814C616891F87E -:106DA000DC0000280CBF0320042091F8DD3091F8AE -:106DB000012113F00C0F4FF001064FF0000508BF42 -:106DC000002291F8DD1002F051FCE8B1012002F040 -:106DD000D8FD7649A1F128000AF0E6FB6068734F00 -:106DE00090F8B51038460AF0C6FB606800F1B601AD -:106DF00038460AF0A4FB606890F8D610B9B390F852 -:106E0000C41003291ED024E0FDF764FCFDF756FCF6 -:106E1000FDF7A6FBFDF703FC606890F8D80030B1E1 -:106E2000FDF76FFCFCF74DFF606880F8D850606894 -:106E3000022180F8FC6080F8DB10BDE8F041002002 -:106E400002F09FBD90F8BF10002918BF90F8C8004D -:106E500001D190F8D90009F0AEFA050007D0012160 -:106E600038460AF088FB294638460AF068FB626813 -:106E70004E49D2F8C000C08AC875000A0876D2F818 -:106E8000C000407D88750846FDF7DAFB606890F821 -:106E9000DC102023464D012921D0D5F8C01005F57E -:106EA0009670497B027803EA411122F020021143D7 -:106EB0000170D5F8C00005F582721278417BC2F3EB -:106EC0004012114041736068D5F8C02090F801115C -:106ED00082F85310072180F8DB10BDE8F081D5F867 -:106EE000C0104E7390F8DD30012296210020FDF78E -:106EF00089FA2E48017821F020010170E3E7284B40 -:106F00005968B1F8FE2058B3FF2A0BD24FF6FF7034 -:106F100000EA4200A1F8FE00FF2888BFFF2001D947 -:106F2000A1F8FE009868012812BF00280D20986083 -:106F3000C043C0EBC00202EB001091F8FD20D24329 -:106F400002EB820CCCEB821210449860B1F8FE2068 -:106F5000800CB0FBF2F302FB130081F8FD007047D8 -:106F6000012ADFD95008A1F8FE0008BF0120D9D1BD -:106F7000D6E72DE9F8430446C07810F03F0F1CBF58 -:106F8000207910F0020F05D010F0010F18BF4FF05C -:106F9000010901D14FF000094FF00008004F09E04E -:106FA000D4000020E80D0020743F0200100E0020E5 -:106FB000E40C0020B9F1000F3AD020780026C50972 -:106FC000012120460AF06BFC35B1407900F0C00089 -:106FD000402808BF012500D00025786890F8C4102B -:106FE000032906D190F8BF10002918BF90F8C800F7 -:106FF00001D190F8D90009F0ABF85FEA00080CD095 -:10700000102109F0D0FE45B1012120460AF047FCCD -:1070100001464046FDF73AFF06467868002D90F895 -:10702000B58018BF48F00208FDF752F830434CD045 -:10703000E07810F03F0F1EBF217911F0100F11F012 -:10704000080F30D0042120460AF029FC0546B0F88C -:107050000100C004C00C0AD042460021204601F0C5 -:1070600099FB2846FFF79AFD0120BDE8F883786870 -:1070700090F8DD00012838D1E07810F03F0F1CBFF8 -:10708000207910F0010F30D0B9F1000F04D10021A8 -:107090002046FFF7A6FB28E08DF8008069462046D1 -:1070A000FFF79FFB21E010F03F0F1CBF217911F08B -:1070B000100F1AD110F03F0F1CBF207910F0010FF4 -:1070C00013D0B9F1000FE7D1E1E7786890F8C60076 -:1070D000032818BF022808D13DB136B9FA486946DD -:1070E000006800902046FFF77CFB0020BDE8F88395 -:1070F000F649496881F80001704770B5F34D696839 -:1071000091F8DB00022819BF91F8DB00012800206C -:1071100004461CBF0C2070BDC0EB001301EB8302C2 -:1071200082F82840401CC0B20228F5D30C7081F8C8 -:10713000224091F8D80030B1FDF7E3FAFCF7C1FD29 -:10714000686880F8D8406868012180F8D74080F8E6 -:10715000BF1080F8C44080F8DA40282180F801117F -:1071600080F8004140F2011120F8BC1F817000201E -:1071700070BDD64810B54068002180F8DB100121B1 -:1071800080F8DB10FFF7B9FF002818BFFFDF10BD44 -:107190002DE9F041CD4C07460C26606890F8DB10D5 -:1071A00001291FBF90F8DB0002280C20BDE8F08108 -:1071B000FCF755FF606890F90001FCF7B9FF6068C3 -:1071C00090F8C51080F8DD1090F8BC10012500295A -:1071D00001BF90F8BD10002990F8BE10002973D0AF -:1071E00090F8C400032802D0022805D008E0052149 -:1071F000B74801F077FA03E00321B54801F072FACD -:10720000606890F8D410002904BF90F8D6000028D8 -:1072100044D0FBF7FDF8064660683146D0F8D00050 -:10722000FBF707FEAB4990FBF1F801FB1800414268 -:107230003046FAF7F8FD01466068C0F8D010D0F883 -:10724000CC104144C0F8CC1008F063FF01466068E0 -:10725000D0F8CC20914221D80021C0E9331690F813 -:10726000D60000281CBF012009F076F801216068D3 -:1072700090F8D720002A1CBF90F8D420002A0DD007 -:1072800090F8B53000F1B602012B04D1527902F02A -:10729000C002402A0FD0B630FDF760FE606890F85B -:1072A000B510B630FCF70CFF6068002690F8DB10D4 -:1072B000012918D112E009F07CF861682A46B6313C -:1072C000FDF715FEEAE7FFE790F8DB10022904BF9F -:1072D00080F8DB500C2006D1BDE8F08180F8FC502E -:1072E000022180F8DB10606890F8BF0080B108F0E0 -:1072F000DCFF794809F015F80146606880F8D8107D -:10730000C0F8F8707548FDF784F93046BDE8F081A3 -:1073100008F073FFEDE770B56C4C606890F8DB1017 -:1073200002291CBF0C2070BD012180F8FD10A0F8BF -:10733000FE100220FDF781F96948FCF703FF616840 -:10734000DFF8A0C1002001F1BC0300BF91F8DA20F2 -:10735000521CACFB02546408A4EB84042244D2B255 -:1073600081F8DA20D25C012A03D0401CC0B2032885 -:10737000ECD30020FFF712FC002070BD5349496890 -:1073800081F8C5000020704710B5504C636893F831 -:10739000B430022B14BF032B00280BD100291ABFD5 -:1073A000022901200020114608F0B6FE08281CBF63 -:1073B000012010BD606890F8B400002816BF0228B4 -:1073C00000200120BDE81040FDF752BD3F48406855 -:1073D00090F8B400002816BF022800200120FDF715 -:1073E00047BD3A49496881F8B40070473749496850 -:1073F00081F8D700704770B5344C616891F8B400DB -:10740000002816BF02280020012081F8B500B631FF -:10741000FDF718FD606890F8B410022916BF032923 -:107420000121002180F8D61090F8B520002500F148 -:10743000B603012A04BF5B7913F0C00F0AD000F134 -:10744000B603012A04D15A7902F0C002402A01D0C1 -:10745000002200E0012280F8D420002A04BF002985 -:1074600070BDC0F8CC50FAF7D3FF6168C1F8D00006 -:1074700091F8D60000281CBF002008F06DFF002600 -:10748000606890F8D71000291ABF90F8D41000292E -:1074900070BD90F8B52000F1B601012A04D14979F8 -:1074A00001F0C001402905D02946BDE87040B63042 -:1074B000FDF754BD08F07DFF61683246BDE87040BD -:1074C000B631FDF714BD0000683F0200D400002073 -:1074D000100E002040420F00E80D0020713F020016 -:1074E000773F0200ABAAAAAA70B5FF4D0C46002850 -:1074F0000CBF01230023696881F8BF3081F8C70001 -:107500004FF0080081F8C8000CD1002C1ABF022CE3 -:1075100001200020114608F0FFFD6968082881F865 -:10752000C80001D0002070BD022C14BF032C122013 -:10753000F8D170BD002818BF112070470328EA4A0F -:10754000526808BFC2F8C01082F8C400002070471B -:1075500010B5044602F02CFC052809D002F028FCE6 -:10756000042805D0E048406880F8D540002010BDD0 -:107570000C2010BDDC48416891F8C400032804D0F9 -:10758000012818BF022807D004E091F8C70001289D -:1075900008BF70470020704791F8C600012814BF4B -:1075A00003280120F6D1704710B5FDF793F8FDF7D9 -:1075B00085F8FCF7D5FFFDF732F8CB4C606890F802 -:1075C000D80038B1FDF79DF8FCF77BFB616800201F -:1075D00081F8D8006068012180F8FC10022180F851 -:1075E000DB10002010BDC049496881F8F4007047E5 -:1075F000BD4902784968012A06D0042A1FD0052A0D -:107600000CBF11201220704742780023032A08BFC4 -:10761000C1F8C03081F8C4205FF0010281F8C520B4 -:10762000C27881F8B4200079002816BF0228012210 -:10763000002281F8BF2081F8C600002070478278C0 -:107640000023032A08BFC1F8C03081F8C4200822F3 -:10765000E4E7A5484068704710B5FDF73BF8FDF733 -:107660002DF8FCF77DFFFCF7DAFF9F4C606890F87F -:10767000D80038B1FDF745F8FCF723FB616800201E -:1076800081F8D8006068012180F8FC10022180F8A0 -:10769000DB10BDE81040002002F073B92DE9F04185 -:1076A000914C60680078002818BFFFDF00256068F3 -:1076B00001278570D0F8C0100A8882804A884283EA -:1076C0008A888283C988C18380F82050874990F8CE -:1076D000D620A1F596764AB10A78C2F38013CA1C67 -:1076E00023B1527902F0C002402A33D090F8D7205B -:1076F00042B111F8032BC2F380121AB1497911F08B -:10770000C00F27D00E300CF09DFA606890F8D800BA -:1077100018B1FCF7F6FA012824D06068D0F8C01040 -:107720004A7EC271D1F81A208260C98B818145617D -:10773000058360680770D0F8C02090F8001182F8C7 -:107740005410D0F8C0000088F8F7F4FFBDE8F0410D -:10775000F8F788BCD6F82F11C0F80E10B6F8331120 -:107760004182D2E7FCF710FB616801F10802C91DF4 -:1077700008F000FD002808BFFFDF6068C17941F014 -:107780000201C171D6F807114161B6F80B110183EE -:10779000CFE72DE9F84F544D06464FF0FF096868D2 -:1077A000002480F8D99090F8C410012918BF02294C -:1077B00002D0032918BFFFDF00274FF07F0A002EF9 -:1077C00000F0ED854A4809F0C9FF28B9484809F09A -:1077D000FCFF002800F0E385686890F8DB10444E59 -:1077E0004FF0010806F1280B062980F0D585DFE867 -:1077F00011F0D305D305D30506009F047E0590F84C -:10780000DC1009B301291CBFFFDFBDE8F88F90F839 -:10781000D500002818BFFFDF354809F08CFEA8709E -:10782000F07810F03F0F1CBF307910F0080F00F017 -:10783000D7822F4809F0C6FF002800F0D082012827 -:1078400000F0C58200F0CCBA294809F074FEA87097 -:10785000274809F070FEA870696891F8DD20012AB8 -:107860001DD0042A1EBF082AFFDFBDE8F88F91F85B -:10787000D80018B1FCF745FFFCF723FA1A48FCF7CB -:1078800060FF002808BF85F800A0FCF745FFFCF763 -:1078900067FEA878072800F05B8200F063BDDFF880 -:1078A000548007283FD291F8BF0028B9FCF742FC6A -:1078B000002808BF002400D00124686890F8D80090 -:1078C00080B108F07FFC6968FF2881F8D90017D0E3 -:1078D0000146F01C08F065FC686890F8D90008F0D3 -:1078E0007CFC0443686807E0D4000020100E0020F0 -:1078F000E80D0020E40C002090F8D900FF2817D1F3 -:1079000008F003FD88F8D90098F8BF1081B1082865 -:107910000ED13078F11CC0F3801008F0FDFB082870 -:1079200018BF002404E002BF91F8D500002801240C -:10793000A878082880F0F481DFE800F04EC004FD4C -:10794000FDFD24FC686890F8D80018B1FCF7D9FE5A -:10795000FCF7B7F9FB48FCF7F4FE002808BF85F8F0 -:1079600000A0FCF7D9FE002C00F0DB83686890F8DB -:10797000C400012818BF022840F0D383FCF7F0FDB3 -:1079800000F0C6BB686890F8D80018B1FCF7B9FEE3 -:10799000FCF797F9EB48FCF7D4FE002808BF85F800 -:1079A00000A0FCF7B9FE002C00F0BB83686890F8DB -:1079B000C400022804D0012800F0AA8300F0B1BB63 -:1079C0000021E148FEF70DFF00F027FE6968062060 -:1079D00081F8DE00BDE8F88F686890F8D80018B12B -:1079E000FCF78FFEFCF76DF9D648FCF7AAFE0028DD -:1079F00008BF85F800A0FCF78FFE002C00F09183F3 -:107A0000696891F8C400022830D0012800F0808312 -:107A1000032818BFBDE8F88FF278D1F8C000837E44 -:107A20009A421BD13279C37E9A4217D17279037F71 -:107A30009A4213D1B279437F9A420FD1F279837F70 -:107A40009A420BD1327AC37F9A4207D13278437E71 -:107A5000C2F380129A4208BF012200D0002291F89E -:107A6000C71001290DD0EAB100F029BB0021B648AA -:107A7000FEF7B7FE00F0D1FD686880F8DE70BDE863 -:107A8000F88F002A40F01B8300F11A01AE4809F07C -:107A90005DFDAD4809F078FD6968D1F8C010487601 -:107AA00000F00DBB98F8C800082800F03A8398F859 -:107AB000D910814200F0038300F033BB686890F86E -:107AC000D80018B1FCF71DFEFCF7FBF89D48FCF749 -:107AD00038FE002808BF85F800A0FCF71DFE686886 -:107AE00090F8D61000290CBF4FF001094FF00009A3 -:107AF0000027317806F10902C90907D0517901F050 -:107B0000C001402908BF4FF0010A01D04FF0000A20 -:107B100090F8C410032906D190F8BF10002918BFAF -:107B200090F8C80001D190F8D90008F011FB5FEA85 -:107B3000000B01E09FE0F3E013D0102109F033F9CE -:107B4000002818BF4FF00109BAF1000F04BF6868A0 -:107B500090F8B5B00DD006F109015846FDF796F939 -:107B600007466868BAF1000F90F8B5B018BF4BF03F -:107B7000020B90F8C41003290ED0FCF7F1FCECB313 -:107B8000FCF7A6FA38435ED08DF800B069466E481F -:107B9000FEF727FE00F0E6BBD0F8C000F178827E49 -:107BA00091421BD13179C27E914217D17179027F06 -:107BB000914213D1B179427F91420FD1F179827F05 -:107BC00091420BD1317AC27F914207D13178407E08 -:107BD000C1F38011814208BF012600D0002698F829 -:107BE000D900082806D098F8C810884208BF4FF07E -:107BF000010A01D04FF0000A3FB900E023E0B9F1DB -:107C0000000F04D0FCF764FA08B1012000E0002066 -:107C10004CB198F8C710012903D021B956EA0A01DE -:107C200001D0012100E00021084200F07A8268685A -:107C300090F8C710012904BF002ED0F8C0003FF40F -:107C400023AF00F03CBA686890F8C600032818BF5C -:107C5000022840F08783BAF1000F00F08383002FE1 -:107C600040F0808339486946406800903648FEF706 -:107C7000B8FD00F077BB686890F8D80018B1FCF741 -:107C800040FDFCF71EF82F48FCF75BFD002808BFFD -:107C900085F800A0FCF740FDFCF762FC686890F8EE -:107CA000D500002840F05E83274809F08BFD18B10D -:107CB000012815D000F056BB002C00F053836868F3 -:107CC00090F8C400012818BF022840F04B831E48DA -:107CD000FFF74FF9002818BFBDE8F88F00F042BB4E -:107CE000002C00F03F83184CE07810F03F0F1CBFD1 -:107CF000207910F0100F00F0358310F0010F08BF4D -:107D000010F0020F40F02E830421204609F0C7FD39 -:107D10000546B0F80100C004C00C4ED100F022BBF3 -:107D2000686890F8D80018B1FCF7EBFCFBF7C9FFC6 -:107D30000448FCF706FD002800F04C83FCF7ECFC3F -:107D400000F0EFB9D4000020E80D0020683F0200E9 -:107D5000FE4809F037FD18B1012812D000F002BB2F -:107D6000686890F8C400012818BF022840F0FA8221 -:107D7000F648FFF7FEF8002818BFBDE8F88F00F0BE -:107D8000F1BAF24CE07810F03F0F1CBF207910F0F0 -:107D9000100F00F0E78210F0010F08BF10F0020F83 -:107DA00040F0E0820421204609F079FD0546B0F854 -:107DB0000100C004C00C00F0D58200220121204641 -:107DC00000F0E8FC2846BDE8F84FFEF7E7BEF07883 -:107DD00010F03F0F1CBF307910F0010F00D00124CC -:107DE000F078B846C1464FF0000B10F03F0F1CBFB3 -:107DF000307910F0020F46D06868DFF850B34FF0CA -:107E0000000890F8D60000280CBF4FF001094FF091 -:107E100000099BF800000121C709584609F03FFD01 -:107E200037B1407900F0C000402808BF012700D0DA -:107E30000027686890F8C410032906D190F8BF1095 -:107E4000002918BF90F8C80001D190F8D90008F0B7 -:107E50007FF9009080B1102108F0A5FF002818BF1D -:107E60004FF0010947B10121584609F018FD0146BC -:107E70000098FDF70BF880466868002F90F8B5B0C1 -:107E800018BF4BF0020BA878072878D1686890F8E3 -:107E9000D80018B1FCF735FCFBF713FFAC48FCF732 -:107EA00050FC002808BF85F800A0FCF735FCA74867 -:107EB00009F088FC00287CD0012860D10321A34868 -:107EC00009F0EDFC002C5AD0696891F8DF20012AF6 -:107ED00055D1427891F8E1301209B2EB131F4ED11F -:107EE0000088B1F8E020C0F30B00C2F30B0290420F -:107EF00045D191F8C400012818BF022810D00328EA -:107F000018BFBDE8F88F0021904809F0C8FC6968E7 -:107F10000622D1F8C0101A310BF0C0FC80BB30E053 -:107F2000FCF71EFBF07810F03F0F1CBF307910F00B -:107F3000020F0ED0FCF7CCF850EA08007FF424AE14 -:107F4000686890F8C600032818BF022840F00A822B -:107F500005E000217D48FEF744FC00F003BA002F45 -:107F600000F00082B8F1000F40F0FC8179486946CA -:107F7000806800907548FEF734FC00F0F3B9B8E073 -:107F80000AE0724809F000FB6968D1F8C010497E28 -:107F9000884208BF012400D00024F07810F03F0F81 -:107FA0001CBF307910F0020F04D0B8F1000F3CD0A4 -:107FB00041E088E0686890F8C710012901D0ACB1B1 -:107FC0001AE0CCB90021614809F069FC69680268CF -:107FD000D1F8C010C1F81A208088C8835B4809F026 -:107FE000D3FA6968D1F8C010487605E090F8D91046 -:107FF00090F8C80081427CD1686890F8DD1011F0DB -:108000000C0F5CD090F8DD1011F00C0F71D0012333 -:10801000D0F8C0101A46002009F04BF86968D1F872 -:10802000C010496A88424AD97BE0B9F1000F04D0F8 -:10803000FCF74EF808B1012200E00022686890F8D1 -:10804000C710012907D041B92CB990F8D93090F860 -:10805000C800834201D1012000E00020024260D02C -:10806000012908BF002C12D10021384809F017FC63 -:1080700069680268D1F8C010C1F81A208088C883E6 -:10808000324809F081FA6968D1F8C010487668680A -:1080900090F8DD1011F00C0F11D090F8DD1011F0F8 -:1080A0000C0F3ED00123D0F8C0101A46002009F072 -:1080B00000F86968D1F8C010496A884231D8BDE833 -:1080C000F84FFEF768BEFCF74BFA03211F4809F092 -:1080D000E6FB002C7ED0696891F8DF20002A79D178 -:1080E000427891F8E1301209B2EB131F72D1008887 -:1080F00000E016E0B1F8E020C0F30B00C2F30B0281 -:10810000904267D191F8C400012818BF022861D1BC -:1081100000210E48FEF765FBBDE8F84F0020FEF792 -:108120003DBDFCF71DFABDE8F84F0020FEF736BD57 -:10813000064809F000FAA870F0789BF80910884208 -:1081400029D130799BF80A10884205E0E80D00201B -:10815000D4000020683F02001DD170799BF80B10FD -:10816000884218D1B0799BF80C10884213D1F0796D -:108170009BF80D1088420ED1307A9BF80E10884281 -:1081800009D130789BF80010C0F38010B0EBD11FFC -:1081900008BF012400D00024FCF7E2F9A8780428E5 -:1081A0003ED1ECB3F948FCF7CCFA002808BF85F8BB -:1081B00000A0FCF7B1FA686890F8FC0000281CBF2A -:1081C0000020FEF79CFE6868F14E80F8FC8090F875 -:1081D000641000E02AE049BB90F8D5104FF01F0B67 -:1081E00000F1660419B30420A072621CA11C304681 -:1081F00000F0DAF904F10B01304609F026FAC0B2BA -:1082000020721F2888BF84F808B0287809347F2896 -:1082100008BFFFDF2878207085F800A0686800E0BC -:108220004CE080F86480042001F0ABFB9AE06189A7 -:1082300021F06001618184F80C80677384F80E90EE -:1082400084F819A090F8DE10002904BF608940F07E -:10825000010031D090F8DE00062806BF608920F0CA -:108260000100FFDF28D06089621C20F0640040F02C -:108270001A006081A11C304600F096F904F11A0141 -:10828000304609F0E2F9C0B220721F2888BF84F896 -:1082900008B004F1090628787F2808BFFFDF287896 -:1082A000307085F800A084F819A0686880F86480B0 -:1082B000042001F066FB55E06081D4E7B348FCF789 -:1082C00040FA002808BF85F800A0FCF725FA686886 -:1082D00090F8FC00002804BF0120FEF710FE68683B -:1082E00080F8FC70BDE8F84F0020FEF757BC90F80E -:1082F000DC00012818BFFFDFA448FCF722FA0028A1 -:1083000008BF85F800A0FCF707FAA14809F013F9A7 -:10831000A87000219E4809F0C2FA06220BF109015B -:108320000BF0BCFAF0B99A4809F02EF904469948C6 -:1083300009F037F9844215D10121954809F0AFFAC7 -:1083400006220BF103010BF0A9FA58B9904809F085 -:1083500028F904468F4809F017F9844204BFA87829 -:10836000082804D0BDE8F84F0020FEF717BCFCF742 -:10837000B1F9FCF7A3F9FCF7F3F8FCF750F96868DA -:10838000022180F8FC8080F8DB10FFF787F9BDE858 -:10839000F84F022001F0F5BAFFDFBDE8F88F6868FA -:1083A00090F8DB10052928BFBDE8F88FDFE801F061 -:1083B000030303041500F0E790F8D80018B1FCF7A8 -:1083C000A0F9FBF77EFC7148FCF7BBF900287FF4AD -:1083D000B5AC00BF85F800A0B0E46C48FCF7B1F97B -:1083E000002808BF85F800A0FCF796F9686890F8A7 -:1083F000FC00002804BF0120FEF781FD686880F8BA -:10840000FC708EE670B5614C606890F8DB1008294E -:1084100050D2DFE801F04F4F4F4F4F4F04125C48EE -:10842000FCF70EF9FCF782F900219620FCF723F9FE -:108430006168042081F8DB0070BD90F8DC10012534 -:1084400019B390F8DC0001281CBFFFDF70BD504855 -:10845000FCF7F6F8FCF76AF9606890F8DD30012265 -:1084600096211046FBF7CEFF616891F8DD0091F888 -:10847000011110F00C0F08BF00219620FCF7FBF84B -:108480006168052081F8DB0070BDFCF723F9FCF77B -:1084900015F9FCF765F8FCF7C2F86068022180F86E -:1084A000FC5080F8DB10FFF7F9F8BDE870400220BF -:1084B00001F067BAFFDF70BD70B5344C606890F8AA -:1084C000DB1000267F25062928BF70BDDFE801F0FC -:1084D0005D5D5D23031D2D48FCF733F9002808BFBF -:1084E0002570FCF719F9606890F8FC00002804BFBB -:1084F0000120FEF704FD606880F8FC60FCF730F8AE -:10850000BDE870400020FEF749BB2048FCF719F990 -:1085100098B9257011E090F8DC10B9B1012918BFA5 -:1085200070BD90F8D80018B1FCF7EBF8FBF7C9FB69 -:108530001648FCF706F90028EBD0FCF7EDF8FCF73D -:108540000FF8BDE870400020FEF728BBFCF7C2F82A -:10855000FCF7B4F8FCF704F8FCF761F8606890F8F1 -:10856000D80030B1FCF7CDF8FBF7ABFB606880F8C2 -:10857000D8606068012180F8FC10022180F8DB10CF -:10858000BDE87040002001F0FCB970BDD4000020AF -:10859000E80D0020100E0020B14A526892F8DD303C -:1085A00092F8DD2001F0DEBB70B50646AC481446FB -:1085B0000D46406890F8D80018B1FBF7A2FB0128DF -:1085C0000ED0304608F0E0FF2070304608F0B3FFD0 -:1085D000072813D229463046BDE8704008F0B6BFE0 -:1085E000FBF7D2FB2A46214607F0C4FD002808BF4E -:1085F000FFDF207840F00200207070BD304608F0A8 -:108600009AFF072818BF70BD0021304609F047F9CE -:10861000016829608088A88070BD70B50025904CE5 -:108620002A460121022001F021F8D8B18D49A1F19B -:10863000280008F0B9FF60688A4E90F8B5103046FF -:1086400008F099FF606800F1B601304608F077FF46 -:10865000606890F8D610002938D090F8C41003292B -:108660001FD025E0FCF736F8FCF728F8FBF778FF79 -:10867000FBF7D5FF606890F8D80030B1FCF741F8FF -:10868000FBF71FFB606880F8D8506068012180F814 -:10869000FC10022180F8DB10BDE87040002001F0E2 -:1086A00070B990F8BF10002918BF90F8C80001D128 -:1086B00090F8D90007F07FFE050007D00121304671 -:1086C00008F059FF2946304608F039FF6548FBF7A6 -:1086D000B7FF01210846FCF74CF86168062081F8D5 -:1086E000DB0070BD70B50D46044608F0FFFE032D9B -:1086F0004AD0052D18BF70BD0521204608F0FBFEAD -:10870000574D6868D0F8C00000F10E01204608F00F -:10871000B0FF6868D0F8C00000F11201204608F0F0 -:10872000ACFF6868D0F8C010497DA175D0F8C010C2 -:10873000C98AE175090A2176D0F8C01049886176A6 -:10874000090AA176D0F8C0108988E176090A217754 -:10875000D0F8C010C9886177090AA177D0F8C000A5 -:1087600000F10801204608F0A6FF6868D0F8C000B4 -:10877000017E204608F087FF686890F8F4102046D4 -:10878000BDE8704008F089BF2046BDE87040032175 -:1087900008F0B1BE2DE9F0410E461746054603210B -:1087A00009F07DF840782E4C0209606890F8E110DD -:1087B00062F3071180F8E1100321284609F06FF8F1 -:1087C00001886068B0F8E02061F30B02A0F8E020B7 -:1087D00080F8DF6090F8C510012918BFBDE8F0816E -:1087E000E9784FF0010611F03F0F1CBF297911F015 -:1087F000010F08D000F1E802911F2846FFF7D4FED0 -:10880000606880F8F160E87810F03F0F1CBF2879AD -:1088100010F0020F0FD00121284609F040F8014660 -:1088200060680A68C0F8E9208988A0F8ED1080F82F -:10883000EF7080F8F260E87810F03F0F1ABF2879E7 -:1088400010F0400FBDE8F0810621284609F027F816 -:108850000178606880F8F01080F8F360BDE8F0817E -:10886000D4000020100E00202DE9FF4F07460C46D3 -:10887000488881B040F2E24148430090E08A0026F7 -:1088800000FB01FB94F8630091460D2818BF0C28EB -:108890001FD025281EBF94F8640025284FF0000A39 -:1088A00017D0049818B10121204603F071FE94F806 -:1088B000510094F8528094F8C810054661B101291E -:1088C00066D002294BD0032918BFFFDF60D000F02B -:1088D000CDB84FF0010AE4E7B9F1000F08BFFFDFA0 -:1088E000F94EB068002808BFFFDF94F85100FCF78C -:1088F000E8F900F2E7314FF47A70B1FBF0F0B168BB -:1089000000EB010994F85100FCF7DBF9014694F8FB -:108910005100022804BFED484FF47A720DD00128AF -:1089200004BFEB484FF4C86207D0042807BFE948EA -:1089300040F69802E84840F6E4421044084400F249 -:10894000E7314FF47A70B1FBF0F040F2E241081ADF -:108950007169584449440844061D012015E0DA486D -:10896000A9F101018068084308BFFFDFDB48B9F1C6 -:10897000000F006800EB0B0606D0D348806800F2B9 -:108980002230B04288BFFFDF032084F8C8006CE0CB -:1089900094F86310009E25291CBF94F864102529C3 -:1089A0004FD1B4F85810B4F8EA20891A491C09B21A -:1089B000002946DB94F8E810002942D00D4694F8CF -:1089C000E910002918BF8846022804BFBF484FF4A9 -:1089D0007A710DD0012804BFBD484FF4C86107D09B -:1089E000042807BFBB4840F69801BB4840F6E44165 -:1089F0000144022D04BFB5484FF47A720DD0012D09 -:108A000004BFB3484FF4C86207D0042D07BFB14874 -:108A100040F69802B04840F6E4421044814208D93A -:108A2000081A00F5FA714FF47A70B1FBF0F00644C1 -:108A300007E0401A00F5FA714FF47A70B1FBF0F0DC -:108A4000361AB9F1000F10D0DFF87C92D9F808007F -:108A500020B9B9F80200002818BFFFDFD9F80800D4 -:108A600000F22230B04288BFFFDF06B9FFDF314697 -:108A7000D4F8CC00F9F7D7F9C4F8CC00B8600020DE -:108A800038704FF0010987F80490204603F06CFE1F -:108A9000AAF10101084208BF87F8059006D094F8B2 -:108AA000C80001280CBF0220032078714046D4F88A -:108AB00024B0FCF7EDF80146022D04BF83484FF4C3 -:108AC0007A720DD0012D04BF81484FF4C86207D0DF -:108AD000042D07BF7F4840F698027F4840F6E442E5 -:108AE0001044084400F23F614FF47A70B1FBF0F09B -:108AF000584400F5C970F860049830EA0A0004BFD1 -:108B000005B0BDE8F08F3146384608F059FA85B215 -:108B1000204603F029FEA8420FD8054687F80590A5 -:108B200006FB05F1D4F8CC00F9F77DF9B8603146C1 -:108B3000384608F045FA284485B22946204603F015 -:108B400027FDB868C4F8CC0005B0BDE8F08F2DE96A -:108B5000F0430446624885B00D4690F80004DFF803 -:108B60008491400999F800144909884218BFFFDF31 -:108B7000DFF85481002708F14006082D80F00C81B1 -:108B8000DFE805F0046872726DFDFDB4202C28BF8B -:108B9000FFDF36F814000621F7F79AFC050008BF3E -:108BA000FFDF202C28BFFFDF36F814002988884219 -:108BB00018BFFFDF95F8C800002808BFFFDF284670 -:108BC00003F0E8F9C8F80870A8F8027029460020F8 -:108BD000C8F8147008F0BEFA00F19804686AA04260 -:108BE00025D995F85200FCF753F8014695F8510045 -:108BF000022804BF35484FF47A720DD0012804BF13 -:108C000033484FF4C86207D0042807BF314840F604 -:108C10009802314840F6E442104408444FF47A7117 -:108C200000F23F60B0FBF1F1686A0844071B294677 -:108C30000020C8F80C7008F08DFA698840F2E24212 -:108C400051439830081AA0F22230C8F8100005B03D -:108C5000BDE8F08305B0BDE8F04303F066BB05B0A6 -:108C6000BDE8F043FBF7D2BD99F8140D1E49400949 -:108C700091F800144909884218BFFFDF202C28BF53 -:108C8000FFDF36F814000621F7F722FC050008BFC5 -:108C9000FFDF202C28BFFFDF36F814002988884228 -:108CA00018BFFFDF0022012329466846FFF7DCFDDD -:108CB00095F8D2006946F9F7F5FD002808BFFFDFF7 -:108CC00005B0BDE8F0830000380E002068360200D1 -:108CD000A2240200D0FB010030D30100E4000020F8 -:108CE00001E000E00BE000E019E000E0202C28BFEC -:108CF000FFDF36F814000621F7F7EAFB050008BF8E -:108D0000FFDF202C28BFFFDF36F8140029888842B7 -:108D100018BFFFDF95F8C800042818BFFFDF85F8EB -:108D2000C87095F8D2404FF6FF79202C28BFFFDF9E -:108D300026F8149095F8D200F9F74BFB002808BFED -:108D4000FFDF202085F8D200D5F8D800002804BF26 -:108D5000D5F8D400C8F8180008D0D5E93712114466 -:108D6000826911448161D5E93501C860D5F8D40024 -:108D700000281CBFD5F8D810016106D100E00BE037 -:108D8000D5F8D800002818BF8761FE48007805B0E4 -:108D9000BDE8F043EAF7CCB8FFDF91E72DE9F05FDB -:108DA000F94E07468B46F08B7568401CF08330788F -:108DB0004FF00008002808BFFFDF07D0DFF8CC9392 -:108DC00004282ED0052818BFFFDF5BD05846FEF7D9 -:108DD00040FC040008BFFFDF29463069F9F723F89B -:108DE000B86087F800800120387194F8C500022827 -:108DF00008BFE74807D0012808BFE64803D0042889 -:108E00000CBFE548E5484FF47A7100F2E140B0FB51 -:108E1000F1F0B168D9300844F860307804287DD189 -:108E200083E0002AD2D0D6F810A0D9F8184034B385 -:108E3000A146E468002CFBD1B9F1000F1FD099F8CE -:108E40000000002808BFFFDFD9F81410D9F804008B -:108E500001445046F9F7EDFF002807DA291A491EA8 -:108E600091FBF5F101FB05042A4604E090FBF5F1C6 -:108E700001FB15042A46944288BFFFDF00E0444608 -:108E80002546A3E7002AA1D0B569002D08BFFFDF62 -:108E90000024D5F8DC20D9F818002346611E58B10B -:108EA0008369934228BF994284BF1946044603460A -:108EB000C0680028F4D104B91C46C5F8D840C835AC -:108EC000002C04BFC5F80C80C9F8185005D0E06824 -:108ED000E560E860002818BF0561D5F81090C5F876 -:108EE0001880B9F1000F0ED0D9F8180048B1D5F8A4 -:108EF00014A0504538BFFFDFD9F81800A0EB0A00D6 -:108F0000A861C9F81880002C08BFC6F8208009D0D5 -:108F10002078002808BFFFDF616900E00AE0606890 -:108F20000844306240F6B83550E7F08B0A2838BF65 -:108F3000032000D302207871F08B012807D938462E -:108F4000716808F03DF80146F08B0844F083B8687A -:108F50003061BDE8F09F2DE9F0410746904884B0AC -:108F60000D4690F80004DFF83C82400998F80014A0 -:108F70004909884218BFFFDF01200026082D824CD6 -:108F800080F0BB80DFE805F004718C8C87B9B9A54F -:108F900060732073607800281CBF04B0BDE8F081C6 -:108FA0007A488660466126733846FEF752FB050014 -:108FB00008BFFFDF95F8C500022804BF7A494FF4C7 -:108FC0007A720DD0012804BF72494FF4C86207D0ED -:108FD000042807BF704940F69802744940F6E442FD -:108FE00011444FF47A7201F2E731B1FBF2F1A26859 -:108FF0008C18FBF73BFE024695F8C500082808BF11 -:10900000082127D004280CBF0221002322D00228E7 -:109010000CBF182128211944042816BF08280F2343 -:1090200025235B1D082808BF402007D0042808BF5F -:10903000102003D002280CBF0420082013FB0010CE -:10904000801A201AFEF7A4F8002818BFFFDF04B02A -:10905000BDE8F08101EB410101F12803082814BFAC -:1090600004284FF4A871D6D0D1E7617851B1207BA4 -:10907000002808BFFEF798FA667304B0BDE8F04117 -:10908000F9F7D1B8A073FEF746F9002818BFFFDF43 -:1090900004B0BDE8F08104B0BDE8F041FBF7B6BB19 -:1090A00098F8140D4249400991F800144909884282 -:1090B00018BFFFDF002239466846FFF76FFE69469A -:1090C0003846F9F7EFFB002808BFFFDF04B0BDE822 -:1090D000F0812078052818BFFFDF207F002808BF17 -:1090E000FFDF26772670207DF9F773F9002808BF87 -:1090F000FFDF267504B0BDE8F081FFDF04B0BDE8F6 -:10910000F0812DE9F041204C0026207804281FBF73 -:10911000207805280C20BDE8F08101206070607B7C -:109120000025A8B1EFF3108010F0010F72B60CBF4C -:1091300000270127607B00281CBFA07B002805D0EA -:10914000FEF732FA6573A573F9F76DF82FB903E0EE -:10915000207DF9F7BAFC00E062B6207DF9F703FF45 -:10916000207F28B125772078052818BFFFDF0C263F -:1091700065702570207DF9F72CF9002808BFFFDF06 -:10918000257517E0E0000020540E0020380E002066 -:1091900004360200A2240200D0FB0100C0D401006A -:1091A00001E000E00BE000E06836020030D301008F -:1091B00019E000E03046BDE8F0812DE9F04FFC48B1 -:1091C00083B00078002818BFFFF79BFF0120DFF86D -:1091D000E48388F8000069460620F7F702F90028C2 -:1091E00018BFFFDF00274FF6FF7934E00298002810 -:1091F0001CBF90F8C81000292DD0008848451CBF1E -:10920000DFF8B4A34FF0200B3BD00621F7F760F94D -:10921000040008BFFFDF94F8D200F9F7A4FE84F839 -:10922000C87094F8D2504FF6FF76202D28BFFFDF8C -:109230002AF8156094F8D200F9F7CBF8002808BF97 -:10924000FFDF84F8D2B069460620F7F7CAF8002895 -:1092500018BFFFDF10E06846F7F7A1F80028C5D077 -:109260000FE0029800281CBF90F8C810002903D016 -:1092700000884845C9D104E06846F7F790F800280F -:10928000EFD088F80070C8F8187003B00020BDE86F -:10929000F08F10B5C94C60B101280CBF40F6C41066 -:1092A000FFDF06D0A06841F66A01884228BFFFDFD1 -:1092B00010BDA060F6E710B5DFF800C3BC4C00237A -:1092C0008CF8000023706370237723736373A37398 -:1092D0002020A3612075A4F11C0043703E301021B2 -:1092E0004FF6FF72428020F8042F491EFAD1CCF8C5 -:1092F0000830DCF8080041F66A01884228BFFFDF29 -:10930000FFF75BFF40F6C41101206160FBF7C0FC72 -:1093100000F2E7314FF47A70B1FBF0F042F21071D5 -:109320000844A0606168A1F2F621884298BF014616 -:10933000A16010BDF0B59E4C054685B02078002890 -:109340001EBF0C2005B0F0BD95F8516095F8520095 -:109350006F6AFBF79DFC022E04BF99494FF47A72A5 -:109360000DD0012E04BF97494FF4C86207D0042ED8 -:1093700007BF954940F69802944940F6E4421144EB -:1093800008444FF47A7100F23F60B0FBF1F03844CA -:1093900000F22230C5F8DC00A56195F8C80000286D -:1093A00018BFFFDF002083494861052121706070EC -:1093B0002077E0838648F8F7B1FF2075202808BFA2 -:1093C000FFDFF9F725F82061217D01226846FFF7CC -:1093D000E5FC207D6946F9F765FA002808BFFFDF44 -:1093E000002005B0F0BD7248007800281CBF0020A6 -:1093F000704710B50620F7F705F880F0010010BDA2 -:1094000070B56B4C05462078002818BFFFDF287820 -:10941000012833D004281CBF112070BDE8882E8994 -:109420005FF0080540F27121484360602846FBF771 -:109430002FFC4FF47A7100F2E730B0FBF1F040F20C -:10944000712206FB0200A060022D08BF614A07D00E -:10945000012D08BF5B4A03D0042D0CBF5A4A5E4A57 -:1094600002F2E142B2FBF1F16268511AA1F2692104 -:10947000884298BF01460020A16070BD6888AE8810 -:109480000125CFE710B584B008431EBF112004B0FA -:1094900010BD474C207800281EBF0C2004B010BD22 -:1094A0000020607004212170E0834948F8F736FFFE -:1094B0002075202808BFFFDF3E48806938B101468B -:1094C000C0680028FBD111B1F8F7A2FF05E0F8F75A -:1094D0009FFF40F6B831F8F7A6FC2061217D0122FC -:1094E0006846FFF75BFC207D6946F9F7DBF9002849 -:1094F00008BFFFDF002004B010BD70B52C4CA1697F -:109500000160FFF7FEFD002300BBA169D1F8D82060 -:109510005AB1D1E937C5AC449569AC44C2F818C01A -:10952000D1E9352CCCF80C2005E0DFF888C0D1F863 -:10953000D420CCF81820D1F8D420D1F8D810002AA3 -:1095400018BF116102D1002918BF8B61A36170BDE2 -:1095500018494870704770B540F2E24300FB03F5CC -:1095600010460C46FBF794FB022C04BF14494FF441 -:109570007A720DD0012C04BF12494FF4C86207D093 -:10958000042C07BF104940F69802104940F6E44207 -:10959000114408444FF47A7100F23F60B0FBF1F0DF -:1095A00000F2223085428CBF281A002070BD0000D6 -:1095B000540E0020380E0020780E0020E00000201D -:1095C00068360200A2240200D0FB010030D3010063 -:1095D000578F010004360200C0D4010070B50D465B -:1095E00006460146002007F0B5FD044696F85200F5 -:1095F000FBF74EFB014696F85100022804BFFE4AD5 -:109600004FF47A700DD0012804BFFC4A4FF4C860B3 -:1096100007D0042807BFFA4A40F69800F94A40F6F6 -:10962000E440104408444FF47A7100F23F60B0FB0C -:10963000F1F0718840F271225143C0EB4100A0F279 -:109640002230A54234BF21462946814203D2A54299 -:109650002CBF28462046706270BD10B5FBF706FB94 -:10966000E9498A684968511A084410BD2DE9F04F4C -:10967000DFF894B328274FF01008DBF808304FF0DC -:10968000080903F1980404234FF0000C4FF4C87547 -:109690004FF4BF764FF0400A052870D2DFE800F0A3 -:1096A0000328222545001420042912D0082909D0B6 -:1096B0002A20022911D010FB094000232821194437 -:1096C00044185DE0534610FB034000BF4FF4A871FF -:1096D000F5E710FB08402E23F8E710FB0340634634 -:1096E0001821ECE704F531744AE004F5B07447E062 -:1096F000082908BF40200CD0042904BF354610209B -:1097000007D0022907BF0CF1180504200CF1280529 -:109710000820C0EBC000DBF8041000EB400005EBB4 -:10972000400011440844841C2AE0D0B211F00C0F10 -:1097300008BF0020082904BF00F5356140200ED085 -:10974000042916D002290CBF0CF1B4010CF5B0713C -:10975000014407BF0CF1180504203D46082000EB2A -:10976000400202EB001028440844204400F19C040D -:1097700006E000F2EE3135461020F0E7FFE7FFDFAC -:10978000A2488068A0428CBF01200020BDE8F08F75 -:1097900010B59D4C607828B1D4E90301A26807F0A8 -:1097A00037FCE060D4E9020188429CBF20780028A1 -:1097B00014BF0020012010BD04222DE9F04F8E4E71 -:1097C0008E4FDFF83C82DFF83C9285B04FF47A7A16 -:1097D000052980F0D280DFE801F00A2B03319200E6 -:1097E00080F8C82005B0BDE8F04FF8F71CBD04466E -:1097F00085480078002818BF84F8C82004D005B038 -:10980000BDE8F04FF8F70FBD01220023214668465E -:10981000FFF72AF894F8D2006946F9F743F80028D0 -:1098200008BFFFDFB4F85800401CA4F85800E6E772 -:10983000032180F8C81005B0BDE8F08F834640884A -:1098400040F2E241484372490860DBF8F0005946B3 -:109850000089ABF81600DBF8F00080798BF8150072 -:10986000DBF8F0004089ABF80200DBF8F0008089FB -:10987000ABF80400DBF8F000C089ABF8060000206C -:10988000DBF8285007F066FC04469BF85200FBF713 -:10989000FFF99BF85110022908BF4FF47A710DD0DF -:1098A000012904BF3E464FF4C86107D0042907BF11 -:1098B000464640F698014E4640F6E441314408449D -:1098C00000F23F60B0FBFAF1BBF8020040F27122F7 -:1098D0005043C1EB4000A0F22230A54234BF2146E4 -:1098E0002946814203D2A5422CBF28462046CBF808 -:1098F000240002208BF8C80005B0BDE8F08F834635 -:109900000146856A002007F025FC04469BF85200BA -:10991000FBF7BEF99BF85110022908BF4FF47A718A -:109920000DD0012904BF3E464FF4C86107D0042979 -:1099300007BF464640F698014E4640F6E4413144A2 -:10994000084400F23F60B0FBFAF0BBF8021040F2AE -:1099500071225143C0EB4100A0F22230A54234BF36 -:1099600021462946814203D2A5422CBF28462046E3 -:10997000CBF8240005B0BDE8F08FFFDF05B0BDE8EF -:10998000F08F2DE9F04F23490126002409781F4D5F -:1099900085B0052880F0DF81DFE800F00319FDFCC9 -:1099A000FC00EC830846E9F7C3FA6878002840F029 -:1099B0009181297D00226846FFF7F0F9287D6946EC -:1099C000F8F770FF002808BFFFDF00F083B9287D9B -:1099D000FDF73FFE040008BFFFDF94F8DC0000281D -:1099E000DFF814A0DFF81490DFF81480054E064F5E -:1099F00094F8DD0010E0000068360200A2240200A6 -:109A0000D0FB010030D30100380E0020540E00209E -:109A1000E4000020E000002000F0DC8094F8011158 -:109A200010F00C0F08BF002194F8DD0008281EBFBD -:109A300094F8DD000428002000F0068194F8DD2071 -:109A4000082A1ABF94F8DD20042A4FF4A87205D022 -:109A500094F8DD20022A0CBF18222822831894F8DB -:109A6000DD00082808BF40200BD094F8DD00042852 -:109A700008BF102005D094F8DD0002280CBF042098 -:109A80000820C0EBC00202EB4010034494F8DD0054 -:109A900008281EBF94F8DD000428002200F0DE80B4 -:109AA00094F8DD0008281ABF94F8DD0004284FF46C -:109AB000A87005D094F8DD0002280CBF18202820DB -:109AC000104494F8DD20082A08BF4FF0400C0ED057 -:109AD00094F8DD20042A08BF4FF0100C07D094F84A -:109AE000DD20022A0CBF4FF0040C4FF0080C0CEBE9 -:109AF0004C0202EB0C12104418442A69BB681A4449 -:109B0000104401EB000B94F8DD00FBF7C1F80146AF -:109B100094F8DD00022808BF56460AD094F8DD000C -:109B2000012808BF4E4604D094F8DD00042808BF81 -:109B3000464694F8DD00022808BF4FF47A700ED034 -:109B400094F8DD00012808BF4FF4C86007D094F8EE -:109B5000DD0004280CBF40F6980040F6E440304495 -:109B6000084400F2E7314FF47A70B1FBF0F0ABEB50 -:109B7000000000F21A60A96940F2E2424B88C83145 -:109B800003FB02F6BA698A4208BF4FF0000815D0FD -:109B9000296A01E0D9E08CE0F9F74BF90028A4BF6D -:109BA00090FBF6F101FB160805DA311A491E91FB0C -:109BB000F6F202FB0608B04588BFFFDF7E488068EA -:109BC000804555D2A96940F271224888424308EB8A -:109BD000420852E0FBF75CF8014694F8DD000228E9 -:109BE00008BF56460AD094F8DD00012808BF4E464B -:109BF00004D094F8DD00042808BF464694F8DD0040 -:109C0000022808BF4FF47A700ED094F8DD000128C6 -:109C100008BF4FF4C86007D094F8DD0004280CBFDB -:109C200040F6980040F6E4403044084400F2E73142 -:109C30004FF47A70B1FBF0F02969BA681144081A40 -:109C400000F2DE6097E700BF94F8DD00082818BF37 -:109C5000022000EB40002830F0E600BF94F8DD0061 -:109C6000082818BF022000EB400000F1280217E787 -:109C700040F2E240B8FBF0F0A969C88294F8DD1028 -:109C8000A86980F8511094F8DD1080F85210052171 -:109C90004175C08A6FF41C71484308EB400040F6E0 -:109CA00035417861B0EB410F28BFFFDF05B0BDE85B -:109CB000F08FEC830846E9F73BF92E77A86929690C -:109CC000C0F8CC1080F8C8402978052918BFFFDFFC -:109CD00007D000BFF8F7A7FA6C73AC7305B0BDE806 -:109CE000F08F002808BFFFDFA86990F8C80000289F -:109CF00018BFFFDFA86990F8D200202818BFFFDF47 -:109D00002E48F8F70BFBA9690646202881F8D200F7 -:109D10000F8828BFFFDF2A4820F81670A86990F83E -:109D2000D200202808BFFFDF002301226846A9696E -:109D3000FEF79AFDA869694690F8D200F8F7B2FDDF -:109D4000002808BFFFDFAC61C4E705B00846BDE8E6 -:109D5000F04FE9F7EDB8FFDF05B0BDE8F08F194926 -:109D60004860704770B5174D0446002904BFA860CD -:109D700070BD4FF47A76012910D002291CBFFFDF95 -:109D800070BD6888401C68801046FAF79AFF00F2A0 -:109D9000E730B0FBF6F0201AA86070BD1846FAF75D -:109DA000A5FF00F2E730B0FBF6F0201AA86070BD06 -:109DB0000548007870470000E00000204F8B01004C -:109DC000780E0020380E0020540E0020FD48406818 -:109DD00070472DE9F0410D46064601461746012021 -:109DE00007F0B8F9044696F85200FAF751FF014619 -:109DF00096F85200022808BFF34807D0012808BF90 -:109E0000F24803D004280CBFF148F24808444FF44C -:109E10007A7100F2E140B0FBF1F0718840F27122FA -:109E20005143C0EB4100C01BA0F55970A54234BF9F -:109E300021462946814203D2A5422CBF284620460E -:109E40007062BDE8F0812DE9FF4F8FB09946DDF8D3 -:109E500070A0044690F852504AEA0900019094F824 -:109E60006400002790460D280CBF012000200990B7 -:109E7000B9F1000F04BF94F8040103282BD109980D -:109E800048B3B4F87C01404525D1D4F80C01C4F89E -:109E9000F800608840F2E2414843C4F8FC00B4F89E -:109EA0005201B4F8DE100844C4F80001204604F062 -:109EB00018FDB4F88001E08294F87E016075B4F872 -:109EC00082016080B4F88401A080B4F88601E0804B -:109ED000022084F80401D4F85C010C90B4F8DE0090 -:109EE000D4F858B10690B4F85001D4F84C1104914C -:109EF000B9F1000F03D094F8181149B184E004F1CE -:109F0000D801029174310A9104F59C76091D07E08D -:109F100004F596710291091D0A9104F58E76091DCA -:109F20000B91B4F85810A8EB0000A8EB010109B29E -:109F300000B20091002805DAD4F84801049001200D -:109F40000190084694F80411002961D0012900F01D -:109F50002F82022900F04481032918BFFFDF00F09F -:109F60007F8239460498F7F75EFF0A9908600B98DC -:109F7000A0F8008000203070012030710A99096833 -:109F8000B1609549D1E905218A4287BF029A1160E3 -:109F900002990A600299626A0968114401F2831108 -:109FA000F1607071B4F8C810A1EB080109B2002982 -:109FB000C4BF032171710999002900F0DF82BAF151 -:109FC000000F18D0B4F8F020002A0CBF0021B4F81C -:109FD000F210A4F8F21094F8F430491C594391425D -:109FE00009D27179491E002905DD7071B4F8F200BB -:109FF000401CA4F8F200B9F1000F00F0E38294F8DD -:10A000001801002800F0DA8213B00220BDE8F08FBA -:10A01000BBF1000F08BFFFDFE08A40F27121484327 -:10A02000490001EB400210980021002806D000FBF7 -:10A0300002F16A48B1FBF0F000F10101C4F8081127 -:10A04000608840F2E24100FB01F210994FF00000FD -:10A0500006D0624801FB02F1B1FBF0F000F1010013 -:10A06000C4F80C0180B2A76A039021464FF00100AA -:10A0700007F070F8054694F85200FAF709FE014619 -:10A0800094F85200022808BF4F4807D0012808BFA3 -:10A090004E4803D004280CBF4D484E48084400F2F7 -:10A0A000E1414FF47A70B1FBF0F1608840F2712227 -:10A0B0005043C1EB40010398081AA0F55970AF4214 -:10A0C00034BF29463946814203D2AF422CBF3846BD -:10A0D000284660620120FAF709FE00F2E1414FF4E0 -:10A0E0007A70B1FBF0F05844039094F8525028462F -:10A0F000FAF7FCFD0146022D08BF334807D0012DB9 -:10A1000008BF324803D0042D0CBF314831480F1826 -:10A110002846FAF7BDFD384400F2DB514FF47A705F -:10A12000B1FBF0F0E18A40F271225143D4F80851BA -:10A13000C0EB4100411B0398084400F2C247607D18 -:10A14000510010FB01F00C9094F85200009010F0B8 -:10A150000C0F18BF4DF6883103D10098FAF798FD1F -:10A1600001460098022808BF174807D0012808BFF9 -:10A17000164803D004280CBF15481648084400F2BE -:10A18000E1414FF47A70B1FBF0F000EB45010C981F -:10A190000D180098FAF76AFD284400F162010E4894 -:10A1A000416181610120FAF7A1FD00F2E1414FF424 -:10A1B0007A70B1FBF0F05844381AB0F53D7F38BFE3 -:10A1C000FFDFCEE6B80E002004360200A224020013 -:10A1D000D0FB0100C0D40100EC00002040420F0081 -:10A1E000E08A40F27121D4F8FC20484302EB40029F -:10A1F00010980021002806D000FB02F1F948B1FBBD -:10A20000F0F000F10101C4F80811618840F2E24069 -:10A2100001FB00F210994FF0000006D0F14801FB5D -:10A2200002F1B1FBF0F000F10100C4F80C011FFADB -:10A2300080FB21464FF00100A76A06F08BFF054620 -:10A2400094F85200FAF724FD014694F852000228CF -:10A2500008BFE54807D0012808BFE44803D0042818 -:10A260000CBFE348E348084400F2E1414FF47A7040 -:10A27000B1FBF0F1608840F271225043C1EB400025 -:10A28000A0EB0B00A0F55970AF4234BF2946394608 -:10A29000814203D2AF422CBF3846284660620698FE -:10A2A00088BBBAF1000F2FD094F852502846FAF725 -:10A2B000EFFC0146022D08BFCB4807D0012D08BF97 -:10A2C000CA4803D0042D0CBFC948CA48084400F24C -:10A2D000E1414FF47A70B1FBF0F0D4F80811E28A52 -:10A2E000014440F27123D4F8FC005A4300EB4200D1 -:10A2F000471A2846FAF7BAFC01460C98401A384427 -:10A30000A0F120070BE0FFE7E18A40F27122D4F8C8 -:10A31000FC00514300EB4101D4F808010F1AD4F8B6 -:10A320000021D4F8F810D4F8080101FB020B607D7D -:10A3300040F2E24110FB01F00C9094F8525015F0FD -:10A340000C0F18BF4DF6883103D12846FAF7A0FC50 -:10A350000146022D08BFA44807D0012D08BFA3481D -:10A3600003D0042D0CBFA248A248084400F2E141EA -:10A370004FF47A70B1FBF0F000EB4B010C9801EB5D -:10A38000000B2846FAF772FC584400F160019A4825 -:10A3900040F2712341616288D4F80C115A43C1EB39 -:10A3A0004201A1F213318161012084F80401D8E552 -:10A3B000628840F27123D4F80C115A43C1EB420277 -:10A3C00002FB00F7009A0698D4F8F8C01044D4F8BD -:10A3D0000021D4F80831801A0CFB0232401E00FB29 -:10A3E0000125607D40F2E24110FB01F00C9094F8F1 -:10A3F0005200009010F00C0F18BF4DF6883103D1B9 -:10A400000098FAF745FC01460098022808BF7648F4 -:10A4100007D0012808BF754803D004280CBF744832 -:10A420007448084400F2E1414FF47A70B1FBF0F057 -:10A4300000EB45010C980D180098FAF717FC28441A -:10A4400000F160016C48BAF1000F4161A7F21331CD -:10A4500081613FF486ADBBF1000F08BFFFDF80E5EF -:10A46000628840F27123D4F80C115A43C1EB4201C7 -:10A4700001FB00F794F8630025281CBF94F86400E2 -:10A4800025280BD1B4F87C01A8EB000000B200280D -:10A4900004DB94F87F01002818BF0546019830B10D -:10A4A000069800280C9810D0002818BFFFDF0099EC -:10A4B000069815F00C0F0844D4F80C1100FB01FBB2 -:10A4C00018BF4DF6883130D12BE0002814BFBBF106 -:10A4D000000FFFDF94F8520010F00C0F14BF4DF680 -:10A4E0008830FAF7D5FB022D08BF3F4907D0012D70 -:10A4F00008BF3E4903D0042D0CBF3D493D490844E7 -:10A5000000F2E1414FF47A70B1FBF0F03F1A94F899 -:10A510005200FAF7ABFB0C99081A3844A0F1200757 -:10A52000C5E72846FAF7B4FB0146022D08BF2E48BE -:10A5300007D0012D08BF2D4803D0042D0CBF2C4897 -:10A540002C48084400F2E1414FF47A70B1FBF0F07E -:10A5500000EB4B0B2846FAF789FB584400F16001E9 -:10A56000254840F2712341616288D4F80C115A43A6 -:10A57000C1EB4201A1F213318161F2E4BAF1000FA3 -:10A580007FF420AD94F8040100283FF434AD6188D5 -:10A5900040F27122D4F80C015143C0EB4101304626 -:10A5A00006F00EFD0004000C3FF425AD1D990029B6 -:10A5B00018BF0880012013B0BDE8F08F94F8540153 -:10A5C000F8F783FA94F854013146F8F76BF900284C -:10A5D0001CBF89F0010084F81901002013B0BDE808 -:10A5E000F08F000040420F0004360200A224020057 -:10A5F000D0FB0100C0D40100EC0000202DE9F04F99 -:10A60000F74C804683B020788A460025F54E4FF0FF -:10A610000209032804BF207B40457CD1606830617B -:10A620002078032818BFFFDF0327BAF1080F70D284 -:10A63000DFE80AF0040E1B1B166F6F6A6562FBF7FA -:10A6400019F9002818BFFFDFB77003B0BDE8F08F1D -:10A65000FBF7F4FB002818BFFFDF03B0BDE8F08F65 -:10A6600003B0BDE8F04FFAF7D1B827752574E07A4A -:10A67000012658B14FF47A71A069F7F7D4FBA061B5 -:10A68000002104F1100006F09BFC1AE0012168464D -:10A69000F8F71AFF9DF8000042F210710002B0FBBB -:10A6A000F1F201FB1205FAF7CFFD05442946A06936 -:10A6B000F7F7B9FBA061294604F1100006F080FC11 -:10A6C000461C208C411C0A293CBF30442084606811 -:10A6D00030B1208C401C0A2828BF84F8159000D285 -:10A6E0006775607A00281CBF03B0BDE8F08F207B3F -:10A6F00004F11001F8F7D6F8002808BFFFDF03B017 -:10A70000BDE8F08F07E004E0207BF7F762FE2570DC -:10A71000F5E7FFDFF3E7B8F1200F28BFFFDFB24F07 -:10A72000072137F81800F5F7D3FE040008BFFFDF54 -:10A73000B8F1200F28BFFFDF37F8180021888842C2 -:10A7400018BFFFDF4FF001083461BAF1080F80F045 -:10A750004581DFE80AF0049AA2A29DFEFEFDC4F83E -:10A760005851F580C4F85C5194F8190138B9F7F7DD -:10A770004FFED4F82411F8F75CFB00281BDCB4F87A -:10A780001611B4F85800814206D1B4F8CC10081A5A -:10A79000A4F8CE00204605E0081AA4F8CE00B4F8CC -:10A7A00016112046A4F85810D4F84011C4F824110A -:10A7B000C0F848111DE0B4F81411B4F85800081A94 -:10A7C000A4F8CE00B4F814112046A4F85810D4F818 -:10A7D0002411C4F84011C4F84811D4F82C11C4F85D -:10A7E000D810D4F83011C4F84C11B4F83411A4F8CE -:10A7F000501103F02EFFF7F7E5FD94F852A007463D -:10A800005046FAF745FABAF1020F08BF774909D066 -:10A81000BAF1010F08BF764904D0BAF1040F0CBF9A -:10A820007449754908444FF47A7100F2E140B0FB75 -:10A83000F1F1D4F80C0140F27122014460885043D8 -:10A84000C1EB4000A0F1300AB72F98BFB7272146CF -:10A85000012006F07FFC3844AAEB0000A0F2193773 -:10A86000A2462146012006F075FCDAF824109C303F -:10A87000814288BF0D1AF760BD4228BF3D46B560D2 -:10A8800084F8188186F8029039E704F028F801E08E -:10A89000F9F7BCFF84F8188131E7F7F7B9FDD4F870 -:10A8A000482101461046F8F7C4FA48B1628840F2E0 -:10A8B0007123D4F80C115A43C1EB4201B0FBF1F003 -:10A8C00094F864100D290FD0B4F85810B4F816217C -:10A8D0000B189A42AEBF501C401C0844A4F8160145 -:10A8E00094F81A0178B905E0B4F81601401CA4F8F0 -:10A8F000160108E0B4F81601B4F8CC10884204BF81 -:10A90000401CA4F81601B4F85201DFF8F090401C86 -:10A91000A4F85201B4F87E00B4F87C100DF1080BD5 -:10A92000401AB4F85810401E08441FFA80FA18E084 -:10A930003078002339F81000CDE9005B94F86411F9 -:10A9400039F81110084481B22046FFF77CFA01E083 -:10A9500036E043E000283FF4D2AE012818BFFFDF05 -:10A9600026D0B4F81621AAEB020000B20028DFDAE4 -:10A97000082084F8730084F87280204603F01EFBE0 -:10A9800084F8045194F854514FF6FF78202D00D3E9 -:10A99000FFDF27F8158094F85401F7F71AFD2020FF -:10A9A00084F85401307903B0BDE8F04FE8F7C0BA3D -:10A9B000B4F81601BDF808100844A4F81601D0E751 -:10A9C00094F80401042818BFFFDF84F8045194F8B8 -:10A9D00054514FF6FF78202DDBD3D9E7FFDF8EE609 -:10A9E000B80E0020EC000020E00E0020043602002B -:10A9F000A2240200D0FB0100C0D401007C3F020071 -:10AA000010B5FE4C207850B101206072FBF733FA8C -:10AA10002078032805D0207A002808BF10BD0C201C -:10AA200010BD207BF8F751F8207BF8F79CFA207BCB -:10AA3000F7F7CFFC002808BFFFDF0020207010BD13 -:10AA40002DE9F04FED4F83B0387801244FF0000826 -:10AA500040B17C720120FBF70EFA3878032818BF4A -:10AA6000387A0DD0DFF8989389F8034069460720BB -:10AA7000F5F7B7FC002818BFFFDF4FF6FF7440E082 -:10AA8000387BF8F722F8387BF8F76DFA387BF7F760 -:10AA9000A0FC002808BFFFDF87F80080E2E70298EB -:10AAA00000281CBF90F8041100292AD00088A04279 -:10AAB0001CBFDFF850A34FF0200B3AD00721F5F769 -:10AAC00007FD040008BFFFDF94F85401F8F74BFAC4 -:10AAD00084F8048194F854514FF6FF76202D28BF56 -:10AAE000FFDF2AF8156094F85401F7F772FC84F838 -:10AAF00054B169460720F5F774FC002818BFFFDF42 -:10AB000012E06846F5F74BFC0028C8D011E0029827 -:10AB100000281CBF90F80411002905D00088A0F57A -:10AB20007F41FF39CAD104E06846F5F738FC0028B8 -:10AB3000EDD089F8038087F80B8003B00020BDE8D2 -:10AB4000F08F70B50446B04890F80004AF4D40094E -:10AB500095F800144909884218BFFFDF95F8140DD5 -:10AB60004009AB4991F800144909884218BFFFDF3A -:10AB7000A349002001220C7188700A704870C870C7 -:10AB80009E490870BDE870405AE79D4908707047BB -:10AB90002DE9F843994C0646207800285CD19D4861 -:10ABA000F7F7BCFB2073202856D003276660277078 -:10ABB000002565722572AEB1012106F1F400F8F7A7 -:10ABC000ACFC0620F5F72CFC80460720F5F728FCA6 -:10ABD00096F8F4104044B1FBF0F200FB1210401C58 -:10ABE00086F8F400F7F7EEFB8B49091838BF40F2FE -:10ABF000F65000F59D7086B2FAF752FAE061FAF766 -:10AC000023FB4FF0010850B384F80A800121684605 -:10AC1000F8F75AFC9DF8000042F210710002B0FBF8 -:10AC2000F1F201FB12000644F7F7F2FB3146F7F7A9 -:10AC3000FAF8A061277567752574207B04F110016F -:10AC4000F7F730FE002808BFFFDF25840020FBF760 -:10AC500012F90020BDE8F8830C20BDE8F883F7F76F -:10AC6000D7FB3146F7F7DFF8A061A57284F80B80B7 -:10AC7000E0E7634948707047604810B5417A0124A5 -:10AC8000002918BF002408D1C17A31B1406A634954 -:10AC9000884284BF0024FBF7E8F8204610BD70B559 -:10ACA000574C0546E088401CE080D4E902016278F8 -:10ACB000D5F85861002A1CBF324606F0A9F9A060F9 -:10ACC000864208D895F80401012804D0E0780028CD -:10ACD00004BF012070BD002070BD70B50C4640F26D -:10ACE000E24100FB01F52046F9F7D2FF022C08BF34 -:10ACF0004B4907D0012C08BF4A4903D0042C0CBF94 -:10AD000049494A4908444FF47A7100F2E140B0FBE6 -:10AD1000F1F000F54D7085428CBF281A002070BDFF -:10AD20002DE9F04383B00026044680F8186190F8BE -:10AD3000D600002807BF94F80401032803B0BDE83B -:10AD4000F083F7F765FBD4F8482101461046F8F781 -:10AD500070F80028DCBF03B0BDE8F083628840F2E1 -:10AD60007123D4F80C115A43C1EB4201B0FBF1F04E -:10AD7000411CB4F858000144A4F81411B4F8CC10E4 -:10AD8000B4F81421891A09B20029DCBF03B0BDE868 -:10AD9000F083012184F81A11B4F87E10B4F87C20F5 -:10ADA000234F891A491E084485B2DFF854800DF1FB -:10ADB00008091EE098F8000037F81000CDE9006996 -:10ADC000B4F8142194F86411012337F811100844E1 -:10ADD00081B22046FFF737F8002804BF03B0BDE872 -:10ADE000F08301282CD0022812BFFFDF03B0BDE89A -:10ADF000F083B4F81401281A00B21BE0B80E00204A -:10AE0000EC000020E00E002001E000E00BE000E09C -:10AE100019E000E0FDA501000AFAFFFFDB82130044 -:10AE200004360200A2240200D0FB0100C0D40100BD -:10AE30007C3F02000028BCBF03B0BDE8F083B9E747 -:10AE4000B4F81401BDF808100844A4F81401D0E7C0 -:10AE5000F0B50422002583B006297ED2DFE801F098 -:10AE6000073E03191943044680F8042107E004460D -:10AE7000CF48C178002918BF84F804210BD0F7F718 -:10AE8000D2F9A4F85251B4F85800A4F8160184F885 -:10AE90001A5103B0F0BDC749007894F8043131F875 -:10AEA00010000122032B13BF94F80431C4F80051A1 -:10AEB000C4F8F850012BE2D1CDE9002594F86431B3 -:10AEC000B4F8CC2031F813100023084481B2204696 -:10AED000FEF7B9FF002818BFFFDFD0E7032180F895 -:10AEE000041103B0F0BD0446866AB0F80C01214697 -:10AEF00087B2012006F02EF9054694F85200F9F7C2 -:10AF0000C7FE94F85210022908BFAB4907D00129A7 -:10AF100008BFAA4903D004290CBFA949A94908447C -:10AF20004FF47A7100F2E140B0FBF1F0618840F239 -:10AF300071225143C0EB4100C01BA0F55970AE42D5 -:10AF400034BF29463146814203D2AE422CBF30463F -:10AF50002846606203B0F0BDFFE7FFDF03B0F0BD3D -:10AF60002DE9F843984C84460326914FE27AA17A62 -:10AF700000256368606A42F21079BCF1050F63D264 -:10AF8000DFE80CF0032E32363C004FF000080AB127 -:10AF9000E5721EE051B101216846F8F79FFA9DF86D -:10AFA00000000002B0FBF9F109FB1108FAF74CF9B7 -:10AFB00000EB0801A069F6F736FFA06125746675FD -:10AFC000607A28B9207B04F11001F7F76BFCC8B355 -:10AFD0002584F7F728F93879BDE8F843E7F7A8BFE3 -:10AFE000BDE8F84300F08BB8C3F85801BDE8F8831A -:10AFF000D3F85801BDE8F84300F081B84FF00008DD -:10B00000002AC5D151B101216846F8F767FA9DF8C9 -:10B0100000000002B0FBF9F109FB1108FAF714F97E -:10B0200000EB0801A069F6F7FEFEA06125746675C5 -:10B03000607A0028CCD1207B04F11001F7F732FCB4 -:10B040000028C5D1FFDFC3E7FFDFBDE8F88370B597 -:10B05000574CA178022906BFE188002970BD2569F7 -:10B06000C5F85C0195F85200F9F700FED5F85C11BF -:10B07000081AA1680144A160E1680844E06070BD5D -:10B0800070B505464A4890F802C0BCF1020F06BFF1 -:10B09000006900F5AC744D4C002904BF256070BDFB -:10B0A0004FF47A7601290DD002291CBFFFDF70BD55 -:10B0B0001046F9F706FE00F2E140B0FBF6F0281A60 -:10B0C000206070BD1846F9F711FE00F2E140B0FBB8 -:10B0D000F6F0281A206070BD3B48007800281CBF9D -:10B0E0000020704710B50720F5F78CF980F00100BB -:10B0F00010BD35480078002818BF012070472DE9A1 -:10B10000F041314C82B00025E572A7698046257078 -:10B11000012626722946606805F0FAFA6168C1F8CE -:10B120004871207B81F85401C1F85881C1F84C71F5 -:10B1300091F85471B1F80080202F28BFFFDF244818 -:10B1400020F81780646884F80451A4F85051184F0F -:10B15000009501951748397894F86421002330F858 -:10B16000111030F812001A46084481B22046FEF74A -:10B170006AFE002818BFFFDFC4F80051C4F8F85079 -:10B1800084F80461A4F81651A4F8145184F81A51F3 -:10B19000B4F85800401EA4F85800A4F85251F7F72C -:10B1A00042F8387902B0BDE8F041E7F7C1BE0000CF -:10B1B000EC0000207C3F020004360200A2240200C2 -:10B1C000D0FB0100C0D40100B80E0020DC0E00202E -:10B1D000E00E0020FE490C28896881F8C3001ABFE0 -:10B1E000132818287047002211280FD0072808BFFD -:10B1F000704715280AD001281ABF00280228704776 -:10B20000A1F88220012081F886007047A1F88820EB -:10B21000704770B5EE4CA1680A88A1F8362181F814 -:10B22000340191F85100012808BF012508D00228F7 -:10B2300008BF022504D0042816BF08280325FFDF15 -:10B24000A06880F8385190F85200012808BF012505 -:10B2500008D0022808BF022504D0042816BF0828F9 -:10B260000325FFDFA068012180F8395180F83211F1 -:10B27000002180F80611E078BDE87040E7F758BE7D -:10B28000F0B4D348806890F84E30478EC68E458F14 -:10B29000B0F84010C28FB0F842C0022B1FD08D42D0 -:10B2A00038BF29460186624528BF62468286018FE3 -:10B2B000B0F84430994238BF0B464386818FB0F8CE -:10B2C0004640A14238BF0C46C486BB4228BF1F4639 -:10B2D0004786B44228BF2646C686F0BC7047038E18 -:10B2E0009D4228BF1D46838E9A4228BF1A46A94216 -:10B2F00098BF0D460586944598BF62468286002118 -:10B3000080F84E10D3E7B24A012992681BD000237F -:10B3100002290FD0032921D028B301282ED00328D9 -:10B3200018BF704792F8630013281CBF162818280E -:10B3300005D1704792F8C300002808BF7047D2F8C3 -:10B34000F0000370704792F8C300012808BF7047EF -:10B35000D2F8F4000178491E0170704792F8C300DA -:10B360000328ECD17047D2F8F000B2F85810828868 -:10B37000891A09B20029A8BF03707047B2F85800B3 -:10B38000B2F8FA10401A00B20028E1DA70472DE94D -:10B39000F0418F4C00260327D4F808C0012590B156 -:10B3A0002069C0788CF8C20005FA00F010F4000F94 -:10B3B00008BFFFDFA06880F86370A0F8826080F8A3 -:10B3C0008650BDE8F08100239CF8642019460CF1FA -:10B3D000580005F094FD002804BF6570BDE8F081B9 -:10B3E0006078002818BFBDE8F0812069C178A068A6 -:10B3F00080F8C11080F86470A0F8886080F88A50E6 -:10B40000BDE8F08130B5724C85B0207910F0010FA5 -:10B4100004BF05B030BD206900230521C578A068B0 -:10B4200090F86320583005F06AFD002818BF022DFF -:10B430000FD00B2D18BF042D0BD0052D18BF062DD6 -:10B4400007D00D2D18BF112D03D0607840F00800F3 -:10B450006070607800281CBF05B030BD2069C078DE -:10B46000801E162880F04683DFE800F00BF8A1C3A9 -:10B47000FC26F8F6F897F5F9F8F8F8E1F3F2F1F0B0 -:10B48000EFEEA0680023012190F86620583005F007 -:10B4900036FD002840F0A483206906F0FBFAA1687D -:10B4A00081F8EE00072081F86600002081F88A000C -:10B4B00081F8860000F094BBA0680921002390F871 -:10B4C0006320583005F01BFD18B12069007912285F -:10B4D00012D0A0680A21002390F86320583005F0AC -:10B4E0000EFD18B120690079142820D02069007958 -:10B4F000162840F0758342E0A0680125002390F8EB -:10B5000063200921583005F0FAFC002808BF657057 -:10B5100000F066836078002840F06283A16881F8BB -:10B520007A0081F8860081F8630000F059BBA068BA -:10B530000021012580F86310A0F8821080F88610A1 -:10B540000421FEF739F9A06890F84E10012900F0A7 -:10B5500078820288A0F81621028EA0F81821828E27 -:10B56000A0F81A21428E00F58671A0F81C21C08E29 -:10B5700048820D72E078E7F7DBFC00F031BBA06891 -:10B5800090F86310202940F02B83002180F863108D -:10B5900080F886101A2000F021BBA06890F8631094 -:10B5A0000F292BD1002180F8681012213BE0A06800 -:10B5B00090F86310132921D1D0F8F0100088498841 -:10B5C000814218BFFFDFA068D0F8F00002E0000061 -:10B5D0000801002000F12601206906F088FAA06821 -:10B5E00000F1BC01206906F08AFA1620A16800F07B -:10B5F0005FB9A26892F86300162802D0022000F01A -:10B600005EBAD2F8F00002F1A80300F11E01002298 -:10B610000E3005F0FCFBA0680021C0E926110121D5 -:10B6200080F86810182180F8631000F0D9BA2069FA -:10B6300006F0E5FA032840F0D382206906F0E3FA29 -:10B6400001F0DCFB00F0CCBA82E2FEE1AAE14EE1BF -:10B650001AE131E103E04FE0C0E003E0D1E120690D -:10B660000079EDE7A06890F863101B29C6D100258A -:10B6700080F88B5080F88650D0F8F0100088498808 -:10B68000814218BFFFDFA068D0F8F0100D70D0F82D -:10B690003C110A78002A18BFFFDF40F0F08090F8D4 -:10B6A0008C207AB180F88C500288CA80D0F83C1186 -:10B6B0000D71D0F83C210E211170D0F83C21018889 -:10B6C000518010E00288CA80D0F83C110D71D0F88A -:10B6D0003C2101211172D0F83C210D211170D0F8CC -:10B6E0003C21018851800088F5F724F8F4F7BAFC72 -:10B6F000E078E7F71DFCC2E0A0680023194690F847 -:10B700006420583005F0FBFB50B9A06800230821E5 -:10B7100090F86320583005F0F2FB002800F01D82FD -:10B720006078002840F05C82A06890F88E0010F0ED -:10B73000020F14D1206906F0E5F9A16881F88F00A5 -:10B740002069B0F80520A1F89020B0F80700A1F812 -:10B75000920091F88E0040F0020081F88E00A068FF -:10B7600090F88E1011F0010F12D190F86420002390 -:10B770001946583005F0C3FB002808BFFFDF012140 -:10B78000A06880F8641080F88A100021A0F8881062 -:10B79000A06890F86310012907D1002180F8631098 -:10B7A00080F88610E078E7F7C3FBA168D1F8F000D5 -:10B7B000098842888A4204BF0178042940F0108237 -:10B7C00000250570E078E7F7B3FBA06890F86310F8 -:10B7D000002908BF80F8865000F002BAA068002354 -:10B7E000072190F86320583005F089FB002800F00D -:10B7F000B4816078002840F0F38102A9206906F046 -:10B80000BBF9A0689DF80820002590F8941011401D -:10B8100001F02F0180F8941090F895109DF8092000 -:10B82000114001F0490180F8951080F88650D0F859 -:10B83000F01000884988814218BFFFDFA068D0F867 -:10B84000F0100D70D0F83C110A78002A18BFFFDF05 -:10B8500015D10288CA80D0F83C110D71D0F83C1186 -:10B86000029A8A60039ACA60D0F83C2108211170BC -:10B870000188D0F83C014180E078E7F759FBA068E7 -:10B8800080F8635000F0ACB9A0680023092190F85B -:10B890006320583005F033FB002800F05E816078AB -:10B8A000002840F09D81A16881F87A0081F8860027 -:10B8B00081F8630000F094B9A0680023194690F85D -:10B8C0006420583005F01BFB002800F046816078AA -:10B8D000002840F08581A0680021A0F8881001218F -:10B8E00080F88A10022180F8641000F079B9A0680D -:10B8F0000023194690F86420583005F000FB00281A -:10B900007ED0206906F022F900287AD0206906F05E -:10B9100019F9A1680887206906F010F9A16848871D -:10B92000206906F011F9A1688887206906F008F9F6 -:10B93000A168C88791F863001D2813BF91F84E00D5 -:10B94000012081F84E00012807D091F8FD00002861 -:10B9500004BF91F8FC00002803D01F2081F8640088 -:10B9600017E01E2081F864000A88A1F822210A8FBE -:10B97000A1F824214A8FA1F826218A8F01F586702B -:10B98000A1F82821C98FC18301210175E078E7F76B -:10B99000CFFAA0680021A0F88810012180F88A1051 -:10B9A00000F01EB9A06800230A2190F863205830E7 -:10B9B00005F0A5FA20B3206906F0C8F8A8B12069FF -:10B9C00006F0C0F8A1680887206906F0B7F8A168FA -:10B9D0004887206906F0B8F8A1688887206906F0D2 -:10B9E000AFF8A168C887FFF74BFCA068002180F87A -:10B9F000861080F863100421FDF7DEFEA06801E0E8 -:10BA00001AE077E090F84E1001291AD00288A0F8C9 -:10BA10001621028EA0F81821828EA0F81A21428EDB -:10BA200000F58671A0F81C21C08E488201200872A2 -:10BA3000E078E7F77DFAD3E0607840F001006070CD -:10BA4000CEE0022180F84E10CAE0A068002319461B -:10BA500090F86420583005F052FA78B3A06890F856 -:10BA60006300242812BF2528607840F0200026D0EB -:10BA70006846F9F79EF9002808BF002104D0009815 -:10BA800002A9C0788DF80800A06801AB162290F8D2 -:10BA9000630005F00EFDA0B1A0689DF804201621FA -:10BAA00080F8E42080F8E5101A2180F86410012164 -:10BAB00080F88A100021A0F8881091E04DE06070B5 -:10BAC0008EE0206906F05DF8A0B12169087900F0E8 -:10BAD0000702A06880F84F20497901F0070180F83B -:10BAE000501090F80731002B04BF90F80631002B5E -:10BAF00004D022E00020FFF74AFC71E090F852C029 -:10BB000000F15103944501BF1A788A42012180F85F -:10BB10007B1012D00288A0F82E2190F84F2000F55B -:10BB2000867180F8302190F8500081F825000120BE -:10BB300081F82000E078E7F7FBF9A068222180F87F -:10BB40006410012180F88A100021A0F8881047E0D5 -:10BB5000A06890F86300202801D00120AFE7206999 -:10BB600006F019F8A8B32069A2680179407901F0BC -:10BB7000070161F30705294600F0070060F30F2174 -:10BB8000012082F886000025A2F88250242082F845 -:10BB90006300D2F80801B2F85120ADF8002005F09A -:10BBA0002CFC9DF80020C1B28A4207BFA16881F831 -:10BBB000E850A26882F8E8109DF80110C0F3072051 -:10BBC000814219BFA16881F8E900A06880F8E950B6 -:10BBD00006E0FFE70120FFF7DAFB1E20FFF719FB65 -:10BBE000A068D0E92812491C42F10002C0E92812DD -:10BBF00005B030BD2DE9F047FE4D04464FF000077B -:10BC0000687808436870287910F0200F284680680B -:10BC100018BFA0F87C7004D1B0F87C10491CA0F8C3 -:10BC20007C1090F86910012639B990F86320002340 -:10BC30000621583005F063F958B3A88810F4006F56 -:10BC400007D0A86890F86910002918BFA0F8747090 -:10BC50001FD1A868B0F87410491C89B2A0F87410FC -:10BC6000B0F876208A422CBF511A00218288521DDA -:10BC70008A4228BF80F87A60B0F87410B0F8762055 -:10BC8000914206D3A0F8747080F81261E878E7F763 -:10BC90004FF9287910F0600F08D0A86890F8671065 -:10BCA00021B980F867600121FDF786FD4FF0080893 -:10BCB000002C56D16878002851D1287910F0040F53 -:10BCC0000DD0A86890F86300032808BFFFDFA868BC -:10BCD00090F86610072904BF2E7080F8667001F096 -:10BCE000DDF8287910F0080F19D06878B8B9A8687D -:10BCF000002190F8C300FFF706FBA86890F8C30086 -:10BD0000FF2808BFFFDFFF21A86880F8C31090F864 -:10BD10006610082903D10221297080F86670FFF7A8 -:10BD200071FBA87810F0080F16D0A8680023052131 -:10BD300090F86320583005F0E2F850B185F80180A2 -:10BD4000A868D0F83C1108780D2808BF00200870BA -:10BD500002E0002003F048FDA86800F0D8FF00F0E2 -:10BD60003BFDA868A14600F1580490F8EC0030B9FA -:10BD7000A27B00230121204605F0C1F810B1208DDF -:10BD8000401C20853D21B9F1000F18D128780228E8 -:10BD900008BF16200ED0012804BFA86890F8EE0056 -:10BDA00008D06878E8B110F0140F1CBF1E20E076B0 -:10BDB00002D005E0E07603E010F0080F02D0E17653 -:10BDC000A67641E010F0030F03D02A20E076A67695 -:10BDD0003AE010F0200F08BFFFDF2320E076A676C0 -:10BDE00032E094F82E0028B1608D411C6185A18D50 -:10BDF000884213D294F8320028B1208E411C21864B -:10BE0000A18D88420AD2218DE08C814203D3AA6899 -:10BE100092F8EC2012B9A28D914203D32220E07651 -:10BE2000A67611E0E17B31B1A18C814228BF84F874 -:10BE30001B80C5D206E0A08C062803D33E20E07606 -:10BE4000A67601E0A07EA0B1E7722773E773022116 -:10BE5000A868FDF7B1FCA86890F8C310012904D1C7 -:10BE6000D0F8F4000178491E0170E878E7F760F82F -:10BE700003E00021A868FDF79FFCBDE8F047F8F754 -:10BE8000A7BF5C494A788B781A430ED101280AD0A3 -:10BE9000087910F0040F04D0886890F8660007282D -:10BEA00003D001207047FDF773BC0020704770B5C8 -:10BEB000504C06460D46A0883043A08016F0020F75 -:10BEC00004D016F0010F18BFFFDFE56016F0010F78 -:10BED00018BF256116F0020F10D0E878062802D0AE -:10BEE0000B2837D00AE0A06890F86310182905D114 -:10BEF0000021C0E92811012180F8691016F0800F97 -:10BF00001CBF0820A07016F4806F08BF70BDA26827 -:10BF1000B2F8580091880844801DE97880B2012960 -:10BF200008BFA2F8FA0007D0002904BFD2F8F01029 -:10BF3000888001D0182915D0E978284601291CD01D -:10BF400009B3182918BF70BDB2F8EA10BDE87040F7 -:10BF500005F033BEA06890F86310122908BF0021D5 -:10BF6000CCD1C9E792F8E810002902BF92F8E91095 -:10BF700000290020A2F8EA00DEE7B2F8FA104172C8 -:10BF8000090AA97270BDD2F8F01089884173090AB4 -:10BF9000A97370BDF0B5174C85B00026A060A680CF -:10BFA0006670A670054626700088F8F7D9FEA0686E -:10BFB0000088F8F7FBFEB5F8D000A168401C82B2FB -:10BFC00001F1580004F06CFD002818BFFFDF95F860 -:10BFD000640025280AD1B5F85810B5F8EA00081A07 -:10BFE00000B20028A4BF6078002807D095F863004D -:10BFF000252801E0080100203BD119E0A06890F855 -:10C00000E810002908BF90F8511080F8511090F8FE -:10C01000E910002908BF90F8521080F85210002053 -:10C02000FFF7F7F885F86460A16881F87B6020E08D -:10C03000B5F85810B5F8EA00081A00B20028A4BFF5 -:10C040006078002815D1A06890F8E810002908BF92 -:10C0500090F8511080F8511090F8E910002908BFAD -:10C0600090F8521080F852100020FFF7D2F885F8AF -:10C070006360A5F8D060A06890F8861039B1B0F878 -:10C080008210B0F88420914224BF05B0F0BD90F832 -:10C090008A1039B1B0F88810B0F88420914224BFDA -:10C0A00005B0F0BDB0F88020B0F87E108A4224BF01 -:10C0B00005B0F0BD90F867209AB3B0F87C208A42B2 -:10C0C00024BF05B0F0BD00BF90F8C370FF2F00F093 -:10C0D00013816846F8F747FE002808BFFFDF2221DA -:10C0E000009807F086FC0321009805F061FC009899 -:10C0F000017821F010010170394605F087FC192FF5 -:10C1000080F0D880DFE807F028201446D6D6D71A6A -:10C1100071D6D7D764D6D6D6D6C9D7D77B94ADD665 -:10C12000B600B0F87C10062924BF05B0F0BDCBE7FF -:10C13000A168009891F8ED100171BCE0A068009929 -:10C1400090F8C4000871B6E0A068D0F8F400411C73 -:10C15000009805F094FCAEE0A1680098D1F8F020BA -:10C1600092790271D1F8F02012894271120A82711B -:10C17000D1F8F0205289C271120A0272D1F8F0206F -:10C1800092894272120A8272D1F8F010C98905F0C0 -:10C190004EFC90E0A068D0F8F000011D009805F07A -:10C1A0007BFCA068D0F8F00000F10C01009805F0CD -:10C1B0007DFCA068D0F8F00000F11E01009805F0A9 -:10C1C0007BFCA06800F1B801009805F083FC72E0E8 -:10C1D000626900981178017191884171090A817131 -:10C1E0005188C171090A017265E0FE49D1E9000177 -:10C1F000CDE9020102A9009805F086FC5BE0A06889 -:10C20000B0F84410009805F089FCA068B0F846101A -:10C21000009805F087FCA068B0F84010009805F081 -:10C2200085FCA068B0F84210009805F083FC42E05D -:10C23000A068B0F84010009805F078FCA068B0F84D -:10C240004210009805F076FCA068B0F84410009801 -:10C2500005F064FCA068B0F84610009805F062FC98 -:10C2600029E0A168009891F80821027191F809115C -:10C27000417120E0A06890F8E80005F0B5F80146AB -:10C28000009805F092FCA06890F8E90005F0ACF881 -:10C290000146009805F08DFC0DE0A06890F8E510CF -:10C2A000009805F0AAFCA06890F8E410009805F04A -:10C2B000A8FC00E0FFDFF8F769FD002808BFFFDFFA -:10C2C0000098C178012903D049B118290FD013E093 -:10C2D000A168B1F8FA104172090A81720CE0A168F4 -:10C2E000D1F8F01089884173090A817304E0A168CC -:10C2F000B1F8EA1005F061FCBB480090BB4BBC4AAA -:10C300002946304603F088F9A0680023052190F8FB -:10C310006320583004F0F3FD002804BF05B0F0BDE1 -:10C3200005B0BDE8F04002F0EABEB248806890F87F -:10C33000861029B1B0F88210B0F88420914219D249 -:10C3400090F88A1029B1B0F88810B0F88420914292 -:10C3500010D2B0F88020B0F87E108A420AD290F84D -:10C360006720B0F87C001AB1884203D203F01ABAF1 -:10C370000628FBD3002001463CE470B50C46064677 -:10C3800015464FF4A071204607F055FB2680002D7E -:10C3900008BFFFDF2868C4F8F0006868C4F8F4003C -:10C3A000A868C4F83C0170BDF4F79BB92DE9F041D1 -:10C3B0000D4607460621F4F78BF8040008BFBDE8D8 -:10C3C000F081D4F83C110026087858B14A882188B9 -:10C3D0008A4207D1092810D00E281FD00D2835D049 -:10C3E000082850D094F8120100285ED06E701020FA -:10C3F000287084F812616F8042E06E700920287006 -:10C40000D4F83C014168C5F802108168C5F80610EF -:10C4100080896881D4F83C01067031E00846F4F761 -:10C4200089F90746F3F733FEB8B96E700E2028700D -:10C43000D4F83C014068C5F80200D4F83C0106700D -:10C440003846F3F71EFE0120BDE8F0810846F4F7F8 -:10C4500071F90746F3F71BFE10B10020BDE8F0812B -:10C460006E700D202870D4F83C014168C5F80210A8 -:10C470000089E880D4F83C0106703846F3F701FEE5 -:10C480000120BDE8F0816E7008202870D4F83C01CE -:10C4900041688268C068C5F80210C5F80620C5F872 -:10C4A0000A00D4F83C010670EAE794F81401C8B118 -:10C4B0006E701520287094F814010028E0D000BF99 -:10C4C00084F81461D4F81601C5F80200D4F81A01F2 -:10C4D000C5F80600B4F81E01688194F8140100281C -:10C4E000EED1CDE794F8200180B16E701C20287049 -:10C4F00084F82061D4F82201C5F80200D4F826019E -:10C50000C5F80600B4F82A016881B9E794F82C014F -:10C5100048B16E701D20287084F82C61D4F82E016B -:10C52000C5F80200ACE794F80C0190B16E701A20C7 -:10C53000287094F80C010028A2D000BF84F80C6188 -:10C54000D4F80E01C5F8020094F80C010028F5D1CA -:10C5500096E794F83201002808BFBDE8F0816E70BC -:10C560001620287094F83201002889D084F83261AE -:10C57000D4F83401C5F80200B4F83801E88094F822 -:10C5800032010028F2D17BE71A4A5061D17070471E -:10C590002DE9F0470446481E85B238BFBDE8F08754 -:10C5A00004F108080126DFF84C904FF0090A002733 -:10C5B000B4F8D000401CA4F8D000B4F87C00401CB3 -:10C5C000A4F87C0094F8690040B994F86320002333 -:10C5D000062104F1580004F092FC30B3B4F8740062 -:10C5E000401C09E0943F0200F5BB010083BE01003E -:10C5F000AFBE01000801002080B2A4F87400B4F8B6 -:10C60000761081422CBF0A1A0022A3885B1D934238 -:10C6100028BF84F87A60884207D3A4F8747084F83D -:10C62000126199F80300E6F783FC94F8860020B1C4 -:10C63000B4F88200401CA4F8820094F88A0020B16B -:10C64000B4F88800401CA4F8880094F8EC0040B9C5 -:10C6500094F866200023012104F1580004F04FFCF7 -:10C6600020B1B4F88000401CA4F8800094F8630066 -:10C670000C2802D00D2820D067E0B4F85800411CE7 -:10C68000B4F8FA00814260D1D4F8F400411C40466D -:10C6900007F0E1FA0221204604F02CF9D4F8F40066 -:10C6A0000078002808BFFFDF0121FF20FEF72BFEE6 -:10C6B00084F8637084F8966047E0B4F85800411C31 -:10C6C000D4F8F000808881423FD1D4F83C01017851 -:10C6D000002918BFFFDF22D12188C180D4F8F000E3 -:10C6E0004189D4F83C010181D4F8F0008189D4F863 -:10C6F0003C014181D4F8F000C189D4F83C0181812A -:10C70000D4F83C010771D4F83C0180F800A0D4F8BB -:10C710003C012188418099F80300E6F709FC0121DA -:10C72000204604F0E7F803212046FDF745F8D9F844 -:10C730000800D0F8F0000078022818BFFFDF0221BF -:10C74000FF20FEF7E0FD84F86370B4F85800401C49 -:10C75000691EA4F858008DB2BFF42AAFBDE8F08777 -:10C76000FE4AC2E90601704770B50446B0F87C0085 -:10C7700094F86710002908BFC0F1020503D0B4F88F -:10C780007E10081A051F94F87A0040B194F86320CF -:10C790000023092104F1580004F0B1FBA0B1B4F862 -:10C7A000746094F8690058B994F863200023062156 -:10C7B00004F1580004F0A3FB002808BF284603D06A -:10C7C000B4F87600801B001F8542C8BF0546002DC7 -:10C7D000D4BF0020A8B270BDF0B5E04C83B0A06813 -:10C7E00090F8C310FF2907BF6178002903B0F0BD9E -:10C7F00090F8662000230121583004F080FB0028C7 -:10C800001CBF03B0F0BDA06890F8EC1029B103B0D4 -:10C810000220BDE8F040FEF7DDBC90F86320002365 -:10C820001946583004F06BFB48B1A06890F87A00C4 -:10C8300028B103B01220BDE8F040FEF7CBBCA068E1 -:10C84000002590F86320122A23D004DC032A47D065 -:10C85000112A24D003E0182A3CD0242A4CD00023EB -:10C860000421583004F04BFB00281CBF03B0F0BD7E -:10C87000D4F808C0022701269CF864001A2800F0AA -:10C880001E8141DC012873D002287FD0032863D0A9 -:10C890003EE003B00B20BDE8F040FEF79BBCF6F78E -:10C8A00019FE0C283CBF03B0F0BDA0680821D0F8E9 -:10C8B000F0001E30F6F712FE28B1A0680421B8304F -:10C8C000F6F70CFE00B9FFDF03B00320BDE8F0402F -:10C8D000FEF780BC03B00620BDE8F040FEF77ABC4E -:10C8E00090F8C21080F8C4100720FEF773FCA0680F -:10C8F00080F8635003B0F0BD1820FEF76BFCA06811 -:10C90000A0F8825003B0F0BD1F2847D022287DD068 -:10C91000DCF8F0000178002900F010814088BCF8B4 -:10C920000010884273D100239CF8632019460CF153 -:10C93000580004F0E4FA002869D0A068D0F8F0109C -:10C940000978022972D0032971D0042970D00529F1 -:10C9500008BF08206DD0F1E09CF8C1008CF8C4003D -:10C960000720FEF737FCA06800F0AAB900E00DE050 -:10C970000C20FEF72FFCA068A0F8885090F88E10CD -:10C9800041F0010180F88E1000F09AB91320FEF7F3 -:10C9900021FCA068A0F8885000F092B99CF8FD0036 -:10C9A00000281CBF03B0F0BD9CF8FC0088B1BCF8A7 -:10C9B000FE00ACF84000BCF80001ACF84200BCF846 -:10C9C0000201ACF84400BCF80401ACF846008CF855 -:10C9D000FC50FEF755FC0421A068FCF7EDFEA068B2 -:10C9E00090F84E10012908BF80F84E7016D00288CA -:10C9F000A0F81621028EA0F81821828EA0F81A2124 -:10CA0000428E00F58671A0F81C2101E012E095E04D -:10CA1000C08E48820E72E078E6F78AFA1520FEF79B -:10CA2000D9FBA068A0F8885000F04AB94CE051E06A -:10CA300071E058E09CF87B0058B18CF8E8508CF815 -:10CA4000E9501820FEF7C6FBA068A0F8885003B094 -:10CA5000F0BD9CF8070100281CBF03B0F0BD9CF896 -:10CA60000601002804BF03B0F0BDBCF84F10DCF88D -:10CA70000801ADF80410BCF85110ADF80010019990 -:10CA800004F0BBFC9DF80020C1B28A4207BFA16838 -:10CA900081F8E850A26882F8E8109DF80110C0F310 -:10CAA0000720814219BFA16881F8E900A06880F8D9 -:10CAB000E950182003B0BDE8F040FEF78BBB112011 -:10CAC000FEF788FBA068FBE090F8640004F00AFA27 -:10CAD000A0BB08E090F8681041B190F86900002808 -:10CAE00008BFFFDF0A20FEF775FB27E0F6F7F2FC30 -:10CAF0000C2823D3A0680821D0F8F0001E30F6F7E8 -:10CB0000EDFC28B1A0680421B830F6F7E7FC00B9C5 -:10CB1000FFDF0320E7E790F88E0010F0030F0DD140 -:10CB20000C20FEF757FBA068A0F8825080F88660C2 -:10CB300090F88E1041F0010180F88E10A06890F8F6 -:10CB4000C310FF291CBF03B0F0BD90F86320002381 -:10CB50001946583004F0D3F9002801E008010020FC -:10CB600004BF03B0F0BDA06890F8F810F1B3A1695C -:10CB70000978D9BB90F8640004F0B4F9B0BBA068A0 -:10CB8000B0F858100A2932D900F108010522E069ED -:10CB900006F084FE0028A06808BF80F8F8503FF433 -:10CBA00056AFD0F8F400017861B1411C0522E0696C -:10CBB00006F074FE00287FF44AAFA068D0F8F400B5 -:10CBC000007830B9A068E169D0F8F400401C07F0A3 -:10CBD00042F8A068D0F8F4000178491C01700120E7 -:10CBE000FEF7F8FAA06880F8F85030E7FFE7A06891 -:10CBF00090F8FC1011B190F8FD10F9B190F8061101 -:10CC000000293FF424AF90F8071100297FF41FAFEB -:10CC100090F8640004F066F900287FF418AFA0686B -:10CC200090F8512090F80811012A4CD0022A4DD0DA -:10CC3000042A14BF082A04294AD05CE0B0F8FE1088 -:10CC4000A0F84010B0F80011A0F84210B0F802119E -:10CC5000A0F84410B0F80411A0F8461080F8FC5079 -:10CC600090F864001E2805D003B01420BDE8F04001 -:10CC7000FEF7B0BAFEF704FB0421A068FCF79CFDA8 -:10CC8000A06890F84E10012908BF80F84E7013D0AC -:10CC90000288A0F81621028EA0F81821828EA0F832 -:10CCA0001A21428E00F58671A0F81C21C08E4882A0 -:10CCB0000E72E078E6F73CF91520FEF78BFAA068D3 -:10CCC00080F86450C3E6012915D101E0022912D190 -:10CCD00090F8521090F80901012907D0022908D0D4 -:10CCE000042914BF082904280BD004E0012802D12C -:10CCF00007E0022805D003B01620BDE8F040FEF79B -:10CD000069BA03B00020BDE8F040FEF782BA70B502 -:10CD1000044690F8630000250C2814D00D2818BF95 -:10CD200070BDB4F85800D4F8F010401C89888842CF -:10CD300018BF70BDD4F83C01FE4E0178002918BF21 -:10CD4000FFDF45D122E0B4F85800B4F8FA10401CD7 -:10CD5000884218BF70BDD4F8F400411C04F10800EB -:10CD600006F079FF0221204603F0C4FDD4F8F40058 -:10CD70000078002808BFFFDF0121FF20FEF7C3FA7B -:10CD800084F86350012084F8960070BD2188C1802A -:10CD9000D4F8F000D4F83C1140890881D4F8F000B0 -:10CDA000D4F83C1180894881D4F8F000D4F83C11C3 -:10CDB000C0898881D4F83C010571D4F83C11092060 -:10CDC0000870D4F83C1120884880F078E6F7B0F875 -:10CDD0000121204603F08EFD03212046FCF7ECFCE8 -:10CDE000B068D0F8F0000078022818BFFFDF0221F9 -:10CDF000FF20FEF788FA84F8635070BD70B5CD4C03 -:10CE0000A16891F86320162A11BF132A91F88C208B -:10CE1000002A62781BBF02206070002A70BD81F872 -:10CE2000C000002581F88B5081F88650D1F8F000C1 -:10CE300009884088884218BFFFDFA068D0F8F0005A -:10CE40000078032818BFFFDF0321FF20FEF75BFAFD -:10CE5000A068D0F83C110A78002A18BFFFDF19D16A -:10CE60000288CA80D0F83C2190F8C0101171D0F827 -:10CE70003C110D72D0F83C210D211170D0F83C21ED -:10CE8000018851800088F3F755FCF3F7EBF8E07860 -:10CE9000E6F74EF8A06880F8635070BD10B5A54C59 -:10CEA000207910F0020F08BF10BD6078002818BF6D -:10CEB00010BDE068C078192880F06981DFE800F0D3 -:10CEC0005F4F0D8FF8F8A6223FF86F83B1F8F8F89E -:10CED000F8F7E3E0F9F5F4F8F300A0680023012186 -:10CEE00090F86620583004F00AF8002818BF10BDEA -:10CEF0000821A06880F86610002180F8861080F86C -:10CF00008A1010BDA0680023194690F8642058309C -:10CF100003F0F5FF18B1A168002081F88A00A0682D -:10CF20000023194690F86320583003F0E8FF0028EA -:10CF300008BF10BD0020A16881F8860010BDA06860 -:10CF40000023194690F86320583003F0D8FF0028DA -:10CF500008BFFFDF0420A16881F8630010BDA0684E -:10CF60000023194690F86320583003F0C8FF0028CA -:10CF700008BFFFDF0C20A16881F8630010BDA06826 -:10CF80000023194690F86320583003F0B8FF0028BA -:10CF900008BFFFDF0D20A16881F8630010BDA06805 -:10CFA0000023194690F86320583003F0A8FF0028AA -:10CFB00008BFFFDF0121A06880F88B105FF00F0130 -:10CFC00080F8631010BDA06890F86300122818BFA5 -:10CFD000FFDF0121A06880F88C101121F0E7A06824 -:10CFE0000023194690F86320583003F088FF28B9D1 -:10CFF000A06890F88C00002808BFFFDF0121A0681E -:10D0000080F88B10132180F8631010BDA06890F891 -:10D010006300182818BFFFDF1B20A16881F8630098 -:10D0200010BDA068D0F8F01003884A889A4204BF67 -:10D030000978042919D190F8632000231946583043 -:10D0400003F05DFF002808BFFFDFA06890F88E1096 -:10D0500011F0020F04BF012180F8631005D00021F8 -:10D0600080F88610D0F8F0000170A06800231946FF -:10D0700090F86420583003F042FF002808BF10BD2C -:10D080000020A16880E0A0680023194690F8632082 -:10D09000583003F034FF002808BFFFDF0520A168E7 -:10D0A00081F8630010BD30E01FE012E001E067E0AE -:10D0B0006DE0A0680023194690F86320583003F013 -:10D0C0001EFF002808BFFFDF1D20A16881F8630054 -:10D0D000E8E7A0680023194690F86420583003F070 -:10D0E0000EFF002808BFFFDFCAE7A068002319462B -:10D0F00090F86320583003F002FF002808BFFFDFDC -:10D100002020A16881F86300CCE7A06890F8641043 -:10D1100022291DD090F86310242918BFFFDFC1D148 -:10D1200090F8E810002906BF90F8E91000292521A1 -:10D1300002E000000801002018BF80F863107FF4AF -:10D14000F9AE002180F863100846FEF762F8F1E6B8 -:10D1500090F8E810002907BF90F8E9100029252170 -:10D1600080F864108CD1002180F8641080F87B1066 -:10D1700090F8060100281CBF0020FEF74AF87FE760 -:10D18000A168002081F8640081F88A008AE7FFDF47 -:10D1900088E7000070B5F94CE1680A88A1F8E6213B -:10D1A00081F8E40191F85100012808BF012508D059 -:10D1B000022808BF022504D0042816BF082803252A -:10D1C000FFDFE06880F8E85190F85200012808BFBE -:10D1D000012508D0022808BF022504D0042816BF64 -:10D1E00008280325FFDFE068012180F8E95180F875 -:10D1F000E211002180F89211E078BDE87040E5F777 -:10D2000097BEF0B4DD48C06890F84E30478EC68EA9 -:10D21000458FB0F84010C28FB0F842C0022B1FD02B -:10D220008D4238BF29460186624528BF6246828604 -:10D23000018FB0F84430994238BF0B464386818F46 -:10D24000B0F84640A14238BF0C46C486BB4228BF56 -:10D250001F464786B44228BF2646C686F0BC7047A4 -:10D26000038E9D4228BF1D46838E9A4228BF1A46D0 -:10D27000A94298BF0D460586944598BF62468286AE -:10D28000002180F84E10D3E72DE9F04FBB4C83B05E -:10D29000207910F0010F04BF03B0BDE8F08F606982 -:10D2A00001230521C578E06890F86420583003F028 -:10D2B00026FE002818BF022D0BD00A2D18BF0B2DFB -:10D2C00007D0032D18BF062D03D0607840F008006A -:10D2D0006070607800281CBF03B0BDE8F08F606903 -:10D2E0000227012690F8039000254FF02008B9F19D -:10D2F000000F1CBFB9F1010FB9F1160F1FD1E06883 -:10D3000090F8630003F0EEFDC8B1E16891F86300A6 -:10D31000202814D0212808D0B9F1160F0CBF84F8AA -:10D320000180677003B0BDE8F08F262081F86300AC -:10D33000B9F1160F00F08B822A20FFF72BFFB9F10D -:10D34000190F80F0BA82DFE809F046230DBBFEFE1C -:10D35000FDFCFBFE8BB2FAFEFEFEFEF9F8F7F6F5D9 -:10D36000F4FEF300E0680123194690F86620583077 -:10D3700003F0C5FD002840F01784606904F08AFBC3 -:10D38000E16881F86801072081F8660000F00CBCB4 -:10D39000E0680123002190F86420583003F0AFFDCD -:10D3A000002800F0BE83606904F071FBE168A1F819 -:10D3B0007C01B1F85820801A00B247F6FE72824212 -:10D3C000A8BF002845DD01F5BF71606904F05AFB74 -:10D3D0000B20E16839E0E0680123002190F8642027 -:10D3E000583003F08CFD002800F09B83606904F046 -:10D3F00025FB002800F061826069E168B0F80D202B -:10D40000A1F87C21B1F85830D21A12B247F6FE7357 -:10D410009342A8BF002A1CDD027981F87E21B0F872 -:10D420000520A1F8802104F0FCFAE168A1F882014E -:10D43000606904F0F9FAE168A1F88401606904F018 -:10D44000FAFAE168A1F886010D2081F8640000F085 -:10D45000ABBB282081F8730081F8726000F0A4BB98 -:10D46000E0680123002190F86420583003F047FD64 -:10D470000028E0680CD0A0F8885090F88A10491C69 -:10D4800080F88A105FF0100180F8641000F08CBB07 -:10D4900090F8642001230521583003F030FD002866 -:10D4A0001CBF0820607040F07F8300F03ABBE0684A -:10D4B00090F86410112908BF122140F06E82E3E752 -:10D4C000E0680123002190F86420583003F017FD34 -:10D4D00080B9E06890F86420122A0BD0012305215E -:10D4E000583003F00CFD002818BF082000F0198305 -:10D4F00000F0AAB9E06890F88C1031B9A0F8885013 -:10D5000090F88A10491C80F88A1000F1E0016069E7 -:10D5100004F0D9FAE06800F1B801606904F0DEFABD -:10D52000E06890F8AA01002818BFFFDFE0680BE070 -:10D53000F1E18CE150E1E8E0C6E0D2E0BFE234E0A6 -:10D5400099E0D4E21CE069E10188A0F8AC1100F593 -:10D55000D771606904F0A5FAE06800F5DB716069D5 -:10D5600004F0A7FAE06880F8AA61142180F864103A -:10D57000E078E5F7DDFC00F017BB00002801002093 -:10D58000E06890F86410172940F0078290F88A103C -:10D59000491E49B280F88A100029B8BFFFDF1C205D -:10D5A000E16881F8640000F0FFBAE06890F8651067 -:10D5B00011F0020F09D090F86320012308215830A0 -:10D5C00003F09DFC002800F0AC82E06890F88E002B -:10D5D00010F0020F14D1606904F094FAE16881F848 -:10D5E0008F006069B0F80520A1F89020B0F807001E -:10D5F000A1F8920091F88E0040F0020081F88E00B0 -:10D60000E06890F88E1011F0010F05D0E06890F8F6 -:10D61000631006291CD114E090F8650010F0020F89 -:10D6200018BFFFDFE06890F8651041F0020180F854 -:10D630006510A0F8885090F88A10491C80F88A106C -:10D64000E4E780F8635080F88650E078E5F770FCF6 -:10D65000E06890F87A11042940F0A68280F87A51A7 -:10D66000E078E5F765FCE06890F86310002940F089 -:10D670009B8200F021BAE06890F8650010F0010F7D -:10D680007BD16946606904F044FAE0689DF80020A7 -:10D6900090F89410114001F02F0180F8941090F848 -:10D6A00095109DF80120114001F0490180F8951076 -:10D6B000A0F8885090F88A10491C80F88A1090F8D9 -:10D6C000651041F001011CE0E0680123092190F898 -:10D6D0006320583003F013FC002800F0228200F091 -:10D6E00018BAE06890F8651011F0040F40F0198244 -:10D6F000A0F8885090F88A2041F00401521C80F86C -:10D700008A2080F8651000F04FBAE06890F8650054 -:10D7100010F0300F31D1606904F018FA00287DD084 -:10D72000606904F00FFAE1680887606904F006FA9E -:10D73000E1684887606904F007FAE16888876069F2 -:10D7400004F0FEF9E168C887207910F0020F03D0D9 -:10D750002069C078142811D091F863001D280DD0DD -:10D7600091F84E0001280BD091F88901002804BFE0 -:10D7700091F8880100280AD002E062E081F84E604A -:10D7800091F8650040F0100081F865001AE091F80A -:10D79000650040F0200081F865000A88A1F8CA21E0 -:10D7A0000A8FA1F8CC214A8FA1F8CE218A8F01F5EA -:10D7B000CB70A1F8D021C98F818780F83260E078E2 -:10D7C000E5F7B6FBE068A0F8885090F88A10491C8D -:10D7D00080F88A1000F0E8B9E06801230A2190F887 -:10D7E0006320583003F08BFB58B3606904F0AEF946 -:10D7F000B8B1606904F0A6F9E1680887606904F0CF -:10D800009DF9E1684887606904F09EF9E1688887BE -:10D81000606904F095F9E168C88700E04DE0FFF722 -:10D82000F0FCE068052180F8865080F86350FDF731 -:10D830000FFBE06890F84E10012900F09D8100F088 -:10D8400085B9607840F00100607000F0ADB9E06823 -:10D8500001230B2190F86420583003F050FB18B1DD -:10D8600084F8018000F0A0B9E0680123002190F85D -:10D870006420583003F043FB002800F05281E06838 -:10D8800090F863002528EBD0606904F07AF9A0B124 -:10D890006169487900F00702E06880F85020097952 -:10D8A00001F0070180F84F1090F89331002B04BF6E -:10D8B00090F89231002B04D020E001F0BCF900F088 -:10D8C00073B990F852C000F151038C4502BF19782A -:10D8D000914280F87B6011D000F5CB7180F8DC615B -:10D8E0000288A0F8DE2190F84F2080F8E02190F81F -:10D8F000500081F84B00E078E5F71AFBE068222140 -:10D9000080F86410A0F8885090F88A10491C80F8BC -:10D910008A1000F049B9E06890F8631021290CBF23 -:10D920004FF001084FF0000890F86410232908BF59 -:10D9300000F1640705D0B8F1000F18BF00F16307CC -:10D940002BD0606904F03FF9F0B3D4F81490484646 -:10D9500004F02DF90090484604F02DF98146E06866 -:10D9600090F89211002907BF4FF0000BDA4690F8AB -:10D9700094B190F895A1484603F0C5FCB0B1E268B7 -:10D9800092F85110814211D019EA0B0F41D0B8F131 -:10D99000000F08BF012802D008E0677004E10229E7 -:10D9A00004BF92F8500010EA090F32D0009803F03B -:10D9B000AAFC68B1009803F0A6FCE16891F8521047 -:10D9C000884205D0009800E023E010EA0A0F20D03A -:10D9D0006A466169E06803F0A5FCD0B3606904F0B1 -:10D9E000F0F8E168A1F87C01B1F85820801A00B283 -:10D9F00047F6FE728242A8BF002849DD9DF800006C -:10DA000081F87E019DF8010081F87F0125203870A2 -:10DA100043E0E06890F8920100281CBF1E20FFF749 -:10DA2000B9FBB8F1000F15D06069E168C07881F8E2 -:10DA3000C20006FA00F010F0807F08BFFFDF0A2165 -:10DA4000E06880F8631090F88600002808BFFFDFC8 -:10DA50000DE010E03D70E16891F88A00401E40B290 -:10DA600081F88A000028B8BFFFDF01F0E4F8E06821 -:10DA700080F87B5098E0E06890F8920100281CBF85 -:10DA80000020FFF787FB3D70E06880F87B5004E0E2 -:10DA9000282081F8730081F87260E06800F1640169 -:10DAA0008F4209D190F88A10491E49B280F88A1035 -:10DAB0000029B8BFFFDF77E080F8865074E0606926 -:10DAC00004F09DF816286FD1E06890F863002128D3 -:10DAD00002D0262805D067E0606904F094F8FFF7CB -:10DAE00059FBE06880F8635080F886505CE0E0689D -:10DAF00090F863200E2A03D161690979122902D0B6 -:10DB00001D2A14D10FE001230921583003F0F7F941 -:10DB100038B1E06880F87A5080F8865080F8635019 -:10DB200042E0667040E061690979142902D0212A37 -:10DB300029D124E080F8635080F886500521FDF754 -:10DB400087F9E06890F84E10012915D00288A0F8F6 -:10DB5000BE21028EA0F8C021828EA0F8C221428E82 -:10DB600000F5CB71A0F8C421C08E088681F826602C -:10DB7000E078E5F7DDF917E080F84E7014E06169B0 -:10DB80000979162908D061690979172904BF90F825 -:10DB90006410232908D112E080F8635080F8865081 -:10DBA0005FF01A00FFF7F6FAE068D0E928134A1C84 -:10DBB00043F10001C0E9282103B0BDE8F08F80F8EF -:10DBC000645090F88A10491E49B280F88A100029E2 -:10DBD000B8BFFFDFE06880F87B5090F89201002822 -:10DBE00018BF0020E0D0DDE770B5FC4E05460C46BE -:10DBF000F06890F8C300FF2818BFFFDFF26800202C -:10DC0000002C82F8C3501CBFA2F8880070BDA2F897 -:10DC10008200012082F8860070BD10B584B00446F1 -:10DC20006846F7F7A0F8002808BFFFDF2221009818 -:10DC300005F0DFFE0321009803F0BAFE009801789A -:10DC400021F010010170214603F0E0FEA01E16280D -:10DC50007ED2DFE800F00B9B489C9C0B9B569B9C64 -:10DC600012209B9B9B9B9C9C246C3E88DB480099CC -:10DC7000C06890F8C400087189E0D84900988A68A3 -:10DC80001178017191884171090A81715188C171BE -:10DC9000090A01727BE000980621017177E0CF4C00 -:10DCA000E068B0F84410009803F038FFE068B0F87E -:10DCB0004610009803F036FFE068B0F84010009876 -:10DCC00003F034FFE068B0F84210009803F032FF30 -:10DCD0005DE0C2490098C96891F89421027191F8F9 -:10DCE0009511417153E0BD4CE06800F1E8010098E6 -:10DCF00003F0F8FEE06800F1BC01009803F0FCFEC0 -:10DD000045E0002002900390B448C06890F8941059 -:10DD100001F0F5018DF8081090F8950002A900F0C7 -:10DD200049008DF80900009803F021FF2FE0AB4C6B -:10DD3000E068B0F84010009803F0F8FEE068B0F832 -:10DD40004210009803F0F6FEE068B0F8441000E0DE -:10DD50001CE0009803F0E2FEE068B0F8461000987E -:10DD600003F0E0FE13E09D48C06890F8921100298E -:10DD700000990CBF90F8512090F894210A710CBFC3 -:10DD800090F8520090F89501487100E0FFDFF6F737 -:10DD9000FDFF002808BFFFDF04B010BD70B50C46C2 -:10DDA00005464FF4F871204605F045FE258070BD0C -:10DDB000F2F797BC2DE9F0410D4607460721F2F72F -:10DDC00087FB040008BFBDE8F08194F896010026A7 -:10DDD000C8B16E700920287094F8960188B1268425 -:10DDE00084F89661D4F89801C5F80200D4F89C0133 -:10DDF000C5F80600B4F8A001688194F896010028DF -:10DE0000EDD1AE7044E094F8A201002837D094F828 -:10DE1000A2010D2818D00E2818BFFFDF38D12088A6 -:10DE2000F2F788FC0746F2F732F9A0B96E700E20BF -:10DE3000287094F8A401A8702088A88084F8A261B2 -:10DE40003846F2F71EF923E02088F2F773FC074604 -:10DE5000F2F71DF910B10020BDE8F0816E700D20C1 -:10DE6000287094F8A401A8702088A88094F8A801CC -:10DE7000A87184F8A2613846F2F703F908E094F833 -:10DE8000DA0140B16E701020287084F8DA616F807A -:10DE90000120BDE8F08194F8AA0180B16E700A20DB -:10DEA000287020886880D4F8AE01D4F8B211686078 -:10DEB000A960B4F8B601A88184F8AA61E8E794F8EB -:10DEC000B80140B16E7019202870B4F8BA016880AA -:10DED00084F8B861DCE794F8D40190B16E701A2030 -:10DEE000287094F8D4010028D2D000BF84F8D461FF -:10DEF000D4F8D601C5F8020094F8D4010028F5D171 -:10DF0000C6E794F8BC01C8B16E701520287094F86B -:10DF1000BC010028BCD000BF84F8BC61D4F8BE01AD -:10DF2000C5F80200D4F8C201C5F80600B4F8C6016D -:10DF3000688194F8BC010028EED1A9E794F8C801E3 -:10DF400080B16E701C20287084F8C861D4F8CA01B2 -:10DF5000C5F80200D4F8CE01C5F80600B4F8D20125 -:10DF6000688195E794F8DC0140B11D20287084F8A1 -:10DF7000DC61D4F8DE01C5F8020089E794F8E2011B -:10DF8000002808BFBDE8F0816E701620287094F854 -:10DF9000E20100283FF47CAF84F8E261D4F8E401A8 -:10DFA000C5F80200B4F8E801E88094F8E20100281E -:10DFB000F2D16DE7094A9060D1707047002180F876 -:10DFC000631080F8641080F8671090F8D61011B1D3 -:10DFD0000221FCF73DBF0321FCF73ABF28010020D6 -:10DFE0002DE9F047FF4C81460D46E0680088F2F7C6 -:10DFF000B3FB060008BFFFDF60782843607020791C -:10E000004FF0000510F0200FE0681CBFA0F87C5016 -:10E0100080F8DC5004D1B0F87C10491CA0F87C10CA -:10E02000E068012790F8691039B990F8642001235D -:10E030000621583002F063FF48B3A08810F4006F47 -:10E0400007D0E06890F86910002918BFA0F8745054 -:10E050001DD1E068B0F87410491C89B2A0F87410A2 -:10E06000B0F876308B422CBF5A1A0022B4F806C0A2 -:10E070000CF1050C624598BF80F87A70994206D37E -:10E08000A0F8745080F8DA71E078E4F751FF207955 -:10E090004FF0020A10F0600F11D0E06890F867109E -:10E0A00011B1032906D00AE080F867700121FCF75E -:10E0B000CFFE04E080F867A00121FCF7C9FEE0680C -:10E0C00090F86710012905D1A18811F4807F18BF4D -:10E0D00080F867A04FF00808B9F1000F40F03281D6 -:10E0E000A18811F4007F18BFA0F8F05004D1B0F857 -:10E0F000F020521CA0F8F02011F0080F47D06178F2 -:10E10000002944D190F8C300FF2808BFFFDFFF219A -:10E11000E06880F8C31090F86410192905D0E06811 -:10E1200090F8631020290FD028E080F88B5090F8E9 -:10E130008A10491E49B280F88A100029B8BFFFDF53 -:10E14000E06880F86450EAE790F8640002F0CAFEE4 -:10E1500080B1E0682621012380F8631090F86420E4 -:10E160000B21583002F0CBFE002804BF2A20FFF715 -:10E1700011F803E0E168212081F86300E06890F87D -:10E180006610082904BF84F800A080F86650FFF7E5 -:10E190007BF8207910F0040F09D0607838B9E06876 -:10E1A00090F86610072904BF277080F8665000F0C9 -:10E1B000C3FB207910F0100F09D0607838B9E068FF -:10E1C00090F864100B2904BF0C2180F86410A0782B -:10E1D00010F0080F11D0E0680123052190F86420A9 -:10E1E000583002F08CFE28B184F80180E06880F895 -:10E1F000A25102E0002001F0F7FA00F037FD01F033 -:10E20000E9FA0028E06818BFA0F8D05004D1B0F8AF -:10E21000D010491CA0F8D01001F0DFFA40B1E1683D -:10E2200091F8DC0002289CBF401C81F8DC0004D877 -:10E23000E06890F8DC00022806D9E068A0F8D05029 -:10E24000A0F8D25080F8DC50E0680123002190F85B -:10E250006420583002F053FE20B9E06890F8640062 -:10E260000C2859D1E0680123002190F86320583030 -:10E2700002F045FE00284FD0E0680123002190F80D -:10E280006620583002F03BFEF0B3E06890F867106B -:10E29000022904BF90F8DC0000283DD13046F1F798 -:10E2A000C6FC88B3E06890F8C310FF2934D1B0F8F9 -:10E2B000CA10012930D980F8D570B0F87E10B0F8B6 -:10E2C0007C208B1E9A42AFBF0121891A491E89B258 -:10E2D000B0F8D030E28893422FBF0122D21A521CEC -:10E2E00092B2914288BF1146012908BF80F8D550EB -:10E2F00090F86021A2B1B0F8D220B0F86201824259 -:10E300002CBF0120801A00E006E03CBF401C80B218 -:10E31000814288BF014603E0E068012180F8D550C2 -:10E32000E068B0F85820114489B2A0F8CC1090F8F9 -:10E330006730002B18BF012B60D0022B1CBF032BB2 -:10E34000FFDF09D0A088C0F340200028E06818BF94 -:10E35000A0F8DE505CD154E090F86630082B21D054 -:10E36000B0F87C10B0F87E2000268B1C9A4206D3B1 -:10E37000511A891E0E04360C1CBF711E8EB290F805 -:10E380007A1051B190F8632001230921583002F02E -:10E39000B6FD002808BF00262CD0E06890F8691070 -:10E3A00089B908E0B0F87C30032B27D3B0F87E1091 -:10E3B0001144491C22E090F86420012306215830C2 -:10E3C00002F09DFD90B1E1680020B1F87620B1F82F -:10E3D00074108B1C9A4203D3501A801E18BF401E23 -:10E3E000B04201E02801002038BF86B2002E1CBFD9 -:10E3F000701E86B2E068B0F8CC103144A0F8C810A6 -:10E40000A0E7B0F8DE10B0F8CE201144A0F8DE107E -:10E41000E06890F8661139B990F866200123194632 -:10E42000583002F06CFD38B1E068B0F88010B0F8F8 -:10E43000CE201144A0F88010E06890F8863033B107 -:10E44000B0F88210B0F8CE201144A0F8821090F9F4 -:10E450008AC0BCF1000F06DDB0F88810B0F8CE20FD -:10E460001144A0F888103D22B9F1000F18BF80F8C0 -:10E4700073204ED12178022911D0012908BF90F8CC -:10E48000681144D0617841B380F8727011F0140FB4 -:10E4900018BF1E210DD000BF80F8731055E090F812 -:10E4A000C410062905BF90F8C310022916210621C1 -:10E4B0002DE011F0080F18BF80F8732045D111F03E -:10E4C000200F18BF2321E7D111F0030F08BFFFDF92 -:10E4D0002A20E16881F8730033E02BB1B0F8821094 -:10E4E000B0F88420914211D2BCF1000F05DDB0F8E4 -:10E4F0008810B0F88420914208D2B0F88020B0F89B -:10E500007E108A4208D390F866212AB1222180F831 -:10E51000731080F8727018E090F867203AB1B0F884 -:10E520007C208A4228BF80F87380F2D209E0B0F8DC -:10E530007C10062905D33E2180F8731080F8727094 -:10E5400003E0E06890F8721079B1E06880F86350F9 -:10E5500080F8645080F8675090F8D610002914BFF6 -:10E5600002210321FCF774FC02E00021FCF770FC9F -:10E57000E06880F8D650BDE8F047F6F729BCF749C7 -:10E58000024648788B7818430ED10846C0684AB1D5 -:10E59000097911F0080F03D090F86600082803D01D -:10E5A00001207047FCF77BBB0020704770B5EB4C37 -:10E5B00005460E46A0882843A08015F0020F04D01F -:10E5C00015F0010F18BFFFDF266115F0010F4FF0A6 -:10E5D00000024FF001001AD06661F178062902D0DE -:10E5E0000B290BD013E0E16891F86430172B0ED1A2 -:10E5F0000023C1E9263381F8680008E0E16891F85A -:10E600006430112B04BF81F8682081F88C0015F06C -:10E61000020F18D02169C978052902D00B290BD027 -:10E6200011E0E16891F86420152A0CD10022C1E9BB -:10E63000282281F8690006E0E06890F8641010294B -:10E6400008BF80F8692015F0800F1CBF0820A0705B -:10E6500070BD2DE9F84FC14C00254FF00108A58091 -:10E660006570A5702570E06068F30709074680F8BB -:10E67000D6800088F2F770F85FEA000A08BFFFDF73 -:10E68000E0680088F6F76CFBE0680088F6F78EFB20 -:10E69000E068B0F8CA1071B190F8C310FF290FD12B -:10E6A00090F8661191B190F8662001231946583010 -:10E6B00002F025FC98B1E06890F8C300FF2805D06F -:10E6C000E06890F8C30000BFFFF7A7FAD4F80CC0C9 -:10E6D0009CF8D700002818BFE5801ED10FE0E06845 -:10E6E000A0F8805090F8671180F8C4100021022033 -:10E6F000FFF77AFAE06880F8D5500220E4E79CF84A -:10E70000960138B9BCF82000BCF80410884288BFD4 -:10E71000E08002D8BCF80400E080BCF8CE00401EC7 -:10E7200086B2BCF8D0003044ACF8D0009CF8D400DD -:10E7300000281CBFACF8D2508CF8D45004D1BCF8DF -:10E74000D2003044ACF8D200BCF87C003044ACF8C5 -:10E750007C009CF8690040B99CF8642001230621E4 -:10E760000CF1580002F0CBFB28B1E068B0F874104F -:10E770003144A0F87410E068B0F8CA1001299CBFB9 -:10E78000491CA0F8CA10002E18BF80F8DC5090F881 -:10E79000D510A1B1B0F8D000E18888420FD2504620 -:10E7A000F1F745FA58B1E06890F8601139B1B0F866 -:10E7B000D210B0F86201814228BF01F011F8E2687E -:10E7C00082F8D55092F864000B2818BF0C2817D196 -:10E7D000B2F85810B2F87C31C91A09B200290FDB1F -:10E7E00002F5BF7102F1080005F035FA0221E06878 -:10E7F00001F08EFFE06880F8645080F8968048E071 -:10E80000252824D1B2F85800B2F87C11401A00B281 -:10E8100000281CDB92F8921192F87E01002808BFB4 -:10E8200092F8510082F8510092F87F01002808BF49 -:10E8300092F8520082F8520000291CBF0020FEF717 -:10E84000A9FCE06880F8645080F87B5021E092F8E1 -:10E85000630025281DD1B2F85800B2F87C11401A87 -:10E8600000B2002815DB92F87E01002808BF92F85C -:10E87000510082F8510092F87F01002808BF92F8F9 -:10E88000520082F852000020FEF784FCE06880F815 -:10E890006350E16801F15800B1F8CE2002F000F9B0 -:10E8A000E06890F86011002918BFA0F8D2502C48F9 -:10E8B00000902C4B2C4A3946484600F0ADFEE068EB -:10E8C0000123052190F86420583002F018FB00283D -:10E8D00008BFBDE8F88FBDE8F84F00F010BC00F0AD -:10E8E00061BF10B50446B0F882214388B0F88411A6 -:10E8F000B0F886019A4201BFA3889942E388984202 -:10E900000FD02388A4F89A31A4F89C21A4F89E1172 -:10E91000A4F8A001012084F896011048C078E4F71B -:10E9200007FB0121204601F0F3FE002084F864007B -:10E93000032084F8670010BD70B5084C207910F0F2 -:10E94000020F08BF70BD6078002818BF70BD206935 -:10E95000C178891E162980F06C8107E0280100200B -:10E96000E1DF01007FE50100ADE50100DFE801F036 -:10E970000BF969758B1BF941F95BBE80F9F9F9F95F -:10E98000FAF7F6F5F4F3E0680123194690F86620EB -:10E99000583002F0B4FA002818BF70BD0820E168B2 -:10E9A00081F8660070BD0179E06890F863200A2A5A -:10E9B00004BF90F8C2208A4205D1002180F863107C -:10E9C00080F8861070BD90F8651011F0080F04BF34 -:10E9D000FFDF70BD21F0080180F8651090F88A1003 -:10E9E000491E49B280F88A100029A8BF70BD00F006 -:10E9F000D9B8E06890F8650010F0010F08BFFFDF9C -:10EA0000E16891F88A00401E40B281F88A0000282F -:10EA1000B8BFFFDFE06890F8651021F0010100BF8A -:10EA200080F8651070BDE06890F86400102818BF89 -:10EA3000FFDF0121E06880F88B10112180F864105D -:10EA400070BDE06890F86400142818BFFFDF012152 -:10EA5000E06880F88B101521F0E7E06890F864001A -:10EA6000152818BFFFDF1720E16881F8640070BD2A -:10EA7000E06890F86400152818BFFFDF1920E168EE -:10EA800081F8640070BDE06890F864001C2818BF2D -:10EA9000FFDF0025E06880F88B5090F8A201002885 -:10EAA00018BFFFDFE06890F88C1041B180F88C50FF -:10EAB0000188A0F8A61180F8A4510E2108E0018871 -:10EAC000A0F8A61180F8A451012180F8A8110D2109 -:10EAD00080F8A2110088F1F72DFEF1F7C3FAE07873 -:10EAE000E4F726FAE06880F8645070BDE06890F8BA -:10EAF0007A11042915D0E06890F8651011F0020F22 -:10EB000008BF70BD90F88A10491E49B280F88A107B -:10EB10000029B8BFFFDFE06890F8651021F002011E -:10EB20007EE790F8632001230021583002F0E7F9D6 -:10EB3000002808BFFFDFE06890F88E1011F0020F88 -:10EB400007BF062180F86310002180F8861018BFE7 -:10EB500080F87A11CFE760E04FE035E024E011E083 -:10EB600000E066E0E0680123002190F8632058305F -:10EB700002F0C5F9002808BFFFDF0E20E16881F828 -:10EB8000630070BDE06890F8651021F0040180F822 -:10EB9000651090F88A10491E49B280F88A10002941 -:10EBA000A8BF70BDFFDF70BDE0680123002190F8B1 -:10EBB0006320583002F0A3F9002808BFFFDF1D20B2 -:10EBC000E16881F8630070BDE06890F8650000F0CE -:10EBD0003000102818BFFFDFE06890F8651021F0C2 -:10EBE000100180F8651090F88A10491E49B280F82B -:10EBF0008A100029A8BF70BDD4E7E0680123002176 -:10EC000090F86320583002F07AF9002808BFFFDF3F -:10EC10002020E16881F8630070BDE06890F864002E -:10EC200022281CBF0028FFDF2320E16881F8640050 -:10EC300070BDFFDF70BDFE49C86890F8652012F016 -:10EC4000080F1EBF01204870704742F0080280F88C -:10EC500065204969C97880F8C1100021A0F88810A2 -:10EC600090F88A10491C80F88A1070472DE9F0410D -:10EC7000EF4CE06890F8C310FF2906BF61780029C7 -:10EC8000BDE8F08190F8662001231946583002F063 -:10EC900036F9002818BFBDE8F081E068002790F839 -:10ECA000661159B1A0F8807090F8671180F8C4100F -:10ECB000BDE8F04100210220FEF796BF90F86420E5 -:10ECC00001230421583002F01AF95FEA00084FF0DE -:10ECD00002054FF001060CD0D4F80CC09CF864007B -:10ECE00010287DD014287CD015287BD01C287AD001 -:10ECF000E1E0E16891F8650010F0010F05D0BDE892 -:10ED0000F04101210920FEF76FBF10F0020F0CD077 -:10ED100001210C20FEF768FFE06890F88E1041F0AA -:10ED2000010180F88E10BDE8F08110F0040F05D0CD -:10ED3000BDE8F04101211320FEF756BF10F0080F87 -:10ED400009D091F8C10081F8C400BDE8F04101216B -:10ED50000720FEF749BF10F0100F02D091F889018B -:10ED600020B191F8640022287DD19BE091F88801C0 -:10ED700088B1B1F88A01A1F84000B1F88C01A1F87E -:10ED80004200B1F88E01A1F84400B1F89001A1F859 -:10ED9000460081F88871FEF734FA0521E068FCF737 -:10EDA00057F8E06890F84E10012908BF80F84E50DF -:10EDB00014D00288A0F8BE21028EA0F8C021828E55 -:10EDC000A0F8C221428E00F5CB71A0F8C421C08EFC -:10EDD000088681F82660E078E4F7AAF8012103E0CC -:10EDE00007E00CE024E057E0BDE8F0411520FEF715 -:10EDF000FBBEBDE8F04101210B20FEF7F5BEF4F7A4 -:10EE000069FB0C2838BFBDE8F0810821E068E830D4 -:10EE1000F4F764FB28B1E0680421BC30F4F75EFB32 -:10EE200000B9FFDFBDE8F04101210420FEF7DCBEA0 -:10EE30009CF86901012817D0022818BFBDE8F081AD -:10EE40009CF88C0000281CBF06208CF8C4004FF0F2 -:10EE5000010114BF02200D20FEF7C6FEE06880F815 -:10EE60006971BDE8F08126E09CF8A201002818BF76 -:10EE7000BDE8F0810CF1A80300220CF1E0010CF5D3 -:10EE8000B57001F0C4FF01210520FEF7ADFEE0687A -:10EE900080F86971BDE8F081BDE8F04101210620EC -:10EEA000FEF7A2BE91F87B00C0B991F8920110B1B3 -:10EEB00091F8930190B1E0680123002190F863205C -:10EEC000583002F01CF8C8B1E0680123042190F822 -:10EED0006420583002F013F830B10FE0BDE8F04183 -:10EEE00001211720FEF780BEE06890F87A0028B173 -:10EEF000BDE8F04100211220FEF776BEE06890F8F0 -:10EF000063200A2A4DD0B8F1000F18BFBDE8F08188 -:10EF100001230021583001F0F2FF48B1E06890F879 -:10EF20007A11042904BF90F88E0010F0030F42D02C -:10EF3000E0680123002190F86320583001F0DFFFE2 -:10EF4000002808BFBDE8F081E06890F8881111B191 -:10EF500090F88911E1B390F89211002908BFBDE83B -:10EF6000F08190F89311002918BFBDE8F08190F866 -:10EF7000642001230B21583001F0C1FF002818BF85 -:10EF8000BDE8F081E06890F8512090F89411012AD2 -:10EF900071D0022A73D0042A14BF082A042970D021 -:10EFA00082E090F8C21080F8C410BDE8F041002162 -:10EFB0000720FEF719BE00210C20FEF715FEE068C1 -:10EFC00090F88E1041F0010180F88E10BDE8F081BC -:10EFD000FFE7B0F88A11A0F84010B0F88C11A0F843 -:10EFE0004210B0F88E11A0F84410B0F89011A0F8BB -:10EFF000461080F8887190F8650010F0200F34D02A -:10F00000FEF7FFF80521E068FBF722FFE06890F8C3 -:10F010004E10012908BF80F84E5017D00288A0F882 -:10F02000BE21028EA0F8C02100F5CB71828E01E0D6 -:10F0300028010020A0F8C221428EA0F8C421C08E71 -:10F04000088681F82660E078E3F772FF0121152039 -:10F05000FEF7CAFDE06890F8651021F0200141F04C -:10F06000100180F86510BDE8F081BDE8F041002195 -:10F070001420FEF7B9BD012916D102E0FFE70229ED -:10F0800012D190F8522090F89511012A07D0022A47 -:10F0900008D0042A14BF082A042922D004E0012938 -:10F0A00002D11EE002291CD090F864200123032124 -:10F0B000583001F024FF002818BFBDE8F081E06857 -:10F0C0000123022190F86420583001F018FF002835 -:10F0D00018BFBDE8F0810021BDE8F0411620FEF721 -:10F0E00083BDBDE8F0410020FEF754B830B5F74CC1 -:10F0F00005462078002818BFFFDFA57230BDF34910 -:10F10000012048727047F24830B490F800C042685D -:10F110004068012192F8634090F8510002F15803D1 -:10F12000252C1CBF1D7B252D27D00823202C18BF84 -:10F13000212C4BD0232D1CBF30BC7047BCF1000FDD -:10F1400004BF30BC704792F894C192F850200CEA8A -:10F15000020212F0040F14BF194612F0010F5ED024 -:10F16000082818BF042868D0082918BF042964D0CB -:10F17000012818BF012963D05CE0BCF1000F12D058 -:10F1800092F87E11002904BF30BC7047082818BFD0 -:10F19000042852D0082918BF04294ED0012818BFCE -:10F1A00001294DD046E092F8E810002904BF30BC98 -:10F1B0007047082818BF04283FD0082918BF042921 -:10F1C0003BD0012818BF01293AD033E0232DB5D018 -:10F1D000BCF1000F04BF30BC704792F8942112F0CC -:10F1E000040F14BF194612F0010F0CD0082818BFE5 -:10F1F000042822D0082918BF04291ED0012818BFCE -:10F2000001291DD016E012F0020F04BF30BC704778 -:10F21000082818BF042810D0012811D00AE012F0E5 -:10F22000020F04BF30BC7047082818BF042804D060 -:10F23000012805D030BC0220704730BC0820704740 -:10F2400030BC012070472DE9F05FA14F8046394660 -:10F250004FF0010A4E684FF0000996F85210F08EF8 -:10F2600001F0EAFE96F8521080B211F00C0F6FF028 -:10F270000D026CD0B0F5747F38BF4D4606D35038C0 -:10F28000C11700EB916002EBA01085B2708EA8420E -:10F2900038BF05468D4C2946606BF0F703FDDFF85B -:10F2A00034B2E062002819BF84F80290A06284F8AA -:10F2B00002A0C4F828B0786800F15809012000F0D5 -:10F2C000B3FC99F8110000284CD009F15001814895 -:10F2D00091E80E1000F5027A8AE80E10D9F8601055 -:10F2E000C0F82112D9F86410C0F8251200F5817019 -:10F2F000F5F7A6F9387800280CBF0120002080F02F -:10F30000010175480176D9E91212C0E90412C4F866 -:10F3100028B05946A581A0F58372F4F760FD96F8F0 -:10F320005200012808BF00220CD0022808BF012289 -:10F3300008D0042808BF032204D008281ABFFFDF22 -:10F3400000220222217B0120F4F757FD0FE0022961 -:10F3500019BF02EBD00085B26FF00E0101EB9000F7 -:10F3600094D192E7A06AF5F76BF9F4F76BFDB8F169 -:10F37000000F09D096F82C00012808BFF5F7D6F940 -:10F3800002202070BDE8F09F012296F852309621AD -:10F390001046F5F737F896F8520096F8531010F02B -:10F3A0000C0F08BF00219620F5F765F9E2E72DE97B -:10F3B000F04FDFF81C8183B0414681464E68A1F1D1 -:10F3C0001400009096F85D004FF0000A012706F146 -:10F3D0005804A1F1380570B301287FD002287ED0EF -:10F3E000032818BFFFDF7BD0686A0823017821F06B -:10F3F00008010170A27903EAC202114321F004015D -:10F400000170E279042303EA8202114321F0100122 -:10F41000017094F805B0286BF0F719FC8246F5F7F7 -:10F42000E9FCBBF1020F6ED0BBF1010F6CD0BBF158 -:10F43000030F6AD090E0FFE7FFF765FE0146304614 -:10F4400001F004FE1FFA80FBFFF75DFE10F00C0FC9 -:10F450006FF00D0120D0BBF5747F38BF504607D345 -:10F46000ABF15000C21700EB926001EBA01080B22C -:10F47000318E814238BF0846ADF80800A6F84C002E -:10F480000098F5F796FC90B1696AEF70AA694FF49D -:10F4900080609047032034E0022819BF01EBDB00B5 -:10F4A00080B26FF00E0000EB9B00E1D1DFE701AA14 -:10F4B00002A9286BF0F704FB686210B194F83310CE -:10F4C00079B10098F5F749FC67718DE7400100209C -:10F4D00078010020200F00202811002016E019E0FC -:10F4E00026E09DF8041031B9A0F800A080F802A031 -:10F4F000012102F05DFABDF80810686A02F085FB90 -:10F500000220607170E71AE01DE020E00098F5F736 -:10F5100024FC69E7B6F84C00ADF8000001AA694682 -:10F52000286BF0F7CDFA6862002808BFFFDF5BE7C1 -:10F530000098F5F73EFC002808BFFFDF54E730EAEB -:10F540000A0009D106E030EA0A0005D102E0BAF16A -:10F55000000F01D0012100E00021686A027842EA30 -:10F5600001110170217C00291CBF617901293BD068 -:10F5700004F15001F54891E80E1000F5027A8AE88E -:10F580000E10216EC0F82112616EC0F8251200F530 -:10F590008170F5F755F898F8000000280CBF01219C -:10F5A0000021EB480176D4E91012C0E90412A0F55D -:10F5B00083716A6AF4F713FC96F85100012808BFBA -:10F5C00000220CD0022808BF012208D0042808BF5E -:10F5D000032204D008281ABFFFDF00220222FB21E9 -:10F5E0000020F4F70AFC03E0F5F72AF8F4F72AFC08 -:10F5F000B9F1000F06D196F8513001229621002072 -:10F60000F4F700FFAF71686A018829828078A874D6 -:10F610002F7003B0BDE8F08F2DE9F05FCD4E81462D -:10F62000DDF8288030781C4617460D4628B9002F93 -:10F630001CBF002CB8F1000F00D1FFDFC6F82080FE -:10F64000C6E90674C6E90E950024747234727471AA -:10F650003471B471F471F470F481BF4F05F158083E -:10F660002888F1F779F830632888F1F763F8706338 -:10F67000F4F7F5FC95F95400F4F75AFD05F1120082 -:10F68000F4F7C7FF05F10E00F4F75CFD38780028A9 -:10F690000CBF03200120F4F7D0FF98F81900F4F70D -:10F6A00059FDF4F7C4FF38786FF00D066FF00E09BE -:10F6B000002836D098F81180B5F832A095F852108D -:10F6C000E88E01F0B9FC95F8525080B215F00C0F9D -:10F6D00058D0B0F5747F06D35038C11700EB916055 -:10F6E00006EBA01084B2A24534BF50462046B8F1C4 -:10F6F000000F1CBF001D80B22946F4F78AFC387841 -:10F700002A4600284FF0000145D00120F4F748FEBA -:10F710007868D0F8D800F4F796FFBDE8F05F0120D4 -:10F7200091E598F81080B5F830A0FFF7ECFC0146A1 -:10F73000284601F08BFC1FFA80FBFFF7E4FC10F079 -:10F740000C0F16D0BBF5747F07D3ABF15000C11777 -:10F7500000EB916006EBA01084B2A24534BF504686 -:10F760002046B8F1000F1CBF001D80B295F8515023 -:10F77000C2E702281ABF06EBDB0084B209EB9B004C -:10F78000EBD1E9E7022D1ABF06EBD00084B209EBFA -:10F790009000A8D1A6E70020F4F702FEBDE8F05FD4 -:10F7A000012004E66C4800B501783838007819B1BA -:10F7B000022818BFFFDF00BD012818BFFFDF00BD12 -:10F7C000644810B50078022818BFFFDFBDE810407C -:10F7D00000F092BA5F48807970475E484079704780 -:10F7E0005C490120C87170472DE9F04706005A486E -:10F7F000584D4FF0010740684FF0000800F15804E1 -:10F80000A86A90F8019018BF012E03D1696B03F02C -:10F8100081FD68706878A0B1012830D0022848D0F6 -:10F8200003281CBFFFDFBDE8F087012E08BFBDE83D -:10F83000F087686BF0F700FCA87ABDE8F047E3F7C3 -:10F8400077BB012E08D001224946686BF0F770FAA9 -:10F85000022E08BFBDE8F087D4E91202411C42F134 -:10F860000000C4E91210E079012802D184F8078071 -:10F8700000E0E771A87ABDE8F047E3F759BB012E35 -:10F8800008D000224946686BF0F752FA022E08BFF2 -:10F89000BDE8F087D4E91201401C41F10001C4E940 -:10F8A0001201E07901280CBF84F80780E771BDE8F8 -:10F8B000F087012E06D0686BF0F7BEFB022E08BF62 -:10F8C000BDE8F087D4E91201401C41F10001C4E910 -:10F8D0001201E0790128CCD1C8E72DE9F0411E4F93 -:10F8E0004FF000083846A7F138044068012600F1BF -:10F8F00058052078012818BFFFDFA87850B185F897 -:10F900000280E670A26941460420904738780028BA -:10F9100018BF2E71606A0321007831EA000004BF2D -:10F92000E878002805D1EE70616AE670A2690220CD -:10F9300090470121002000F0FEF918B1BDE8F04128 -:10F9400000F0DAB9BDE8F04100207CE4200F00208F -:10F950002811002040010020780100202DE9F84FF7 -:10F96000FE4F83463846A7F138054068397800F1E4 -:10F97000580A4FF0000828784FF00109464602283F -:10F9800018BFFFDFE88940F40070E881002000F034 -:10F990004BF99AF81100BBF1000F00F0F380F4F777 -:10F9A00077FAF4F765FA90B99AF8110078B1A86A75 -:10F9B000417861B100789AF80710C0F3C00088421E -:10F9C00005D185F80490BDE8F84F00F095B9A86A14 -:10F9D0000188A5F8131080786875E88940F0200048 -:10F9E000E88185F8058038787868583000907C6820 -:10F9F00094F82C00012818D1F4F78EFE20460099C7 -:10FA000001F045FA88B13878002878680CBF00F515 -:10FA1000867000F5EA70218841800099097A0171A9 -:10FA200080F80090A87AE3F783FAA86A9AF806109B -:10FA30000078C0F38000884236D03878786800F1CA -:10FA4000580490F85D0058B3022847D084F8058028 -:10FA5000387840B12079414628B1217185F803906A -:10FA6000AA6910209047E07898B184F80380F5F7F0 -:10FA7000AFF9002808BFFFDF082085F80390AA69C6 -:10FA800000219047D4E91010491C40F10000C4E95E -:10FA90001010A07901280CBF84F8068084F8069025 -:10FAA000E88940F48070E881A86A9AF80730017804 -:10FAB000C1F3C0029A4252D13A787A6801F0030148 -:10FAC00002F15804012918BF022935D003291CBFAF -:10FAD000287A40F0040012D0287240E0286BF0F73A -:10FAE0001BF8002808BFFFDFD4E91002411C42F1D7 -:10FAF0000000C4E91010A87AE3F71AFAA6E701F0AB -:10FB00006FFFA8B184F80290E989484641F400618A -:10FB1000E981A96A85F80390AA699047E0790128EC -:10FB200003D100BF84F8078019E084F8079016E03D -:10FB3000287A40F01000CFE74078F8B1E98941F425 -:10FB40000061E981A97851B9FB28F1D8687A0028C9 -:10FB500008BF4E4603D08020AA690021904759462D -:10FB6000012000F0E8F858B39AF81100002818BFF7 -:10FB7000BBF1000F1BD0A87868B118E0E07901282C -:10FB8000D3D1CFE7002818BFF4F7BBF9E88940F0DC -:10FB90004000E881E3E7A96AAA894878904288BFD3 -:10FBA0001046C21CE86A03F0A5FEE86AA862002EAF -:10FBB0001CBF0020FFF718FEBDE8F84F00F09CB80E -:10FBC000002E1CBF0120FFF70FFE0020FFF7EFFB08 -:10FBD0009AF81100002818BFBBF1000F0DD0A878CB -:10FBE00058B9A96AAA894878904288BF1046C21CB1 -:10FBF000E86A03F07FFEE86AA862002E08BFBDE84D -:10FC0000F88F0220BDE8F84FEEE5544A92F800C0A4 -:10FC10005268BCF1000F92F8523092F8512001D096 -:10FC2000FBF72EBAFAF79EB82DE9F04701004B48D2 -:10FC30004FF000046FF00D0845686FF00E0905F1F4 -:10FC4000580022D0467C6F8E95F85210E88E01F055 -:10FC5000F3F995F8521080B211F00C0F43D0B0F5C3 -:10FC6000747F06D35038C21700EB926008EBA010E7 -:10FC700084B2A74234BF38462046002E1CBF001D68 -:10FC800080B2BDE8F047F4F7C4B9077C2E8EFFF7C9 -:10FC90003AFA0146284601F0D9F91FFA80FAFFF72F -:10FCA00032FA10F00C0F15D0BAF5747F07D3AAF111 -:10FCB0005000C11700EB916008EBA01084B2A6427F -:10FCC00034BF30462046002F1CBF001D80B295F87F -:10FCD0005110D6E702281ABF08EBDA0084B209EB0C -:10FCE0009A00ECD1EAE702291ABF08EBD00084B2EF -:10FCF00009EB9000BDD1BBE770B5184900254C68F1 -:10FD0000F4F7E8FCF4F7DAFCF4F72AFCF4F787FCE4 -:10FD1000F4F798F894F82C00012808BFF4F7FCFCDD -:10FD20000F4C0021A269E0899047226A217A20794C -:10FD30009047257070BD70B5094C0546002908BF75 -:10FD4000012D05D16079401CC0B26071012835D801 -:10FD5000E16928468847002830D003E07801002078 -:10FD600040010020E179164839B1012D01BF4178E9 -:10FD70000029017811F0100F20D0217AF1B9114932 -:10FD80000978002918BF002102D0294304D013E0CC -:10FD9000012D18BF0121F8D10B49097811F0100F7E -:10FDA00004BF007810F0100F08D0E07830B9A078C8 -:10FDB00010B111F0100F01D0002070BD012070BDF6 -:10FDC00053010020780100205001002010B540F2BE -:10FDD000C311F94803F00DFEFF220821F74803F094 -:10FDE00000FEF748002141704FF46171418010BD61 -:10FDF0002DE9F0410F46064600F03FFBEE4C10287F -:10FE000017D004EBC00191F84A1111F0010F1CBF8B -:10FE10000120BDE8F081617808291FD2617804EBE8 -:10FE2000C000491C6170012180F84A110846BDE8F4 -:10FE3000F0816178082911D22578681C207004EBC4 -:10FE4000C5083868C8F84401B888A8F84801102DDA -:10FE500028BFFFDF88F843612846DFE70020BDE8C0 -:10FE6000F081D5480178491E4BB2002BB8BF7047CE -:10FE700070B4002500EBC30191F84A1111F0010F95 -:10FE80003BD04278D9B2521E427000EBC10282F8D8 -:10FE90004A5190F802C00022BCF1000F0BD984181F -:10FEA00094F803618E4202D1102A26D103E0521C3D -:10FEB000D2B29445F3D80278521ED2B202708A426E -:10FEC0001BD000EBC20200EBC10CD2F84341CCF8CE -:10FED0004341D2F84721CCF84721847890F800C0FC -:10FEE0000022002C09D9861896F8036166450AD1CC -:10FEF000102A1CBF024482F80311591E4BB2002B7A -:10FF0000B8DA70BC7047521CD2B29442EBD8F4E716 -:10FF10002DE9F0471F4690460E46814600F0ADFAA7 -:10FF2000A54C0546102830D0A2780021002A0ED911 -:10FF3000631893F80331834205D110291CBF1220A6 -:10FF4000BDE8F08703E0491CC9B28A42F0D8082A0C -:10FF50002FD2102D1CD0A6781022701CA07004EB9C -:10FF6000061909F10300414600F040FF09F1830042 -:10FF70001022394600F03AFFA019002180F8035101 -:10FF800080F83B110846BDE8F087A278082A10D215 -:10FF90002578681C207004EBC50A3068CAF8440153 -:10FFA000B088AAF84801102D28BFFFDF8AF84391D6 -:10FFB000D1E70720BDE8F08770B47F488178491EFB -:10FFC0004BB2002BBCBF70BC704700BF817803F000 -:10FFD000FF0C491ECAB2827050FA83F191F80311E6 -:10FFE00094453ED000EB021500EB0C14D5F80360ED -:10FFF000C4F80360D5F80760C4F80760D5F80B6053 -:020000040002F8 -:10000000C4F80B60D5F80F60C4F80F60D5F88360B2 -:10001000C4F88360D5F88760C4F88760D5F88B6032 -:10002000C4F88B60D5F88F50C4F88F50851800EB5A -:100030000C0402EB420295F803610CEB4C0C00EB54 -:10004000420284F8036100EB4C0CD2F80B61CCF84F -:100050000B61B2F80F21ACF80F2195F83B2184F821 -:100060003B2100EBC10292F84A2112F0010F33D17B -:1000700090F802C00022BCF1000F0BD9841894F84C -:1000800003518D4202D1102A26D103E0521CD2B274 -:100090009445F3D80278521ED2B202708A421BD025 -:1000A00000EBC20200EBC10CD2F84341CCF8434153 -:1000B000D2F84721CCF84721847890F800C000227C -:1000C000002C09D9851895F8035165450BD1102AE4 -:1000D0001CBF024482F80311591E4BB2002BBFF61D -:1000E00075AF70BC7047521CD2B29442EAD8F3E7A5 -:1000F00033494870704732484078704738B14AF207 -:10010000B811884203D82E4948800120704700204A -:1001100070472B484088704710B500F0AEF91028A2 -:1001200014D0254A0146002092F802C0BCF1000F0D -:100130000CD9131893F803318B4203D1102818BF40 -:1001400010BD03E0401CC0B28445F2D8082010BDA9 -:1001500019498A78824286BF01EB00108330002063 -:10016000704715498A78824286BF01EB0010C01C97 -:1001700000207047104B93F802C084459CBF0020BC -:100180007047184490F8030103EBC00090F8433126 -:100190000B70D0F844111160B0F848019080012034 -:1001A0007047054A114491F8032105490A70026815 -:1001B0004A60808808817047501100208A01002021 -:1001C0008001002010B5F3F7B9FD002804BFFF201F -:1001D00010BDBDE81040F3F7D7BDFE498A788242D2 -:1001E0009CBF00207047084490F8030101EBC00059 -:1001F00090F84A0100F0010070472DE9F047F54FF3 -:100200000026B0463878002886BF4FF0080ADFF88D -:10021000C893BDE8F08700BF07EBC80505F5A271DC -:1002200095F8430100F029F9102808BF544610D072 -:10023000B978002400290BD93A1992F80321824297 -:1002400002D1102C05D103E0621CD4B2A142F3D834 -:100250000824B878A04286BF07EB0410C01C002019 -:1002600095F84A1111F0010F16D050B1082C04D2A4 -:10027000391991F83B11012903D0102100F093FDA9 -:1002800050B109F806403046731C95F8432105F536 -:10029000A271DEB2F3F724FF08F1010000F0FF08BD -:1002A00038784045B8D8BDE8F0872DE9F041C94C11 -:1002B00000263546A07800288CBFC74FBDE8F081E6 -:1002C0006119C0B291F80381A84286BF04EB051002 -:1002D000C01C002091F83B11012903D0102100F02F -:1002E00062FD58B104EBC800BD5590F8432100F5FC -:1002F000A2713046731CDEB2F3F7F2FE681CC5B281 -:10030000A078A842DCD8BDE8F08110B5F3F712FF61 -:10031000002804BF082010BDF3F710FFAE49085CA9 -:1003200010BDAE4910B5497841B1AA4B997829B1B1 -:10033000C21CD81CF3F79FFC012010BD002010BD8B -:10034000A44A01EB410102EB41010268C1F80B2113 -:100350008088A1F80F0170472DE9F0419D4D0746B7 -:100360000024A878002898BFBDE8F081C0B2A04260 -:1003700013D905EB041010F183060ED0102130467E -:1003800000F011FD48B904EB440005EB400000F219 -:100390000B113A463046F4F7AAFD601CC4B2A878A7 -:1003A000A042E3D8BDE8F081014610228C4800F05D -:1003B0001DBD8B48704770B5864D0446A878A04295 -:1003C00006D905EB04101021833000F0ECFC08B1D5 -:1003D000002070BD04EB440005EB400000F20B1060 -:1003E00070BD7C498A78824206D9084490F83B0166 -:1003F000002804BF01207047002070472DE9F0411C -:100400000E46074615460621304600F0CCFC714CDE -:1004100098B1A17871B104F59D7011F0010F18BF6A -:1004200000F8015FA178490804D0457000F8025F28 -:10043000491EFAD10120BDE8F0813846314600F06E -:100440001CF8102816D0A3780021002B12D96218AE -:1004500092F80321824209D1102918BF082909D036 -:10046000601880F83B510120BDE8F081491CC9B2F9 -:100470008B42ECD80020BDE8F0812DE9F041554DCC -:100480000646002428780F46002811D905EBC40041 -:1004900090F84311B14206D10622394600F5A27008 -:1004A00003F0FCF938B1601CC4B22878A042EDD842 -:1004B0001020BDE8F0812046BDE8F081454910B428 -:1004C0004A7801EBC003521E4A70002283F84A2189 -:1004D00091F802C0BCF1000F0DD98B1893F80341BD -:1004E000844204D1102A1CBF10BC704703E0521C88 -:1004F000D2B29445F1D80A78521ED2B20A70824222 -:1005000004BF10BC704701EBC00301EBC202D2F87C -:1005100043C1C3F843C1D2F84721C3F847218C78BF -:1005200091F800C00022002C9CBF10BC70478B18B3 -:1005300093F80331634506D1102A1CBF114481F89A -:10054000030110BC7047521CD2B29442EFD810BCC9 -:10055000704770B41F490D188A78521ED3B28B7041 -:1005600095F80321984247D001EB001401EB031CDE -:1005700000EB4000DCF80360C4F80360DCF80760BF -:10058000C4F80760DCF80B60C4F80B60DCF80F609F -:10059000C4F80F60DCF88360C4F88360DCF887601F -:1005A000C4F88760DCF88B60C4F88B60DCF88FC01F -:1005B000C4F88FC001EB030C03EB43039CF8034129 -:1005C00001EB430385F8034101EB4000D3F80B41F5 -:1005D00008E00000501100208A0100208001002066 -:1005E00013130020C0F80B41B3F80F31A0F80F31FE -:1005F0009CF83B0185F83B0101EBC20090F84A01F1 -:1006000010F0010F1CBF70BC704700208C78002CCC -:100610000DD90B1893F803C1944504D110281CBFC1 -:1006200070BC704703E0401CC0B28442F1D8087827 -:10063000401EC0B20870904204BF70BC704701EB0E -:10064000C20301EBC000D0F843C1C3F843C1D0F8E6 -:100650004701C3F847018C780B780020002C9CBF21 -:1006600070BC704701EB000C9CF803C19C4506D19F -:1006700010281CBF084480F8032170BC7047401C40 -:10068000C0B28442EED870BC7047000010B50A7B3F -:1006900002F01F020A730022C2758B181B7A03F046 -:1006A000010C5B0803F00104A4445B0803F001049F -:1006B000A4445B0803F00104A4445B0803F00104B4 -:1006C00064444FEA530C0CF0010323444FEA5C0CE2 -:1006D0000CF00104234403EB5C0300EB020C521CFE -:1006E0008CF8123090F817C0D2B26344C375052A53 -:1006F000D3D3D8B2252888BFFFDF10BD0023838362 -:10070000028401EBC202521EB2FBF1F1C1837047B9 -:1007100070B50025044603290DD04FF4FA42002994 -:1007200074D0012971D0022918BF70BD0146BDE8FF -:1007300070405830AAE704F158067021304603F0A3 -:100740007AF9B571F571F5723573B573F573757125 -:1007500035767576F52086F83C00492086F83D0010 -:10076000FF2086F86B0084F82C502584012284F841 -:10077000512084F85220282084F853001B20208721 -:1007800060874FF4A471E187A18720866086E186A7 -:10079000A186A4F84400A4F84610A4F84000A4F8E8 -:1007A0004210A4F84800A4F84A00A4F84C00627370 -:1007B0004FF448606080A4F8C850A4F8CA50A4F868 -:1007C000CC50A4F8CE50A4F8D050A4F8D25084F85D -:1007D000D55084F8D750A4F8DE5084F8DC50A4F843 -:1007E000F050A4F8F25084F8885184F8895184F8C4 -:1007F000925184F8935184F8605184F8665184F8DA -:10080000695184F87A5170BD00E041E0A4F8DE50EF -:1008100084F8D6506088FE490144B1FBF0F1A4F899 -:1008200076104BF68031A4F87810E388A4F87C5059 -:10083000B4F880C0DB000CFB00FCB3FBF0F39CFBC6 -:10084000F0FC5B1CA4F880C09BB203FB00FC04F12D -:100850005801A4F87E30BCF5C84FC4BF5B1ECB84E2 -:10086000B2FBF0F2521C8A8500F5802202F5EE32CE -:10087000531EB3FBF0F2CA838B8B03FB00F2B2FB77 -:10088000F0F08883214604F15800BDE87040FDE691 -:10089000A4F8DE50B4F88211B4F88631B4F802C07E -:1008A00004F15800A4F87C50B4F88040DB0004FB4D -:1008B0000CF4B3FBF1F394FBF1F45B1C04859BB2E5 -:1008C00003FB01F4C384B4F5C84FC4BF5B1EC384EB -:1008D000B2FBF1F2521C8285028C01EBC202521E65 -:1008E000B2FBF1F2C283828B02FB0CF2B2FBF1F19C -:1008F000818370BD70B50025044603290DD04FF4E7 -:10090000FA4200295CD001297ED0022918BF70BDAF -:100910000146BDE870405830B8E604F15806702131 -:10092000304603F088F8B571F571F5723573B5731B -:10093000F573757135767576F52086F83C0049209B -:1009400086F83D00FF2086F86B0084F82C50258443 -:10095000012284F8512084F85220282084F8530082 -:100960001B20208760874FF4A471E187A187208630 -:100970006086E186A186A4F84400A4F84610A4F895 -:100980004000A4F84210A4F84800A4F84A00A4F8D3 -:100990004C006273A4F8D050202084F8D20084F870 -:1009A000C850C4F8CC5084F8FC5084F8FD5084F84A -:1009B000065184F8075184F8EC5084F8F85070BD63 -:1009C000608893490144B1FBF0F1A4F876104BF62E -:1009D0008031A4F87810E388A4F87C50B4F880C083 -:1009E000DB000CFB00FCB3FBF0F39CFBF0FC5B1C9E -:1009F000A4F880C09BB203FB00FC04F15801A4F8EA -:100A00007E30BCF5C84F00E01AE0C4BF5B1ECB844B -:100A1000B2FBF0F2521C8A8500F5802202F5EE321C -:100A2000531EB3FBF0F2CA838B8B03FB00F2B2FBC5 -:100A3000F0F08883214604F15800BDE8704025E6B7 -:100A4000D4F8F030B4F802C004F158005989DB89B9 -:100A5000A4F87C50B4F88040DB0004FB0CF4B3FB3A -:100A6000F1F394FBF1F45B1C04859BB203FB01F4EE -:100A7000C384B4F5C84FC4BF5B1EC384B2FBF1F29C -:100A8000521C8285028C01EBC202521EB2FBF1F2B3 -:100A9000C283828B02FB0CF2B2FBF1F1818370BD49 -:100AA0002DE9F003C47D0CB1252C03D9BDE8F0037A -:100AB00012207047002A02BF0020BDE8F0037047F3 -:100AC00091F80DC01F260123524D4FF00008BCF1D4 -:100AD000000F73D0BCF1010F1EBF1F20BDE8F00353 -:100AE0007047B0F800C00A7C8F7B91F80F907A4075 -:100AF0004F7C87EA090742EA072282EA0C0C0027AA -:100B00000CF0FF094FEA1C2C99FAA9F99CFAACFCED -:100B10004FEA19694FEA1C6C49EA0C2C0CEB0C1CCF -:100B20007F1C9444FFB21FFA8CFC032FE8D38CEA9D -:100B3000020C384F0022ECFB057212096FF02405FD -:100B400002FB05C2D2B201EBD207027602F0070522 -:100B50003F7A03FA05F52F4218BF42767ED104FB97 -:100B60000CF2120C521CD2B25FF0000400EB040C29 -:100B70009CF812C094453CBFA2EB0C02D2B212D337 -:100B80000D194FF0000C2D7A03FA0CF73D421CBFF3 -:100B9000521ED2B2002A6FD00CF1010C0CF0FF0CE7 -:100BA000BCF1080FF0D304F1010C0CF0FF04052C8C -:100BB000DCD33046BDE8F0037047FFE790F818C07B -:100BC0000C7E474604FB02C2124C4FF0000CE2FBC5 -:100BD000054C4FEA1C1C6FF024040CFB0422D2B21B -:100BE00001EBD204027602F0070C247A03FA0CFC23 -:100BF00014EA0C0F1FBF42764046BDE8F003704771 -:100C000090F817C0B2FBFCF40CFB1422521C03E05A -:100C1000FFDB050053E4B36ED2B2002400EB040CFA -:100C20009CF812C094453CBFA2EB0C02D2B212D386 -:100C30000D194FF0000C2D7A03FA0CF815EA080F85 -:100C40001CBF521ED2B27AB10CF1010C0CF0FF0C99 -:100C5000BCF1080FF0D304F1010C00E00FE00CF040 -:100C6000FF04052CDAD3A4E70CEBC4014176384627 -:100C7000BDE8F0037047FFE70CEBC4014176404646 -:100C8000BDE8F0037047FF4A016812681140FE4A50 -:100C9000126811430160704730B4FC49F94B0024DD -:100CA0004FF0010C0A78521CD2B20A70202A08BFF9 -:100CB0000C700D781A680CFA05F52A42F2D0097802 -:100CC00002680CFA01F15140016030BC704770B409 -:100CD0006FF01F02010C02EA90251F23A1F5AA4024 -:100CE00054381CBFA1F5AA40B0F1550009D0A1F5B8 -:100CF0002850AA381EBFA1F52A40B0F1AA00012051 -:100D000000D100204FF0000C624664468CEA0106D8 -:100D1000F6431643B6F1FF3F11D005F001064FEA46 -:100D20005C0C4CEAC63C03F0010652086D085B08F7 -:100D3000641C42EAC632162CE8D370BC704770BC03 -:100D400000207047017931F01F0113BF00200022FD -:100D50001146704710B4435C491C03F0010C5B085A -:100D600003F00104A4445B0803F00104A4445B08FD -:100D700003F00104A4445B0803F00104A4445B08ED -:100D800003F001045B08A44403F00104A4440CEB49 -:100D900053031A44D2B20529DDDB012A8CBF01209E -:100DA000002010BC704730B40022A1F1010CBCF14E -:100DB000000F11DD431E11F0010F08BF13F8012FC2 -:100DC0005C785FEA6C0C07D013F8025F22435C7812 -:100DD0002A43BCF1010CF7D1491E5CBF405C0243C1 -:100DE000002A0CBF0120002030BC7047130008BF50 -:100DF000704710B401EB030CD41A1CF801CC5B1E35 -:100E000000F804C013F0FF03F4D110BC7047F0B534 -:100E10008DB0164610251C466A46AC4600EB0C0306 -:100E2000A5EB0C0713F8013CD355ACF1010313F00B -:100E3000FF0CF3D115461032102084460B18ACEB92 -:100E4000000713F8013C401ED35510F0FF00F5D108 -:100E5000284601F0D3FB86B1102005F1200201469F -:100E60001318A1EB000C13F8013C401E04F80C30E1 -:100E700010F0FF00F4D10DB0F0BD08982060099883 -:100E800060600A98A0600B98E0600DB0F0BD38B5C6 -:100E900005460C466846F3F754FC002808BF38BDE9 -:100EA0009DF90020227294F909100020511A48BFC0 -:100EB000494295F82D308B42C8BF38BDFF2B08BF83 -:100EC00038BDA17A491CC9B2A17295F82E30994259 -:100ED00003D8617A7F2918BF38BD62720020A072E2 -:100EE000012038BD0C2818BF0B2806D00D281CBFC8 -:100EF0002038062884BF00207047012070470C2945 -:100F00005AD2DFE801F006090E13161B323C41539A -:100F1000484E002A52D04FE0072A18BF082A4DD069 -:100F20004AE00C2A18BF0B2A48D045E00D2A45D0CC -:100F300042E0A2F10F000D2840D93DE023B1A2F11B -:100F400010000C283AD937E0122A18BF112A35D0E0 -:100F500090F8340020B1122A2ED31B2A2ED92BE070 -:100F6000162A29D31B2A29D926E0A2F10F01032929 -:100F700024D990F83400F8B11C2A1FD91CE0002BAA -:100F800008BF042A18D119E013B1062A16D013E0BD -:100F9000012A11D112E01D2A1CBF1E2A1F2A0DD0C2 -:100FA0000AE0A2F12000062808D905E013B10E2AB4 -:100FB00004D001E0052A01D00020704701207047CD -:100FC0002DE9F04187680D4604462046F1F7EEFB17 -:100FD00098B1D5B13846A168F1F72BFF002814DD90 -:100FE0002844401EB0FBF5F606FB05F13846F0F745 -:100FF0001AFFA0603046BDE8F081F1F709FA4FF41E -:10100000E661F0F710FFA060DFE70020BDE8F081A7 -:10101000904228BF704770B50446101B642838BF43 -:10102000642025188D4205D8F1F737FF00281CBF32 -:10103000284670BD204670BD11F00C0F08BF7047E8 -:10104000B0F5296F38BF4FF4296070470246808E93 -:1010500011F00C0F08BF7047D18E92F8523013F088 -:101060000C0F04D0B1F5296F38BF4FF429615388B4 -:1010700040F2E24C03FB0CF3528E4FF4747C0CEB09 -:10108000821C05E09C3F0200A03F0200920100206C -:101090008C459CBF910101F57471591AA1F59671A7 -:1010A000884228BF0846B0F5296F38BF4FF4296041 -:1010B0007047F0B4002A14BF08220122002B14BF8D -:1010C0004FF0080C4FF0010C12F00C0FCA8E8B8EF3 -:1010D00023D091F85250144615F00C0F04D0B4F5FB -:1010E000296F38BF4FF429644D8840F2E2466E43C1 -:1010F0004D8E4FF4747707EB8517A7429CBFAC0168 -:1011000004F57474341BA4F59674A34228BF2346D7 -:10111000B3F5296F38BF4FF429631CF00C0F04D0CE -:10112000B2F5296F38BF4FF429629BB200280CBF7B -:101130000124002491F853001CF00C0F08BF00207C -:10114000991808449830002C14BF04210021084449 -:10115000F0BC70472DE9F00391F851200B8E12F08E -:101160000C0F4FF474771CBF07EB83139DB257D05D -:1011700012F00C0FCB8EB1F832C08A8E91F852402B -:1011800022D01E4614F00C0F04D0B6F5296F38BFDC -:101190004FF42966B1F8028040F2E24908FB09F8F1 -:1011A00007EB8C19B1459CBF4FEA8C1606F5747697 -:1011B000A8EB0606A6F59676B24228BF3246B2F5EF -:1011C000296F38BF4FF42962AA4228BF2A4695B238 -:1011D00014F00C0F1CBF07EB8C1292B228D000BF8A -:1011E00014F00C0F04D0B3F5296F38BF4FF4296306 -:1011F000934228BF134600280CBF0122002291F819 -:10120000530014F00C0F08BF0020E9180844983070 -:10121000002A14BF042100210844BDE8F0037047F0 -:10122000022A07BF9B003C33DB0070339DB29FE76F -:10123000022C07BF4FEA8C023C324FEACC027032DC -:1012400092B2CDE7F0B491F852C08388048991F846 -:1012500053501CF00C0F4FF0000C08BF00251E1956 -:1012600035449835002A18BF04222A444D6A954215 -:1012700024BFF0BC7047521B521C52089B1A9BB2F1 -:10128000A21A838092B2028191F851506FF00E063B -:1012900015F00C0F6FF00D0422D0B3F5747F38BF3A -:1012A000634606D3503BDD1703EB956304EBA313B2 -:1012B0009BB2438091F8521011F00C0F19D0B2F587 -:1012C000747F09D3A2F15001CA1701EB926104EBBC -:1012D000A11100BF1FFA81FCA0F806C0F0BC704746 -:1012E000022D1ABF04EBD3039BB206EB9303E0D1AC -:1012F000DEE702291ABF04EBD2011FFA81FC06EBDC -:101300009201E9D1E6E710F0010F1CBF0120704700 -:1013100010F0020F1CBF0220704710F0040018BF2D -:10132000082070472DE9F0410546174688460126FA -:10133000084600F03CFC0446404600F03CFC0346F6 -:1013400010F0010F18BF012008D113F0020F18BFD1 -:10135000022003D113F0040018BF082014F0010F7D -:1013600018BF4FF0010C20D050EA0C0108BF002636 -:1013700013F0070F08BF002014F0070F08BF4FF04D -:10138000000C95F85110814208BF0020387095F884 -:101390005210614508BF4FF0000C87F801C00028CB -:1013A00008BFBCF1000F1CD10DE014F0020F18BFF4 -:1013B0004FF0020CD8D114F0040F14BF4FF0080CFA -:1013C0004FF0000CD0E7404600F0FBFBB5F858109A -:1013D000401A00B247F6FE71884201DC002800DCAA -:1013E00000263046BDE8F081012814BF022870476E -:1013F00010F00C0018BF0420704718B4CBB2C1F332 -:10140000072CC1B2C0F30720012B07D0022B09D053 -:10141000042B08BFBCF1040F23D006E0BCF1010F80 -:1014200003D11EE0BCF1020F1BD0012906D0022916 -:1014300007D0042908BF042813D004E0012802D1F2 -:101440000FE002280DD001EA0C0161F307021840F9 -:1014500060F30F22D0B210F0020F18BF022010D19B -:1014600006E0084003EA0C01084060F30702EFE7DA -:1014700010F0010F18BF012003D110F0040018BFB5 -:1014800008208DF80000C2F3072010F0020F18BFEB -:10149000022008D110F0010F18BF012003D110F075 -:1014A000040018BF08208DF80100BDF8000018BC2A -:1014B0007047162A10D12A220C2818BF0D280FD0E9 -:1014C0004FF0230C20280DD031B10878012818BF27 -:1014D000002805D0162805D000207047012070474D -:1014E0001A70FBE783F800C0F8E70000282102F03B -:1014F00080BA4078704730B50546007801F00F0299 -:1015000020F00F0010432870092910D2DFE801F005 -:10151000050705070509050B0D00062409E00C2445 -:1015200007E0222405E0012403E00E2401E000246A -:10153000FFDF6C7030BD007800F00F0070470A6864 -:10154000C0F803208988A0F807107047D0F803205E -:101550000A60B0F80700888070470A68C0F8092060 -:101560008988A0F80D107047D0F809200A60B0F8FB -:101570000D00888070470278402322F0400203EA81 -:1015800081111143017070470078C0F380107047DB -:101590000278802322F0800203EAC1111143017016 -:1015A00070470078C0097047027802F00F02072ADE -:1015B00016BF082AD0F80520D0F80320C1F809206A -:1015C0000CBFB0F80920B0F80720A1F80D200A7868 -:1015D00022F080020A700078800942EAC010087088 -:1015E000704770B515460E4604461F2A88BFFFDFB8 -:1015F0002A46314604F1090002F07CF9A81D60700A -:1016000070BD70B544780E460546062C38BFFFDF26 -:10161000A01F84B21F2C88BF1F24224605F1090198 -:10162000304602F067F9204670BD70B515460E468B -:1016300004461F2A88BFFFDF2A46314604F109000D -:1016400002F058F9A81D607070BD70B544780E4660 -:101650000546062C38BFFFDFA01F84B21F2C88BFB1 -:10166000FFDF224605F10901304602F043F920462A -:1016700070BD0968C0F80F1070470A88A0F81320E1 -:1016800089784175704790F8242001F01F0122F0FD -:101690001F02114380F824107047072988BF0721D3 -:1016A00090F82420E02322F0E00203EA41111143E4 -:1016B00080F8241070471F3002F0CDBAC17811F0C5 -:1016C0003F0F1BBF027912F0010F0022012211F01F -:1016D0003F0F1BBF037913F0020F002301231A44AD -:1016E00002EB4202530011F03F0F1BBF027912F0D0 -:1016F000080F0022012203EB420311F03F0F1BBF32 -:10170000027912F0040F00220122134411F03F0F5E -:101710001BBF027912F0200F0022012202EBC2024D -:1017200003EB420311F03F0F1BBF027912F0100FC1 -:101730000022012202EB42021A4411F03F0F1BBFAC -:10174000007910F0400F00200120104410F0FF003D -:1017500014BF012100210844C0B2704710B50278BF -:10176000417802F00F02082A2AD2DFE802F00408CA -:101770000B2929290F13881F1F281FD920E00C29A6 -:101780001CD01DE0881F1F2818D919E0881F1F28AA -:1017900014D915E04A1E242A12D8C27800249309CD -:1017A000032B09D002F03F0C0CF101028A4203D84E -:1017B000FFF784FF604501D9204610BD012010BD10 -:1017C000002010BDC078800970470178002201F028 -:1017D0000F030121042B0BD0082B1CBF00207047E6 -:1017E00043780E2B04BFC3785FEA931C04D106E054 -:1017F0004078801F1F2800D911460846704713F013 -:101800003F0F1EBF007910F0010F10F0020FF4D14E -:10181000F2E710B4017801F00F01032920D0052967 -:1018200021D14478B0F81910B0F81BC0B0F81730C7 -:10183000827D222C17D1062915D3B1F5486F98BFA8 -:10184000BCF5FA7F0FD272B1082A98BF8A420AD239 -:101850008B429CBFB0F81D00B0F5486F03D805E07F -:1018600040780C2802D010BC0020704710BC01202A -:1018700070472DE9F0411F4614460D00064608BF8B -:10188000FFDF2146304600F0C8F9040008BFFFDF43 -:1018900030193A462946BDE8F04102F02BB810B5A0 -:1018A000044600F0BAF9002818BF204410BDC078E3 -:1018B00000F03F007047C02202EA8111C27802F0B6 -:1018C0003F021143C1707047C9B201F00102C1F378 -:1018D00040031A4402EB4202C1F3800303EB4202CD -:1018E000C1F3C00302EB4302C1F3001303EB430354 -:1018F0001A44C1F3401303EBC30302EB4302C1F3E9 -:1019000080131A4412F0FF0202D0521CD2B20171AD -:10191000C37802F03F0103F0C0031943C170511CAA -:10192000417070472DE9F0410546C078164600F039 -:101930003F04C4F124000F46B042B8BFFFDF2819AE -:1019400032463946001D01F0D5FFA019401C6870D1 -:10195000BDE8F0812DE9F04105464478C0780F4696 -:1019600000F03F06002C08BFFFDFA01B401E84B222 -:101970001F2C88BF1F24A819011D2246384601F0DC -:10198000B9FF2046BDE8F08100B5027801F00303FD -:1019900022F003021A43027000224270012914BF90 -:1019A000022900BD032912BFFFDF0121417000BDE4 -:1019B00001F0030300B5027822F003021A4302701B -:1019C00000224270012914BF022900BD032912BF61 -:1019D000FFDF0121417000BD007800F00300704777 -:1019E000417889B1C0780E2818BF0F2803D010287D -:1019F00018BF192802D3FB2904D905E0B64A105CA8 -:101A0000884201D1012070470020704730B505465B -:101A1000C170192939BFB048445C0024FFDF6C70E5 -:101A200030BDB0F807007047B0F809007047C172C8 -:101A3000090A01737047B0F80B00704730B4B0F872 -:101A40000720A64DB0F809C0B0F805300179941F01 -:101A50002D1998BFBCF5FA7F0ED269B1082998BF3D -:101A6000914209D293429FBFB0F80B00B0F5486F86 -:101A7000012030BC98BF7047002030BC7047001D6B -:101A800002F0E9B8021D0846114602F0E4B8B0F8C9 -:101A900009007047007970470A68426049688160B0 -:101AA000704742680A608068486070470988818191 -:101AB00070478089088070470A68C0F80E2049681E -:101AC000C0F812107047D0F80E200A60D0F812004B -:101AD000486070470968C0F816107047D0F81600C3 -:101AE000086070470A6842604968816070474268D0 -:101AF0000A608068486070470968C1607047C068C4 -:101B000008607047007970470A68426049688160E0 -:101B1000704742680A608068486070470171090A2E -:101B2000417170478171090AC17170470172090AD8 -:101B3000417270478172090AC1727047808870478C -:101B4000C0887047008970474089704701891B2908 -:101B500024BF4189B1F5A47F07D381881B2921BF08 -:101B6000C088B0F5A47F01207047002070470A6844 -:101B7000426049688160704742680A6080684860D6 -:101B80007047017911F0070F1BBF407910F0070F64 -:101B9000002001207047017911F0070F1BBF407929 -:101BA00010F0070F00200120704701717047007985 -:101BB000704741717047407970478171090AC1715E -:101BC0007047C088704746A282B0D2E90012CDE9C2 -:101BD00000120179407901F0070269461DF80220E0 -:101BE000012A07D800F00700085C01289EBF0120E9 -:101BF00002B07047002002B0704701717047007951 -:101C00007047417170474079704730B50C460546C2 -:101C1000FB2988BFFFDF6C7030BDC378024613F02C -:101C20003F0008BF70470520127903F03F0312F010 -:101C3000010F36D0002914BF0B20704712F0020F9D -:101C400032D0012914BF801D704700BF12F0040F6D -:101C50002DD0022914BF401C704700BF12F0080F9E -:101C600028D0032914BF801C704700BF12F0100F4A -:101C700023D0042914BFC01C704700BF12F0200FEE -:101C80001ED005291ABF1230C0B2704712F0400FA3 -:101C900019D006291ABF401CC0B27047072918D1B5 -:101CA00014E00029CAD114E00129CFD111E00229A2 -:101CB000D4D10EE00329D9D10BE00429DED108E00C -:101CC0000529E3D105E00629E8D102E0834288BF77 -:101CD0007047002070470000A43F020086F3FFFF1A -:101CE000000101020102020370B50446C2F11005B1 -:101CF000281901F0FFFD15F0FF0108D0491EC9B2F7 -:101D0000802060542046BDE8704001F072BE70BD76 -:101D100030B505E05B1EDBB2CC5CD55C6C40C454D6 -:101D2000002BF7D130BD10B5002409E00B78521E0E -:101D300044EA430300F8013B11F8013BD2B2DC094D -:101D4000002AF3D110BD2DE9F0410C46012009789D -:101D5000FF4E92B0154602274FF006084FF0040CD4 -:101D600071B101291ED0022945D0032905D1297856 -:101D7000042902D105201070002012B0BDE8F081C6 -:101D8000606850B1CDE90106012020708DF8008017 -:101D9000606A05901146684663E0277085F800C0C8 -:101DA000566026E029780429E7D169681022206965 -:101DB000FFF7B9FF6868C07B000606D5E44A2069D2 -:101DC000102310320146FFF7A3FFD4E904101022BC -:101DD000FFF7A9FF2069C07B000606D5DC4A6069D1 -:101DE000102310320146FFF793FF277085F800C0DB -:101DF0006E600320C1E729780429BED1A08910288C -:101E00000CD9A0F1100080B2A081A1684FF010039E -:101E1000014468466A68FFF77BFF18E004D14FF081 -:101E200010032269A16807E0C2B20EA8A168FFF7FB -:101E30005BFF626910230EA90AA8FFF769FF102350 -:101E40000AA968466A68FFF763FF0320207060688C -:101E50000590CDF818D08DF81080606A0990294659 -:101E600004A8EFF7DBFD88E72DE9F04107460D46B2 -:101E700001200B7806213BB1012B04D11378052BEF -:101E800001D11170002079E76C6901262022617070 -:101E9000E8686060686A6062A168287C0870A68152 -:101EA000A068A968401C01F025FDA08920222030EF -:101EB000A081A0686968213001F01CFDA08921463D -:101EC0002030A0812E703846BDE8F041EFF7BDBD4F -:101ED0002DE9F05F0D468346012009781746064636 -:101EE0004FF00608D1B1DFF868A24FF00009AAF15F -:101EF000080A012923D002297ED003290CD1397880 -:101F0000052909D179681022E86901F0F3FC07205E -:101F10003870183500207D60BDE8F09F2C6A8C4831 -:101F2000202284F80180203060602020A081686A2F -:101F300060626968A06801F0DDFC2E70D4E0397839 -:101F40000529E9D12C6A84F80180686A60625168C9 -:101F50001022E86901F0CEFCE8696060A0684F4695 -:101F600080F80090A681A0684670A089401C80B2CD -:101F7000A081A1680844696951F8012F026089882D -:101F80008180A089801D80B2A0816969A2680978DA -:101F9000C1F340011154A089401C80B2A081A16806 -:101FA0000844296951F8012F026089888180A0893D -:101FB000801D80B2A0812969A2680978C1F340011F -:101FC0001154A0891022401C80B2A081A16808444D -:101FD000E96801F08FFCA0891022103080B2A08146 -:101FE000A1680844A96801F085FCA089103080B27E -:101FF000A081A168014400E00DE0DAF80400086067 -:10200000A089001D80B2A081A1680F54A089401C46 -:10201000A081022067E03978052992D15168102209 -:10202000A86901F067FC2C6A84F80180E8696060A7 -:10203000686A6062A16881F80090A681A068467015 -:10204000A089401C80B2A081A1680844696951F848 -:10205000012F026089888180A089801D80B2A081C3 -:102060006969A2680978C1F340011154A089401C34 -:1020700080B2A081A1680844296951F8012F02604B -:1020800089888180A089801D80B2A0812969A26889 -:102090000978C1F340011154A0891022401C80B27C -:1020A000A081A1680844E96801F024FCA0891022FD -:1020B000103080B2A081A1680844A96801F01AFC20 -:1020C000A089103080B2A081A1680144DAF8040030 -:1020D0000860A089001D80B2A081A1680E54A0896B -:1020E000401CA0810320287021465846BDE8F05FBF -:1020F000EFF7ABBC70B50D4606460978012041B13B -:10210000012905D11178052902D10820107000207D -:1021100070BD2C6A0620607069686160696A6162DE -:10212000EA69A16852F8013F0B6092888A80A08119 -:10213000E869A1680078C0F340008871A089401C5C -:1021400080B2A081A1680844A96951F8012F01E07B -:10215000C53F0200026089888180A089801D80B20D -:10216000A081A969A2680978C1F340011154A0892E -:10217000401C80B2A081A168084469690A88028075 -:1021800089788170A0891022C01C80B2A081A168CA -:102190000844296901F0AEFBA0891022103080B2FA -:1021A000A081A1680844E96801F0A4FBA08910227D -:1021B000103080B2A081A1680844A96801F09AFBA0 -:1021C000A08921461030A081012028703046BDE84A -:1021D0007040EFF73ABC70B50D460646097801200D -:1021E00059B1012908D11178052905D109201070AC -:1021F000506800685060002070BD6C690620102295 -:102200006070E8686060686A60622969A06801F0CF -:1022100071FB1020A081A06820221030A96801F075 -:1022200069FBA0892022203080B2A081A1680844E7 -:10223000696801F05FFBA08921462030A081012060 -:1022400028703046BDE87040EFF7FFBB70B50C4614 -:10225000012009788EB01546062659B1012934D0DF -:10226000022905D12978042902D10A201070002002 -:102270000EB070BD606910236A460078C0F340005C -:102280008DF80000A0690078C0F340008DF80100CF -:10229000E0680168CDF802108188ADF806108079F9 -:1022A0008DF8080020690168CDF809108188ADF823 -:1022B0000D1080798DF80F00606805900AA80690CF -:1022C000A168FFF725FD01201DE029780429CFD161 -:1022D000A06910236A4650F8011F00918088ADF86C -:1022E0000400606950F8011FCDF806108088ADF831 -:1022F0000A0000200390606805900AA806906968AB -:10230000FFF706FD022020708DF81060606A0990CA -:10231000294604A8EFF782FBAAE700B50B788BB03B -:1023200001204BB1012B05D11178042902D10B20DA -:10233000107000200BB000BD4868019006A8029004 -:10234000C868036806934068079088680368089324 -:10235000406809900120087006208DF80000486A46 -:10236000059011466846EFF759FBE3E700B50B7897 -:102370008BB0012043B1012BDCD111780429D9D1D4 -:102380000C2010700020D5E74868019006A8029044 -:1023900088680368069340680790002008900990B9 -:1023A0000120087006208DF80000486A059011464B -:1023B0006846EFF733FBBDE700B50B788BB0012023 -:1023C00043B1012BB6D111780429B3D10D2010707F -:1023D0000020AFE748680590CDF818D088680088DD -:1023E000ADF80000C8680088ADF802000020019038 -:1023F000029003900120087006208DF81000486AB2 -:102400000990114604A8EFF709FB93E730B403469F -:102410000C7801205CB1012C15D0022C05D111786B -:102420000C2902D10E201070002030BC7047012012 -:102430000870C868042242704A6842600B4A826091 -:10244000921EC2600BE014780D2CEED102200870B1 -:10245000C86803244470526842608A688260496A8E -:102460004162014630BC1846EFF7EFBABF3F0200A9 -:102470002DE9F0410C4611490D68104A1049083207 -:102480001160A0F120012E2901D301200CE03E288B -:1024900010D040CC0B4F94E80E0007EB8000241FB7 -:1024A00050F8807C3046B84720600448001D056025 -:1024B000BDE8F0812046DEF783FEF5E71005024017 -:1024C00001000001F83F020010B5524800F044FA44 -:1024D00000B1FFDF4F48401C00F03EFA002800D05A -:1024E000FFDF10BD2DE9F14F4B4ED6F800B00127AC -:1024F000484800F039FADFF81C8128B95FF000077E -:1025000008F1010000F046FA444C00254FF00309A1 -:1025100001206060C4F80051C4F804510099316092 -:102520002060DFF8FCA018E0DAF80000C00614D53F -:102530000E2000F064F8EFF3108010F0010072B686 -:1025400000D00120C4F80493D4F8001119B9D4F8CC -:10255000041101B920BF00B962B6D4F8000118B95E -:10256000D4F804010028DFD0D4F804010028CFD12A -:1025700037B1C6F800B008F1010000F0F5F911E03C -:1025800008F1010000F0F0F90028B9D1C4F808936F -:10259000C4F80451C4F800510E2000F030F81D4872 -:1025A00000F0F8F90020BDE8F88F2DE9F0438DB078 -:1025B0000D46064600240DF110090DF1200817E024 -:1025C00004EB4407102255F82710684601F092F9F1 -:1025D00005EB870710224846796801F08BF96846B9 -:1025E000FFF780FF10224146B86801F083F9641CB0 -:1025F000B442E5DB0DB00020BDE8F08372E700F0E7 -:102600001F02012191404009800000F1E020C0F844 -:10261000801270479301002004E5004000E0004074 -:1026200010ED00E0C248002101708170704770B564 -:10263000C04D01232B60C04B1C68002CFCD0002433 -:1026400007E00E6806601E68002EFCD0001D091D04 -:10265000641C9442F5D30020286018680028FCD040 -:1026600070BD70B5B24E0446B44D3078022800D02B -:10267000FFDFAC4200D3FFDF7169B148012903D805 -:1026800047F23052944201DD03224271491C7161CC -:10269000291BC160AA497078F0F704F9002800D11D -:1026A000FFDF70BD70B5A24C0D466178884200D046 -:1026B000FFDFA24E082D4ED2DFE805F04D04213099 -:1026C0004D4D4D3B2078022800D0FFDF03202070C5 -:1026D000A078022802D0012804D008E0A06800F009 -:1026E00051FE04E004F1080007C8FFF7A0FF052031 -:1026F00020700020A070BDE87040EFF794BDEFF7A8 -:1027000087FE01466068F0F794FBB04202D261692F -:1027100002290BD30320F0F742FE12E0EFF778FE18 -:1027200001466068F0F785FBB042F3D2BDE8704027 -:1027300097E7207802280AD0052806D0FFDF04207A -:102740002070BDE8704000F0E8B8022000E00320EF -:10275000F0F725FEF3E7FFDF70BD70B50546EFF734 -:1027600057FE734C60602078012800D0FFDF744969 -:1027700001200870002008718D60042048716F48A6 -:10278000C860022020706078F0F78CF8002800D133 -:10279000FFDF70BD10B5664CA07808B9207808B18D -:1027A000112010BD6748EFF7B9FD607060782028F0 -:1027B00004D0012020700020606110BD032010BDF6 -:1027C0002DE9F041144600EB84070E4605463F1FF5 -:1027D00000F0EBFD4FF080521169484306EB840195 -:1027E000091FB14201D2012100E000211CB1126990 -:1027F000B4EB920F02D90920BDE8F081524A95420C -:102800000ED3AF420CD3854205D2874203D245EAAC -:102810000600800701D01020EEE7964200D309B1F0 -:102820000F20E9E749484A490068884205D0224616 -:1028300031462846FFF7FBFE10E0FFF7ABFF00280C -:10284000DAD13B4801218560C0E9036481704FF40F -:10285000A97104FB01F01830FFF77FFF0020CBE7E0 -:1028600070B54FF08055044628693749B1FBF0F048 -:10287000844201D20F2070BD00F097FDA04201D824 -:10288000102070BD2869314831490068884204D061 -:102890002869604300F076FD0CE0FFF77BFF00281D -:1028A000EFD1296922486143816002218170294862 -:1028B000FFF753FF002070BD2349090BB1EB401F08 -:1028C00007D9404201EB4011202903D34FF0FF30DC -:1028D0007047002101208840401E704770B50546B2 -:1028E0000C460020FFF7E8FF28420ED10120FFF739 -:1028F000E3FF204209D10220FFF7DEFF104204D19E -:102900000320FFF7D9FF184201D00F2070BD2146E8 -:102910002846BDE8704000F0ABBF10B5044C6078AD -:10292000EFF757FD00B9FFDF00202070A07010BD49 -:102930009801002004E5014000E40140105C0C0017 -:1029400024130020A526020000500200B000002041 -:10295000BEBAFECA7C5E01000021017008467047C5 -:102960000146002008707047EFF3108101F001016B -:1029700072B60278012A01D0012200E00022012370 -:10298000037001B962B60AB1002070474FF40050DD -:102990007047E9E7EFF3108111F0010F72B64FF0C5 -:1029A0000002027000D162B600207047F2E700001A -:1029B0006E4909680160002070476C49086000207A -:1029C000704701218A0720B1012804D042F2040097 -:1029D0007047916700E0D16700207047644901208B -:1029E000086042F20600704708B50423604A1907E0 -:1029F000103230B1C1F80433106840F001001060AB -:102A00000BE0106820F001001060C1F808330020CE -:102A1000C1F80801574800680090002008BD011F58 -:102A20000B2909D8524910310A6822F01E0242EAE5 -:102A3000400008600020704742F205007047000126 -:102A400000F18040C0F8041900207047000100F137 -:102A50008040C0F8081900207047000100F1804054 -:102A6000D0F80009086000207047012801D907202C -:102A70007047414A52F8200002680A430260002071 -:102A80007047012801D9072070473B4A52F82000BF -:102A900002688A43026000207047012801D907209C -:102AA0007047354A52F820000068086000207047DF -:102AB000020032494FF0000003D0012A01D0072064 -:102AC00070470A60704708B54FF40072510510B1A5 -:102AD000C1F8042308E0C1F808230020C1F824014C -:102AE00024481C3000680090002008BD08B58022F2 -:102AF000D10510B1C1F8042308E0C1F80823002073 -:102B0000C1F81C011B48143000680090002008BD6B -:102B100008B54FF48072910510B1C1F8042308E0A4 -:102B2000C1F808230020C1F82001124818300068BD -:102B30000090002008BD0D4938310968016000206F -:102B400070474FF080410020C1F80801C1F824010E -:102B5000C1F81C01C1F820014FF0E020802180F86D -:102B600000140121C0F8001170470000000400406B -:102B70000005004008010040B04002007805004018 -:102B80006249634B0A6863499A42096801D1C1F3FB -:102B900010010160002070475C495D4B0A685D4987 -:102BA000091D9A4201D1C0F310000860002070474F -:102BB0005649574B0A68574908319A4201D1C0F328 -:102BC000100008600020704730B5504B504D1C6815 -:102BD00042F20803AC4202D0142802D203E01128CA -:102BE00001D3184630BDC3004B481844C0F8101537 -:102BF000C0F81425002030BD4449454B0A6842F214 -:102C000009019A4202D0062802D203E0042801D327 -:102C100008467047404A012142F8301000207047B2 -:102C20003A493B4B0A6842F209019A4202D006280F -:102C300002D203E0042801D308467047364A012136 -:102C400002EBC00041600020704770B52F4A304E43 -:102C5000314C156842F2090304EB8002B54204D0FE -:102C6000062804D2C2F8001807E0042801D3184649 -:102C700070BDC1F31000C2F80008002070BD70B52F -:102C8000224A234E244C156842F2090304EB8002C9 -:102C9000B54204D0062804D2D2F8000807E0042880 -:102CA00001D3184670BDD2F80008C0F310000860C8 -:102CB000002070BD174910B5083118480860112070 -:102CC000154A002102EBC003C3F81015C3F8141510 -:102CD000401C1428F6D3002006E0042804D302EB9D -:102CE0008003C3F8001807E002EB8003D3F8004824 -:102CF000C4F31004C3F80048401C0628EDD310BDEF -:102D0000044906480831086070470000B000002000 -:102D1000BEBAFECA00F5014000F001400000FEFF0F -:102D20007D4B1B6803B19847BFF34F8F7B48016809 -:102D30007B4A01F4E06111430160BFF34F8FFEE76E -:102D400010B5EFF3108010F0010F72B601D001241E -:102D500000E0002400F0D6F850B1DEF7CCFAEFF72F -:102D600026F9F0F7BDFAE0F740F86E490020086058 -:102D700004B962B6002010BD70B50C460646EFF3EC -:102D8000108010F0010F72B601D0012500E000257F -:102D900000F0B8F818B105B962B6082070BDDEF7CA -:102DA00025FADEF7AAFA0246002043099B0003F148 -:102DB000E02300F01F01D3F80031CB40D9071BD02E -:102DC000202803D222FA00F1C90722D141B20029FA -:102DD00006DA01F00F0101F1E02191F8141D03E082 -:102DE00001F1E02191F800144909082911D281B1BB -:102DF00001290ED004290CD0401C6428D5D3DFF75C -:102E0000CBFF4849484808602046F0F7AFFE60B95C -:102E100004E005B962B641F2010070BD3E480460AD -:102E20002EB13046F0F7EFFE18B1102429E03F4EE6 -:102E300016E03078022802D94FF4805421E00724AC -:102E40000028707801D0E0B908E0D0B1202818D867 -:102E5000B078212815D8012813D001E0B07880B9C6 -:102E60003349802081F8140DDEF747FA3146F0F738 -:102E70001DFAEFF75BF800F0CBFA3046DEF70CFAFC -:102E8000044605B962B61CB1FFF75AFF204670BD73 -:102E9000002070BD10B5044600F034F800B10120E8 -:102EA0002070002010BD234908600020704770B5D5 -:102EB0000C4621490D682049204E08310E6010282B -:102EC00007D011280CD012280FD0132811D00120C0 -:102ED00013E0D4E90001FFF74FFF354620600DE015 -:102EE000FFF72EFF0025206008E02068FFF7D2FFE3 -:102EF00003E0104920680860002020600E48001D93 -:102F0000056070BD074808490068884201D101206A -:102F10007047002070470000B00100200CED00E079 -:102F20000400FA05B0000020BEBAFECAB840020094 -:102F30000BE000E004000020100502400100000149 -:102F4000EA49082818BF0428086803BF20F0A30036 -:102F500040F05C0040F0004020F000400860704706 -:102F600000B5E349022831D021DC10F10C0F08BF75 -:102F7000F4202BD00FDC10F1280F08BFD82025D06B -:102F800010F1140F08BFEC2020D010F1100F08BF73 -:102F9000F0201BD024E010F1080F08BFF82015D056 -:102FA00010F1040F0CBFFC2000280FD018E0C01E49 -:102FB000072815D2DFE800F012100E0C09070400F4 -:102FC0000920086000BD082000E00720086000BD5F -:102FD0000620FBE70520F9E70420F7E70320F5E7E3 -:102FE000FFDF00BD00B5C349012808BF03200CD096 -:102FF000022808BF042008D0042808BF062004D0F7 -:10300000082816BFFFDF052000BD086000BDB948D5 -:10301000016801F00F01032904BF01207047016816 -:1030200001F00F01042904BF02207047016801F07C -:103030000F01052904BF08207047006800F00F0049 -:10304000062804BF0420704700B5FFDF012000BD43 -:10305000A949002808BF086805D0012806BF0868EC -:1030600040F0010070470860704770B51E46054685 -:10307000012924D0022A04BFA0484FF47A710DD050 -:10308000012A04BF9E484FF4C86107D0042A07BF35 -:103090009C4840F698019C4840F6E4414418184684 -:1030A000F1F7F6FD04443046F1F720FE20444FF4DA -:1030B0007A7100F27120B0FBF1F0281A70BD022A7B -:1030C00008BF4FF47A700AD0012A08BF4FF4C860D5 -:1030D00005D0042A0CBF40F6980040F6E44049F6BB -:1030E00008514418DBE770B514460546012908BFAE -:1030F00049F6CA660DD0022B08BF844807D0012BC1 -:1031000008BF7F4803D0042B0CBF7E48804800F1E5 -:10311000FA061046F1F7D5FD012C08BF4FF47A717D -:103120000AD0022C08BF4FF4FA7105D0042C0CBF52 -:103130004FF4FA614FF4FA51711A08444FF47A715E -:1031400000F28920B0FBF1F0281A801E70BD70B526 -:1031500014460646012930D0022B04BF67494FF4BC -:103160007A700DD0012B04BF65494FF4C86007D0B9 -:10317000042B07BF634940F69800634940F6E440DA -:103180000D181046F1F79DFD012C08BF4FF47A7120 -:103190000AD0022C08BF4FF4FA7105D0042C0CBFE2 -:1031A0004FF4FA614FF4FA51691A08444FF47A71F6 -:1031B0006438B0FBF1F0301A70BD022B08BF4FF439 -:1031C0007A700AD0012B08BF4FF4C86005D0042BD9 -:1031D0000CBF40F6980040F6E44049F60851451807 -:1031E000CFE770B516460446012908BF49F6CA65FF -:1031F0000DD0022B08BF454807D0012B08BF40481F -:1032000003D0042B0CBF3F48414800F1FA0510469B -:10321000F1F73EFD05443046F1F768FD28444FF4D0 -:103220007A7100F2E140B0FBF1F0201A801E70BD0F -:103230002DE9F04107461E460C4615461046082A61 -:1032400016BF04284DF68830F1F722FD07EB470141 -:10325000C1EBC71100EBC100012C08BF4FF47A711C -:103260000AD0022C08BF4FF4FA7105D0042C0CBF11 -:103270004FF4FA614FF4FA5147182046F1F721FD57 -:10328000381A4FF47A7100F60F60B0FBF1F428465B -:10329000F1F7ECFC20443044401DBDE8F08170B5EE -:1032A000054614460E460846F1F7F2FC05EB4502CA -:1032B000C2EBC512C0EBC2053046F1F717FD2D1A5F -:1032C0002046082C16BF04284DF68830F1F7E0FCA4 -:1032D00028444FF47A7100F6B730B0FBF1F5204680 -:1032E000F1F7C4FC2844401D70BD00003C170040AD -:1032F0000C150040101500405016004068360200C2 -:10330000A2240200D0FB010030D3010004360200E9 -:10331000C0D401002DE9FE430C468046FEF75CFB5D -:10332000074698F80160204601A96A46ECF78BFE33 -:1033300005000DD0012F02D00320BDE8FE832046FA -:1033400002AA0199ECF7A1FD0298B0F803000AE087 -:10335000022F14D1042E12D3B8F80300BDF80020B8 -:10336000011D914204D8001D80B2A919814202D1E9 -:103370004FF00000E1E702D24FF00100DDE74FF02F -:103380000200DAE70B4A022111600B490B68002B9F -:10339000FCD0084B1B1D186008680028FCD00020DA -:1033A000106008680028FCD070474FF080504069DA -:1033B0007047000004E5014000E4014002000B46B4 -:1033C0004FF00000014620D0012A04D0022A04D088 -:1033D000032A0DD103E0012002E0022015E00320C2 -:1033E000072B05D2DFE803F00406080A0C0E1000D4 -:1033F00007207047012108E0022106E0032104E0D4 -:10340000042102E0052100E00621EEF7A4BF000040 -:10341000FD4805218170002101704170C1708160FB -:103420007047FA490A78012A06D0CA681044C86071 -:10343000C8684038EFF7CABC8A681044886088685A -:10344000F7E710B5F04CE078EEF7C3FF00B9FFDF07 -:103450000820EFF7A4FF0520A07000202070607006 -:1034600010BD002819D00378E949EA4A13B1012BAD -:103470000ED011E00379012B00D06BB943790BB169 -:10348000012B09D18368643B8B4205D2C0680EE0F2 -:103490000379012B02D00BB10020704743790BB1A7 -:1034A000012BF9D1C368643B8B42F5D2806890420E -:1034B000F2D801207047D54910B501220A7002796F -:1034C000AAB100220A7142799AB104224A71826833 -:1034D00052328A60C068C860C868CB4C14346060DF -:1034E000EEF796FFC84920600220887010BD0322C5 -:1034F000E8E70322EAE770B5044609B1012000E0DD -:103500000320C24D00212970217901B100202871CA -:10351000607968B104206871BB4EA168F068EEF76D -:1035200082FCA860E0685230E8600320B07070BD93 -:103530000320F0E72DE9F04105460226EFF772FB84 -:10354000006800B1FFDFB04C01273DB12878B0B171 -:10355000012805D0022810D0032813D027710CE0D1 -:103560006868C82807D3EFF798FC20B16868FFF7B0 -:1035700058FF012603E0002601E000F063F9304621 -:10358000BDE8F08120780028F7D16868FFF769FF6F -:103590000028E3D06868017879B1A078042800D0C9 -:1035A000FFDF01216868FFF7A6FF9849E078EFF791 -:1035B00079F90028E1D1FFDFDFE7FFF77CFF6770D3 -:1035C000DBE72DE9F047904C8846E178884200D04F -:1035D000FFDFDFF83492002501278C4E09F1140932 -:1035E000B8F1080F79D2DFE808F0040D2A557E847F -:1035F0009199A078032803D0A078022800D0FFDF9B -:10360000BDE8F087A078032803D0A078022800D076 -:10361000FFDF0420A0702571207800287AD1FFF701 -:1036200000FF3078012806D0B068E06000F02AF989 -:103630002061002062E0E078EFF730F8F5E7A0784D -:10364000032803D0A078022800D0FFDF20780028CC -:103650006FD1A078032816D0EEF7DAFE01464F4668 -:10366000D9F80000EFF7E5FB00280EDB796881420E -:103670000BDB081AF0606549E078EFF713F90028D2 -:10368000BED1FFDFBCE7042029E00420EFF787FE6E -:10369000A570B5E7A078032803D0A078022800D051 -:1036A000FFDF207888BBA078032817D0EEF7B0FEA4 -:1036B00001464F46D9F80000EFF7BBFB0028E4DBDA -:1036C00079688142E1DB081AF0605049E078EFF751 -:1036D000E9F8002894D1FFDF92E740E00520EFF7FA -:1036E0005EFEA7708CE7A078042800D0FFDF0220E0 -:1036F00004E0A078042800D0FFDF0120A1688847FB -:10370000FFF718FF054630E004E012E0A078042837 -:1037100000D0FFDFBDE8F04700F094B8A07804289F -:1037200005D0607810B1A078022800D0FFDF2078A3 -:1037300010B1BDE8F04784E6207920B10620EFF70C -:103740002EFE2571CDE7607838B13049E078EFF78B -:10375000A9F800B9FFDF657052E70720BFE7FFDF78 -:103760004EE73DB1012D03D0FFDF022DF9D147E730 -:103770000420C3E70320C1E770B5050005D0224C43 -:10378000A078052803D0112070BD102070BD2248FC -:10379000EEF7C4FDE070E078202803D0A56000209B -:1037A000A07070BD032070BD174810B5017809B135 -:1037B000112010BD817805290CD0817801290BD00A -:1037C000817849B1012101708178012904D0807884 -:1037D00010B103E00F2010BDFFF733FE002010BD35 -:1037E00070B5094C0546A07808B1012809D1ADB1E2 -:1037F0002846FFF736FE98B1287898B1A0780128BE -:1038000014D00F2070BD0000B4010020341300203C -:103810003D860100FF1FA107C33502001020F1E71C -:103820000720EFE72846FFF746FE03E00021284681 -:10383000FFF761FE0849E078EFF734F800B9FFDFE1 -:103840000020DFE7054810B5006900F013F8BDE877 -:103850001040EEF7E8BC000034130020B401002053 -:1038600000207047002070470020704700207047FC -:103870000620704708490A6848F202139A43024337 -:103880000A607047044A116848F2021301EA030013 -:103890009943116070470000C806024040EA0103E6 -:1038A00010B59B070FD1042A0DD310C808C9121FE9 -:1038B0009C42F8D020BA19BA884201D9012010BD23 -:1038C0004FF0FF3010BD1AB1D30703D0521C07E0F0 -:1038D000002010BD10F8013B11F8014B1B1B07D154 -:1038E00010F8013B11F8014B1B1B01D1921EF1D1C5 -:1038F000184610BD032A40F2308010F0030C00F08F -:10390000158011F8013BBCF1020F624498BF11F819 -:1039100001CB00F8013B38BF11F8013BA2F10402D2 -:1039200098BF00F801CB38BF00F8013B11F003034A -:1039300000F02580083AC0F0088051F8043B083AAE -:1039400051F804CBA0E80810F5E7121D5CBF51F850 -:10395000043B40F8043BAFF30080D20724BF11F8CA -:10396000013B11F801CB48BF11F8012B24BF00F82F -:10397000013B00F801CB48BF00F8012B704710B5A0 -:10398000203AC0F00B80B1E81850203AA0E8185057 -:10399000B1E81850A0E81850BFF4F5AF5FEA027C18 -:1039A00024BFB1E81850A0E8185044BF18C918C087 -:1039B000BDE810405FEA827C24BF51F8043B40F828 -:1039C000043B08BF7047D20728BF31F8023B48BF0D -:1039D00011F8012B28BF20F8023B48BF00F8012B4B -:1039E000704702F0FF0343EA032242EA024200F07A -:1039F00002B84FF000020429C0F0128010F0030C4E -:103A000000F01B80CCF1040CBCF1020F18BF00F8D1 -:103A1000012BA8BF20F8022BA1EB0C0100F00DB880 -:103A20005FEAC17C24BF00F8012B00F8012B48BFDE -:103A300000F8012B70474FF0000200B51346944682 -:103A40009646203922BFA0E80C50A0E80C50B1F1F6 -:103A50002001BFF4F7AF090728BFA0E80C5048BF0A -:103A60000CC05DF804EB890028BF40F8042B08BFA8 -:103A7000704748BF20F8022B11F0804F18BF00F8A4 -:103A8000012B70477047704770470000FEDF04202D -:103A90007146084219D10699124A914215DC0699DD -:103AA00002394878DF2810D10878FE2807D0FF288F -:103AB0000BD14FF001004FF000020B4B184741F2C1 -:103AC00001000099019A084B1847084B002B02D0BF -:103AD0001B68DB6818474FF0FF3071464FF000025B -:103AE000014B184700500200212D02000400002065 -:103AF000184819497047FFF7FBFFDDF74FFB00BD82 -:103B00004FF4805015490968884203D1144A136064 -:103B10005B68184700BD000020BFFDE74FF48050F0 -:103B20000E490968884210D10E4B18684FF0FF31DA -:103B30008842F1D080F308884FF02021884204DDCC -:103B40000948026802210A43026008488047084881 -:103B50008047FFDF481300204813002000000020AA -:103B6000040000200050020024050040453C0100F4 -:103B7000013B020004207146084202D0EFF30981A4 -:103B800001E0EFF30881886902380078102813DB20 -:103B900020280FDB2B280BDB0A4A12680A4B9A42BB -:103BA00003D1602804DB094A1047022008607047EF -:103BB000074A1047074A1047074A12682C32126812 -:103BC00010470000B0000020BEBAFECAFF1200007D -:103BD00071240200AF2E0200040000200D4B0E499C -:103BE00008470E4B0C4908470D4B0B4908470D4B36 -:103BF000094908470C4B084908470C4B0649084738 -:103C00000B4B054908470B4B034908470A4B024930 -:103C100008470000D1B90000C1BB00004D2C0000D6 -:103C2000E92A0000772A0000EF2C00001B13000097 -:103C300033280000652F0000A91100000021016059 -:103C4000017170470021016081807047002101608F -:103C50004160017270470A6802600B790371704716 -:103C600035940000BD9500001B9700003F970000B1 -:103C700079970000AD970000DF9700000F980000D3 -:103C80006B9800000D95000087120000871200005D -:103C90000D4000005140000071400000F94000005C -:103CA0001D420000DB4200000B430000A94300005E -:103CB000C13C000051460000354700005547000058 -:103CC000BD150000E115000011150000651500008C -:103CD00013160000A7160000235F0000D560000047 -:103CE00093640000A96500002D660000A76600002F -:103CF0001967000035680000036900006D69000065 -:103D00006347000069470000734700008D3C0000D6 -:103D10005B480000613C0000D3490000134A0000EA -:103D2000754A000087120000871200008712000009 -:103D30009D240000232500003F2500005B25000096 -:103D4000E9260000852500008F250000D125000010 -:103D5000F3250000CF260000112700008712000085 -:103D6000DB81000003820000058200003F8200002A -:103D70006D8200005B830000E7830000FB8300008E -:103D80004984000039850000DD86000005880000B8 -:103D9000DD7100001D8800008712000087120000FE -:103DA00021B300008BB40000DFB400004BB500006D -:103DB000FBB50000100110013A0200001A020004D5 -:103DC00005060000778F0000658F0000FFFFFFFFF2 -:103DD0000000FFFF13AB00001F3900003D20000072 -:103DE00027720000018D00000000000000000200AA -:103DF00000000000000200000000000000010000C0 -:103E0000000000007B7F00005B7F0000C97F000096 -:103E10001F240000E1230000012400007FA6000011 -:103E2000ABA60000B3A8000041580000E97F0000E5 -:103E300000000000198000006D2400000000000058 -:103E4000000000000000000095A700000000000036 -:103E5000D1580000BB550000BB550000E93F0000F1 -:103E6000BFA90000AB7400004F1F00007BC301001E -:103E70009DDD010001560000015600000B400000CE -:103E800021AA00002F750000C11F0000A9C3010076 -:103E9000B1DD0100D001D001400038005C002400F9 -:103EA0004001F001010000000001020304120F10A4 -:103EB00011000000130000004D2202001B2302002D -:103EC0006D230200B92302000D240200471D0200E9 -:103ED000691E0200D11E0200F5200200D721020057 -:103EE000390801002518010000000000060000004C -:103EF0000A0000003200000073000000B40000005F -:103F00004FB001005F9D0100C15F0100C1F70100DA -:103F1000B9840100C1F701002D6001005DF90100C5 -:103F2000937701005DF90100815E0100DBF801007B -:103F300005840100DBF80100B16401000BFC010005 -:103F4000998501000BFC010003555555D6BE898E9D -:103F50000000A606A60CA61200004A03EE05920871 -:103F6000000096048608760CFE000000FE000000AB -:103F7000FE555555252627D6BE898E00F401FA0038 -:103F8000960064004B0032001E0014000A00050079 -:103F9000020001002549000000000000AAAED7ABD6 -:103FA000154120100C0802170D0101020909010139 -:103FB000060209181803010109090303050000039B -:103FC00000656C746200000000000000000000004A -:103FD000000000000087000000000000000000005A -:103FE0000000000000BE83605ADB0B376038A5F587 -:103FF000AA9183886C000000812B0200992B02009B -:10400000B12B0200C92B0200F92B0200212C020067 -:104010004B2C02007F2C020061280200C127020005 -:10402000DD280200592902006929020095290200B1 -:10403000E7340100EF34010001350100C32902001B -:10404000DD290200B1290200BB290200E929020092 -:104050001F2A02003F2A02004D2A02005B2A0200AA -:104060006B2A0200832A02009B2A0200B12A020066 -:1040700000000000CFB7000025B800003BB80000EA -:10408000BD330200E5240200AB25020079370200AF -:10409000A9370200E137020041330100193701005E -:1040A000C72A0200ED2A0200112B0200372B020062 -:1040B0001C0500402005004000100200DC4002000A -:1040C00008000020C801000044110000184102004F -:1040D000D001002078110000801100000119055165 -:1040E000C813002036010001007C3720FB349B5FA1 -:1040F00080041B8000100D21370A0020F4090020E5 -:104100007A0A002055500B0020337F0106A4E40CEE -:084110000020290250100000FC -:00000001FF