Disable multi tiered fallback logic +// The fault handling logic as well as the USART auto-detection logic will be disabled. +// The re-configuration of SMU will be handled by querying the running bootloader +// for the peripheral list. Querying the peripheral list is supported from the bootloader +// version 2.0.0. Check for the BOOTLOADER_CAPABILITY_PERIPHERAL_LIST capability to +// see if the running bootloader supports querying the peripheral list. +#define BOOTLOADER_DISABLE_OLD_BOOTLOADER_MITIGATION 0 + +//Disable peripheral access fault handling +// The fault handling triggered by an erroneous access of peripherals will be disabled. +// +// This should be disabled iff all the peripherals that are in use by the bootloader +// have been properly configured by the "Manually override security state of peripherals" option. +#define BOOTLOADER_DISABLE_NVM3_FAULT_HANDLING 0 + +//Manually override the security state of peripherals in use by the bootloader +// Default: 0. +// Manually override the security state of peripherals. Choose the peripherals touched +// by the customized code to have a valid secure access state before interacting with the bootloader +// In practice, this means that the chosen peripherals will be available at the secure address, +// which is accessible by the bootloader. Once the application is entered back the secure access state +// is changed back to the original state. +// +// The USART auto-detection logic that detects which, if any, USART is in use by the bootloader +// will be disabled. Make sure to choose the correct USART used by the bootloader. +#define BOOTLOADER_MANUAL_OVERRIDE_SECURITY_STATE 0 +// + +//EMU +// Update secure access state of EMU before calling into bootloader +#define BOOTLOADER_PPUSATD0_EMU 0 + +//CMU +// Update secure access state of CMU before calling into bootloader +#define BOOTLOADER_PPUSATD0_CMU 0 + +//HFXO0 +// Update secure access state of HFXO0 before calling into bootloader +#define BOOTLOADER_PPUSATD0_HFXO0 0 + +//HFRCO0 +// Update secure access state of HFRCO0 before calling into bootloader +#define BOOTLOADER_PPUSATD0_HFRCO0 0 + +//FSRCO +// Update secure access state of FSRCO before calling into bootloader +#define BOOTLOADER_PPUSATD0_FSRCO 0 + +//DPLL0 +// Update secure access state of DPLL0 before calling into bootloader +#define BOOTLOADER_PPUSATD0_DPLL0 0 + +//LFXO +// Update secure access state of LFXO before calling into bootloader +#define BOOTLOADER_PPUSATD0_LFXO 0 + +//LFRCO +// Update secure access state of LFRCO before calling into bootloader +#define BOOTLOADER_PPUSATD0_LFRCO 0 + +//ULFRCO +// Update secure access state of ULFRCO before calling into bootloader +#define BOOTLOADER_PPUSATD0_ULFRCO 0 + +//MSC +// Update secure access state of MSC before calling into bootloader +#define BOOTLOADER_PPUSATD0_MSC 0 + +//ICACHE0 +// Update secure access state of ICACHE0 before calling into bootloader +#define BOOTLOADER_PPUSATD0_ICACHE0 0 + +//PRS +// Update secure access state of PRS before calling into bootloader +#define BOOTLOADER_PPUSATD0_PRS 0 + +//GPIO +// Update secure access state of GPIO before calling into bootloader +#define BOOTLOADER_PPUSATD0_GPIO 0 + +//LDMA +// Update secure access state of LDMA before calling into bootloader +#define BOOTLOADER_PPUSATD0_LDMA 0 + +//LDMAXBAR +// Update secure access state of LDMAXBAR before calling into bootloader +#define BOOTLOADER_PPUSATD0_LDMAXBAR 0 + +//TIMER0 +// Update secure access state of TIMER0 before calling into bootloader +#define BOOTLOADER_PPUSATD0_TIMER0 0 + +//TIMER1 +// Update secure access state of TIMER1 before calling into bootloader +#define BOOTLOADER_PPUSATD0_TIMER1 0 + +//TIMER2 +// Update secure access state of TIMER2 before calling into bootloader +#define BOOTLOADER_PPUSATD0_TIMER2 0 + +//TIMER3 +// Update secure access state of TIMER3 before calling into bootloader +#define BOOTLOADER_PPUSATD0_TIMER3 0 + +//USART0 +// Update secure access state of USART0 before calling into bootloader +#define BOOTLOADER_PPUSATD0_USART0 0 + +//USART1 +// Update secure access state of USART1 before calling into bootloader +#define BOOTLOADER_PPUSATD0_USART1 0 + +//USART2 +// Update secure access state of USART2 before calling into bootloader +#define BOOTLOADER_PPUSATD0_USART2 0 + +//BURTC +// Update secure access state of BURTC before calling into bootloader +#define BOOTLOADER_PPUSATD0_BURTC 0 + +//I2C1 +// Update secure access state of I2C1 before calling into bootloader +#define BOOTLOADER_PPUSATD0_I2C1 0 + +//CHIPTESTCTRL +// Update secure access state of CHIPTESTCTRL before calling into bootloader +#define BOOTLOADER_PPUSATD0_CHIPTESTCTRL 0 + +//LVGD +// Update secure access state of LVGD before calling into bootloader +#define BOOTLOADER_PPUSATD0_LVGD 0 + +//SYSCFG +// Update secure access state of SYSCFG before calling into bootloader +#define BOOTLOADER_PPUSATD0_SYSCFG 0 + +//BURAM +// Update secure access state of BURAM before calling into bootloader +#define BOOTLOADER_PPUSATD0_BURAM 0 + +//IFADCDEBUG +// Update secure access state of IFADCDEBUG before calling into bootloader +#define BOOTLOADER_PPUSATD0_IFADCDEBUG 0 + +//GPCRC +// Update secure access state of GPCRC before calling into bootloader +#define BOOTLOADER_PPUSATD0_GPCRC 0 + +//RTCC +// Update secure access state of RTCC before calling into bootloader +#define BOOTLOADER_PPUSATD0_RTCC 0 + +//LETIMER0 +// Update secure access state of LETIMER0 before calling into bootloader +#define BOOTLOADER_PPUSATD1_LETIMER0 0 + +//IADC0 +// Update secure access state of IADC0 before calling into bootloader +#define BOOTLOADER_PPUSATD1_IADC0 0 + +//ACMP0 +// Update secure access state of ACMP0 before calling into bootloader +#define BOOTLOADER_PPUSATD1_ACMP0 0 + +//ACMP1 +// Update secure access state of ACMP1 before calling into bootloader +#define BOOTLOADER_PPUSATD1_ACMP1 0 + +//I2C0 +// Update secure access state of I2C0 before calling into bootloader +#define BOOTLOADER_PPUSATD1_I2C0 0 + +//HFRCOEM23 +// Update secure access state of HFRCOEM23 before calling into bootloader +#define BOOTLOADER_PPUSATD1_HFRCOEM23 0 + +//WDOG0 +// Update secure access state of WDOG0 before calling into bootloader +#define BOOTLOADER_PPUSATD1_WDOG0 0 + +//WDOG1 +// Update secure access state of WDOG1 before calling into bootloader +#define BOOTLOADER_PPUSATD1_WDOG1 0 + +//AMUXCP0 +// Update secure access state of AMUXCP0 before calling into bootloader +#define BOOTLOADER_PPUSATD1_AMUXCP0 0 + +//RADIOAES +// Update secure access state of RADIOAES before calling into bootloader +#define BOOTLOADER_PPUSATD1_RADIOAES 0 + +//BUFC +// Update secure access state of BUFC before calling into bootloader +#define BOOTLOADER_PPUSATD1_BUFC 0 + +//SMU +// Update secure access state of SMU before calling into bootloader +#define BOOTLOADER_PPUSATD1_SMU 0 + +//AHBRADIO +// Update secure access state of AHBRADIO before calling into bootloader +#define BOOTLOADER_PPUSATD1_AHBRADIO 0 + +//SEMAILBOX +// Update secure access state of SEMAILBOX before calling into bootloader +#define BOOTLOADER_PPUSATD1_SEMAILBOX 0 +//
Enables measuring of interrupt disable time for debugging purposes. +// Default: 0 +#define SL_EMLIB_CORE_ENABLE_INTERRUPT_DISABLED_TIMING 0 + +//
Enable Virtual COM UART +// Default: 0 +#define SL_BOARD_ENABLE_VCOM 1 + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +//SL_BOARD_ENABLE_VCOM +// $[GPIO_SL_BOARD_ENABLE_VCOM] +#ifndef SL_BOARD_ENABLE_VCOM_PORT +#define SL_BOARD_ENABLE_VCOM_PORT gpioPortD +#endif +#ifndef SL_BOARD_ENABLE_VCOM_PIN +#define SL_BOARD_ENABLE_VCOM_PIN 4 +#endif +// [GPIO_SL_BOARD_ENABLE_VCOM]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_BOARD_CONTROL_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_bt_periodic_advertiser_config.h b/src/bt_rcp/config/sl_bt_periodic_advertiser_config.h new file mode 100644 index 00000000..73d7df54 --- /dev/null +++ b/src/bt_rcp/config/sl_bt_periodic_advertiser_config.h @@ -0,0 +1,47 @@ +/***************************************************************************//** + * @file + * @brief Bluetooth Periodic Advertiser configuration + ******************************************************************************* + * # License + * Copyright 2023 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from the + * use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_BT_PERIODIC_ADVERTISER_CONFIG_H +#define SL_BT_PERIODIC_ADVERTISER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Bluetooth Periodic Advertiser Configuration + +// End Bluetooth Periodic Advertiser Configuration + +// <<< end of configuration section >>> + +#endif // SL_BT_PERIODIC_ADVERTISER_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_btctrl_config.h b/src/bt_rcp/config/sl_btctrl_config.h new file mode 100644 index 00000000..55254f75 --- /dev/null +++ b/src/bt_rcp/config/sl_btctrl_config.h @@ -0,0 +1,37 @@ +#ifndef SL_BTCTRL_CONFIG_H +#define SL_BTCTRL_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +//Max number of advertising sets that support periodic advertising <0-255> +// Default: 1 +// Define the number of periodic advertising sets that the application needs to use concurrently. This number must not exceed the total number of advertising sets configured by SL_BT_CONFIG_USER_ADVERTISERS in the component "bluetooth_feature_advertiser". +#define SL_BT_CONFIG_MAX_PERIODIC_ADVERTISERS (1) + +// Bluetooth Controller Configuration + +// Bluetooth Controller Configuration + +// <<< end of configuration section >>> + +#endif // SL_BTCTRL_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_debug_swo_config.h b/src/bt_rcp/config/sl_debug_swo_config.h new file mode 100644 index 00000000..f22934ac --- /dev/null +++ b/src/bt_rcp/config/sl_debug_swo_config.h @@ -0,0 +1,106 @@ +/***************************************************************************//** + * @file + * @brief SWO configuration + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_DEBUG_SWO_CONFIG_H +#define SL_DEBUG_SWO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +//Bluetooth Controller Buffer Memory +// Default: SL_BT_CONTROLLER_BUFFER_MEMORY +// Define the Amount of memory to allocate for tx/rx buffers in Bluetooth Controller +#define SL_BT_CONTROLLER_BUFFER_MEMORY 7168 + +// Bluetooth Controller ACL data packets that can be stored +// Default: SL_BT_CONTROLLER_LE_BUFFER_SIZE_MAX +// Define the total number of the maximum sized ACL data packets that can be received from the host +#define SL_BT_CONTROLLER_LE_BUFFER_SIZE_MAX (3) + +// Total transmitted packets threshold for all connections to send the Number Of Completed Packets HCI event to the host <1-255> +// Default: 4 +// Define the number of transmitted air interface ACL packets to trigger the Number Of Completed Packets HCI event. +#define SL_BT_CONTROLLER_COMPLETED_PACKETS_THRESHOLD (4) + +// Number of connection events to send the Number Of Completed Packets HCI event to the host <1-255> +// Default: 3 +// Define the maximum number of connection events since the previous Number Of Completed Packets HCI event to trigger reporting of any unreported completed ACL packets. +#define SL_BT_CONTROLLER_COMPLETED_PACKETS_EVENTS_TIMEOUT (3) + +// Maximum number of queued advertisement reports <1-255> +// Default: 10 +// Define the maximum number of queued advertisement reports. Additional advertisement reports are dropped. +#define SL_BT_CONFIG_MAX_QUEUED_ADV_REPORTS (10) + +// SWO Configuration + +// + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +//SWO Frequency +// Must be 875 kHz for communication with Silicon Labs debuggers +// Default: 875000 +#define SL_DEBUG_SWO_FREQ 875000 + +// Enable interrupt event trace +// Default: 0 +#define SL_DEBUG_SWO_SAMPLE_IRQ 0 + +//Enable Program Counter samples +// Default: 0 +#define SL_DEBUG_SWO_SAMPLE_PC 0 + +//SWO debug sample intervals +// <64=> 64 +// <128=> 128 +// <192=> 192 +// <256=> 256 +// <320=> 320 +// <384=> 384 +// <448=> 448 +// <512=> 512 +// <576=> 576 +// <640=> 640 +// <704=> 704 +// <768=> 768 +// <832=> 832 +// <896=> 896 +// <960=> 960 +// <1024=> 1024 +// <2048=> 2048 +// <3072=> 3072 +// <4096=> 4096 +// <5102=> 5102 +// <6144=> 6144 +// <7168=> 7168 +// <8192=> 8192 +// <9216=> 9216 +// <10240=> 10240 +// <11264=> 11264 +// <12288=> 12288 +// <13312=> 13312 +// <14336=> 14336 +// <15360=> 15360 +// Must be 64, 128, 192, [ n * 64 ], 1024, 2048, 3072, [ n * 1024 ] , 15360 +// Default: 15360 +#define SL_DEBUG_SWO_SAMPLE_INTERVAL 15360 +// SL_DEBUG +// $[GPIO_SL_DEBUG] +#ifndef SL_DEBUG_PERIPHERAL +#define SL_DEBUG_PERIPHERAL GPIO +#endif + +// GPIO SWV on PA03 +#ifndef SL_DEBUG_SWV_PORT +#define SL_DEBUG_SWV_PORT gpioPortA +#endif +#ifndef SL_DEBUG_SWV_PIN +#define SL_DEBUG_SWV_PIN 3 +#endif +// [GPIO_SL_DEBUG]$ +// <<< sl:end pin_tool >>> + +#endif // SL_DEBUG_SWO_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_device_init_emu_config.h b/src/bt_rcp/config/sl_device_init_emu_config.h new file mode 100644 index 00000000..f23d055b --- /dev/null +++ b/src/bt_rcp/config/sl_device_init_emu_config.h @@ -0,0 +1,53 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_EMU Config + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_DEVICE_INIT_EMU_CONFIG_H +#define SL_DEVICE_INIT_EMU_CONFIG_H + +#include "em_emu.h" + +// <<< Use Configuration Wizard in Context Menu >>> + +// Allow debugger to remain connected in EM2 +// Force PD0B to stay on on EM2 entry. This allows the debugger to remain connected in EM2 and EM3. +// Enabling debug connectivity results in an increased power consumption in EM2/EM3. +// Default: 1 +#define SL_DEVICE_INIT_EMU_EM2_DEBUG_ENABLE 1 + +//EM4 pin retention mode +// No Retention: Pads enter reset state when entering EM4. +// Retention through EM4: Pads enter reset state when exiting EM4. +// Retention through EM4 and wakeup. +// Default: emuPinRetentionDisable +#define SL_DEVICE_INIT_EMU_EM4_PIN_RETENTION_MODE emuPinRetentionDisable + +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_EMU_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_device_init_hfrco_config.h b/src/bt_rcp/config/sl_device_init_hfrco_config.h new file mode 100644 index 00000000..532885ae --- /dev/null +++ b/src/bt_rcp/config/sl_device_init_hfrco_config.h @@ -0,0 +1,57 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_HFRCO Config + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_DEVICE_INIT_HFRCO_CONFIG_H +#define SL_DEVICE_INIT_HFRCO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Frequency Band +// RC Oscillator Frequency Band +// 1 MHz +// 2 MHz +// 4 MHz +// 7 MHz +// 13 MHz +// 16 MHz +// 19 MHz +// 26 MHz +// 32 MHz +// 38 MHz +// 48 MHz +// 56 MHz +// 64 MHz +// 80 MHz +// Default: cmuHFRCODPLLFreq_80M0Hz +#define SL_DEVICE_INIT_HFRCO_BAND cmuHFRCODPLLFreq_80M0Hz + +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_HFRCO_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_device_init_hfxo_config.h b/src/bt_rcp/config/sl_device_init_hfxo_config.h new file mode 100644 index 00000000..917e60a6 --- /dev/null +++ b/src/bt_rcp/config/sl_device_init_hfxo_config.h @@ -0,0 +1,57 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_HFXO Config + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_DEVICE_INIT_HFXO_CONFIG_H +#define SL_DEVICE_INIT_HFXO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Mode +// +// Crystal oscillator +// External sine wave +// Default: cmuHfxoOscMode_Crystal +#define SL_DEVICE_INIT_HFXO_MODE cmuHfxoOscMode_Crystal + +// Frequency <38000000-40000000> +// Default: 38400000 +#define SL_DEVICE_INIT_HFXO_FREQ 38400000 + +// HFXO precision in PPM <0-65535> +// Default: 50 +#define SL_DEVICE_INIT_HFXO_PRECISION 50 + +// CTUNE <0-255> +// Default: 140 +#define SL_DEVICE_INIT_HFXO_CTUNE 133 + +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_HFXO_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_device_init_lfxo_config.h b/src/bt_rcp/config/sl_device_init_lfxo_config.h new file mode 100644 index 00000000..29371b6c --- /dev/null +++ b/src/bt_rcp/config/sl_device_init_lfxo_config.h @@ -0,0 +1,88 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_LFXO Config + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_DEVICE_INIT_LFXO_CONFIG_H +#define SL_DEVICE_INIT_LFXO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Mode +// +// Crystal oscillator +// AC-coupled buffer +// External digital clock +// Default: cmuLfxoOscMode_Crystal +#define SL_DEVICE_INIT_LFXO_MODE cmuLfxoOscMode_Crystal + +// CTUNE <0-127> +// Default: 63 +#define SL_DEVICE_INIT_LFXO_CTUNE 79 + +// LFXO precision in PPM <0-65535> +// Default: 50 +#define SL_DEVICE_INIT_LFXO_PRECISION 50 + +// Startup Timeout Delay +// +// 2 cycles +// 256 cycles +// 1K cycles +// 2K cycles +// 4K cycles +// 8K cycles +// 16K cycles +// 32K cycles +// Default: cmuLfxoStartupDelay_4KCycles +#define SL_DEVICE_INIT_LFXO_TIMEOUT cmuLfxoStartupDelay_4KCycles +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_DEVICE_INIT_LFXO +// $[LFXO_SL_DEVICE_INIT_LFXO] +#define SL_DEVICE_INIT_LFXO_PERIPHERAL LFXO + +// LFXO LFXTAL_O on PD00 +#define SL_DEVICE_INIT_LFXO_LFXTAL_O_PORT gpioPortD +#define SL_DEVICE_INIT_LFXO_LFXTAL_O_PIN 0 + +// LFXO LFXTAL_I on PD01 +#define SL_DEVICE_INIT_LFXO_LFXTAL_I_PORT gpioPortD +#define SL_DEVICE_INIT_LFXO_LFXTAL_I_PIN 1 + + +// [LFXO_SL_DEVICE_INIT_LFXO]$ + +// $[LFXO_EXTERNAL_DIGITAL_CLOCK] +#define SL_DEVICE_INIT_LFXO_LF_EXTCLK_PORT gpioPortD +#define SL_DEVICE_INIT_LFXO_LF_EXTCLK_PIN 1 +// [LFXO_EXTERNAL_DIGITAL_CLOCK]$ +// <<< sl:end pin_tool >>> + +#endif // SL_DEVICE_INIT_LFXO_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_mbedtls_config.h b/src/bt_rcp/config/sl_mbedtls_config.h new file mode 100644 index 00000000..5ebefc9a --- /dev/null +++ b/src/bt_rcp/config/sl_mbedtls_config.h @@ -0,0 +1,118 @@ +#ifndef SL_MBEDTLS_CONFIG_H +#define SL_MBEDTLS_CONFIG_H + +// ----------------------------------------------------------------------------- +// User exposed config options + +// <<< Use Configuration Wizard in Context Menu >>> + +// TLS/DTLS configuration + +// + +//Complete list of ciphersuites to use, in order of preference. +// Default: MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 +// Complete list of ciphersuites to use, in order of preference. +// The value of this configuration should be updated for the application needs. +#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 + +// Maximum TLS/DTLS fragment length in bytes (input). +// Default: 768 +// The size configured here determines the size of the internal I/O +// buffer used in mbedTLS when receiving data. +#define SL_MBEDTLS_SSL_IN_CONTENT_LEN 768 + +// Maximum TLS/DTLS fragment length in bytes (output). +// Default: 768 +// The size configured here determines the size of the internal I/O +// buffer used in mbedTLS when sending data. +#define SL_MBEDTLS_SSL_OUT_CONTENT_LEN 768 + +// Enable support for RFC 6066 max_fragment_length extension in SSL. +// Default: 1 +// Enable support for RFC 6066 max_fragment_length extension in SSL. +#define SL_MBEDTLS_SSL_MAX_FRAGMENT_LENGTH 1 + +//Enable support for exporting key block and master secret. +// Default: 1 +// Enable support for exporting key block and master secret. +// This is required for certain users of TLS, e.g. EAP-TLS. +#define SL_MBEDTLS_SSL_EXPORT_KEYS 1 + +//Enable the PSK based ciphersuite modes in SSL / TLS. +// Default: 0 +// Enable the PSK based ciphersuite modes in SSL / TLS. +#define SL_MBEDTLS_KEY_EXCHANGE_PSK_ENABLED 0 + +//Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. +// Default: 0 +// Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. +#define SL_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED 0 + +//Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. +// Default: 0 +// Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. +#define SL_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED 0 + +//Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. +// Default: 0 +// Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. +#define SL_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED 0 + +//Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. +// Default: 0 +// Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. +#define SL_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED 0 + +//Enable parsing of the compressed curves. +// Default: 0 +// Enable parsing of the compressed curves. +#define SL_MBEDTLS_ECP_ENABLE_COMPRESSED_CURVE_PARSING 0 + +//RSA configuration + +// + +//Disable use of the Chinese Remainder Theorem for RSA. +// Default: 0 +// Disable use of the Chinese Remainder Theorem for RSA private key +// computations. +#define SL_MBEDTLS_RSA_NO_CRT 0 + +//Miscellaneous configuration + +// + +// <<< end of configuration section >>> + +// ----------------------------------------------------------------------------- +// Sub-files + +#if defined(SLI_MBEDTLS_CONFIG_AUTOGEN_OVERRIDE_FILE) + #include SLI_MBEDTLS_CONFIG_AUTOGEN_OVERRIDE_FILE +#else + #include "sli_mbedtls_config_autogen.h" +#endif + +#include "sli_mbedtls_omnipresent.h" + +#if SL_MBEDTLS_DRIVERS_ENABLED + #include "sli_mbedtls_acceleration.h" +#endif + +#include "sl_mbedtls_device_config.h" + +// Include transformation logic to apply CMSIS-config configuration options to +// the correct Mbed TLS / PSA Crypto options. +#include "sli_mbedtls_config_transform_autogen.h" + +// Included for backward compatibility reasons. +#include "mbedtls/build_info.h" + +#endif // SL_MBEDTLS_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_mbedtls_device_config.h b/src/bt_rcp/config/sl_mbedtls_device_config.h new file mode 100644 index 00000000..e286a0d9 --- /dev/null +++ b/src/bt_rcp/config/sl_mbedtls_device_config.h @@ -0,0 +1,72 @@ +#ifndef SL_MBEDTLS_DEVICE_CONFIG_H +#define SL_MBEDTLS_DEVICE_CONFIG_H + +// ----------------------------------------------------------------------------- +// User exposed config options + +// <<< Use Configuration Wizard in Context Menu >>> + +//Enable Silicon Labs' Mbed TLS- and PSA Crypto drivers. +// Default: 1 +// Enable drivers for hardware acceleration (Mbed TLS and PSA Crypto) and +// secure key handling (PSA Crypto). +#define SL_MBEDTLS_DRIVERS_ENABLED 1 + +//Secure Engine (SE) version configuration + +// + +// <<< end of configuration section >>> + +// ----------------------------------------------------------------------------- +// Additional SE version related logic (DO NOT MODIFY) + +// SL_SE_ASSUME_FW_AT_LEAST_1_2_10 is no longer in use, however, it is kept here +// for backwards compatibility. */ +#if defined(SL_SE_ASSUME_FW_AT_LEAST_1_2_10) + #undef SL_SE_ASSUME_FW_AT_LEAST_1_2_2 + #define SL_SE_ASSUME_FW_AT_LEAST_1_2_2 1 + #undef SL_SE_ASSUME_FW_UNAFFECTED_BY_ED25519_ERRATA + #define SL_SE_ASSUME_FW_UNAFFECTED_BY_ED25519_ERRATA 1 +#endif + +// SLI_SE_SUPPORT_FW_PRIOR_TO_1_2_2 is no longer in use, however, it is kept +// here for backwards compatibility. */ +#if defined(SLI_SE_SUPPORT_FW_PRIOR_TO_1_2_2) + #undef SL_SE_SUPPORT_FW_PRIOR_TO_1_2_2 + #define SL_SE_SUPPORT_FW_PRIOR_TO_1_2_2 1 +#endif + +// SLI_SE_ASSUME_FW_AT_LEAST_1_2_2 is no longer in use, however, it is kept +// here for backwards compatibility. */ +#if defined(SLI_SE_ASSUME_FW_AT_LEAST_1_2_2) + #undef SL_SE_ASSUME_FW_AT_LEAST_1_2_2 + #define SL_SE_ASSUME_FW_AT_LEAST_1_2_2 1 +#endif + +#endif // SL_MBEDTLS_DEVICE_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_memory_config.h b/src/bt_rcp/config/sl_memory_config.h new file mode 100644 index 00000000..75b482ee --- /dev/null +++ b/src/bt_rcp/config/sl_memory_config.h @@ -0,0 +1,28 @@ +#ifndef SL_MEMORY_CONFIG_H +#define SL_MEMORY_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> +//Support SE firmware versions older than 1.2.2 <0-1> +// Enable software fallback for ECDH and ECC public key validation on xG21 +// devices running SE firmware versions lower than 1.2.2. +// +// Due to other stability concerns, it is strongly recommended to upgrade +// these devices to the latest firmware revision instead of turning on +// software fallback support. +// +// Not having fallback support will make ECDH operations, as well as PSA +// Crypto public key import, return an error code on affected devices. +// +// Default: 0 +#define SL_SE_SUPPORT_FW_PRIOR_TO_1_2_2 0 + +// Assume an SE firmware version newer than 1.2.2 <0-1> +// For enhanced performance: if it is guaranteed that all devices on which +// this library will run are updated to at least SE FW 1.2.2, then turning +// on this option will remove certain fallback checks, thereby reducing the +// amount of processing required for ECDH and public key verification +// operations. +// Default: 0 +#define SL_SE_ASSUME_FW_AT_LEAST_1_2_2 0 + +// Assume an SE firmware version that is unaffected by Ed25519 errata <0-1> +// For minimal code size and performance savings: if it is guaranteed that +// none of the devices running this library has SE FWs in the range +// [1.2.2, 1.2.8], then enabling this option will disable runtime version +// checks. +// Default: 0 +#define SL_SE_ASSUME_FW_UNAFFECTED_BY_ED25519_ERRATA 0 + +// Memory configuration + +// +// <<< end of configuration section >>> + +#endif diff --git a/src/bt_rcp/config/sl_rail_util_pa_config.h b/src/bt_rcp/config/sl_rail_util_pa_config.h new file mode 100644 index 00000000..84b836c2 --- /dev/null +++ b/src/bt_rcp/config/sl_rail_util_pa_config.h @@ -0,0 +1,81 @@ +/***************************************************************************//** + * @file + * @brief Power Amplifier configuration file. + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_RAIL_UTIL_PA_CONFIG_H +#define SL_RAIL_UTIL_PA_CONFIG_H + +#include "rail_types.h" + +// <<< Use Configuration Wizard in Context Menu >>> + +//Stack size for the application. +// Default: 4096 +// The stack size configured here will be used by the stack that the +// application uses when coming out of a reset. +#ifndef SL_STACK_SIZE + #define SL_STACK_SIZE 4096 +#endif + +// Minimum heap size for the application. +// Default: 2048 +// Note that this value will configure the c heap which is normally used by +// malloc() and free() from the c library. The value defines a minimum heap +// size that is guaranteed to be available. The available heap may be larger +// to make use of any memory that would otherwise remain unused. +#ifndef SL_HEAP_SIZE + #define SL_HEAP_SIZE 11000 +#endif + +// PA Configuration +// + +//Initial PA Power (deci-dBm, 100 = 10.0 dBm) +// Default: 100 +#define SL_RAIL_UTIL_PA_POWER_DECI_DBM 100 +// PA Ramp Time (microseconds) +// <0-65535:1> +// Default: 10 +#define SL_RAIL_UTIL_PA_RAMP_TIME_US 10 +// Milli-volts on PA supply pin (PA_VDD) +// <0-65535:1> +// Default: 3300 +#define SL_RAIL_UTIL_PA_VOLTAGE_MV 1800 +// 2.4 GHz PA Selection +// Highest Possible +// High Power (chip-specific) +// Medium Power (chip-specific) +// Low Power +// Disable +// Default: RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +#define SL_RAIL_UTIL_PA_SELECTION_2P4GHZ RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +// Sub-1 GHz PA Selection +// Disable +// Default: RAIL_TX_POWER_MODE_NONE +#define SL_RAIL_UTIL_PA_SELECTION_SUBGHZ RAIL_TX_POWER_MODE_NONE +// PA Curve Configuration +// + +//Header file containing custom PA curves +// Default: "pa_curves_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_HEADER "pa_curves_efr32.h" +// Header file containing PA curve types +// Default: "pa_curve_types_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_TYPES "pa_curve_types_efr32.h" +// PA Calibration Configuration +// + +// <<< end of configuration section >>> + +#endif // SL_RAIL_UTIL_PA_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_rail_util_rf_path_config.h b/src/bt_rcp/config/sl_rail_util_rf_path_config.h new file mode 100644 index 00000000..464e91c3 --- /dev/null +++ b/src/bt_rcp/config/sl_rail_util_rf_path_config.h @@ -0,0 +1,48 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_RAIL_UTIL_RF_PATH_CONFIG_H +#define SL_RAIL_UTIL_RF_PATH_CONFIG_H + +#include "rail_types.h" + +// <<< Use Configuration Wizard in Context Menu >>> + +//Apply PA Calibration Factory Offset +// Default: 1 +#define SL_RAIL_UTIL_PA_CALIBRATION_ENABLE 1 +//Chip-internal RF Path Configuration +// + +// <<< end of configuration section >>> + +#endif // SL_RAIL_UTIL_RF_PATH_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/sl_sleeptimer_config.h b/src/bt_rcp/config/sl_sleeptimer_config.h new file mode 100644 index 00000000..bba646d6 --- /dev/null +++ b/src/bt_rcp/config/sl_sleeptimer_config.h @@ -0,0 +1,82 @@ +/***************************************************************************//** + * @file + * @brief Sleep Timer configuration file. + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_SLEEPTIMER_CONFIG_H +#define SL_SLEEPTIMER_CONFIG_H + +#define SL_SLEEPTIMER_PERIPHERAL_DEFAULT 0 +#define SL_SLEEPTIMER_PERIPHERAL_RTCC 1 +#define SL_SLEEPTIMER_PERIPHERAL_PRORTC 2 +#define SL_SLEEPTIMER_PERIPHERAL_RTC 3 +#define SL_SLEEPTIMER_PERIPHERAL_SYSRTC 4 +#define SL_SLEEPTIMER_PERIPHERAL_BURTC 5 +#define SL_SLEEPTIMER_PERIPHERAL_WTIMER 6 +#define SL_SLEEPTIMER_PERIPHERAL_TIMER 7 + +//RF Path Mode +// Path 0 +// Path 1 +// Default: RAIL_ANTENNA_1 +#define SL_RAIL_UTIL_RF_PATH_INT_RF_PATH_MODE RAIL_ANTENNA_1 +// Timer Peripheral Used by Sleeptimer +// Default (auto select) +// RTCC +// Radio internal RTC (PRORTC) +// RTC +// SYSRTC +// Back-Up RTC (BURTC) +// WTIMER +// TIMER +// Selection of the Timer Peripheral Used by the Sleeptimer +#define SL_SLEEPTIMER_PERIPHERAL SL_SLEEPTIMER_PERIPHERAL_DEFAULT + +// TIMER/WTIMER Instance Used by Sleeptimer (not applicable for other peripherals) +// Make sure TIMER instance size is 32bits. Check datasheet for 32bits TIMERs. +// Default: 0 +#define SL_SLEEPTIMER_TIMER_INSTANCE 0 + +// Enable wallclock functionality +// Enable or disable wallclock functionalities (get_time, get_date, etc). +// Default: 0 +#define SL_SLEEPTIMER_WALLCLOCK_CONFIG 0 + +//Timer frequency divider (not applicable for WTIMER/TIMER) +// WTIMER/TIMER peripherals are always prescaled to 1024. +// Default: 1 +#define SL_SLEEPTIMER_FREQ_DIVIDER 1 + +// If Radio internal RTC (PRORTC) HAL is used, determines if it owns the IRQ handler. Enable, if no wireless stack is used. +// Default: 0 +#define SL_SLEEPTIMER_PRORTC_HAL_OWNS_IRQ_HANDLER 0 + +//Enable DEBUGRUN functionality on hardware RTC. +// Default: 0 +#define SL_SLEEPTIMER_DEBUGRUN 0 + +#endif /* SLEEPTIMER_CONFIG_H */ + +// <<< end of configuration section >>> \ No newline at end of file diff --git a/src/bt_rcp/config/sl_uartdrv_usart_vcom_config.h b/src/bt_rcp/config/sl_uartdrv_usart_vcom_config.h new file mode 100644 index 00000000..bbc144e8 --- /dev/null +++ b/src/bt_rcp/config/sl_uartdrv_usart_vcom_config.h @@ -0,0 +1,133 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_USART Config + ******************************************************************************* + * # License + * Copyright 2019 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ + +#ifndef SL_UARTDRV_USART_VCOM_CONFIG_H +#define SL_UARTDRV_USART_VCOM_CONFIG_H + +#include "em_usart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +//UART settings +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +//Baud rate +// Default: 115200 +#define SL_UARTDRV_USART_VCOM_BAUDRATE 115200 + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: usartNoParity +#define SL_UARTDRV_USART_VCOM_PARITY usartNoParity + +// Number of stop bits to use. +// 0.5 stop bits +// 1 stop bits +// 1.5 stop bits +// 2 stop bits +// Default: usartStopbits1 +#define SL_UARTDRV_USART_VCOM_STOP_BITS usartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHwUart +#define SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE uartdrvFlowControlNone + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Default: usartOVS16 +#define SL_UARTDRV_USART_VCOM_OVERSAMPLING usartOVS4 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// True +// False +#define SL_UARTDRV_USART_VCOM_MVDIS false + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_TX_BUFFER_SIZE 6 + +// SL_UARTDRV_USART_VCOM +// $[USART_SL_UARTDRV_USART_VCOM] +#ifndef SL_UARTDRV_USART_VCOM_PERIPHERAL +#define SL_UARTDRV_USART_VCOM_PERIPHERAL USART0 +#endif +#ifndef SL_UARTDRV_USART_VCOM_PERIPHERAL_NO +#define SL_UARTDRV_USART_VCOM_PERIPHERAL_NO 0 +#endif + +// USART0 TX on PA05 +#ifndef SL_UARTDRV_USART_VCOM_TX_PORT +#define SL_UARTDRV_USART_VCOM_TX_PORT gpioPortA +#endif +#ifndef SL_UARTDRV_USART_VCOM_TX_PIN +#define SL_UARTDRV_USART_VCOM_TX_PIN 5 +#endif + +// USART0 RX on PA06 +#ifndef SL_UARTDRV_USART_VCOM_RX_PORT +#define SL_UARTDRV_USART_VCOM_RX_PORT gpioPortA +#endif +#ifndef SL_UARTDRV_USART_VCOM_RX_PIN +#define SL_UARTDRV_USART_VCOM_RX_PIN 6 +#endif + +// USART0 CTS on PC03 +#ifndef SL_UARTDRV_USART_VCOM_CTS_PORT +#define SL_UARTDRV_USART_VCOM_CTS_PORT gpioPortC +#endif +#ifndef SL_UARTDRV_USART_VCOM_CTS_PIN +#define SL_UARTDRV_USART_VCOM_CTS_PIN 3 +#endif + +// USART0 RTS on PC02 +#ifndef SL_UARTDRV_USART_VCOM_RTS_PORT +#define SL_UARTDRV_USART_VCOM_RTS_PORT gpioPortC +#endif +#ifndef SL_UARTDRV_USART_VCOM_RTS_PIN +#define SL_UARTDRV_USART_VCOM_RTS_PIN 2 +#endif +// [USART_SL_UARTDRV_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif // SL_UARTDRV_USART_VCOM_CONFIG_H \ No newline at end of file diff --git a/src/bt_rcp/config/uartdrv_config.h b/src/bt_rcp/config/uartdrv_config.h new file mode 100644 index 00000000..e82ed6a4 --- /dev/null +++ b/src/bt_rcp/config/uartdrv_config.h @@ -0,0 +1,114 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV configuration file. + ******************************************************************************* + * # License + * Copyright 2018 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************/ +#ifndef __SILICON_LABS_UARTDRV_CONFIG_H__ +#define __SILICON_LABS_UARTDRV_CONFIG_H__ + +/***************************************************************************//** + * @addtogroup uartdrv + * @{ + ******************************************************************************/ +/// Size of the receive operation queue. +/// @details +/// The maximum number of receive operations that can be queued up for one +/// driver instance before @ref UARTDRV_Receive() returns +/// @ref ECODE_EMDRV_UARTDRV_QUEUE_FULL. +/// @note +/// This macro is not used by the UARTDRV itself, but is intended to be used +/// with the @ref DEFINE_BUF_QUEUE macro by the user of the driver to allocate +/// instances of the @ref UARTDRV_Buffer_FifoQueue_t struct. +#if !defined(EMDRV_UARTDRV_MAX_CONCURRENT_RX_BUFS) +#define EMDRV_UARTDRV_MAX_CONCURRENT_RX_BUFS 6 +#endif + +/// Size of the transmit operation queue. +/// @details +/// The maximum number of transmit operations that can be queued up for one +/// driver instance before @ref UARTDRV_Transmit() returns +/// @ref ECODE_EMDRV_UARTDRV_QUEUE_FULL. +/// @note +/// This macro is not used by the UARTDRV itself, but is intended to be used +/// with the @ref DEFINE_BUF_QUEUE macro by the user of the driver to allocate +/// instances of the @ref UARTDRV_Buffer_FifoQueue_t struct. +#if !defined(EMDRV_UARTDRV_MAX_CONCURRENT_TX_BUFS) +#define EMDRV_UARTDRV_MAX_CONCURRENT_TX_BUFS 6 +#endif + +// <<< Use Configuration Wizard in Context Menu >>> +// UARTDRV Settings + +/// Set to 1 to include flow control support +#if !defined(EMDRV_UARTDRV_FLOW_CONTROL_ENABLE) +// + +// <<< end of configuration section >>> + +/** @} (end addtogroup uartdrv) */ + +#endif /* __SILICON_LABS_UARTDRV_CONFIG_H__ */ \ No newline at end of file diff --git a/src/bt_rcp/image/readme_img0.png b/src/bt_rcp/image/readme_img0.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b0c020fe76b72ee7cfdb5f508a576455cd3cc2 GIT binary patch literal 44396 zcmV)UK(N1wP)Flow control support +// <1=> Enable +// <0=> Disable +// Default: 1 +#define EMDRV_UARTDRV_FLOW_CONTROL_ENABLE 1 +#endif + +/// Maximum number of driver instances. +#if !defined(EMDRV_UARTDRV_MAX_DRIVER_INSTANCES) +// Maximum number of driver instances +// This maximum only applies when UARTDRV_FLOW_CONTROL_ENABLE = 1 +// Default: 4 +#define EMDRV_UARTDRV_MAX_DRIVER_INSTANCES 4 +#endif + +/// UART software flow control code: request peer to start TX +#if !defined(UARTDRV_FC_SW_XON) +// UART software flow control code: request peer to start TX +// Default: 0x11 +#define UARTDRV_FC_SW_XON 0x11 +#endif + +/// UART software flow control code: request peer to stop TX +#if !defined(UARTDRV_FC_SW_XOFF) +// UART software flow control code: request peer to stop TX +// Default: 0x13 +#define UARTDRV_FC_SW_XOFF 0x13 +#endif + +/// UART enable reception when sleeping. +#if !defined(UARTDRV_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION) +// Enable reception when sleeping +// Enable reception when sleeping will use the power manager and add EM1 +// requirement during receive operations that use DMA. +// <1=> Enable +// <0=> Disable +// Default: 1 +#define UARTDRV_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION 1 +#endif + +// ;00004XF*Lt006O$ zeEU(80000WV@Og>004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000Uv zX+uL$Nkc;*aB^>EX>4Tx07%E3mUmQC*A|D*y?1({%`nm#dXp|Nfb=dP9RyJrW(F9_ z0K*JTY>22pL=h1IMUbF?0i&TvtcYSED5zi$NDxqBFp8+CWJcCXe0h2A<>mLsz2Dkr z?{oLrd!Mx~03=TzE-wX^0w9?u;0Jm*(^rK@(6Rjh26%u0rT{Qm>8ZX!?!iDLFE @L0LWj&=4?(nOT_siPRbOditRHZrp6?S8Agej zFG^6va$=5K |`EW#NwP&*~x4%_lS6VhL9s-#7D#h8C*`Lh;NHnGf9}t z74chfY%+(L4giWIwhK6{coCb3n8XhbbP@4#0C1$ZFF5847I3lz;zPNlq-OKEaq$AW zE=!MYYHiJ+dvY?9I0Av8Ka-Wn (gPeepdb@piwLhwjRWWeSr7baCBSDM=|p zK0Q5^$>Pur|2)M1IPkCYSQ^NQ`z*p zYmq4Rp8z$=2uR(a0_5jDfT9oq5_wSE_22vEgAWDbn-``!u{igi1^xT3aEbVl&W-yV z=Mor9X9@Wki)-R*3DAH5Bmou30~MeFbb%o-16IHmI084Y0{DSo5DwM?7KjJQfDbZ3 zF4znTKoQsl_JT@K1L{E|XaOfc2RIEbfXm=IxC!on2Vew@gXdrdyaDqN1YsdEM1kZX zRY(gmfXpBUWDmJPK2RVO4n;$85DyYUxzHA<2r7jtp<1XB`W89`U4X7a1JFHa6q n9`(3jA6(BtSg7z~Dn z(ZN_@JTc*z1k5^2G3EfK6>}alfEmNgVzF3xtO3>z>xX4x1=s@Ye(W*qIqV>I9QzhW z#Hr%UaPGJW91oX=E5|kA&f*4f6S#T26kZE&gZIO;@!9wid_BGke*-^`pC?EYbO?5Y zU_t_6GogaeLbybDNO(mg64i;;!~i0fxQSRnJWjkq93{RZ$&mC(E~H43khGI@gmj*C zkMxR6CTo)&$q{4$c_+D%e3AT^{8oY@VI<)t!Is!4Q6 EtGo7CCWGzL)D>rQ4^>|)NiQ$)EQYB*=4e!vRSfKvS(yRXb4T4 z=0!`QmC#PmhG_4XC@*nZ!dbFoNz0PKC3A9$a*lEwxk9;CxjS<2<>~Tn@`>`h kG4N#KjNU~z;vi{c;cwx$aZXSoN&@}N^m;n^upQ1neW`@Jm+HLvfkyqE8^ ^jVTFG14;RpP@{Py@g^4IZC^Zz~o6W||E74S6BG%z=? zH;57x71R{;CfGT+B=|vyZiq0XJ5(|>GPE&tF3dHoG;Cy*@v8N!u7@jxbHh6$uo0mV z4H2`e-B#~iJsxQhSr9q2MrTddnyYIS)+Vhz6D1kNj5-;Ojt+}%ivGa#W7aWeW4vOj zV`f+`tbMHKY)5t(dx~SnDdkMW+QpW}PR7~A?TMR;cZe^KpXR!7E4eQdJQHdX<`Vr9 zk0dT6g(bBn MJ7e%MIVY;#n-+v{i@=tg`KfG`%5fK4(`J2;_VvR?Xdf3 zsdQ;h>DV6MJ?&-mvcj_0d!zPVEnik%vyZS(xNoGwr=oMe=Kfv#KUBt7-l=k~YOPkP z-cdbwfPG-_pyR=o8s(azn)ipehwj#T)V9}Y*Oec}9L_lWv_7=H_iM)2jSUJ7MGYU1 z@Q#ce4LsV@Xw}%*q|{W>3^xm#r;bG)yZMdlH=QkpEw!z*)}rI!xbXP1Z==5*I^lhy z`y}IJ%XeDeRku;v3frOf?Dm Pgz@Xmo#D^7KH*><&kZ}k0<(`u)y&d8oAIZHU3 ze|F(q&bit1spqFJ#9bKcj_Q7Jan;4!Jpn!am%J}sx$J)VVy{#0xhr;8PG7aTdg>bE zTE}(E>+O9OeQiHj{Lt2K+24M{>PF{H>ziEz%LmR5It*U8<$CM#ZLizc@2tEtFcdO$ zcQ|r* xkvZnNio#z9&IX9*nWZ zp8u5o(}(f=r{t&Q6RH!9lV+2rr`)G*K3n~4{CVp0`RRh6rGKt|q5I;yUmSnwn^`q8 z{*wQ4;n(6<@~@7(UiP|s)_?Z#o8&k1bA@l^-yVI(c-Q+r?ES=i<_GMDijR69yFPh; zdbp6hu<#rAg!B8%JG^WF000SaNLh0L04^c`04^c{s^Z;}00007bV*G`2jU4D3l=H& zlLz?#000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}005$INkl @G+Yig>s8*Y5F{nl^( zYin$3v3& PaNl%@DkmH|5ss!M1!75Bi$ZBnTe9Vp>J!*#z9rE~^ z+9Ygsbu})$TpJqdRg!@SVMsJrS66v>Ml_NSWuqL9I&pP%byVyh~L3kz5ibZge&>~Q2wk=3uPze9|j8ttC6O-1{(_?*o zeb(02W>;Rh$(ouQZQZ)Hwsh%YYj1C}wQE;fTYIZ5S-MF6HA-(#e2ZOp;W}$ zwqnI{%>Ye4Q>|Kcfh)=d7hE9!Dr;_TvSrJb+4AMfT=6cu>@w@>>a@XuJ{#=ov8jns zQLI_WCau1{%2uviY8{ |T$gopt+LjR6{2&YaJH&l^*)<06Z?QNN4ydr zlM8;I8zkirUsZ=Y{E92~h!0{oLQ46Ovdo4O%S)mgeiz2f0Y&k~gqoEfDCOlhje>~D zgc-r<04j67>zYdIKe*gUF*KvhOyk5_T{XtLX@Y6< +0|jqEsY-6(a|o!td=q~*n)*!66jj1Z>W>NcX-~GmS(vY_cu$? z+S}W`4Q*{Lu58R;T-(}OT>+LXStQ|auxhojR T1mfSsbWSl^L@Ms2mP+3&8a8yn)Np zJV_;{m9AJh_%hJnXWO@Lx4nD!+0fuH)CngUR3_FVjt{& =S zd4_FLalM*-#$>WhjE~#!(4b9CPT2U^sP*^tiiT+$9v-rRfdR!&x@k8!I3Qe8nmq;_ z2Y5$DM&$5MdASLdN5M2H2nVz1v@Ke+&@R3FQroj >PE)kg$qJPf}Nk&T7gdvs3WgQ^!e&eb%cpWK~ z>PmSk#|ONo1wKNMY-XTJQ*gnK9Xn#b^vl2K3w$ba#;FSO;s<=ON(l*vkFY`k7MfpT z!E8u0m#5L48o6Z_Ah1mQ8U!^cjtK9#7S0nIMYZUyPt*12#Ek6edeNguNyLnhPD{Y6 zYh*r1pBSy()S8(DiR#1@Q5&U<)hI#=*|f-jo^qPtBrc*OostO8*yy $ zW9IU~1WqKrBE&OOnw>OaXX>xa ( ojU~HJpN+4=G1w5m@j|e175STFuEobD9fZBKYrAH`QyKAKY0EJzB5!? zBSD4`{ne?{@e{8??#EFc6fikY@_Y>_0ZJ$((X z%@Q`@>ggNOD0o;4=x*yBn6$!7y-b)EDG+ot_#zt`7+FyiGlf-0m{_7vcvPpGDGBm4 zrgr3*o27X>5ptYbnDXTFNjOzE%2LowSeO=VT3k;{S?X$ 7 zNW3geSV6N2wmG^sJ*BWx>RZ~q-k>KG1ecG`)93=OD+&{NCMTzS!H($`d9fDK`i0pi zwYyr18Hy71l-KckL!S14^R08f{DBX6owtrBC5T7t;~)RHz3{?|9uJdC41}msxwH^e zmpcwIUY(VvIps+aQAatb0a|}+1TKtOLtVixSl(&xy7gMyyy+s@?R63`<&hm;sFL7m zF*`UsXxm?Y#h!e6x4pFexa{sR+4UV-ShHKyEQQGgN@Y~5*HI&dL|Kx&YbE1~1VCTr zbtv%y2-=k^nOYKJM&y9R6C5MEX5so8Tf2U(M)OXF0ZIOhHPp7)?!9~M=&|E6zgX+! zW(B#rx@udg#r*OmOVs{4nOq~*-nqbD-Min896q9UP55jEE%<}qd5CcI6H3Ds;Rj-t zAYVAr^IOrl$P+js4Bj6G ih1`a;Y6M6Gx$^r4KozbXT7`0{%zU$X5wcFnLCc9|;GHY&-lB(zw zBcqg9Rat|SXS#aACML)1(9uzQ`nkRK{qJv;%}?iYZ=g{)Wi}$*UW1FdD@vMKRHqbW zT8c*+Fqg@BI!i)C(?VIw+r;cVKCU)sVgAvN{ B2E9I!`z>9`m?I3aoOxswtnqWyY9NpcKPM2 zt-fwr3)TVK^~wR;x@EU*+p^bozIw#^`bIU%Hp=vBw$}De%{;A+d(ZBJGBs$6l&K(l zpZx&p7ER0uC^CL_#|rq}CE7fn{<#w_Y< yDz}rpGozhaY>ZG1D3S-_Z)Ea>s znFkN-w*&hRh~`1twr!hrpX!m)%T&t-9m>$XDB8k>T~;e4JbB`T?ccXov*(Cy-L~Bh zA2}=~)Y?soGM_L2k;XMY^FSy5m|+4!fFeHfN7-`s!-BwFsg854_iXZ?)yxu1D+fvv z&6PaZw%y&Q>~H?&Z)7$cD>9RKOf>9YM#Ra9NeRS+$734c*v;Y2IHp( ?b znGk4xv@6XnX-0*ozMvLX)+|yRTeN6_W|$@wRap5O8r$uJ7S=-}qsqg*m|8chAZT(t zZS8h;v|C4OtJMfsL9=GF27+U!dabvo*G;7`!|0DNo$_!xK_Lz2%Bd^u3VEO%5g%y* zgn!r&b>!;`8X_)eJrm5AXI7gOD1|COdF6Q^3Fc2uVCtlW;ONMhMzljVF5$1yXa_Ts zQjE(feRR~XDV!8#d>q9Ym%>Pqls6WYm~{wIx~82R95~&n{+aPHTe`U2uDD{YU3U2@ z3B;HU_V(IyPj9m$hX!qAQ0B*Ulg}vAHf9T!G}@I{Ut-Hwwpo2cjn6huKegRne&wh{ zR;Eu?Jt~6uy2-`ed^Zo(d<5R@IdA*?Y$G3wb#{(e!<{^N!gr!j_}UuGQkg|4Or|uf zS3257PkpV8j Hv$IW|IPKfM g&{**>p}3 7{MTbIO&at) SwYJoDubn6F&GnaZCI%IWYv z&+02r3t&L-fk-a$mMcp+O_gw#!)cWTfs7k(gaZ*Jm`$*!x%tKY6-G<8Gs#gPgFNI< zWf-YF$~zeZ9$& =|KtmsMauSVKykSQDW1m z+**sET-BrE+K?1+SZf{CH&d^CQl#o;(WUi^W)0RP?08jGV}8MO%#5Vy)Z^#Byd?>| zUBzHBbr8x%2`Sg_fB*aTg)jVr-FNTTY^oq(6-5p84RTVNx;o`oCu*Sh-+%Rgvs-St z#ZDeSYA^5DX2*18Cvn4u&347+E3H=fzw_WjcF#Tc+TOi;RA;p Jo< z-6xLQ3(q|##qYMdrWV_Hh<3=a(?4P!u|z z(Gq{UQIU5Nd=$y2Mj^nIadRd)?!dE7U}93c GpKdJsAi>+v0)n+9?(L0$c7|fLqnq)vAGMLIl{Q%QKw- *2qSmDV(*>6)2+p^TnUQdQ z2vN$WD<^h2TZNl0P)=!88ilKqtCqP$7&lWRldO6|SJ~pVQrNmyRoAQ;Ml%a}xw~Cw zS||&L1dPT0^h~p6kOnJ&v!T)IW!qQRtFCI9ds3vCTFt23 T0<*>dN^lZXC+Qs@B>^Gf{0#gIy_w`JLbS9lP=78 cxOeGq46HpA8HmmVP*CW>gJH5lOpr8 zno$XxltqeIB?Xv~l1vq(AWHHZixU1S4g)f?Ns*bYP&Ui%&^u<$eom?s&y-i=lfo)T z@fivJw3I+5n-2o4XJn#52T*F0V^W&hkgc!M>0;3(I;y15FKv6le*gFW&|ZG|Wv#0? z(OWNNs<9@SMoX70@ c(bF0s*~Q{~5Hkxi1cwfNwvpcj9AQ)W8U#cOXRs#JI2uyIO?=eH$VfI)5q`g~ z;bjOTocf!$0VEDfStKA{T8nwDQBanITXw2jE2%z4dSA Lc+nF3 Znt}MHE@3wpIy~iGV?7PL8 zr@TG15h#z(gG)(d3~<5n9|9rUU+aXv{t {?s}8r;e^dNz}>A z3_d%6f#KO3SBi^k^2ZeclS{+7^I%4!JbsUN$B2$Ag{LvuH0pCW(uJ2}VM zI(kxkC zHZSjZ)K^8E(B~NvI1R#-I- S+Zt0y~J)*444V z-hS&l?e^Q>XO~~TQRR5_7==!E|EH8uQNkm^cj0ASCrTu=NpO`0f91Ha4)doXHF)Wt z>Xopnk7}eezQ$u#l5-ws{o=Ehu!r+FcLHV13ylkj>d(i`1*OeOCL9r2oyakLPrUyT zPk+cUa4C-Na1xb<-?NIBX~30JUPXD{0MC>DDFmH08r0Lq4;k5j>hA8b }|K)Vz=G)Zd4gPhM{BANe8aXE5e-NoeyTE`!(|BDZr`iy09%i zqk)8t49#Vl!DNcoY38kECZ64&;GH^~g>iBHCzsuu!ljvC4ql0W$?`}l>NBp>pxK|( z-AePp5MDwr^}{eE6oxX;VHvOiQ*2{^!dcs)o0$~4t82(v(Cj-Z P~??ZOjS;;2DarMoNOReBk{bu=aLNJx{p3%}y6e!|oS+&-3|oJSwHpW-ioB zi(T5>d9;4afQ1>&W)jo_GjJW^D$|siF~bwQr0&!2q7l!`fTG~=i(amo8I1x=2@j?_ z>WH#nrp};1s-Im)@-fRW)B4ORhoAdIid9)f2%o4)iF1HBu%|TtPqXo%Y_9{%THxcN zqsPW4G=241-{7z{YLUb)0_o9l!OXk^0?&Ma!hs`za*;o9RDwv$=SgLur$iI@fjpf_ z$;EK_>uT#Yl27=Pft--$up(QoJnqX*A2SSV6lNaocdWc%l|Sds4L k?lqXEZroDu-B+&MxC`{nl^WTi^Ot%_w7b|F^znpZ~(0vXXdXP4Hzlcwbe3 ze4A$}i$^GtQLev#z)p1cipn}`Zeo{dE<$Gp6lOpeCg Z_`~Jn=7W4%-tTJ| z%F9nYBR}1hc8#(+T+phlv98{B?b>ZmJn@)4_0*I0%8r-){zjb41&`l61;6}^YA6mb zeptSIxm|kcW%h<^-e_-p jGyu;7YA=ZQOa8 N7A5@eZt;HcGrD5hCqBAvwpk`kqvEnn|!NcfX0fojakXw4*^pdies^{U6$XH(2% ztSgvl#jFB@6K{**{uJ^cB~rUNfjw2w8dGzhD?AJ W#2K^5G(8z=u*W#T_Jn7Ln zgexgU5MN$-#08$b%R}S=A}xbD8*jSFe&Q#7!j>*wmPSvuZgurn z1xYyEoNytNphKfNAKF-()Onb6a8~)fknP)Fvj6k{{0n>X``@$vfqqvO?!Nmh<6FzI zz)w5_cl1TX<$(}U;)4E>&YDH$wS?(93DMPWxW@0pBmtXJyISq(Cm*wCo_W%F73)19 zcwSyd38H`KW9qH;by%x-b@kP6us6Nw&9-piBHx|kg&Rz6Pd@d8J^A$GcH-o5-%MG* z?h?EG-S4#}i|C~v<%&w>X>B%Q#$l%b(v<)(uW zwv;*FIe|RNMj8<5Tq7J1`2)xoxPZJr@B{?TJPxkZ?Rg2~B=j8Q A_tW3YI~)Jh9`jm5gs&IDYkEBV2Xz|)C-)JHh>?B3;f%^4{>Iy$UT0-s)O zL=nnrw3cv##FYkoN{aJyX_rT_>R=vMShjSjEnKir>!g!*T*AuBD3nQc3!(4@e}e~v zEAb-%N}8E`S#&DHspEoe-gK2+bM-a0ZtZ$&Yw55>3zyic6|4O`+Md0;t*^h&g%LnO z17_EefwN3`B`eD9Vajr3skW}cU$gX I>|G+0s?MHy?pZ%EqKQvD)l4fooQFkvX46GHyxF~Lmn+KF zEnEClME9xmAY8?E2#7Ct0r;IGAjSa*Lt0#7E0#tVAoAq%1Cb|xozLZ!svJ-FBOk83 zd_c*cDU`y+j#ao`qcLyC{MNU=X`lYPzq1D)c)({&+Eg!d3_*7NkYM>xCx<}$HnSY@ zX)To5)h-nXJlBHtNeLf#;M;bml6 iOm2KIppDCj@HE5yV-qK)Q9lXk^-i8PJY|9JJ+2q)`=c#2YoW+i2k=YK!kT|W|+bd!I_P6b8ci(N#Klhvs4-Kg^w6JvCNeO(X z#RV_t6!zEnxXb*mG_;!$JH1x`kslc7v*(|G&S$L09(zoqWVf45PL~Kvws&f$m)8{< zQ@r9lMf6CK#wRBIn8uAa-ee#A;7{0_-gvEN2qodlK<4GM_9mK2{7H2s+#b%HgChNf zbJJQc%^<)9Yi*Vgx7A6A>#Y0uZVB;W@B7462}iCEqd(>V(eBbPg3z+q_ZNQ5OsGBy zdX?JNXx6HwuMAN;bz-0OoJ284l!jud@1{7k$BBl5)-I;&lub?y*uFhGv@RU-JV6bl zl*@|K=kaVPaBt =T%IMf|)*gs0LGbWwV3tHvq3`j_rSM#VKNsZl0ri9; z<`ojnpU;txD~rx>EY>h<(v3G=m4^i}g7xr&4{Bujn!Whq7MUI#nQusnAx82x6xxVl zl{*A4U72A@0-4&J9HTXSXCcnoXUmosHG_S_9)J9?G%_oPTI6jF$O|{l7y9m$2%qKH zGF~7P<*hfr&3^KyK4O<$eub|mrbG`{?jMB00FEbzw*<_#tTTmIqc9XF+S&1%bb+kl zafRstU5B)W8k8AWCzD5bvo@a_B%Y)lF&xK%CWTuAmz1)uMhZGTB0U PHU1Xng27g0IG+ry}jBx+UvE>8WmZSa$1Y3y~$*r3n529Iy}nD2OF%x z*C`(Tn!vRoUx_nH{v^a6b WWG z;+aE?FZ|#IyW{UaXD`0+g4SQdUKi^E@=hwx_^9yUG`;hbCNA)WOL3|Gq&%Wo4*bkW zEL1s0gULnR+g^IfzW(*E+qP}nWs0#ynnVblfsMG-WRFdd@qsW3k7ryoEn2kL-tmri z+Ry&%zpzEJ-#Pq=!tewsw1vV14}m;SQ*EptSl7r;G_#^+l$vUG!?@`>D7sIGKZk5+ zaKCN1xJxrkv#-r)D=-`9=|FjyNu(rf^;YSsIZ^dYTVunF>V)TgHags`#r&w&EcMpZ zpxLA_E*X>QR5c~j7$q39$?;z0JFda3SISajYu7Fn4Vra$F^MZ8K>Oy0G_a;!S+@oh zN1H;%1J15(CGg`e`9k1}QCtb07U`i><&~BL`5`o1l*b>+fWUJyfO{L9iamb(xE(rp z$oB2q=Lg?7CA)q5%l>2_FKh_M%llr`g6+i@UUa3{vUQ97K-cG x3|Q#yB@MhMRCVnq5;|a_RY*aivMAl!maf?a84 QyQ<4=Q5ryZ-Vt_Aj?5B-$=%uoM} zwYIiOcvL6Kn++gwydS*5Um(RXvoNDD7Dhd3 g3@r6V%BPAVRk{#r!}+SP}XV=vC8BkkDFjJ)#~aBqJd*dDA1TI z82K7yk`)T0qLrOX=4%Els+}u?K{E=-d)LHfchDBIQSiN-XJ-Sxbqs>UWOG};udm;? z{^}c=tiS?H>Ey|GFhH5|_(be%f+A0gz|X%mTdGg>7EU7JqA_@S&UogF{N|SKSggFN>*_gagP62ExzV z?Dy~INc^DBOm#JN)?C+UjkWcDOomgv=_Vgeg*2MAv~<{?{^_4-k$!{d)$B7R{Q65z zV8SouQ#j9~;1BhewnURD!6Nq$|M2(ifd{_jb~w93%~}BPj *qh zi0wSlRqaH8M2+}5U_bSt_t|^i^LAUaYN>cJWX&ygHZt62|M|Z?Vvl`)hn?z?@~AC7 zVCHBn2jWO`WuZPf`h@o-PfZM4M_ZG<`?j~+2j2f4Te)(vW|u*05$&(+*kb?V?g#CW zCtkJwA!K6EuDR+$`>o&jWm~0um~cX_`Wx-r4?SU@`qUlPH^6 SIysvt?LXDmYm6p`f8DiM?q zC*o%l#}$QS&EfAG))j@}6hXBV1LdeydVO7uru7 Jw|Jp9qH2) zH8vvUf7iQix8M4$PuS8WD}<95X)6y0HziB~d7gxydLxJPM0{wdskZ|M_efy=v(`ml zw_`^S`?`$xg>esw(-n2>?s4N!yyGA!b+MD1up(NRA{x0RW8>ok_Tis=zuo@sTW#H% zl@e~=Z#*Sl580pgs4_mSC;lBdyne*;0JEE zl`Bw|VJUj8?cTM+zWC+)?ZNMEvw>mCj@Z?k*V}LZ)~`r`mk6O|aP +!PDf{dH z`uF}sYoSo9ev^!dE}pve$}>6wO7s#pJDs$AULdsrx+|yU!6&K6NSZqoH}mJshH$S1 z5Qw}30w*uTV?-!57?AM#I)QaV66SOq1s8`Q<#)&3;*w*5=f_4E;d$y(0|Mv5xF^D* zk7peiy&0|9#Y#5;>)o}rw)njdKK1a?kABpjbo}uj|DY{iy3qPYdaNLGVQgyH3LHe_ zz@B) 7^ zru4LK0-yzc&+d!L!1ixiBjJRjN_FzqX@64=ckFq?Orz?f-ew7Uhi1kOtEp>NdMd+P z`KLrzq0po}E#g6&XlT_{){WA}$0P%4Q?+Jy?xDe-)5DqRK3AZX4#AYP(^TgQ!h+Tb zdmX_AA`=ekj1CFq@zGtRgj_{B^u)9Zq%ui?@IyWSi$6u+xTDSj8GAo=ld$`X+qZHk zk$-mtp{9C|V bzPV3c=fpT_HnwLvs-C!gs*1@%=A(cIlsEX z@Urz<(aFrJ*{`8f^)0rknN~Y_YSM;B#jNbLQ|aaI>{zwPlIWCqyI9vQ>+7GkS6@9W z1!-28*Hm$@infJx{L?~`ybRzCBQ4vk?20gQxgef3)6Nf49a#W1abA=df^Nn6F3hzo z)^oVxdDL7Qi6NPC{wW1rQ*mZe#Usc?SDKC;x8gjfI);Tkv(Ob+Y_fN}^BuPNs?Gku z7Bh(-E0=%)J_}2sd8}c_j#sR&w+{rFc?rI`Gy;`)3_X-V$ A;p|3)Cgy_O=@Pa8qF59Z8kpDV8i2eG71}|08$qCE^}+j z6}n0Fw~2@C^0(OVh?WJtG7~ie)$qV!+}O>Tv;UOfoCxO7VazJLgo05V#w*g}qch7p z^?ZRk!vz%M+>bCL W>Dc|cp4Jcr`! znDN$mAXoH@2RtCw*wk!SUG)b0$WMRN-u&ikmC7atGfz4J9rt6BDT_%6J~^S1-U!4? z5ySh@OpE8b#&&CLTVQofUAB7NMq9dUr4I^uTF#^_38*8hFB4>D3}ymmgu2F7&0shw zXH$nQzu-b!uz0ylG0ZY%Z`C1%si|*qn(7+bWhQr8=fY)n;f5IJ>lNBZhbG!dPqa7=bz0Dr;-v)2122*}T5VmOi|vYy*Vv*3%WQH&wEN?@oZ!Wj zP#!rJ+&pYFG|VoVR;GRrg4t{iyXSznHv^~9!%|Aoff8^I?RuGnKlgJ#Z|m1zBpPdd zBg7vbbA>@!xX&R|lMM_x%{l2Rfrf)T&(E_ZQ p3)Y^+<_tR`2Yn)-$D2N_t znh?7R8VEWTEY>W3m6S>|k*~+tT4uB2?BTSupCi 8we@`??kSy z^a1?g>cteNc55VGvUG{Hwzb;e(4g(xcfbxFI&9rNJ@(>@Kk(Ntu>%M&NK8oq^8-lU zC4f$t$+hH|1-Spz-r1p9qS5*X2JOJXLw5M+F*|(ZsBL{|i|yIFOM}Xg@9H&c)?Bh| zslOEE(7}VE>5zXtj@Ljv|HAWH;|z&OtjAO@?JU->cIEs)IgN1*o&x1%fbzIGVIgn~ zfroTV30@v|qPs@|JMFtgKroFW2opd!kF-2K(#}LEOyGcRtptJ5C_Sk;CVQGiqt;T2 zYi_EOaLSyLvN#6rlVk!^8B(3t?olOVum%|!oz!4}f~0l@-QY?)Zv|Hz%Eb;HZ>mTB z4oblO =s*g6VMTj32n_qEpq@0(6fYyv0?kOq!YU(N<0^qI57KX5`f?chKt_v;9=fr8n{ z`fF;6`)k}3<;!Iaej~QIsWlBcDo$B8WN5?a_^@bXmQQOlo_*ndQb3+A%9Ya@;XLol z^PH|+KxwEGq=g~E!xMV-Y1bti-Sa@DAdf39fC|C^krr`u0D@6IT9M6h`HuprOyq?o zFO!lIDE;)1a_6&g If!sO(qO88Kx*57lpI+)AX42pE_u#j_ ><6 zRGWC~OJQ82I}bB)*IIGPo67S%3_ES5jeux#33rK4d5CmU)Rpds4(@$%0%1YdBKy^U z{cHBopZ#C#!iz4J08Y3W=Es6!@gIGZjsD`ajgAc2;6Sf`otSqc_jDh(L9MSwhKHO7 z)Jqw54)c9=I*9hTQ~Sd|DFqzt@3X &XG;q C{3$;C`h+c0s{`j>SugGf_j zy}!sEOM#c9^C|SHam~o;+j{PCDV>uM4UJe4jm}FU6@7J{moGpEKh6b02J>yfUmngw zq=%FBlQMt{Zx$3V3)EO^3pa%%Bv}SuwB=l>d}*ff)@5-)BtYKCGdE5Dig77kwRssg zA#l`}F{)JZ%pk1(-+jW*Q5U~IA?Np!vO2<1Gm4qsw23kilb%zbnHjRq&MCX)maFX2 zOP5(o3j(PTb7DYgjDl?8PKs|b&zf6hMzFiYz>>^{RM%{t0TG{f`sZm0!p~Jsf)A@` z!%8j8Z@cY1t}qK1EzI5(rp2
aYd lo}2^$(;ri8zLP1JCnVvSJxxY>B?5pH zpYXC?!Nvv{+5K+3@HP12o>3n>N~B)@m&)cLA5snnFQPzt?a-u6j5G2IgPP&ztJJBq z$!9NJ5vWucWl|p2E4);E^sr2b{kC*Tmlp5Kr8s;&tl($KFnwUlgaml=l~>!f*Iw_h zT@5nJc@TnFi8m2PdZIoY5cyF8X8J1sHvW<&i=AiNx9xBm$j2a)imCs=i2yS2ur}}n z>OdTs6(Cf9v+7Ra`GErT7phlsgi#Q0pXVc|e2ViyiS!xhU|mE{GKjLSqg7eGo=5+) z+1X#P2Q4gaLFBo?7d0f9FC6X3iaC&$;-fE!BUH+t%8NEGbh7ON6n#`34I^6LBoW z5vDAc|41k@h;R|`r*ImzOW`8j9+v>NCS^(6)>9H}EG2fpcyOz}o`qd8v(u9+?m#&h z@8D@ELlWX?EfzWTj5(P)qC}U1KH{ uB-EF73PiPk9$UFG>UP)SO*60e? z96R+Pye=q2%!Z&dXaOQF(JD`o_sB=04@a6i;RiQD>UDXlW)ij*DTm-XF6bg_`nk_5 zz)L<#=43E)c?e#{HGpkwzUjYU!2-XzT+6*CrPmOzxYqV|e@8&Nw>IN%zge_+v7aJu zZ|@Q%qD=`UF64k%k{AWXMkoBm0vwy?v?nGByF1w7zUZW3t}qGM<1dGN!=lPk9G3o! zO{&BFH9eYL=m1^|1fSbmn|)Tn4`HcvNtis2ZDbdEQiQF*5&THkpXlXVmKx-<4&%-H z3Xmqp8eG&UfC)A!+kV`pCr4~@bijs(dTd~z*T!|Nn;x>(hAFF+@=g|bqoWkNrb({V zhR14c=iXDc_wb d&X~O~<#q;(e1X-Px;B3;MBcM|LN^$uz z!0GBKhtuT+FX^SLcrSTfvSg{f VWacOP9 zsFK1s))J#4%1bEBqrYP#BLuvonN@fu9vdA7__V4#LZm+)5ytWS%0&81-awC(d`QKo z-Hc<`hxdlX`?zLmFi}+A8ILGy%JLZp5fY7B9Z!sEW| o&_IZ&iG~>R_hiNk3-i)Y;LY!J~+acp%bo<;oI% zuCYc8zVfOiV($F>o%Rp^aEHD4;`6@tYj11ODB9sWojyp5BFb}}4^sME$j3uRK&AYZ z;__vH`Rb_zr^{Q;8*T+~eCzVdHrgNj{wMv_x!h;_#y7rU4?g&yf4bunpZJ7tjIfi) zSK6L@@+qxHSJ^N9(l6PvWs9swGxX;^_nG-W?F~It#)!ohD = zN};f@{OTTcsD9-TjbwL?vsNsM`4srTz<~Ak_1TG&-FC9O+n<^|cJ!#f5{Q>T@DbC) zhYrdPKVm13pS0dyDXz+K=en=A*Z5Q)iZwbstm~jX`0cOT_a1%7UfuqJ9oY4<9Xqho z`nwO<_`q?S8t$=)q2o3>bXesM+nD_0!`(Ka`0?RWHa>F7CP#X0YOL3$$NQ|IdeR!@ z>a~91+-|iLieoK&S-GlKt;9S~lQG;1CS_`Bw+k=aEP-s(h|bMEMsds^W(o}8#E0NT zKzSG-E`%y(o&fxDv(!zrTsj*fO^pq9@rH|B`FUIbUbVF~8;>RcDd)K<3;uBVa30FT zK&7~HIGa2Hr^`zkF0V9*VoOW2-F(A!n(bHFK<`O={JRg^_LpAN4AN>h-*}xZS-#Y| zj~}r|9(us`?0UtPEM8zY-E@O3SS*wF)$R7kBM;86EVDtQmqs?#>|2kRU~va^u2L{_ zs1x}qe{^ N7OfL z*kBi5a*?gS@IqU+ZoRElp0&EJTX&(YUb9x$b$0pXmkIxry}DzY4fdasW{zn#kQq`t zZO!#n)*@M{ui;@Wt%oGQwNh~IcGuUk_)UJED6HXmbyPq~QJwj*mqoo4gte9V7nyk* z<>X9_pR7eemM*`@7B9Wf#wKg5S|(U^4c~)-8>xJr7Xf*HK;#Mjl`9M3bpIl4?@noE zW>#^ we8)#)1G r#x)Ow zX@GZV&iTC?1W;*=iU t#iRzTex_w!W=QF6>dyJKDNYLOVT3td?E37 zHa~&9NeeFlzVz(=Ojzijv;&pOdmo%XDHQ>nucduIJjiI$09q&v+T{2tnev0`pK V>9SrQ=NIMXO5A#UI *<@+b;eF~Pubz4BX;n} zfSu?W^T%Ar3bn$A5;oejW`=^4aAKy`##Pt2W}1oVaX-^LGG1k;`Z(#U*>S;zwtV>& zS`#f(n5Pn%dD%^nqWDV~V#lX4FUlQ|7jA%X#DyP4i8#Rh%1;d5#Iv-6R7`i6TW2LV zA4L6uuTohYP@Wg4l<)O|*)(}Xk{8JpGpp|)DlVN45dXv<)^rTelp$Y%qYvU@t>m3F z;?F`^N`R8M!f3?z%3>DDt`L@7YJ4JgHX~C0*$$%olDasH&xF9^85N~NS}&v=x(Y9@ zAU|8qGu*h6Q1cby@j{I)Uwx5XfAhQSEjPW>R;;^Bg5GF{P7K+ugFUuw=TUq1#r^iZ zr+3?9-`io2J|Ua*iEX;RWZ(V%Hv8VQJM6h_d+p^t$L(m(s10hS7@KJ{8FV%(WgO o#rSh(0)T03MK6>Q(ZW47;buN^u*X!{TK+P(v) z?7*RJJ9MU zwJo*P>o(b{HCI??*J_z;ZCbnVG$J%fIry-T@3?7X*UZGR7h06(OI$1Q1PCR_=W#yC zAN n+y?YPY;UnGFCM)FDTW|M=(WcdR+qUnrQ>O-P#maSB;J?G# zI~KSF^WxSmXJ>}x0cLYzml?*VF{Otvr;eSi5c!4`g+2$w70bJjr|B;I<<3*294Ldv z3o(M6m~AqQL=Wp3J_$ZP$=ajAR<7A#Z+piF?8iRzFYU4`Z?r<)QtKXWuwycxPV|k~ z$^KD0H8^hF17n&g#_V{HOtNEr_OfQ5C!T)AzW$x3?VfKvX%9T|ygj>RpY1&)6K+WM zYvW?ue9g^v>83YZ*OCh~t2Ihds?#=dvLxlCxXkpNG0WOni3h1&X9whk&!H#*fj9V+ zaX X6qDNmc6|Lvitk}o(p%xeG%@qAVj8oK{QvY z!Bt{B@ht8U`+#DDb#-%3wzndcgAIplWL2F!X(ww`455D6oUCc4u+f#zl_!1a3v|bi z9kxdweaIes=pozk;)}jT&HKRoo{=x!RZdOC-1Ixqs;4joRW;VyRAZN3vfi%0?#*`N zjn~;l7hht_R<0IJ4N?$xq{N45p3@Klr;~*u2P-wRcvOSWIC&o62MFULTnQpiK=@;U z?>uxRVi3s=A*u}zJ@la6amVNE>8HQ%hhljwf#+IiUIOqWTzUNG0%t0hZ`b+Ok%u$k zfDgzh`KX(-f1O=jcGZ>FXrOOayxIN(2YgGNO`|uz`AsfM$PjPa=Y4V9f7x`!6+S6& zdSvTMThCTm00>M(QiP);hYlZgWkJFqED^`lmjogj75=o)EaAw5V^@@NmLdfHIW;K& z*(po8DC_rl{KeDhFd-k#nVDuM3I$I2(_33KyepmEJkCa)IC0!|y!-=u@x^Cs`}Xa& zYxizDe&U#a^;g)v96vt0y=uh;wr2G@yX3-)#O$l=ipw|p7r>@f=XgQ+naQL~S_+CH zDWw#LtH0PzN-WhCK4De;=sRn%JP&X&OO*2ja9Xnb at7EJG|EJ2rpzVDw zATN$Z`^Xq?uSo+b>uwZZEc9SV3Z@+wb_FPyX8GkKwfH=l5Hot+?` zuTVJU@&ku;Y(0aG6T&>ZKJGU-4<0(`uP{o-cvukD`g0y@R d8k_q!Jns7$1@*5us^Dt`uL$phI^R{kS| zr+WMBR8OA^C?A Pv$hR9v z)g}57%6z()kE`f_x8A84IBs1VG&(9^4?g^$-FfHV+tW`;S=yR4Sg8Guo80<`7VDa) z$3a0iMFSMZVn`-;q6_c=DjOUW^51mv2z>?$rds6i%aJ3ix(Go-zP)qk%0Z;%%jL_? z2GLA~(58!*pqyu?9O1+}fOhcbuU~T6NQ2OM18;ET^+EuZAy{;rcUW0N&IR&iN`7xu z?wWvlF>kz;%3I8@i#J#6rr*_UW*c zFV)MH(o~=U5eBl>qrz0km0=c?RYfpdB`D`rK*ZBNAi~}+Ssaj0FFO6i6~FTH+Lg_D zmFaac-hHTs%BcUTCSuMDAP2h-2S9LiUcOV$1)^c){?kDcj1sd#h=7!q#XD`Kcp$J7 zhGy=3^OPfp?~2Ni;f@Z0CLa`ZB^ Z;4)yr}?TS7rhq?Sz--}&tQIyr|>6qoZk{D%@KL(@3 z@A)}?7LeY>RqypzBAkjsfzAcaHUH@#PgCHnL}xjz5jUTEEl^%QkJmc|M>tD|-byq_ ze7GpD)D#y#`CktZdUvi28bmPDO0Qf>n;D+wt^{+qH7DZiA=*frT;@`w!ii6La2~h| z*_@r8Ao8R%E+t32N4x(uD2tdRM7;AU5uXUc(VzhQ`S6*bJnxyx2L8wg191Vwml%;~ zi@0(ZfWI`eq%tAI0f7e>kdLe6D9<%tXV98Y4~$Smo^ptC HqufjQ{M&)2>Rk_p1NRCg*ln-4{N+2x!;I8tAvcBZwIoMOVU2}8Uejml)g`%`Iv z=OL{S 8HnP@sh|c>zHH6SETJ{Q;HI zoe?=Q%k$*Z!cV>BW%BsS!*R`*0U{qRpI$EbKptPDM>rs_908;gF2{+Z)AM d4m@?V3xMXceD$_Ze@`j6n_FvCed!p%htp zt|^YkLdJa8i(OIjHZ(L!W*fY0>X*c`R4zFv#F2jf%0iRHXevJ0-D|@`eCLCOF}q@E z)C&g$(S+x#GSW{ch(P3vxX8nmvH)p$rbXT;7moCB`8+_B1@dv=r5@aTdBQ&*L^<-M zjw;a>Kpt{MTwE*FISWu0=u;Bkmbv53($=xxXHk5yT&66^o5QPk@^~s&r7@%MfE{nP zT)ldw-EhOT{!RM6o_^c4dynnjv&YhhrD{0p;R|PRLS=I^vSO;SLW*@}bd*7!KLIJO z%39mn?dF?rwl}` M z8dn%@830+e0%SuM4Gg@y%wvSO#G%uImn`}mnH*K{$niiwul(c{tLczs2yG>Z1_cB| zh)W%lT*Ltp2J-nL99QZkJ_IlzpC8DV&DW976Y)T#MgGVa*L>be5asg_Wy+O0oX3@w zE5-}BM%t`Aibq-KsD~eZ(3Rzxr=PS|R~8;d180_bma@RJ3|~%J$dAxWO^sVqbG==B z@jAQtrt9pv=brHw^{u*Kt#!0_*`dQn?0Zi=sX?>Rc-%U@!Cz&)G8_`~+LVRp&aMUa z(T{!1KJfncdw(;#;k*w0`Ax;_ei=KUoMYsS+<*IT|J9y+@<|V0bkRk2`|Y>e``-6{ z@ukhna)c_~+-9Ij{@Ob3*`)8^%rDVrgi<3)#FhjpHEe!CjBq6fMA>{?B`8m)OkVh4 zW++eqe)2@VJdS+XfJiHk2l8?F^Z4c~7imFP CZpCK-`ij2@ z&&@s;JTu~ zUUuJvv?Dp5!?%1*2e(-~5?8uP=ws`RZTe4`8kL3P- zFiJCxz0M#?{1b{p!z2EhVf_A0P%Q-r4--F{KFB*YMSs-z3o67>n=EL?5lvi&Muu%* zaKMIjr40CnM@CgvZfw+sbsZcU_ID_7I^;DdOV*Kcoa#hbLMZYbn-`Rbuh_X2;!l?! zAigMAIU$ey`EsP?UBm(9b>#DuL!?EW<#h*C!Wa4SWpGh{UU}SQW%GIS?yNvagz7ax zkv=)zWzgKzWT(2jZDO3`AmcK_PWtO$dD4`13~%MB!SsSonPpDI98mmu&_%N`nZWDs zcJ{Be;dn5yG2Q#COYd3WirL9aI(Q o}{1Xn8pd-V<7ol5QTjZMj@oQeL-rOvFfkSP2U6du6Vc4goj^rAhA8_VQ zrVS;biLRi#qZnazNe>M0(x<;0Omqd^zN4DAp&xyE2^RkWVkqldnHt2awM@pMO3` zdF1$$KZ>|NdCwk#HfhU{6ot>Ga}xK;D>vK5jhESFmu+z2I&_E^WAyvmbX3BNCOT%f zD?+nl&kmvtqdp43_d)%y{?prK_6Lm z=Yv*ehN}Iqd4Z3gLyLX=gVx(SD1!LhbVj6iQtBG2!69hnRgx#4US5t7IKlxDj >A1+x zHNtE+0_A0Zh>L6B$%Ese6S8)eL%s}nz{Hi9@_S9nIIAuNQW>1$@{9aDL>&>&wbV{U zK$<*{NLl{j&O7Xxr?MmZ>U2(B2MB{Zp#0^CvE`dmlj26b94O@(5d@8oDvgYe_@bWC zS(2A{13HL-M*Xq#<#LEUmsJ(J)#dH01W`AG@#@v9eES#l+(Yp}CCgU?s`Z^MzK=R( zd-v|OlP6EQ-0)^09<^Axa#dObd3o9kffS}Lv5_xPYoK6V{@P|1TCP7{Lf!AmGUQVo z3Nar mG@_Kp1?0 ;mx0jjUyvE%X0SZg^p>Pm>BaL;j|Z-a+;tebLIGmWAToBrt0~!+?4R}`SnaD zEa8d#IFyBZOw4Gn*$e|lM#g<+86F<>ktXh>hJ%2-11eQpN%+X0kI#qmGYb&71M+wx zZ_I4vc~4iC`T~f}m(S ;H`MmkEK$IbFRy`H+mP2`(!mDCkFzjq zmvFF~1fWQ$C-q^trSUmo#d#a$d3}_HycFlzB&|WjGy2xwRVSSO=)mk|r1}NSNDQ!q zlY&uJWrWbn#>|odac*{Mfe-#t@0=$<1~wx^L`6YdB}ffR(_T0rm=$s5`G9;L{L#pO ze0(K{^t@13g2;ozKZ}kGM=_j($e(u+N8Z2_PzgslM4oaNP#&M^$Oe(hY&b8V4ZKj? z^~2X395dkoIzDv84Li-YlKk|_C$8jEHeFDTd@E6qaOVSRqTfFmADgsM4b;2?ZepBo z?o9jox#(mTPEARUIR7QbN4e;aG+?IX12a8uS}h14kE0WI=VcWqW#To##JvV($$G*o zO<%|j;mCI;aRI~=&bz#TK~Qu$KwO09b3k145I6(y=j#IUIDkmY=Lzt V4}|j}X(w zRNfU>-oU4j|Ica9th(ld#4qzNs%_qUrLAAL&UdkhgBK{W^Na}3n;ddAI5gldNI!P$ zxX1B%i3=~h$S%2fgRi$7iPMnL;V6W&X4*!_My#%uuZ~gjtblAOYx=M8gy~R(pe(Fc zc#&Bsi|5FQ4=5Mx{1pgNDy8Lt_(%((pRY`W19x6fqbzZ$qf5db`H9Qp^m1|$m%m1t z0K$=;$46Ze&d2BdkuP`_X?ciz#SyayRsvk2IP$B9f zL>SzOSDq@ @|S zNT(fV0@{fH^DeLVz3<2Dws*ZVAr+4Fq^tUnwo#vcj#GZ#vvB0dVf(@t?ywhLc){_k zTD974zWJ^Gxe4yryId%{zvU%sDNwC-951`z5NYDZc|i0JHeuR&BLrhIA_b{&DU1t& zjP!u=d;t-!e_2ckifMvMWg;yP#D#(YQI2qV-Fbf{AU)axl-HL}FL!y!hr P}%#$@1VY usnR4E(s6`DU} ({Qa%~xD*S6sfqF2C#& zTf620Yin!L+F&Bx^mC<3MI0a6g3CY@I?hCEDZUa!p2$Z@Hjx%CTx?61EVJdySJ;Z> z%l*ajyi6~JSK8_eR{P81*RNY|t1h^}w~GO2!nERsW_w46EnUWGgr&A@>9T}lh03p7 zX)9K&lz*iky5vRluR&RofU%fN9p JS|BCUzd^DBAneqjVQBR)Ed|V7P5m)YhC?L`uzv_j?j<$B&aLL75qxRW1 zzVS7C;DK-2V~;&z{XM5#Sr#o^SbWtG`Z0go&yII<0A6X<;sxJLEn0wwYi+g`xn`M~ zt!*vV-rlCL7Wq h4pItZ`#^>`|T3b9WTxUm@m#bx)+Dn`V z&}l5LM#sjaEK|-L;y4L y1ap{S@B#f278E__-{Q_L5 z_{-`@^(N=c$^4{weiTf3BTor;x+#TYYthsADGdg5&DTMmycy 9`=RGzmq4h{C(My*x+DZ;T4 z30$YGT(Q(R>2mzo5&!DgY #yt8tM6}Q=TkPgouFgMPGP4S*23BC>+BV_2@#K z6z1-&FH|M#%npoBd>M<83OeGOFa8p5{o?3IQ)8o-;b@27yaHc_oBXk58KkBgf~mdG z!p|{!JVjGlo=4OJ#JY*NyaLUJ3^%^)ns8Bv2VJ3QA9X(b;CFmC>{*_al!;O=i5AJF zvbs{t>GU_Wq>#pc{fB4z@95bPnw0HcV=GrKvFopYllAnT^dtLSGGn+2xO>lD+xGHK z6_v8!RGvrA9VIyZ&tp@RhY}s9gP;|F{|wBRUUr#XzVUMJ1CnVw{R&>L@ik&Esq4h} zxIO=a=k4IZLq2%6$(&rfcAYQYId#mA7m#(6 Jc6-09%^b+MX2M{np!m%3s;aGvp^u_S(?Uh^hf|nh~3{s9UYYY*%N8 zY;{f1vV$9%TQn8af!Ze3DGU%A?^HJq`jjv&3^OoSvy~jtGgW*kZ1!LQ5Jp*oCy_>c zg182xuy lKR&bw1%98C3BsnhOFWpSc>flE`icWn%8`B4I zImozl*57@{o=V3{b?&lEFcly*$do;tk>D ziMW)P5fN9*@HoZ8N&R-{(0<#sXOHdKx6h6qJ!ZX{AqO<&j*gC}x&^$_r>?Hb7IwAU zilvKf)5gne AI+P^|dR9ag%(#7b^5iKA3~zMdq;Wb 8zazy+h(<38F1P-k-n;stDzHN}!p=m8IY} zCGV6O#=DMNTVA`e5KiknnLJtj#NqPmyojG4BJFf}N^p8yr2BvO&xMRnqRVeuW{~IK zeE8Mkgq5-?P%1GC5J3sHR|JCsVcK>(cI>3gmQibJY0YL8dcgmRG>7I>4n_i@$pG=; zAfud;d|D|nL#_)xW*kq+$}77@H`T>iHIoudk6U3vi@d=eJG_6VefPT$*sfPzk=Zq5 zqvOn2!Y`WGr{^u}_4PGwm$yhs7A q!Jg{EyLxZ$O%8lvKSjVbmLNm#$w)5o|q$qo>wQ z7(pAVuUWW7V9ms%y33QJFOL3vA)i zi)_)d3$3YjsZB_k)OzKTJzOJ1zLliQv<3^c56HKL_Q9WWDDfu^GL_&*%5r}2t|cw{ zpUGWO#*kHyngyP&EB$dAWdTUaD~tIv*4^Dbnq9{HSadB@u8)36S;${NXeEq!)Kog( zqR;c`PZ+Y8QX@!W-jcY6>$>CY`&vo7F5`7Y6wkg>QZ>U4er(99K zdGA+j-_C7Xuk>3>bG5ZK*I1KeyP-z3Rr$CtL8j^4rLVJEJ`2uvuc+|15qcd`F7C&O zu!g!iYiVfE4ArRhit;zsT3vIk71&I$dMQko6lJX~S#g=9c(F}Yi8q>gS@=UApUvZQ ze!=Zvd$d0~C=c*1%&;P#bd9n ^hh=?ap` zQYJQj<@s+{O|+l2l4h4D9(lmNbN{_I+<#It&7{@WX*Q^l;LAL#m9nTvMjtrXJ>vsL zwds*p)g`@CSZe~!B-7L5)~p48YfGaPrN!DCyR55qfwgqhTcdbh)1) FtHbV9o{a&aXbvu++zTFMt;fc(IZl;!;3J|(_%Fm6Nr-8M9MN`5g@ zvrnf?u7xdK*0HEjW|wA}_C~91(7LUzLyP(@E$|oF$~D(Wkyc2FnxxE{+NJa;F}qXq zDGPj