From b0794ec58244f63df40a0d607800432300acc2e2 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Wed, 27 Sep 2023 00:26:58 +0100 Subject: [PATCH] Optimize/reduce flash used in AM fix code --- Makefile | 4 + README.md | 1 + am_fix.c | 196 +++++++++++++------------------------------- app/app.c | 34 +++----- app/main.c | 140 +++++++++++++++++++------------ firmware.bin | Bin 53772 -> 53748 bytes firmware.packed.bin | Bin 53790 -> 53766 bytes functions.c | 2 + ui/main.c | 64 ++++++++++----- 9 files changed, 208 insertions(+), 233 deletions(-) diff --git a/Makefile b/Makefile index f8045dd..4679904 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,7 @@ ENABLE_AM_FIX := 1 ENABLE_AM_FIX_SHOW_DATA := 1 ENABLE_SQUELCH1_LOWER := 0 ENABLE_AUDIO_BAR := 0 +ENABLE_COPY_CHAN_TO_VFO := 1 #ENABLE_SINGLE_VFO_CHAN := 1 #ENABLE_BAND_SCOPE := 1 @@ -226,6 +227,9 @@ endif ifeq ($(ENABLE_AUDIO_BAR),1) CFLAGS += -DENABLE_AUDIO_BAR endif +ifeq ($(ENABLE_COPY_CHAN_TO_VFO),1) + CFLAGS += -DENABLE_COPY_CHAN_TO_VFO +endif ifeq ($(ENABLE_SINGLE_VFO_CHAN),1) CFLAGS += -DENABLE_SINGLE_VFO_CHAN endif diff --git a/README.md b/README.md index 0c4e615..f183076 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ ENABLE_AM_FIX := 1 dynamically adjust the front end gains ENABLE_AM_FIX_SHOW_DATA := 1 show debug data for the AM fix ENABLE_SQUELCH1_LOWER := 0 adjusts squelch setting '1' to be more sensitive - I plan to let user adjust it in the menu ENABLE_AUDIO_BAR := 0 experimental, display an audo bar level when TX'ing +#ENABLE_COPY_CHAN_TO_VFO := 1 not yet implemented - copy the channel into the VFO #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented - single VFO on display when possible #ENABLE_BAND_SCOPE := 1 not yet implemented - spectrum/pan-adapter ``` diff --git a/am_fix.c b/am_fix.c index 3fb7e65..38c1a0c 100644 --- a/am_fix.c +++ b/am_fix.c @@ -53,8 +53,8 @@ const uint8_t orig_pga = 6; // -3dB uint8_t mixer; // 0 ~ 3 uint8_t pga; // 0 ~ 7 #endif - } t_am_fix_gain_table; - //} __attribute__((packed)) t_am_fix_gain_table; + } t_gain_table; + //} __attribute__((packed)) t_gain_table; // REG_10 AGC gain table // @@ -109,7 +109,7 @@ const uint8_t orig_pga = 6; // -3dB // lookup table is hugely easier than writing code to do the same // - static const t_am_fix_gain_table am_fix_gain_table[] = + static const t_gain_table gain_table[] = { {.lna_short = 3, .lna = 2, .mixer = 3, .pga = 6}, // 0 0dB -14dB 0dB -3dB .. -17dB original @@ -126,74 +126,8 @@ const uint8_t orig_pga = 6; // -3dB const unsigned int original_index = 1; -#elif 0 - - // in this table the 'lna-short' register I leave unchanged - - {3, 0, 0, 0}, // 1 .. 0dB -24dB -8dB -33dB .. -65dB - {3, 0, 1, 0}, // 2 .. 0dB -24dB -6dB -33dB .. -63dB - {3, 0, 2, 0}, // 3 .. 0dB -24dB -3dB -33dB .. -60dB - {3, 0, 0, 1}, // 4 .. 0dB -24dB -8dB -27dB .. -59dB - {3, 1, 1, 0}, // 5 .. 0dB -19dB -6dB -33dB .. -58dB - {3, 0, 1, 1}, // 6 .. 0dB -24dB -6dB -27dB .. -57dB - {3, 1, 2, 0}, // 7 .. 0dB -19dB -3dB -33dB .. -55dB - {3, 1, 0, 1}, // 8 .. 0dB -19dB -8dB -27dB .. -54dB - {3, 0, 0, 2}, // 9 .. 0dB -24dB -8dB -21dB .. -53dB - {3, 1, 1, 1}, // 10 .. 0dB -19dB -6dB -27dB .. -52dB - {3, 0, 1, 2}, // 11 .. 0dB -24dB -6dB -21dB .. -51dB - {3, 2, 2, 0}, // 12 .. 0dB -14dB -3dB -33dB .. -50dB - {3, 2, 0, 1}, // 13 .. 0dB -14dB -8dB -27dB .. -49dB - {3, 0, 2, 2}, // 14 .. 0dB -24dB -3dB -21dB .. -48dB - {3, 2, 3, 0}, // 15 .. 0dB -14dB 0dB -33dB .. -47dB - {3, 1, 3, 1}, // 16 .. 0dB -19dB 0dB -27dB .. -46dB - {3, 0, 3, 2}, // 17 .. 0dB -24dB 0dB -21dB .. -45dB - {3, 3, 0, 1}, // 18 .. 0dB -9dB -8dB -27dB .. -44dB - {3, 1, 2, 2}, // 19 .. 0dB -19dB -3dB -21dB .. -43dB - {3, 0, 2, 3}, // 20 .. 0dB -24dB -3dB -15dB .. -42dB - {3, 0, 0, 4}, // 21 .. 0dB -24dB -8dB -9dB .. -41dB - {3, 1, 1, 3}, // 22 .. 0dB -19dB -6dB -15dB .. -40dB - {3, 0, 1, 4}, // 23 .. 0dB -24dB -6dB -9dB .. -39dB - {3, 0, 0, 5}, // 24 .. 0dB -24dB -8dB -6dB .. -38dB - {3, 1, 2, 3}, // 25 .. 0dB -19dB -3dB -15dB .. -37dB - {3, 0, 2, 4}, // 26 .. 0dB -24dB -3dB -9dB .. -36dB - {3, 4, 0, 2}, // 27 .. 0dB -6dB -8dB -21dB .. -35dB - {3, 1, 1, 4}, // 28 .. 0dB -19dB -6dB -9dB .. -34dB - {3, 1, 0, 5}, // 29 .. 0dB -19dB -8dB -6dB .. -33dB - {3, 3, 0, 3}, // 30 .. 0dB -9dB -8dB -15dB .. -32dB - {3, 5, 1, 2}, // 31 .. 0dB -4dB -6dB -21dB .. -31dB - {3, 1, 0, 6}, // 32 .. 0dB -19dB -8dB -3dB .. -30dB - {3, 2, 3, 3}, // 33 .. 0dB -14dB 0dB -15dB .. -29dB - {3, 1, 1, 6}, // 34 .. 0dB -19dB -6dB -3dB .. -28dB - {3, 4, 1, 3}, // 35 .. 0dB -6dB -6dB -15dB .. -27dB - {3, 2, 2, 4}, // 36 .. 0dB -14dB -3dB -9dB .. -26dB - {3, 1, 2, 6}, // 37 .. 0dB -19dB -3dB -3dB .. -25dB - {3, 3, 1, 4}, // 38 .. 0dB -9dB -6dB -9dB .. -24dB - {3, 2, 1, 6}, // 39 .. 0dB -14dB -6dB -3dB .. -23dB - {3, 5, 2, 3}, // 40 .. 0dB -4dB -3dB -15dB .. -22dB - {3, 4, 1, 4}, // 41 .. 0dB -6dB -6dB -9dB .. -21dB - {3, 4, 0, 5}, // 42 .. 0dB -6dB -8dB -6dB .. -20dB - {3, 5, 1, 4}, // 43 .. 0dB -4dB -6dB -9dB .. -19dB - {3, 3, 3, 4}, // 44 .. 0dB -9dB 0dB -9dB .. -18dB - {3, 2, 3, 6}, // 45 .. 0dB -14dB 0dB -3dB .. -17dB original - {3, 5, 1, 5}, // 46 .. 0dB -4dB -6dB -6dB .. -16dB - {3, 3, 1, 7}, // 47 .. 0dB -9dB -6dB 0dB .. -15dB - {3, 2, 3, 7}, // 48 .. 0dB -14dB 0dB 0dB .. -14dB - {3, 5, 1, 6}, // 49 .. 0dB -4dB -6dB -3dB .. -13dB - {3, 4, 2, 6}, // 50 .. 0dB -6dB -3dB -3dB .. -12dB - {3, 5, 2, 6}, // 51 .. 0dB -4dB -3dB -3dB .. -10dB - {3, 4, 3, 6}, // 52 .. 0dB -6dB 0dB -3dB .. -9dB - {3, 5, 2, 7}, // 53 .. 0dB -4dB -3dB 0dB .. -7dB - {3, 4, 3, 7}, // 54 .. 0dB -6dB 0dB 0dB .. -6dB - {3, 5, 3, 7} // 55 .. 0dB -4dB 0dB 0dB .. -4dB - }; - - const unsigned int original_index = 45; - #else - // in this table I include adjusting the 'lna-short' register ~ - // more gain adjustment range from doing so - {0, 0, 0, 0}, // 1 .. -33dB -24dB -8dB -33dB .. -98dB {0, 0, 1, 0}, // 2 .. -33dB -24dB -6dB -33dB .. -96dB {1, 0, 0, 0}, // 3 .. -30dB -24dB -8dB -33dB .. -95dB @@ -296,18 +230,21 @@ const uint8_t orig_pga = 6; // -3dB #endif + // the total gain for each table index + int8_t gain_dB[ARRAY_SIZE(gain_table)] = {0}; + unsigned int counter = 0; int16_t orig_dB_gain = -17; #ifdef ENABLE_AM_FIX_TEST1 - unsigned int am_fix_gain_table_index[2] = {1 + gSetting_AM_fix_test1, 1 + gSetting_AM_fix_test1}; + unsigned int gain_table_index[2] = {1 + gSetting_AM_fix_test1, 1 + gSetting_AM_fix_test1}; #else - unsigned int am_fix_gain_table_index[2] = {original_index, original_index}; + unsigned int gain_table_index[2] = {original_index, original_index}; #endif // used to simply detect we've changed our table index/register settings - unsigned int am_fix_gain_table_index_prev[2] = {0, 0}; + unsigned int gain_table_index_prev[2] = {0, 0}; // holds the previous RSSI level int16_t prev_rssi[2] = {0, 0}; @@ -319,7 +256,7 @@ const uint8_t orig_pga = 6; // -3dB int16_t rssi_db_gain_diff[2] = {0, 0}; // used to limit the max front end gain - unsigned int max_index = ARRAY_SIZE(am_fix_gain_table) - 1; + unsigned int max_index = ARRAY_SIZE(gain_table) - 1; #ifndef ENABLE_AM_FIX_TEST1 // -89dBm, any higher and the AM demodulator starts to saturate/clip/distort @@ -330,35 +267,36 @@ const uint8_t orig_pga = 6; // -3dB { // called at boot-up unsigned int i; + for (i = 0; i < 2; i++) { #ifdef ENABLE_AM_FIX_TEST1 - am_fix_gain_table_index[i] = 1 + gSetting_AM_fix_test1; + gain_table_index[i] = 1 + gSetting_AM_fix_test1; #else - am_fix_gain_table_index[i] = original_index; // re-start with original QS setting + gain_table_index[i] = original_index; // re-start with original QS setting #endif } + // pre-compute the total gain DB for each table index + for (i = 0; i < ARRAY_SIZE(gain_table); i++) + { + const t_gain_table gains = gain_table[i]; + gain_dB[i] = lna_short_dB[gains.lna_short] + lna_dB[gains.lna] + mixer_dB[gains.mixer] + pga_dB[gains.pga]; + } + orig_dB_gain = lna_short_dB[orig_lna_short] + lna_dB[orig_lna] + mixer_dB[orig_mixer] + pga_dB[orig_pga]; #if 0 - { // set the maximum gain we want to use + { // set a maximum gain to use // const int16_t max_gain_dB = orig_dB_gain; const int16_t max_gain_dB = -10; - max_index = ARRAY_SIZE(am_fix_gain_table); + max_index = ARRAY_SIZE(gain_table); while (--max_index > 1) - { - const uint8_t lna_short = am_fix_gain_table[max_index].lna_short; - const uint8_t lna = am_fix_gain_table[max_index].lna; - const uint8_t mixer = am_fix_gain_table[max_index].mixer; - const uint8_t pga = am_fix_gain_table[max_index].pga; - const int16_t gain_dB = lna_short_dB[lna_short] + lna_dB[lna] + mixer_dB[mixer] + pga_dB[pga]; - if (gain_dB <= max_gain_dB) + if (gain_dB[max_index] <= max_gain_dB) break; - } } #else - max_index = ARRAY_SIZE(am_fix_gain_table) - 1; + max_index = ARRAY_SIZE(gain_table) - 1; #endif } @@ -374,12 +312,12 @@ const uint8_t orig_pga = 6; // -3dB rssi_db_gain_diff[vfo] = 0; #ifdef ENABLE_AM_FIX_TEST1 -// am_fix_gain_table_index[vfo] = 1 + gSetting_AM_fix_test1; +// gain_table_index[vfo] = 1 + gSetting_AM_fix_test1; #else -// am_fix_gain_table_index[vfo] = original_index; // re-start with original QS setting +// gain_table_index[vfo] = original_index; // re-start with original QS setting #endif - am_fix_gain_table_index_prev[vfo] = 0; + gain_table_index_prev[vfo] = 0; } // adjust the RX RF gain to try and prevent the AM demodulator from @@ -415,8 +353,13 @@ const uint8_t orig_pga = 6; // -3dB } if (counter > 0) + { if (++counter >= 20) // limit display update rate to 200ms - counter = 0; + { + counter = 0; + gUpdateDisplay = true; + } + } { // sample the current RSSI level // average it with the previous rssi (a bit of noise/spike immunity) @@ -444,9 +387,9 @@ const uint8_t orig_pga = 6; // -3dB { int i = 1 + (int)gSetting_AM_fix_test1; - i = (i < 1) ? 1 : (i > ((int)ARRAY_SIZE(am_fix_gain_table) - 1) ? ARRAY_SIZE(am_fix_gain_table) - 1 : i; + i = (i < 1) ? 1 : (i > ((int)ARRAY_SIZE(gain_table) - 1) ? ARRAY_SIZE(gain_table) - 1 : i; - if (am_fix_gain_table_index[vfo] == i) + if (gain_table_index[vfo] == i) return; // no change } @@ -462,38 +405,18 @@ const uint8_t orig_pga = 6; // -3dB if (diff_dB > 0) { // decrease gain - unsigned int index = am_fix_gain_table_index[vfo]; // current position we're at + unsigned int index = gain_table_index[vfo]; // current position we're at if (diff_dB >= 10) { // jump immediately to a new gain setting // this greatly speeds up initial gain reduction (but reduces noise/spike immunity) - - uint8_t lna_short = am_fix_gain_table[index].lna_short; - uint8_t lna = am_fix_gain_table[index].lna; - uint8_t mixer = am_fix_gain_table[index].mixer; - uint8_t pga = am_fix_gain_table[index].pga; - -// const int16_t desired_gain_dB = lna_short_dB[lna_short] + lna_dB[lna] + mixer_dB[mixer] + pga_dB[pga] - diff_dB; - const int16_t desired_gain_dB = lna_short_dB[lna_short] + lna_dB[lna] + mixer_dB[mixer] + pga_dB[pga] - diff_dB + 8; // get no closer than 8dB (bit of noise/spike immunity) - + const int16_t desired_gain_dB = (int16_t)gain_dB[index] - diff_dB + 8; // get no closer than 8dB (bit of noise/spike immunity) // scan the table to see what index to jump straight too while (index > 1) - { - index--; - - lna_short = am_fix_gain_table[index].lna_short; - lna = am_fix_gain_table[index].lna; - mixer = am_fix_gain_table[index].mixer; - pga = am_fix_gain_table[index].pga; - - { - const int16_t gain_dB = lna_short_dB[lna_short] + lna_dB[lna] + mixer_dB[mixer] + pga_dB[pga]; - if (gain_dB <= desired_gain_dB) - break; - } - } - - //index = (am_fix_gain_table_index[vfo] + index) / 2; // easy does it + if (gain_dB[--index] <= desired_gain_dB) + break; + + //index = (gain_table_index[vfo] + index) / 2; // easy does it } else { // incrementally reduce the gain .. taking it slow improves noise/spike immunity @@ -507,10 +430,10 @@ const uint8_t orig_pga = 6; // -3dB index = (index < 1) ? 1 : (index > max_index) ? max_index : index; - if (am_fix_gain_table_index[vfo] != index) + if (gain_table_index[vfo] != index) { - am_fix_gain_table_index[vfo] = index; - am_gain_hold_counter[vfo] = 30; // 300ms hold + gain_table_index[vfo] = index; + am_gain_hold_counter[vfo] = 30; // 300ms hold } } @@ -519,34 +442,30 @@ const uint8_t orig_pga = 6; // -3dB if (am_gain_hold_counter[vfo] == 0) { // hold has been released, we're free to increase gain - const unsigned int index = am_fix_gain_table_index[vfo] + 1; - am_fix_gain_table_index[vfo] = (index > max_index) ? max_index : index; // limit the gain + const unsigned int index = gain_table_index[vfo] + 1; + gain_table_index[vfo] = (index > max_index) ? max_index : index; // limit the gain } - if (am_fix_gain_table_index[vfo] == am_fix_gain_table_index_prev[vfo]) + if (gain_table_index[vfo] == gain_table_index_prev[vfo]) return; // no gain changes have been made #endif { // apply the new settings to the front end registers - const unsigned int index = am_fix_gain_table_index[vfo]; + const unsigned int index = gain_table_index[vfo]; - const uint8_t lna_short = am_fix_gain_table[index].lna_short; - const uint8_t lna = am_fix_gain_table[index].lna; - const uint8_t mixer = am_fix_gain_table[index].mixer; - const uint8_t pga = am_fix_gain_table[index].pga; - const int16_t gain_dB = lna_short_dB[lna_short] + lna_dB[lna] + mixer_dB[mixer] + pga_dB[pga]; + const t_gain_table gains = gain_table[index]; - BK4819_WriteRegister(BK4819_REG_13, (lna_short << 8) | (lna << 5) | (mixer << 3) | (pga << 0)); + BK4819_WriteRegister(BK4819_REG_13, ((uint16_t)gains.lna_short << 8) | ((uint16_t)gains.lna << 5) | ((uint16_t)gains.mixer << 3) | ((uint16_t)gains.pga << 0)); // offset the RSSI reading to the rest of the firmware to cancel out the gain adjustments we make // gain difference from original QS setting - rssi_db_gain_diff[vfo] = gain_dB - orig_dB_gain; + rssi_db_gain_diff[vfo] = (int16_t)gain_dB[index] - orig_dB_gain; // remember the new table index - am_fix_gain_table_index_prev[vfo] = index; + gain_table_index_prev[vfo] = index; { // save the corrected RSSI level const int16_t new_rssi = rssi - (rssi_db_gain_diff[vfo] * 2); @@ -576,14 +495,11 @@ const uint8_t orig_pga = 6; // -3dB void AM_fix_print_data(const int vfo, char *s) { // fetch current register settings - const unsigned int index = am_fix_gain_table_index[vfo]; - const uint8_t lna_short = am_fix_gain_table[index].lna_short; - const uint8_t lna = am_fix_gain_table[index].lna; - const uint8_t mixer = am_fix_gain_table[index].mixer; - const uint8_t pga = am_fix_gain_table[index].pga; - const int16_t gain_dB = lna_short_dB[lna_short] + lna_dB[lna] + mixer_dB[mixer] + pga_dB[pga]; if (s != NULL) - sprintf(s, "idx %2d %4ddB %3u", index, gain_dB, prev_rssi[vfo]); + { + const unsigned int index = gain_table_index[vfo]; + sprintf(s, "idx %2d %4ddB %3u", index, gain_dB[index], prev_rssi[vfo]); + } counter = 1; } diff --git a/app/app.c b/app/app.c index 36dd9a5..bdb90bf 100644 --- a/app/app.c +++ b/app/app.c @@ -1294,7 +1294,8 @@ void APP_CheckKeys(void) Key == KEY_SIDE1 || Key == KEY_UP || Key == KEY_DOWN || - Key == KEY_EXIT + Key == KEY_EXIT || + Key == KEY_MENU #ifdef ENABLE_MAIN_KEY_HOLD || Key <= KEY_9 // keys 0-9 can be held down to bypass pressing the F-Key #endif @@ -2048,33 +2049,20 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } } - if (gScanState != SCAN_OFF && - Key != KEY_PTT && + if (Key != KEY_PTT && Key != KEY_UP && Key != KEY_DOWN && Key != KEY_EXIT && Key != KEY_SIDE1 && Key != KEY_SIDE2 && Key != KEY_STAR) - { // scanning - if (bKeyPressed && !bKeyHeld) - AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); - return; - } - - if (gCssScanMode != CSS_SCAN_MODE_OFF && - Key != KEY_PTT && - Key != KEY_UP && - Key != KEY_DOWN && - Key != KEY_EXIT && - Key != KEY_SIDE1 && - Key != KEY_SIDE2 && - Key != KEY_STAR && - Key != KEY_MENU) - { // code scanning - if (bKeyPressed && !bKeyHeld) - AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); - return; + { + if (gScanState != SCAN_OFF || gCssScanMode != CSS_SCAN_MODE_OFF) + { // frequency or CTCSS/DCS scanning + if (bKeyPressed && !bKeyHeld) + AUDIO_PlayBeep(BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL); + return; + } } if (gPttWasPressed && Key == KEY_PTT) @@ -2099,7 +2087,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } } - if (gWasFKeyPressed && Key > KEY_9 && Key != KEY_F && Key != KEY_STAR) + if (gWasFKeyPressed && Key > KEY_9 && Key != KEY_F && Key != KEY_STAR && Key != KEY_MENU) { gWasFKeyPressed = false; gUpdateStatus = true; diff --git a/app/main.c b/app/main.c index c191757..bd4a400 100644 --- a/app/main.c +++ b/app/main.c @@ -51,45 +51,14 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep) #ifdef ENABLE_FMRADIO ACTION_FM(); #else - - - // TODO: do something useful with the key - - - #ifdef ENABLE_COPY_CHAN_VFO - { // copy channel to VFO - int channel = -1; - int vfo = -1; - if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) - { // VFO mode - if (IS_MR_CHANNEL(gRxVfo->CHANNEL_SAVE)) - { // other vfo is in channel mode - channel = gRxVfo->CHANNEL_SAVE; - vfo = gTxVfo->CHANNEL_SAVE; - } - } - else - if (IS_FREQ_CHANNEL((gRxVfo->CHANNEL_SAVE + 1) & 1)) - { // VFO mode - if (IS_MR_CHANNEL(gTxVfo->CHANNEL_SAVE)) - { // other vfo is in channel mode - channel = gTxVfo->CHANNEL_SAVE; - vfo = gRxVfo->CHANNEL_SAVE; - } - } - - if (channel >= 0 && vfo >= 0) - { // copy the channel into the VFO - - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - -// gRequestSaveVFO = true; -// gVfoConfigureMode = VFO_CONFIGURE_RELOAD; -// gRequestDisplayScreen = DISPLAY_MAIN; - } - } - #endif + + + + + // TODO: do something useful with the key + + @@ -124,7 +93,7 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep) if (beep) gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - + break; case KEY_2: @@ -148,7 +117,7 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep) if (beep) gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - + break; case KEY_3: @@ -188,7 +157,7 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep) if (beep) gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; - + break; case KEY_4: @@ -201,7 +170,7 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep) if (beep) gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - + break; case KEY_5: @@ -282,8 +251,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (bKeyPressed) { if (gScreenToDisplay == DISPLAY_MAIN) - { // we're going to go straight to the 0-9 key function - // without the need of the F-key + { if (gInputBoxIndex > 0) { // delete any inputted chars gInputBoxIndex = 0; @@ -300,7 +268,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) return; } - + #ifdef ENABLE_MAIN_KEY_HOLD if (bKeyPressed) { // key is pressed @@ -310,16 +278,17 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) #else if (!bKeyPressed) return; - + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; #endif - + if (!gWasFKeyPressed) { // F-key wasn't pressed - uint8_t Vfo = gEeprom.TX_CHANNEL; + const uint8_t Vfo = gEeprom.TX_CHANNEL; gKeyInputCountdown = key_input_timeout_500ms; + INPUTBOX_Append(Key); gRequestDisplayScreen = DISPLAY_MAIN; @@ -490,7 +459,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) #ifdef ENABLE_FMRADIO ACTION_FM(); #endif - + return; } @@ -508,9 +477,78 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) } } -static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld) +static void MAIN_Key_MENU(const bool bKeyPressed, const bool bKeyHeld) { - if (!bKeyHeld && bKeyPressed) + if (bKeyHeld) + { // key held down (long press) + + if (bKeyPressed) + { + if (gScreenToDisplay == DISPLAY_MAIN) + { + if (gInputBoxIndex > 0) + { // delete any inputted chars + gInputBoxIndex = 0; + gRequestDisplayScreen = DISPLAY_MAIN; + } + + gWasFKeyPressed = false; + gUpdateStatus = true; + + + + // TODO: long press M-key + + + + #ifdef ENABLE_COPY_CHAN_TO_VFO + { // copy channel to VFO + int channel = -1; + int vfo = -1; + //int selected = -1; + + if (IS_FREQ_CHANNEL(gRxVfo->CHANNEL_SAVE)) + { // VFO mode + if (IS_MR_CHANNEL(gTxVfo->CHANNEL_SAVE)) + { // other VFO is in channel mode + channel = gTxVfo->CHANNEL_SAVE; + vfo = gRxVfo->CHANNEL_SAVE; + } + } + else + if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) + { // VFO mode + if (IS_MR_CHANNEL(gRxVfo->CHANNEL_SAVE)) + { // other VFO is in channel mode + channel = gRxVfo->CHANNEL_SAVE; + vfo = gTxVfo->CHANNEL_SAVE; + } + } + + if (channel >= 0 && vfo >= 0) + { // copy the channel into the VFO + + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + + + + //gEeprom.RX_CHANNEL = () & 1; // swap to the VFO + + +// gRequestSaveVFO = true; +// gVfoConfigureMode = VFO_CONFIGURE_RELOAD; +// gRequestDisplayScreen = DISPLAY_MAIN; + } + } + #endif + + } + } + + return; + } + + if (!bKeyPressed) { bool bFlag; diff --git a/firmware.bin b/firmware.bin index 76dc641749901ab278fddf49e09ec1450d25d9df..d8f8ebd54c3b9ab38e882d1b6d188e58f27b7135 100644 GIT binary patch delta 15350 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 delta 15515 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
  • #vH29KN(e&_r&T$-?;7# z8%Hj8aCWjQhEd-O5q5Fak5VZ+iV$(n3ukgKqS}4<42`7o$2UUpmamSQSt2twGWqjJ zHK@_tXoS%C!KbsaM`@SF!w;P~UQgsfN2>>h5&(p4x)n)iB)d>SivB{R#1d7=|Kf{y?p)U85WW?k+`W_u7~Z3-`U7+<`&xpF+z zZix&cirJ|AV#GrGo1*S&uWxxf%ncYevG>Q%aE5eY{|xQbBAgtnUDjXL=fYUz9kb;ALK z#x$fGPcW8+G#@~oTRI*(ni7=D0dzccj=zAN$D^Ete!~EtA|FCu;uyxZaWbB#qE5Xe z{t7agE1o{`(&QyUXRmhT(B{{@CG2Nt3xjtENe6PMOf>u-Qbg={Znpk%(9K+N`nkEu zW}GYCNl>c}$5cm@axwF088?aBj@tE_kOKC3_UPoq6XCbK#ZC6cPZnu_oOi^}M{Rts z81el4#uZrJVQhz}@kyjlAzcf24*4ShV(R-*CPsf0>9c^RP)~2%M7b0i`U28dx_h3V z#-RxNUs#oUe@Jtf$%)|@%hYMCbA@Ri9*gewF3ebK(%?+X#O4=EK}#>anC>ELjkcYN z;YrB7gRK)f$ddaj@~=P!y$kpla1!NHNY5bs8L1EHV92W6cKyO&Yu=zj@{*28jQ74--qkBZZQ~uUGRa4OCj@SCm(LigK6lfcFQp?g(C6_yy&<(7*AJ zU_3(k6`{{TQG;3fc$UD-_~MgynJ3!!{xv0C~GrLV&I&i{BXD8oZu z9K=5&=M`7T&dQ(yYVB#B5dL+**S2<_>-t&W{oSi`5{tfspvVGP07ZZ*z$8E&fW9>Y lW&`GRFZ&>(O>2e}mR>4$-}0eL|6f3z=t2Mh diff --git a/firmware.packed.bin b/firmware.packed.bin index eeda92cde5903c40927962c294b2e8246f311bcf..79e7deff3984992716175f065f0f88ebc32ef898 100644 GIT binary patch delta 41947 zcmYJaWn7fs*FDUT(kb2D5=u*VH_{!_4H6EafFcq@h_p!83@9-O3?MBaEscOEAt2rS z58vPYe4dxQVfHy^@3q%jdtdnlrmP;$vb!mSC+!<`7lbec~(#9;}9# z52DsEOKgt`v1pK{P=P>RG(_L0gFqY_@+dvfA=wSMG&&Gc)8DHesZD%@lrzyTm4Cd% zN*i2h3$Sqb3tyUJG}|^1GD~AZlwca{Gi?9Fvb3n320gjflh^aIhvgTl*8B9Btn^ft6kwAXSwvUEra0JGRHvEgWlKXm zzdrc?|CidHww0Isbk*es2kH<;!^uRr+#~bx3;$2=EN7QqCYTE6GLJ26mc(|OYCzFa zZ9w{5F|*%Grce_iK6>TeW@ZXYQ89ZE&Mpzq91^x~+ z8lgNKz(&I<2J_=JvaWUc-+741@^NUDtc8Q}86~WjqFK|9E$*?6AtM6^Z%QvS^<~6b zNT;`7AMroB7ugyC<2K7&N~=2NMfqzPtAFYRzZC-Bi30oxOp#=u_F^ZeY(Wowk>+PTYuErE9oAidN3cykNr)_r zjh_pG3De?d;c&SopDv{ScPvybc|gp=T=tBwJW;hJ0NXn7;>{`vbBaGq=M5Dsm466Y zv~O`w7#vic=q8RjU0;S3pY-Hf;)sA98JY8(jXMOFF)eWz9CXrF{gV_(Na{^(D`jxd zI`Bl};GnGFp#DNxTI?Xrvnf|Mk3pKZODZWlkNP;h#V91-{{o~u1b|3fM^clW9= zbU}7}cg)XHza_b=^k|r1!h#Ht4Va!F6=VnIDyRjyf;9*xLLe}?2P_cd2Kxtc5NJ6F zYZ-*aLbAFUWTiHccCDCs4Z?~7VM+1+^iFqm>3s~s3I$|5;cRCfFCWIPpkU#e@QnAesm4|=mIFZ7wa6T zKJcT2;4Qi(v$Q5$2rM|Qm;Qy{}*!p#(m*^jzrlT+5y&BJ)Z}Rh|x~Wan z`EBMFL3&-af;<0Eqko^-{QFjB-m61J+^$&b5N#*lobi+(j~nr>!EhAgvg|wU1N6G0 z&P&}x&G%5X;tqnT4}+`gLvh<53STMa+9wl#vX0_BLU?VNyyh!h6o`8pm$<)SnC%k^wG=Es}iwdQ1wMlB1XQ0?zBQy1E}X`l0BRQl4fq zEwX_|v>fa7r(I!(%h21_`hp&l_0D!Fa!)k2C8_p6{D-PI5yyXVzB?usBSTs#Z$8F+ z(e(5^gb5(&`L7PnBeFTnP2rH~7jRYF{zU6%>MFhQb|*ff5;>5X?lMjp>=m_D4C5Lp zTiHKQ(s%WP93hBGhkeBOeO*c9vZ5#@$38?C~vA_wW0I@0wg$ap;aqJ(0Al8SmU`b-Wxizj<{Jx zYU>~r!>aJhb#%L=>QQ{@97F23Y|zRdrh?GT)wVZq1p>aU%c__;LDeoKi>sM`0I@0` z55WuCX_dxj?9cNH6+eM?O>fkw=C4P5mg@Dtq#gp;x0Zswj zWY`9M|0Y9HZHD}u@gJ~W=UA!{qhdT7b)0x}?9RM9eF$ZYc$AZ(8yQOEpR6=UK3RMqLe$Tlyn%buCRrv#x;ZqMJZQ{soY71R%u*KnfG6u1V0o@<4UR z0!Xn1kg^XT!Qz}E%gal>@V1s866X= z)G8lKwGQLdsXHa{li}<wk(;Dht;z``@Jff()t)$2 z8eAg94CsCOjlCCCS9F9M`O+GGHSM(ZdcU3o(4@PynGrGi;vza2`cF9U`IPZ`y${tcO~l?-4WW3Jl&)z_6m9wF#7lEcmA(AAnNPmw`AbZED>k%n+(?xB3%pzs-2_PGE1giM zH+=W8>qvWz6I4>w$j!L}NlTSH)zCTvBF&uEb+cl)-eY=;jdVE=$UNqRu2`%>jN7Fw z1$b67H7hx=FU#E-WJxM-h;SQ@eN=2Qt2x3S*HYZ9JmuzizR^Tmay%mtGAO!El|dV3 zTbP*6MLj2jP|gdMseawpx12gto@2L7Xf{8c zWjm;ATFKz)eL?<%guioVptY9f^~#>L`;BpuZxkvSX8eDj>bKlF!d;||Ne~q zuNgtk=>QU@SgN7-eUPd1*gRq_&ric{EKBe=>>8@C36xzpmdGH7e z`eZ+)h{N^oirLzX7Jy{|Rv7pE={%g&|ra++FL;nm?9uXTi$GD1nI%8gv=<+jLl zA@r>b2TF^FG9C*PP4_@COTNDSkbr3YeqainM=EmB*2N{@TrD^GF@KB{eaj!1{h1z8 zNB#Q~|NFNC1sycS_Q|?m6#75s)%r^%F*ue~l?bpVt)4`EG27w37!t01hdV#58wuMw zcc*64u2_pyBv+4@pLny%jIr-2=P&+MWCq$XX+u+`UvZt_&EyRN$dGSn{72xpv9e`{ zfJUofr)$28kXtzU`{3xI=c+e1lS@wubMENWl(lb#8v-;VtLRKGUbp+gQ3A63!rlW$ zEj7<1Ahj9V0s1ByBDG1-5N|I>FTe;yY1A59nnwfa0HkUOod%YZySW zpuVL6H=vgXz43~lKrg@oOsfPyFMEL zukXSbYFVoKdfyssHJPM%h#H0a)jRF4+&iv%{p=d$o{j;hY}Z{RqFK@(CtsnTNmdfxi2wZ_(%(FHt-?)TtGc{-Lj@v>1t zKXt$5O;^${(2fni`Lle=`z*g~?4SMIBi8{gxWJ+u^6Tk5NWw=dB!WgpKK-`P>I;#{ zBGJdlN}D1IlLl}D{s|wq;VSsNoCfEOeUZw-U%t=Zyf3fy@QL99P#jf2OXWOT+{$^h zxadc^(n;clYZRnd2?)t5Hn}DXU_^QNd}NmGHx-FG23+L`veH_TBb*S&zoTsqLR=O3 zsfTK~w=q_pFwS}syL}T8s4d11`|lPaJuJeashGNN94ii9_EE44F^k6{gnv^X2 zGuw|i2NJ3sZ^{Nn{pb>tP<9u$&f`=5`ofpC{m;=7U4Xg%XQ$AghbJ!&8n7+yrJRpY zS~YH*{F<@zd>Y`G*CZe3>eEHM&t;DPfaMxysW47bBSLQka3BI70&F^IFm}E`{@%enaWF2>zHCm>hqMD%t?a)WSSygzbD}&=hk++}zCCAj z*NzPe*OsyD4zJ_qpiLV3DSs*ioYy}LXYUZ0+J%!|$E_?I2WMM)NTUI0f+1Vb|h5 z&iC$$Op`jJq8B-;>9#TK`yf;uy!3(E4!Z9ms-uQ+)^jP;$08gIBPVX}3(!DP)7Mc8MQgM^xgm*PzN~h3*Z3K z($atlP_mamW-0(mMh++$4d8^=Kz$zq_5B^-zz)CxZ-4{700%|@4$J@?ID~>aoCg7v z-_9pK++iWXWka*AE|=FnG{mH6Wn`*vasLbB7} zTwkVOeJn-rdm_Ipj$f+~L?W5>HrFzaOwPgD^a-?4cs!4vn%W2R%rBur=v&7Jf_JFl zIvW$t`cV5f^7FWt?X;_V${T`pum80vG#BD0tkRfuL97PFiUfkhhxq6E@|L$kKMfq) z!}(D7eA83|7e{}TX|Jt+gt8)^+kRS#i{mdW@_z(5^Z$8tFUmxRs5zVGf^#~y!iV)M zokbb+o0qP<@2QWp6U*|&hFB9b$4aXwCbVqriSD2BpHFHi2^SEOYetq7s=}>fU+`aI zbPn1lN*dD<(d4HJIExoEmyPyi<}V^8yip>ymInVo4y-!9(l8#8*H1kYX0oFy&Fzdq zSvMdc9v+@{-cb$_3ExKkklt~^j;uk(Cr~rN9fYnYUjMC<&9TRBqBwmgjeCtF&aYds zplu?5ImBD^Db;S;z-Sw_0ZnDO>)pNkyQgcg40)P^+Tn6Di@r+%Jn zS&ZB>jmP9>@-fw)nL2*AOA-L2Su$;>y`PRFK*Hk$X1r_jXm9?N4^F$Mrr&3@Jwpy# zcx%XTglc+pOV@0U;a=|#PF3-Sp^1@t8chv~kJ6wM4T(9Qr;8uTuyBCV1HU{)HHWwM$5G*S`}fL#ys=>MYuOb`9MX zZ>XdOremrW@lNT`7Du&|iSMW~|qpi|h4HJ+9@hQzAft1T}?KMVXffKNF ztsIHT@v;JLZSnJ$O!md zL{v!YUc8&QJ^)1XqomV!HlTG_Wb0@y8Euuzvn*(Vb$1wLvaZufzU1t~Lc53nGr}Xv zA6!GKxS|i=RIrEvPI#W?En8n-&nSzmRaQZcE5yFxhD|onPz{K=4eC<(tWLF(4JP!y z)!B|oar~}Sgr}Eo)aTn;t#tdu)V128#gAt7k-W0^CJV>7 zGoh6h?vG1;*Q$StCduU|U@*@ehJ5Q(xig8hC>}*%La9YmvgDgOh-N<;oEQCbwo2ux zR|1TP`18@#%pqAO=^-E61O(2B@nraKAf4Kt#1fsa8{{=THs-)}^c>^j+@)g48D~ahI)>MLLb&*27PhXs)rqOL4Ha?qyw0Z!e z5Gi&PGw-J{*jO`ys#yMFA(|e|$us04&ES(2SCx0E_SZ?F-P2G^Xrs<;wL5 zLhl_~-06b79D&+@<$95SNb``_tPcPo*`w(UR;J0qSIiK&&%d$WBJ+`H8qz4OBUpo^ zEwhy{{DitPs-r;Tv$V8SrjRbm=usC=svjK(y1?o0iD`@{$*PDtVd-x8A1m#1`=P#c zH+raKZCWAM;Ssgo1I_j(glTF7ELdzvYPXXucMwPKP`)npzW~ya(HvAD02~@rU;yw5 zga7jfe$Wv2bGzN~0cUX-P)74XMw&?J4%Yzy~IQ13L)H@cI8)G~a+Oum%>*XJFBE&*4Z)XAtN7B7XAAqQ ze}z|CcZwC1-i$lq5q1&EO4C9>RyVo5q4~0ypiwy&B|2R$JS?}O$3y!nmrGPuHUu@jKn384>e2kd@N$%zVSvI_ffS6+q+N;Yr4(06`!T19%?g z8j@g$=7C>G8CiQ2S68d##HV1G^+i6yC^+RARBLL2Cr~;!`qI^{<#S;n+|4XLkAH)) zE@#%`2a4|n!Gvj%rd$b3S9f1i_f3{J!R#x6!+~=_Wg0eo#r%cjhr1cy9~`%Ju6W9^ zM`V6r>3(u&(|w@G$KeOkj0hlMJ;(tbfP@l2nvDWZSW}=cGYN7412Cd_Bs4N77f>Q| zkOOyPwNp@rG=P#ZnR*IMX!a$JXGDE5gpuKN^qWp@lEorX69i*AL#scfc~L_nrW>Vj6te_)g7fYQ>yLrg!TTb|WwH}2wUI$k@vzz&6BiE>B=)m4rTL|@ z$*cxQA2KC4Y?I<}7Co7|ljjL0Ga9sddf(kSm1t6N<+IFe30z`CAv?6~gSx)9uEB53 ztNMHdx22xQ=gzR#U`k~lF-fTkM+tLGC!D9A?Nfy`n%Kv*X?x15-z!~$&KyCk9U`;d zpZn0?LGi|69JTfX^|l6h0B}WY34XX`0BPn@rL#>-d{D0E<*PEqjP$00z2X)Mx8PCe zZsB>E=NfP6=P!uagi8PIEZw*PaaDr5CMklM6POn`ezGvk2fCmuHziCg$pX@d7Y_oM z8U7P)AZvjkJPp>oj)C<+c_bhxpII(;kzAun~xz$ zZETd1{#bvv^s_%Z;oM|SN~S<)Bf4GkjJi_*A1@TUj^XG^-y||i?u-DA4kqQjKpF*s zX|F#hLj~Z|g#e$<7g(jElW4Z5yT%;LU>HUWs^D%gISYnihd`Q*04TNsP)q_Wn(+K& zx&oG~4n+rFDeUEZu6p2>7rkSYFaZ3Q=z^qOlc3xxelrs7lSMFARb8rzokxEy#?8}1J z>bH4g%M<2C9|S#2e(+-?b{tI`Pepykw!(z_SCG&`Q*}UjkjFs*A3HgHS*+z}lfVY@ zQl?SP{iw&601$Pqg?A#kADG(L$@%>G>j7sYo24<6 z;GA1AJ-Up^kPA!G`{2vz{$E_Bn=CQ*6uXCas!!Gtn=4 zgw({=fY=8j84m2xvETsv|dq9Io{JJeQ|uDh)`1s+5mM@hX6*2ljBzo zJG7Sg?_2FvQdq!1v;+Di;`2Ji@kjk`rW}*!?;dKXI}HlM%C!|o?OWhsOj2@m}|kM&irW1JN%8y9}&-GR~IqEq#wI;`wU!! z(=`t0nkD@4-mhrNw>ikd?3arpW8c*l@CsY!VX2(a+jZ9!H7dXwZ3v}#xcI{L_*aY2 zzMd62@ChHaBd$I|(PlI~{nrL7KI$i?8qcBq6Q`Au`!3wHrbmUOQI%8g_=M2>;5Dmb zItr^pnGoC>vL9d-x1mhry0nyM=b6sv>m?Hpx41fp3bHk0@hB*6PFE#Ngl$)x0Kv=B zO+w`LXhLa52>()tWT?yIBR!E=Zx*4usYl@to(5D2zj;#WVjb-> z(KmuG_bj)#*+f(Hvu!Zxa@9ShhBkv~{AkGNrAygWHdQAr5hW&u?h5s5j}%>#=v~np zno-lv%3_wb0^j5ZH@~;LO9Ux@w+CjZzO7Wx?l{Z{9@O|b?I|H0bMI&w+xOqG0-S|V ze`Y$R75a+>T6z>yX24lKb|{=0zN@TpUN#)*FbAi}tL?PXoHe|!F)(FEVYlxMOsXNd z$?#|Q*}H>)N%a!o0LEeob0xMcyvhqlaF@Y4Is-|KN@!+X{98mi8m*6CLCPNa_9Bq& zW^a#8&-=E;6HPioYI|kub~-P|9lH_D)>7sj<#TB5!Z6Kd#-*n^e*2Z6x7X8iqXZ6f zu^X7OOYdq*CnSAyV+EDQp?f8@H4+Rd@szXixIC{m)CE`+Fz;1^XoNe^A8vthi-N-=4f$VJ})A$HWF`GNtkHC;P%92U7(hjCS(rudbeR zTqV_RC1V`=rX&5z zS0s1qxQO2)&6gf4&f?6;Mo*z$I)f`TrH#E$t6o>6 zhLfE5->MCp1mC{MT(jaj@b}2I%z6;;j`lKoYr2&YiEpJZXZXK?1taK&^0r(}r)~mjgaH+K3XG?OoDJknP4?TodB)-dtS>fFJ zYz5j*P=y9hSk!(Mys6SPOWP=TMx$2vFG)wFs?hs!HPa0Aj7dzI#|;#?WCfBs91R;R zm7|^aqvF3xKSj}o=@lY6Hv12cx-}%ANz{%BRcDkIiFYFt%Wp;)yDSe!kBKzSU56gy zVQ}>drxlhTvV8Vou-HLpKEpFD7m)21nSqPYGt=u_ia&%J=mu@ml+opYZ6E01bj%!& zT9+@g-2Qrc!XtO(ur1MUngCxWUK$HW3=*}t)VL|y@ z+v-kMfF!)j0f9=kx4i`4e_45EKP<~}6KGgX%V~oNU+&X>97r^!-CX=9+(>WhmuWGO z{34svMHlX~xqwuQ5O9@b;alwtY{czGhQ0q)X714iPr*K=(2U$1ua>rTZ!s&T2 z)Td8`NcjuuGh4@azMCyfr@U5V>oYPoB~90{^O&<+WsK<78hXw1SL&zN54Pv;R|7Cp z{gSBqIT+~%fJxQsoR_Ic`S3bI9H)dxP<`~N=LIJ#rPF8$vLUlG$d`K3=!F_}1KK@! z8DZ!u)MGAOYou`WGNtg5)33eTn9l~o%wZ(I2E#Ci$j)j0u`3AkGvB6KD&w=pV)GXT zY|+Ka2$h>s{CL{8FWfUC%=F>UyLF%o_!ozntFSZE2(OVbbF!Xug|ChcL_j-Uyy$UM z_qyQ3vw}hPSloN9+uW5%ZYMlZ0#})cCKE#_TP3ypmVkzdvCILb!|(O;uQN2pPaR2* zeuwW?C#v`;rH;7Mhn8b_;yktBpMZxfZ!>Jm7?x9_>DO$b++l?{!D;W&A7gsy_Td`7 zdBs5m%j01aJYlek&g!}~Fs7K=juj*to$vgPMQAkvNd-uFklDGIWmHP>=~IXl?{+%$ z_TV^*S?XGg8^)(y=F53o68lAy-W_8@I5FIpY1_nRU!4{K$H?1i9_v}5F$)$ctN7#0 zr_JHnP`ZLka7lr6z6`wV#Xcsfg8ZJ zB8M~qf1rQ2Qi%mE&W6s{(x^Ngx_J9D@6Rvc#>b;EDa*)^q&)kS8R1JibzR{v;T1!H z=a&g``1QC#K$wsNe;^1T;U)m05P*a~6u%Flfz?nA;1S6HAld^f98C@c^X)*G^aEki z1XdG0fK_`1tXgsa#lpa<)n9Jy7%w?~T_==(V}!7Y#)SIZqh6oRLVtLz%^g2qZSCLt zCoUuREj5sJ5z3FF&?>X`e;)8 zH#dwdgu-^1MAosTtFKT%ruew{B zwRmK}wL^y)+5^-vrBgb`(Nd2uO|~1JCxp)&YSF0j-e|KH!NbBoMiT>NmY;A8msn$`JH_>`;~{6s@AVXa{H@}+6@yAI?7NL zYR)o?>7Dg`hXlTBt3SKq)CM!6?R%@62?&n<*w#{C{LmFqagi$0O6mKW6uH$R^yZY- z7iwYtNhJUTfGf|&Z-EQ1VrIHw;Ie;(lrT~c*UOkx_jwd&Li5hjh4Mi}28=<{;{8($ z3Ju~1&*qDdE@nogYo?2;9&-##;X_svBq#dC9x1p@pF&5oF-szoyOWPU2+a zhVNgiA3;bRA~J)|cmpB8A<>+_V3Vo9pgyolz zkyDpNFo77V7u=@}j(-17Np+(5LFR!Z*)wI#Rb3HfH|aw4;*M`gej9MUmye-RTG<>q zM{?9_N1rvh2!$p;$~?h!KE7}Ny6G?2gq3P6p*y;=GV#o2vBPBI;tck+a9g6$;8Oq6 zfiSKLfH{eGiA)zgl;P+yt>ApvKBgPANuA7G$;e1w<30vPw-u7il-fzoff;%y+oHgz z{ONU%DF#xc0UPB~4EHN@%ZFm}uoY**8|A3Cz#fk)q9l8Z$82O z1VamihSSaR$tSI?3QM|}R(P-z<+NRFy93ze63g?RIay%V&;gu~&gsr0@&$W5Hl7+C z;mr{#fjQb{BsnuxqjWWNuVv{T)#NBY__zI;6^TtSR?@lpt1}Ll7&)it%HKlNcoxHc zL`Luv_WV_3O@{^dc3)PQ1r#olf4bS2mYI@{O-;Z;bAF%BklTmft<;S9rZQIB?jnGj z6eni-*fqnf?HUT6;La^414wxH1i!!&Y=b9=08j7?7?lolXtr6vsGJ2B4crBRPAn;6fbwE&her*@%qt5dWHt=H3hLF{?2FBJeS{{q)+g!8?Z;Q|4?0|BG}yIv9u zuT#NBC24Z5$476P2}E}-_t#QAlInlPjefQ?nLh`3Ul4Mh>I(SyZv1pdw0C}lhDk@$ zOmP|*lK5U^n9#J$^kT5iM4qP}6eQh(rP7$D$l*;5^wMgS{B&T-I#?(~&`Z>&6d7E8 z3{c=&Uaq3PF6JoIQ3x_zsPIS+E-vb<84ev$TO5*V^myk@h`;m8E9MiYZMLGeVs6e` z;toO@WPdZ*C41cdGQUuv+50Or{t!$o{7`hE_X`a{5@O;+aac7*=)bMPWa6W|DxcTZ z7lDnR*48mjT&vW_zqeK3DZ}HLXLmelFtd_2>Ap}|9?fZy!=ghmk07fNOw@<~ZcUCzN^-a=dWInbh4BL54Qn!XZy7^ytqnRy{iO3$_fW=0U)&z@%LpWrFg>^5tG5wl3fK)M&o?{|x7h<>H%1UG1C zy=nDk?XPs0JD^?P$#$YtN>{a|%Dg9g6~+eU1y2Q1A%*f#xX+QIFFA4mfui#blm4&{ zFtfRR0D3ahy*v_ z`ri`E;-%EESY=)khBdrgVRe({1)at#f-%J4nqVhXO+uLpm{ee=^k3|Q(>2tlZqGYq zdSmDtIIK4)dI2e#f4cIyF^d#vv%84}!Hvbe*=b~?0FdV=V2cGELOPucE725-7fjC^a99U~oc9rPvfU1?kZN^p zaiT_n$*sfqlC^fH%+N|`JG&9^YAv=}9+b+<+Xw3z_V zW?tY1z5u6^0L*M|fi9o{HxR%IajXyDHFiJ$*w1cKd|wXdEy~IQ=b2Hm(J~Lsvu@`! zQ|>vBnebCGc9bs9L3~BI3D=?Ko5T`UT6n7ec~O^`Dh(I0!;(wgh6k-6f4{V@gYcCy z)LpLVJ*&dTu-~B5uPk5^b=_mxW|H3LOu7=0fAXV?tDdq0G$ULPzy#Rixm%;L1y69d zPA3AMpc_2F-6E0dR78gR8WeL3g+Y8!aH9^+6B=$pQ7`p1xe+0H#{c=!-C-0j)yygnneN2_aO)h4;M3uP$ zGdQ^*4iq~yi|Nqd4fW@UG&b!Ih1r_ykHxVuy^4PCkbYWOgbH0{lR`4uhCNV4~Dd+X7>l zT81v8?5u2T7cOg7rup~LO0DEDc;XpyU*b1ob~(FKg)9t380Ktsyk$97@9yvKSRQ7Hd^-};$)}pntpjOfF8=-lBTI_Cr16OY$n*~X(IWmRt)>2sr@Go9e4p|tf%)< z6~}igp=RozU)eeHsnVH=_hJm<^OwoF8Kk{_Tq$AojAJdRc1#D$K zS7q(Vx`ZpSd}!yGZgx-wq)>~jghtUJK*-|V37sDpoi>rmT<8B`$*~ew=?}V@5U)Oulln}Or%{p_}vW{eA^)drHAUi z*1^o zjGX4jL%G+iZ6Fdu{r^&1O2B zy8H9|+*eCo>nySNxrov}sve*|{HoUd>=KVMda?G#DH>ubd3eM-qz*BDc(=&3xt*!~ zi(_=HQFxs+gTX2lIVbP(f)jk;Km#Rwu`>3qQOaV-xZKL+iDMjXggtdq8KbX^!79c2 zUdDqh<<+zI9JrRtk@>>;(5nu0D{7TjW#34M<^{DVuYW&b4(<>>8^(ERpr<>d-30F! zwe%rpjOVNQGE7iLU2SWQX|?0%^5154Ydhh5n#0QK>|3=?B(p=WCNQaTp~>uEoHB($ z%%!(sn|Gzqo0Pi^qptS(^^qYN@#VaKtTsv*lGHMqcGeoH)<|bxHv_&~!^l|gkl*DW ziSioa;DIp4tjBI!v;LtwcQ!w&vK!rm!b~HgWOT2~^WIMwSFk;Vj_F07Yo^H~ItcNj z)*uRwOICj?>NS8zM79L|SkV`NwZz!6l;#4l14iLWp|4aCLp~Rdsij{@DkC)?|MTnH zGYf7W;F5)Q-^2xE>C0GxnGxdA5q~S#Xxy8fDc9uk3XBIx7-FcNUf^su-|$Dr*cw+%51_n-vaLn)3=z3)3HlO?Y+#7LD7E~+ z@F+`B#J4tl#RV(t_;hXr<0GHGR6P3dJK~iM#$cT2 z@xXv~F~UAmyqTv0EHrXiXh%>hO;^E9I99aMNCrDP)v?N@s65JpP4i|2GcSg)UMBk% zqsBs3p`+i$Q8FKQV69m8Y?1ke7l`z)K|zpK(cD{FUkNHzp2*;X>zCtfBN`Z~=sj&X zg_wR{?E~lovY-9B5t8)}L3`dRhr$0^Xhh+~f>e&8>M!^7SwkUUzUb^;XntsMXlyfN zoQ-k5tWs^Nc0%WAYS*op2wYw3ipMT&?PmV&1${tF;4omFH>Up6Nvgwj!JXjEzfV`U zr0YE-^pKwz_8&Sldwxzc8}oiM5=q&=ed+xBrlv=y(EiZZ3*o6MNpGJ0E&0p1d{0JThY(L%DwDfNfN5UquaofM^2c_h z+iW#d#WtNi_A>CryTFx6JD<;2NM@!VYL^}fY!>;a*$@dPL9)n5to< z)34i)D;J7Dn0N@+;!}j(?vJ>RC?M`<5ho@d^}w{PB0ID{*bT{S_pcSU8WH{y>Pr;v zKtOc(i;Nd8q}HXVz%tui4nSo@hTwlFFz82JS>5i-22%%#TU`(!xe>t*m|)qwc0e7C3)|0;MpjN$}`pYnQeT z`S4Z7iuQf@C#f?HsiGQkc_{WTZ3pO)J((!s3wLblmZ+4V|2{J52@0fZ)OY$0t?|YE z)Im3J_TNsY<(UV+Y#Bv3rr(82sLYr3ZI-z~A_DRHCMzmn*E<4frY6!$_7r@-d^%@0 ze-1byJy1r><{YR-LAGcW3cpLTVdm6N9JmO$)LF&9K&21R!qjF3zal2S-{1-8G#_h= zf)B#=)xR7Wf8;TQTW(;>i$Z9mXOu%PauYNHG7LPrT1%jgNoBjQmVF=dIBK7Rs=#7fj! z6?Rc{O|Js2EKGfV6(~-TzSI3+{hsa_Av$|V91{K2$+utb7R^%edcW)qM5>Os4S%-3 zCy>0a;#pG!f4LaOognx4ZCkpL#Gt2AcER>ksw zCn(m*{<{ENQ}N_VVkfz}{Z!m5uo;@m!!ClrZzn`Tx)-)AeyHoPx7wnvGSX}-S^815e^Ft3 zd^G|!Z{Do@r*YzHgE@TbD!HefCc~A{Kwp@s=;!Z~sn?2} z=LT+qwJIMx`;L1P^DV8y(P%Tv9^QK1!-;rj;v>yfdW@S$@uAyqWJa@bjq5X2ms_w$3Ms^sE`rq0|P>CY)`)vw}_*7eXnU@1S0Yvlm-mN|b zq%B$SEV&>%TBW`AIgyEZ1L5@Fdz*YkF^2M*dEWfxA993ALL)rV*Ak969+>obe|II; zAwp(L1hJl83@eR$S0F>=8-H-x&1FzrL^Ti$AD;GcNNQjF5Y1cj6u;2C64<81`i|&c zgKn*|^4GDvQqOaZBl?`)X4ZvfyAotC@Td%fasE7S!4I-xG3;{AB_z)KmrC@2IEn?5 zAndL6p+doK=f*a^!=GM77`?PN_=@QBMZ9+VloIK)+SEd|OO)RYE893PwZp!Tl(ucS zOxy5Qy4aQaAzEoGswp5Q;tg573IQuz5*po6NkX5}20pQHis1j5n_PB%i2c6+l$hqv z85U?FRWe)tvig(WIG9L3M0TDI!toZwJGcD`2EASD!s^{QG*? zYwg%xfzR9mp~EQseHtMooFwdxR}4%lrkj$YTzf&gfUuN6^<$h6kH~l9xXeLXDQT}i z8cCIGRI`m&QrllVx?X;Kp=sE{maAJz(Rr01Pyd{AlPt4!p4$u>3!}}t9OvY(YyCb~ znNxoKbaG3kn)c-Ny+SJGjp--Fqcv+)iY=n~H?+Rb{CZ0X-Lg~OhcixF{7XN3XH9?f z_vFtUo--8>DRJu94Ke#a+g24i=^2fbdk1U~3lghjvbt3^`aNw&E-7@;`tr(Jb_vQ= zBbkJ{$4Wy|o94y4P_c#<32NEW8veS%SDYEw3`Dv$2R?n0oc0midxV7-WRtm8zx`HM z*oK`XjAoTSPz2dLt@U9IT^o4XFfZp5(wK!xY}aRabz~+`Mw;uMsIsRlj?bfklaprA z-c>;nWTx%pl`xSdophTn=Pd)eN&T( zMN%p)0Zh*+P8oY_`P+#o0e^tq#+VIFaegY6)vNMRaT>}h!dR@p$N%DqzF~+*SD5*n zh(ahf^)gtjaO#;5BMsGzckLOi-dyZE7i*%rE!90^ztqe7;_2WWB3jH{iUPGx7#@Kh zwJ9JEu!qt-0m5VS`FRxEiwV83PHAV~dKxD|f*STg9o=@}S+Z)3>E<5kNvTQ`xJ7bf zyb`Vay6b-nZ67^_F|k(^SZE{D)|FL$LBpGgC2#0&8uu=_clC_(IuM!FOv`9@?|pA(iEm=;Aq3cLd$XZPY=G681NklukxqXk`g7qAXCBGfPfa{skhJoTmtoJ(ms&#DAXVq*H)(Q&2;= z8&0PFHR}ke`9s++x9Oo5CG@VF9a3rXTV)FGE_!qy^<Rg}ZA(1xb zEt}A0nL2OujYT=X*w8{IJx%jJTwqp;%0joL_d%YXjQKnTt8}1nq+p}9MlvpQyZsc< zh>2Xv)Wc=K%Ntkb4f)S`>3bczo@0@$PlT1ri$Qrdc#NJrcje+ zD73!+%TejOSt`m((RlRSB&A?wbP&zYLaDA?$FM2coOR$cFH>;@<-;kj1T?qr^*IZRCk#+oPqA?W}JN%3zZ=DUS9 z)AX^wkq-icc`Ur?d+-Z-KL@wFfM3vqml!)P+NE`GqR@cnWO3u5rxI*%xm0dgu}mCH zjj&w{nbE@!gtDCAax`ph0&6?{CFXc-i?%NI!R7Q@Ls${y)Ae=2@&SChX7L?kQHDZ7 z6*dz%6`mfSmpMtFkA+hgsB4iru{RajY!c2Dmf-Mt%;RnrlVjca#i#ud!}n08Mh%*= z#}o+T*o&Urb+edH*HeT|IIvV0RQ&22xkr8vnNfVD9Tlc=%3%1j9?3I=yZfx@h(`M8 zR5Ffvk?>p8myqODTk=lnDrwK=}+y6UI>h%xsdZ?)ph zC}dVqX5+FuOp{hbBbWrA8ZLjyCr`@%*g0IC>ks|;omeS3+IPm>MSG%))W#$>@2IHE zUCWzYeiZ78>=L-OIXGj$%Z-j>dIIGHIsj`( ze{Foi&r>Agh;vmd?47H{qLUbM`$2 z?vmcc^>JwMr*$HdeV5TwBSaqh*6-dMxb-iv~GwW9&CQEyLOKV4$YwS>r%ZbrG{#msw zmfgw=!tD9vgcD<*7k7s&-Nn387DB4`c8M4y`W{8e8Awja$=}%id{Tio736j4+FFkJ%Ipq z>JdAiXcbbI5k3As(X%ReS|KwRRfn^#Pbjub|4pPQ-exzAkY2CG%TxHSC)ga!?Vj1< zgd2}!FLP_sjA2NyG5GzH-!l;E@J9J)(+Hg`11sX?TlO6Mr3urX4cv3f znHP?)Kq?m3A}Ra8Q5lP7%J;EgPA26Oc#gU7i$k{&Gh@Xe@E*&9$z`YP(52qlozr29 z80wKc{m>{N5VSShDU!%OPW9W74k%g~QF~-%yS37|EOoUF2~||Rc19$XcwDf70*2S2 zENtu&mg)6%ruyf9|Asecj`}-d)O?aSMYp#($gf9w{B-GB7!l^(0CV^Kuo`)?mY8RA*>Hz`)`Qm;nyC521FpvQT z13pl_P6IL-8G!3U0hw$C3@q{hnXCiA^-lm?e+A%r5`dQP0vb;bK+9_ZjVBbK<+-3a z{SRP7oB%Dy29FVyo(KPe(pTt&Ih%S^1|3B|hPUe2syj_Nnt?F3ZtsAnFVLPR^GH%o zuLx`6+YD_rv&%IQ8rk#ZWiCm4iMH5p6RHMwJcx)n56b6XAuRL^-qxK7J+4qkab#GH zv@>$Y(;M@ZWqTJPy+ej_W*>CGsI2ercK4>x+K`HJymI@ZYIubRVV_yoAXk_hGJ+FO zQ#(~^r2a^Gh9$T{E=Kv$emCm~yagp(i!(zsrzF$goBu@T;xWX-Kg|7hRBGLcULq^( zjB9A162zo&yI#VW{t+3U|DW2~7Wf4QBX$Z80)xX_-6Wvpg-3JlS>;A1EPRLvI_jwvR$y|Apnu|gBX|t)9W&TkSG9ldjc4laDiV? z1|}v0QPJ=J>SQsAumvEtm&BN9nXSdV_LJoH(9W8HmX>gsekwoOA$Vg`jpXI(;Y4-E zk(Z`!I>0jIbT#Y_F`YN?SO}y$6Iet+2Z(%+*^-&QDxvcNsMLmYe?L_*6zF`E1;VA) zn4j*l)g!ptdt=I-@8JOk!!Xc%+VzLvCk^>-`|h=K=iigN`=i!232N`?1$5?h8Xu-# z`LyvZeN4q&()S>mb&`@;*i|cfcrXJwTX{*9tpdc5<0clD$k0o zrWaPYsZSTp*InEr5r~`FZdzZ*@QCetEBh6nsQPdq(r%27Si(ij~Ong$ysSC%& zw3z$ag_*j@zz48T7Y-(sha6u#S|9%of^Zv5%^vszk3bOOf*`yCL8zY1;mecb1be;Q z6=)Kr(9pe@!EQtWDZoY?*gaNec3I_pwn?{{n6H1*^~y9#b|X^CDc%L@)x(-Z961px6%SEoc@)*r zZ3+a3Zqp5}JAmE3A}Cbe`D6gZz{?bz)WSZIB0_Ktt%3M_8eGHv;;8q{Bsqw<-sT>y zr9>JhvIT)`(^`j<>EWh{OLx9}wwh6%{BM&@R_9bga6aF4cEa`NtaD;jQLxo*^wpB< z;`?YJopl^>PL0bO@&o$CiL8_A&MrScyr^lfM#i_Tjl*8Cy>FK)Ti7+5Aam&3?a&wN zjaf<_Q3lHzUP5?smyZCcqvfJaj78VW>r+?rtB$};3{aGYf}+%Z;5TnislxJj_-qI=bKF4}$odh32g1myRLKf^c1( zV-#R!*JJDBHPkyhL$y|?` zfU5OYnW0k`a|&I6EOQRyoU)?_592n#2iBb8UrS1?6vi;v>CTRFX1B{2^W)0K1W|eW z(HI>5@R-SSW39W9Ooab|>D$J^At1e0pKOf%)$}(O@8G`))tivf?8&O*zJX4s1XuR2 zZ~?2J75fg#Tx`cCIdk!n^ZieJ;>0Aaj7e%+p^k^|zeF8Ir?c2k;M90|#3!pUpPVAX z(MAfFvzbUGJ6c0OhRJe?m3w=B^-+&S-E~6B*fgt$Kg^EhO~til;}w!2yi$w#@AN7# z>ifx9(SzqJDwhhT`Rn>;d|eGro%FPW)sDSGy*`_cZQq@u(w#pNXm#+NQlTLXlexLh zbYr%huk?R2&LXKG`os(2wr|Y*cZ{|cfpk~A+)ppHk~jW0vUkaxq85hVQB8Jv>yz&8 z#BVJm-jbZEE#aUg{NoYh<>K)W(=8$6sx424?q4B%Sjrb~4|HmWUxCy9MtSg37uCpEbxst9 z505gD6HH|WfHm9an*FdltMN*1%tvn4tG&uFUkbt4B$AfL)8Uyxkh01yn^4b97B0)R z((hJ>(hIG{*{@8UK|Ux%qpQiSOSf{}>enswwK1cHM5?KFeZ~pwEn_r#76CsKD9+B3-%;M>FI7N!d^vYc{*qy7bJ*zvl zlO&ZoYG=&J1B~a#-n^|8EbVl;X zCXl5J6GHPGU16`!x(-a%|I5t_IsS~Z-Fw|m-rdbZp)^HIbJW;Ix|Psi1!LtD^)s~xtHJb0bpt)%#?ivXpJk(|q)J1<{6+ z2J1z~)k`_-{m}$@0G?B3Tr+*CJBzf5I%yK@fzIGnu3t7-`@EB+drbXJUP9nM>GchX zceA@KzFw9I>|HWl;mn86GG07Jx%Vt23V2t|KE{Y+Sx776${O*zZQe{o_oaykiWFWn zmD|M<9j5!C#$o>%K4)?~pBaSYTAP#yG~)_b-7KU{lImlNnl)Vz`xyiR#AwnxdZbXc z0~5%rT}@6f*!SKXG3x*B81HHI(G%a|yXNbo>%LMGQk$KwWnF9eG6jFkOq|!X2+fzp zBsX!HZH7_{`&dc1va1)Fltf#;xz&jLzJXBU1ghc(21VDKbb@g4HZym=BhTp*~q7m^ih|0!c{A3U|q0e2bDwCBAQ zc`uS)AW`W0CAUJ^!ZPQ{P8flv!!Kf;`jl^ybtA(hgT2)3(31I9-fhkP+&!XGH5nD? zj#K_kOrFm{iIvT1UA}YMDvfoA1WBocSFbA&Co1s{1mhbxpM;MCYW0cGC&N4}N6&S9;-}wM1f1&)DB{W6!&*yft~kLhLsO(WrS)x_$Qa)rU&UzzoW_ket8! zF(+)5$nT?DEjdwMtTPJUC}~;(s{EFt?cR_6{-{*$U-3f+QW&W0P2TDAhHH?}ZB0he z5uCGEBzly5ql9U#DDiD*GL;|(4cC?9BBkX^cHC0=>f^kOY->)-AiP`nYJ;8rkQ=b! zVGf3<(cY|?8)vYYK;$ydUs)b93D?I~)p5d7h@Vxv)v~ITX6bOW?&VWg5@Ai;4X+;| zZgf&U!Y&`S_m-DS&d2%ZjOO2g;}pHEpzzF0g0#r^vpSiVq(@i@mW6xr>+eKkk{a=c zZ4s~mR1awjAAN@)+`G_~iGR*$Pp>ARyir#CG84KbJZF8s2E{Z!ns~y=*Yn?|^PU4^ zvU<+T$QJFQmP1ds?4gvW^@_g&pU;wJhJ}Ht&x*v9MRyzPiY^i z=uxZ<>aMk-&A0YmOJ)zYTw9J%0ZR4&(eUo!O{0aMviE~T#LEdW>$8IA@WGzh z7{Fv)Ru=P$t17S`YSXdo`V1=}iwMxTo(}ad@?tv0jAG;v&EcUPJ);aMR0&lD0_VTK zhKQRm%~tG$o7A@Ql*8i|7jOLA2OFG`*^IQxer)}D&9UYfkSrzflAW+bzWQ&;|NVlb zfwdf6_K!JbUTMHo&uwmwMSL#}#>4#^Xy-ye{< zW}7FvCGC3+1B*tzP$|?GsxHvECH{Zr2NLR6{6g|Be6-%RDZRlg(lUS0f36jMi0x+C z`a{kdxET;(YBfAhi_Hz%q1~a`DIt2LFB~tO9IO)Ti{q* zhCNZpE6UjOqhbzA>5;a&zf77`eP>QsCrjW5_S%$q3E+(OU_|m@yvqxUQsp_bigc#$ z-N31G@2z%34F`$jQEd|opma9P_&?JIPTDZ}N6FGx0I$!RKf$`*WZf0Wufmr_%~Q044lQ+FunV#$^&pYB=>aR2 z+T=U$=+VNh4nVIrHVTnN)GqI+>sKoEZz|5|<^urYl@S<{P|6t&U+5F2_g%OxX* zLFo6m#0eHTyRJ2Bqj8{^X2Ybm?gqP7(rFX4G5*fIPkvG5^n+)ovT4185zDbwm`p6Q zLV6J1+9oNRhts&wDq6Jujja)D(q`1UT|r^S7{2&WmInZQ;6ZxL2arSb9$Vp!Ar9c0l2zGS;A3EoLSt%Yv`!=kO_BIp;0^A;oyW?7~x2d7lg z5^k3pFh`vOBmcWygpL){$(gYT%`jOQO*yBZh{Ms`EuQcPcP&w|aE-6c18wD}Y z2c*~OaxR$hzYP!EK@iped>|bJp$`Z`1rUUjpf`*Holz=z4%!b8gb&*92mkAb*31-i z$7(?ACJTa)5(FW%45E-61fe;=Xnp~V=KmX@7feOpE3YvKT`Db=50cM3W5`8+k-M%I zysq>X|C%y2T-dRt7L)N=JUk?0jGgns67vO@;6onxI(J^dFqhQ%aowFF40y%fc_|E*Waqdtfk;cgc1&%3-re`#C363HkXjA7TFhU7$)!7(T<)wftmsT5 zK#5>-xdLuMCrHJeAQg`Ql&lFzt(?JQbPtHdcpwNx0ZLX3P_k~2iigcz6Ejwqx|`}q zNls+-X_)RLSs2r0Wo>khBV#)t2MUjhT^iPr(`Lit;CSXMOnrpujuuDUc~*6OFZ2JdBZ~@L7yZGYTpGSa{_e2Jer=_?FX%B~*`X$Rh5h5ZuEH z@l*CFv};VUHa0zm>Bw05TC_mZ_uSssw1SxyU5H|`kEzNoe~7K-cT2oVyt!%~*6MVs zyQ@j8uU|D1%tw7X8!bno!{z*I3a)-CU^=8m?dnrZK$g^bn(8EFVE>x&F>V=RQnDz? z^#&Z=f@uAiIc8J8*9(zQMYWVo5HC{7Tkd5_+hLV<7ZzbcywciOTiQcQIWGH>LK5M5 zSe`hxFz^L~o24eW&9VY-xKeMt(fG7l6^@%XWY5GB%0mXSSfn{@z46o^=7yZa-_!&F ze?V6OPXD85hc*^e#d~Gi+G>rQB!`UBm&kVp7$5gyOzrs6A=v8~jfg+8)YIeMSo7tI zftcgTEF*Mx4qAb9s*NZH3dx~U9#>B5Uq@!G?zLEo=@ryiR9^omR#Dg|>2PxJdV+bn zvbEXwUUjJDyHgVmIkw#}uTUA~{ei2Xs`}O-XPx?qxj#`ycQy*Iw)t$m4fopmX(*lQ zqH*|3_S6DvUuaA?tWj&!T?zM<`OGP{FBt#?zW2iiofBg}rFUtmt{E)1TRf=U6so3? zXIj6ITa%gCNSk~DCRG(m*|e3q?_=AocGi0%b#`NVG9DFi$^4$%=L2@V--1^cZPF9~ zNc9fbc547@Hf^AK?WV!`2iJ3P7-4?;+lUtlWzIytY0?~#=IOF=1-xGGjA%#oWad|l zs98O7xctRhRh?dHO4b-JE7al&;Y`jvOVs5#PRHpFPAGXm=_Cb4x60FNLoYJrcU5J~ zn%qtae_sx=ezdZILn#B!`j0?j$&t-EAl_OuTA5XKt22-@NZ-giynm+ zBk|EXdmp=xRFzbk6EpOF&S`zx0COld*p=vWa|>y@Q<;+4r4m)ra|$+6)dMtTJy2L# zN2EDP%)e2tf3ssX$CJ0y<9=}vb@EG$z$d=sfBc~F07 zso>(jEjF9@UARk=F^D(c@5%i4sr|F#a5z z(c!2zhrWtE8%3t$OUZ-Z!2djG)+DDa@5QU0@k}@@R3IGWX;_paycmGy9QhzguGOxDD81y&6 zXP=Rb5E3y5_cM5kUahhQ0rTxIs9gA`*oxN>q>S}#5Rl>!VuKue3fybF7wZSD*zn2a z%u5}nNuJA~0>Je?y6IT}(=I78N2c0M>35Tzt?o$K-Kl1!G!prJiovPRZ3mu2_ig%QL&~jzZ6KB!dn3k5kcWDbqIih1nXN3z< zi4}a5GE`DgN_KfAo_a3$JBSpOqSY!zDV6bUe5bgSeOs*qS=U28d$5{}1f?ZEkSmpg zYbXac&ZL1L!~##+Q$9dNQ3XbaU7O7MjzGEj;B)xdr-g>j!s5EBa(-mC&E5N`v@=`f zgs288mkZv-ecj%og#D8T@E~B6^1-sGBFZ+f_YD_2Q6uDal&va>Ie6Hqr9h_OU5>5I z=s?DSRj!p82+cl8+~o7;kl;BO?5DmaT7+VOb;hDfGz8YVt%}lNq8#B|VmH zSH?AsH1#248%gucasy6}i$y8v%@ZMS(Q|d5UNww zZBQ({EVI?)AI;WtA_jH$$qu%CSENiYJ8`_&dqGU~xjaC~#LB1e=rXRK&ojTB_rG)e zL1Uv@S;u?N59xsg|ID}B;w%`NivG+D+VV)mj5$Nd|Gcdn`@gcfQr{w)COCn7Np82AgC~nEyt(I|lwVT!!2tI7j$snx?vd4CB7K{ksZHOKs(~1u5}_JY z-IYAa3HFhQAuC4Oen3ByN6!i$;8bX8I<}I$%~!5EQJO9n8-NEKM&1Lzo)}#EM7imVrui*I_C)K2-2-5hj1CyM$a&o zbzR%h$WAut@2IscozNWg?mMhMgQbCjb48RNs zni>=g&=}tI*Sk}8B%svL1}mrx?^; zYr>)8Jx29k+XtRD89Vm0cKd(L{b8Cc5GC@hjiWz4hh&9nyAb99Wx-Zb5an_=WExrI z9cp2HRZ}sfGTRpE`@EZhr$&$)`qaIvVu_KOb&-TKUHeslho)P6&AocN&4(G#h*@kc}~mV_~rLkqTVZW-&~%b!HSC88kxGH_PwN-b7%Hzz6r7J zQt@`6Hq28GJn$k%+bm4aI5Rh(s(q)wq`?i!r)VD50n{}X&$(D$CAHR0P1I0ReBZ5C zR>726S26p(c3d$|ZcYxHeZ$v5@Z#^RP^J?f6E>#J%Fs}+UQb@FVS{9RA$#h@K1ng| zJIYq9WE#XE0#1YTVr;MWo#_QuZL^iHi&Q)6>=7B%cXXDSUMdysLg&TdP>05QZCat} zqIAn)FBYt022Hwqx(ypx>JoROi$3EbJYI>~d|mceJ@QOY4H0{g+N>jAgL1(!^FXcw zTm{P^L3n6r_-_j(3Z@)~&{M+S3@KQph&HRaywTRLN)!&x#Zo+mhcS_fWrbVJ1++fe~HzhB4 zO12UHmx|TspvB1Wjy6$e<=-@i!!tuF^LHkG^#7;ceFCnbD(G=z0TpD`Pz9z9u3?KF z!^)5~0wijvgOVDO<}~sH>*hf$g9qF`H?Y;d z%PIv^P}z&HzI5xBF=ebK8s!6nmjPfmYTjK0ckxYAig*2>Oh>jZNKz#~BHYPQq0fZV zaY`amPIj@NHX8k~52ZFjcH4bV@G={NEPOs8E}2p&7Cc5mcS%lo`-L2kZO46s(y}I( zrx(qw$?7!wV#3H9c0)3s#SNb2GlXre0^9wrWme6Dk!D)Hbs?W+(-P(KKX2`Mf0p?M zA4{bgwhUZjjjV3$b$hE1)){`5oGWqu4J_t#2p-LMu(&oR-05SzVW zt!nb+31j_@=iMXbmHAP~^nBn=BwqG8MI|!MR4nf$r!8Em6`74tH~L3Gv>DA$4GCSn zv`8zZpR%h#ul^{kzIpV=cO`gUB>45pB8r7jg~NLn)yqhd{NY$#jJ>^Mp9T>Vf#j@V zwJ2+bW>pdw%?-SlsGp8XgS{+xupn2`U8Rx@}OulZ2&=dVXQ$>_V5^8p0W=> z!R?)ZnVCnD7@Pm6OH1-VA^A(S#XJ^3{TDKy{X_j#9v|h-#@c|*P=<+qAQO78PY#Xh zh2^y)rmM-AW2e3ddBOhcTT%nB3Ta=WGMv3T$3Ic_&+lb?cjL8&8cU(B3sI#-jOWk< zYg#sg>?QV#u;y2Ncusg=2uL{Ab>l-IHv79uvLi81;;LSym*{qxHK4u74XlR3DO)O2 zA0zHoQ9_^T?5aGj?m0(p892grq!Y zGu4*LBZ+@T9$-{f4Va-9{7+ExAf>=9khlMn2r1hG&2Xw)-tSU8;* zX=1!=jCuj$E3HER&s4|h#HY^ediY*4@6am=?z&0Q zWcv}(=Acl4&dqP6wIsySqaWLaF23jzb=7fa{Ka>t*RDll7xd0~Ew}(-)XmftruxE& z14q+0H2Cem&|TXe#2rrxx~EU=`KEE-bTEUU6mPJx-RFnv*MFS z{N*c76*Cxb;dtcA3sZZ1Iac*tuKDW2TSS#lgC#${khH1SeHnP`CD%Lj6(%Pb)0^}N z3cwaQzpnl;?73|_)FJmJ%CPR~(@9#|a)+Epv7l)C)?prnfs=qLHu6J1>e%I z^Vk}V_gFMUzw!_%hu!0aj!h(a?L1NrT_g}9$i>7hi`VExM6qL4^nPZ=x*%iF_ISoy z6Aw+I$+aw;BF8adP1Jscb6ryr1NnL<(QV_&JqvH~XLM0R4-IY=efkr|Zl$AO>WUf;sp@r}Kna5{u+d zTpFbQt%R|_{DQ(x$ncrfOSqV3MTNyGBzN5yWz{P!%RZj}rk<=PWaw`#rSxOD6#F6f zhW?!w>?vI|=w5&khHy~Z$p&gdb?_Fbf!0jffRbbm0vjOb!99Ffd&+?RH}V?11;>Di zK@SMh8({p`47{&PfP@_J01V+lcZ^wOF<--}0!xseuGFDtSXm=PfS!Sx(BLA?2?Z3T zx|3@|@#*rrZQp5@e9hD7F~pby{MB|>gxo&qlsblV3TU17)d{bnkafM(sBPvXfv{-U zZfPftu4+W*{>$KTezmfpPvON(fQn^siYDWr+HNK}l~>1^4|dY@hP&u*fr2E5&c2J+ zY|m*cmK&m*uj7mfB?1=o4-48pM!&cr(q0oJDT8)fEw=CNYa|^`wZtM?+`g%erV~;2 z;J0KC0RM9m_Z)15H^ys?&6W^I1hq&DBwCoY^U*LH-M>ZeKk6~PJ@sIIVsM92?CO(# z&O&BKE1OvU!}0Noq4RsM+7sK$xJQfswbQ1zRUUYuDBrx}TZrX*(H8LK-6U#AT`l(- z>4$oBtk&mYIuq~V<;l&u24Er$NelLkF8)3yq>TTIP2Xx6lSQ7)>AP}Pkz z7#FwIxj3V9jVd~C?NJNa7;OztjD9jRzA<%PfxXz6GH8fA{mN4PF9>}I#5=5;lr8K61O2s=J8PB|dZDq}%mDs0}uHbfT8(Y;hx!E`n@i10F+yj9&Hxi&tAQGHz+mW@0e?9iX0Fs>ptR~xryDW3m@uwzn++M(@9Gegh|_RVjV^-M9Y{mTkrIRkwD ziEY9b6F${K5NWH(+Mjrq@N&U$;OvA^Mdz4ne{8cHT?X$OA7_igA>4OmXVSOZkWji4$X166SssESiSRUG4pHJ_)sGZd|-Z{k@fo0jTFp>%$@ z@e%WS#V{<d>Umf4r4KCbfUXFS=OQSV=wNg32ns_|vQE=K_>f?RIvTf(`ING#rl zpPv13k}88N`kBZBl=4EB2nFfmYLRHM$$sR|^Z#+({_D$UA4G9fE1FxCjyRvE-edCA z8kzDiE}pJ#3b$qxuGpDhtC09`0_zP&U7{o6>5hpG!X;T$SxTmmg#=$L61CJ3o*q4eA5RxV|k%&fskW}Z}ZHX7bJNar7i?-wH0tRYb}#Vd zUZ{=7U=02u%v<UDZiAY>%_q&(wR}A*f5H zjK`=p0!Js0e|jk1{_p`w#`K6?-2$KzfRj<(E-`CAL{T?*Zxi|i&3p;9Nz5Gb*@2F1~dWamm3Wh5?t>ZFnopQ~P z`Fp{tNIp@gN`2t^`a~yZe@TcHKT^!xs$;Lz}EtRU&w0^u>9?hb&l` z`v;e=bxI;GosbEx>AMlHoj|-^7v;LxliD(8lu{9g;6(C^()(rk-JM*&AF6SRM+j{( zN6$PqNfH<0K8!E;Xv+{vB-oGt^@WVE0) z>H`yt3wa~vAyATyfw!PgOM@b|4{uuc;*@)N-ATrsyZRH(}*4q>NkFhbe z5+dt3ADw#TRqGJ%ibtm_(6)iA`M3I+1TBZALHuQKdOw(U$x-LuGGbvmt|IMs`vv7QA4$p8 z6}_1Ic}I0ig1wpBr=EZZ5hUgVyxtv8YVaKjnWy<|tZ|K3&_Y^5v_h?SBhv(?LVT2$js2R2Na} zI%j;nHBQ0{4s&&H)&vu4x{S&87!${2+@>xB_kw8{SC<4%gP@wS9$AG-vp~u=;mr5Q z+MqQ;SoxE|^`?S)i2)c%-F`Oj}aZ zWjEtnXWBlv6joh#nplJG*5!qxZviSIC2HD_|F*_8tdsW_)?82_@B$4(sTcR zc>qt8x(m)J5SE;+ML+AAAW_nEjg_%A8rJ14Kav;PC>c^fJNE<33rNpNTcMaF>C_m; zBw#TYwkP!mHYZNkm@02AvhkGX)!7|#%`yd3f~oS^=HHNJxzYEhy3Fr`C}q6rwyy+_ zSiD8DT5npX!pcm&tv3=Zvf0s}NtpH^QNwzO#VaGkc)?Ph+9|5hyHs_#Q?^>cZ>?0d zQ8l7xQXk#Sai+hbh(!3YuR^W_fC}=k!#)$hWJ`dRX9fsSoo19I@4(c`ALM}txsc7+ zvlYxk75?c$%GOf3(OPe?OGjnzAp~2I3dBc zCjG<4SKDNY8<2eVjpp>5;~09Y{-208-H^0-Gvf*TIeO2l`{;P@R*ob#v6qWVj?@s@;kc}4({G&ZO3>oW4m5s?FH`RUfAeF z{5U7$kD7->>Txb@e--7o27N~Dqzw|pe`-q}GU4U%PQ|cx0Yie06OUE1dxye)#HTMz z-I%hTR65OSji2H65aw{oyrb%#h8H$s(H%Oi7yWLXhHi2rU$rJlnJB@kigEW#7UIW- zwPdRHARTLAc5LQAGTQG+#C@wg_0qNn=Hqe2(NG)|Z?p2j-L2&InC+-|z|RA=WBAU} zk+3KgP6L+aGJ0H7OJuqx9IL*?r+L>MGG}a#HG_A0AON`{TfVAmaPo_wSs)!kKI%1` zerh3K=e(a`#a(aqO`(s6ccr>O4Flh$X_aSckB5S#{4-#&;nMUd5y}a99EW}Uk23B9 zELIfKk7uCKdCAG}i;cO~`E3cDddKhsdjg(OL0j4qQeK)AdU>bujnQnNJYQ6B9Qu;x z_$A`EkvorO#)lK|W_vh+gwTf*(9?Z5fvU$J_r8eDW;}~IJon2VpNJLh;9h>jLfy}L zVjtBCA1WV2RC!v~dI=cfagWmYzeBG5KRF$-gg#YmS-7wLm8}Bw;IB`a<`f@uA7`f+ zouCXOt!<;foakUYTGoSZn2I&5YxYt$4jz^`DN?fA% zJiEWG`<(CMaP-=8iF8QrC|2u(D%sRwpv7a?VlJT=%(q$874*DVSqM6ve9z=Ff=@a2 zUtuvH8LY#)edS3zA4_1``(DUFtDGvmPL?$2m;NPxFIl@T&vCtQo4P+R;o)}qmdQSI z|Jy+;!Ow1npR(WKY=3}mHXWwH=l>n=?Bhf=_ugTU6FbWu=IbO61ezZ ze+bx(#e9!D%5BIxjE#V7P`B=gauAT^RPRdLo@1~~@fqcZ3j8dEV(Hp77t}5PqCn0-ms}dl~nL1wEYpTUEdR-j05x zz&`bQvsEufRzAZ4p#A(?sc{Pm`4F zyrF0yYnWlLHQiMKNNL(06!qf{w>dl9W-Hsl!)~OoEpYwOkq4sWuxsYi0FCm7WChgY z+ki>hrBv_Oc|Bmf?9dmens?()PcfaqedHEY_o^N5CEC-+Xi>5HRKJXm@a$9G`ODUO zhO-d9X7yUHitCCt`L#$@ur9-=<8RwG#f<#(v)KCWf&P=j@>;YSFX$PiTu^-c6cui; zu7Gr|Sdk`MGnm*4=_BZile$atJnqkVM zXUs0jlldm!xFu*sKvT~yk~cBjb!+uY6t4Q}7>KW*w+ewp}&u3q(B{@kMhoVcj|ZLLmt^kkidW1;J$ z9@cEYbpDX2ZmEfLxPK$BKFS_>N^GquT5H4bWo(Pu7!qm25*eHS7^WmbXXRyraJ%cPj=vxMRcmkJ?*1@y!M#8F z)djbUePE?3iBIBZvhDiyQx90q{;*2gFIMep!Jd9G^oyZO)dh)PxLCLKO>o+e05`08 zc=bxCEUujHToWYqxXlcwNmn57uv5O6t(Jxsl|H28`=qp4WwSvi{y2exrvV`)2?vYy z-7u07a{#@5L8{>6fB@@{>u+!IruE04e2-BLZeN)mEgNF7_J%JCRppf_B#T>E%!~iO zny$m2>i_$jQ7Nl*UHi%w*T}f8nH92gjkxx9uhqwPv(-gJWM*fS>r&(@*C@IAAfubT zF0x8Smr#CheZIf{;Q2VObDq!hdcDq|m_#?5kg;r=SLY2UXkrT~p$w~Pqkh9EmS20| z_`U%f$l4U!iD=ueJUlv#v^ssgeZqB3focW?kPd;9hSQsa`h$g-%PneZ)x}eQY{$|=D9kvV4 z=TnCxA+_ILMQBXhm)9t*r{4+hVJkABt2V0JhvqoW!)s{-<|qi7T+JLms+eBWJ@9nu zy(=CV;H5IO4vl1b(6s?iboVM{WkhrLzBU>nR^h{CCO``)D{w$i!%HWXZ)D;Pw>R$M zJ3~!3nR?55dMDU z)G`r`US62+7^3`cUY0Rm*r+m7-+>-5g=f=&voq+Pd_e)Ygpq4FQMpNq_tnogSuzy! z;o*dYXh}W$G-P{GmJi2B&3f70k48OM(M|Zg%>+NDh!Vos347yLgi<|91&@;sF*Z?a z)NR%l38Z6gImshYTlB4|Et-C%-*<*sQ$+_G0xgMoTFnNj<)nkW$XDp%e*Y0yoZ@vH z=(SFkDO%v|q^~4%LvKlcYytpFEF<>G#@J$ruw^@yeu(T>V+2y_Hvrj^ad70r+J71OkBs%U?POC9< zONvfdW(B%F{=hB%#gV@2xJ4psis0zp`zLv(+no0na?RCoVGm>#Z@41J?}>8@o{UZI8bl zG*}7Hg!2#Qn>{sPPK+9}2F4yj$bY^XKsq_(q6~A|LUjtzlt`oR(eqg73#L8Yi8JAw zuZ_=7Xdkl;nFlA<(PD~QJ0zsz-+zcEF~I#xQ(J(xO;CxPIm3mdxy$vHGu5Vg6Culd z9@2=I!Ht-x^x8!ijto^q!}xnh_>bZb#}sHZryHuaRtamxJP=f&Wy2+|{p#B*700QY zI(GkTjBpB6u@xZv3v z{D*jjgz(!1LU&j^^XJZv5Y1Jq?#&|n@W zD29*0Rxj091{Y)SBE|Q+Y}6i?uW9u22-6o}@id1qT2F)Z*v&tc{PR5SN8!cDUiU{* zbXHenzjk}84Ag!@>HPMz-fr)8@jlF;5;OgsZzu$;Z`}F!5)U=%vz4BWk8bJavJj-t zUy{o(2N*3dg{GLO<3eY#@O6m;tqEY72<7ypl;qclV!`~z^DdG;ds}^J*mgewajEC# zOe)@sFc@b12d3Ln>f8Fdw<=KdiCu{pm?I(ppTjTzy}zDL@~69C{uF_aVdYP9LXPdF zD0+7Ckolgp@}q!eH7PDGfCpX~xW-@OyCV61UP7YyRypJKtmwg~kl*${{EGBohm*c0 zr6IF+cr+$v=Oy>py;OmVbH}gGpO|X1<`!1L6L~z-UDeR2op`B6;t1YdrU6vqsbXLi z)cn|teUFSc^u~FLZ;dot2fU6O>i^6wc}vGU?>h%JKxr4Aq~+|w@0a&2-c*WY<;F!j zb6_tp>b0RupMSo#KWLM&?7|9dZ0CmUmA=STsUH{_llDQ-%0Q2V%0|a8OOhSG>6e!M z8|fUftA>m+$|(!hLoGvZ?4pY-zM!mJ>;nfM3xEc4yL4Q;9odEpfX`){*TQibS zJ(`$4R0#2>({jl|w6IhH0+fe60?5&*EWv}bOxG={DI1Q3yq13rIw@mNsUAMgPjbQ5~t zB&JjGNuHa4xMsN0R*bQ<$of?D}6PrHHRORR`bV#7;Z|h|a3!^R9FPzAEE`46{>v6%IwCS} zavB9iQVeStSRN1tp-f>#?q&v=?OB9vof=zd)P8P_Sv#ZXg6WOyQfJXkB~_SXAdEm$ zZ4)IAW9zJ^1?`aI;>%+uYuFuNf2laW*n%&Zj_nH$x+i^_5&h2sSbzy3RX7#E0?t#R z2LKgYuVSGiYX1SCSnFZ9`@a-w$*`O>Fs_hiEtT2jV+Ujq$g>3}+YDG<{Ww##t?J~` z;5TjWE4?9v8qY0P%2ZGX_Tt&!q%1nR9$oSO*Mfv1bKdOTv$LlF0^fSn0|1aP(cn`6 zI(oKdIe5WRhb>{2=n1poRD}&e06-@Z-~kNds#>N$9?f!u2QQKUEm$iUa00Y|HFuu` zgrV5H84Tt1we+tK02Tn1Xwq3Z06xI~M7|{sEOTTBh>=m1ziCTsND-3Wg@cw<3LWEp zXmn};6$5ord?5nXH~CmLJm*DhNI&Mt+P|~giN3E$WYwC)hA!R2jJ>~q4xQbIx^UQd z{x|tk1JOl3qQAonaV7cdxG?sJ9MRjn<+*~pTZ$tSFpzS#T->4*0N?>F_YQgcudSDlb4w$Rrw}h0i|C$>i%BjC$1`C9gj~f zkOT)?wa1k)WUO+KGx+4!Z)rZ_u@8u*^6Mugm;pX;k@T#OrSin+Lc6SzvVlCQ*sm4V zXRqgFnB5T`_%UotH&IY$FzVCh^%E-+C=l~{I1i;CcY;FK5z+p z#7!=fS%Q1NjcNWcT+?bl_^8lUz02Z;v6lZ$Z)ZRY?znxh@6DFJG?V$f_5hPYJT?Zz zAT`u5H<~AC5louBX|UG*-O(n`fGLAX0-kV5W7|g28^v$CsAAAk@(UoTLF|ER?D*Ec>qq#bl9`!6CnRyT+pMkgrnz&;6n_Ef&A? z>^A6dma(v=;7VClF++J9%a2U1G$W3-h@{e>h><0#5q7zKTr6h^S zysPLxMGS-BbvacslLTzrvNjyadViG!f7kQp6o4m{c(?SF31Nqw`eI;(_H8*o7q)XU zaq)|9?Nu_~wb_Ty0>y0ZHM}7J6%zpqgayBiBCf4|fsoR%wvf47e0hCi+okhU=wqws z@!O>HKc0JFO4ICU0!w#wFH^67sfWs#sL6p{l{9)0)K@|ARI#}s@_w&y4t9cnFbcOK zdTIeO0WC=YJ$*LG$#ZG}wvG4Mmo$EYyWdDt6XLA@x;QS0JErL%O$OPvA1VRlvNMWNn!<0 zPJ;04!ytK^RQknT6UnT&ab)F|LL$A&7LP*cIr4LrB}H#Q3y{m{d@B0v)mLRByNcV^YC$8#a=#8i zp7US4Y<2_fzfy^AB+>&_EFC}<3nx%aRti)$e+Pcg&j3X%?OX)MGN6{M6{u|11!~E1 zfWl_A-;(W`?k=1V@?rko49B!zMv>3&=RF9zHv$W zRoXPEARM2Bm9KG9j)l`pGLR8~;l4>{TzHEDNfFIz5?*^D5as2EErjdPT(I?UrR#nWnQ5Ffh$vzrAp=gpqVY03| zO-Syt)GQ;L01G&-exK%8xQ=AK_p^|_)AsIysf@qkM~cSoW-mSzm3L<*6l`T0y4>by zf=`O$x>_6NKYpL!7}Zr*|L-K1S%@%qe7t9qTUb+klOIDgC@lU_-mSY^yp8}B7y2nY zQ7@;(M2|a6l01mf6*Lpqf{*JXY-;@TLOQPLl7Au_NaJ=4WqCyUBd=0{&%~wh0Yg!K zWQ2_Ts|9#t&DgG{E07O}F=%l^cjhcjb|fC_hrQv7Bu!--iYBy^0Wp&IFt)I(5 z^Nq!GpKIHDrE@a^1^L{P6qvZA+C&!&mtQG;oVod6Qy7H>xtzHvzyVpV=KuOBZ^)SS zCBJyb!PW(_`-GkZw@}-wT27DFq36#kJeAo3e4vKm5pm*DaHnN?AWPdXS?Q-}46nP& zPjDgtV3Nd}Zf!|@W_{QbOOV}_WH~aGt6oYMxb&8A5w&B)so&W|>ZvvM!O?q*dva%} zoE#+V2g3A}r#(#>FRA1GWbB*cKimKFyNY`{=MM;A!U+5fpWJn$n`CqPYM-n7678DY zyzHz6Gkq)&O|P@89@TN?&Q~#Zt(Pn|Fe})hsi4;`n@}?%ufNjtIfBd|)Nc2pUE@+B z$bjo!6}S+>&YH`-6IpBP^@2$)(|+Z@lx&g zHeA*!?u~%mb!&K2A;W;#rT9R+re^^A-6JY7gr`C-03milrh{UNZVz2B{_QBQl@ucK zDP}{#_`zp4^-ocs#rJe&k8*rI)Gdh^)EsQn?~C%A=8h1!zw*$%^9JA2o-VxoeU31D z0X7=F!ldbXgo@y2FCs}DsguZxMK0A%LrPUG%N+_;BlWh`pFFK zC5#MC1{z99=_G81%t$M&Kz|Fw1R_vv$D3Z3P0BJ?y<72^ORPuWbV1H`A#z_(sn4WO z9gTKDrZoZ&>$-Mg9C4H*Is9fTBy4(U8;AlPhbcS>{o$tQGkP^a!O~Kx<&FDQ!su1U zGO=4693q)HYLY1jm0^%^4ROMsp%88A(C*h+bJZ)?6jzG%i0&7fR7+UF2KwEz|(j?d<;z@p#dbC{!?*uH~pHN~~3iT>G$ zfXL4M&6{-^Twm1GG!=1K=8yY(e?mf1A?=o68W8j(2XUuwcZbd$ClFEp7r@8egh@I( zh^pFg9C-GOOc{(u0?!c)D=*_SEIn%KZc4K#B`4JHq?B@U;p z0Uj8!XjC^NoWRNwv%(DszZzL`h4}R+CrDE%w|riJBgKVRk_1W$sCkV31?n4gn!vrF z8CV}4Jgj}el2Cw3l6u4Ev2r}{WUmiNuREOC-nrvHlNs?tK1!pda11S z1G9eCS)QlP)jtjKd(-b}Vt^&DUX4NauzFy~-gnUy9iiE7zpUndu;SN=JN!ouYf;jbi?ZEFf5dg3iltJ%& zEBWR+KmLJW=*s>ABAXQm_TKbc5x}(G2{X<-SEf zZC%KPJKpJs9aolmzkSC}Pa*xZXj|sO6n(>VqK;&Xq!BYh2cZV%)DkeZUafBSPkk~! zZkY3my{!%%;)xP4** z*Q+W7E9P1j8>5?mSr*I`hoF3SknN&d65Y(X)h}5`dUX@3v&qqZDNtlUYBSIdMV%G?>T>t^p{m2#w*yVIzUK8!vi!A=5wNmArQupF1({d$eM*j4|R*XdLO;~ZT zGfEm-ej|NlrE(0nK|NL~ZZ#iuPu2Ua%k9d_4=ezzDS}`oVd1=%dpS~(%|6ckTTR{ZL%l*%k-26kvt?6M`+dIC>1|g5w*a)$e2!VlsF^IA>7A zSLJJ2W%bUWAV?P`oXHq?*pZ+uUaTXI`c-BTn*6Od|Ff}8lp8zsjrsYhdnN&A#3sZM z<>W^n9WWz6T`$6LEGyG_>MO+reoP=^-)xGM>Q2yTegN+0*VKU~6BJAPZN5d)f|EgQ z$uAu$0>Mfa9)u^#$}C)@_wuav4`?JFz6gvwJ%Va$U^|%NW!p3VJka@@l>YCjHrmaC fPZ-FEPJrwA6X3%F2_z&lU$U`ha6+1vB5nT%wxAY- delta 41971 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 temp) + { + value -= temp; + sqrti |= bit; + } + } while (bit >>= 1); + return sqrti; + } + void UI_DisplayAudioBar(void) { if (gSetting_mic_bar) { const unsigned int line = 3; const unsigned int lcd_width = sizeof(gFrameBuffer[line]) - 2; - + #if 1 // TX audio level - + if (gCurrentFunction != FUNCTION_TRANSMIT) return; - - // TODO: logify this to make the bar visible with the mostly small value - - - const uint16_t voice_amp = BK4819_GetVoiceAmplitudeOut(); // 15:0 - const unsigned int max = 32767; - const unsigned int level = (((uint32_t)voice_amp * lcd_width) + (max / 2)) / max; // with rounding + + const unsigned int voice_amp = BK4819_GetVoiceAmplitudeOut(); // 15:0 + +// const unsigned int max = 65535; +// const unsigned int level = ((voice_amp * lcd_width) + (max / 2)) / max; // with rounding +// const unsigned int len = (level <= lcd_width) ? level : lcd_width; + + // make non-linear to make more sensitive at low values + const unsigned int level = voice_amp * 8; + const unsigned int sqrt_level = sqrt16((level < 65535) ? level : 65535); + const unsigned int len = (sqrt_level <= lcd_width) ? sqrt_level : lcd_width; + #else // TX/RX AF input level (dB) - const uint8_t af_tx_rx = BK4819_GetAfTxRx(); // 6:0 - const unsigned int max = 63; - const unsigned int level = (((uint16_t)af_tx_rx * lcd_width) + (max / 2)) / max; // with rounding + + const uint8_t af_tx_rx = BK4819_GetAfTxRx(); // 6:0 + const unsigned int max = 63; + const unsigned int level = (((uint16_t)af_tx_rx * lcd_width) + (max / 2)) / max; // with rounding + const unsigned int len = (level <= lcd_width) ? level : lcd_width; + #endif - - const unsigned int len = (level <= lcd_width) ? level : lcd_width; + uint8_t *pLine = gFrameBuffer[line]; memset(pLine, 0, lcd_width); #if 0 @@ -72,7 +96,8 @@ for (unsigned int i = 0; i < len; i += 2) pLine[i] = 0x3e; #endif - + + if (gCurrentFunction == FUNCTION_TRANSMIT) ST7565_BlitFullScreen(); } @@ -343,7 +368,7 @@ void UI_DisplayMain(void) #else UI_PrintStringSmall(String, 32 + 4, 0, Line); #endif - + // show the channel frequency below the channel number/name sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); UI_PrintStringSmall(String, 32 + 4, 0, Line + 1); @@ -503,7 +528,7 @@ void UI_DisplayMain(void) case FUNCTION_BAND_SCOPE: case FUNCTION_POWER_SAVE: break; - + case FUNCTION_FOREGROUND: break; @@ -520,9 +545,10 @@ void UI_DisplayMain(void) { #ifdef ENABLE_AUDIO_BAR UI_DisplayAudioBar(); - - if (!gSetting_mic_bar) + +// if (!gSetting_mic_bar) #endif + if (gCurrentFunction != FUNCTION_TRANSMIT) { if (gSetting_live_DTMF_decoder && gDTMF_ReceivedSaved[0] >= 32) { // show live DTMF decode