From 73cdfbfe799b08477958b6b4b65623d4766ca11c Mon Sep 17 00:00:00 2001 From: Darian Leung Date: Wed, 24 Jan 2018 17:22:13 +0800 Subject: [PATCH] esp_adc_cal/Add eFuse functionality This commit updates the esp_adc_cal ocmponent to support new calibration methods which utilize calibratoin values stored in eFuse. This commit includes LUT mode --- components/esp_adc_cal/Kconfig | 37 ++ components/esp_adc_cal/esp_adc_cal.c | 501 +++++++++++++++--- .../esp_adc_cal/esp_adc_cal_constants.c | 222 ++++++++ .../esp_adc_cal/esp_adc_cal_lookup_tables.c | 96 ---- components/esp_adc_cal/include/esp_adc_cal.h | 212 +++++--- .../include/esp_adc_cal_constants.h | 0 components/soc/esp32/include/soc/efuse_reg.h | 110 +++- components/soc/esp32/rtc_init.c | 13 +- docs/_static/adc-noise-graph.jpg | Bin 0 -> 110759 bytes docs/_static/adc-vref-graph.jpg | Bin 0 -> 63259 bytes docs/api-reference/peripherals/adc.rst | 83 +-- .../peripherals/adc/main/adc1_example_main.c | 83 ++- 12 files changed, 1018 insertions(+), 339 deletions(-) create mode 100644 components/esp_adc_cal/Kconfig create mode 100644 components/esp_adc_cal/esp_adc_cal_constants.c delete mode 100644 components/esp_adc_cal/esp_adc_cal_lookup_tables.c create mode 100644 components/esp_adc_cal/include/esp_adc_cal_constants.h create mode 100644 docs/_static/adc-noise-graph.jpg create mode 100644 docs/_static/adc-vref-graph.jpg diff --git a/components/esp_adc_cal/Kconfig b/components/esp_adc_cal/Kconfig new file mode 100644 index 0000000000..0db3d4e1f4 --- /dev/null +++ b/components/esp_adc_cal/Kconfig @@ -0,0 +1,37 @@ +menu "ADC-Calibration" + +config ADC_CAL_EFUSE_TP_DISABLE + bool "Disable Two Point values" + default "n" + help + Some ESP32s have Two Point calibration values burned into eFuse. Enabling + this option will prevent the ADC calibration component from using Two Point + values if they are available. + +config ADC_CAL_EFUSE_VREF_DISABLE + bool "Disable eFuse Vref" + default "n" + help + Some ESP32s have ADC Vref burned into eFuse. Enabling this option will + prevent the ADC calibration component from using eFuse Vref if they are + available. + +config ADC_CAL_DEFAULT_VREF_DISABLE + bool "Disable Default Vref" + default "n" + help + The esp_adc_cal_characterize() function requires the user to provide a + vref_default argument to be used if eFuse values are unavailable. Enabling + this option will prevent the ADC calibration component from using the + vref_default argument. Note that if eFuse values are also unavailabe, + the esp_adc_cal_characterize will trigger an abort. + +config ADC_CAL_NO_BLK3_RESERVE_FLAG + bool "EFUSE_BLK3_PART_RESERVE not set" + default "n" + help + By default, ESP32s will have the EFUSE_BLK3_PART_RESERVE flag set if it + uses BLK3 of eFuse to store Two Point values. Some ESP32s do not set this + flag. Enable this option if that is the case + +endmenu # ADC-Calibration diff --git a/components/esp_adc_cal/esp_adc_cal.c b/components/esp_adc_cal/esp_adc_cal.c index d07c3792bd..f7621fc162 100644 --- a/components/esp_adc_cal/esp_adc_cal.c +++ b/components/esp_adc_cal/esp_adc_cal.c @@ -13,99 +13,444 @@ // limitations under the License. #include +#include "esp_types.h" #include "driver/adc.h" - +#include "soc/efuse_reg.h" +#include "esp_err.h" +#include "esp_log.h" +#include "assert.h" +#include "esp_adc_cal_constants.h" #include "esp_adc_cal.h" -static const esp_adc_cal_lookup_table_t *table_ptrs[4] = {&esp_adc_cal_table_atten_0, - &esp_adc_cal_table_atten_1, - &esp_adc_cal_table_atten_2, - &esp_adc_cal_table_atten_3}; +#define CONFIG_ADC_CAL_EFUSE_TP_DISABLE +/* ----------------------------- Configuration ------------------------------ */ -uint32_t get_adc_vref_from_efuse() +#ifdef CONFIG_ADC_CAL_EFUSE_TP_DISABLE +#define EFUSE_TP_ENABLED 0 +#else +#define EFUSE_TP_ENABLED 1 +#endif + +#ifdef CONFIG_ADC_CAL_EFUSE_VREF_DISABLE +#define EFUSE_VREF_ENABLED 0 +#else +#define EFUSE_VREF_ENABLED 1 +#endif + +#ifdef CONFIG_ADC_CAL_DEFAULT_VREF_DISABLE +#define DEFAULT_VREF_ENABLED 0 +#else +#define DEFAULT_VREF_ENABLED 1 +#endif + +/* ------------------------------ eFuse Access ----------------------------- */ + +#define BLK3_RESERVED_REG EFUSE_BLK0_RDATA4_REG + +#define VREF_REG EFUSE_BLK0_RDATA4_REG +#define VREF_SIGN_BIT 0x10 +#define VREF_MAG_BITS 0x0F +#define VREF_STEP_SIZE 7 +#define VREF_OFFSET 1100 + +#define TP_REG EFUSE_BLK3_RDATA3_REG +#define TP_LOW1_OFFSET 278 +#define TP_LOW2_OFFSET 421 +#define TP_HIGH1_OFFSET 3265 +#define TP_HIGH2_OFFSET 3406 +#define TP_LOW_SIGN_BIT 0x40 +#define TP_LOW_MAG_BITS 0x3F +#define TP_LOW_VOLTAGE 150 +#define TP_HIGH_SIGN_BIT 0x100 +#define TP_HIGH_MAG_BITS 0xFF +#define TP_HIGH_VOLTAGE 850 +#define TP_STEP_SIZE 4 + +/* -------------------- Linear and LUT mode constants ----------------------- */ + +#define LIN_COEFF_A_SCALE 65536 +#define LIN_COEFF_A_ROUND (LIN_COEFF_A_SCALE/2) +#define LUT_VREF_IDEAL 1100 +#define LUT_VREF_LOW 1000 +#define LUT_VREF_HIGH 1200 +#define LUT_ADC_STEP_SIZE 128 +#define ADC_12_BIT_MAX 4095 + +#define ADC_CAL_ASSERT(cond, ret) ({ \ + if(!(cond)){ \ + return ret; \ + } \ +}) + +#define ESP_ADC_CAL_ERR_STR "No characterization possible" +static const char* ESP_ADC_CAL_TAG = "esp_adc_cal_log"; + +extern const uint32_t adc1_lin_tp_atten_scale[4]; +extern const uint32_t adc2_lin_tp_atten_scale[4]; +extern const uint32_t adc1_lin_tp_atten_offset[4]; +extern const uint32_t adc2_lin_tp_atten_offset[4]; +extern const uint32_t adc1_lin_vref_atten_scale[4]; +extern const uint32_t adc2_lin_vref_atten_scale[4]; +extern const uint32_t adc1_lin_vref_atten_offset[4]; +extern const uint32_t adc2_lin_vref_atten_offset[4]; + +extern const esp_adc_cal_lookup_table_t lut_atten0_adc1; +extern const esp_adc_cal_lookup_table_t lut_atten0_adc2; +extern const esp_adc_cal_lookup_table_t lut_atten1_adc1; +extern const esp_adc_cal_lookup_table_t lut_atten1_adc2; +extern const esp_adc_cal_lookup_table_t lut_atten2_adc1; +extern const esp_adc_cal_lookup_table_t lut_atten2_adc2; +extern const esp_adc_cal_lookup_table_t lut_atten3_adc1; +extern const esp_adc_cal_lookup_table_t lut_atten3_adc2; + +/* ----------------------- EFuse Access Functions --------------------------- */ + +//Check if Vref is burned in eFuse +static bool check_efuse_vref() { - //TODO: Replaced with read to eFuse once ATE confirms location of 5 bits - return 0; + //Check eFuse for vref + return (REG_GET_FIELD(VREF_REG, EFUSE_RD_ADC_VREF) != 0) ? true : false; } -void esp_adc_cal_get_characteristics(uint32_t v_ref, +//Check if Two Point values are burned in eFuse +static bool check_efuse_tp() +{ +#ifndef CONFIG_ADC_CAL_NO_BLK3_RESERVE_FLAG + //BLK3_PART_RESERVE flag must be set + if(REG_GET_FIELD(BLK3_RESERVED_REG, EFUSE_RD_BLK3_PART_RESERVE) == 0){ + return false; + } +#endif + //All TP cal values must be non zero + if((REG_GET_FIELD(TP_REG, EFUSE_RD_ADC1_TP_LOW) != 0) && + (REG_GET_FIELD(TP_REG, EFUSE_RD_ADC2_TP_LOW) != 0) && + (REG_GET_FIELD(TP_REG, EFUSE_RD_ADC1_TP_HIGH) != 0) && + (REG_GET_FIELD(TP_REG, EFUSE_RD_ADC2_TP_HIGH) != 0)){ + return true; + } else { + return false; + } +} + +//Read Vref from eFuse +static uint32_t read_efuse_vref() +{ + //eFuse stores deviation from ideal reference voltage + uint32_t ret = VREF_OFFSET; //Ideal vref + uint32_t bits = REG_GET_FIELD(VREF_REG, EFUSE_ADC_VREF); + + if(bits & VREF_SIGN_BIT){ //Negative deviation from ideal Vref +#ifndef CONFIG_ADC_CAL_NO_BLK3_RESERVE_FLAG + //Deviation stored in sign-magnitude format + ret -= (bits & VREF_MAG_BITS) * VREF_STEP_SIZE; +#else + //Deviation stored in two's complement + ret -= (((~bits)+1) & VREF_MAG_BITS) * VREF_STEP_SIZE; +#endif + } else { //Positive deviation from ideal Vref + ret += (bits & VREF_MAG_BITS) * VREF_STEP_SIZE; + } + return ret; //ADC Vref in mV +} + +//Read Two Point low reading from eFuse +static uint32_t read_efuse_tp_low(adc_unit_t adc_num) +{ + //ADC reading at 150mV stored in two's complement format + uint32_t ret; + uint32_t bits; + + if(adc_num == ADC_UNIT_1){ + ret = TP_LOW1_OFFSET; + bits = REG_GET_FIELD(TP_REG, EFUSE_RD_ADC1_TP_LOW); + } else { + ret = TP_LOW2_OFFSET; + bits = REG_GET_FIELD(TP_REG, EFUSE_RD_ADC2_TP_LOW); + } + + //Represented in two's complement format + if(bits & TP_LOW_SIGN_BIT){ //Negative + ret -= (((~bits) + 1) & TP_LOW_MAG_BITS) * TP_STEP_SIZE; + } else { //Positive + ret += (bits & TP_LOW_MAG_BITS) * TP_STEP_SIZE; + } + return ret; //Reading of ADC at 150mV +} + +//Read Two Point high reading from eFuse +static uint32_t read_efuse_tp_high(adc_unit_t adc_num) +{ + //ADC reading at 850mV stored in two's complement format + uint32_t ret; + uint32_t bits; + if(adc_num == ADC_UNIT_1){ + ret = TP_HIGH1_OFFSET; + bits = REG_GET_FIELD(TP_REG, EFUSE_RD_ADC1_TP_HIGH); + } else { + ret = TP_HIGH2_OFFSET; + bits = REG_GET_FIELD(TP_REG, EFUSE_RD_ADC2_TP_HIGH); + } + + //Represented in two's complement format + if(bits & TP_HIGH_SIGN_BIT){ //Negative + ret -= (((~bits) + 1) & TP_HIGH_MAG_BITS) * TP_STEP_SIZE; + } else { //Positive + ret += (bits & TP_HIGH_MAG_BITS) * TP_STEP_SIZE; + } + return ret; //Reading of ADC at 850mV +} + +/* ----------------------- Characterization Functions ----------------------- */ + +//Linear characterization using Two Point values +static void characterize_lin_tp(adc_unit_t adc_num, + adc_atten_t atten, + uint32_t high, + uint32_t low, + uint32_t *coeff_a, + uint32_t *coeff_b) +{ + const uint32_t *atten_scales; + const uint32_t *atten_offsets; + + if(adc_num == ADC_UNIT_1){ //Using ADC 1 + atten_scales = adc1_lin_tp_atten_scale; + atten_offsets = adc1_lin_tp_atten_offset; + } else { //Using ADC 2 + atten_scales = adc2_lin_tp_atten_scale; + atten_offsets = adc2_lin_tp_atten_offset; + } + //Characterize ADC-Voltage curve as y = (coeff_a * x) + coeff_b + uint32_t delta_x = high - low; + uint32_t delta_v = TP_HIGH_VOLTAGE - TP_LOW_VOLTAGE; + //coeff_a = (delta_v/delta_x) * atten_scale + *coeff_a = (delta_v * atten_scales[atten] + (delta_x/2)) / delta_x; //+(delta_x/2) for rounding + //coeff_b = high_v - ((delta_v/delta_x) * high_x) + atten_offset + *coeff_b = TP_HIGH_VOLTAGE - ((delta_v * high + (delta_x/2)) / delta_x) + atten_offsets[atten]; +} + +//Linear characterization using Vref +static void characterize_lin_vref(adc_unit_t adc_num, + adc_atten_t atten, + uint32_t vref, + uint32_t *coeff_a, + uint32_t *coeff_b) +{ + const uint32_t *atten_scales;; + const uint32_t *atten_offsets; + + if(adc_num == ADC_UNIT_1){ //Using ADC 1 + atten_scales = adc1_lin_vref_atten_scale; + atten_offsets = adc1_lin_vref_atten_offset; + } else { //Using ADC 2 + atten_scales = adc2_lin_vref_atten_scale; + atten_offsets = adc2_lin_vref_atten_offset; + } + //Characterize ADC-Voltage curve as y = (coeff_a * x) + coeff_b + //coeff_a = (vref/4096) * atten_scale + *coeff_a = (vref * atten_scales[atten]) / (ADC_12_BIT_MAX + 1); + *coeff_b = atten_offsets[atten]; +} + +//LUT characterization +static void characterize_lut(adc_unit_t adc_num, + adc_atten_t atten, + uint32_t vref, + const esp_adc_cal_lookup_table_t **table_ptr) +{ + //Get pointer to the correct lookup table + if(atten == ADC_ATTEN_DB_0){ + *table_ptr = (adc_num == ADC_UNIT_1) ? &lut_atten0_adc1 : &lut_atten0_adc2; + } else if (atten == ADC_ATTEN_DB_2_5){ + *table_ptr = (adc_num == ADC_UNIT_1) ? &lut_atten1_adc1 : &lut_atten1_adc2; + } else if (atten == ADC_ATTEN_DB_6){ + *table_ptr = (adc_num == ADC_UNIT_1) ? &lut_atten2_adc1 : &lut_atten2_adc2; + } else { + *table_ptr = (adc_num == ADC_UNIT_1) ? &lut_atten3_adc1 : &lut_atten3_adc2; + } +} + +/* ------------------------ Conversion Functions --------------------------- */ + +//Calculate voltage using linear characterization of the ADC curve +static uint32_t linear_raw_to_voltage(uint32_t adc, + uint32_t gain, + uint32_t offset) +{ + //ADC Curve is characterized as y = coeff_a * adc + coeff_b + //All gains scaled by 65536 + return (((gain * adc) + LIN_COEFF_A_ROUND) / LIN_COEFF_A_SCALE) + offset; +} + +//Calculate voltage using a lookup table +static uint32_t lut_raw_to_voltage(uint32_t adc, uint32_t vref, const esp_adc_cal_lookup_table_t *table) +{ + //Get index of lower bound points of LUT + uint32_t i = (adc / LUT_ADC_STEP_SIZE); + + //Let the X Axis be Vref, Y axis be ADC reading, and Z be voltage + int x2dist = LUT_VREF_HIGH - vref; //(x2 - x) + int x1dist = vref - LUT_VREF_LOW; //(x - x1) + int y2dist = ((i+1) * LUT_ADC_STEP_SIZE) - adc; //(y2 - y) + int y1dist = adc - (i * LUT_ADC_STEP_SIZE); //(y - y1) + + //For points for bilinear interpolation + int q11 = (int)table->low_vref_curve[i]; //Lower bound point of low_vref_curve + int q12 = (int)table->low_vref_curve[i+1]; //Upper bound point of low_vref_curve + int q21 = (int)table->high_vref_curve[i]; //Lower bound point of high_vref_curve + int q22 = (int)table->high_vref_curve[i+1]; //Upper bound point of high_vref_curve + + //Bilinear interpolation + //z = 1/((x2-x1)*(y2-y1)) * ( (q11*x2dist*y2dist) + (q21*x1dist*y2dist) + (q12*x2dist*y1dist) + (q22*x1dist*y1dist) ) + int voltage = (q11*x2dist*y2dist) + (q21*x1dist*y2dist) + (q12*x2dist*y1dist) + (q22*x1dist*y1dist); + voltage += ((LUT_VREF_HIGH - LUT_VREF_LOW) * LUT_ADC_STEP_SIZE)/2; //Integer division rounding + voltage /= ((LUT_VREF_HIGH - LUT_VREF_LOW) * LUT_ADC_STEP_SIZE); //Divide by ((x2-x1)*(y2-y1)) + return (uint32_t)voltage; +} + +/* ------------------------- Public API ------------------------------------- */ + +esp_err_t esp_adc_cal_check_efuse(esp_adc_cal_value_t source) +{ + if(source == ESP_ADC_CAL_VAL_EFUSE_TP){ + return (check_efuse_tp()) ? ESP_OK : ESP_ERR_NOT_SUPPORTED; + } else if (source == ESP_ADC_CAL_VAL_EFUSE_VREF){ + return (check_efuse_vref()) ? ESP_OK : ESP_ERR_NOT_SUPPORTED; + } else { + return ESP_ERR_INVALID_ARG; + } +} + +esp_adc_cal_value_t esp_adc_cal_characterize(adc_unit_t adc_num, + adc_atten_t atten, + esp_adc_cal_mode_t mode, + uint32_t vref_default, + esp_adc_cal_characteristics_t *chars) +{ + assert((adc_num == ADC_UNIT_1) || (adc_num == ADC_UNIT_2)); + assert(chars != NULL); + + //Check eFuse if enabled to do so + bool efuse_tp_present = check_efuse_tp(); + bool efuse_vref_present = check_efuse_vref(); + esp_adc_cal_value_t ret; + + if(mode == ESP_ADC_CAL_MODE_LIN){ + if(efuse_tp_present && EFUSE_TP_ENABLED){ + uint32_t high = read_efuse_tp_high(adc_num); + uint32_t low = read_efuse_tp_low(adc_num); + characterize_lin_tp(adc_num, atten, high, low, &chars->linear_chars.coeff_a, &chars->linear_chars.coeff_b); + ret = ESP_ADC_CAL_VAL_EFUSE_TP; + } else if(efuse_vref_present && EFUSE_VREF_ENABLED){ + uint32_t vref = read_efuse_vref(); + characterize_lin_vref(adc_num, atten, vref, &chars->linear_chars.coeff_a, &chars->linear_chars.coeff_b); + ret = ESP_ADC_CAL_VAL_EFUSE_VREF; + } else if(DEFAULT_VREF_ENABLED){ + characterize_lin_vref(adc_num, atten, vref_default, &chars->linear_chars.coeff_a, &chars->linear_chars.coeff_b); + ret = ESP_ADC_CAL_VAL_DEFAULT_VREF; + } else { + goto err; + } + } else if (mode == ESP_ADC_CAL_MODE_LUT){ + if(efuse_vref_present && EFUSE_VREF_ENABLED){ + uint32_t vref = read_efuse_vref(); + chars->lut_chars.vref = vref; + characterize_lut(adc_num, atten, vref, &chars->lut_chars.table); + ret = ESP_ADC_CAL_VAL_EFUSE_VREF; + } else if(DEFAULT_VREF_ENABLED){ + chars->lut_chars.vref = vref_default; + characterize_lut(adc_num, atten, vref_default, &chars->lut_chars.table); + ret = ESP_ADC_CAL_VAL_DEFAULT_VREF; + } else{ + goto err; + } + } else { + goto err; + } + chars->mode = mode; + chars->adc_num = adc_num; + return ret; + + err: //No possible characterization + // usually only occurs if users manually disable calibration values and modes in menuconfig + ESP_LOGE(ESP_ADC_CAL_TAG, ESP_ADC_CAL_ERR_STR); + abort(); + return ESP_ADC_CAL_VAL_DEFAULT_VREF; //Should not reach this point, added to suppress Eclipse warnings +} + +uint32_t esp_adc_cal_raw_to_voltage(uint32_t adc_reading, + adc_bits_width_t bit_width, + const esp_adc_cal_characteristics_t *chars) +{ + assert(chars != NULL); + //Scale adc_rading if not 12 bits wide + if(bit_width != ADC_WIDTH_BIT_12){ + adc_reading = (adc_reading << (ADC_WIDTH_BIT_12 - bit_width)); + //If adc_reading is out of 12bit range + if(adc_reading > ADC_12_BIT_MAX){ + adc_reading = ADC_12_BIT_MAX; //Set to 12bit max + } + } + + //Convert ADC reading to voltage in mV + if(chars->mode == ESP_ADC_CAL_MODE_LUT){ //Lookup Table + assert(chars->lut_chars.table != NULL); + return lut_raw_to_voltage(adc_reading, chars->lut_chars.vref, chars->lut_chars.table); + } else { + return linear_raw_to_voltage(adc_reading, chars->linear_chars.coeff_a, chars->linear_chars.coeff_b); + } +} + +esp_err_t adc_to_voltage(adc_channel_t channel, + adc_bits_width_t bit_width, + const esp_adc_cal_characteristics_t *chars, + uint32_t *voltage) +{ + //Check parameters + ADC_CAL_ASSERT(chars != NULL, ESP_ERR_INVALID_ARG); + ADC_CAL_ASSERT(voltage != NULL, ESP_ERR_INVALID_ARG); + + if(chars->adc_num == ADC_UNIT_1){ + //Check channel is valid on ADC1 + ADC_CAL_ASSERT((adc1_channel_t)channel < ADC1_CHANNEL_MAX, ESP_ERR_INVALID_ARG); + uint32_t adc_reading = (uint32_t)adc1_get_raw(channel); //Todo: get_raw function to change + *voltage = esp_adc_cal_raw_to_voltage(adc_reading, bit_width, chars); + } else { + //Check channel is valid on ADC2 + ADC_CAL_ASSERT((adc2_channel_t)channel < ADC2_CHANNEL_MAX, ESP_ERR_INVALID_ARG); + int adc_reading; + if(adc2_get_raw(channel, bit_width, &adc_reading) != ESP_OK){ + //Timed out waiting for ADC2 + return ESP_ERR_TIMEOUT; + } + *voltage = esp_adc_cal_raw_to_voltage((uint32_t)adc_reading, bit_width, chars); + } + return ESP_OK; +} + +/* ------------------------ Deprecated API --------------------------------- */ + +void esp_adc_cal_get_characteristics(uint32_t vref, adc_atten_t atten, adc_bits_width_t bit_width, esp_adc_cal_characteristics_t *chars) { - chars->v_ref = v_ref; - chars->table = table_ptrs[atten]; - chars->bit_width = bit_width; - if (v_ref >= ADC_CAL_LOW_V_REF) { - chars->gain = ((chars->v_ref - ADC_CAL_LOW_V_REF) - * chars->table->gain_m) - + chars->table->gain_c; - chars->offset = (((chars->v_ref - ADC_CAL_LOW_V_REF) - * chars->table->offset_m) - + chars->table->offset_c - + ((1 << ADC_CAL_OFFSET_SCALE) / 2)) - >> ADC_CAL_OFFSET_SCALE; //Bit shift to cancel 2^10 multiplier - chars->ideal_offset = (((ADC_CAL_IDEAL_V_REF - ADC_CAL_LOW_V_REF) - * chars->table->offset_m) - + chars->table->offset_c - + ((1 << ADC_CAL_OFFSET_SCALE) / 2)) //Rounding - >> ADC_CAL_OFFSET_SCALE; - } else { //For case where v_ref is smaller than low bound resulting in negative - chars->gain = chars->table->gain_c - - ((ADC_CAL_LOW_V_REF - chars->v_ref) - * chars->table->gain_m); - chars->offset = (chars->table->offset_c - - ((chars->v_ref - ADC_CAL_LOW_V_REF) - * chars->table->offset_m) - + ((1 << ADC_CAL_OFFSET_SCALE) / 2)) //Rounding - >> ADC_CAL_OFFSET_SCALE; //Bit shift to cancel 2^10 multiplier - chars->ideal_offset = (chars->table->offset_c - - ((ADC_CAL_IDEAL_V_REF - ADC_CAL_LOW_V_REF) - * chars->table->offset_m) - + ((1 << ADC_CAL_OFFSET_SCALE) / 2)) //Rounding - >> ADC_CAL_OFFSET_SCALE; - } -} + //Default to ADC1 and LUT mode + assert(chars != NULL); -static uint32_t esp_adc_cal_interpolate_round(uint32_t lower, uint32_t upper, - uint32_t step, uint32_t point) -{ - //Interpolate 'point' between 'lower' and 'upper' seperated by 'step' - return ((lower * step) - (lower * point) + (upper * point) + (step / 2)) / step; -} - -uint32_t esp_adc_cal_raw_to_voltage(uint32_t adc, - const esp_adc_cal_characteristics_t *chars) -{ - //Scale ADC to 12 bit width (0 to 4095) - adc <<= (ADC_WIDTH_BIT_12 - chars->bit_width); - uint32_t i = (adc >> chars->table->bit_shift); //find index for lut voltages - //Refernce LUT to obtain voltage using index - uint32_t voltage = esp_adc_cal_interpolate_round(chars->table->voltage[i], - chars->table->voltage[i + 1], - (1 << chars->table->bit_shift), - adc - (i << chars->table->bit_shift)); - /* - * Apply Gain, scaling(bit shift) and offset to interpolated voltage - * v_true = (((v_id - off_id)*gain)*scaling) + off_true - */ - if (voltage > chars->ideal_offset) { - voltage = (voltage - chars->ideal_offset) * chars->gain; - voltage += (1 << ADC_CAL_GAIN_SCALE) / 2; //For rounding when scaled - voltage >>= ADC_CAL_GAIN_SCALE; - voltage += chars->offset; - } else { //For case where voltage is less than ideal offset leading to negative value - voltage = ((chars->ideal_offset - voltage) * chars->gain); - voltage += (1 << ADC_CAL_GAIN_SCALE) / 2; //For rounding when scaled - voltage >>= ADC_CAL_GAIN_SCALE; - voltage = chars->offset - voltage; - } - - return voltage; + //bit_width parameter unused, kept due to legacy API + chars->mode = ESP_ADC_CAL_MODE_LUT; + chars->lut_chars.vref = vref; + characterize_lut(ADC_UNIT_1, atten, vref, &chars->lut_chars.table); + chars->adc_num = ADC_UNIT_1; } uint32_t adc1_to_voltage(adc1_channel_t channel, const esp_adc_cal_characteristics_t *chars) { - return esp_adc_cal_raw_to_voltage((uint32_t)adc1_get_raw(channel), chars); + assert(chars != NULL); + uint32_t voltage = 0; + adc_to_voltage((adc_channel_t) channel, ADC_WIDTH_BIT_12, chars, &voltage); + return voltage; } + diff --git a/components/esp_adc_cal/esp_adc_cal_constants.c b/components/esp_adc_cal/esp_adc_cal_constants.c new file mode 100644 index 0000000000..833d2bcb3a --- /dev/null +++ b/components/esp_adc_cal/esp_adc_cal_constants.c @@ -0,0 +1,222 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "esp_adc_cal.h" +#include "esp_adc_cal_constants.h" + +/* ------------------------- Lookup Tables ---------------------------------- */ + +/** + * Mean error of 70 modules: 2.674297mV + * Max error of 70 modules: 12.176238mV + * Mean of max errors of 70 modules: 7.079913mV + */ +const esp_adc_cal_lookup_table_t lut_atten0_adc1 = { + .low_vref_curve = { + 58, 84, 114, 142, 168, 196, 224, 252, + 281, 308, 335, 363, 390, 417, 445, 473, + 501, 528, 556, 583, 611, 637, 665, 692, + 720, 747, 775, 802, 830, 856, 883, 910, + 937 + }, + .high_vref_curve = { + 86, 106, 152, 184, 218, 251, 283, 316, + 348, 381, 415, 447, 480, 513, 546, 579, + 612, 644, 677, 710, 742, 775, 808, 841, + 874, 906, 938, 971, 1003, 1035, 1068, 1100, + 1133 + } +}; + +/** + * Mean error of 70 modules: 3.950325mV + * Max error of 70 modules: 20.975788mV + * Mean of max errors of 70 modules: 6.629054mV + */ +const esp_adc_cal_lookup_table_t lut_atten0_adc2 = { + .low_vref_curve = { + 49, 75, 105, 132, 160, 187, 214, 241, + 268, 296, 324, 352, 380, 407, 434, 461, + 488, 516, 545, 572, 600, 627, 654, 681, + 708, 735, 763, 791, 818, 845, 872, 899, + 927 + }, + .high_vref_curve = { + 72, 103, 137, 170, 202, 235, 268, 302, + 335, 367, 399, 432, 464, 497, 530, 563, + 596, 628, 661, 693, 725, 758, 791, 824, + 857, 889, 921, 954, 986, 1018, 1051, 1084, + 1116 + } +}; + +/** + * Mean error of 70 modules: 3.339671mV + * Max error of 70 modules: 13.476428mV + * Mean of max errors of 70 modules: 5.818235mV + */ +const esp_adc_cal_lookup_table_t lut_atten1_adc1 = { + .low_vref_curve = { + 57, 87, 130, 168, 204, 240, 277, 313, + 349, 387, 424, 461, 498, 534, 571, 607, + 644, 680, 717, 753, 789, 826, 862, 898, + 934, 970, 1007, 1043, 1078, 1115, 1151, 1187, + 1223 + }, + .high_vref_curve = { + 89, 128, 178, 221, 264, 309, 353, 397, + 442, 484, 528, 572, 616, 659, 703, 747, + 790, 833, 877, 921, 964, 1006, 1050, 1094, + 1137, 1179, 1222, 1266, 1309, 1351, 1394, 1437, + 1481 + } +}; + +/** + * Mean error of 70 modules: 5.319836mV + * Max error of 70 modules: 29.034477mV + * Mean of max errors of 70 modules: 9.226072mV + */ +const esp_adc_cal_lookup_table_t lut_atten1_adc2 = { + .low_vref_curve = { + 47, 86, 122, 159, 196, 232, 268, 305, + 340, 377, 415, 452, 487, 525, 562, 598, + 635, 671, 708, 745, 782, 817, 853, 890, + 926, 962, 999, 1035, 1071, 1107, 1144, 1180, + 1215 + }, + .high_vref_curve = { + 78, 113, 165, 209, 251, 295, 339, 383, + 427, 470, 514, 558, 602, 644, 688, 732, + 775, 818, 862, 905, 948, 992, 1036, 1079, + 1122, 1164, 1208, 1252, 1295, 1338, 1381, 1424, + 1468 + } +}; + +/** + * Mean error of 70 modules: 4.943406mV + * Max error of 70 modules: 19.203104mV + * Mean of max errors of 70 modules: 9.462435mV + */ +const esp_adc_cal_lookup_table_t lut_atten2_adc1 = { + .low_vref_curve = { + 72, 117, 177, 228, 281, 330, 382, 434, + 483, 536, 587, 639, 690, 740, 791, 842, + 892, 942, 992, 1042, 1092, 1141, 1191, 1241, + 1290, 1339, 1391, 1441, 1490, 1540, 1591, 1642, + 1692 + }, + .high_vref_curve = { + 120, 175, 243, 305, 364, 426, 488, 550, + 612, 671, 732, 793, 852, 912, 973, 1033, + 1092, 1151, 1211, 1272, 1331, 1390, 1450, 1511, + 1571, 1631, 1691, 1752, 1812, 1872, 1933, 1994, + 2056 + } +}; + +/** + * Mean error of 70 modules: 7.782408mV + * Max error of 70 modules: 45.327423mV + * Mean of max errors of 70 modules: 13.569581mV + */ +const esp_adc_cal_lookup_table_t lut_atten2_adc2 = { + .low_vref_curve = { + 61, 119, 164, 216, 267, 317, 369, 420, + 471, 522, 574, 625, 676, 726, 777, 828, + 878, 928, 979, 1030, 1080, 1130, 1180, 1230, + 1280, 1330, 1381, 1432, 1483, 1532, 1583, 1634, + 1685 + }, + .high_vref_curve = { + 102, 152, 225, 286, 347, 407, 469, 530, + 590, 651, 712, 773, 832, 892, 953, 1013, + 1073, 1132, 1192, 1253, 1313, 1372, 1432, 1494, + 1554, 1613, 1675, 1735, 1795, 1856, 1917, 1978, + 2039 + } +}; + +/** + * Mean error of 70 modules: 9.568297mV + * Max error of 70 modules: 44.480817mV + * Mean of max errors of 70 modules: 20.165069mV + */ +const esp_adc_cal_lookup_table_t lut_atten3_adc1 = { + .low_vref_curve = { + 88, 185, 285, 380, 473, 568, 664, 759, + 853, 945, 1039, 1133, 1224, 1316, 1410, 1505, + 1599, 1692, 1788, 1886, 1983, 2081, 2186, 2297, + 2405, 2511, 2615, 2710, 2793, 2868, 2937, 3000, + 3061 + }, + .high_vref_curve = { + 173, 271, 399, 515, 628, 740, 853, 965, + 1075, 1186, 1299, 1411, 1523, 1634, 1749, 1863, + 1975, 2087, 2201, 2314, 2422, 2525, 2622, 2707, + 2779, 2844, 2901, 2956, 3008, 3059, 3110, 3160, + 3210 + } +}; + +/** + * Mean error of 70 modules: 12.799173mV + * Max error of 70 modules: 60.129227mV + * Mean of max errors of 70 modules: 23.334659mV + */ +const esp_adc_cal_lookup_table_t lut_atten3_adc2 = { + .low_vref_curve = { + 83, 177, 274, 370, 465, 559, 655, 751, + 844, 937, 1031, 1126, 1218, 1312, 1407, 1502, + 1597, 1691, 1787, 1885, 1983, 2081, 2185, 2293, + 2400, 2506, 2612, 2709, 2793, 2868, 2937, 2999, + 3059 + }, + .high_vref_curve = { + 155, 257, 383, 498, 610, 722, 836, 947, + 1058, 1170, 1283, 1396, 1507, 1619, 1733, 1848, + 1960, 2073, 2188, 2300, 2408, 2513, 2611, 2698, + 2773, 2838, 2895, 2946, 2996, 3044, 3092, 3139, + 3186 + } +}; + +/* ---------------- Constants for linear calibration using TP --------------- */ + +// (0.999518539509928, 1.32714033039721, 1.83698541693337, 3.42269475397192) * 65536 +const uint32_t adc1_lin_tp_atten_scale[4] = {65504, 86975, 120389, 224310}; + +// (0.99895306551877194, 1.3253993908658808, 1.8373986067502703, 3.4287787961634124) * 65536 +const uint32_t adc2_lin_tp_atten_scale[4] = {65467, 86861, 120416, 224708}; + +// (0.369882210218334, 1.33352056600476, 26.5266258898132, 54.2706443679156) +const uint32_t adc1_lin_tp_atten_offset[4] = {0, 1, 27, 54}; + +// (0.0, 3.59737421, 26.3951927, 64.738429) +const uint32_t adc2_lin_tp_atten_offset[4] = {0, 9, 26, 66}; + +/* ------------- Constants for linear calibration using Vref ---------------- */ + +// (0.87632707, 1.16327136, 1.60951523, 2.99991113) * 65536 +const uint32_t adc1_lin_vref_atten_scale[4] = {57431, 76236, 105481, 196602}; + +// (0.87335934, 1.16233322, 1.61251264, 3.00858015) * 65536 +const uint32_t adc2_lin_vref_atten_scale[4] = {57236, 76175, 105678, 197170}; + +// (74.97079, 77.67434785, 106.58843993, 142.18959459) +const uint32_t adc1_lin_vref_atten_offset[4] = {75, 78, 107, 142}; + +// (62.73368574, 66.33498527, 89.23584218, 127.69820652) +const uint32_t adc2_lin_vref_atten_offset[4] = {63, 66, 89, 128}; diff --git a/components/esp_adc_cal/esp_adc_cal_lookup_tables.c b/components/esp_adc_cal/esp_adc_cal_lookup_tables.c deleted file mode 100644 index 111f75c4b0..0000000000 --- a/components/esp_adc_cal/esp_adc_cal_lookup_tables.c +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "esp_adc_cal.h" - -/** - * Mean error of 219 modules: 3.756418mV - * Max error of 219 modules: 26.314087mV - * Mean of max errors of 219 modules: 7.387282mV - */ -const esp_adc_cal_lookup_table_t esp_adc_cal_table_atten_0 = { - .gain_m = 56, - .gain_c = 59928, - .offset_m = 91, - .offset_c = 52798, - .bit_shift = 7, - .voltage = { - 54, 90, 120, 150, 180, 209, 241, 271, - 301, 330, 360, 391, 421, 450, 480, 511, - 541, 571, 601, 630, 660, 690, 720, 750, - 780, 809, 839, 870, 900, 929, 959, 988, - 1018 - } -}; - -/** - * Mean error of 219 modules: 4.952441mV - * Max error of 219 modules: 38.235321mV - * Mean of max errors of 219 modules: 9.718749mV - */ -const esp_adc_cal_lookup_table_t esp_adc_cal_table_atten_1 = { - .gain_m = 57, - .gain_c = 59834, - .offset_m = 108, - .offset_c = 54733, - .bit_shift = 7, - .voltage = { - 60, 102, 143, 184, 223, 262, 303, 343, - 383, 423, 463, 503, 543, 583, 623, 663, - 703, 742, 782, 823, 862, 901, 942, 981, - 1022, 1060, 1101, 1141, 1180, 1219, 1259, 1298, - 1338 - } -}; - -/** - * Mean error of 219 modules: 6.793558mV - * Max error of 219 modules: 51.435440mV - * Mean of max errors of 219 modules: 13.083121mV - */ -const esp_adc_cal_lookup_table_t esp_adc_cal_table_atten_2 = { - .gain_m = 56, - .gain_c = 59927, - .offset_m = 154, - .offset_c = 71995, - .bit_shift = 7, - .voltage = { - 82, 138, 194, 250, 305, 360, 417, 473, - 529, 584, 639, 696, 751, 806, 861, 917, - 971, 1026, 1081, 1136, 1192, 1246, 1301, 1356, - 1411, 1466, 1522, 1577, 1632, 1687, 1743, 1799, - 1855 - } -}; - -/** - * Mean error of 219 modules: 13.149460mV - * Max error of 219 modules: 97.102951mV - * Mean of max errors of 219 modules: 35.538924mV - */ -const esp_adc_cal_lookup_table_t esp_adc_cal_table_atten_3 = { - .gain_m = 33, - .gain_c = 62214, - .offset_m = 610, - .offset_c = 108422, - .bit_shift = 7, - .voltage = { - 110, 221, 325, 430, 534, 637, 741, 845, - 947, 1049, 1153, 1256, 1358, 1461, 1565, 1670, - 1774, 1878, 1983, 2088, 2192, 2293, 2393, 2490, - 2580, 2665, 2746, 2820, 2885, 2947, 3007, 3060, - 3107 - } -}; - diff --git a/components/esp_adc_cal/include/esp_adc_cal.h b/components/esp_adc_cal/include/esp_adc_cal.h index adb6598496..9cee127a46 100644 --- a/components/esp_adc_cal/include/esp_adc_cal.h +++ b/components/esp_adc_cal/include/esp_adc_cal.h @@ -20,131 +20,171 @@ extern "C" { #endif #include +#include "esp_err.h" #include "driver/adc.h" +#include "esp_adc_cal_constants.h" -/** @cond */ -#define ADC_CAL_GAIN_SCALE 16 -#define ADC_CAL_OFFSET_SCALE 10 +/** + * @brief ADC characterization mode + */ +typedef enum { + ESP_ADC_CAL_MODE_LIN = 0, /**< Characterize the ADC as a linear curve*/ + ESP_ADC_CAL_MODE_LUT= 1, /**< Characterize the ADC using a lookup table*/ +} esp_adc_cal_mode_t; -#define ADC_CAL_IDEAL_V_REF 1100 //In mV -#define ADC_CAL_LOW_V_REF 1000 -#define ADC_CAL_HIGH_V_REF 1200 -#define ADC_CAL_MIN 0 -#define ADC_CAL_MAX 4095 -/** @endcond */ +/** + * @brief Type of calibration value used in characterization + */ +typedef enum { + ESP_ADC_CAL_VAL_EFUSE_VREF = 0, /**< Characterization based on reference voltage stored in eFuse*/ + ESP_ADC_CAL_VAL_EFUSE_TP = 1, /**< Characterization based on Two Point values stored in eFuse*/ + ESP_ADC_CAL_VAL_DEFAULT_VREF = 2, /**< Characterization based on default reference voltage*/ +} esp_adc_cal_value_t; /** * @brief Structure storing Lookup Table * - * The Lookup Tables (LUT) of a given attenuation contains 33 equally spaced - * points. The Gain and Offset curves are used to find the appopriate gain and - * offset factor given a reference voltage v_ref. + * A Lookup Table (LUT) of a given ADC and attenuation contains two curves + * mapping ADC readings to a voltage in mV. Each curve contains 33 equally spaced + * points separated by a step size of 128. The low_vref_curve represents the ADC + * voltage curve of a module with a reference voltage of 1000mV, whilst the + * high_vref_curve represents a reference voltage of 1200mV. * - * @note A seperate LUT is provided for each attenuation and are defined in - * esp_adc_cal_lookup_tables.c + * @note Separate LUTs are provided for each ADC at each attenuation */ typedef struct { - uint32_t gain_m; /**> EFUSE_RD_XPD_SDIO_REG_S; result.tieh = (efuse_reg & EFUSE_RD_SDIO_TIEH_M) >> EFUSE_RD_SDIO_TIEH_S; - // in this case, DREFH/M/L are also set from EFUSE - result.drefh = (efuse_reg & EFUSE_RD_SDIO_DREFH_M) >> EFUSE_RD_SDIO_DREFH_S; - result.drefm = (efuse_reg & EFUSE_RD_SDIO_DREFM_M) >> EFUSE_RD_SDIO_DREFM_S; - result.drefl = (efuse_reg & EFUSE_RD_SDIO_DREFL_M) >> EFUSE_RD_SDIO_DREFL_S; + //DREFH/M/L eFuse are used for EFUSE_ADC_VREF instead. Therefore tuning + //will only be available on older chips that don't have EFUSE_ADC_VREF + if(REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG ,EFUSE_RD_BLK3_PART_RESERVE) == 0){ + //BLK3_PART_RESERVE indicates the presence of EFUSE_ADC_VREF + // in this case, DREFH/M/L are also set from EFUSE + result.drefh = (efuse_reg & EFUSE_RD_SDIO_DREFH_M) >> EFUSE_RD_SDIO_DREFH_S; + result.drefm = (efuse_reg & EFUSE_RD_SDIO_DREFM_M) >> EFUSE_RD_SDIO_DREFM_S; + result.drefl = (efuse_reg & EFUSE_RD_SDIO_DREFL_M) >> EFUSE_RD_SDIO_DREFL_S; + } return result; } diff --git a/docs/_static/adc-noise-graph.jpg b/docs/_static/adc-noise-graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3220c2464fd0e601a1a03dc05cc3f95712c7c1f9 GIT binary patch literal 110759 zcmex=ECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3FoS&sA|M_^^Oqn46C)D~ z3o{ElD+>z)BU3p8BNMYA3#+0bn~-B5dt#xml2Idvh||P{8xL|S8wY(5O)9#`C8lEX zQ1v6oYha%d=dmWTd$V;9Zl9U@Juml- zahvkSFQUu;GjP;R{Lf%F|EK7GhGYHg{~1o~%>2*5{GZ{%t!*oq#s3NXRsL6N|4I8l zL$CaY_LuUXU;by982=|btBc|2e})!&kN*tw{r`0RXL#)XNAZ{YpI`M)!v8Z!-CERO zSpSg!lKu0`{~46_|G0>1(Y6%}c;bIJf9e1EraGnj>lQ!qw$6?XyZ0daINR&WMX?`Sdqd>){HJU)^0aGOS9j^2{>S+Cv=4mK zAKKRc6Fj}PKE~H9`~F7P(yg-o)+#JAauv$29prAi)_i~DEB|=?VP2zr!COCG`~R4n zn=I{JzVLoVVdi@k?b9auoGK?6ELa}j>=XG``0v6z+1U@G|M>fs z-QU6U*iyn?>$iSG-XGt}hqKE**7o+zU%&dK?2)RRW!~wxp6E=RRL+{p*pTN|P`QAw ztLsDlt;5IT%s;fveDGSI@s;PY*H+io={TQc32HwjyYlyu1fv^Ic&_Ju(0;U}UVNYQ zjn}>MH@AA6j>-z#aj@x?4X3zl%{3MsX{LpN9>Ppo8?4F!#1Ui3@(5x)t5a9DRA~ z>5BN%lVZ)@S+}?yE1T5PP04 zFIw6MOYXD%soS-oKW5jD-bImF=l@Oo&%m)dqi}DNP?19RgqpWI4ydFw&k_55{Q8&L ztXJ~vx3cD`cinc_>u=kzF;jDwjYANULE_goYvFr=xysiTu?jMoot~gb>@Pdu^ zlI+P&3!nD;?(cdy(er?gU>{p;*4yWuTWalt{+-`-H79rdzjN2?Q)fLDidU`svYYeV z!Mht99i&3S)Z6zIK0GfTedqkbie~R?3$`AguQtD0=Czoka-o}b1^fD?a#A0Ux7(y` z=Y9CM-urskofR`)Zr^x^kdcwA?alqqkQG^T72=3>xU)RcjeBhQ@=RxeQea8KgM-G;?^i-*j3s#<3;*qCF}E33q%>i zmGkfE)CHeqs8SU@Uw`Pxhvk1%;y?8NXE@}$_&-B_{-^&8oBrJwzqLKtx@PU|&3%P^ zQ$QrFCWuh-E1 zr1>VA;R4%P(diHGi@eyUw=w%Jcld^DYp$M2d+fK<^D!TTYPq7ag>rvk)D(t5R}orZ z#>Xast_)S_&Hovm#BBM`(DMQ(Ix_k;foKgD(JAJqSn4!g=A66i{GEc)5~ZR%rX z_3k~)4^Dik4L@SGwqn=2waYWg+Frf#&XB3hQf5hw{GKw&aNEA=>uo;VKjiLO5J4^{__hZ-O_U8cF0YAIe*K0JG~zU?tgi&{bx9}*Z9%%!`1QK z@qAzBbKO1v&1HWN%dSs<4)b&!ocQfYI?v*so}QlTq92(b*lm5>&+$Xpzx&v6zw3Ln zP0Tgdn$6feyEC~zp;*|n!IQDio96=in%7dT>n1L_cR${1!p&%h&;BayTpL$SI`W%= zw}#tnVpV-Y_3fig9&46<6x`Qqv<^g}_+QdJeaoz7n^T+()kLK;> z?32AOm#i>Zzr{eIb(+UXefgMWRu7suL|<>JPW)8i zcb9#9dw*T!xeTUn?X|fpGj`S9oxNt;bg_@8xsN%9xdnvulpPeU+QaSncg~;O2fNcR z{*nFI9dgk|OZvN1>buGLwWhl!Fe}Aavbq&-VU;ev^JISX2mU6VeR36P_gy#c+PAOI zd{U&ospgsQ#wV4hSE|(To;h=59xFqo{#)Ds49evP`+rL>_!m0)k;eUR)qfW%d}MJr z{-9p|%(kjYU%YL-=j+AIVLy4^{-~lY!}^dP^FOTrC+4>P!S45O{olO*;ci;-HD3SC zzx-Qf{a-8Z>^A=Uu5Rk`kIoOz&HNaDVAuLK(}b{Vzif0)8C^KR7v%aqjN$Qqg%26b z&*fX~RIb=4{+9mnJp9szI{B^W{=zh<}GChn73B( zAL(!V_56r`<9`NTX_rk~uS>hfS_kd;@b}HWkf=GCOwEEtWzFY5*6b~QQGGW0f!~Dt z%}?O~NG?g7dgshd^@-Pe_%!dS{)l}fy`Sqxyx)i8eeZ45 zSH38FnWL|`*}Fq;g3HGFW_NFA%TEzKY3*rSb%CAt!}jBGJX_1_=mUS%s^`baqP}l%k@j^B>o7`Klo4OT21hydf}Lg>qloT;ZD_C zXuG6r!_rNU1ywk_)_JhZ`P|p6yL`( zWdnuOhUXT{4Tdq{Z#xbh4*KD`>aM`7*!kVMXRq{r7Z6&*o!*luzqWdMV~t_)gZ~V? zw=<{DdbaS9^%h-~TYbwOE}eR}+swdV1*c+2?Nx^2uJryttcz=WKFs~k&|dmGe{1IU z?l!KnT?Urn&Nrt#X#V*mC4k-e`owsfnv%;(KUzQjemK9ebnT@dVHtW~y=TiF4f>QZ z;Z68KN$#Gp`hs%&>Ii|*nB)Ancf1-VSLTEO^e!B>{Y1uuMkKNcVO z<$px~*6o8)ZaanVX4Ze`KWlTX$!X)AoS8F&9PB>jaUHD^T5MAoTQ>Q(?dz!hU0dd6 zKQcceeO``NDs|W8lCPH+UVfWABVEW-CZ$uNAmn3@+=55D-UdI6|2F+tuk`W%47cXR ze=D1*H~a7WZ#6$>-`Mt_!MI%FyzlbY4s!e-wI8f+nf`6w2etOpW$ueJtiH`IGWFH> z_|M?HeUCtzYow43)6%9V$#WNN|Kt4Nukge5Z!fyu$%o_iwwL6rng% zxntKe6UO4*>=w_nesO)BFI1!bpP{As(esu)g@0FmtA8V%J-dEG?fmlj&-L#7oZWV( zD%bMcl8@l=XU^mzw?Lp z&Oh3JC;WJ(FL0|qDnPk{bQL8%?U^ zxo$Zxxlz%6__ODVm(#qIw}}hWiz_zis>Y=9YP9evSJ2 z%v-)a+p4B6$u{aevFfFc{-;wd$xkhwhCJ`9O@CN^;N~9jM`weN{!{&Ed%d?Nxt?Q- z)!d`IZo9MYQ0REn${BK!VUA4U0mcXpx9%s z{RL~zo-guzA3McOZ96%=|#NjR&G^D zE#Qmjdht)@4@>vM`-kI2e%SFAW&bE$`R=Lr>5gI*rHVrg{~65ROC+mq+THm=gL&fL zN&onNc%6T!-)iG+)}6hwqV1E&9;;;wh5QS-^-pyRZ#a{+Y5~KJW19CF-#*#(W8ue7 z5@}|iPOfq5H0qg>EZlJ8o6YsLHM$?{|7gdz?-FnQcl+<+zti&+euqzeS~)}IdD^q% zaWhSuAIdk+|InR1U$B(_?aBN9gt_P2{}t0$ik6=^`N`zs)V4Qm2M)?=Fh76K_M(dY zz=@K2zM8Nf>Dhv@u60L0a-A~S;oZ6Cvr3V#!I29xZy1Ei8SZNYWbgXO-u|Xer|#P2 zjCmSOw!w}c?lsDO?VDO;9(~egl164EKYv5ngC+~Psmlw0oBvpUG~M^|p5l*TzmL|5 zY}(QH__tz7hpx)p#s3+?RCk2wJ^p?3>8>X-f>-_o{E({2eUxi_bf4@;+3QVz(w85} zU3@h+!Mo#W!<-qR12BF27w-^*(CvbkF^p zE$+S*~_$d>L*aLRHFpRtZ@Lc0Z?r+CF?)WI$^=jL!vgygiqOHfz=6srQ zsC|<0;i;?}q!sdP!WaHfexUnp{^RU=i68fmh0nA3sM?dyH&wk+s=I`87{&(f``rOFqoBtWo|IW{!{FK4Ga(3UF$ICAE2Rq0` zfB1cPSN`Gsx0#RJ;%{H`=u$~-@L|EMpc_#deXKLnIk*-)D2Q%sFqgAjzeKyC{h|NV zkEiN8_TQTMxx{gCecIpo%T$Fb=cT>R$-VvKdc6ayNFYtHoUyA&0Q<5E`+u&d{eQ^+ zYrDENVjus1hKWU&|FQpPShzJefYDWCz%g6x{`N1sW0RhTwfk;v58dV3RsG_D>%5To zUF#m?C0H|6tmUG`a13rU`6U;1X)s^5K^YWU6OT6A!my}I1BySszqR~O!H@0-_dDOM z%m2!;;Bv|7*{vJ5?l5$;X*B9J2#`D^IAQ6w=abepHt;7d+LQh0dx!p(`qnz3jT@?8 zEV;IR%Uiwh%bd~kH4kKpsY%>=vm(GyyZ7daV_E(jnfq8Khh4Feu#?-~Xlnh}`s}2; zYu~PYvVRNz){nMx*6(1uB^i0R=CMLk2J?-K^`al-nis#Ump47}M|An^mv(ZOzqD?- zmUuZy;O4#ssr*7M4g#kp=HGEw@MyTM|1g&O@P7vGn%DmsWNVDPtJ^;EUU~WGWzHJC zN%~fA@7;2nsG52Cz1zYr-X%Q~EEn)ES+S^#L1WFwnB**zFqh?^^S}%DeRsRQCVzm8Y5B%kfd$dL{4X35uj_jylC4xBTe>?k|JGY50T0 z{CCz33#aXjCsg!rrk-S$v@gF?SHf7=wG<^F?YA!Y&oHk%{s*W2e+FR(@r+gR$U(XI zcNG86=cWG{8YcZ`_-MjdMpy02)@{u>b1>||REq@N)CZ3(?DZGQ&t-^Tw6Z?i@jrvj zyZs-8;{U1jBPWv!thcnLf7>Ge`P}RO42-J(86IUIrxS))nrd!-9d>cC_1Z&9J=3xy z9hk5D+46qyI1YcXtT5Y}vu5G62Vxchxv5VcTgdA#u%Bu@pwUly;*-A}cJvhM4m}3d zy3=|NmIr_DJN{`oN@8iyyBM+`CC$5|rWU5RqTZ;!rn`Pe)76=Rv0@J|wmIvrSt9t# zE~7$v8 z{aMdkGV`4JtomfRwV}?DmFntCL$23JR7^iMO>h z#g%oF^tZ>#Z`L~c^kbpAq~`AV-*;bk#cZ(#UEBYJxBfpv+^6~%YU{4*X8&`z{-5FN zd-Z=!8BA}%ZQSrPb~^tVn!0LKKJ4!>?X_ck=QU9p*c*lcFi}!BdabaE5y+_hFrb;=idHw8ooArb(d5jj8!4ou?_b=K|!}(ZS zzaviY(jWKbu7$kQ7K_gnDfe2fw9eya(EcZJ+q${TwSzjZH@o3dlg-u9s3@atxeAty?S)tv7gElcDUW`U9M*SK&GeoO4wSYQR;~A z_Y5v>IemXqY?i^{!V8P#cYn2Ie;jBvVcB}~{9upZx$YTie|fu>CjMuTkDC6shX1dq zY~-YbZEv-jwOa46RH*JaFCXik2$l^>Nd-U~a$Zr;LX^4r5Yx&O5G{=C2c z8T8DPZC{-^@3&~DZt|nF$xD8uJ6t;w9=`3?)1ynb_JnO*ImvB@@@Wel1_s%)=NbLu zrhNZ+IHRn5d!5FH{|qfvS4~|nuUYbW-{o&xCtk8hJ(A^>Uw-V`?;R&C7Vxd=dirip z?zj5RsQQ+DM|Z!i3i&nvw#}W~PfxpSXPbSVZ*F;Bx~e!9d1OA)PT|T{U(1ruOJDqF zxb-ai#KWEPnI3j$nT7Y&ub@snNMCV+J=Qi{rYTYUaeu6f+nkGgYv&(AMjD!yfp zzwY!?Qx2(cPh!ZQdgVz<@#|SHG8ho8^aryaA3yx!PvCzBj?WdFeWmu#eDc#S|Matx zoBO5B(|gh_AFs{iDqdOVu|4m^xl%>HJD-%V;y8ZJlW~tgGvj5_zh1cEv{Vyi(SoO8E_5~MXrfvLa?0KoictLiO z_UhZYMUO7sI;I_Q<)m_q;L|x`3=DkFo;NIC?^XTd;TCJ_+xtZ#>JQmw&06>2STv z%->NbUdk9fGF3I-{W!b!PRg7BwzvNo{?umf|N5c+OUTr+9eb0H?N9%)^5J{V+Wzue zYw}F(w^i=A{qzx17$46>%B5lc9j3a$ez7($tL(q+ob|~f&;3>q|7M3H@8>_0x4UQO zc=Egm<676$mvU;COJBc@I(O{(`JI>6u`Yd7nX@lsndt;Q55|4r!4oH*UzZ&O&LEnu z{}~i#umAPE{Xc`#q;*#{_CGN${m&5h;XlKRpwL?k8tdYZ-81{o&|>xau)yE$xAnK9 z_Eg2aH&36u&r<%(@8xASdvYJIkJFqlyiYlzM*Bn0KgBC+-f!j3SlT7OIdh}VvZT&jAz!hUvs=gPJNtX78<$n{Jsq44U0DY310i3;gIRWx$)tj>Mnod_RQNe z_jk?Nj_ACC!a2znru`4=J8tE7tleWYY5vBnTkocrX6P7PN>bQ3{qM62`!%PsTd3Rc z?O=GVv1YD)&{aLtw^5f~yZ@G(nWJb{)qgAS-;GGm36%+Hwk?e3@11ka26wGlb;bWV zT$BI$UjAQ`*4vPhtII< zHF8qdU|1Ek{ZG~Mzcr5k85RevyQ&-g&o=nqK861b7gvJHt}X@*P+txSYfXv&B)RK9 z!}^N)FPd6!gS!7Yo5z2B&;PGgl_3_IiI|UNEb3zTavrrOyjuL=e}+$bQS}G@Gkh^y zy9&c-m{reftXDhA6y2Kfu4jMVF6n8Pg5}MH>Lp_L{;gQowW-GVKZC-}{ja~h|Igs1 zvNj9D7_Dhr|1&6L|7ZC1ee!<>N7J&E+3}y)_Wx&CUupjZ)a_Z+#qi8dBhzYmhn?h) z?cNuj{kGd)y(IQ_#2G%b7#qEf+o}`0X8kn(X8L!T9e0h%-{~g&+&|in?2>ONz0Y;a zw!g#1cI~-o+gDdgCKmj2uK6q}t^0{hz3$#((Qju9<5Yeqe|UW?>R0wWg%A9#U+?Cc zy}hzkSL)WIC%FuIDkZwd*eu^V$O->vV0m~cPuGs~$Lxr1pZTsI_IKJOuX;UC;&Pty zr(3r@XI_5uLik6x)*E&o1LY>(&<}IB9&fH;PyMLw-(PX*Yi``(=uUUz%t`l8@BDj4 zzmt9Y%-8WzS}g&qm{v$Il!!XrK71>5-b}OE`O6{?F850@y5*kNEix}r&G!Tw-=iaQ z`ihFLHQ1&8C}!QZ_rd)}Ir(eXtoylMiG}x@&UqqTeR{=#45g`_hkGjf1e!P<3JSC@ z{}a7+>xI3jP3?jobrQLIG}C3Lbf#x8-M$sK>qJ_gDSK9`i_a+rhHZt@EWb$iv-~J~ ze|Y7?pI>3r|q-(&EK{qHq4*zWnkwX&vmcPifqeQVe^POF(Xx>A#gie zfAPeV_NLXxJ8ZZgt{01qj(I&#?$XxT-SJY4WqY0d$JLIpq%tRKah$nqnrrR4>1vJLEt@!n3wkxtcAXF3>SZtM zJGx0Rt;_u||K=r4g`1Om)?H|4mOH(+M)Bev$H%<(A^W#(+aF*^PR)!~~BdTQeIotlsj@?(3~T z#UJXMZKOX$A1$az_P_L{@}17wl-f#Of(>9M>-Q-SL5rGv>4O|T#%nMGgvZ_Dq&ygvW`fPUc!&sryetWg@*6MzF zk=#|ZTq~C8;fAV|LI=6zML*OJFaI{_W9-Eb|0ezFsZyK2BHCMZPF%tcqdV<0Jtg@( z9Ab(OJ^8Xu{I|B-`qpp`9H${iT`J4nfy;k{)gL_ z{a2H(pOS`##YlZ&sM4mgi*k_xv%}FHH%b-gjV4Nz$CP$=6PQ zW^b4>tM~mUgFXDIrOPY)eYfxB(G#+t8NI5>Gt}O};g9z7UVZ=8I_0<;wHnh^Klbi% zyRd`Zs+gAPL zu(82^hT_}I{70(TCaePGSX|v+qtBa|UiHA0QxZCmI`ju~W z@|V8+4f-Cu^>WVJt=bP3z4{~}sJ7#l!M^0iX$Kyp%n1pq2zQxwIB;XF+`%_n#WVAB zXIO>ld#wx_}EKf{~<3|ud7@pqYY7|p7i{K)&awuZToLW4zWZ}G+ON`^8C z(Yr6}gfDzC+hUd1yZq&|OKjV=n{C^8^vRJkl8b#8^2) zFE6?(b%%60l{>YT8QcmnoY-&OSCQW%b+m8w;)>}YCAC8)~pKW*L!?#+mqqpCF@+$bI%Xh=Kzjvo- z??~RpFUtG;@OrK+sjcT$mOkv2dLFzpcJjTm%a45a+QH28wA|p(dX{f;Qy8BLS7aaB zr}ua9p6um6=1JT7hPzyT-t2uP!bXR2j;Hyg``SiK3+#-VoSV#L9{g~R=#KeO|3IGi zm7V<7k89s8w_9?{ci-NMmr38kK3Vid&YTo)x@WQ2nPbn{71pcm&HDV{UHiI<>v7jj zU)$Or5u3Gi?;Ou%ugo}&9KQW4_{><-7Cn^foK zhQ+R&U91`LGk|N`orFib?|0pk{cycC=|kPzho`N14a1MkirH>eH-DSOqq4irPu8E7 zOlA1M_9lJSH~AkfTMU=neOZ5FSN*rtn`+NazuEZHIEA5nnb|f6=7~2#YwZujNnR@X zUCk}emuVJe_Fd_dbab`E;x5bMo}o?;EdG6Xey_o%`{DYg8q1{>yC40%+TZ?VcC6p= zpp>oCq%9^zC|7ettP)@hP17qd;M9E|Q~oWiSN+XH^L~}KyZcm)w;Ya6SRN>~Vt&%? zH8bzAJx~&4-kyGXJG=9{deJ$_**%@ zxA)>__TDx=cjvLq^-j%VbM-6VlI21c?UJ|rqY-v(Px8ZhM!$Vof2?<1N!xMy9dq`K z9OL_Hk~7rt^a@uX*pf|HzFip5;uQPu;$Ub!(jF6P@1n#+_~7 z^35OqO<(?M`mVX_W~b+_jAs=OpKzel^w`DL&oVsQ*qK!xEt-62m&!J&-tHIQ_)}Nx z_O8ykwjy~~*|BF+3)|J1RX5M!n$$1#F}$J1vhue>g}mcrmyQ1pZvXK0XRK;M=w|zU z9jzG-H%@Wh-O^;vaN`8quK73riC*3!FOn&cYVue8$n3+I}2UWNMHQ+jkAw*&5umJ{huKtexl5;l0c6| zSCuBry|6I0$80K3O7gkK^Q0fMZA@PE;-2cquv(?t=Et+TW zl1U=wXMLqhT~X8SeF1#@m(1_6ez>-D{lRtjDyqG9U3>fOr`42ifwpI=>)zeudMEL= z`KWW{hu4Q@wXH2)6VvlJOBpI%?n!-E-@QNM zz0}Kp>TTzPLob^Ad~oTj7(X{dx{&Xa?WfK(tl;liFyTS(aSJ=aYf9JcS^4eLtaP7j`|u+uza!|S`Lu85Zq*h!o$1k`)3eg< zoC>oGVOqOg!eZU`N88(LOdm$bndWE=*MN#b`Ci5g?$fv%QBm)?^{P(kQg6@1 z&7G=E=9?P37BYy2B|T?mm~`*!!TQvUOLgajD?WMT-hLEp?PI!)t5k4R=QrJ5C+9xM zV^S2bF00vHP#EuR-txuL#%b2?j9b;&E9Ix`TDaA@Xk``JyJrwEqk#4V#_#Tyl;)*!0P1g?eLb_|emMt^PAae>mRy{KMJ) zZd2XRb!yu-Ud!{bs)z`Xl#9Q6O1ACkEt_o$lZy7t`l2nXcHDQ?yKHOi>d1W6&+k&2 zRNdzJu-<#ZKXU`a$>$8A{(=?$&L3N6MP=VIo4@v!+rKQw6}Ofi(tgl;Fh+onQ}VkB zPKHA!FzxiqOxm7)ae}X$h56?1x2l?5GTH3gJoAP%|2;denH(qX zIDX~7rT)()*ZAKtS>^u>-V4_q_Wx1&FjnbR^lW*a7vI8-{k8}B<|m5eeb#%sNl0Av z*!RP7ZqL4&u3ho6Eb0h1>)*M1-)JlOY`o*LNuwm;!~?n_}8YkG2L*R=l(>l)Yo>(OeT{`8N9@dMSp>yIYtToPhBDsjc(j(_4L zd#hiQf2$q;9gDfxmO&D!rdqMsKgI{y2B%^Sr`&S*t6;U2^rl`&!vHUS2=< z$*#?2E1%pkp0nFy#$hp=Nsi~M7(V*Ty$YLtU*wLx%eo)_ z75jH;V{m3}X{yY`+ixY}bt64|_}B~^9pu#4W^AgMeSE&umkQGrCDN;ZY>BSOTPM+R z^Gt3>G|!Sw`>PZ9Jc`(=LOK4pF8q=6s*e4No%BmHt2@7@&CM#AtMp@Cd%e!b-R>$g zdR>wQJ@=Wn&TMi$GG9~P;qH%cm;L`P{SNC-EdIN!TlV|htln>116w1D>>{3Nul312@uh>jK}GwSOaG+)U9hqV zo0Zm^o}_b6SKVok@y(lFAJ@-NwhM{o)Zo@|Y&(B#FL&sV$cNSPy>UF3-+o!~=<-)v zslQ*XUDFI-9>d&u+h+y^8bB>LdxA zma09H!rc~n@_;h4>2kHn$z}`lYrd7eug>We5!V%(spNL-Y1pw4+0_%Q-pWm3{M33m zI--Vu*M{9!(k^fDHGjk+w(-n#HU15^{;pEfn#9DD)p(ypa7)QC?X@4vnwS2tKNhEX z>5po9=CX|Mc5HihU3s(RD<}IbzT1^v`lnP-S<)@OB>v(r;W z4E-l=dG8t^t=#AC#qcq{CH_;e4flVBlv}s|Gq}6Q^wbGoT5F$v`n|-`Me{`>vagGa z&DuQay4Y>gbVnIKzvP~EZ;ma|y!Tu(Df^YRJ>N^K+AHE_yJF{VJ-TQcUH-Fmb}#u+`D_r*3B19dCP-0Zt>OFy8q0H?ZP^%8t-_dG)n9|^(i3y zN}b@vw|nd#)~fq$_72&;ZCjt|ZxL@9buOb5s|*+|ZK|$|*M2yDL~PdeuDn0?k8%QS{Jz+x%kQtZ_HA&jMQ5jcKPk~_+8m)M#*o5Qu04DeElbX zZkN{c8tb*0AKi6l-@mo={_SCtiL&DqnocQkyqb2=`e-Vk{++;)5TSp(1CDX-+X;yW&6&*SWR z=V8Ak=||SD=!xHo%sY6WJ@{95e!7g_`$r;--%3TF|7T#RGtAsC|BtUC{1MyKyl-W* zo-Uu0o04#rWz}1mjql{Eb2?tn;dyK!d9;d^0kpvbd8j&eRbc&zwAcUkKK##cVae(( z@Y&oz#5NR0Z`c0}6HMFxRv-V*u%K&q$d>q@%n|k1_tgL5z@j4*dF(tqYueiX400>~ zGsFwjzqqo1dkdBwCZb;YKY8xfU*BW@OJr&pYHDuKy9jX!X&YEX&sDsBq~7*V@ac3=PU*50Ky>D@PJTV2K9&Uf!v^qKTa-Z{Flu|Mj- z#vf}R-o9(}J5YaR#LI65wTq(Hdb{n}+_UgS;IdAZmXEDIlP5Nwt^Ch$Z0hd$5BDEF z?VYcFYS(p>j`ZIFY3+HA{)P@er=Jo0vs3cr#91#*`lWxgyZo3jPw1oVxrr-|7BBH! z?Y!dUwn>p3EJ3S0HXT>F^hEZRbDOM$;JpSbf9^jX7i{8J#lDT+oXD1 zkMJ_ zpTk!$s~@)i#5?=n{=EMTUlw^?TbJ)RJ2<-X8n?Bl?!VimohrLh>VN#0Y_HMNxAT3} zzp};u8SJ+0{~>h$PabF)%bvIH|7vsVKdA2iaaWEml2=jYZ%RO88_ZKL!S;AO0u<{Hjbx*cDw!{@ZxSUKV$QaP7#%#H7-v1f4+{oLuo&CIZVZm|r z({=mRWzyFEyw(5b*RB5y54`I??gA}zMfGPTDbkPY>}r%Z{`mNz{OCN!D|%Ar?#FD( zE-YFlaacj|(PY_gyA~(!vkpIJR;TrM!W82Fh<$jvw@y28nd?X6e?k>u$1|i^ zZ%5{S{@%*Cfz7;lv%GF?Bi@vA=-;{hY;Wz;?>E&6{isbZ$zOaim#65i=Jw(@795zkrBvEtF!%sv{@;D>ivJAf*RKD^vi(1U^r~4) zra!xB9v$8I{P6cYiO0g(9>^|R@_>O7zN!P>vRV($2OuM#g?$sqhixZ4a zY&g;6c-)C9PI$rO99lHyAa&M|^GG2Cf!MbbG z9w!byTe1CMKF7(Wug%QG#LG9n7T}J4-F?^Z)uU$_jwia`3VB^xQ+fWx8u7`;)pmDj zFi-h#|FEt2q4EI#<^F5`J+#^JaQF51?-qm}Gkof8tj@gr^zocf*B{0YS+DUe+Ldy! z_xZQR&A)4p->ADh=jZ*D&o;fk_vPL;-u>+No$I-fbyg`q(*HSbuD|~F{=X@nQCH9X zD0jX5v@iPjhOO26x5t{_k`gsaiSb~(+w-yUXE=F_`=FaxY9_9$3HfpQx5J-=kIP%? z_+I@|Z}_A7VD`qPul8wOePh2xPrp=l;XDpS^#qU4ZMx??lrQbuzJ9`1d4@k}e`ozO zs(63oKDUkJ@;@OT?EBX5-$|Vr3Ylklam$OZXYHdeT%B}1{IXoU_SsLjXWUgewBd!Pg}h$$ORk@* zzg7P5{U{v#o09#2u1FlUA=|8G>~C8bb%=&G99wU{_*Re{|xIJ|1&IFyn3tG;eU2p^?&`4|D|Px zRR=3_!z}A9>T1dhC}ua?^|9)(>z0ykwamm3#T-WNc@3UU405AN2u95?@ zS4Ca_)42XW!|Qwge_5{HTDrFWgw%hAe|w+&XSm=CUr+~D3f8u#{o9To8&}ov|DFA( z`f;t0=+4Ch;i&Z!|1)H^UAHs-cj+GM4}S5^QhkmJ zyU$KLKHBXpT+v=Z9?LA0F@6 zdhnsV0jkDc-s@GD|x*kE5A!01}Z|F-aBa>x() z-{wEQAN!@EZMJb~MBbKrv#+X7a_LmjzN0w7P_8?Uclm#YgLYf)20uI_r#|~peb0Y} zhj}rP>lXiK;JlQ5sbRa%zH~w6r+?=d{@!u!K4^?-ujr%u8|NRr8~=Fwo8u4krC+~T zy*4Xsl6%F8MwU&7Z6=s3bZ4&Yu49)smkHkjDMW`xS^hEp*6BybR(`O5;C>`u`o)Ab zw~kF+;&g5H<*Fr{d@icAR<{_jDPPP!vgJR+5A|!aSJhZHANgG4|8f2w-P7HsSLz>H z`Bnvpy_|mLkwVS>&29GOlDGdjHP~HWwBPDKLn?pc``;yhwA&wDKQ>?TNAnS@t$!{> zzPyz;ai!<-$d{RU_rhmvbaMDScj}zU$0RG(=l|{5$Ch+c27F@>F%<=dztL_E4Jn8RQ}v}fPsO3C1`aiY_TYaUb^T%!wIRw|Mouq z&v3ytc2$)ApT;%zukYFaWdSWOMq0fJQmutDG`D)Ici4Z1{*eC+>pSefWFdx)Q3q6! z>p#@W2(e7|BWNJo));k_>(LKL2Z$lYL?750)r8D`=->LzG&-O6m7K~v4b`0)YYRmL z-6ih4H+f^W;J5>`v0PVy$NSeO_h-Hr$+#tduwFbO%W7|H>$inV?z*SvmKIGsU3A-U zn`sjFoQVg{2Rg{MciJgL{s=!4(2rm2MGxmfG)rMeWKunZ`-;!f!4i(I zRM*IujVA-gZ;g{5t8WxF}Mq`GUy;r1khQ;e1ptLJflRGXgu(d*+M!$&K> z_A^9h^xLhkuUzZBGBWC}&Vu9Ho@L4>|4egwCC}(IiJhgPY(CdM&6qzPJ3g9-*U9eu zaOIZir(3nNK9x*L59?G7EA?4rc3m>yY=6whP#fWo!bj&>ea_F>W4PFHk?YDk5hkBs zZ|a`A;oL==CdIUH^+d&*^9~WE>--%PJUQ_p$-vb)K+y7YI)HKFFeO8)QNqUW!# zy8fHxKf@QHUH=*OCH-f3qyZW|dL#Uw;eyxee?PnbGjuFQ;ej{8Zt(xl;HbU+_cQ%} zO8v+j&^X|}gZ6(}*6n{kWB-pXJ0v#4r}MY?zfHSn$9QyMgx%y-6}ykwDb8H`C7$a= zAZLF5%!1gD7nL1~&Q-|$xvu!({I?^MV}8tB_Q&?e#1GHoet19Hn`A!O%{MOMUCvge zW__7(!#~R$EN{5iq^mF=`geI!mOaydhRpX2HHBB+l;)Nn2)iYEzHMvwS+kpYX%~4W z{hWAr##FnxTZGAn1= zv@*fltKV)7n(`@9Yd?=X0xY0ETEr8Lul!dqD{cd^DJ*FT0AO2hWSYPaZueI~#WPY95<<=V& zgG}Pqyg8!5ywddZ^grg;Rz93vYkkCCz>dA*`hj@9_fPvQ{)E;(J*OMy#N=6?H-Ar~ zr$Wk;PX?R^)=mEQ;YaeL`7(cmH|_qgckA`eum0Sxf7N%|Z(#7fHKpv5&<739&xTs{!$ zn8XvYX{Ti13CRS;Z_m5-7%!~x`{1{DVb%x7H5KL2o3kq)^X{^IFtKoI;wwI9<`<6Z zrzQVw{ihW5BX$pC_HWOMdHgL$?M~R({_V}W)pWDux6!M}&rENA+C4M-xLqdvVm)UK zYyF4+3=jRAZS*VG_!pNi%Gef_b6KHhO+OE(w1KLTqn5wT^~i6W{~2DWmi}j`Ir^XB zNB~=Y!yo=de~dq*^*)T}ySZ-uqD--snVETe-nvRi+TQr8^2t->>ssV)(?wJhLOpes z{kyg;e)}DvgemWC%ekMGmoNVFsKHG8=zoTc{G0PmKc0HL-Sn;Xk*fB_n%ajm<6^~+ zT6wKLnwiCs|7Q?%N8vfh z1^*7O@%bQscz*M)HSq#Dd8T*uyJoHog9CEu3C0^p zIj=T`U%z9n?_vC{{D;@Od%Hh>h4P_ohPMw(F}({(3=}D?l zN8gg>?CK1hII_um*ir69;YF}rU@_yYC zF81koVZITk@+>u;z9lIJ%1s>4m6ooPeyHED{-69G%@66V?@c@3<$duLJMB9wMR4lG zhmFct$wKA z^|j-kucT>Z^3F|Hx_I^!#vK1Nli_)y?8iA1__=@kd9L`w{df5u#*fE?H(uR(pD{Wk z+)nD6zRB&>owHqxyq~$3C58O%@jI4a#O5Bf>dyS0eR?nEZ+m|9ee*2&L)N{~M`p>l z)CA`~I$L~9D05R(I)zI zFk|^m_V)c7*G30K>&;J#^|nihov(i9*gdnyUB5P2Ywq8=F8u9xh7Kj`ZO12n_B?*) zKZE7!`h@xan!@A1pNaqD%22a(`M*PP3O{^T#4SHi-*apGp?Ll*Myc-(^WB@Hw;F4) z7&|}TU}()6bR=bx)nkTg{WqU~+h*L~e7*Inw6w0*e}*Gb?>1Ncnz#LtZsg&6S>gHL zmlWT0|FAy6UuBa2lG>*FU!1Y^_YLbmiXgK=vp%SG26`0&I*5#C1Jyu(9?fK+a)6w^msrmbo$4{9WOuz@4?p_}L@#kBR5k$7wHGgTD73+M!%;_2d3;hYIy?l^@RT+y2-$aLuCKbE0lW z-ac~q?!7aG9S=Jl(`|abNlGd;*ot+1*xy{gE&lNRUOA)52fuZ%{Skjmn{j9V;eXnf zRW7f4-jOoBGg|Qg!yM*0Ooa^|-@Oe#A#fr5q*$b9&^2vyH?v{=7z znA!#Z@=hgx6r!}C7`zHgEGwsC26th`V~vB%YC5hmw_vTw;;s|tNR zfA^+`I~aa#2(X?QxA?bn-T7VOZ-pP+&Xo_@v-e`Dui0BuUFo<>_fPM+tgn3Tbzs3E)bov|P2i5gG`?>b`Kk}A7%k=MTX)ky1)usEkeq`NqUGT7yr%cPg zFFzZb^$eRF*jZ|S#?OzJv{BFeu>NQq`+tVEt{-n7$@e5(`t6Ng-ACgek$U@%-81TUn7buV?eC1=4wA~YhaT-)c)3*DH`{m16_ej9 z@^kbadA@zO_Kr=l+bPM|h=Nm&EP@Bw8tklpbUxgD|JLDeyFSJrdM{YfA9m4B`Uk(q z#=Y~MFRr_F&NuJXTW|JRq1LlR;-_aEKigMna-Q{v*XM7pf7jW`|FQmXywkKd`Qh;+ zx%R<{58q~eUC-BBn#y(dxuf#j)6y$%Zh5Y5sm{Iq%0G*Lr#}C2`_Z_p#_fZC-&X$C z{X#iw`R3euH$PqUiTSjacLH~AdpMn9PUx9uc)}uf?GOFm+V?8NAGtn1GQUI4{)(Me zjq9}Yzs+uk?cLOM?ADK!JLYrgD0megA2cZc<-|Cxgh?_3#bV_j=jtN#&M|KLjbdcF6;_N|j%zsY^9@rCoY zt5E*U{w<7?jPK}azmhc%+H!5nZC_{qU2WeEy;GTY@73MI$4zn;PQBXBvqZpAMj(Uv z!2Z1a&UimP&xwz*PR~ylDy`OFV4Nm-$B6&h zeknV?ANh~3AMTAmXs5kxQmt~J>*)gr)tX!tCq>L=&tA>ocu=-OVM1NSuD|Vn>L2Io zoj+7BWS`M5@Zy8OUdp3@cb?idx$X<}rM_xz*wan63h zeWE|ik50bTt@-t>*y)f-H_`>Rd{9|x`Ml}J^Go|YF8q_~zg_*f{pikpia(m8`VYpj zUXMR4<=*^du9LS!1LJdV+_?R+%4eF99bYgUSM4r{XZpu}^WR-5x$Pg*A1&{+ajm%iYwz1>?GNwjhfX_o-D%tQnTvW@ zdV0=J)rs6Zr>EEDr5esuZ$QZj+e& zv`tn10Ot#9R_3F2<~6+k8QRkQC2QP2#2R}zOURYmrCDy9+_Sgc`tg) z#oK2Ue!mwxyR_fl%z}aOt8R_`Z;3xSKa4;8`en~_``(XJ$B*4J+*|AATm49Es_N9^ zoq6}=ZHl&qG|y2IvU-r0_WT_egVxmcKebu$Uq9G?2`MdG8Bu@y+S30F@y!1jT)~Hz zU>*Q~Iz?eEhoXKg0Ed{~0cV4}d@! zq20;fbziJT^Mm(6@qfA>=WXQcUKrW9?@>VH-2S`00!-)L-V71SU|zpyU&)XB-<35+ zKRO@hY9A^(`beMswbgMcmpYw`PcA>c@+-mN?bM{35-d%g3`Gv>7rkJ9n9KffOZ~R* z$KUq|{c*Zpy5f)YgV^+cf^*dmMfojM?a{lq?)mN=h7&Fs8=jKs;rS|hz3yDW>v*R6 ztbWly9CGScZK5Ac`>-cY|6+Xf4s-J;zr20tRTs|qbi(uAf-elolaB6^@3_AyZ)fet z$x$EwGaRb#{QjSTn`qN1FL;>8^V4CW{s$~yWSbfo-(PP%Mu&`;~@?efkRVZX>F3M>a>#ph|ua*I;04?B!VNsM3`_NlR%f>a} zbHONwW#V4?i&&XkaaJVIL2f3>!SG2xkj})!oWus7RTStT^S(Vtz2fPdtZ+~9+w1yo zPEGpsW5?v4DRbkrUgU=X3hc?a~70 z812XYx4h#n*$LO(j_25?^v5BP{qXxY+INM{N9^b?T{n5Pr`kuIwf`A({+!t7aJ;dp zxK*WgdgQO~?O*nbyfl}J+q&%Lt6!<7-p)Jqk7b^uTXCBkYeWk3iMI~&5_K2u3)={P z{QRxq@4P?OANEIGwn=_0D}Hps>+iR=x4%=~-R*brQP}S&Z<~}=okh)Q@4R~YXBL0^ zTP(-=_H8?xs%)X76nf66>eqFDNTAfL{LjFu`QhK< zwRPtNwjWLu54gJiagWJ+oiltVu1r|ypxF3p7Q^Ik8~(1`$M(nR z@01$K(V!=CS;-spE{ka#|k47!;wK4sm{f|rX z(cAh*wRg8QFZ;3mu$kFCk&k+-!nCam*<9}~pLbu!=X|GK5}V=qGe(;$ZXf#3AZ!0% zp**i?e4F^Sd5Y}^Z;7q2iG8H2crDvgaYu*h+=X-NA|+GrDlp7R`5t!sdYtYD|Mr^N zC3Cfp{NkJb$X0iT<)*7^9`9<|z{0%ARePSl#e3fm^^G;=AHIA3JN;pM`4U+p4c%#;Z97-ljM0COuE9~j{TjZ_;;G_t$e|XI$btimWZxxy)BpY#tPQ@#LGd=hu zStec%VM%;iM2nnHIMknH#KMWz4zX2LFvAG z51iWg&8dp()B4++zfJk!{?Y%N_q7s#wjYV|2q-FK|6 zD9+*Z+}(cV=`z>X)E%@F{K(%}pCaE@W!{xE>wZ+b|0MUO2ZAbwo;I5fN;99(7CyGa zrYE^4e2M1=`-f-d>HKGCS^9_ZVfjb%+0Xwo)AK3T*@lMuT_~HJced?3y1+<*fyu+p`Oxs?ha8grbrscuk2TB#>*ROt} z-#u%7-~LShTiQqFv)ULxy19q(!F;ZlX4mV~uYCC-6#duDdrPwDn$&|4k3W6#PWU{* zaRHz6w>Lj7et7+O|Djs$hu;s+7tXk6`D6Mc-eUiH-sSD@9_^j(H_N)EQg7~J^^>6; z9!oX`f1Y=+~0$f0R1(&sRG3-;u4GuD;dFc^tXC zsd8a&&5v6)X3=wxB=E@IFAZQs9iJtARaK4pgIMcF^=~&W{4xDebWP;-I;kJZZ>LX- zll<_Xq1B~u^WnVr^0)M!B+lgCv@Q7ogN4%G@^9`x=0461j{h<9!|F$Ni}N4xOVn8I z+tT>QIhUa!tE{|W=GxSXguczxV}8y9d(LBBiZFa_p_*zO7yBb*|cb zhtjUCbEPyBW->47ILxzVc@u|)!Uguj@!Qjn^|!~%{u6!?&%aOR$85Kc=a1|c$evaG zBiF{hT=dPZl8bkgPnNuuwDVfyzM)R${+;*={{#P|KOB8~ zXzHxzZkKZ3s!a7f$#ZehB;)g@Hv(7*E-RCh{heRoe#Fk|@8o}K8Fiw4nO{$@)!Z|? zx^SktYe{8N;GI2Luh?sEtT(x6pOb&{ko?W0yURX`w?Dd&aKW|b9{Z$>V+)ViMMu{5 z{CV1WDn0M=_s!d9{ra?HrXBkq%gIOQf0(kr!A9?&+UJ`83~!fRT-*D8=A8GRx8>iR zS3Kte`|N+j=e7PC{vT5x+;6boDt`R0_@lnH%YQf@wNtqs9(`%+-l~+X&4HJq3^usR zymR{ZqAhkw^P~dK;QsBepRK?BIPS8I^@pN^OFqQ6{mFb(n;yC4!}s=uAKm8iK3%)@ z?d`XbktuEr8cz3~hT87e?mSp&pL+e^KaIb0|LOfZd7u5=pUMaOd!^d8*FLn?G|lxtRMj_^ z#ftas9Q@Cfj~Y{P6wIKi$o(Yu|i*t9L!LO_DEC zs3I&hsCt477sCtC2-nbBZedgXZDC`|2f3-XSKlpN@=|Qp*{$c6u6oIJ?A4*W&d*A2 zt#J&~{>)I;js05$Mc2;J<_UZAHSE( z+$TNl)4Pvr-@cQbR~Zs>f?LN!^3?O*8%N9R*nez&aK1B+KVP&W{>ZPmtq-s8Kg$Z+ zu9eiCaJrMzUNP__ZxiF$n(p5^FaF70-=DqymRP(fuiooNy4yRR^c}h#vGwyhVV8rS zd>58U2Rz+ACHUN(ucDvp-{$8p`ceP*`H{Wm51-}i<3G*T_@9B>NuTdsbcDK9rx1hE z&(Jd#_r&E53o7qA$S>T-|949r`;Xtp1b;+3{FuHlOX|%fj>K(|U7SyB#WW>YCd@l1 z@qBAWP4M3}b^?EduP?l4ll%Cty3;k)(86TpEt8eD-%XFW+Qoch8*9b&w{subH-*J- zjN4!OcmBiOwsQA9(m(WGn=Yf}`t8ikzrBwSsxG-bw|(mUdB!pG{|MW=ewg0zPyENe z&qt?~&02m;vUK&8kBhS}>g?*;KEowbVT!oGo7;`w%k$syGSseoXfK|z&+5b1X?q{u z4LcuwaeeTaZTmOOOl=E2XS8OyjDX`8h32!_*N@k4m=a~%f3*LW+2I3f_CG?V{ZrZ` zC3JJnP1Tp%>~Cr3_fJol;M%)i&+Kte_zlF(Sm7t{3+zvy-*un&pIXKF*61Zzt#P)|M8LS0YA8p?Mm-> zw>J39tZR2~s=J&spD{=K?K!qL$rI0;e*Vw!RyP0P-{5a=f9Nm&;~iaD!*WaZ%PbYC z1!r4!y_mwF!uxyEBi-H1^@1@)uI|4hGVY0AsL!mwdFlDVY1_i=#q?|^SAU06Tc&baQpy@2wMtbz|ysXGNy!j;jafxfgz#mU=)^(q1Ee?LXN+ejnx^-OqdU5kK3Hro%^O z+4LogSJfPH4VMkvcxuCmpApO_9?$w2{4M>mjp6#b>+xGm=2>jty!XfA{B=52F;T17 zr|EK^jNdFB@K>Oze9Bj!uafg0#P+vuiT|PDel*tp;hM5*|9Jj0wD?_%7rOn@fm>ti ze}=6B4Xi)Kob#WFG0U6%`Mj&a?lkB!g4sVBKPn&k&%jk zL;o2vUf1)#n!i2&V6FY5sN1I>s9ku!X?f5RT% zN4?4it9ZX{U!PUB%dS6Ja@Mn7zf!v-0!nqx6lkBRldHQC&$>@L>v~jt>p$fev!*S~ zm6`0BcUeN>Sab2Np9{-ZHF#=IU{GJMUiR<){hQv|Bz|B!f1GFahgpx0=IvAd?WlC| znZUD?dG+n5jPmd9e|o_3WnB1w2G)iT_Zv&*-+X+i+{`M!{Y~kAhPS&bN`5NzS*+uo z*p_dabc0!<{^~pCr}Fx>TNuBbvEP3E&1ciEPZ#}(`0!)eMQ@Mu+G}$A-&w|Pl21`L zjsGVn_}gl(!mIcXTetXcZvXTxDc|01pWk_7x!;BF<0bwx9CS9ZZ`)Phu}7Wv?A~Sb zKOCvCx|;eS`bVW%wWqh*iiGBH* zQ#7X3?YP!q<);b!%6-|(*Z117-uO}N`k$exr6%<9KdIxn`47(jaCw{hQFq@IhE3h^ zzXLfK;wPq<{Yy+R{G5N@di9%K4BF4m_xxwre7^tTkE8NO-#7hJyI7(x8I$>XX?B!- zm*O;E?Jz_}V%9h*d;E;_OREp-Z_j#uq^y3E{ZYw18kg5?*=7AUJN8g$d(qzoE8`pm zelAyPuq*fx`Z4+7_WCVP>c&;EA5eUi=3yZuoA8$+G%Yek})E1gSv{xej> z=6(NcbI$I&=*9Yj_Umk1OMgrM(Vcvht?a7bjDu0ntgUmjL`xX0cKWOj#BU<|5cg)TmSM49le>`Je{iSp1$r({6^XH!MSBz(< zO4qr!^S9Bz^V|P3u$KI15PmJE@lpJb>VF1-J&ARu_5#`2{F6l{X}#@|2>y}O=^6U+ z$_F-)s&8l$ZVg=P#TI7Uyk{vlIB8V-;+jK5t!rAv#dVht?V23%?zczB+ne7vPTVc` zyExuH<5KLhwHen`_uYK9e(LshZ$8H9SsPYZO!pQsd>Atz?wpZ_bymjk9ugc~#4~0yaRcH1yFrHM~lYj6(!?ykd{~6>f z4%u^O$P0bZb&j3o$YXZe(9x!S(NSfFNy0ajWxlPq{m;-e)z>C|^VC)6RjXi&|2^liU4(tqnZKL&sDJP}{Z0G&yZxL0n5Qqk{gUUO;I2!LTRryO zoNd2xPld{s*~J?^?f!f$gZcF@?cN{yW_t@ilpmP%WBHl?3@vlNNV8q7dGr2vI2+x+eGE#)SuW zo-5kj^!(Y;+VtP<(Ld@#{_d{he)*q4=-Rz_Mzi)>wNADb#)*2nR2ev#>)!0>&O31b zNVv>I2f42w_J3RS!~f$VSvP;SAD`W?)o)&CERwx(l`_%SQ^52JDci%s& zoKyQwgZX7egxSU-#}j5BCb<8;6#DAt{(qdG3m<8(zv=vN&pZv|ZL3N=4sAVGK0C0m zNZ0ec#czvtxf|=3fUf~!KD$r9?vgyuKc;R+X#4wv*!Jx^$||1*6htODoC^oly^EkF z`yNwyP{}T9f27KIWB*%dt77+Rp8lx~Hhq@sr`o608XuPW{aZ*1zFn<&qU(zH-0EB+w&eMo+BwesIRWgme@uVi{?_y33Q3BrOnP3 zox6t1Q}C!1i>u_9Q05P7xxn$mG_CtTgF-g{ukZc;85~8+R-&%GK{-8}N&58ZTB~!_ zt9L%$y0uZtGkxYEl?*m-V>t%qNxl{LoBuQ9$~XSA``A(^cEL{dMO52vlO~DWX-Q3$ z{H|SYj4J9I+$`V5RsUyT)tXhYKV3U?p7)A9s`{NJJNAUC&MbJnMDjmF{ddb_H5=-- z&itKT;s0Rj^f%$_@7AaP$UE=8{gUJ#<yhqv}Whng1C$tzVe&uKIcN{n+gH(HB2*?cjRJIcri}1U9{sH)Ma;Gs%JF!hD%JmCRk=8q*)?Hy?Mr{594| z*XEV)qv-0EhMm99DEEA0XPCI-q2oyr#&=Vn{%6=?w)3$*?;p#nU-LQRU;gs{Ry*bU zbo1*0GoQ;vy$fkGGE41H*gbhmiJQ9e7436&c2TdR-XD&wKfFu6UH|LtyUG4Lw)S~P zu1)Gt4A;Q+4iw?M))t8BaBuRlAy=Fugfbc=Bz`(c`^)Qq2!Z?$dF6 zB&pn)oEv7(^LN^vo2Fgce{K2~Klj;;wzrRB@@@3)X%|1N?eADyQ~3B~X+2xkt+2U| zd>!)^?Aoz&<3z>Y+~kfO5Z za_%?%4b%QJL_hsGuYBfH+1)mK^8e}Xxxl{n#@%HLQ}av3YIZJ;6t^unto-w;zi>s< z=|gccS4+=&`K$X~)>YlRa{|xXE)%`yA3{y@j$JhQtz8|l`RQS)V>@5BO30sD@nikr zvN)p;`!+uO>lyjwZP>YN>8Zg@NmIEj-G8YJ*^L?6m~Ye5|}V~O}}E=%*aUo_mUmF+f{hx>->mb^zULkgN@LBzAyRB zc2Yl9FMsjreDcDITd`%g4(D)c>%?bmn^4&oEb;fIyjBC}@8d7@Zw7y>n*X5wu=Z?z z;X608{~2B{jb1PC`uhhbo0|O zqH&6$rnIJ|WB?y?3PXk4%F5q9{}~S2)``EU)4HnnNAS`9wy2T|hgbgycD}5<(JJe- zLhMDaiOQCG2WyV&c<<0z!_dIm8k^FGvcgAZ1#j6Ew=tP*amG7?D9PkVfr&TX zCdM=UN%|oF*86vKg|z37@rx+6$*F8JGYi-F^Ds`5xMsq7pJAIw0DE6e%#VW~ z?T^owUAK?-kJN0B4}afvE>EjruIMZkeiE==D3>@i!zz#5$&dq0Lh z+<$zn`a||(*}c+7dLLy=&%V$7W4FsTv-#QCsr-fcg=_`uR+KmGNoIa_{`Az3$`AYd z{s@0Ol;69b<%=%+qp+!ua*cTH<3238)nZnkWsu@nnq6|>7)ShscjxQ)il*5~{!#uh z^<(k3hKqJOHIW~tP5kiP=fl$8tMl7!WK(O!7F*1F>f~QqY?FLC=lG{p>lZvon9lI) zT-VaS-OK+ooNrzK_hG8XF@3ddM@4L_ZCB9FdqbBr0^pxBlE1+e|#Uz<`>8` zx}{=p^OQ%%vpxl`4PTE3MudNxcPj4mqithT=^E<{!RuzqCT zvgK{L>+Y#OfoG%*y)Q;a2%Na{xJaNcanMx9k17zNtRy-Y?mo)34U9`nBxZ^^IkFw7;zYEsSgxvlIGozR_fM zZ1yAjK2xzvTQp4BwKEw*?wg+Z@w2B;kCS=wtZ)5qV(tIc=+?hK^`D`&LjP^-Z~N^1 zg1R-*kKVWIF1_)`>4VvlTg#@hEfx@){&82%ylX*hAs!1D?ryx2Ui54Eq?(<-eQTsY z#<#q)v3~rY;g;RugZCx>u=8FKlREovYO-19s*J+(T8lhIE_n3XXe#qhJy(~<^iIca z*M%?ftaWE@IaSy{Jm2!=FW*W3`8EY@KkxMM^m$gwOZ=SM$;|xnk(|{B{^S0)9$okP zAm6)BBx65&4MYCgcYoY#cKzM9vUHU*Pq)JMZ4u(%9dCwA`fFhMV0Eqevpd6eDd;E>XPl-jTq-{bZfoyk89b6J>nn! z-9B6G9|Rhi~?%Gs*9UfHY@ z6FyJRn0%TgrDwyj!uySvc5Iek`|0?r{l>d>e$BVpxBb)o=Nn&3U2p$m`f>7sqL=d& zF1{^2&;M$}+Z~tRKN3($6=oUGbyc<45|^HUAmX zCu#C6RJqk~id*W$B!+D*sG& zZEr2P8|}MeOLj!!=irP<7E_Go9VxtVz5ab||M#~)ZvQ!N{XOpf@995p{bzVm6T0Nz z3H!~>uP>i2|IqB;b?d{F+Ff%$b2Q6E2Athk`0qfFb@=lBA8O@qF72wnas04^&Dux) z#=oNjJ~zr5>fbVNe7jrj>Wf+V2cuVfHOanxyL@B#Nx{5(56TWoNdB7jjvt!eY{&US`eEb4_e>Q>8{bw+IxHTv${N+AR ziRlwJHty`SU?>s26{?SHn*5Dj^?!au{b#s8^*;mGH-3@bzLQL+nYjnNILx!gh~tat z$(MFIALRC~^v(&qY#h(eUA0TE?%6K*c-@OD)8soA?umS0`cdJ-$7?oLrk@H- z7MJFKTl1?j^6swy_DQGzGq8O9JNMbg%8%NAbT9QSyZm>_F|{3Hsh{WNvdnWcs(U}Z zKkJv6MDq4Fi$%RjU8Y0oyLx>lm0~Psx&Lu5WaKnHHn8Uh7ZIiUM#AR-W>QN{ZaT~eyLdB+=uT)E8Jsu zw0fWBo4MlF9h)phl?`qx42+g`QxE+(9r`2r<9^4F_6=Y9<$i?LIF>5awq*Y5UGv>+ zyJ2OJvqEQl;Y}k=?fWc+v;4kYE?gZOpM3uI@p#E6=T_KcFL7Nl{~j;@Z%JuynI|ss z_8B%c`_gCF@7+*)>zDLH{v#RtbZV?F{t1+w{BqOXPNiKNCmx<1y&|!4a((cJ z;6Ijs=ltPbRN;Q~pXrCK)3!84uio98^zGK!ckhW ztEZjcRX-=pVb!tzQ!S*q$SP-}1#BOYh5J?M&KXv{~-pBggBrjKzEQ*scD2 z`|AtItb?ZZYu{h4zr6C>(zRF0w{5uNa(mHCF_-*MWrZtSPh>|uZ`{MV;MV=@S?ih? zWvYrM?YpX%(4;OQq2#V0(^LLFxWYgFLwvtZ)c3V7<5;E%?}57XOfIG5ad9WVH&aK*N%3msQjMtg8A`?)Ut z_?hI+0uPxv*U#^lwKK1~WWUkB_068_$N2&k_K()Ln{xhV*t}$8+rcd>->g^Zy(KKY z&SfIA*%Rh-9rb{F4{Ab8KyZZj?53hPF3uTIQ z0$rw^oN=+Iy|BPTZpW=Nlj{5JCF(QZ-xPm%clwd{Qa_F#*r&aD-aBpU{TzpvoXneW zQfni3e$n!p*0M?7k6Uf4U!DD^{B6;X+7IlkIeNoA|LiQJn#A>ee+M+J@vM1 zw@IprGjbQY%`|_P*mk#}@~iNV$=*M{uKL5g>4*KA8p99u2jBC$FLiwQHu#a+@<+41 zyHhuMOw;5M&{K(&Gu1MmeC3nzP6xXumuf;2AFppWt5dl&cj=|Cy{e|t?uAVkPIFA; zlZJu{GI!s;bBdU#$=ZZ z>(we^guj&mF5B6=Zy*QI0s7z+l9OmAe2aj>EcUN3KBENO|fqYi~kJd-_ zDSb%qH|f=r-~OZd;I6t^*K%_+78^@PuX$JIdOFSVqCfA2zo`#uy&XQbw|&VMdr`K5 z+cxW%tlO<84l9)pn`A2qxfiXmzJ9{aeAD0Mb=E)lUO$|-_(T0+dEUj>68@dPwx`7O zcl8b4)x4W$XL}rboZP_AU1R4CQB( z?OQV|>OLR(r+4Y`l`WcEdb9l|zl+O!FY;k~ovaam;QhUUYJWw~R?Lq0P~WuX()%Ok zx8#~L-fm65^0e)iS-!(LhqI|sf1G|~)~-0d{PvI8ho*~vQlBwxWBhHCHT&;zNvl*} zV2@v&X=e3rdg-!PWo5tm=9UXP7iN|Uoff&c;jr>zCP|M6%||QToBuN;*x&rmaG=g$ z`$xC#510L#BezdK-{jprd-jaP$ty~lBBN9l8XUO{9F!&2o%mDqLvL664gMqijNO0# z#ow&owr0=Wo5$|%{ygVn*ULYS>woAUs!EaS+rHw3mDzkdo7H=rDipeW8r-fIF`jdG zzSm$iOS|jC`#w9_ANvEcdAX0sNnCqBwOl&Z>f5bH0fuwlx~WU7Tl`zx|3AZg?)cxI z_CIuxm#y*n@%CfzqxnbtZeg+aJ9RJCG$VZoV@B#tlZr`72HPXBj(zTlqZhy8pv@4dJuxAW?jj;*INpIuD+lzv&ItT$g(bxEqu z!w{tg&cr!<{+I3x?qmDo_rv<5@FSIf3?I~He+++k{>aI+9am~hZf%kB{WiZ+clS|i zcau}e8Bcwm2%dChJG%hq?6+RX(zJDt?^anj3xQTCQHn zi`+cjwM90kyDJsB>`QhQ%QSA+njj$~^=Oa(OCdi z)_MC4`doKas@OUlaaNZ+TJq_S?vKWgtBzFU{bx8>F30y_-LlnkYgcFOn%aAC*2#^} zj%H2Ue0J|rp9Ps*tbEbW6f}QE>6?C=_myiCF_;<9P*^Z^6aZl(&dxje?qxSAHR{eYQ=+VcwdxVbZ z+qr)_XMBpGz~e=>`J;IYAL{o;+3b`3xWC!tKZ8(3;!`2+?6dc>3|=Z(O-QaupQ`X+ z;vC_)vya?9>~G&v-F>zwR^R=y)09c?zCPaGYs4R(!}#<1j2H2|Z)?I<)-SA>?0wBd zQ=YRn*N`J$y)GOS``D_nd&+v5p6f5)Zf`HS9bK`|Te@iC0*5G7b%x~0eOo^+ zZ~iCuC;#uHeAE97oE6d!)A~P7et7lS;=+{~LECocF1eSfZ9Kg?bI(^LmoSy4Ie(5k zpS$|av2WpbKBi{xi|tSNJMEuE#q>uVANM!aDQAjV#UJTsx_5N>>%y07;!eG@Tx=A5 z=ZN%#O$(B@d^uKe?&@;=Kf>3)mCru<{K)zb+r6x2`+u7(G3!C(^mCP4geoOY{@xd7 zyV5?jzM)R(gX{UeJ>?%YOJ@F4`0?qV^j)XZKEB^(mF^J)?OIE+OX@hoU1BLSC(rID z@?gm_kJA>(+pj$9(zvFvcw1|b34_*(Oa=zNrk$X9)*lr%jw}YcN1vSD!>*#GS2+3g zdt~DCGk@+Oi@1b<{kdDUj0Ysqy24G^A^j_u^0FwyCl27eA2bx z*J2lqg(`w}e`kArYsbcU_iuQ=`p+PEzww*gJ^RQXe!mac3$SC8=>Ec=omt=b0+WEr3YEH55kNOYq?z^?V&wIM{%DhL0 zPbC^ADYUZ}O|m>M^Q$&XUb;rd>g}g{nMKjJJWh#uq_74&{?T@!pq}e<%E$ir0_O`j={wKh_`F)p)T)Y~QYV zm#kB{pLrIVTzfZZi=qD6&FU<3%Fo?@bN$2nqxPHT_AP!G`L&+=wUn`0%H=Kd`D=TF zlI&_P|7`R8_}$ry^T4m<`ft{4mB zplr*OoLnJ|V{iK0?Be%Ge<=I?Nc_0=>A(IFKgyT=Q1(fX;&nQFv@GiC+%t3XIdVHw z&XqGbzP`T9>%9C|kD{8|vi)E0Xz1*JJ^A@RdEd8x^OFzPnbffV2!F)i{ZHV-@Qo}P&c6LNFMImMFWDY3>~q&l@>dHw4zwJ-) zgY#Yg8Mqc)`s4gqm+e}vap;F{8x@*((~gDlBzt-sDN?RE74dlI%dMMo_euVV`@76e ztAac1$Mg^HJ$|@9uxELdxn8ZEZzJ34+EuR%R|*(=avj)D$ED}tYA(@ zJ*7Y5m)pc-waF>(Q}fH;Aj7|+Uo1^wi?}KCs(`<%CvHuFMog6{)`2kb?a_0e_p`fvo*hKzQq2_ z{|wwe{xckt6TJ3E`+D|T{MzI5+C?Y+1-|9SMC`BslY+s|-C`ec6k;2qnaF=X>nGT;rR*{Lah5Shml(ODdUlx|W_~ zwfwnxUfKFNf4D!mAGg1e?($LU^?cqM^+&btM>a+{i+7pMmyWm*8KJs$L)*Q39?LjB zRXTR$>-63@px&k+U;OX1z3jR=`x@if;a9g5KK#!hnsICHwZ=!hs`52uyIME1P7T~t zw8Ut`NsGHZb5efIL%vU8{k;8Y{q6sx{?7Tw{de_oIl~WU|80Gg8}<5#)Ukcv1CAya z*A^W(p-_H6V_~5CI?e;<*mrEHQd_(Dc6{dQ#L7&Y4Kv>5I@uIyPIbI>`k<`42;+r| zA^SI${Ac+2Ve5Z}{o4OTP)0q$=XU)@YOJBu-Jo;1Xs9^|>F{gR5t*)2*Q9-;-YT?N z1RNC9mTHx}t8Np(HWjwe*Vt7gfPGm7(hjzWef<9!CKg@($NryT;nrO6wbSf#{#0%K z@bLr7tp1KYj{2=im)0fi+k9>9v6s4fQzlAlCH$OuCuAAl(=@rq2mi_c`0ezg_wih2 zpX+s&@qe5J?j5g8U3lY%ov)2&spOe_olZeDlcyaj8VZIAy0yF?y$|nd+p$k<*X6bL zTU0KU-p>A+TXV$eBg4ntOh=dkJfAUmJhgbvwC8ci2mQYAEUNq!4rMAcciUfT$#KbU_z_`ojxBeKT7s}IO& zTt2hQ^mgVYciw+6xaI5#K$`e_f=KaRwONsy|T;u`PRN!GyCK! zJOg^I&F(MzZfmtqCpyBW_@n;uIK_`FhOeUT&f8hJIC|-=HS=#?E3oib*dh3PqY}&9 zji)6WRT>slA3wIfw|pPd)spi(KhnLLBR{4s=8k>zE3E6>v8xf(=?N!q8@D5w0A zIe(P5I`G5(!~SBgtz6`@u5Nj&^zPF+p7b-bEMgzWl%Hm>m-@;6E%5Jze|&#({?0D( zm#jGNx)s!Xle#7A9`jLcx$)_Wyg3t93QtKJ{Pf|e@ZDcL>v#Wp_KER=f1LhKu#?QR z)42Aw#`;ly$3FgxUn6JbMjw_F{HVC`;`4ImGrWww`#!u{<-qVDp+IkIRYk?;t7R?$ zhp!$vJ!wkbx##~l?>^FX5BXvIC|Brt#Ey@0y$|ihU(J)bVA{RX=K9{t3Mrpd^#3H} zr?OvUkYSAXevNc{dW`$w+3_rYG=F$6efdxL@?^IU+osD;%w2wnGbQ)PRFz4Qr-hDo zs!Z~wJyMl#~9jl5H~de7lwf!(wAY%}fS7SuSE#dq<} zdsEG)TQBD=YqdGKxbv>Cd}V_Q|G9mI`GQ%wD{6PY{rq=**?Z&4^ZyxE-(Fg)A6NZY zaD(N+Q z`I)C%*M85w@b=5>&U};An$LYFdvjT@Gi=l1l%E^$aoWP-r9a{WcWwF4(BJXs)CA-0 zDopnqRQ`zuAN*&v`D2sUhGXBp8}jTi5~#2}_)dFqNu=o1DMlL(hDowig|C)$7j*ja zw0iA%wZLg|dsiL0R=)j3&HcqcxcwU8 z{fk?dT7?R&fK;>7vu?)x9N zyZSQh$i>6AZ=Jesvr8iC#_Zo3_l_^TihP*g)fK6pk35wVKJID@i))c{T(#*x!-=%( z|Moun&v0S!y2(>^$Ay2K9l3Aoj!hf8JQcT0GFBE*sqCGTFz?6X{;G%nOzSSi>0PeV zj;>Mv;r!rtyky0fh;_?X#k{)icH8IT+lZ;X%SwOFz44f1&x7al&VHyrYA>DjD{tx2 znuHH}&8cf5?p7Asw|@9lm$>EQ8xKLrOR}c+M0okXzCi=XLPP(S(RH>-VYGSpInWA@0zLit>L#{H#Cbdv|4;ygq97z*VW8 zqi~W+aPv-o9-}oCrV%+Nn{M^(Q(N@3s`N@vn3m;IQ)h0^&$?CG`uqR%v;N&upHknl zpT$1qZt>B33?G)riGGZ43A*&!{UhJhVioa^r@zfueD8DHT}7?8-#edtZ0@@GBl)*r z4e!VHH?gT_pRHuT>Vq}_^iF}ZL^sV?#upI7g=MQuhoCInI|w`V{hC0B#sj{@`v?r+DB}? z^6ro6N4xV!Zj~R7p5eAQ`Qd*Cj*4&TAFiG>db&31T*z-H#*;cRMSIUH-|S0losz0* zn!59mx86~=!0u)5zS&NG@V>KDzDu6zpIla)_TK*tEz`dFa$P^OV_%?RnW08fk!A89 zpUNa7&-Lft|IjEuEYI`D{Kwvf>TM<-B^su^ntAWuzPaPhbE$Tb%bks1d|Coq89iej zTX+8L?muu(?8oAV*|q#G^8-G}>`L8Jw!y6VTj?a}lGqg;n_X2>9T-xUJ#1`Zj~BbL z|H0&X4jbPUuWrrn+T;HCyhOHCOOoNr?5HdGwi{UlE>39`Z!l{uIK_A%@R-dXKB>BU z5le$-3GJ^xe&Nf;A1i9(EW*8~6>k0Z$JQ&(@Nat^dyV$T>rG$%c`LlGUHYYK^-}0w zcBfv@G1}=_rF|7pRnV@`P+{l=C{1FDum3ZAm|x>{?fsV7W*aUaTl{@=LUbf=%(OZ7~W$XDmOKa2f)3rr{ znB8-;1=XLY-jOil{JHDuBZE@AZ5!h*U5H=)b7K3kpkK2OX_e2}_Vev$ckkbZHBleu zciKOg|4Y5!)KPEwW9xd}`18Usyq986=A?U<=lp#(F{!uH);s0v`kwj+bL=iDDd9y{&Mn({|K*DJO~ykGxB=)h!$O{T|^Q?2KoUN!l9%^aTM_(fLsM}3tKTZzt_ zxcEn5PRVTvp=+1UNs3u4>J-sZV60$ZFzotsUW3~-t;#(bahsX`s%M1S*bgA8I-E?iZA@; zekh(f!=BTIf9a3f637;uN#aC(YYD9ji{2IjvfdGI!6`%J;|L-<*FyJYGP* zM)HGm@W*4zS5#~|Bro{-;(vxi{@?2PZ{0X^`|Z8wwRE%YW&e|u53E15=0o!jtMi8@R}}m1`tWuM(=A@BXE#$j zm1Q2VvCsKDZ>Qz!So@}u-~P<;5ukCwSe*l65(_srCdJN_-+gOA&2r}cr8Q4KY9F!} zwK4y&-TmU1eB*!%U#fj~_0$PoeZKknyF~%q66^G?JuznGaa!PJDh zeE%8JJM4^3K8_cz*ni02rTwi9_kPT{eX=yKiz8zri(&p0i<_U{TOa4W^W#R%uC>)6 zOCwF@&;OZMJ)`GTpWK&M7c;kRn_u?3KFrqqvDxO@?84M!kx9;(Drs&S9-pNx4%&V^ zF8B5M{0|eelKsu>^XI>5-CkLJ&i-%QUF~P<#p~|Om$xZ>q`g=9@P5WGv2Ge$;(vI$ zO|C38+0{C2-f@Go*2>3Lt8}&rEK51~GT!@->c_KJzc;;kYo}b{?0VVMa)zhX3vpv# znMxU+6Uaewq% zpT6kz#=|O;-C5Vqmdx2c<@VGfTMM1~2d0Pb*B`l5GVAkSy_BTaD*qX*wFR3TZTYmT zAGaUp{}F68z0HRC!})`qkK;S$=|`$8S$;&`&;<#X}3gs*GamG zF41Cp#Lh71+Ll|bSC44&Y&Z7gsV_2{Fg1R`+ZgsY{~4D2*nC*3_T`Uh-}WhADdpLI zOL70yC7TaTlxlV9VmnrsJJEeok#_>uwU7Ic$_xB>{itsHhu;tU57&wxS^u!0d)<%O zM`rbW+f};tNSAEx}AMT8e3JSmN z`mcJf{EYke^3UyF-!kj!pE|X!qp6d;EhnCtxKTBn%OmmS3FeRMq`#Ga{5t(ezj(#$ zhtH4bxBqAO(DcXm!;`?fcV2GH5{kJMA9T|+x+~fOD*ZJYQYqQ6PYcq2fWo}pzvVD`I#N(aEb!sD? zOe*rNSpQb=!}AB?-Cw!+d+en4f9!AhQ@>6!Mf<_qP?MJ~ho4T1Zn}8#>Be)M{c`DX zPgg5Ha6g_|CsI-J!cOI~o=tr!Xa1)6EU7sY|q4LY4y>H5SpH+5s zFO*g-UA^(a(?9Ohp04xSv+ilO$-3(Nqxmd9${&fhY_-l8jf}W=TX)ToxGb@Y=W_nJ z$rVY8Hf`#kA$Mb4{)77m^hnMU~ZJR_0GkK{d&=zmr_fQIfnK!GdZ5i zUh#KQjqr#2o*!B41TO9g{wRGY?E9Or+x|PRzR`cPbV~C9{Uj;%yxRs6jq?iU+tsMf zzIf=Q|K9JH?$3XC;Y;$-o31%AG1k$!dH)&skFUI$VZZVI!M*YkyFYI2Z+WxM^zmwo zlyv>vr2FZeQ-$u^MNNu0VYHKV(+&ydB|jE^IDIHy$VRk&@sGuRo2PsKHtEt+?PZSS zU2b&bjeXfEOCGDFJ;IO9znPu=u>O{tJ;IH1)<60)p|?2V>ehV0sDsO1mc1)e z+?l^|vStpeApe8ofd{@y)Tmc~TzzB$=-@e-H>K~}>NNITUb1)NwHom?Zr|cGwmU2; z(N)piIwf_M?kcWnCzvzrLSxnoTTPg>dQ?@i#1 z$=f8u^DcR^%=zSL`~9uuhvkRL<}rWd@BX@8=Ev>>a`KnnJlTDPz2*6~)~8(jcQO?w zxs<7B2paKByf7*I`TM3i^&gi%=s!3Ur}#ns&F{rgHHOw(%P+1gy{Y=q^@|>}>60~% zZc`sK?%9(k!6n|HeeCpy&<%ZgOWxPNdcJ*T@`}eIq8d^6ukPi)(4{@)NAO2u=N~6O zJU{%;?8BY&cHL{E)?VE?wQN_q;>6==VLVHi+(JH8T@R1D_;9{;O-TL^k3E6a`KxXp zFJ;}lCE#G8M2X8+hW`u|3G?Gm?NNVN-oE91<9~*2%MZ^rKH#y-Ztml^=HdStT4o>K z=AOG~?HX;>wI5n)Hg5LZr+bRQTDoVm@HhJ-^IOH@1=pOa&we#edcSi1w|PAYpTB+n z^r&KK&tI>Usr{fpx{xdd95to^GW{5rpT*45t? z6W7$-RNB&In&O(o{3K=L*XPO~)&;v<->PdI()8%sqqNx-(&j=c&)-eFBX#Qs`^S3U zzspK&^DZB?6P$f$p7n>h-@m2pfB1T3`QAB4%az@=l52u^rsn;yb(45|@{vFLkN6|( zZ>*I4KG^Ui$|k1edL zr=9n!_|-(c6+qbN&cA2~1`MJh}jpn`a zDYy2&-uU33@%{Bb!jFiF|2q3^Zsv*`XYvmT$$c~}mix%Hs;f`*tG_*qe`B0qpxkz5p{jJ%8}9vOU|voyHm+VtONH_lupFX$)O zYCEgycIriW-B%Niud~{>SnB?+jiuR3g#?Z_xxM)um-yk?HT#zT4BNgRe$CJBWOCQ~ zcvab&eQKB9oQO{Qt;4Om_ht)^PMcHmXX`fQ-#35VKUU9DQZJhMmbGv3${#^5_Wftr z{$f4nl!Bs#ddkyuivOOwleDpp|KFK9kssENe1ngC`#$S<=b!kMPP%zE&X2UG%zF{t zc1NMdZQ^l}>V3Hz7d`n@+}O-K?fRkX-zLx6KJ}|y;;h7vA+}R3tY7Zk@^71go#N|R zz1O?eFPfH_+;=Z%qRSeGP+1PS*T!tc~Q z6TPcVH$?Bao~byg^hk%}amC%&oBuN$G_6mc-+o{2pU98HN9Bb|IQ~?xk9vK%qUhG^ zBjLI=*KXDB-Mh0*W4oDf{)`7k4HXg!Nqe6^-hV)!v*Pg4%i0z9AKCS$T=+ZfyYq+h z9b(7*W*M=)coMHU&-cc2-8+qaQ;%oMZ^}QUEBB3ietXsSBl@j}vOU(mU;Bsuk@@At zyFy}DKW~pT-)FT!S$)nV&(#N$G#;$9GF`Ro^5@GZ1^W(PKOP#o;$oI=W%je*a{LeE z+yBXZG=IB##lJJVws)>Cjc=SMxqr{ql6u}d@w=UiD|Fv3$+cZ_?z?w+74;DXH zoiV@k?*coKAKu?We_a0Hf6ShvWQUFFBY(k)S^B)M;^Z%J_T3J>oYLEK$#%z2&z6?l z13cnEMNSjCfs`>2SIDhw*H$e(ApzU!{JqRypR!*~j@@H;=OZXXxK&RM8jtc1yF3OPuMd(*f=@Qd*0mkOFQ`` zYOFq7KkhH}$L>RU|JL6tYplP$o_*qv&h=gqsUsH;#0DNvoa4T|?n2>pPd9TSZF9_*X^vHDxs zkJ^um50_bmZC-vi^SV{;i9MG~=gPfYyH(b%&c2f8&jb(V=7|R^POwx|_^cOn7FcyI z>-4oZ-#5-&CoR}kve5VLuSj{Dn%p1G58mIbe|-Hwzi5s6C3C57@X@S}J<{dj6)(Zu*jU5izhybxE1nX(VQpEw--o$ zU$6cn^S8newdhB%=LP7NQfh)`DtkEfr)d3Pcrl# zx3(A9XB`{)!#aBM;eWjKqFJXIfAdW?eNy(iTv35Fy?!ct-Cyk+$HJCNSQ*XNS+d0@ zN0e*RthG`#7rU>V{=m0;#jT1}hb+>kx$KykJk2c0S<^zLKfv<*){5_MJ2SiHe=yH;|j@1~08*ZsFir2Gld+XdFxcE%HEn-v$^PX1 zf^n98dP0XU@7<)9faTo4MG&fDSa?&{OwV9 zUrzVK{3BPSjwVr!no8=h_b0Viv*5nXh;G9#>vrx$>WN-Kl+iKYp&t_;qh-`MQeu zqr0rOl*ws+Shnbz)Z9I}b1!x}D6CYOBWiK-m{DVmu z!*|c?I$y2hC2Kq{)l_Vl@orDxf*(_E#oux8P}211IkLj=NTEyjNtKjmd;Px^|1f`G z-*Qj*%Kby0D`Q{%TDCCXZtI%Y*V8@+@1Nmiw&$|^9tPbW2Fv80Nq#e|ro23wm>N8* z@cyq)#>XzL3=2AXY`%`__OH*X&x!=bEqu}now$deTpNTm^B=n^u>M5a>wkM6{%5$b zgw#`O<>G%kM|oF1nCV?J zcKX-$xXly%aQ9$$z}64<8s%Ot@77d_&)i+Odyc@xW2@G*vwX^6z70BT4snk3>a5_? z*~{+wa#c=t7v802_nE;%ey-Zj(BqwtbV;^+V?ce|$b3C%FCJ=?yzRNHhmr{>q^& z(d3yDX&yakwsT&XGRp+MkZQKICcB<){k!+cXHU^j-lB(=td%UCAn;hrQSwez^4hc? zlfNncP=46oRwsS+OFzf$AMQ~XmTuUy>DrdvD|Oeq{L4wuKEJzW_UW9To%ZIZo11KE z^wN2}=Io4m8vax6n!eUNv5?1S<{NK6bNBDm62;%vHKtdd{aCyHg`N1v^?iFh>mQwU z_T6zMvCX==dt3Y+m&gyl!%WZJ>6yf6aq?Fj=i^;%mJ27Qwz=|6ayvM6N>3BVD~|OO z{)9fT=d1CUnD{Zgz2v>fnn^szS4HbQJ^8pTafh7835A{yuJ#A_v0kzhc=7p%^`Y|X zXCLm>57^^vp{M_3r`X~1wHK9*WmqhIN~J4Lr_A$zyQ5k?c;a2_dY`wIqW)Pcf4iow zudbVKyy5S{J@V^c+!t75r;zbW^?j$w$t_zhZmqV})3^F`GkNCIrbiZyceT)}TJD(%nojy%6DH}C4})7CASZdrWq{#IB1IWJ`? z@-!^uu4`&;?)}qGs-I2%D1E5v+g7vQWfk+?u9Q|7KYRIYR!h(w_rBeW!*uKgW5j#y zBwk&Q`g``-T%o%MOP)E|91U}-RCuS{^DDexy}5+r>(lGP&X>cZLOxv&iuO2qAm(|- zWa*9bZmv6)FPbf!aWTTP(r`<7l3nt&2Q^E+Ghe>{GOkSBXkkygYE*7?X!`YcwmN#@ z9S5#FUmR%t;@z&==l<${l*RVRPd>Q$$8pEzqfYtT%x0@C6_^>plWX|yZtvoCR@a#y zz89`Ai_KiHpj3P77Vp((?L9B7 zFXau&-||}EmZRw1gWbM+W@-35E$&q75_$5UL12B(58Ds@2kkh1+kXl8kdh*ZQXG1Vs!QGpS!i^ zSA@_17wc`Ao-<$Vtem(2e%D$yj_piF#T=x0>Crix-TF*|uE>)ZQOZB$j z^D9@IAH~c6NIqB;?f!^g@THZ=baer>rM03vr~J|=littuA-i8Nt30gWmT$eyw2!q% z(ke_H%%_G{Pu8+U9g3RUY}oMhGD zD1U8_)8mJ3J9EokD{S{RIhlQZW|(Q<$t2Db2fnS_9r4j@)qbuw?+@FQPk!6yIlYa0 zXWM^=owmo+)3%9S-s`-%b{XSRTcjn8d z7BRjSSDws@x}E)M*Sr3L5B5j>87gLF{IP$yUZ$e_h*j?tCG*XfOS7wIUQsxx)A6+3 zuVUT2cPZPiDohKHc;uZqbM85&hKrLt-)KLs=dBU{Am8{kd3A;y_r(%lzfkM-I&UUf zO6wh&Q26On;im^Ri!beZ>*%+3`CPk?_nsY`U3}}rkt6@k%#}!CZax<3AD~_T_Ecca zs@dCDwtr)d)XNMB-=Ey`(Y$y4KK_4Kj;2-BMa&X2h>*61x~VLGE| zG%Y}4;)yQ@Z65KOoxAV8Z~LB&+uJU^yYsFqBRMq1?g;<-=OO!4Djpw^(r^7bx9HHX z$G@XAwl6vLyeOq1qJ9^r#ml3~I;lF>N9bC+-o10X_xY@`_2zU- z9lzqxclzt{W%hg*I`e$B$J5R~ufN{WXLslHzj}~%U zKJc%w5&vCNas7xK`{aXC`UmTUE7~9Zo1bNJQ{@ut*7NPtUb;_Huf8&6mFsSvke=f0 zIWvX&$s&vN*mIU*fbf$gW0m`+n z%=Uk8XPf`rqiVPOkxNGlQf*R1w8Cz0`p?j0qb_mfpzpc4vcLELV1J?By+?fg5BtO4 zqxS4FeYR3|Ph4`;OF`+?(=3l2>9kAF|L!RF_4pslkK4QK%;FCwCw}NYF2{e#WUW2_ zs)|dOYz?39$mEt-yggmV;m+|2mBQxjJ%1vwZO$9)cA6fP=l^iA zXYt#4`{FVC}) zUF{(8Eq#_hwr_C>d|t@=B^8`=NZea4St&yFw4_L`%%+VS$- zT>0 z=QaF1bZpg4F2=7+^PgEfFlPL^Ua7zRi^i2u(Xw0b_CJ_+HP8M?_;M}3CeN3P)7PB+ zom79Q^0$7bJd=&=gV=btkF4L@AAHF9^}bs#SGUAF!gbeeU!%J-J?6aO-5SE=uOP&< zz4%do^FH0b(`_nKANh0rh!6WQ_rve#58HYdX6ZlNVRv<9ipJDfZ29}SRg+43JhP3L2&;P^x z!e8d!73PDx=FMMRk$*@|<;tGw6$zPDX$i^)kODIPp;f@&}I)o-4DEMM&P zKjj~WYmct4*nQ~REV<>`CO+G8S4O#Aa4pU(XuOsYS!uYAFPgE>Tz+*8^J8y+v5I*2 zYg=#Jet6ynM#@Ek_ttgnqd?DDpFbGlaJP9J~MoE!WWgZ|_H8QSiP+vxo&?@8HkLH@AS_SS?e3;IKL zUVc(KO?$S*+=Ek_KZQD~ByZH&r~Nyw#^q!CTjodkZTl=Q*9raTJ~&VINA`;U47q3j zGjNMl*w_}YI{EDO#;sfXBKe-(=Cp3KeA)BBe(Gu?9!)LVUS4H;o}>Gg?cRSiG%r4P z`H%Vs^Xh+{`?+)PwEd6%Gc?o&e%SnYf1907EVs1&_6(~Xoy#ZteiYrfVX89A(`L(0 zPh{#(s~7*e=HL8JNB+ithDXbfYMQ*|`~2woVSeGP_zx3$!w(1@TzNlJJf~CkNO*zH zf>kM+d>+hqCW$|ruWG+z|5TfesRu3PrXFm4Fe}1b-EZ69>wknV9R0X9C#!3mn?-i<3uJTUNh5@s1mTce(}Mk9=EusTB5=G-DT}L^H`Dmh5k{GF!jcS8VqhcbUnr#LSBFd3xKN^Xi{2WJW%)l$zk z*FVbc$TO`zxz+Mvz{Znh&)giW66Q^Pai}lR-#=SYx3sYQ%cW=;;nfW**KeK@H`_D% zV|3>OTj`)5Gj&gVcsH}QHZyzo`Kxj_A6{N`ta#Tqhi#7+9)EB7Htzff{)cn>W`7hu z{7>1^rUl4rh!7j!P3uq5Z@)P&;C4EsN5JzB3PA24(2{OpbY8B!Sb9pGd5CKE1hmfW#E zoKw@u(6joa+27Y+_RTilK3)Itg{9p+>6&I=a#i2mUc2>fee~b?ABF5C>(1TZ@@((N z_QUr$uKrW6U_Tz^J9XK{?1vuHUI%a3xix5muZVT~Y~f?|Eq#8T64DDlY<=IgKO_HE z^dWok8rKJF;~$0}u5bHQwqRCv#W|CWS4z20pO_{Y=iy!VN~DKJ%tD1nc#`;I(}`D| zRvWE&!T6|c;?1(nhVf1n>(&2;*MI)~pF#CMLsM1#Ypwqb^X-3{|6zX1e_Qy7nAH+{ z-a4Zi`;Y3ae|%TgSYA`xWfh%0?c(tjxBbPZ7V{KMzoB+(!3s;;0?tG8?S8!cxI5zS zmVJ^pE7-k%6hF#uw`0GipR4{+zqh8I#VWOR=^W!FYjjhL1Z{dgGH^{i@UqG4&)tR) zo&qbbfTQ6V7IIVSSH1sNU;kwP2j{=3@t>dnXHfgk&``Jg`#KR z(^Z5xUpHTymvb6YTcPt-E-i=fU5l`_uI$D(u~^=0;@ys?*7TJi(K3rff>b zw4kEa#{nMaC0}3KqwW89ot@sxeGJ_PKm9uwXFL7T8L`EF-W^+hoNt$VqCZWK_uJnl zo!;MtJvF;Gehxogc;Z5j+fnx4>LQ;@4PWcD|6|Gc&k%b5&%gf+C+i=y|2qAj!LR;P z{txz->)*`$koNpr&EL5-!Vjch&v^HhSMB22I}>G=&o?=5vugRS)u&GJ7qBxgt&;ED zllt&K18d~c`yHic%^kOt-P-)ByzsW$*%y*0B-fvaw><8i_~UZQ-;Zqm_XIDOTP#M3 zY= zZ~9$663?yp!EXP@>ce4DbMJm{|Ks>!pGE1~YnxA9>R7MrS&piwF?7H^H{=t+V(`+^C>_6~tuTQ#}e(j%9P4tiU zN2||@yL{Z<|CQU)y;--^LoeUtw6ukkcA?ec6tBP;I}Ru_TUZ8OsW|R^d5`gn;bo-87r7Q@DBQ z9iy+E7aM*yKDV%x37_>tEYnn%>GBcr@S;~%&vxgFEnfL*x)7(H-Z~YBcd@@8&R7xu zkb&>&XNx|`h&R~>uFTyjH1&G=vU{uJr|p{W-S#Ll^@nQTQtr>&rR`qF{*{|=Yhv$R zr%;wTe(lAN|1)sktZ2GqujH%upCM}7_PICbY(Lfa;P11<=C`4FTlOk@_i4ul zADt(E+4S_<{`94Hvo@$~=Wr`pu;233V@bAsfmihA$NilblNA*@Z&7!RF3a??m3oQ~ zoBtf>dH1ut^iSnF?}um3mOi>`?z>}Kckt!)%c8SaOYdm8a8kJ7_QXaRp81FNtoX1b z`_hpl)s&Z(Zr3k&Xw&mjwB~ovn{%2_0;$ESX`*hB(L;I39bj(|$q<2y8 zk=H8L^P&ek=Z35(mZu}_v#?h7;X z@6(%uDnF&$C8u9k+q?g3?0<&y@Bd8y$N8v!&FX(O{~4a#|GI({X4zjY|Ic8*|5N-A#ebXD|NQ))VRHQe z`*7*U{fArIDrY}pZ*4KKpRUs$we7Zax^%?*2hTUI{L0@mkMR=khJ7E8x4r2-Rk@*d zarpNBv;Ob(;-ASq+ONj7+Uyad-Hv5H4gWKoH~rHp|7!PthWYn@>i-e=&k$Mv^87#F z{|pR&7581twNuENzH584>0IrjRyCKVP0BS6XiF5H=e05Hc+BHj)4o5H+n=*xMsnMm zT~Ch`wSGFk@QzzO*PlE6-_-rFc$Z{bqUa@eQd@7Jqyn-@ozt(e?iI zrvB}6%0GHPyg$0>cGk6D%Ny6YzI`^oRCI~iXIC56DQ}cS5`Ho>d{t@v@t@)RWXsRe zb~{aajZZ8w-pqVOc+Pb{@x~Vqo;~;5y!+k$2XkiZGh5r!)as>mdNZiS<@npOCi=pj z(vP2y#LMm}USE;_@Ysxf(#;2Vv9+(w-d1>j?;vTBLApW$bwFmrX8y3j}e8N^KP zRzI|FG~F+JcCqWqWith*=GJd{`_}G~_C|wyYF#}_13}%MGA|1UWHw)tUqXLqc0tH@KDIhpo>5MGaRtp{5bq=;gY&La>84G zcrJWVK9BLj*67pG{lY)`kB5gE&;$ zsawAMXJ|@nef0CetLmtd(yyQjcTq*$Z^s|*4`-Uzi&ac^zpys{lu^w6`$t)%9ex%n zZwT^x^P#%yO^xy6{|r18*S)6)efZw-rMKFzeWt$2=@;t~{r1L6G+y{>+gs<#o*KX` z!0tH9_ehWM#HfIW5)WUl3Rt`7-}^tpR(~ROT;0P;w${~u;J+5J&!~c}+WPg5J%tZ< z>grVNo?Dt-H0?jb*NfX9*2@HM;qSi3@-emd>ATLy@qDkv%Ch%8d+dKTVV;F}U+lya zfhS(Sj-M2MZ9`UAQB<6>?A=zGnjQAp{ql78&6jj?x4h0&+_ZJ8 zN3vVRVM8u9tI1X{FcCuG>x5^rQ%a(qf z$ui+Q_tccc3tb%_T&+s)sfpIU_tpECw&`)!R)g2vR&lSk$L8#Fe`71!{vbB$bKD2_ z_N}&VihK*Jmq*{Z<0hWrDW{q)@wUldbZ5M&%A;H97hFH9TnKa(Rp!!I1ifQ=Q3Kaf z@jq>O`(NLa|I6jIJ7m#+h6!h{|E)g!pJAb=gLnq?GAknQzP4F^tbWt?!}1+*DtoSf z{m;PjcYoM!t+XA#Yp+y)TM_ta$wGH7cIK^t7ydJ(__yqnxwghM*ZNR>`W2mY@7b06 zx2(IJ(s6L=hD#F)93C`jS0DPPdFAW*o_(g5(y!R8HFnvysq4PCzyc$a6Diq~p5)tq zKEvSjXYIs!S^nK}I{QD=9&gsm$*RfqEhm?}=7;^k>v57-(?7B<6o~V$%+_qHOezc3>D3OJ5`Xq@wXo%lb2yVWN?@89^oEIrR=+TH&QHIFU6 zAFbJDEZlJ@tl;n^FT2@4U(}{?bGIK0==o?GJ?Ulbo~<^oA3bmX&+st)$21FF>0@#n zAMWT*+x4NobM2e;>el^dpYB~e^}*k(I~*GRDLsrIXrXrwx-l&oQVo@Ud2!+!x%V$==o9rt;COZ=agbPx%|me(7)fIrG>- zwzp3=AG?!o`YQZBU+In-`{c51m(IN1Iqz!7OeJ>dy11RT#{=)}(0sH}Z_eX4!qI=M zs&21*5qc;w)WiGsmTy0{ZqNQ=`8NB}t{>$`rVCY6KQx(jY<~WK2K{oWGX|&aPjMPJ z+`jV3f{AfP=5BaDa7yr0E(zSQKmUw%vdB6ec-|j5(pYi#R z#8=bWI-%Eb!aw3a{AX~vb8GMU_AlJJaxWjAHa^Lt(dJ+^;i!MU*XR2(6|+5mBZ|#jgm~&sy#(w$heKKve@$OdyJaa4axqlYv zuk(<2zOJzE>+!E^eDbEU?0p># zuG-GX$%hJm^hwJKsRula(QKR{%6Gtk=gueJz`yhBcwR(tOg@nL*uQfg_Z8jT)GH=` z#RINvS?hJ|6UWEBxp`5?&m0nqy;%3QA>n}FB-`xcL9QQ8`)B`W5IxV|{^jZfm;A4s zVcNMzgxF^t&v&T)wl4nR-#79Sb{ZAwVIP((4*l@F)%D-v+V!_m-z=HrE%`QiOIPBj zQ%~;9lu%T3(caBEMedEB(%!0#3&Xmeygj|~`J)dvYHTIL7e{{n{_N^}uZqcs?N~qP zx0~_{WKTT2{H0Xr?z?yI-St;H@z_=8%zbkkz8Sx`KJd5B-*R?(zv-6iTkM;w*3Es$ z8GUBc^{w7N9?W}ZWLIa*y)k4CTIS?+^akqMKQnTfla# zP2&!~30shOnxEMd&7baz`@0TZ4nBOz_x`ryv!|bY^lC>^wx@Qz@s(fskHX&yfB1dq zmfzj#x8@tp|66xYy7s)L#JLL|2PI#5$bEg1{B7kAjd1%9JwJM?bK?Jbu4Dh!`a}J3 zY|&@Gt0njOv#MGOqkjfP-@dh{Z>M!LE3>-w28Sofvp)9!2-+{O|Aq5M^M9Q0?0SPp~Y>hzVCjgZoN%kf3HTabk;M=G^>gn(W|D}rscKfyDq=8>;5SIcHx7` zwW-Tr&gVKdXUi+| zW!Jv=khf)8VC=DmmPo;+g$)uPcDs4nda57z%?hCOuttE6#KA+w-FT?$49%yLa!h^M}xD>r-9{J+cjYW^K^@VpX?6p0&_c zugBk({IFb^@#)Y%xsPTuOKnu6yd9-&_`;cd*!J@7Zin_y7v1?$|J%9`OF#W*NdFQ4@a)m2eTNSH`W~BW_DXWc zZIx7|9WOug2ybl`IOVADTB5ia%!mXJGj*|HrjppWgm$Kk8STO?}kevB!Mn zsy4Hz-QAH53Ibl9Z3kK8=DxI(J30GVX8cu=9nF^BQ_b_;YE?gEe{1=$tg+PeKSS^B zW3$$tdvM`~Z{f0gQOAnsw6$G2dH(l0Nk6~rt7(7N)$!boJy~qty7i<=&9v|>EsN9F z1)slF{7(DPewG)v+K-&bQ~OZcd%o-8HpTSGF0Jdul&aVa*>2B~+c)*{e}+R-f3*H* zaFXxb|G~fTKf{rr80$&LQ}%r^KN5Lm`{ds zJoyi&%x}Yar!U_KTi*JG|K|KhVe?nGE`4$RR^FnG6BM(%r|xucW0}~j?N;Dl)ALw) zUR~Lyzw`d7#7D&3UEcI{#U;iw#gU#e{r_GWu8I-|=ETYM z)~JN2eXZHHYu~!}zV>U+2mYx1t@B6v;`{Y^roP2T<&--YtLFT1wh?rfw>%~7k(5-O zIOFTfus_Kko8Go0M|$N#!K-;?qx_x}v4mp|CtI)C_|T)lu}a_Mg? zciv{TpQRc#r6v=XTijUTwA;L{p?+)J--r8ewm(?kWwPS^TN{-Vy@!wLEiIE%JFazO zMo)i|`$E%)W&atr)E~Niwv1Qq{v-bO^nG*9U6igQXWXA)*2#DyTBT<9_UiB}_qqQV zR`R!gb=wiC%eQ2366D ze#aqU`lRakF@2u6+V!p|DC<`t+Z3H$A*FF*tvkb^g2m3=2=gWR2*<^-}Q}(~fpktgRnsCSRi9pu0$tx?^+cxhRotCcs`968<>KC@W@7X8uVcY!t#Xolax_&TDePgfgx;?h5PAKg3 z40X_E$vyL;zVQ){gn)ZYXnxcFZSIZ#8Pfk|KQf#7G3odbdp`B+r61R2JP*C_Zl?a) zxI>p%G?aU1rr4+Hop|VBlYLdHcHLXCCt`9(c6NK5>^g@5CW* z|DWNY{XUBd`)|%y?KEO)B6fe2Z^`|WT%5fkLpa-t_nE15O7>`r~Bf`@N}TemAFRfBT!S8fV0{S;UN@bw3}!%CjusKf?!^PX_)w zzy3-8^Kbe;mj4WAKGZF4`Oh#v@IS+W@SpM$*>YMxs@K*y`E%45T&~lt@%%aW(bdOS zOlE83Epq>KE9LI8ZMuKXET46dQK6yuXzlI~?;rXfvcAvjWE1$|-+QmC4|(}<7(n>gFkUs{^)=7ciQ(M_RT-}%O;k~c5E&4j(o%H zCh4{QJnNwiv(NbSK1qN2^YwdqmRDl;g|@U^tx+!&?=(63x^n4`9ql$XyDuwjIC1K^ z@}+&%2Iq})Y(u$>Cx^XP|MkUgvfhbLb6nM}E_Ri_75!CexnH#Ij6M6;-Yi?M!;v57 zwP!J?yI)$eHM_WP!PYZIp69GR@As5_$nTgh`G@nv^JC(1^7Frid^B5daqq5!mF%7B zlPsrIN@+ySGI}XF@#@r&ZJsRQ*Yh9B7K#{Ne80i1{_)-O&yS0Ke10td_UwoI+iU!@ zA1?U*t7n(l&gHMf#iteIZL|ZPOYgd#(G8^>vGg;=Y+0!Z0Wh$Zd0tu z>nkshrAXRJWd-yE?|LbIJ#MbK_3HPncJd#WtzYE3qJsJ8e%_Luw=B}*xhwik2Ul>* zf1NIPH`?+RCu5J^4Q6XU&UOD8j@{pEekj-5Z~J7=D}S<=#@sx(;qX%b^j&`s*xR%{ zlN9wXzq!#pRg}H$pH&6_vFTO0^V|M-r$6#_4=nL8c`LK^?)@|FXFj;`OkBaPb8eLg zlc&UbuPY|9{+=6m?%i{F-P>HTIw!eQ`MhxuO4}P+OWpU`_B`hQ=*PZthImR9jB-L zoTfB+YStvbzqkJS&poqg&UW5Vw-%+VyVdg#{JH+)^@sR}&kxR*%ACjl;qUt+=R5BU ztY0(llRei$c-1Yrt_+;6`hT@a5hS!hTus;HwR=N6U)$_(L^6m1%dm}a2M^e-zy5Ll=U?$Zg#R-b zpZL`${IAyiKLca@lPdc*)Bd(N^$YL+SbzA>aA3b!o$8O937MrcN`GymY}{|p>8MOS7WKX}XhDEDq{wVrILrQdcgaMAUCe@n3L zz_C!f=)?({kLQGkf7t$5ZQ_UHN9wms+x}7R@X>g_8ugDG(|3K?-m$e-?!h5}*(a{- z=#+h2q?epvP#3^g5V9qHQ~le>hn{=vAKquJm~`y=fmze$E{@2osy%wiQ>5zt^k;25 z_)e_ad8+mir~a{m>~`r{X(Ab3C96F5hyP2jW7jzlcEn9I^Qiih{U?4GAKbs$|DbNP zlV`Z&tn$sBzGrUrEw=JK@bn3%LQgu&qy_qMQ$N2yvYw|x`_ZD?_bY@C$SGW|v1O~7 zo9%K<=S|vGC5GHd($zcE!v@=X+Y0+}_h3lg))+fcc z-?N!{re4sdYWstqn{=8zJMWaA@aA29r?2+)`5OM;?iF6~!r5}NA0_5L{Lj$Q`=>vD z>5qAre9fX)aKvksexB-R#Kd>z{nxnXul_T%?i0MK_>m=Q>d`IRrd?PpkQTJe>68P5 zoX2y^Z)-H3?VNPHIP&PJlY8^?ElW4<%~`Hn!55dRD!paP)<26cJ-1%@@AQ7w8qp=U z^j0o7UuobdF)P;T`MDhlY!NLJL*$+_y4x^b+W0m9=J^L{`yYBg-?DMf1(iqkTW{Vw zb3I_ArL<7mBqI;@RU2OasA@lYp6iv>)}u@RP7#V-Quxzf#JN~srHMUw&bKe?wC+DV zx3_S~*$SN$ryhpwh1=X^p0wJ0Jbv9KJWk#A?8_uozd1`T#XkN1uIOQr&b)PUrdk>+ z&DTwQzwQ3D=jZ-e{GCxFxZsD`gCE7AKUyEn&5bxIlUu*!=7|IRJD=H3>|y@*(C*P5 zYp)-@58`Fcsvp+p|D*Kr=8yIzHtpei<3(Ohj5)S(ho{*|mE2rC?iGrP!3UnNT))Yt za8-1T@rOUR-giCu&(Kos(ed!Tsi?v6Il^0nERz@?6cxtHy!g+s&AjpJ`Mz0cD_2E1 zKFsIJ49GUSCZ|5>)Qff7t{dH~tadu&k)S*0&kqK}lk5!Vgl*5hI<|Puk~izNPP)GB z@v#(3SIOXjp3uAVCRUZ-_*L!jL;b_*POX!_bV;O=^vX*1J8nKy7PpFHpC z%U`WetioHbADMpsn?3&)ZHudVjD2^G9oD*+c;KL{-~XUjUP?- z_Uv;#eA7|$)9pK=EX~brGBPs4arM8B&b|5j(|?AO`_FvYfA!3y*LVB>dH-{FeYn1% zo@vW`K3Cp%^H*h;7u2jRT^W07dhnCUlN2%@eft?&75bx&w}x?=YuJaiN4(tcSKmIv ze=4coYrlNs*Pps^4>HXi1sXyZE1tjTul_;gM2+Nnf2Cu)Y+t0k+$R?Jb7EuYzm4ft z&}O~oe}-@)-`X4h8J_H_W38~``ol0&E$zdR3qO+;Q}*sT{hwiXXaDQ22mjP-1b#@C zF8aI5a*zLm=xU!m*Jqi0^t#04z}R}}oYj|G3+8-(v{&i=fm?qMojJYau0~JF&xupi zU+~}iqkaCL;UCS9{yjG0y36J+&f+f@Ic;_LTe@7H5!aKxJV=MGyZHznO-*_GP6Z=bCHSIe(F`SASB_dAp?o9y@#`cd4$ z>~QicZ?Uu9DvsQl1Mx z^4{Gecx#39o-?-&GMBJVI%D;H{q&qV=09%x_jsp#uZ6Bi5@Ztt2R^z?hs?tjs?|DsFnN;bBCtNCzjf7#}&{|tgQ zk&8U_QZFs}DxrNKj)QqV!HjDI5EjrE+u3z~<|B-I*m2ICY#Eu|EIL#NAtt^-G4Nf+{v1C zy>;taWuNTknsu))e)%bPaM>TfAI6X8vq%33KeCVO${t?U9w%A*fQ$L8e=elCPl}Yv3^3lk zd0MhcQC?b_&FA0>^TYQy$93Dj>t6BtpTS4wyLIn$vm-xE%#~)z>wk06gDR!B^#l>+Z?ly#6TW*P)l)57s88 zr`>+GceM`lol|ZH?4`Cg9lZEm^HC~m`l7kh*LM7Rrnh~6Fwc^ATMPc^Kda?_F#l%% zgY)fr>)xBnrXQ`-ZM`lS`P%5f#C3kso4;`^>t~wk4 zZhLPe_(%EskCWdOsxSShe|W#cWIzAS$ZgXrwIgo3Gw*C|ELtV5AUJtW+3NZa9k1ub z^#ARz5i`AW|Hb(^)jTQl6VKKu+9{n&HkY_EIo3|M=DU4GglW`*(T!GM?}wVs)C?t^EuSyqSIamRtPZ{pGddqLE=nwU`*q3KDKT2=tG#>j!C!BTjLiCLyynPmdvo}MLc(?RkJ?A3#k2oW zFMSj*{&%s<#kD`GySpacKhD{l((

O%%}Dm&qC-yN79qiqzMBfeQTt;Zm(v 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 i`_J$uW7OW!a2`!pqxopG+!!qECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3FoS&sA|M_^^Oqn46C)D~ z3o{ElD+>z)BU3p8BNMYA3#+0bn~-B5dt#xml2Idvh||P{8xL|S8wY(5O)9#`C8lEX zQ1v6oYha%d=dmWTd$V;9Zl9U@Juml- zahvkSFQUu;GjP;R{Lf%F|EK7GhGYHg{~1o~%>2*5{GZ{%t!*oq#s3NXRsL6N|4I8l zL$CaY_LuUXU;by982=|btBc|2e})!&kN*tw{r`0RXL#)XNAZ{YpI`M)!v8Z!-CERO zSpSg!lKu0`{~46_|G0>1(Y6%}c;bIJf9e1E6^*EQF#`_>x@M^<-6?#*8UUuV}0Ewv^ej2=5pt~xmUOSTz5uL+`@u&rlZA! zVh7n$(dYH-U*$Wkw#`@l-oN0(*)8D#&Za$4ob%807pPv#H<)^Y)o{ba33n^jyDVVp z(!hbW&(w+j@w;kM_;`P(lH;}6y!e;waaC-w1Be1-MVT}PMLsa(-pa@Az6iFc~Noy9qm#Th-0TgotL@A#oy z@SlPApJa{WkG*SEXE{HzTylN!r7yQzXD0UK-4vX{yY%La=Ej4snxKsL-qJxAyq1@R@M`_LjO5y>K4UhC4mR=bdBBoBs*DUj6VtL-&2QryKTc`tax7 z_kFTgpKs6KlryDW;Qj69jfYbB>V6(L%8>k@;n1CrTfevQ_qZRoXMFi=bBE^Wt}fqG^bbgJQdpK-o* z*ZST+st?{qdtO|-$9ct%v`^YMO{6b0>OZ`-D59>wt$>~V!UsRr;yU@Of0Q5TM*D2K zRG*gXb~<2M#h=r?>4(0}s$IJ&rE*f`8$Pd|2|HLj7!qbN-1>3w@%fHv{~2U!>>tc$ zxpynteRakrZ{@hd(#JCn1xdZ0xbvof?8>=IJ5DH@rav-2qA&7?{YUkZ8?W|hUakpz z^fo(K%&h9%#%#IS>3O{;CzbYY5HjFbXe#I1@$7xa9{W|kzoRSsBl>;!O!jC$yxqXN zZi8i$CHF>-OUW6@FZ?q1Zxuhx>wmn;zHMu-wENbNs{a|$9h@OwL4u1Hz{-L~J)~(cOlYbj$nMJj1KK?8w+fIDT<+r($mCsB*pHLK%(t1G0 zftlrc;v;?jSCi|m-4nj1d^um`lH!NAXN2yr;Y;XqdgEj=LY8((fq@3=7x0dRK3MI$<92j2MxPH_=wx7jL@JDyZ$HSSszO79x**42>VIJ$Q zEGOSZmTEmRE{?i;cz6_#fA631qxrFTPYv@Tc`^AuJNA!DkM8DN_eVNgc9GkQrHV*@;|}ZTlRK+cf4#G7Qf}raRK(fik`QH zJ*P?Ynaz`UJo#*7_CLv8Tf2_bowjQKqjJV(G0QyhE#3Z~KR4OkIK9Pv{?CkXiDwOV z^DlhOsBv8M^4HQGiTTy}vS$*HNocP~oL?jLX@0-Gfa!mR)_bZS_;&ODXPEln=2rVR zcgt=ZmS#|u=n8u3y&_0r?h@t(>+9<>zrD;(%w-9?c=Nc7S9h)eqY?vypu=P4pr?KK(yKPn_|!_U5hgB`TbcZgQ@eT#2G98Zyr`lmP! z9=msVQhCje`)qGYdA%R8zh%u_npJ<})|6X&GILkd&Q1Sq(`J6_Uv$9_n+G4V-ZyO7 zFH{ru<0<=*xzUGbwYSt*FMc^G^OtYmhDF-9XUfj-)S1Ya%phcNeEyW4Cy)If__u%c zm47t-SoH3{W}i-7`_B;B7VY^?q2kg*CJS9@!FHKGw+!af{~1#Ev;BCNFH~{u8GpzA z^viE-q6_6#C;x3{uFvvV>N6={-Qc}Uu21XRxP>3{>ZKxobUvH>=zZHhu^)xomd(-A zSupR>hd06cv+`m?MDuqkpXdEt9JBq9t$*AP_m9@c{z+b~5quQubo+>%YOT}ps7r5L zu4#%K;l1n?!NSF$zEbAnWt;CETZ|w4XXv|Uer-?Xht1JHW-fnqNdArYS!*xfDD4c9 znu`)Q-gY!MPBK0$cv#56mit@PkArI}cHKWN<+pw1%YV8%KWse^QTkRg#C_$V7iZRP z<#hPZpee5|(|BXr=NUD*AJdQ5vzN~Ax>bJUuKr;$L-)c${`SO6y3hJVJEjWS9+{b_ zocki=(_sk~#_b=N58t}qs=v?ZRn+pf;D<~1K5{P36by~FHWlzHSLs+}#yKH6;eaLk ztWW-J_B`)O`?+4+Q=0y*T+Vct@>}+}9UqgU^_HA^(s}Dz@+5i5!6R}s^?Aq z*nUKw?>|H8?|S))`4RD=udAj6oKM*8vA?0j z`O)Ez#}E87*|9y*^nP=0@)nP~5)U75pJi@r>GNkvgP+mO7uEf;(YNca&fnbAe(+k_ zsc+Yw#@+Y2q7<=bcX!$0Xp7&gr>gKd{G4tfdE7L0{g1R)*R%zH>%5ZxFxlW!k5EP2 zC0+aT=Qw^R>s^$qf4VRxc^1R3dgrSPKeBZ%e>Lr4>)y9}$_?8k64otjtNoCD#B{y* zkN*shjvw_G{NaCKpW>Deah(tQwXFYU`P%BQ)6<(9@zYbLJ;A|h9*6do=C1Ftc6W7i zbQg5pvbK2K8JN3>LB)ZANkb-~5J-XEABoA-Qed~i4a=s&@aITPblkGH+u zceOaXsKZ(L=nmQCD(_VIW}H01Aj{sdPqpIygZ@MIf?0K@(ei??&CI>i7vHsj}q?;=xN?49uA=I`2PYOWNPezPZe#jTS`pW`FfSf%di=~=I^GkNQjqHqPa2k8?h zaLbF?*=E;&SXd+dct3mp#(S@&S|^##{+YiwX2T?=b4z$Oy}jSy9;Yq+sJz?GxJK|& z$$i;uJJm}y-if+T3gUnGUHA3QP!M8bI$HeM<3g+;!*e`D+xH zMc&PxzRPd@@~!7@C{*q;HrbTG)53Fnl7+)5| zYlC-_D$WBklW#Rx?C-dz^W)@)c9#u5+SmP3$!NAMEaB_wNqAmU!iPb+vS7&C zTgtb1?W;QFEn+J+9;v_TR8({5$cONG?9!f!cE%NDuf6{+Si2|uQ9nc0eW4n$Tkbb? za=x5aT+yvP_r7IzQsIe{cMi)NJ(#qIp+uf>pKkW7?ML1VREURttef~z=+>o!rq=dC zFAa~1J%|i_I8jN>rs=SRrNooD2lUk2YkWUeKU#i7ze7&$VohY`!(L&hYfCy!J56rr zJr6ymyw#&4ApE_t_0xSX*jE_-;rwuKsr*~vwH0mlZJ%pwKivJ^K2>LJ>msKfo396_ zxGhwk*`RX7?O0Om@E&dRFVmx+X&}z1L6WMWm(Vt+oAYi=v+Q+hjlf z&(M2M^+VjmkNo~W(oBkZ%FK#i2Hd@y_51O?OByqJS`Qwde&b2s*UJ@$5C2+v{cY?6 z-Z)vaPqAvZ-S&1>|9DW=q@Hj)bP03T#dqihRnxxoUkBr6~F&_hopUp)Y%sYRq{^)$vp63tmLu-k*TkeKG65C&zztmxs zidcL`g3U>fhkG`@JovMHY2iHc`H$TXyyxwg%CfWG`0?A!9^oMN=F0R}A_&!^l>x#3>&lhpWEKoQ2x${WFr)oTZv_87ue~)+mfqhaxav$yIk9qaT;{8^C;TzoA(H6`LCr<6OOMJV9;l@dZ z$0Cdu{*?S!`{=EB$d4!+R@E)*A7wsq%&u9XILE}}qNFtI)R29TH#9jY$YmP`eN;cn z-)t{vBeYNJWAF5yKjx3BKQ8sn+Z7V#n`|@ZSaOPG0>5PO36^9P!POsw4~l==XZ=Go zcWLJL?Z3*}Yc9sb9A-YT!EM7L?NbK?8s5Ijy8qVj;oI=ID|VvWW-g1%(oTQ$TYL7j zEsakFoOa$-e#@TK_ohOG@$DBvJ$e%5E9dvvKS|#GpP`}t1-Gl5!GDH{eeeG<{%2UA zE5dlQ!v3G@Y5yPc|Jtr@jo8QkpJ8Ir<$vt|85VBM4PbN?84%2t-nqv%{n35CS5;~Y zWY?5RXX>U4Zo78lRmg*H7N(D8<-hs;QU35Qrwl3eW4C|H^E#}}&(73q&NV$__ERxg zT(vnb)PjfM7#jlv?-cDp^&ief_L5G)cF?P!*+?!UR`cdS@%|3m&G z)9Xj}jmcN^F9ru}pSxC1l1=ok)3yiJsj>Ak*ZF^Y)P!CAqh6Z4;Kk*wJ=+CpmsRih z&u}eQ=hUj@KPtmi`l?Ev+eo%)&5QO5U2VPM+qLhv?!GI3y2EPc+>8s0)~et4j;{W; z@x4g+iT@1jbtVu9nti5hU=;miP*Dd{} z{qSw}s9;^TijsrvdAdFDU0l^^*JysllL^>^2; zvMsY*7&s$CBkb6noO>FNIUZwY?$|I7Pc$ z3Z)uar)l_I?A^WXiQt6nir5sjrSLNab0SQz;PAx`59fzGV{|t zrY`#X%l@I#~;q$bbGei#<2ekVezLw@3|~+caL}P^VZu( zOUifYchqTB>^>A8b-XR_kLJ=0ebqm&>x*+urkm??yKFrA#9QIU!n@sem+AtKMw+baRMT5OB>7;Bcx)%1P=4V@!stunkZ}}LWTzyY*`q>$I9?9&Ix9?1z zQ}*Ecis+ZSLazv(WnDVw!ij~KJRZA+1)or8Jh5K+$KMZT&yP=x%!-riyJzclk;gx) z?3kKUkwFz3%e*}TRUgln#jU7K(-!{l^X+GgjqmnfUGm{SgZS5tCu-#XE-l@gd~}(bJu03N2P; z&5evzUd=!K;fKwonr>(3m44j)U{y`n)-5}>?)H|AJ0sHP>1cSO<;m*giOnYzc!D`orToNt^B?+;UcXg7zRPv7{I-bucaCS9Zh3qr#+sFf z@r9$pldA9&S08&mSpA6?K`kCL< zyG(wT=JRG<3rIe{bIUA=&zFl8nZKI;{LfIHZQ6Tf+jT<|aX~{* z$$Yc4-_rB)vu1RzTsz}$qm1iS?uTQ)7n(SI`{cbMw2iZ8m4^~-bUOWuNn`seqZ#| z-~Gv^Gp%&rew|wRGT-grzkL2|BmL0-&BO9VKPKIdx}Lu_t?yXThv=Krb3ZK>keoTS zfLTL<=XuZLrPY7`_E^pBJv#SP<+kgBTY?r^+*!k+{K<4K5#_k(GH(6DPrvN#lQZ+L z+ir9`&0@~6_1lhkz0KGa@pE_Tf5wQ`MWc|WtUVI)=FpzPJG30Tk$gP z{fF}h%9ZeQDjvHMbb8~lt43`CM|ZQqYlW7H?T{Lk?DVfKH9y6`{R zv)Ly<_#m1Z)uOBZeEY(yz2`RWY}L4U#P4HV^v})b_L@0GHuqpK>t zE5$H^EW4+Xg;)qVC4``=uyez;#GD(lzZzjI!uDxGEBJF)D(!c%W!tp}P1 z53pPO`FkC?br!a;&AQ^6#l+;^DlHzyAA#ZO2g8o)q&$4Tx+*s3jY#pDQXb`lPG!ye zeRIBh_AlzvzGY*us7r(S%pa7l2GVkm1$?JbR{|YH?uFnSD!^!&p8RnBPjlLThV{4i z|J9hZbp@U-K4$lSRh0jqs{Ma!{Qom7j$3zCSN)%D{J(wb{~0c>cM#7&S(&sV*fUD_(`>vuCHV^+51wGh7LJWEz8D}0r8Wr$z2V%g5+o@+dptXr6MYfV9S`^LyA z=QavAD*C+R@|WJ&bM+O2#-bhlVl`PG!W;iYF0Dw9zP@PF^-?$2t(yfsl?}^p%7ROzYG zTD4PUzGL{-^&Rs>KHOU?Hhp!)eD_OVEuFTMg>V1pY}{rMBsfEO5{FE27sCs1sI8JZ zws%=Y*;T#LShveQ+bhLHXMHN|lyb8OVeMe;d|@?fw@SB2&bxzxZjmz{FuuxQyb@}w z9I@de+ibRlOYcW#g$egwjEy|C>8QdvqcuyKPbfFvS{J~I96jM^wf^cYkWso2liF&Z zkD{w%GoyN!Ezj9x;%hqRwHAADTTsZv2~~ZIrkb9$@=fwpE#(fon%oj&+jVAHX~!H+ zuJnSSin~2&4f^1*z8LpzJJSm71OId`?J-{a`eJ1EuEk2XZgwo0IAix4-=iWetUFjw z$jCd#?qv`OSp_ zPmI#5W*p8t_25Zzj}*g;73->_esn(c=Y4fCvubx&D(OE%9cGkSpomV{X=lV;l9&TOVWXJxIZOyN_ z-`gKd`{Z`--6T(`-Bp`bv#NYQ@od+pIj80^&kgA=e^Z<`v(~3vdAWA<&NFqVKE>}p zG~?gxJ%_eW>h}HlpCP#Q<=g#d)+emUdGq$m>xi|v34OP2iE_#qYJ|ATGB7V#b?e&R z|BkMGkCj=UTk zdGY<0pAw5=9aVS^ui#ng`8T`EG&yX(t=Q6A=l%D*ovInM^3Chza^Iu=9zSn&{cUEk z+(xCBQ942|J8p#UEE76mTk){?<=N`?hMN4;kL-udejV-F;;pEuqE~d$!)m4NZ<+5b z;m2=XKR93F#jP#V>~Dx)pB%JXx z*DdRfFzB73)q3K=1BG+eljFH3CKt!J85JB|emcE+b>x@rKjmwWNXRVaZ)*9FTYNX_ z-1pf0^^YQdEc`Iv=f}cCmhzyzbKh>XbG_pwvBKii2K$P_%gXcq7N7ZJ{&&uo^Gw+j zUwx07GVACQncK|_T^1)L?rtwm`Bi*;x!2cM+OM@zE39_3cFi?;w(Irf)5%XXpWV1+ zk>1kkwsPOB()+R3?}-GuR<%zO33O!$x>W!8>VJmUkLv$QeJw-jXYY1k6$wPaa_PuJ z>+ZemMUp+u8pN@!RWv1*&F;`M1?Skv9KZclSTT zOP8r@Q5=BoAPhbp?=b9kh0NBlTYuy}TK}Q>hkn>~n}ybqhj%I`H=OebWxri0`f+wm z^~c9q#{>Q|w6r~puY0e+`pMn$_S44_f3x527p|zge6))7-^3b;TlZX&YL~O5FO+-m z;GgJc<+|g$zJJ?x^m@trH)sDdygqgEdG7gm{XFBo+pk|0Ro##(n04g#?6dLC&x*4w zZcT1JeD9v$t@$oBrXMRmK5yL8Te>JhWp~HViRT`AyZu9x;tSWvV zJWy#>w`t|0UQ46GUCvMMGX7`CWtzj+aDDX;|HEPP_&+?Gzc`}px9%J#Q{AimLC5b* z@_!uX{oA|7{$tzTzm1Rd+rOPGeAH_b8)3BNq*!iVVoKSaHw&gD^srTZTR(fvgIAuH zf8@P=dEu9oSJs?R|E^R2_WD&H+NZMn@*nw+^^aW_ITx4LT>j6Hvi8zumz+0K7q?8{ zu#Ros$k2D^+Ox?YyN^rBAHEy?NWIUbm)qyVs+XD7%U@nI_PW)4;0bP6v8Y z)_rBSFunL=^TWAE`` z=HL0u2i?+PAzqU&3}PA*)L`N{j=nlo#TrUVr91k23nGvJMHd;QVzKSSnvS=$32nw5A> zP16EP_e4&ea71_We+FH%=VkvHrk5E;+4KF8d?fZ!tdni!2lj(@;$}t1Rj+p{Pdevt z)N1b@L-%LOn;A~;+!s?+9M}KgKF6zH{>RRD?D~6k`P3z^uKh}ijH&FXxz=UL(wt#E zowfZQv*lwG#urjkXI|OzdbMMr>B4zx-EYOtZj1QNWUhGdFwYa2QqhO@+<*9&{IUPL zWRLICj1MPe*bj$I7xuMTYjR!K_RP_z)7(_&-uSBWi?M-0?)9pem|L0Ci*H8N?)zjB z`*7=Lmb&6r)!@p9MFmC`lI!P`*t$Pvsh8BZNi6a3S%Zn4&=2v$_r+{tKN=sk)4iBe<62?kY}cQ$Yw4~S-K}ePgu1#GI0;2| zD$lQ){;m8&-{ch)>Bs)DT{C&@TYdPS%tzm=>*i;#ie7riRZR41*$$hP&}v~qQA;j$afjI;hF{+=;oQB#?M{>fMFvb@e8q#w$+)@j!$?fPimZQ?DPANMij z`*icD-Y43+M;uOlTy#`XvOjCp<1_=;s_+B;?Z5h){_yI|Q*yP_ysr1`YUv!&1obJ; zPqTWmD7}s2l#wZ2Z}Q<@`^WkR`#M+tkUq4J_wpb2#imyezqqGRn`B+Gu`4|-be6dE zonsLjZ(p~NT)@-c{+~h8CiubrMth#cm$%&b6Sy)i>+_Gw+~>v8XC_KslU+YY&1T2J zG#;il3)744AM+oZ&3~L(!&v>Wp6h=x%(~zZ zxVmY_)cp@kZ~xK!khk&Se)$@|D_gbgH%De$Z3#Cs`nlp>NjB5U98J|qmc$0r0~P)c z=68PC-!E)>bxrn%$G%tA{c&FA`CRdCb)k@A|7qSGENW>i4VJIZGE{GG-ea8oU_a-J zU#t`UGq_&PRoc??n589Pr`>Z&`=}d>x)_!&`Ok2C^?!!zNB%SXGJQSe$MMG}_sLZ# zJr3U58~4pq>>j^CYUpkCLfH?D7Qe#7QB|uyVsFZ|Q>ci0?Y4X3LZQURGu?cG_;=lS z|K*F?j*k=9>X>>wyu0l3_La9Ar*b4^o)%iqa`i9&B$N4l`%Eu=P1%>5SA9Xc`1YNL ziwf`LzWvX@c(iur!mNw0Z^_MHd1R^5p6z{4MRzs4lHk9#FYnU+l)VYBR+#E09WA+V zGi~d=%SOLgwHVZ|tIK`;aTkS^@e_|j0&KJsx=QoX2kKOGpv9?Bi&Fo%h|4H#*(^Av4m6}_U zW;}UP*ib8f)Sf$UPw{WttzKj32Z^g@Z z>@AW4nJZTtb+3JNW=)%7?);yb+pV|%*}bvrS8~v1t7&sfGxXH97$3P*8U&S~yjwC6v=!F_^Pzs&EQFIf6}wZFFK)wN%aY})Zz;OAPAB2Kmo<$B!wd)SJP zW$(YLr`b)U^n^0e}-?9KAKHk zd|0JGo;NDS*W}Zd%P~IRjm4)$N=z$HzB2g*8v{ew-&J<9FLf7e?|v8c>UVgozt8q9 zze5k(m}%rKx3G3`al*zY>FlEO7rwHWQ2ueU@-g@P=6kOD7B7#^408U@z-c?X zl55iDncEqsJ^c3~@bY@ojlVtgkIWapb@pLD?;neQH!e+jb?%dG_V1!w{02w0yiPvZ zCsDM!cz%uC6vn;3BPwR)^VZ1jj#&Tn()6G`+b*Z?Ym8jd#F@er7O-Ga&4$Mf{x;#f zAHE-*&uL@+$d}o@|DoUd2ibp*$*MTeofB0{7c_dr*SeLi}E;T@IbIfCT-{Ix$=+FkKGse;dcM% zKaR~G^coku3d}Y)+O}Tw%l6GK{L^K;#qY#SiY~MfY(B=pR(>GArB3w6+7Df?kKEI_ zs8hPP`e^XIn7di#6V_}OWY#{`Ez*)^yJ~gsjDw>6AO15uR`042|DgVGN>$lx`7TrK zvvKwOx_jOwS58v4I=uCB%kk+FItLp9jp8aUGX2J1>s$UInIm{Sis5Ykqx;8l?T=mh!SwymKhb?3Q=iUyWo9*Z>e(Yzse5-M^<8d1 z)8otXb|1h8PkMKvk=^r1Z?b_N~CzH8r>iv$AlQvJR*XJp@ z82(J$&d_q^zyx;N%Jqv^z{j?T9JkuM$L)Id!?yu1AI$!kt-1Ypym8{~UyoL4&s?Hu z7jm<8O-Dj_XvDeq>HirR zexBKHI?rhLQjN&G{ST)8XUNEJ`u?9mNbGpX#VE6@I*$#u?pY(?D`_c_d_ZCH_2&8K z8-G~;wy5a#``FvI@sW4Mm)o&+p*uWmo=oyg37&H7kOM=5pI^l>>;9E1)^Sy?Q=2CL z>f+Y@!n>A*x37+WEwuMP1H+K6Qg;dp=M7n$`?*~GNb4I+)J4nUu(~A(|(qJ z>z4QXw`*A?_J2#id1ra-ve^6P+sfYjIa~GqV7z=xjmrm@s@7Lp_Z^L+?ilfCZ)(jw zP=IVbCDX`_O$1I)bB5;=e+Bf zU32|%?3uREZI?@K&wlB|-1}yN+nd$%%ncakv6h6kKkBv@ycd0BpX}8wch%x&pPd|d zIc3i|cWI~dVwWsm@3x!5INSVaKbPx+YJc%{tG~_XziU!>urxDY=dJRIN2ZQanv?53 zZ&`Pzd4hw&)wSx6_QrY6M#fkMw zANZT4kI!d&SEHL*uuE?J!itHlcb`0d`_aETzihjZ2h&eWPx-lv)9y^{(^h|+-e=>Q znY^|_`^fsG_ceTtLvy`-woSWbwkg+1V_9EBoTt|WN9*kmr_5vHWvC8stJA8;Ke}sC z<~H&0!26!;w-z=BTwa$mtD=Z;lD?hEXOWbYWez9K2Zp}0GpcaA9&S}LYtF)HZz4<| zY}{d{UEpUkxlH*J^OLu?;uZJB?FrZZxN=Fn+#gLd`A@=9TQBw}{M<8tqwlkle=|ZJYc}ccA#pitQeV$+Yul(_@2D|BtR=lXI|E4$p+uZw^zisOB-tFGj z^ZdSP6}Gh>f2Mb*T6EoG?|-|!B7N?Z{|v{E%-tscJSwhi@qY%pZTo)+-T#xo`hS|FfIKe*3b@t@)R+V%ffw*P04UNtLb`lFlQZbwgie)ju1 ziQ;Ew_088nYduh6px-+1Kg0a!_&=Qa|I9&)aYkjS5*nDRJWkf>&d=StQ?BNI)x&nX zGd;VwW5C6}wzVkoBm+Xtrv+O^=&i>EP zsQaJc*sEpJRex-&-FEFs<>%VhZ8AT5=Rf$mfVWF)I!e^6bC39O@Zo<3{#R$0y^`8C zIk#$g_L00hZ|r(pQpjCZaqnKNqs#^8bZ}$Idef;>l`MktN_(0ge?Pc3{ZaUhQePwO z&?`BQ4Ysg7`1h0Z1jAGY0nb;3=bzu5zDho_>&PFw>Y8&p)$6}z+Snicn^RQJ{+}T; zHb3HHZeRB!N7g&ypE#6ub}339SC-Lpc+gZ}l|JWp_~ogemLKxJdHkqUdiNUBxn-B` z9lP&8Gf(L5yU=;z!BYRkGf`I<-b*@_pr5Z{A>^=~!WdtH|Hed2MB& z#yQ`mTW`KPG}S8il%VIn6VLvs)C69tlYDvMe4WaUojX(ys{@-PFXKZ?L^= z`YG#fw!|$7vNz6e__p5chvq}x=p%79m-N=?&bb{CbG+2_aB6Zuk91~^T(rdT{nz%J zA4`{PmARXkdHl|QNZ+7%)o^Jkw?-$bwpo`j@H=QPUxm9EkL%S6SmPYPz3! z?Rrt1>i(Nb^8>Er<$&(HnlZ+znZ?q_#5Tkp%?d$tU+X@w1KCMwcS@;}3bocmvYm;Yy2DipRA_udio zncqNH22pR6GW+T+)S=54OmER9+c4&~(Bwr>dMBt|;R}qekhw0RXq0|VW&H8?z2Wve z3pZWfG9!6%_#S8d*#>te9OET~YtEXlIw9 z^l|Nt$_fP`8;|=L{|H~}uYKg|;XOX#yMN3J^*PP&xBu#suYdR#|H0N1-*34rQ!Y~~ z>8xf_%)WB5^OompuD=W|xOM%YJoAs{uv)+0hd+2%D(9Dbs`SS0jSOv?RQ;qlw$d-v zpYhx(*WKSNH~Z{cW+2iVkZwN6fEBjTtCT!aV_uO2rmOhCoT1tHlj2FTg zKQ=#R-G1n|b;hOJZ*MKVpew?2J1|5>EcxXN_Nbq4PRqK@UfI3&-Ldcg_MBgExW8yLH#E^}!EvvyVr8?=bB&wLTm4a^21CY@U%Wbtf2qI(%EdW*41;x z4}aNt~Fr8^|xl~nfxuvwL5vc{HD|muVCA$ z-}!8f_#ej|eDI%vGxHz&hrinqUsVrjj^vOK9MvcD+%Ns-Qaql1st!$tmHn;-qz z?mxqaU-MIsNN$VlJ?Jz|wEE<_X-{MKKhR#B)upli0{^)tXtx;K1}QGw3yi`u;KMo4 zT}i`ewNw|u&046Xz^k{Y6WBP{e<2TAaA~Z0FSzyAkLnPs3bj8`r*c1DKXaq(-;PyX z&oa6EruuB9x+j!M2fU9u{@ z&Dxqz1l$ATXB(UJoAer{P1&dyZ{3|f=lQDMS3ijG= z|2g%`&S`->qO4)YyKnwyIAB+-e>S~m-AgaA==DET>u*Uv*!!R1NbAO{CSko>y)Dk@ z=4-PEyZO0EeBe;|`r!HJ&+nW5Gi=_rKl{;Z+3X_*$CuxHdHLr_{yCF8byghDkoII? zlT?{^r}V_HWhjdi9xR{rC^PZjTIuMI)~ix0sP)SSDWR+iK%U_Jd@lGPHhB* zSe*24uNwWUenq$g6aOMPke=q74NKCbwgc+uZnTjuV-D_KI^rYP7Nwq zY4+~jZR4|>vu^H94O``P>ZHP=F72B(4$xeNp6g(ICe&r*tI_%zS8rh?X=?1M>e6od zF_&*bZ)Wk@n2N0nI9`g*Z*yDRbVul2PIz5mgUzwq*O@I%81G$-xBO9kEb8m?L;CHr zLgpz?di4Fst<#z9;Z5%>-#y;MmT9)-;?uf|PhB={ZiwI8F8-r9cPzNq`6 z7gom>>#pz2VT$aH`V{N9M&Ir#i(HY-n>Qg#kCh397x7tIGW-hb`j}hCS;zO|{((;s z*-}^kODBVvu0x9<9z=9Q{83pZ@^Ju>O`=Ccg7%C2FT_1Ts#yA|7dLr=-mY2NKA zGId+iu#GkSTbZ7pYEyLgph$Oh`P51g!G9Cgld`>kXM^?`{f__rXa8f+&_?|2sQN$u z8E*Y&xc~G&gOvTYE&myQ{$~K~G&=py1k_mkyA`z4=AP6*>5XB=E9CCFgU2I+a${#zj7ZnAHF_& zO*A|{bnDu++jgFv@;Cj){x$c$U-~^~-qsK92mUEsogcjK!ylo09=Gpa@>CAb4+~9L zGViC%_4M@g{N+(cv$I*su3cE+@vzfrk;V%KS=P#9n}56f(09E$@8J8iT^YBt&u8<` z6q@&+!L0H>L&LM(z4k|=%+@CJK3%pl({#(}y(&U0PW%#{P}}eI^F&(6$KFe=dF67` z_x3MZIqmAfqoH%fS@pJUJ#Y2n?Z>|75BG#s)lC;E%G#ch`dLkSlE%Sfg^*oKoFD4H zwOoC_$3K11>qFABtAF+s-f@?3?+Z_Ib9m5nT-M_J!&v*{_uDl;a^`Hcl@HjI>vxey zH(&RV#x$cMgCh?FJYOHTpU?TB{lVV9^SgCQ>jnJNmq)$)%sEN8T>7L=M_o*A5>p$) zlX(S(*G)fEoJ_aB^)m3;xAL%m(WU$Se!srG@E04KrTRCUxq0!~>D7P2U*_%Ic6opB zt67h>_BY#cU*GC}CBH;MW%tDGyO&IIlilkDT~6HpcCG!t`nUD(KY@-BM~#`^yRK+F z64%Yp)Hj*`tghZ&Fq-eqinB-eon3!o-nnzUcGtACBa*jo?{sn(@e&PncVKv-m9-RS zoffS!X_G9B*RS_kjyR3G3 zMy0~Ul)yPfJC83eQIIF3$tbwJGXZS?VEKf<0(&F!b_fmSDNf% zS2@N!-Q2qI!R-A)cQY1LtoOhC#x%I=8V8>OF@{;b4)ISDoJMJyN)z10$gVYvR$;oxxDerI3pEmQ+e}<-A?~hi$ zej9z{x>Q~3%IF(wmv!?^FI0U}wuy7`oI4)xWn52IES6?!5cOBtE_c(Fp|Yip>!W{f zP3Xh3!N&qJe$_5(P?;y~EB7sW{nl8UG-c&26OKMzwc1W3Pi4Q3+2`}>hwLTv58t$t zlI~UhC&-qzRqDd7>2DwV>+e4K+kWciGq-%|(r5S7+%EofeMg{!V085H%zP0+y%UQZ zIu>tWW(e65=pczcGM4fq{h#CJ`s;7+|C{0&bp_YjZ>-{^?yA5t)&^SG4#TJ&YLrGD z<^p&4m>av0toH&ffar+lrD8zCX53x&3(k%nfh<7RJxHjM3@- zvT8?e_JjV$KaQ*Ime)S~p}GfBxURdmX4OGY+fSD3_AEDA-tatB>F#fto6F*ZWly|3 zb?sfT{H8tA-+x$UzwN!j+9!)H*VSKnSXG_>S^I{Tw6%4u)iv$t2<2_tTAkc^yhH^- zrKa;P5iszt+Uz6)0||R+8Dkl%z083e)HzP{HBQ;HxA|9g+77AUzK7UKU^nT0zw!qm} zOQL75RNo%{pra#z&z76bzAyVi{vXwaucj~h^xgIHd%a_Zg@xJDCk!t?Q#M`2#>Q}9 zy}HK3>(i1_JEr>ON<~H2J>NLzqt@Aijfam-*WQ(T?{}FPYH~ptC#_xh;pi<=4)W1h z)IiteB|mR}>)L+x>sx2fD<<*XQub|IYK_CUZr`Ca!W@6_#}?Yq0(wrswU5$Ykq09=-R&RNhQDEt9_jPU2)HftBY9MSeh-87WX`1sMUs62C%W~ z;WZ8~I`@&;?s)#Jc7K-p-I2cgtbWesyMJ9YFy^eH=ci?7bdw)lZ~g<`>0Z%v?$%eo z>m3`d`4(u=`&NCs$@hI%^%Xa6abld7 zcFU-Wzxa)|^y;{(?*5(q^X0GE)5QgE-9Bw|PPxle@7-Ndhm-bGYaXwyyEfhMwUFM_ zMF;g}^tM({Pt<9?-Y0H1=lX?P=Vr}1*I&E*#8IJFoC;~O4yjuHuj56s)$G)#Wj|(Mj<}q6SRr}_>x7x2Smi}jGs+)LN!e_h4 ztG`v}ysr7)_FKRF5Az#&h9CD%KjLr8{n{;>G0iE+Bj)L%38g{R-z?v8teM{>&-vwi zmzaQisrJo#w}qd?9$DDc+_Rebd%LWW<@@WV``9al-aq`$(3rgOioy2l!dtIgT+Jr9 znKfXij0}t9@uKVt*)KFMSKJX%>}$O<=~-O;;y?X!*N0ii)I4vPJ0<#QUHqy)7oXVk z{%1(HH9j!wN!8wKOVu`3vYS0PpwwsNW}bWJrrn&6FE8z_>e61!*?jmx=5HOF%H+T0 zSDqb9-YD^F-gRNS%-p}K3j$q5ZxyuSsV3nYr(hY95KYt$Rm53xjL+&&&fKd&9OV|k zo{Dl>Thb4t)A+zU!{me?uWy_$RFl2J>-l5p$jpoPyMIf2{4vdoJF|LPkIo_2;w`dE zCV%E>p5U>1SN_5M9h0+v**@?5r{(zQthxVg?}N)?eq?E_ls1l58B>kxnB5iROFs$)0&@knRg5#m>eV@NNunExZQd7 zp(^)|8hf2Mg^l~KzBOrndMYVHE_0gk-pF!owFh1X?8|+gHP{MuY0v)Xw*FDI_KL(0 z-`jJ(mKvIDx|1cf{Kldn4sNNpU18}q^Fl)yzi&RuP%&#Po^0|*&8%kb zbvDxb))af;=*Dj;y}Pfx&8v_+w(G~!dj9s*k3DgcefbQ>3j(+LzZKH=Vf?dgS9HF{ z$__LCUl)$Dz1@G&0Q~;R3`7HAh7(EYbICminkow{`5Q#61n>9(pRfjAL?&KKl--zLD}Um zzI^!`@7_I4b!KeXnH zuFcic&AW6wd^4-^qyV2HMN6$4PZB+m}$5$v?SX zp3{1m9_h`Wt-3l&dA`Qdu3o(u*LU}(U!7A%-rz~i!nJi*;MQY4beCt;=*i+1WB%s_-YqTXsLZ^`qx(vT~rt zUAygJ+q#$gJ-?LjV^W*6R)uCzURn0ix$jrMzP|DDMOV@9?avP)H*HXwld&ih_zij& z5#=M+UK08)TKuaEUcJRwt3cW64|dH(72?0SAF+4Zc(T68Fujo*RxQ?$s@59G(&Y0+ zBScjDYVo|Q2mZwUaDKSEUnC<=KQ}L)D|XxF<=juVH!f`sFWC{l`M6G&`+M_;VR@_8 z9C%W){_*-IJB5$sM^~2e|M2~jy|g0f-x+!B!@nME={xq!c6GBf^OT8|tZdHOc@NtR z|9Jm4eic=EygmQRewm8bM~iM|PZJM%`Rm)R&9{DP7WAsLN`|Y32pJSlJYd53#kbP^ z*!!NaeXP0mhs$Q|o4urBdUTjT+^g$?hjSA-EUIU6Z(vz(9U!xtr-Y?Hd{Ki^!>{WHZ*5(-TW)r_+1mQjPZ!)aO-0D)dGhX449=fx))ao4^?2dOu=)QP zc#i8I_TS=Gr@+nr;r$=wHpg#|3p{)5r+(kFclnvmhTGH6&I!M=C4kjd?(CMgYNsxq zNN-~4*zm$@h2&qYry>Dt?Coz=r=2Q`zWFe?y8M&U@y34>)mKgab#3|$_5TbDre6R1 zS^PhPVCWvSbMF|Ie&hVl@ItlpKSRyY{|rY0QMsYFG?-9La7QsOJYxY@e8T*HP2ut1 z&&2<6l}BR7E^5%MZL0sp8C!qfu>PY65?i#aYXn#<8tlDk=Gr;kzgzzPIn1^3Kf`&q z=TqKa+opv&5xao-jqrbl3tq4P{p|kF(6JbWw|YwetNsT6{|t`W>wiDf|EJWC%vpEQ zL1f=S`@byf_P?L8|3{Y{5_`8RL(p%Q{|sM*cKv7Am-L_Ekp?PP>#Yc*H;QE=#p?d0 zH+`<1bNzd$?q6bS#D9k8i;GW{zYhC{6nZ8o8$`%TOH@8#>D?U&a!M%_9nyLF3}kVR6!iY_Y#cE@=0x@)^)e_q|< z>z=%AmO=(I($q`tgtBOn-j2ZDu{D`|hs$o_?d?U8KKg$Ks~7*4p`3 zZ|3v|eXu{8&;Q3^U$(A!^uDeinyK4%wQ1Zv@GAU?!sB&}XUnA8T1tKGo}GIfu&Y8( zDI+CzW6>H8<#$z5KaM{*H@$XMjqisa8^U#2FZpZhyLNi$dA{L#QfIM#$LnJ!iluHY zlL|iK8f%@o`NFq~W}U@T9xdiEnLBIW?zR5?U)SH9e=N*u%d~G|8(x`3|7R#K+b(#_ z?3>P-1I@1+>ZN`OKa4*dSts|yP1kg*ChwI=rbkaUDE6O8U_ZT+^8nZ4`F>aL1x7zG z(vgde3Vm_!{qEbB|M8wN=K0ScJ@Z1J+}<_2wd1eHpE`;!pT|4Z+#EESb=9ocDQ9z@ z#NSbW|4bsZ|6i54&GNdf8$*!SEixci1<33XUoB9*BIK#nJC(MrNdKMi_s=|9$Nw|f zO3w@4AGIB|Di1{2BLC_w$+g4kfW_`ot357F{FC1^{{-W&;1}?XbChnF`?NOtki5tq zYt=vZ1V65uxz1TLe)G#Z!wovR|B~W!uWoc#p2xg+j)wHES!XtH`nzDOX79SCEB{zu z%z5VScEx13_wCg)ID@x7?g|S@l9sP{ypP}c>Yt>K&o)1h<@cC>_?Ju7x3%@FoRj%x zt28MWNLU-Kp2Q@hXgynj!IN#r>ivEDwDw()_TBoScYk}GlG%E;2_|c^KED;4uw~<( zlZLYdf1miX;{Lk_?^ufa9Blm$+R0w2F5;}@CB#1WDj^XW{RY+xKLDKL3x-)cb#DZ8xl)Usm?B zHTul)hfl9xd0bSHSTOIN@$Rtwxz+N<&1aW)9j#{PRXpp+f>J=0g5*B zgL~?xer505Q@Zqz?S=WlS7o>5-4rqG*|WZ9v2-8XnKkhbVPV(MuWuNZ; z>5shnRpU#o+P8lJQQ8r5<;*L&miB*I-?Mdn-#z22Upw^|UrXQMbhGc;jn*#18_DwK zSDx*=ylY$6w`xUGmRJbE%=Z<|3~SA==k zeEsr6!CDzzi=@)IQ~&x;J?_`Du~fbFl6cL&wz|m=-)cL!`|A5_z8vN}J=#M^;ePCb zv@IHob}LI9EIJw~6EtPn&n52;b!n_p0Uhm*j?r4rtGA+dkT0+f>baW-brw-Sg7Vw1 zPyTT{eE#8Ip-Vc89ihE1-WXLP`1wrJ69H@}M~k7+P(_!0epdw%;b*(X+g+x0t5*E)Uj{_7k%jkV#9 z&%qEusYwDXE&&T3KmDVls&7BoK@pdQ2F{kN?b5csa zF5q3IwPe=bo+|IG{_4D0Nr%5puDZ0M#dUl6%>5R(x6i$K%yLzn%*VdQ$I_AON_g{q zuj@Xn*Yn(Rd&fILX~|nhIT;?$kz%;9XhV(V#I?6M>t--N*{JhCuBDZo`8DWJ zWV;Bp`xAv%a%IoTJALMr_BlI?ny~!VdD3mw5kilH_ZEw8I{jUoS?3MA3QwP{$GY!6 zS9QLwmdMZ1OWLz#X1TkGo}@&zU|i+L#}7mPGl+8kS#a`{PnJ52f+x+VbAH^~KUGc{;alND1-fz`+)hhev zK0Tsb;k?aTQ?|gi+(YGGk;x{_&@n;CBJ9NMQdv&nH@b>_MUeq`-WS~ z<=@Ij{n^iWH2BQMY-WwEvX!O#?!}te2cNOfGeYkNZA5?4BKJzUgoO(QV(Zi{-6IHaj^l zxkJt;rS{>R>-G=xx&GL1|7bQ@cm7+^N4{Ba^&VxE-29WDZ&U6kliRtNSx@4jSKrQ~ zCG%zW@w^D1<+^S2l0P;VOLw2HjgoZ^*|zQS1Ml0vOOr0G@(2+tD%%)z-y&$a^@fUQ zYgz8&`*c1mspJ14yShR>=yGXxty67!#D^zRF#@-h>%Qa#|Gu8!v?^hO-^bpW3;0)Q z&-i$4=Yk4(&pjW_*5`6glCV3qZUg&{9ejs#x76e%y>AdGRohkdu%`IKB6*pL>8{u1 zk60a>T)w#7Y+|JDnh8sK4^B_{;AL~BKzfDbF{2{JCm()<{XSIBZ^vKZAGNKIL;sJL z>b}d{nPs%i)&mjC2#zDrcUY7biZpnx!ccflWJYW zbpM0oQlDRzqVI0)KWtIs`7r)XZhp+w(#*v>qfh5X#cw`bnQbJHTye%wiD^knDqoRv z9=oW+ACZft8ebPb(!T3_w0zdq1si6456PGm@%G>yNiXE!_&v5;8zVyjsc1a87*=;SGyqsxTgMp2GrA}Dzs+;~s-M9D8 zm9mll(rFtZe`(9U`}TjC^Y*`AvH!=ewWz062C(XHKmVV>;r9C9uk`=v^&@k@!){1g z?U2~uVYiz93}1Lb!)}ZIGdz0n8-@D{H0<{F^M8g5X0QMK>i*Bry%>cD9`QrAZJ1iU zYF6x<(>V_!V(i~PvkU_bBFOB|n~FY&kU#%lVH)2DNWL|Ie@>_xj(j;{O@M-BEbpL2V?< z2EE0!8)>|1j}#7d)fI<)o$^Jq-mm&O|CZV-|1F%xJM11$j9+y1slCvb`K{(suk5?0 z9W+e~J*PTRMR{YrM*rE}p{Y05@~k|yOxlKpTmPu$(i>->er5^oo#JIH>V z=aJ+fdro`thq>FjvmgF;`S2-f*~IMzwf$^H)^qxn+j>5?%|5?Bqrcs%zu(3@)oiN# zE&VMoWsh#KFj8jRo&Vc8!{Ytf3dwI~TdP7hMriy#8(aEz{p@Y~mhYeNV8z9??%aLT zcgxjsF?4)MtnFosPP+sO{XNwA;3;=U$v%J?F{uI#+MH||s@Gw-e49Itl;S&q?Lp+iSnt%s(d2^vC?MZBndXt#RmvT{GUzxN)9o&Dy&i zNq6S`IF`NfLx2048ve!0W-iItZuad|`9^(V)-CCo159Z9iuoN{%U}O;O9S<~-^3({=UzjDzRbRbtsoM&4^yI&PmRao% z8glE4-|lq-r328wKLU#J!Bly%*-fuDx@{pQ&j0&oU+Cih4D))A>)&1)jhaDUpq$On zKtejdx*{c0IV|IrQhnpci9dzxqiRK9Q}~oEb;|vCF8gPRKmUtwRePVeKfLyJb*^S0+W&fKZ+u|eVZW_c_dmXcbOz}96 zC7xb%^sTg&>1!hnS0@&WK3#Hpm*v8O6Nhhf{rUW{W%{Qd>%((Hc3$zlGp~N;ocDK% zEdMiDtY2cEyi@=7;eSez<^LJd)}Dz^zdLtdV%TTHAC;wFE$+;dh*96(^X}^U+i}Ow zJoudXXk*;LLnrUu{qnBdUd~R`|D*Hau#Y#qWulh0^y)ALw@eUhbE+0@Y<^|=RZjH5 z{F~)R%kL>{lT+Bz?R{zS1eiCLR zLMEBkJU_h_h$Zk#{+z<|>w0sA@#E)RTX?JPJr1~n=OlZ zC7(6<{Ac62xBJ{pf3e2&ckUDZ;eAZ1{r1*eG3nWR7}CNkW^TM(c1(J|%=Pa1siwtQ z1-+6gkM8}p{uT4BqS|8Vl+cx07jivy*Oul-=fA4#e=}M2bB5Kg)BAs0<|%zLh6mpJ zsow4vb876DA5C0#%QZD!;E*%dL-+kVzrV_QTXi!}C_+Zn#$;)^=>BuhduJsp&q&rv zN|p;%-+t=;he*_+KlGC~UcIeKp9b44Kny*wCwWk~MW$lx-G3Ny40P2;@H}(lH{{Np8CcYUlSUAJA7!L z&ZRw>i;u3#_?}&vuBg4!ku{<;jD3Rp!mpx72u)O!JXH3xSaDort;pB^49%bKJU{BS zWW%LtlJ~+c|6_b~kMr-UJ?{CBxJy2AZr^ul*#wnk7B2Z*lY39O$CMs?{W?B6{P;f3 zztd~NYaekZKH~P+vRBKJ`OLFNmQtbYQyp49)%qF!3cnHhGF_W(mHVr0pSRs}pF71S zdb$3Z`=@^YoNx9g?&I;p*7L>AihghP?=a;q`}9s<_np+;az2hzf_wVr{7SY7-%z9e zQNHbu>q80Y!(t~BlNmqFJE7p#`fI|0QgzF_=jwK@@873TVIJ}!zw>?0RteRhw6w0W z;BBQU52t)T|M_e!_ix=F&cPr4Gqit=bq{Fr4!N?V`$Su+*3kg-^UW7z|5UyG75*eL zu6EYrV)m9J_iwI#`DfehKl{?(L~iGQY9X^V+2Go@zFYqpY`_0!u(g)mf3&}?pvLdR zr%03k3@LlJ*PGpXub3}R@`$D0Tz2q8 zP-J+9?Z^4A<2^3MJ9nMj5OM0YaFqC@&-ZS}{G6j#-ghwZo>b3U@uyqAZ+;;X=vtlL z0xDDREU(713kmJSAMoxZJSGk5h1xQ2+xv93+RJ3k6W_LN_q5mE+u9zzd!N)@F)OId zb;q_xPaShu6?jsfchz_PNlkyKeV2>-g`UmYs4tlx@4Br@YD)_<>@+&i@U*On@n;9S zI^eRXR^qaLI);50+h;W3|Hj_AFdz#wQu_)?X&tv zf?S`vCuc5wc_~6tZQ_xPp7Vuv&ejV~FlU@RT((|q_kwJBo;Pe;AJzuPTnaguS-SjQ zMbV>hx6t5crfW8G%8G9MtYmKUg{5ERBm3d#{eu3FX0LDmC%NOoA4A@)t!J!Uk4}DB z_)2Q(-b;Q_(wU-M@|rAZZlOF!tKOLx__gh`ONmV*PffF zUAYyjk`}LfWU}WoWvzV@IST8Q=Nahj)BUmgpXi_cLTlfCX@1CY<4&*a+oivYZ)m?Y z{=4`rhs+A2jz5bGTkp=Fwe0$`>5t8OYJ^Pwsz+Sja#pOe)Yj>B#HDvSWyaAbMG6#V zikvud;>eU!4fCrf&hwM5O|4@9U-Nr6wkGsj+66J^<^JFJbtWx({kFPhzWyoekNeBq z?(W{PfPeAZb;`T9cU8=;30hE+ct>zTR@B;Mk-g@=Tek4-i9Rxs&Gs8;S>#y;)ZL0# z8z26)(|ohMtn#q*?fp9omHL1Dn7koD+xxc~|Ie4D{}~#K{xf_G0iUfgnf=d~UH=&l z?5zK>%6?PAe};L}<9~?j|7Q>dAI@>pp#Hq~`aj&$|1)$g9@S2C(4k#wh8lFC!QPi1 zPP%!ry7BkV_S3}*FO~VuI!KFz>c5#`|9t87f2^nfGaL>4iySo!yIq6+ooxPB6^Nj@WKDB z=DO$~O?Pda759ScU(1xzi0$6t+s^{$fAe2jBEMySpQ%0PkF-OV zy=T5vxw52W(jy~hEe*+lYT+HlFL?87ls~pj{wRI8u5^yLRLQp#XVXb{Pj1t*3)+$R zX#$^xEXUiZdsaV^m;Ctcl56*KUEq}WZ4dn3U9_`mIMV#iy8qmsIroKaKJ$j{;|ePk zoB#B6YJTvwQwASSd@Na!ytvf&_vx=c&Fh^X|7T$R<9gjj_7QjX@95W^A|5=~-YXmV z?ff~l(dJ3{EA4l`KKy6ktUGNL*Syxbc4gM5S04`@e7rrvru7b=+vA;`%(vw)?d?a& zlA)jPST-C>$PDSz_uiUXeS6>asF&a6-H+UCV>ejq7h#(-_wL%d)6ur3zfW($m)L%N zeuQ5EMX3>G#p#+_eeX8!bk%q4@1M!*o@rjvV{ICZoX{CS2O*>!{Lf&kxBr7){6DRJ zTQBkyd1I2XEVd1D**c~-KKqru*q|%U4{Yc4~VECb*u)0@IQg_bu9rF8U z)ND86n`H3jYCdZ4l3J~=4mhIN8|W=yzwc=Ov&seR(0x0U4fM&buCd7$q(9p0P5ayKm&QEZf9vcC5IDF4mh58iEEnI)(H@!0fq zmd{&~UI*>Fx_nEwf|i1c&x$>)vYWrISNRa$x{o#MpVg)P4*KP1 zv6YMOu6;VEW!+O2(Zs6}a*lHCSHcg}nO-X86+Sv^>%0|x+b`ZZk)mf=6fyVSgXfmt zL1TM&wfo_l@noRLTDgDZj$6C2yJ~kt4O9Gxp_+_qRXW zMYGNdKazA;^4RJ4(7fldzg=pq{AGWb>WO{3cj&cu+C0m=J1VXohc)wV9(wSrzvlYc z`CN6v`}=HS^Ha;~lk+o$-_NwW)T?u1xoUENUy=0}X7yWpPk-Ay>1U1pqBW|==3V#w z*1PlA+r_8Z|1-${S^exj|H)dpz01vJ?#WVmWWV`m<=tm_(uF@B?KeDDxX)beNPYUn zWphNgmhant`tp1K;IBIT%n6&h-;MGU`_5`_kXDF8t+K-(6Gr!T+e7+(*?r zX0vRctxQ%~^X!Ipy)CimWUyyfmZ>$g|eZPQa3&o1<2nawH7K3_atyD52rk5^$J!^Jkx9f$P%%uF1s|?F{Ts<=UPaU_8e^zE8X>y*e z;&$wZ{v-DVqQ0T{*<`7)~}~>m8a^nD%(o)x1t}N{xdv0-j?(DlGpK-SwS|L1qaM0bup$fe29J) zVEiik!XE8MXSI*bvWZ&OU$%W(k~p%@NMmePm9}*XeOJq)Moajaq8H1{G(b4OduXlbf z&+_lWKHU%RJ9OWf%0@j7yFAN5FL&MS3Jrf%|4@aJ<8oKOJ*~0-P=26_zhh5fdhY7i z+g=Ktk%IIOpHgH}jePiQTC&xsdmtVT(%dSL^TLGm|VMt~%b@`OfXx$(QH1`9Jv? z>hmtLyH9`i&DYg`>|*wsZ@bHX?Q>S8NYPOpdHpSyuKn2abJyG2U-KGQXPQO5n{V2; zFkANNlEc}Djot2^~L$DJib){B`eRa*n25g{Z&(!#=7Pi8feuHjE~w>BlBoo3dV^w za4x{-qVsXc&uvOS3LmcL`C@kUkN@i1FTOE0=}Z=ia6xR4e`!^tgqXu{qd02w*Q={bRl7g&Lb*&lXlq z+ZAShH68(e$>`qgQ#Vns4lzE->$#Y}~b6yXcAz z6|a*89fxd~KR?cApT}EJFStZI`$J}`mdUs4YySMbc`N$Ork{~-|834QzAyTG{?;k| z@<;sn|ITS-&P*)rNtaKynmYg2nR>qRum2gc?={$dKWr~*WB%xFpvi6S)hpgFX?`1U za7E^IGhZ7^hLhs+r7F9OjDi(X(pRkdE-z`LoV|Lkov&ZO=`tOu4-t2yMR%yndF~ec z$@r=4t^S1j`f=J*e_Xkw-(M#(oBtL zGnG-|cfn!%x54|<>ZP;o6h1s#xGaWcPps~uh_rb@Ym^Ia__SIcJA8d3)84N9ZFgKg zdZ(tV8MCLJS%356FAzJHay zbWww)|BujrvXc)5S7bfA^*Z3<(}ZKX&Vf63P2@OsY0_zBPsyMK>#j+AoH+PwviFbZ zhjaC=hi#XtzQ1m*MB6XlsCU^v^OP7GrB7P#7Gap9R@Qr@aZ>i0MGcnr+<){wJa7KW zy6^JZbx-zq*KcyQTe#xReH(!%@_NcP{ZCgOIN`&*wRjHKs{L#=3cC(o3HO;{xaZ#m zv-- zOxkbs_WW}DOM5qU{jy18=k0G=-q~&xf9-Yf(}K!2b^X~ZTjy)n^?xXL*Z%PO;l0@( zZaZ6*&5KK)_~+!i)MG#6CCOJ$` zXe{cwaRik13E|OBAC5CgjnJ1_qK(cH+QRrTU$*W_6n{(U%Pp(DIlp%5-akDrV@XJF zgp6pA;~n=0wy&4-x2^4(t}1bN&ee}18!kRut*v}3`zZKW*?s&U*3C~}>aRLy)|_>d z?i}$bb!FCCdt>h5c{|wl@;`ik#8>@MSd*!(<{j32z3j>cA*UbbB>0mL%E+JFbNSnb zD>)B8l+8@EUF2U}S`sHYV?rVa+atp}@0evRzll!SSW;BE$IncE+Pv56r$0`vs<66w zC?ZE>x~cDczxN+@er|94r<#3_`=jW#g_-rmN}Z1L?mkKLyfS}gq~~+x{eidkJ7j-; ze#m^9m3o)STBmPk^>uUC1w|_4G@RnAt}6ZVc-CLGHUAl|`G^ay&um@xP$N_O_PX0u z##M7ndmnCp^D#KM=WBQP%YFY={Q3JaXZodz#bLQVJFnPXRiFPX-FmxBU-paqn`++A zE|h+qUjMD=j_Z?j>zYGrpCy0z^!oB1-w*Q-#Ti_&ySqAL!=1Yin2mNHIomgTo59^5 z&vwbmyKemOZ@y^T>`c+AbDTMOv|Hu=J-@$lee-FHvVH7wAA?uS34Ocw?(cuqd;RyE zt(eqiuNUDFl;wB*)~UPub*HtW-7$tX1oFN8Ic-m{g)EoDF$_ZA^9In14XWH(1M=DD z{{H*7=6_g!{kQh-__O~mZ~X24P5zeM)o=M*jz53<$-c5*zpm_a&ovo4>ksRjYlI)q z4L>~n*41mv7iYdNFI-;H_dY1Qlg1V^>n(uSz_U>6rOoe>+UWnQQN$1*EM}R#6+Sv)s;bkjznQ&f(!78h5z8KV=H7hPU^j8m>dfiQL6>v&4!sc< zR9Wbsdy3CKYBRR6iu#bv+c(X#%zMz~x_9@fJzX6C89XL$G(|atAH0U*?OL3t{Db-n zC@1h=L_WfQfOUtr*IkYmT5n_iu$o(!>u=KZz=@Z#XJ;~&^g5hs;y)F!;rRurpZgE| zXAs)@p0%RucHovPdMSYl#<%zMoV0rWER5yz#QQ5=$2+#1eD&zVzk5dBo8IT2_)r+R z)ke2IS!4U%Z~qyLzp(AMv58!8a>guh3dG4#X)zP_MuD$uot$f1h z&96NRXJnt)()+gh{kC0^wa<6g9sgy0^M#$#zRZi)9zD}=(YmR*G2)%_wwm*Q%Jv#R zI)2!~PQ9X1XIA~DxZC?@=N5z)gdOAB@Wp-^ie%LA8+qTXpaG5vkrO+XOsR3?iqe&1P5hOpRUe{aF3lTIG=a zsF$>$22N&z(H*mBb{?DD+F#uUXAL8lT={6UciW4J_%3vaTliEQZ3GDACZtf4y>Z8^ z(|N1&mY<*TaB1Mdi5<4J8q7&uC}|u;3uwS;^zJ1Z-8+RoS`oKCS$1>V-tEE9&lFr* z@!-S}xqVafk(1wOY|!);FqEo#^d_u9eXZKizP}|9GV`2LG0V3~*Ur+$ns07t&8C&r zwSJk3eI7sWuym{o+$B(E@L1xx^7-?Jdi{^>dfvHpzJ#lX=h4IlntG_F@$aB2DoEbJv__a{<{^>RsJyuF>u+Uo4 zyrcg>_4S1{wm&+T{PDWrwtT5|!`i23^9`6h;w29=zNt`d{(1e-KBY@x=Z{z|k}kq`P$Jl7D7d1wDVU-=(H_M*snj-AgA zJy;#Lr8ZaZTfTelmp_5>H!Z)3x{LQN&NBM4r#e4;s%YC2rJO7S&{xA1C zZgFSs>icnO`%K;=5%+~3OG>`7d{X{5`|Kb2-+GzzWUnV&DV2@$jn%#5DZ2gU5swI& z-v127d2)B^z5YBmJN-GwEt%^^Oxm;QdeT>PbGzR}4KH*;PjEtqrn-Ol{; zx1-B0$M)wh>e7DSf9?=;;0@dvK`F_0qm0HfQ2&rK^iBspKE?YOQE!A@MBlqcu=xya zd;!nuFYV|0@^#nv7yamZ?tj5#clGV)NFM*vk~cQj*m<|`B&092JioLov7mJ0q{2n( zllz6c7q@gxP0yb1cD?K06+5e|HOdcbtxkK+^7bsXj8)y)t$0<0XVttT?_|CnFun0d z`NzuikKuqIL^mLM2#jGtq=h|<6e)(y6z4N6536JN6w29623k`l-nfI?M`pVDu z2kixIoFCK++|DxFzCB2N7SFf$%2s|${+v4HZz=n$`O?0B>(ATDSBE%D~@=X|LW zfn~-!zw<7Zj|qQ~S~;^`=*lAt%WF#(TI4;hHu-k%*J``H{^2GMXVsWn9BNIs@K4o_ zHQjgZ;@y%LHPMgHH`Qr;_};1aaLdK_rrwgO>DzZ~Ze7OHGAHjA-z6)V>$~dC)$^I^ zGrh3ty|z|x+ny`)jK8HRY{_Wc_U^co_jcJGzrxoC#-(w$Z@3{7eKa_CZ_Y05dDE;r z4I}fQA&jK6$V23;*z= zEMDU1!x_&$@RYMkhy1&!^yPs3>FlN3K6TA#PWjKUmM0+Z_8$|**HeO%C#LqsN*EcO zNW9Q|Z!TsZ9(D276^6jL+{gU4m=De4xu$YiPi5D>-5qadL>ybU(Y!P%f~W66x~$dp z#E16cnRR9t7hg5$o>-i9WZ{E0cZpL5wj3w^9F!5ro-|LNKWy=0zePpSOTJobC44l= zbld8c>-gqYS=wQPUT;ILRYsl`457OAF_%lzC+d`PM_=!Mzjn`Q#rSpnqL1!xUAA*& z#E)pt%WIxid^sgY$edC#ZX zE%>5*Z?DAF)0sOi9(lBwYx9q!e^1Ld?S5BK8*jW?GVE|-s#U;`CHuao?%wpa_>0qi z>(cD#(5vr{?u)yBe)8$`*V_w^)$@eEm|FAn@%)=vzk@!qo_*i`RoWuwU5e4{>O-%R zRGzeIt)2LCPF3~w6VLxM+?updBK6WF-`}V7&VGBl=(_XkAEi$Nk9bv1NxHlDx@yVp z?^j>0Utjp2VdEdOk5NBXEX=oEvhCjTcdbWe7rvi+e`)o%wM%Yh@2a_G)w-s9+GO7K zJg0a1|7VE5zqLr7EFvE)6KbdhfFY7wfI8H-=eyycdxH+{B_kw zMJ(axs;Eo*_IdsNvZ?mGv_XYOvX-}A%$D~RxBa8buDva@QLCD>jim#>o0c?bW%8khhu2DLj0J6ML?oG5E3C|35=p^7Mzx zZzmGldNk2U{hz7lj-4JC|IL+4A`nS~Qf6cer|Nh?o zpW$)nT33d;>L1-c`z~%h{ae>lR{!D5X^HAVH=q1|zOMSY>HGbgwl%NxT=M$*{_I_s z-z=LZ@vtJyNHvvz|NF%yclPv@+7=$)_3EDRg|Dw$=LcWh^4Bdjwp;b?nxYLc&lxt@ z6xCZ@+`6^x)IAH`M|~X10V|=GcRt|yv1WI>-QvEA{h1}}Q(xcz_1W&V(WCsgJWL0F zYnx~9ez`pVwQs-R-z7HeYhKGqZrrzd=bo!aTh?86I4SqkjaiRL>AA%7b&TiN)_i`j zpY7E=}wxcFmqqa98KB_}7&oS>JYT`}XGj@<++j zKAPriXaDMP+3))1eb?WuUAHgehJHa|7Ys{&Gh+S_O1NCzvusFIJP>fi-Dja8qDe_fge(z z99Ms#I^aLU{<8lJf3mi&Sim#?P4@X;{8{qf-`)Su&>Q%-xAH%O<6Gx{e{cV1__*rY zqK3if3ZM4F-wiZFuA8z3ow;9hf2GR&pQ*2Wb1pha+M|TyVifO#(q77c2GlUGr?1SaM=77kswqMj=W-upa{KIAaQa##Q(OMJ3+zv{qBLNq z3^SkkllY%OS@!-P=Kl;1Q5qlH|MZmCf8hVin6ZHG^uhlOpY)>Y5Bz8NVzzeG(GT^1 zx~I+mVE>nQbr$wRQqFx8?*9Ld zze~ehfB04xF-vD#zve!@clGYSa@srQ1-UN>)v0Y|$jyisO}O&MHE~f^o&2>L!`c-G zzKe0MULu`$l|gS+;xylN3z`DIZL=;Yyc0h0Pr#1um>-irOuFtjF>hUX@azyZG2U$# zb5p{mOuWeLE!BKs8q?k)?2g5@%;Bj`=|?tsX75GObJYW{tuO7~oSK=v>?h+bN8uAi zY12%Zb8`QLUcD~;_&)>N%YQ~!Y^)}|{$9nmetE2C{qmCu-~JUFbS^Fu%6JkUuxZYp zJt+aK=YRMuy8K6f#p`=Ym)7smOiz-0=Igs)nr{R1Ue`UFnkN;ATX#wvSGJUjKl)m8 zYj>`B^o6hWoc@*Bs!tbZd*>84v}cb(%~6rUo`&ME{|woutNSH0?IbSMSRMNw zHci(#pf|VRO|EOpiSx%lZ1$GwJF-E9@nu#1v9o5sUb`BTqjgShDEe2 z>3z5Kx*{`!A18a))<^oC6El82J=VMIh1LEpQ*H0kU3;3{BkV6G=e)Uh*;{H_?b?>0 zv#lx(9Oq3R_5ZZYXZ+7_gFWOw!^LS=YApBkd;i$}G40yF(zaLLt8HCv-st7>E^?ER zdnIKlGVe$L+o3<17q@EL^7-@M%(7G8b4~Z&yZio^gG^>BI&bq-F+M5fCirK9ubG+4oDW>%+_SOZG6oUG%%aG5cwg&EP0wW?fk_Oy4i_f27Z|4;l!fBqwVfw&CuS#C=o-YvVwy8GYxt1hZf8~g5?nYVcg zPBA}KaFbn>@LhviGS{^Y*-T_Y|3Y zp)Z4Z)8xl&t>$fCbmM)z&*px;{^`qIyJM>2=6sAsdMYU)H$=N7C7s?XTOP2A}$>DX*+hmwactL zp<}VmnF5BdCX9z(%8RXiZ{xi*W7hKa((^obvp#yN%~e|~!eqU+OLjtK(22l9HMdnb z3iu^iLZZGO%a#>;9w~N9Z0owrU&=XGOLfgOqPWc%j92n&om6yDoZ-^nPj{VWT*U>qXE0rzn?ZPVYaO2`MO)4?~nD5>2e#3 zWrQ=MuC3Qwpnho6n!ZcN&e%$s2iaB!uxGFM6T30`VD^F+zn1r;M{9iLZ0k_aW)b2! za^|wP)T9T7Awg$bPcjHj_x#xGH2ZLs*!pFv&$j(~{j(}>ezH*a>~@Bk;zCARIb273 zdKQ*Voby0l>2H5-UX6V6BU|YsEH_@g%v=^fBX2|Bwq>VG!k+&KU0iC{l5j2lknOMh z9y{5r@6~I+}7oacv!m^Uf+6Pu&YIuVtuZf3RQv=8sdkL1!Z4UP|qo zu649}=_{|M3Uj?DImh1htl85Rrrc!Jq`iE-I>FctUxTs_lEQ=9K&M8b;G4>k$tk6L zJqD)^EA%`2Eov~>WBS0J=ZE1s>BIkIFO{h6;8M#qJEmQ%AbB9S%eZGw`ju;MMNpiC zcY9`}oXUs3*2mHjYfJx%`(4*vRBvQas_pSkP@W}^@gT#4iSw(jFKW=pjN+TQ;AP;; zs=T?G%QH8w4B5Q3F{#y2WrCmsgOGpTvlTzG57bG1NRBaY|6{%6g>Qj~&#l~^uxAd& z4Yx(oB`wacTzgA{nc4G4{li-J$Q@U|oacQhRkpTp_qlyrHgst|xl?ZTQq);yo}a(k z_7~9Ici8HBG%<_c>zn5>?%Ox**YgAaq<8F{z-yV#J4%*oD;0T|Qc-5SA=H(04zS3ZpKO)C_!6rJDcizs0FL#}t z!@Ezr*6EVv#CO7xw;QtJVESJn>|1JDm@APl+lfTWsmEXMl=3kiM)1MW$ zx69-n({=;xet+IlqR$?6GJ8SBuDbSI<)8h0v$JJ)89(4X8o=PkAo*==7HGJaFlI^R zSsKB#B%%4jb>+klw|goV6iG&?IkN9qx37!g**iPw z3b)rsm}BQ3x}|gL!NfGFIkQT1i}x08{c~yeb{-y?CkY|5pXJe!q)bZriH+_e`3$%|OLaQ(dJcfZ?Rdm-kUbroh11sKd3{rd!V#-ibcbW~n&U zS$U;|)`1U>G6`3<1h6YE`y>BBu6srF{mg%yAD;HU-QB6UbK9ld$CJ!tB_jg_+*hpS zjehu_q4n$AEZ*ec5BDancy;Y}&FtU1IhM||U0(Ed;*<>spCo+9uIpkr_))##kMUzm z-TO!6WG|Io-_GK6Yidt8n?d1(rB@zX$l9{TUfW~7Mvp0L*gQEF&PH+>@yA<~k~c&aAsW9y817X>uf{J-!gwVGJ!LmGj`&{%QILRs$A?v_vqTUl==(v z`Yh{Tx}~%3(`{dwYilKcUW$-pS#en5trj1L#X+{2OaH`tShjgx)XT70vpowd_e7q# zHd%G;L&xb6dXg-`29hV-lMh$PRKy?ApMKbW%dI}~zp~r6YbZ+$8*b$8zSQ=2za#)i2ApDQKO1~^IIl35wJ+@Cv^~pE^}NAO zzdoZz_p(j$qi5SL35U%++q!m(k;x{PPX^n2lUeUY&Sc14!D(p`r@in}o$`x)+MBOU zcHcd-RMyNWee>SUvo1Yj3NA8swo-1jow4q6b5lWf%a5h$*$?JR*Jxf-+ZG+qo)Huq z6%&*D_uRac?GbOEPI$~Ip|I|A!|t}Ks~KCl>t+9BU9s_gxO>M|d%l zGu!s?DHV^Pz)vSmES&LHJ?#S@cT$6~&i)MEaOWS1A0`J~391ba`Ka=3;wy9RB{4oc ze(O>){+*j`b7$2f!%1!)PL^_8SJe1i*m67Ca+%d+?{fLMvQwm7?_6)PnYj1uBxRlK ziM{6jAP9-%Dlh%_<`7{mn~9hvsb??H{V`VD7wWO9BHd}f+NlJ#XYMZH~-Fl zv{v5d^4I?iyg%xlub3Ra^6;bEHs7;zZ-#Szt1$Bw+T3vJ$Yn(IgAe;9el-1dzN~)5Z*`*7 z>GJ%_#rL9W=SHN~95(R~*zknOQ9;PK>*sRcEBbHixFX^!jbgLJ{xb-r>~Oj^U2wsK znBBbJUQO~@b>uCF=-epRa|Mp?w>&I={JOuZJiBODe(%b#;2o*CYmW8Tm3)?d$zG`HCi+=|u+%K6Wg# z*A{%bJB7*3Vby;IS)0h}2lrcNJ^eQ0nQdH(x3suy*rW1@rg53^N!%FU*i-C)yH?7I@9q^zwirjUD5w|~~|`L}ALMYq{?H0SqgPmQ}{$Xu}?3SDPNmtkDiLuSh%YFOh_R74qHj6uXzP%Ql z#;|G(Ct>a7dl>L76(EACF#3t=_g; zB8`htA;P7=|7zzSUxt!-sy}9%bw9ReIG%IOe4o%qXYVXij+15LZ1zTX7Ps9Ba*!#p zv^cn0PVeKph0FfEHQX7k+GfBro{Kf70DY+xK?e zcfTx_qBw~oz~)K%W`E`W-zgf*OMY0di>uH2@%YfL-Z$UB*U4X#a5lYiEHdiSLzWM1 z$tQ2`y^y|%>&vN6@@>1pL;X9M-`G;|PQK~#bol{cf zhe{O+s-79o)cAae|D%)7kbO_`clx*bZ%bF-u3dfVbIscON4FQ8zpS*qWVimCyGEBT z*U$V`5v2R$*xOZXg}0YRVYYfL?swehU-I$zH_^M(mX-7-JMWKmI`;IzZx`!tn~YA2 zJ=I&&cepKxlSS^>`u2Y^uMB@Y|0ndHK`6W6wbT(a-Q`iP%WrI*x<+90>YX<(ojUX8 zlwHz~0}L9ks!wS!tg)A=aJzhbAOE!)>$=F?QtL?FxmQvr7aS;jx16QAF?vb>D=*Wr z*WMStytaOQ{;l-s>WW9RKA-;d=X)sQ{5-$AM}&Lkq_2&Kp26|dPWA_H4g2z}!o4rA ztpDok^*ChD9>dDIlu6qhxFKne8F8|NK**5V%gMIx^&i@RD8q8L#iT~ka(*N`Ke})tO|3vB!B`&Ey zfB&CT{f7m-tF*=c3G*udtNYLJN%%iQtNe!7z> literal 0 HcmV?d00001 diff --git a/docs/api-reference/peripherals/adc.rst b/docs/api-reference/peripherals/adc.rst index 3bad7b24b8..d5fa4ce346 100644 --- a/docs/api-reference/peripherals/adc.rst +++ b/docs/api-reference/peripherals/adc.rst @@ -85,55 +85,58 @@ The value read in both these examples is 12 bits wide (range 0-4095). .. _adc-api-adc-calibration: +Minimizing Noise +---------------- + +The ESP32 ADC can be sensitive to noise leading to large discrepancies in ADC readings. To minimize noise, users may connect a 0.1uF capacitor to the ADC input pad in use. Multisampling may also be used to further mitigate the effects of noise. + +.. figure:: ../../_static/adc-noise-graph.jpg + :align: center + :alt: ADC noise mitigation + + Graph illustrating noise mitigation using capacitor and multisampling of 64 samples. + ADC Calibration --------------- -The :component_file:`esp_adc_cal/include/esp_adc_cal.h` API provides functions to correct for differences in measured voltages caused by non-ideal ADC reference voltages in ESP32s. The ideal ADC reference voltage is 1100 mV however the reference voltage of different ESP32s can range from 1000 mV to 1200 mV. +The :component_file:`esp_adc_cal/include/esp_adc_cal.h` API provides functions to correct for differences in measured voltages caused by non-ideal ADC reference voltages and non-linear characteristics (only applicable at 11dB attenuation). The ideal ADC reference voltage is 1100mV, however true reference voltages can range from 1000mV to 1200 mV amongst ESP32s. -Correcting the measured voltage using this API involves referencing a lookup table of voltages. The voltage obtained from the lookup table is then scaled and shifted by a gain and offset factor that is based on the ADC's reference voltage. This is done with function :cpp:func:`esp_adc_cal_get_characteristics`. - -The reference voltage of the ADCs can be routed to certain GPIOs and measured manually using the ADC driver’s :cpp:func:`adc2_vref_to_gpio` function. - -Example of Reading Calibrated Values ------------------------------------- - -Reading the ADC and obtaining a result in mV:: - - #include - #include +.. figure:: ../../_static/adc-vref-graph.jpg + :align: center + :alt: ADC reference voltage comparison - ... - #define V_REF 1100 // ADC reference voltage - - // Configure ADC - adc1_config_width(ADC_WIDTH_12Bit); - adc1_config_channel_atten(ADC1_CHANNEL_6, ADC_ATTEN_11db); - - // Calculate ADC characteristics i.e. gain and offset factors - esp_adc_cal_characteristics_t characteristics; - esp_adc_cal_get_characteristics(V_REF, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, &characteristics); - - // Read ADC and obtain result in mV - uint32_t voltage = adc1_to_voltage(ADC1_CHANNEL_6, &characteristics); - printf("%d mV\n",voltage); - - -Routing ADC reference voltage to GPIO, so it can be manually measured and entered in function :cpp:func:`esp_adc_cal_get_characteristics`:: + Graph illustrating effect of differing reference voltages on the ADC voltage curve. - #include - #include - #include +Correcting ADC readings using this API involves characterizing one of the ADCs at a given attenuation to obtain a characteristics curve (ADC-Voltage curve). The characteristics curve is used to convert ADC readings to voltages in mV. Representation of characteristics curve will differ under **Linear Mode** and **Lookup Table Mode**. Calculation of the characteristics curve is based on calibration values which can be stored in eFuse or provided by the user. - ... +.. _linear-mode: - esp_err_t status = adc2_vref_to_gpio(GPIO_NUM_25); - if (status == ESP_OK){ - printf("v_ref routed to GPIO\n"); - }else{ - printf("failed to route v_ref\n"); - } +Linear Mode +^^^^^^^^^^^ -An example of using the ADC driver and obtaining calibrated measurements is available in esp-idf: :example:`peripherals/adc` +Linear Mode characterization will generate a linear characteristics curve in the form of ``y = coeff_a * x + coeff_b``. The linear curve will map ADC readings to a voltage in mV. The calibration values which the calculation of ``coeff_a`` and ``coeff_b`` can be based on will be prioritized in the following order + +1. Two Point values +2. eFuse Vref +3. Default Vref + +.. _lut-mode: + +Lookup Table Mode +^^^^^^^^^^^^^^^^^ + +Lookup Table (LUT) Mode characterization utilizes a LUT to represent an ADC’s characteristics curve. Each LUT consists of a High and Low reference curve which are representative of the characteristic curve of ESP32s with a Vref of 1200mV and 1000mV respectively. Converting an ADC reading to a voltage using a LUT involves interpolating between the High and Low curves based on an ESP32’s true Vref. The true Vref can be read from eFuse (eFuse Vref) or provided by the user (Default Vref) if eFuse Vref is unavailable. + +Calibration Values +^^^^^^^^^^^^^^^^^^ + +Calibration values are used during the characterization processes, and there are currently three possible types of calibration values. Note the availability of these calibration values will depend on the type of version of the ESP32 chip/module. + +The **Two Point** calibration values represent each of the ADCs’ readings at 150mV and 850mV. The values are burned into eFuse during factory calibration and are used in Linear Mode to generate a linear characteristics curve. Note that the Two Point values are only available on some versions of ESP32 chips/modules + +The **eFuse Vref** value represents the true reference voltage of the ADCs and can be used in both Linear and LUT modes. This value is measured and burned into eFuse during factory calibration. Note that eFuse Vref is not available on older variations of ESP32 chips/modules + +**Default Vref** is an estimate of the ADC reference voltage provided by the user as a parameter during characterization. If Two Point or eFuse Vref values are unavailable, Default Vref will be used. To obtain an estimate of an ESP32 modules Vref, users can call the function ``adc2_vref_to_gpio()`` to route the ADC refernce voltage to a GPIO and measure it manually. GPIO Lookup Macros ------------------ diff --git a/examples/peripherals/adc/main/adc1_example_main.c b/examples/peripherals/adc/main/adc1_example_main.c index eca1e4aa29..9b7d9db8d4 100644 --- a/examples/peripherals/adc/main/adc1_example_main.c +++ b/examples/peripherals/adc/main/adc1_example_main.c @@ -10,42 +10,71 @@ #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "freertos/queue.h" #include "driver/gpio.h" #include "driver/adc.h" -#include "esp_system.h" #include "esp_adc_cal.h" -/*Note: Different ESP32 modules may have different reference voltages varying from - * 1000mV to 1200mV. Use #define GET_VREF to route v_ref to a GPIO - */ -#define V_REF 1100 -#define ADC1_TEST_CHANNEL (ADC1_CHANNEL_6) //GPIO 34 -//#define V_REF_TO_GPIO //Remove comment on define to route v_ref to GPIO +#define PRINT_VAL_SUPPORT(support, type) ({ \ + if(support == ESP_OK){ \ + printf("%s: supported\n", (type)); \ + } else { \ + printf("%s: not supported\n", (type)); \ + } \ +}) + +#define PRINT_VAL_TYPE(type, mode) ({ \ + if(type == ESP_ADC_CAL_VAL_EFUSE_TP){ \ + printf("%s mode: Two Point Value\n", (mode)); \ + } else if (type == ESP_ADC_CAL_VAL_EFUSE_VREF){ \ + printf("%s mode: eFuse Vref\n", (mode)); \ + } else { \ + printf("%s mode: Default Vref\n", (mode)); \ + } \ +}) + +#define DEFAULT_VREF 1100 //Use adc2_vref_to_gpio() to obtain a better estimate +#define NO_OF_SAMPLES 64 + +static esp_adc_cal_characteristics_t *adc_linear_chars; +static esp_adc_cal_characteristics_t *adc_lut_chars; +static adc1_channel_t channel = ADC1_CHANNEL_6; void app_main(void) { -#ifndef V_REF_TO_GPIO - //Init ADC and Characteristics - esp_adc_cal_characteristics_t characteristics; + //Check if Two Point or Vref are burned into eFuse + esp_err_t efuse_vref_support = esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_VREF); + esp_err_t efuse_tp_support = esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_TP); + PRINT_VAL_SUPPORT(efuse_vref_support, "eFuse Vref"); + PRINT_VAL_SUPPORT(efuse_tp_support, "eFuse Two Point"); + + + //Configure ADC1 adc1_config_width(ADC_WIDTH_BIT_12); - adc1_config_channel_atten(ADC1_TEST_CHANNEL, ADC_ATTEN_DB_0); - esp_adc_cal_get_characteristics(V_REF, ADC_ATTEN_DB_0, ADC_WIDTH_BIT_12, &characteristics); - uint32_t voltage; + adc1_config_channel_atten(channel, ADC_ATTEN_DB_0); + + //Characterize ADC1 in both linear and lut mode + adc_linear_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t)); + adc_lut_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t)); + + esp_adc_cal_value_t lin_val_type = esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_0, ESP_ADC_CAL_MODE_LIN, DEFAULT_VREF, adc_linear_chars); + esp_adc_cal_value_t lut_val_type = esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_0, ESP_ADC_CAL_MODE_LUT, DEFAULT_VREF, adc_lut_chars); + PRINT_VAL_TYPE(lin_val_type, "Linear"); + PRINT_VAL_TYPE(lut_val_type, "LUT"); + + //Continuously sample ADC1 while(1){ - voltage = adc1_to_voltage(ADC1_TEST_CHANNEL, &characteristics); - printf("%d mV\n",voltage); + uint32_t adc1_raw = 0; + //Multisample + for(int i = 0; i < NO_OF_SAMPLES; i++){ + adc1_raw += adc1_get_raw(channel); + } + adc1_raw /= NO_OF_SAMPLES; + + uint32_t corrected_linear = esp_adc_cal_raw_to_voltage(adc1_raw, ADC_WIDTH_BIT_12, adc_linear_chars); + uint32_t corrected_lut = esp_adc_cal_raw_to_voltage(adc1_raw, ADC_WIDTH_BIT_12, adc_lut_chars); + printf("Raw: %d\tLinear: %dmV\tLUT: %dmV\n", adc1_raw, corrected_linear, corrected_lut); + vTaskDelay(pdMS_TO_TICKS(1000)); } -#else - //Get v_ref - esp_err_t status; - status = adc2_vref_to_gpio(GPIO_NUM_25); - if (status == ESP_OK){ - printf("v_ref routed to GPIO\n"); - }else{ - printf("failed to route v_ref\n"); - } - fflush(stdout); -#endif + }