From b1d891c21e9ac5f16ac79c426db67ec9774514fc Mon Sep 17 00:00:00 2001 From: pvvx Date: Fri, 28 Apr 2017 05:00:05 +0300 Subject: [PATCH] update --- .../component/common/api/at_cmd/atcmd_sys.c | 8 +- .../component/common/api/lwip_netconf.c | 6 +- .../component/common/api/wifi/wifi_conf.c | 370 +- .../component/common/api/wifi/wifi_conf.h | 17 +- .../component/common/api/wifi/wifi_util.c | 170 +- .../component/common/api/wifi/wifi_util.h | 1 + RTL00_SDKV35a/component/common/api/wifi_api.c | 434 +- RTL00_SDKV35a/component/common/api/wifi_api.h | 88 +- .../component/common/api/wifi_api_scan.c | 245 +- .../drivers/wlan/realtek/include/hal_intf.h | 2 +- .../wlan/realtek/include/rtw_mlme_ext.h | 16 +- .../drivers/wlan/realtek/include/wifi_lib.h | 40 +- .../wlan/realtek/include/wifi_structures.h | 2 +- .../wlan/realtek/include/wlan_bssdef.h | 2 +- .../drivers/wlan/realtek/include/wlan_lib.h | 2 +- .../drivers/wlan/realtek/src/osdep/wireless.h | 38 +- .../component/common/mbed/hal_ext/flash_eep.h | 6 +- .../component/common/network/dhcp/dhcps.c | 2 +- .../component/os/freertos/freertos_service.c | 2 + build/bin/ota.bin | Bin 300372 -> 300848 bytes build/bin/ram_2.bin | Bin 300336 -> 300812 bytes build/bin/ram_2.ns.bin | Bin 300352 -> 300828 bytes build/bin/ram_2.p.bin | Bin 300352 -> 300828 bytes build/bin/ram_all.bin | Bin 345424 -> 345900 bytes build/obj/build.nmap | 4579 +++++++++-------- flasher.mk | 2 +- project/inc/user_config.h | 9 + project/inc/wifi_user_set.h | 73 +- project/src/user/wifi_console.c | 187 +- sdkset.mk | 3 +- 30 files changed, 3219 insertions(+), 3085 deletions(-) create mode 100644 project/inc/user_config.h diff --git a/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_sys.c b/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_sys.c index 20b7532..8c5959f 100644 --- a/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_sys.c +++ b/RTL00_SDKV35a/component/common/api/at_cmd/atcmd_sys.c @@ -1310,7 +1310,13 @@ void fATST(void *arg) { } #if 0 -#include "wlan_lib.h" +#if 1 +#include "drv_types.h" // or #include "wlan_lib.h" +#else +#include "wifi_constants.h" +#include "wifi_structures.h" +#include "wlan_lib.h" // or #include "drv_types.h" +#endif #include "hal_com_reg.h" // extern Rltk_wlan_t rltk_wlan_info[2]; void fATXT(void *arg) diff --git a/RTL00_SDKV35a/component/common/api/lwip_netconf.c b/RTL00_SDKV35a/component/common/api/lwip_netconf.c index 4c368ba..903bd59 100644 --- a/RTL00_SDKV35a/component/common/api/lwip_netconf.c +++ b/RTL00_SDKV35a/component/common/api/lwip_netconf.c @@ -103,8 +103,8 @@ struct netif xnetif[NET_IF_NUM]; /* network interface structure */ * @retval None */ #if CONFIG_WLAN -extern int error_flag; -extern rtw_mode_t wifi_mode; +extern char error_flag; +extern unsigned char wifi_mode; // rtw_mode_t #endif int lwip_init_done = 0; @@ -204,7 +204,7 @@ uint8_t LwIP_DHCP(uint8_t idx, uint8_t dhcp_state) { } for (;;) { - //printf("\n\r ========DHCP_state:%d============\n\r",DHCP_state); + //info_printf("\n\r ========DHCP_state:%d============\n\r",DHCP_state); switch (DHCP_state) { case DHCP_START: { #if CONFIG_WLAN diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c index 40ebfa7..b0d16ad 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.c @@ -1,16 +1,20 @@ //----------------------------------------------------------------------------// +#include +#include #include "FreeRTOS.h" #include "task.h" #include "semphr.h" -#include -#include "main.h" -#include #include #include -#include #include -#include -#include "tcpip.h" +#if 1 +#include "drv_types.h" // or #include "wlan_lib.h" +#else +#include "wifi_constants.h" +#include "wifi_structures.h" +//#include "wlan_lib.h" // or #include "drv_types.h" +#endif +#include #include #if CONFIG_EXAMPLE_WLAN_FAST_CONNECT @@ -23,7 +27,6 @@ extern int inic_start(void); extern int inic_stop(void); #endif -#include "wlan_lib.h" #if CONFIG_DEBUG_LOG > 0 #undef printf @@ -40,8 +43,6 @@ extern int inic_stop(void); /****************************************************** * Constants ******************************************************/ -#define SCAN_USE_SEMAPHORE 0 - #define RTW_JOIN_TIMEOUT 15000 #define JOIN_ASSOCIATED (uint32_t)(1 << 0) @@ -69,12 +70,11 @@ extern struct netif xnetif[NET_IF_NUM]; /****************************************************** * Variables Definitions ******************************************************/ -internal_scan_handler_t scan_result_handler_ptr = { - 0, 0, 0, RTW_FALSE, 0, 0, 0, 0, 0 }; +internal_scan_handler_t scan_result_handler_ptr; static internal_join_result_t* join_user_data; -rtw_mode_t wifi_mode = RTW_MODE_NONE; +unsigned char wifi_mode = RTW_MODE_NONE; // rtw_mode_t //extern rtw_mode_t wifi_mode; -int error_flag = RTW_UNKNOWN; +char error_flag = RTW_UNKNOWN; uint32_t rtw_join_status; #if ATCMD_VER == ATVER_2 extern unsigned char dhcp_mode_sta; @@ -210,68 +210,9 @@ static int wifi_connect_local(rtw_network_info_t *pWifi) { pWifi->security_type, __func__); break; } -#if DD_WIFI_CONN // дублирование с wifi_connect_bssid_local() - if(ret == 0) - ret = wext_set_ssid(WLAN0_NAME, pWifi->ssid.val, pWifi->ssid.len); -#endif return ret; } -#if DD_WIFI_CONN // дублирование с wifi_connect_bssid_local() -static int wifi_connect_bssid_local(rtw_network_info_t *pWifi) -{ - int ret = 0; - u8 bssid[12] = {0}; - - if(is_promisc_enabled()) - promisc_set(0, NULL, 0); - - if(!pWifi) return -1; - switch(pWifi->security_type) { - case RTW_SECURITY_OPEN: - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_NONE, NULL, 0, 0, 0, 0, NULL, 0); - break; - case RTW_SECURITY_WEP_PSK: - case RTW_SECURITY_WEP_SHARED: - ret = wext_set_auth_param(WLAN0_NAME, IW_AUTH_80211_AUTH_ALG, IW_AUTH_ALG_SHARED_KEY); - if(ret == 0) - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_WEP, NULL, pWifi->key_id, 1 /* set tx key */, 0, 0, pWifi->password, pWifi->password_len); - break; - case RTW_SECURITY_WPA_TKIP_PSK: - case RTW_SECURITY_WPA2_TKIP_PSK: - ret = wext_set_auth_param(WLAN0_NAME, IW_AUTH_80211_AUTH_ALG, IW_AUTH_ALG_OPEN_SYSTEM); - if(ret == 0) - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_TKIP, NULL, 0, 0, 0, 0, NULL, 0); - if(ret == 0) - ret = wext_set_passphrase(WLAN0_NAME, pWifi->password, pWifi->password_len); - break; - case RTW_SECURITY_WPA_AES_PSK: - case RTW_SECURITY_WPA2_AES_PSK: - case RTW_SECURITY_WPA2_MIXED_PSK: - ret = wext_set_auth_param(WLAN0_NAME, IW_AUTH_80211_AUTH_ALG, IW_AUTH_ALG_OPEN_SYSTEM); - if(ret == 0) - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_CCMP, NULL, 0, 0, 0, 0, NULL, 0); - if(ret == 0) - ret = wext_set_passphrase(WLAN0_NAME, pWifi->password, pWifi->password_len); - break; - default: - ret = -1; - printf("WIFICONF: security type(0x%x) is not supported.\n", pWifi->security_type); - break; - } - if(ret == 0) { - memcpy(bssid, pWifi->bssid.octet, ETH_ALEN); - if(pWifi->ssid.len) { - bssid[ETH_ALEN] = '#'; - bssid[ETH_ALEN + 1] = '@'; - memcpy(bssid + ETH_ALEN + 2, &pWifi, sizeof(pWifi)); - } - ret = wext_set_bssid(WLAN0_NAME, bssid); - } - return ret; -} -#endif - void wifi_rx_beacon_hdl(char* buf, int buf_len, int flags, void* userdata) { //printf("Beacon!\n"); } @@ -563,9 +504,7 @@ int wifi_connect( wifi_reg_event_handler(WIFI_EVENT_DISCONNECT, wifi_disconn_hdl, NULL); wifi_reg_event_handler(WIFI_EVENT_FOURWAY_HANDSHAKE_DONE, wifi_handshake_done_hdl, NULL); -#if DD_WIFI_CONN // дублирование с wifi_connect_bssid_local() - wifi_connect_local(&join_result->network_info); -#else + rtw_network_info_t *pWifi = &join_result->network_info; if (wifi_connect_local(pWifi) == 0) { @@ -593,7 +532,6 @@ int wifi_connect( join_result->network_info.ssid.len); }; } -#endif join_user_data = join_result; if (semaphore == NULL) { @@ -618,7 +556,7 @@ int wifi_connect( #endif if (rtw_down_timeout_sema(&join_result->join_sema, RTW_JOIN_TIMEOUT) == RTW_FALSE) { - printf("RTW API: Join bss timeout\n"); + warning_printf("RTW API: Join bss timeout\n"); if (password_len) { rtw_free(join_result->network_info.password); } @@ -652,137 +590,6 @@ int wifi_connect( wifi_handshake_done_hdl); return result; } -/* - -int wifi_connect_bssid( - unsigned char bssid[ETH_ALEN], - char *ssid, - rtw_security_t security_type, - char *password, - int bssid_len, - int ssid_len, - int password_len, - int key_id, - void *semaphore) { - xSemaphoreHandle join_semaphore; - rtw_result_t result = RTW_SUCCESS; - - if ((rtw_join_status & JOIN_SIMPLE_CONFIG ) - || (rtw_join_status & JOIN_AIRKISS )) { - return RTW_ERROR; - } - - rtw_join_status = 0; //clear for last connect status - error_flag = RTW_UNKNOWN; //clear for last connect status - internal_join_result_t *join_result = - (internal_join_result_t *) rtw_zmalloc( - sizeof(internal_join_result_t)); - if (!join_result) { - return RTW_NOMEM; - } - if (ssid_len && ssid) { - join_result->network_info.ssid.len = ssid_len > 32 ? 32 : ssid_len; - rtw_memcpy(join_result->network_info.ssid.val, ssid, ssid_len); - } - rtw_memcpy(join_result->network_info.bssid.octet, bssid, bssid_len); - - if ((((password_len > RTW_MAX_PSK_LEN) || (password_len < RTW_MIN_PSK_LEN)) - && ((security_type == RTW_SECURITY_WPA_TKIP_PSK) - || (security_type == RTW_SECURITY_WPA_AES_PSK) - || (security_type == RTW_SECURITY_WPA2_AES_PSK) - || (security_type == RTW_SECURITY_WPA2_TKIP_PSK) - || (security_type == RTW_SECURITY_WPA2_MIXED_PSK))) - || (((password_len != 5) && (password_len != 13)) - && ((security_type == RTW_SECURITY_WEP_PSK) - || (security_type == RTW_SECURITY_WEP_SHARED)))) { - return RTW_INVALID_KEY; - } - join_result->network_info.password_len = password_len; - if (password_len) { - // add \0 to the end - join_result->network_info.password = rtw_zmalloc(password_len + 1); - if (!join_result->network_info.password) { - return RTW_NOMEM; - } - rtw_memcpy(join_result->network_info.password, password, password_len); - } - - join_result->network_info.security_type = security_type; - join_result->network_info.key_id = key_id; - - if (semaphore == NULL) { - rtw_init_sema(&join_result->join_sema, 0); - if (!join_result->join_sema) { - return RTW_NORESOURCE; - } - join_semaphore = join_result->join_sema; - } else { - join_result->join_sema = semaphore; - } - wifi_reg_event_handler(WIFI_EVENT_NO_NETWORK, wifi_no_network_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_CONNECT, wifi_connected_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_DISCONNECT, wifi_disconn_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_FOURWAY_HANDSHAKE_DONE, - wifi_handshake_done_hdl, NULL); -#if DD_WIFI_CONN // дублирование с wifi_connect_bssid_local() - wifi_connect_bssid_local(&join_result->network_info); -#else - rtw_network_info_t *pWifi = &join_result->network_info; - if (wifi_connect_local(pWifi) == 0) { - struct { - u8 bssid[ETH_ALEN + 2]; - void * p; - } bs = { 0 }; - memcpy(bs.bssid, pWifi->bssid.octet, ETH_ALEN); - if (pWifi->ssid.len) { - bs.bssid[ETH_ALEN] = '#'; - bs.bssid[ETH_ALEN + 1] = '@'; - bs.p = pWifi; - } - wext_set_bssid(WLAN0_NAME, bssid); - } -#endif - - join_user_data = join_result; - - if (semaphore == NULL) { - if (rtw_down_timeout_sema(&join_result->join_sema, RTW_JOIN_TIMEOUT) - == RTW_FALSE) { - printf("RTW API: Join bss timeout\n"); - if (password_len) { - rtw_free(join_result->network_info.password); - } - rtw_free((u8*)join_result); - rtw_free_sema(&join_semaphore); - result = RTW_TIMEOUT; - goto error; - } else { - rtw_free_sema(&join_semaphore); - if (join_result->network_info.password_len) { - rtw_free(join_result->network_info.password); - } - rtw_free((u8*)join_result); - if (wifi_is_connected_to_ap() != RTW_SUCCESS) { - result = RTW_ERROR; - goto error; - } - } - } - - result = RTW_SUCCESS; - -#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT - restore_wifi_info_to_flash(); -#endif - - error: join_user_data = NULL; - wifi_unreg_event_handler(WIFI_EVENT_CONNECT, wifi_connected_hdl); - wifi_unreg_event_handler(WIFI_EVENT_NO_NETWORK, wifi_no_network_hdl); - wifi_unreg_event_handler(WIFI_EVENT_FOURWAY_HANDSHAKE_DONE, - wifi_handshake_done_hdl); - return result; -} -*/ int wifi_disconnect(void) { int ret = 0; @@ -995,14 +802,13 @@ int wifi_rf_off(void) { //----------------------------------------------------------------------------// int wifi_on(rtw_mode_t mode) { int ret = 0; -//pvvx int timeout = 20; // 20 sec ?! int timeout = wifi_test_timeout_ms / wifi_test_timeout_step_ms; int idx; int devnum = 1; static int event_init = 0; if (rltk_wlan_running(WLAN0_IDX)) { - printf("WIFI is already running\n"); + warning_printf("WIFI is already running\n"); return 0; } @@ -1057,24 +863,25 @@ int wifi_on(rtw_mode_t mode) { int wifi_off(void) { // int ret = 0; -//pvvx int timeout = 20; // 20 sec ?! + uint32 timeout = xTaskGetTickCount(); - if ((rltk_wlan_running(WLAN0_IDX) == 0) - && (rltk_wlan_running(WLAN1_IDX) == 0)) { - info_printf("WIFI is not running\n"); - return 0; - } #if CONFIG_LWIP_LAYER dhcps_deinit(); LwIP_DHCP(0, DHCP_STOP); LwIP_DHCP(1, DHCP_STOP); #endif + if ((rltk_wlan_running(WLAN0_IDX) == 0) + && (rltk_wlan_running(WLAN1_IDX) == 0)) { + info_printf("WIFI is not running\n"); + return 0; + } + info_printf("Deinitializing WIFI ...\n"); + #if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - if ((wifi_mode == RTW_MODE_AP) || (wifi_mode == RTW_MODE_STA_AP)) + // @todo wpas_wps_deinit(); #endif - info_printf("Deinitializing WIFI ...\n"); rltk_wlan_deinit(); while (1) { @@ -1119,20 +926,24 @@ int wifi_get_lps_dtim(unsigned char *dtim) { return wext_get_lps_dtim(WLAN0_NAME, dtim); } //----------------------------------------------------------------------------// +/* static void wifi_ap_sta_assoc_hdl(char* buf, int buf_len, int flags, void* userdata) { //USER TODO - + debug_printf("ap_sta_assoc\n"); } static void wifi_ap_sta_disassoc_hdl(char* buf, int buf_len, int flags, void* userdata) { //USER TODO + debug_printf("ap_sta_disassoc\n"); } +*/ int wifi_get_last_error(void) { return error_flag; } + #if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP int wpas_wps_init(const char* ifname); #endif @@ -1159,23 +970,22 @@ int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, int if (is_promisc_enabled()) promisc_set(0, NULL, 0); - +/* + wifi_unreg_event_handler(WIFI_EVENT_STA_ASSOC, wifi_ap_sta_assoc_hdl); wifi_reg_event_handler(WIFI_EVENT_STA_ASSOC, wifi_ap_sta_assoc_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_STA_DISASSOC, wifi_ap_sta_disassoc_hdl, - NULL); - + wifi_unreg_event_handler(WIFI_EVENT_STA_DISASSOC, wifi_ap_sta_disassoc_hdl); + wifi_reg_event_handler(WIFI_EVENT_STA_DISASSOC, wifi_ap_sta_disassoc_hdl, NULL); +*/ ret = wext_set_mode(ifname, IW_MODE_MASTER); if (ret < 0) goto exit; -// if(!channel) channel = 1; + if(channel < 1 || channel > 14) channel = 1; ret = wext_set_channel(ifname, channel); //Set channel before starting ap if (ret < 0) goto exit; - switch (security_type) { - case RTW_SECURITY_OPEN: - break; - case RTW_SECURITY_WPA2_AES_PSK: + if(security_type != RTW_SECURITY_OPEN) { // case RTW_SECURITY_WPA2_AES_PSK: + security_type = RTW_SECURITY_WPA2_AES_PSK; ret = wext_set_auth_param(ifname, IW_AUTH_80211_AUTH_ALG, IW_AUTH_ALG_OPEN_SYSTEM); if (ret == 0) @@ -1183,11 +993,6 @@ int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, int NULL, 0); if (ret == 0) ret = wext_set_passphrase(ifname, (u8*) password, password_len); - break; - default: - ret = -1; - printf("WIFICONF: security type is not supported\n"); - break; } if (ret < 0) goto exit; @@ -1204,61 +1009,6 @@ int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, int #endif exit: return ret; } -/* -int wifi_start_ap_with_hidden_ssid(char *ssid, rtw_security_t security_type, - char *password, int ssid_len, int password_len, int channel) { - const char *ifname = WLAN0_NAME; - int ret = 0; - - if (wifi_mode == RTW_MODE_STA_AP) { - ifname = WLAN1_NAME; - } - - if (is_promisc_enabled()) - promisc_set(0, NULL, 0); - - wifi_reg_event_handler(WIFI_EVENT_STA_ASSOC, wifi_ap_sta_assoc_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_STA_DISASSOC, wifi_ap_sta_disassoc_hdl, - NULL); - - ret = wext_set_mode(ifname, IW_MODE_MASTER); - if (ret < 0) - goto exit; - ret = wext_set_channel(ifname, channel); //Set channel before starting ap - if (ret < 0) - goto exit; - - switch (security_type) { - case RTW_SECURITY_OPEN: - break; - case RTW_SECURITY_WPA2_AES_PSK: - ret = wext_set_auth_param(ifname, IW_AUTH_80211_AUTH_ALG, - IW_AUTH_ALG_OPEN_SYSTEM); - if (ret == 0) - ret = wext_set_key_ext(ifname, IW_ENCODE_ALG_CCMP, NULL, 0, 0, 0, 0, - NULL, 0); - if (ret == 0) - ret = wext_set_passphrase(ifname, (u8*) password, password_len); - break; - default: - ret = -1; - printf("WIFICONF: security type is not supported\n"); - break; - } - if (ret < 0) - goto exit; - - ret = set_hidden_ssid(ifname, 1); - if (ret < 0) - goto exit; - - ret = wext_set_ap_ssid(ifname, (u8*) ssid, ssid_len); -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - wpas_wps_init(ifname); -#endif - exit: return ret; -} -*/ void wifi_scan_each_report_hdl(char* buf, int buf_len, int flags, void* userdata) { int i = 0; @@ -1484,9 +1234,9 @@ int wifi_scan_networks(rtw_scan_result_handler_t results_handler, void* user_dat #if SCAN_USE_SEMAPHORE rtw_bool_t result; if(NULL == scan_result_handler_ptr.scan_semaphore) - rtw_init_sema(&scan_result_handler_ptr.scan_semaphore, 1); + rtw_init_sema(&scan_result_handler_ptr.scan_semaphore, 1); - scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); +// scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); /* Initialise the semaphore that will prevent simultaneous access - cannot be a mutex, since * we don't want to allow the same thread to start a new scan */ result = (rtw_bool_t)rtw_down_timeout_sema(&scan_result_handler_ptr.scan_semaphore, SCAN_LONGEST_WAIT_TIME); @@ -1504,12 +1254,11 @@ int wifi_scan_networks(rtw_scan_result_handler_t results_handler, void* user_dat count--; } if (count == 0) { - printf("[%d]WiFi: Scan is running. Wait 2s timeout.\n", - rtw_get_current_time()); + printf("WiFi: Scan is running. Wait 2s timeout.\n"); return RTW_TIMEOUT; } } - scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); +// scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); scan_result_handler_ptr.scan_running = 1; #endif @@ -1997,38 +1746,3 @@ int wifi_set_ch_deauth(__u8 enable) { //----------------------------------------------------------------------------// #endif //#if CONFIG_WLAN -#if CONFIG_DEBUG_LOG > 4 -extern void dump_bytes(uint32 addr, int size); - -static void test_rtk() { - printf("rltk_wlan_info = %p\n", &rltk_wlan_info); -// dump_bytes((u32)&rltk_wlan_info, 16); - _adapter *ad = rltk_wlan_info[1].dev; - printf("adapter = %p\n", ad); -// dump_bytes((u32)ad, 16); -// printf("bSurpriseRemoved [%p] = %d, +%d\n", &ad->bSurpriseRemoved, ad->bSurpriseRemoved, (u32)&ad->bSurpriseRemoved - (u32)ad); -// dump_bytes((u32)&ad->bSurpriseRemoved, 32); - printf("mlmepriv +%d, mlmeextpriv +%d, cmdpriv +d%\n", - (u32)(&ad->mlmepriv) - (u32)(ad), - (u32)(&ad->mlmeextpriv) - (u32)(ad), - (u32)(&ad->cmdpriv) - (u32)(ad)); - printf("xmitpriv +%d, recvpriv +%d, stapriv +%d\n", - (u32)(&ad->xmitpriv) - (u32)(ad), (u32)(&ad->recvpriv) - (u32)(ad), - (u32)(&ad->stapriv) - (u32)(ad)); - printf("bDriverStopped %d, hw_init_completed %d, cmdThread %d\n", - (u32)(&ad->bDriverStopped) - (u32)(ad), - (u32)(&ad->hw_init_completed) - (u32)(ad), - (u32)(&ad->cmdThread) - (u32)(ad)); - printf("intf_start %d, bup %d, pcodatapriv %d\n", - (u32)(&ad->intf_start) - (u32)(ad), (u32)(&ad->bup) - (u32)(ad), - (u32)(&ad->pcodatapriv) - (u32)(ad)); - printf("Sizeof(adapter) = %d\n", sizeof(struct _ADAPTER)); - if (sizeof(struct _ADAPTER) != 6088) { - printf("Error: Check aligned WiFi struct!\n"); - } -} - -MON_RAM_TAB_SECTION COMMAND_TABLE console_commands_wifi[] = { - { "RTK", 0, test_rtk, ": Test WiFi struct align"}, -}; -#endif diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h index 8946aa3..99ff05d 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_conf.h @@ -8,7 +8,7 @@ #include "wifi_util.h" #include "wifi_ind.h" #include -#include "wifi_api.h" + #ifdef __cplusplus extern "C" { @@ -72,20 +72,21 @@ typedef struct { /****************************************************** * Structures ******************************************************/ +#define SCAN_USE_SEMAPHORE 0 + typedef struct internal_scan_handler{ rtw_scan_result_t** pap_details; rtw_scan_result_t * ap_details; - int scan_cnt; - rtw_bool_t scan_complete; - unsigned char max_ap_size; rtw_scan_result_handler_t gscan_result_handler; #if SCAN_USE_SEMAPHORE void * scan_semaphore; -#else - int scan_running; #endif + // unsigned int scan_start_time; void * user_data; - unsigned int scan_start_time; + unsigned char scan_cnt; + unsigned char max_ap_size; + volatile unsigned char scan_complete; + volatile unsigned char scan_running; } internal_scan_handler_t; typedef struct { @@ -569,7 +570,7 @@ int wifi_set_pscan_chan(__u8 * channel_list,__u8 * pscan_config, __u8 length); * * @return RTW_SUCCESS or RTW_ERROR */ -int wifi_get_setting(const char *ifname,rtw_wifi_setting_t *pSetting); +int wifi_get_setting(const char *ifname, rtw_wifi_setting_t *pSetting); /** Show the network information * diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c b/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c index f59fb0d..6640c45 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_util.c @@ -4,8 +4,17 @@ #include #include #include +#if 1 +#include "drv_types.h" // or #include "wlan_lib.h" +#else +#include "wifi_constants.h" +#include "wifi_structures.h" +#include "wlan_lib.h" // or #include "drv_types.h" +#endif #include +#define USE_WIFI_ADAPTER 1 // использовать прямое обращение в тело драйвера WiFi + int iw_ioctl(const char * ifname, unsigned long request, struct iwreq * pwrq) { memcpy(pwrq->ifr_name, ifname, 5); int ret = rltk_wlan_control(request, (void *) pwrq); @@ -23,8 +32,35 @@ int iw_ioctl(const char * ifname, unsigned long request, struct iwreq * pwrq) { return ret; } +#ifdef USE_WIFI_ADAPTER +extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h +LOCAL _adapter * get_padapter(const char *ifname) { + if(ifname[4] == '0') { + return *(_adapter **)((rltk_wlan_info[0].dev)->priv); + } else { + return *(_adapter **)((rltk_wlan_info[1].dev)->priv); + } + return NULL; +}; +#endif + /* ssid = NULL -> not connected */ int wext_get_ssid(const char *ifname, __u8 *ssid) { +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad != NULL && (pad->mlmepriv.fw_state & 0x41) != 0) { + int len = pad->mlmepriv.cur_network.network.Ssid.SsidLength; + if(len > 32) rtw_memcpy(ssid, pad->mlmepriv.cur_network.network.Ssid.Ssid, 32); + else { + rtw_memcpy(ssid, &pad->mlmepriv.cur_network.network.Ssid.Ssid, len); + ssid[len] = '\0'; + debug_printf("s=[%s]\n", ssid); + } + ret = RTW_SUCCESS; + } + return ret; +#else struct iwreq iwr; memset(&iwr, 0, sizeof(iwr)); iwr.u.essid.pointer = ssid; @@ -43,6 +79,7 @@ int wext_get_ssid(const char *ifname, __u8 *ssid) { ssid[ret] = '\0'; } return ret; +#endif } int wext_set_ssid(const char *ifname, const __u8 *ssid, __u16 ssid_len) { @@ -164,6 +201,20 @@ int wext_set_passphrase(const char *ifname, const __u8 *passphrase, } int wext_get_passphrase(const char *ifname, __u8 *passphrase) { +#if USE_WIFI_ADAPTER + extern int rtw_wx_get_passphrase(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *extra); + struct net_device * pdev = rltk_wlan_info[0].dev; + if(ifname[4] != '0') + pdev = rltk_wlan_info[1].dev; + rtw_result_t ret = RTW_ERROR; + if(pdev) { + uint16 len[4]; + ret = rtw_wx_get_passphrase(pdev, 0, &len, passphrase); + if(ret == RTW_SUCCESS) passphrase[len[2]] = '\0'; + debug_printf("pas[%d]-<%s>\n", len[2], passphrase); + } + return ret; +#else struct iwreq iwr; memset(&iwr, 0, sizeof(iwr)); iwr.u.passphrase.pointer = (void *) passphrase; @@ -173,6 +224,7 @@ int wext_get_passphrase(const char *ifname, __u8 *passphrase) { passphrase[ret] = '\0'; } return ret; +#endif } #if 0 @@ -198,6 +250,18 @@ int wext_get_mac_address(const char *ifname, char * mac) #endif int wext_enable_powersave(const char *ifname, __u8 ips_mode, __u8 lps_mode) { +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad) { + ret = rtw_pm_set_ips(pad, ips_mode); // 2 режима 1,2 ! + if(ret == RTW_SUCCESS) { + LeaveAllPowerSaveMode(pad); + ret = rtw_pm_set_lps(pad, lps_mode); + } + } + return ret; +#else struct iwreq iwr; __u16 pindex = 7; __u8 para[16]; // 7 + (1+1+1) + (1+1+1) @@ -214,8 +278,9 @@ int wext_enable_powersave(const char *ifname, __u8 ips_mode, __u8 lps_mode) { iwr.u.data.pointer = ¶[0]; iwr.u.data.length = pindex; return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); +#endif } - +/* int wext_disable_powersave(const char *ifname) { struct iwreq iwr; __u16 pindex = 7; @@ -234,9 +299,22 @@ int wext_disable_powersave(const char *ifname) { iwr.u.data.length = pindex; return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); } +*/ int wext_set_tdma_param(const char *ifname, __u8 slot_period, __u8 rfon_period_len_1, __u8 rfon_period_len_2, __u8 rfon_period_len_3) { +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad) { + ret = rtw_pm_set_tdma_param(pad, + slot_period, + rfon_period_len_1, + rfon_period_len_2, + rfon_period_len_3); + } + return ret; +#else struct iwreq iwr; int ret = -1; __u16 pindex = 7; @@ -254,9 +332,18 @@ int wext_set_tdma_param(const char *ifname, __u8 slot_period, iwr.u.data.pointer = para; iwr.u.data.length = pindex; return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); +#endif } int wext_set_lps_dtim(const char *ifname, __u8 lps_dtim) { +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad) { + ret = rtw_pm_set_lps_dtim(pad, lps_dtim); + } + return ret; +#else struct iwreq iwr; int ret = -1; __u16 pindex = 7; @@ -274,10 +361,19 @@ int wext_set_lps_dtim(const char *ifname, __u8 lps_dtim) { iwr.u.data.length = pindex; ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); return ret; +#endif } int wext_get_lps_dtim(const char *ifname, __u8 *lps_dtim) { - +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad) { + *lps_dtim = rtw_pm_get_lps_dtim(pad); + ret = RTW_SUCCESS; + } + return ret; +#else struct iwreq iwr; int ret = -1; __u16 pindex = 7; @@ -303,6 +399,7 @@ int wext_get_lps_dtim(const char *ifname, __u8 *lps_dtim) { ret = -1; } return ret; +#endif } int wext_set_tos_value(const char *ifname, __u8 *tos_value) { @@ -416,21 +513,49 @@ int wext_set_mode(const char *ifname, int mode) { } int wext_get_mode(const char *ifname, int *mode) { +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad) { + uint16 f = pad->mlmepriv.fw_state; + if(f & 8) *mode = 2; + else if(f & 0x60) *mode = 1; + else if(!(f & 0x10)) *mode = 0; + else *mode = 3; + ret = RTW_SUCCESS; + } + return ret; +#else struct iwreq iwr; memset(&iwr, 0, sizeof(iwr)); int ret = iw_ioctl(ifname, SIOCGIWMODE, &iwr); if (ret >= 0) *mode = iwr.u.mode; return ret; +#endif } int wext_set_ap_ssid(const char *ifname, const __u8 *ssid, __u16 ssid_len) { +#ifdef USE_WIFI_ADAPTER + struct net_device * pdev = rltk_wlan_info[0].dev; + if(ifname[4] != '0') + pdev = rltk_wlan_info[1].dev; + rtw_result_t ret = RTW_ERROR; + if(pdev) { + uint16 len[2]; + len[0] = ssid_len; + len[1] = (ssid_len != 0); + ret = rtw_wx_set_ap_essid(pdev, 0, &len, ssid); + } + return ret; +#else struct iwreq iwr; memset(&iwr, 0, sizeof(iwr)); iwr.u.essid.pointer = (void *) ssid; iwr.u.essid.length = ssid_len; iwr.u.essid.flags = (ssid_len != 0); return iw_ioctl(ifname, SIOCSIWPRIVAPESSID, &iwr); +#endif } int wext_set_country(const char *ifname, rtw_country_code_t country_code) { @@ -441,12 +566,25 @@ int wext_set_country(const char *ifname, rtw_country_code_t country_code) { } int wext_get_rssi(const char *ifname, int *rssi) { +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad) { + if(pad->mlmepriv.fw_state & 1) { + *rssi = pad->recvpriv.rssi; // +2932 + } + else *rssi = 0; + ret = RTW_SUCCESS; + } + return ret; +#else struct iwreq iwr; memset(&iwr, 0, sizeof(iwr)); int ret = iw_ioctl(ifname, SIOCGIWSENS, &iwr); if (ret >= 0) *rssi = 0 - iwr.u.sens.value; return ret; +#endif } int wext_set_pscan_channel(const char *ifname, @@ -483,22 +621,50 @@ int wext_set_pscan_channel(const char *ifname, return ret; } +//extern int rtw_wx_set_freq(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); + int wext_set_channel(const char *ifname, __u8 ch) { +#if 0 //def USE_WIFI_ADAPTER + struct net_device * pdev = rltk_wlan_info[0].dev; + if(ifname[4] != '0') + pdev = rltk_wlan_info[1].dev; + rtw_result_t ret = RTW_ERROR; + if(pdev) { + ret = rtw_wx_set_freq(pdev, ch, NULL, NULL); + } + return ret; +#else struct iwreq iwr; memset(&iwr, 0, sizeof(iwr)); iwr.u.freq.m = 0; iwr.u.freq.e = 0; iwr.u.freq.i = ch; return iw_ioctl(ifname, SIOCSIWFREQ, &iwr); +#endif } int wext_get_channel(const char *ifname, __u8 *ch) { +#ifdef USE_WIFI_ADAPTER + _adapter * pad = get_padapter(ifname); + rtw_result_t ret = RTW_ERROR; + if(pad) { + if(pad->mlmepriv.fw_state & 1) { + *ch = pad->mlmepriv.cur_network.network.Configuration.DSConfig;// .Reserved[1]; //.PhyInfo.Optimum_antenna; // + } + else { + *ch = pad->mlmeextpriv.cur_channel; // + } + ret = RTW_SUCCESS; + } + return ret; +#else struct iwreq iwr; memset(&iwr, 0, sizeof(iwr)); int ret = iw_ioctl(ifname, SIOCGIWFREQ, &iwr); if (ret >= 0) *ch = iwr.u.freq.i; return ret; +#endif } int wext_register_multicast_address(const char *ifname, rtw_mac_t *mac) { diff --git a/RTL00_SDKV35a/component/common/api/wifi/wifi_util.h b/RTL00_SDKV35a/component/common/api/wifi/wifi_util.h index aa691d6..b3c6602 100644 --- a/RTL00_SDKV35a/component/common/api/wifi/wifi_util.h +++ b/RTL00_SDKV35a/component/common/api/wifi/wifi_util.h @@ -32,6 +32,7 @@ int wext_set_mac_address(const char *ifname, char * mac); int wext_get_mac_address(const char *ifname, char * mac); int wext_enable_powersave(const char *ifname, __u8 lps_mode, __u8 ips_mode); int wext_disable_powersave(const char *ifname); +#define wext_disable_powersave(n) wext_enable_powersave(n, 0, 0) int wext_set_tdma_param(const char *ifname, __u8 slot_period, __u8 rfon_period_len_1, __u8 rfon_period_len_2, __u8 rfon_period_len_3); int wext_set_lps_dtim(const char *ifname, __u8 lps_dtim); int wext_get_lps_dtim(const char *ifname, __u8 *lps_dtim); diff --git a/RTL00_SDKV35a/component/common/api/wifi_api.c b/RTL00_SDKV35a/component/common/api/wifi_api.c index e965837..ef776b7 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api.c +++ b/RTL00_SDKV35a/component/common/api/wifi_api.c @@ -4,11 +4,20 @@ * Created on: 01/11/2017 * Author: pvvx */ -#include "FreeRTOS.h" -#include -#include "main.h" - +#include "user_config.h" #include +#include "rtl8195a.h" +#include "drv_types.h" +#include +#include "FreeRTOS.h" +#if 1 +#include "drv_types.h" // or #include "wlan_lib.h" +#else +#include "wifi_constants.h" +#include "wifi_structures.h" +//#include "wlan_lib.h" // or #include "drv_types.h" +#endif + #if CONFIG_EXAMPLE_WLAN_FAST_CONNECT #error "Udnef CONFIG_EXAMPLE_WLAN_FAST_CONNECT!" @@ -28,8 +37,6 @@ #include "ethernet_mii/ethernet_mii.h" #endif -#include "wlan_lib.h" - #include "flash_eep.h" #include "feep_config.h" @@ -37,6 +44,17 @@ #include "main.h" #include "wifi_user_set.h" +#if 0 +#undef debug_printf +#define debug_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) +#undef info_printf +#define info_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) +#undef warning_printf +#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) +#undef error_printf +#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) +#endif + #if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP extern void cmd_ap_wps(int argc, char **argv); extern int wpas_wps_dev_config(u8 *dev_addr, u8 bregistrar); @@ -46,7 +64,7 @@ extern int wpas_wps_dev_config(u8 *dev_addr, u8 bregistrar); //--- Wlan Config Init------------------- WIFI_CONFIG wifi_cfg = { .mode = DEF_WIFI_MODE, // rtw_mode_t - .sleep = DEF_WIFI_ST_SLEEP, + .adaptivity = DEF_WIFI_ADAPTIVITY, // rtw_adaptivity_mode_t .country_code = DEF_WIFI_COUNTRY,// rtw_country_code_t .tx_pwr = DEF_WIFI_TX_PWR, // rtw_tx_pwr_percentage_t .bgn = DEF_WIFI_BGN, // rtw_network_mode_t @@ -57,7 +75,7 @@ WIFI_CONFIG wifi_cfg = { SOFTAP_CONFIG wifi_ap_cfg = { .ssid = DEF_AP_SSID, .password = DEF_AP_PASSWORD, - .security_type = DEF_AP_SECURITY, // RTW_SECURITY_WPA2_AES_PSK or RTW_SECURITY_OPEN + .security = DEF_AP_SECURITY, // RTW_SECURITY_WPA2_AES_PSK or RTW_SECURITY_OPEN .beacon_interval = DEF_AP_BEACON, .channel = DEF_AP_CHANNEL, .ssid_hidden = 0, @@ -75,9 +93,11 @@ STATION_CONFIG wifi_st_cfg = { .password = DEF_ST_PASSWORD, .bssid = DEF_ST_BSSID, .flg = DEF_ST_BSSID, - .security_type = DEF_ST_SECURITY, + .security = DEF_ST_SECURITY, .autoreconnect = DEF_ST_AUTORECONNECT, - .reconnect_pause = DEF_ST_RECONNECT_PAUSE + .reconnect_pause = DEF_ST_RECONNECT_PAUSE, + .sleep = DEF_ST_SLEEP, + .dtim = DEF_ST_LPS_DTIM }; DHCP_CONFIG wifi_st_dhcp = { .ip = DEF_ST_IP, @@ -86,10 +106,20 @@ DHCP_CONFIG wifi_st_dhcp = { .mode = 1 }; -rtw_mode_t wifi_run_mode = RTW_MODE_NONE; +unsigned char wifi_run_mode = RTW_MODE_NONE; // rtw_mode_t +unsigned char wifi_st_status; -extern void (*p_wlan_autoreconnect_hdl)(rtw_security_t, char*, int, char*, int, - int); +typedef int (*wlan_init_done_ptr)(void); +typedef int (*write_reconnect_ptr)(uint8_t *data, uint32_t len); +//Function +#if CONFIG_AUTO_RECONNECT +extern void (*p_wlan_autoreconnect_hdl)(rtw_security_t, char*, int, char*, int, int); +#endif +extern wlan_init_done_ptr p_wlan_init_done_callback; +//extern write_reconnect_ptr p_write_reconnect_ptr; +extern struct netif xnetif[NET_IF_NUM]; +extern uint8_t rtw_power_percentage_idx; +extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h #define PARM_RECONNECT 1 @@ -121,7 +151,8 @@ FEEP_ELEMENT feep_tab[] = { { FEEP_ID_AP_DHCP_CFG, sizeof(wifi_ap_dhcp), &wifi_ap_dhcp }, // Bit2 BID_AP_DHCP_CFG { FEEP_ID_ST_DHCP_CFG, sizeof(wifi_st_dhcp), &wifi_st_dhcp }, // Bit3 BID_ST_DHCP_CFG { FEEP_ID_WIFI_CFG, sizeof(wifi_cfg), &wifi_cfg }, // Bit4 BID_WIFI_CFG -// { FEEP_ID_LWIP_CFG, sizeof(lwip_conn_info), &lwip_conn_info }, // Bit5 + { FEEP_ID_AP_HOSTNAME, LWIP_NETIF_HOSTNAME_SIZE, &lwip_host_name[1] }, // Bit5 BID_AP_HOSTNAME + { FEEP_ID_ST_HOSTNAME, LWIP_NETIF_HOSTNAME_SIZE, &lwip_host_name[0] }, // Bit5 BID_ST_HOSTNAME { 0, 0, NULL } }; @@ -152,17 +183,7 @@ uint32 write_wifi_cfg(uint32 flg) return ret; } -typedef int (*wlan_init_done_ptr)(void); -typedef int (*write_reconnect_ptr)(uint8_t *data, uint32_t len); -//Function -#if CONFIG_AUTO_RECONNECT -extern void (*p_wlan_autoreconnect_hdl)(rtw_security_t, char*, int, char*, int, - int); -#endif -extern wlan_init_done_ptr p_wlan_init_done_callback; -//extern write_reconnect_ptr p_write_reconnect_ptr; -extern struct netif xnetif[NET_IF_NUM]; - +#if CONFIG_WLAN_CONNECT_CB _WEAK void connect_start(void) { info_printf("\%s: Time at start %d ms.\n", __func__, xTaskGetTickCount()); @@ -172,18 +193,42 @@ _WEAK void connect_close(void) { info_printf("\%s: Time at start %d ms.\n", __func__, xTaskGetTickCount()); } +#endif -int wlan_init_done_callback(void) { - info_printf("WiFi Init after %d ms\n", xTaskGetTickCount()); +#ifdef NOT_USE_CALLS +LOCAL int wlan_init_done_callback(void) { + printf("WiFi Init after %d ms\n", xTaskGetTickCount()); return 0; } +#endif // #ifdef NOT_USE_CALLS //char wlan_st_name[] = WLAN0_NAME; char wlan_st_name[] = WLAN0_NAME; char wlan_ap_name[] = WLAN1_NAME; char wlan_st_netifn = 0; char wlan_ap_netifn = 1; -extern rtw_mode_t wifi_mode; // новый режим работы + + +uint32 get_new_ip(void) +{ + if(!(wifi_cfg.mode ^ wifi_run_mode)) { + return current_netif->ip_addr.addr; + } else if(wifi_cfg.mode == RTW_MODE_AP) { + return wifi_ap_dhcp.ip; + } else if(wifi_st_dhcp.mode == 2) { + return wifi_st_dhcp.ip; + } + return 0; +} +uint8 * get_new_hostname(void) +{ + if(!(wifi_cfg.mode ^ wifi_run_mode)) { + return current_netif->hostname; + } else if(wifi_cfg.mode == RTW_MODE_AP) { + return lwip_host_name[1]; + }; + return lwip_host_name[0]; +} LOCAL uint8 chk_ap_netif_num(void) { @@ -202,13 +247,95 @@ LOCAL uint8 chk_ap_netif_num(void) return wlan_ap_netifn; } -rtw_result_t wifi_run_ap(void) { - chk_ap_netif_num(); +extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h + +/*LOCAL _adapter * get_padapter(int num) { + if(rltk_wlan_info[num].enable) { + return *(_adapter **)((rltk_wlan_info[0].dev)->priv); + } + return NULL; +};*/ +#define get_padapter(num) (*(_adapter **)((rltk_wlan_info[num].dev)->priv)); + +LOCAL rtw_result_t _wext_set_lps_dtim(int adapter_num, uint8 lps_dtim ) { + _adapter * pad = get_padapter(adapter_num); + rtw_result_t ret = RTW_ERROR; + if(pad) { + ret = rtw_pm_set_lps_dtim(pad, lps_dtim); + } + return ret; +} + +LOCAL rtw_result_t _wext_enable_powersave(int adapter_num, uint8 ips_mode, uint8 lps_mode) { + _adapter * pad = get_padapter(adapter_num); + rtw_result_t ret = RTW_ERROR; + if(pad) { + ret = rtw_pm_set_ips(pad, ips_mode); // 2 режима 1,2 ! + if(ret == RTW_SUCCESS) { + LeaveAllPowerSaveMode(pad); + ret = rtw_pm_set_lps(pad, lps_mode); + } + } + return ret; +} + +LOCAL int _wext_cmp_ssid(int adapter_num, uint8 *ssid) +{ + _adapter * pad = get_padapter(adapter_num); + int ret = 0; + if((pad != NULL) && (pad->mlmepriv.fw_state & 0x41) != 0) { + int len = pad->mlmepriv.cur_network.network.Ssid.SsidLength; + if(len < 32) len++; + else len = 32; + ret = (rtl_memcmp(ssid, &pad->mlmepriv.cur_network.network.Ssid.Ssid, len) == 0); + debug_printf("%d s[%d]'%s'\n", pad->mlmepriv.fw_state, len, ssid); + } + return ret; +} + +#ifdef NOT_USE_CALLS + +LOCAL rtw_result_t _wext_get_mode(int adapter_num, int *mode) { + _adapter * pad = get_padapter(adapter_num); + rtw_result_t ret = RTW_ERROR; + if(pad) { + uint16 f = pad->mlmepriv.fw_state; + if(f & 8) *mode = 2; + else if(f & 0x60) *mode = 1; + else if(!(f & 0x10)) *mode = 0; + else *mode = 3; + ret = RTW_SUCCESS; + } + return ret; +} + +LOCAL rtw_result_t _wext_get_channel(int adapter_num, uint8 *ch) +{ + _adapter * pad = get_padapter(adapter_num); + rtw_result_t ret = RTW_ERROR; + if(pad) { + if(pad->mlmepriv.fw_state & 1) { + *ch = pad->mlmepriv.htpriv.ch_offset; + } + else { + *ch = pad->mlmeextpriv.cur_channel; + } + ret = RTW_SUCCESS; + } + return ret; +} + +#endif // #ifdef NOT_USE_CALLS + + +LOCAL rtw_result_t wifi_run_ap(void) { rtw_result_t ret = RTW_NOTAP; if( (wifi_mode == RTW_MODE_AP) || (wifi_mode == RTW_MODE_STA_AP) ){ info_printf("Starting AP (%s, netif%d)...\n", wlan_ap_name, wlan_ap_netifn); +/* netif_set_addr(&xnetif[WLAN_AP_NETIF_NUM], &wifi_ap_dhcp.ip, &wifi_ap_dhcp.mask, &wifi_ap_dhcp.gw); +*/ if(wext_set_sta_num(wifi_ap_cfg.max_sta) != 0) { // Max number of STAs, should be 1..3, default is 3 error_printf("AP not set max connections %d!\n", wifi_ap_cfg.max_sta); }; @@ -220,47 +347,57 @@ rtw_result_t wifi_run_ap(void) { wifi_ap_cfg.channel = 1; } ret = wifi_start_ap(wifi_ap_cfg.ssid, //char *ssid, - wifi_ap_cfg.security_type, //rtw_security_t ecurity_type, + wifi_ap_cfg.security, //rtw_security_t ecurity_type, wifi_ap_cfg.password, //char *password, wifi_ap_cfg.channel, //int channel wifi_ap_cfg.ssid_hidden); // - wifi_run_mode |= RTW_MODE_AP; +// wifi_run_mode |= RTW_MODE_AP; if (ret != RTW_SUCCESS) { error_printf("Error(%d): Start AP failed!\n\n", ret);; } else { - int timeout = 10000 / 200; + int timeout = wifi_test_timeout_ms / wifi_test_timeout_step_ms; while (1) { +#if 1 + if (_wext_cmp_ssid(WLAN_AP_NETIF_NUM, &wifi_ap_cfg.ssid )) { +#else char essid[33]; - if (wext_get_ssid(wlan_ap_name, (unsigned char *) essid) > 0) { - if (strcmp((const char * ) essid, - (const char * )wifi_ap_cfg.ssid) - == 0) { + if ((wext_get_ssid(wlan_ap_name, (unsigned char *) essid) > 0) + &&(strcmp((const char * ) essid, (const char * )wifi_ap_cfg.ssid) == 0)) { +#endif #ifdef CONFIG_DONT_CARE_TP pnetiff->flags |= NETIF_FLAG_IPSWITCH; #endif - dhcps_ip4addr_pool_start = DEF_AP_DHCP_START; - dhcps_ip4addr_pool_end = DEF_AP_DHCP_STOP; - dhcps_init(&xnetif[WLAN_AP_NETIF_NUM]); + if(wifi_ap_dhcp.mode) { +#if defined(DEF_AP_DHCP_START) && defined(DEF_AP_DHCP_STOP) + dhcps_ip4addr_pool_start = DEF_AP_DHCP_START; + dhcps_ip4addr_pool_end = DEF_AP_DHCP_STOP; +#endif + dhcps_init(&xnetif[WLAN_AP_NETIF_NUM]); + }; info_printf("AP '%s' started after %d ms\n", wifi_ap_cfg.ssid, xTaskGetTickCount()); show_wifi_ap_ip(); if(wifi_cfg.save_flg & (BID_WIFI_AP_CFG | BID_AP_DHCP_CFG)) write_wifi_cfg(wifi_cfg.save_flg & (BID_WIFI_AP_CFG | BID_AP_DHCP_CFG)); ret = RTW_SUCCESS; +#if CONFIG_WLAN_CONNECT_CB + // extern void connect_start(void); + connect_start(); +#endif break; - } } if (timeout == 0) { error_printf("Start AP timeout!\n"); ret = RTW_TIMEOUT; break; } - vTaskDelay(200 / portTICK_RATE_MS); + vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); timeout--; } } } return ret; + } LOCAL rtw_result_t StartStDHCPClient(void) @@ -300,14 +437,23 @@ LOCAL rtw_result_t StartStDHCPClient(void) ret = RTW_ERROR; } } + if(ret == RTW_SUCCESS) { + show_wifi_st_ip(); + wifi_st_status = WIFI_STA_CONNECTED; +#if CONFIG_WLAN_CONNECT_CB + // extern void connect_start(void); + connect_start(); +#endif + } return ret; } -static void wifi_autoreconnect_thread_(void *param) { +LOCAL void wifi_autoreconnect_thread_(void *param) { int ret = RTW_ERROR; struct wifi_autoreconnect_param *reconnect_param = (struct wifi_autoreconnect_param *) param; printf("auto reconnect ...\n"); + wifi_st_status = WIFI_STA_RECONNECT; ret = wifi_connect( wifi_st_cfg.bssid, wifi_st_cfg.flg, @@ -326,14 +472,7 @@ static void wifi_autoreconnect_thread_(void *param) { if(wifi_cfg.save_flg & BID_WIFI_ST_CFG) write_wifi_cfg(BID_WIFI_ST_CFG); // Start DHCPClient - ret = StartStDHCPClient(); - if(ret == RTW_SUCCESS) { - show_wifi_st_ip(); -#if CONFIG_WLAN_CONNECT_CB - // extern void connect_start(void); - connect_start(); -#endif - } + StartStDHCPClient(); } vTaskDelete(NULL); } @@ -363,17 +502,17 @@ LOCAL void st_set_autoreconnect(uint8 mode, uint8 count, uint16 timeout) { ad->mlmeextpriv.auto_reconnect = (mode != 0); } -rtw_result_t wifi_run_st(void) { +LOCAL rtw_result_t wifi_run_st(void) { rtw_result_t ret = RTW_SUCCESS; - chk_ap_netif_num(); +// chk_ap_netif_num(); if((wifi_mode == RTW_MODE_STA) || (wifi_mode == RTW_MODE_STA_AP)) { #if CONFIG_AUTO_RECONNECT // p_wlan_autoreconnect_hdl = NULL; if (wifi_st_cfg.autoreconnect) { st_set_autoreconnect(1, wifi_st_cfg.autoreconnect, wifi_st_cfg.reconnect_pause); -// ret = wext_set_autoreconnect(WLAN0_NAME, 1, wifi_st_cfg.autoreconnect, wifi_st_cfg.reconnect_pause); -// if (ret != RTW_SUCCESS) -// warning_printf("ERROR: Operation failed! Error=%d\n", ret); + ret = wext_set_autoreconnect(WLAN0_NAME, 1, wifi_st_cfg.autoreconnect, wifi_st_cfg.reconnect_pause); + if (ret != RTW_SUCCESS) + warning_printf("ERROR: Operation failed! Error=%d\n", ret); } #endif info_printf("Connected to AP (%s, netif%d)...\n", wlan_st_name, wlan_st_netifn); @@ -381,71 +520,60 @@ rtw_result_t wifi_run_st(void) { wifi_st_cfg.bssid, wifi_st_cfg.flg, wifi_st_cfg.ssid, - wifi_st_cfg.security_type, + idx_to_rtw_security(wifi_st_cfg.security), wifi_st_cfg.password, -1, NULL); - wifi_run_mode |= RTW_MODE_STA; + wifi_st_status = WIFI_STA_START; +// wifi_run_mode |= RTW_MODE_STA; if (ret != RTW_SUCCESS) { error_printf("%s: Operation failed! Error(%d)\n", __func__, ret); } else { if(wifi_cfg.save_flg & BID_WIFI_ST_CFG) write_wifi_cfg(BID_WIFI_ST_CFG); // Start DHCPClient - ret = StartStDHCPClient(); - if(ret == RTW_SUCCESS) { - show_wifi_st_ip(); -#if CONFIG_WLAN_CONNECT_CB - // extern void connect_start(void); - connect_start(); -#endif - } + StartStDHCPClient(); } }; return ret; } -int _wifi_on(rtw_mode_t mode) { +LOCAL int _wifi_on(rtw_mode_t mode) { int ret = 0; - uint32 timeout = xTaskGetTickCount(); - uint8 devnum; - - if (rltk_wlan_running(WLAN0_IDX)) { +/* + if (!((rltk_wlan_running(WLAN0_IDX) == 0) && (rltk_wlan_running(WLAN1_IDX) == 0))) { warning_printf("WIFI is already running\n"); return 0; } - - static int event_init = 0; - if (event_init == 0) { - init_event_callback_list(); - event_init = 1; - } - wifi_mode = mode; +*/ info_printf("Initializing WIFI...\n"); + uint8 devnum = (mode == RTW_MODE_STA_AP); // flag = 1 -> 2 netif + wifi_mode = mode; + chk_ap_netif_num(); + // set wifi mib - // adaptivity - wext_set_adaptivity(RTW_ADAPTIVITY_DISABLE); -// wext_set_adaptivity(RTW_ADAPTIVITY_NORMAL); -// wext_set_adaptivity(RTW_ADAPTIVITY_CARRIER_SENSE); + wext_set_adaptivity(wifi_cfg.adaptivity & 3); // rtw_adaptivity_mode_t - devnum = (mode == RTW_MODE_STA_AP); // flag use 2 netif + ret = rltk_wlan_init(WLAN0_IDX, mode); - ret = rltk_wlan_init(0, mode); + netif_set_up(&xnetif[0]); if (ret < 0) return ret; if(devnum) { - netif_set_up(&xnetif[1]); - ret = rltk_wlan_init(1, mode); + ret = rltk_wlan_init(WLAN1_IDX, mode); if (ret < 0) return ret; + netif_set_up(&xnetif[1]); } else { netif_set_down(&xnetif[1]); } - rltk_wlan_start(0); - if(devnum) rltk_wlan_start(1); + + uint32 timeout = xTaskGetTickCount(); + rltk_wlan_start(WLAN0_IDX); + if(devnum) rltk_wlan_start(WLAN1_IDX); while (1) { - if (rltk_wlan_running(0) && - rltk_wlan_running(devnum) ) { + if (rltk_wlan_running(WLAN0_IDX) + && rltk_wlan_running(devnum) ) { #if CONFIG_DEBUG_LOG > 2 printf("WIFI initialized (%d ms)\n", xTaskGetTickCount() - timeout); #endif @@ -462,7 +590,7 @@ int _wifi_on(rtw_mode_t mode) { extern int lwip_init_done; -void _LwIP_Init(void) +LOCAL void _LwIP_Init(void) { if(!lwip_init_done) { int idx; @@ -470,14 +598,14 @@ void _LwIP_Init(void) /* Create tcp_ip stack thread */ tcpip_init( NULL, NULL ); - chk_ap_netif_num(); // Исполняется после _wifi_on() +// chk_ap_netif_num(); // Исполняется после _wifi_on() for(idx = 0; idx < NET_IF_NUM; idx++) { xnetif[idx].name[0] = 'r'; xnetif[idx].name[1] = '0' + idx; } netif_add(&xnetif[WLAN_ST_NETIF_NUM], (struct netif *)&wifi_st_dhcp.ip, (struct netif *)&wifi_st_dhcp.mask, (struct netif *)&wifi_st_dhcp.gw, NULL, ðernetif_init, &tcpip_input); netif_add(&xnetif[WLAN_AP_NETIF_NUM], (struct netif *)&wifi_ap_dhcp.ip, (struct netif *)&wifi_ap_dhcp.mask, (struct netif *)&wifi_ap_dhcp.gw, NULL, ðernetif_init, &tcpip_input); - #if CONFIG_ETHERNET // && NET_IF_NUM > 2 +#if CONFIG_ETHERNET // && NET_IF_NUM > 2 { struct ip_addr ipaddr; struct ip_addr netmask; @@ -487,7 +615,7 @@ void _LwIP_Init(void) gw.addr = DEF_EH_GW; netif_add(&xnetif[2], &ipaddr, &netmask, &gw, NULL, ðernetif_mii_init, &tcpip_input); } - #endif +#endif /* Registers the default network interface. */ netif_set_default(&xnetif[0]); /* When the netif is fully configured this function must be called.*/ @@ -496,8 +624,8 @@ void _LwIP_Init(void) } info_printf("interface %d is initialized\n", idx); lwip_init_done = 1; - // для отслеживания первого старта ? -// wifi_mode = RTW_MODE_NONE; + + init_event_callback_list(); } } @@ -505,28 +633,23 @@ int wifi_run(rtw_mode_t mode) { int ret = 0; #if CONFIG_DEBUG_LOG > 4 debug_printf("\n%s(%d), %d\n", __func__, mode, wifi_run_mode); + debug_printf("old mode = %d, new mode = %d\n", wifi_run_mode, mode); #endif - if(wifi_run_mode != mode) { - if(wifi_run_mode & RTW_MODE_AP) { -#if CONFIG_DEBUG_LOG > 4 - debug_printf("dhcps_deinit()\n"); -#endif - dhcps_deinit(); - } + if(wifi_mode) { // != mode) { info_printf("Deinitializing WIFI ...\n"); wifi_off(); - wifi_run_mode = RTW_MODE_NONE; + wifi_st_status = WIFI_STA_OFF; +// wifi_run_mode = RTW_MODE_NONE; vTaskDelay(30); + } + if (mode != RTW_MODE_NONE) { if (_wifi_on(mode) < 0) { error_printf("Wifi On failed!\n"); goto error_end; }; - }; - if (mode != RTW_MODE_NONE) { if(wifi_set_country(wifi_cfg.country_code) != RTW_SUCCESS) { error_printf("WiFi: Error set tx country_code (%d)!", wifi_cfg.country_code); }; -// extern uint8_t rtw_power_percentage_idx; if(rtw_power_percentage_idx != wifi_cfg.tx_pwr) { if(rltk_set_tx_power_percentage(wifi_cfg.tx_pwr) != RTW_SUCCESS) { error_printf("WiFi: Error set tx power (%d)!", wifi_cfg.tx_pwr); @@ -535,50 +658,83 @@ int wifi_run(rtw_mode_t mode) { if(wifi_set_network_mode(wifi_cfg.bgn) != RTW_SUCCESS) { error_printf("WiFi: Error set network mode (%d)!", wifi_cfg.bgn); } - debug_printf("mode == wifi_mode? (%d == %d?)\n", mode, wifi_mode); - switch(wifi_mode) { + debug_printf("mode=%d, wifi_mode=%d, old_mоde=%d\n", mode, wifi_mode, wifi_run_mode); + + if(mode <= RTW_MODE_STA_AP) { + struct netif * pnif = &xnetif[WLAN_ST_NETIF_NUM]; +#if LWIP_NETIF_HOSTNAME + // @todo ethernetif_init()... + pnif->hostname = lwip_host_name[0]; +#ifdef USE_NETBIOS + netbios_set_name(WLAN_ST_NETIF_NUM, lwip_host_name[0]); +#endif +#endif + netif_set_addr(&xnetif[WLAN_ST_NETIF_NUM], &wifi_st_dhcp.ip, + &wifi_st_dhcp.mask, &wifi_st_dhcp.gw); + pnif = &xnetif[WLAN_AP_NETIF_NUM]; +#if LWIP_NETIF_HOSTNAME + // @todo ethernetif_init()... + pnif->hostname = lwip_host_name[1]; +#ifdef USE_NETBIOS + netbios_set_name(WLAN_AP_NETIF_NUM, lwip_host_name[1]); +#endif +#endif + netif_set_addr(&xnetif[WLAN_AP_NETIF_NUM], &wifi_ap_dhcp.ip, + &wifi_ap_dhcp.mask, &wifi_ap_dhcp.gw); + + } + switch(mode) { case RTW_MODE_STA_AP: - wifi_run_ap(); - wifi_run_st(); - break; + ret = wifi_run_ap() | wifi_run_st(); +// _wext_enable_powersave(0, 0, 0); +// _wext_set_lps_dtim(0, 0); + break; case RTW_MODE_STA: - wifi_run_st(); - break; + ret = wifi_run_st(); + if(_wext_set_lps_dtim(0, wifi_st_cfg.dtim)!= RTW_SUCCESS) { + error_printf("WiFi: Error set DTIM(%d)!", wifi_st_cfg.dtim); + }; + if(_wext_enable_powersave(0, wifi_st_cfg.sleep & 1, (wifi_st_cfg.sleep >> 1) & 1) != RTW_SUCCESS) { + error_printf("WiFi: Error set powersave mode!"); + }; + break; case RTW_MODE_AP: - wifi_run_ap(); + ret = wifi_run_ap(); +// _wext_enable_powersave(WLAN0_NAME, 0, 0); break; #if 0// CONFIG_ENABLE_?? case RTW_MODE_PROMISC: + // @todo break; #endif #if CONFIG_ENABLE_P2P case RTW_MODE_P2P: + // @todo break; #endif default: + ret = 1; error_printf("WiFi: Error mode(%d)\n", wifi_mode); - } -#if CONFIG_INTERACTIVE_MODE - /* Initial uart rx swmaphore*/ - vSemaphoreCreateBinary(uart_rx_interrupt_sema); - xSemaphoreTake(uart_rx_interrupt_sema, 1/portTICK_RATE_MS); - start_interactive_mode(); -#endif - if(wifi_cfg.sleep) { - if(wext_enable_powersave(WLAN0_NAME, 1, 1) != RTW_SUCCESS) { - error_printf("WiFi: Error set powersave mode!"); - }; - } - ret = 1; + }; + wifi_run_mode = mode; + if(ret == 0 && (wifi_cfg.save_flg & BID_WIFI_CFG)) { + wifi_cfg.mode = mode; + write_wifi_cfg(BID_WIFI_CFG); + }; } else { - ret = 1; + ret = 0; error_end: #if CONFIG_WLAN_CONNECT_CB connect_close(); #endif + if(wifi_run_mode) { + wifi_disconnect(); + }; wifi_off(); + wifi_st_status = WIFI_STA_OFF; + wifi_run_mode = RTW_MODE_NONE; + chk_ap_netif_num(); }; - chk_ap_netif_num(); return ret; } @@ -587,7 +743,7 @@ void wifi_init(void) { debug_printf("\nLoad Config\n"); read_wifi_cfg(wifi_cfg.load_flg); // DEF_LOAD_CFG // Call back from wlan driver after wlan init done - p_wlan_init_done_callback = wlan_init_done_callback; +// p_wlan_init_done_callback = wlan_init_done_callback; // Call back from application layer after wifi_connection success // p_write_reconnect_ptr = wlan_write_reconnect_data_to_flash; p_wlan_autoreconnect_hdl = NULL; @@ -643,7 +799,7 @@ unsigned char *tab_txt_rtw_eccryption[] = { rtw_security_t idx_to_rtw_security(unsigned char idx) { - if(idx > 8) idx = 5; // RTW_SECURITY_WPA2_MIXED_PSK + if(idx > IDX_SECURITY_UNKNOWN - 1) idx = IDX_SECURITY_WPA2_AES_PSK; return (rtw_security_t)tab_code_rtw_secyrity[idx]; } @@ -654,6 +810,12 @@ unsigned char rtw_security_to_idx(rtw_security_t rtw_sec_type) return i; } +unsigned char * idx_security_to_str(unsigned char idx) +{ + if(idx > IDX_SECURITY_UNKNOWN) idx = IDX_SECURITY_UNKNOWN; + return tab_txt_rtw_secyrity[idx]; +} + unsigned char * rtw_security_to_str(rtw_security_t rtw_sec_type) { return tab_txt_rtw_secyrity[rtw_security_to_idx(rtw_sec_type)]; @@ -673,16 +835,18 @@ void show_wifi_MAC(void) { void show_wifi_st_cfg(void) { printf("\tSSID: '%s'\n", wifi_st_cfg.ssid); printf("\tPassword: '%s'\n", wifi_st_cfg.password); - printf("\tSecurity type: %p\n", wifi_st_cfg.security_type); + printf("\tSecurity type: %s\n", idx_security_to_str(wifi_st_cfg.security)); printf("\tAuto-reconnect: %d\n", wifi_st_cfg.autoreconnect); printf("\tReconnect pause: %d\n", wifi_st_cfg.reconnect_pause); + printf("\tSleep mode: %p\n", wifi_st_cfg.sleep); + printf("\tDTIM: %d\n", wifi_st_cfg.dtim); } void show_wifi_ap_cfg(void) { printf("\tSSID: '%s'\n", wifi_ap_cfg.ssid); printf("\tSSID hidden: %d\n", wifi_ap_cfg.ssid_hidden); printf("\tPassword: '%s'\n", wifi_ap_cfg.password); - printf("\tSecurity type: %p\n", wifi_ap_cfg.security_type); + printf("\tSecurity type: %s\n", (wifi_ap_cfg.security)? tab_txt_rtw_secyrity[IDX_SECURITY_WPA2_AES_PSK] : tab_txt_rtw_secyrity[IDX_SECURITY_OPEN]); printf("\tChannel: %d\n", wifi_ap_cfg.channel); printf("\tBeacon interval: %d ms\n", wifi_ap_cfg.beacon_interval); printf("\tMax connections: %d\n", wifi_ap_cfg.max_sta); @@ -691,9 +855,9 @@ void show_wifi_ap_cfg(void) { void show_wifi_cfg(void) { printf("\tStart mode: %p\n", wifi_cfg.mode); printf("\tCountry code: %d\n", wifi_cfg.country_code); - printf("\tSleep mode: %p\n", wifi_cfg.sleep); printf("\tNetwork mode: %d\n", wifi_cfg.bgn); printf("\tTx power: %d\n", wifi_cfg.tx_pwr); + printf("\tAdaptivity: %d\n", wifi_cfg.adaptivity); printf("\tLoad flags: %p\n", wifi_cfg.load_flg); printf("\tSave flags: %p\n", wifi_cfg.save_flg); } diff --git a/RTL00_SDKV35a/component/common/api/wifi_api.h b/RTL00_SDKV35a/component/common/api/wifi_api.h index 17df697..461f19b 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api.h +++ b/RTL00_SDKV35a/component/common/api/wifi_api.h @@ -29,8 +29,10 @@ extern char str_rom_57ch3Dch0A[]; // "========================================== #define BID_AP_DHCP_CFG (1 << 2) #define BID_ST_DHCP_CFG (1 << 3) #define BID_WIFI_CFG (1 << 4) +#define BID_AP_HOSTNAME (1 << 5) +#define BID_ST_HOSTNAME (1 << 6) -#define BID_ALL_WIFI_CFG (BID_WIFI_AP_CFG|BID_WIFI_ST_CFG|BID_AP_DHCP_CFG|BID_ST_DHCP_CFG) +#define BID_ALL_WIFI_CFG (BID_WIFI_AP_CFG|BID_WIFI_ST_CFG|BID_AP_DHCP_CFG|BID_ST_DHCP_CFG|BID_AP_HOSTNAME|BID_ST_HOSTNAME) #define WLAN_ST_NETIF_NUM wlan_st_netifn #define WLAN_AP_NETIF_NUM wlan_ap_netifn @@ -40,9 +42,11 @@ extern char str_rom_57ch3Dch0A[]; // "========================================== #define FEEP_ID_WIFI_ST_CFG 0x5453 // id:'ST' #define FEEP_ID_AP_DHCP_CFG 0x4144 // id:'DA' #define FEEP_ID_ST_DHCP_CFG 0x5344 // id:'DS' -#define FEEP_ID_UART_CFG 0x5530 // id:'0U', type: UART_LOG_CONF -#define FEEP_ID_LWIP_CFG 0x4C30 // id:'0L', type: struct atcmd_lwip_conf -#define FEEP_ID_DHCP_CFG 0x4430 // id:'0D', type: struct +#define FEEP_ID_AP_HOSTNAME 0x4148 // id:'HA' +#define FEEP_ID_ST_HOSTNAME 0x5348 // id:'HP' +//#define FEEP_ID_UART_CFG 0x5530 // id:'0U', type: UART_LOG_CONF +//#define FEEP_ID_LWIP_CFG 0x4C30 // id:'0L', type: struct atcmd_lwip_conf +//#define FEEP_ID_DHCP_CFG 0x4430 // id:'0D', type: struct //========================================= #define IW_PASSPHRASE_MAX_SIZE 64 #define NDIS_802_11_LENGTH_SSID 32 @@ -54,32 +58,34 @@ extern char str_rom_57ch3Dch0A[]; // "========================================== //--- Wlan Config struct------------------- typedef struct _wifi_config { unsigned char mode; // rtw_mode_t - unsigned char sleep; + unsigned char adaptivity; // rtw_adaptivity_mode_t unsigned char country_code; // rtw_country_code_t unsigned char tx_pwr; // rtw_tx_pwr_percentage_t unsigned char bgn; // 802.11 rtw_network_mode_t - unsigned char load_flg; + unsigned char load_flg; // см. BID_WIFI_CFG.. unsigned char save_flg; } WIFI_CONFIG, *PWIFI_CONFIG; //---- Interface 0 - wlan0 - AP - struct -- typedef struct _softap_config { - unsigned char ssid[NDIS_802_11_LENGTH_SSID]; - unsigned char password[IW_PASSPHRASE_MAX_SIZE]; - rtw_security_t security_type; // RTW_SECURITY_WPA2_AES_PSK or RTW_SECURITY_OPEN - uint16 beacon_interval; // Note: support 100 ~ 60000 ms, default 100 - unsigned char channel; // 1..14 + unsigned char ssid[NDIS_802_11_LENGTH_SSID+1]; + unsigned char password[IW_PASSPHRASE_MAX_SIZE+1]; + unsigned short beacon_interval; // Note: support 100 ~ 60000 ms, default 100 unsigned char ssid_hidden; // Note: default 0 + unsigned char security; // 0 = RTW_SECURITY_OPEN, 1 = RTW_SECURITY_WPA2_AES_PSK + unsigned char channel; // 1..14 unsigned char max_sta; // 1..3 } SOFTAP_CONFIG, *PSOFTAP_CONFIG; //---- Interface 1 - wlan1 - ST - struct - typedef struct _station_config { - unsigned char ssid[NDIS_802_11_LENGTH_SSID]; - unsigned char password[IW_PASSPHRASE_MAX_SIZE]; - rtw_security_t security_type; + unsigned char ssid[NDIS_802_11_LENGTH_SSID+1]; + unsigned char password[IW_PASSPHRASE_MAX_SIZE+1]; unsigned char bssid[6]; // Note: If bssid set is not ff.ff.ff.ff.ff.ff || 00:00:00:00:00:00 + unsigned char flg; // station will connect to the router with both ssid[], else if set flg - bssid[] matched. + unsigned char security; // IDX_SECURITY unsigned char autoreconnect; // 0 - none, 1..254 - count, 255 - all unsigned char reconnect_pause; // in sec - unsigned char flg; // station will connect to the router with both ssid[], else if set flg - bssid[] matched. + unsigned char sleep; // 0 - Off, 1 - IPS, 2 - LPS, 3 - IPS/LPS mode + unsigned char dtim; // LPS DTIM (2..) // rtw_adaptivity_mode_t } STATION_CONFIG, *PSTATION_CONFIG; //--- LwIP Config ------------------------- @@ -106,13 +112,39 @@ extern SOFTAP_CONFIG wifi_ap_cfg; extern DHCP_CONFIG wifi_ap_dhcp; extern STATION_CONFIG wifi_st_cfg; extern DHCP_CONFIG wifi_st_dhcp; -extern rtw_mode_t wifi_run_mode; -extern rtw_mode_t wifi_mode; +extern unsigned char wifi_run_mode; // rtw_mode_t +extern unsigned char wifi_mode; // rtw_mode_t +extern unsigned char wifi_st_status; // WIFI_STA_ENUM extern char wlan_st_name[]; extern char wlan_ap_name[]; extern char wlan_st_netifn; extern char wlan_ap_netifn; +/* WiFi Station & scan security */ +typedef enum { + IDX_SECURITY_OPEN = 0, //0 Open security + IDX_SECURITY_WEP_PSK, //1 WEP Security with open authentication + IDX_SECURITY_WEP_SHARED, //2 WEP Security with shared authentication + IDX_SECURITY_WPA_TKIP_PSK, //3 WPA Security with TKIP + IDX_SECURITY_WPA_AES_PSK, //4 WPA Security with AES + IDX_SECURITY_WPA2_TKIP_PSK, //5 WPA2 Security with TKIP + IDX_SECURITY_WPA2_AES_PSK, //6 WPA2 Security with AES + IDX_SECURITY_WPA2_MIXED_PSK, //7 WPA2 Security with AES & TKIP + IDX_SECURITY_WPA_WPA2_MIXED, //8 WPA/WPA2 Security + IDX_SECURITY_UNKNOWN //9 +} IDX_SECURITY; + +/* wifi_st_status */ +typedef enum { + WIFI_STA_OFF, + WIFI_STA_START, + WIFI_STA_RECONNECT, + WIFI_STA_CONNECTED +} WIFI_STA_ENUM; + + +uint8 * get_new_hostname(void); +uint32 get_new_ip(void); void show_wifi_ap_ip(void); void show_wifi_st_ip(void); @@ -127,7 +159,27 @@ void wifi_init(void); rtw_security_t idx_to_rtw_security(unsigned char idx); unsigned char rtw_security_to_idx(rtw_security_t rtw_sec_type); unsigned char * rtw_security_to_str(rtw_security_t rtw_sec_type); +unsigned char * idx_security_to_str(unsigned char idx); + +/* -------- Api WiFi Scan ------------------------------- */ +#include "wifi_conf.h" +#include "timers.h" + +#define SCAN_CHANNELS 14 +#define MAX_AP_SIZE 32 + +typedef struct web_scan_handler{ + TimerHandle_t timer; + rtw_scan_result_t * ap_details; + unsigned char ap_count; + unsigned char start_show; + unsigned char used_data; + volatile unsigned char flg; +} web_scan_handler_t; +extern web_scan_handler_t web_scan_handler_ptr; +typedef rtw_result_t (*api_scan_result_handler_t)(internal_scan_handler_t * ap_scan_result); +rtw_result_t api_wifi_scan(api_scan_result_handler_t scan_result_cb); +void wifi_close_scan(void); -void _LwIP_Init(void); #endif // _WIFI_API_H_ diff --git a/RTL00_SDKV35a/component/common/api/wifi_api_scan.c b/RTL00_SDKV35a/component/common/api/wifi_api_scan.c index f9fa93e..556668e 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api_scan.c +++ b/RTL00_SDKV35a/component/common/api/wifi_api_scan.c @@ -29,7 +29,13 @@ #include "ethernet_mii/ethernet_mii.h" #endif -#include "wlan_lib.h" +#if 1 +#include "drv_types.h" // or #include "wlan_lib.h" +#else +#include "wifi_constants.h" +#include "wifi_structures.h" +#include "wlan_lib.h" // or #include "drv_types.h" +#endif #include "flash_eep.h" #include "feep_config.h" @@ -39,93 +45,78 @@ #include "wifi_user_set.h" /****************************************************** - * Constants + * ******************************************************/ -#define SCAN_USE_SEMAPHORE 0 -#define MAX_AP_SIZE 64 + +web_scan_handler_t web_scan_handler_ptr; + +/* -------- WiFi Scan ------------------------------- */ +volatile uint8_t scan_end; extern internal_scan_handler_t scan_result_handler_ptr; void wifi_scan_each_report_hdl(char* buf, int buf_len, int flags, void* userdata); -/* - xQueueWiFiScan = xQueueCreate(25, sizeof(rtw_scan_result_t)); // Create a queue... - if(xQueueWebSrv) { -*/ -LOCAL void _wifi_scan_done_hdl(char* buf, int buf_len, int flags, void* userdata) { - int i = 0; - internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; - rtw_scan_handler_result_t scan_result_report; +LOCAL void _wifi_scan_done_hdl(char* buf, int buf_len, int flags, void* userdata); - for (i = 0; i < pscan_rec->scan_cnt; i++) { - rtw_memcpy(&scan_result_report.ap_details, - pscan_rec->pap_details[i], - sizeof(rtw_scan_result_t)); - scan_result_report.scan_complete = pscan_rec->scan_complete; - scan_result_report.user_data = pscan_rec->user_data; - (*pscan_rec->gscan_result_handler)(&scan_result_report); +void wifi_set_timer_scan(int ms) { + if(web_scan_handler_ptr.flg) { + if(xTimerChangePeriod(web_scan_handler_ptr.timer, ms, portMAX_DELAY) != pdPASS) { + error_printf("Error xTimerChangePeriod\n"); + } } - - pscan_rec->scan_complete = RTW_TRUE; - scan_result_report.scan_complete = RTW_TRUE; - (*pscan_rec->gscan_result_handler)(&scan_result_report); - - rtw_free(pscan_rec->ap_details); - rtw_free(pscan_rec->pap_details); -#if SCAN_USE_SEMAPHORE - rtw_up_sema(&pscan_rec->scan_semaphore); -#else - pscan_rec->scan_running = 0; -#endif - wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl); - wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl); +} +/* -------- WiFi Scan Close ------------------------- */ +void wifi_close_scan(void) +{ + internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; + web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; + printf("Close scan rec\n"); + if(pscan_rec->scan_running) { + wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl); + wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl); + if(pscan_rec->ap_details) rtw_free(pscan_rec->ap_details); + rtw_memset((void *) pscan_rec, 0, sizeof(internal_scan_handler_t)); + } + if(pwscn_rec->flg) { + if(pwscn_rec->timer) xTimerDelete(pwscn_rec->timer, portMAX_DELAY); + if(pwscn_rec->ap_details) rtw_free(pwscn_rec->ap_details); + rtw_memset(pwscn_rec, 0, sizeof(web_scan_handler_t)); + } +// pscan_rec->scan_complete = 1; +} +/* -------- WiFi Scan Done ------------------------- */ +LOCAL void _wifi_scan_done_hdl(char* buf, int buf_len, int flags, void* userdata) { + internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; + web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; + if(pscan_rec->gscan_result_handler) { + // сторонний вывод + (*pscan_rec->gscan_result_handler)(pscan_rec); + } + else { + // оставить структуру pscan_rec->pap_details[i] для вывода в web scan на 5 сек + if(pwscn_rec->flg && pscan_rec->scan_cnt) { + debug_printf("\nScan done, wait read rec\n"); + if(xTimerChangePeriod(pwscn_rec->timer, 5000, portMAX_DELAY) != pdPASS) { +// error_printf("Error xTimerChangePeriod\n"); + } else { + if(pwscn_rec->ap_details) rtw_free(pwscn_rec->ap_details); + pwscn_rec->ap_details = pscan_rec->ap_details; + pwscn_rec->ap_count = pscan_rec->scan_cnt; + wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl); + wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl); + rtw_memset((void *) pscan_rec, 0, sizeof(internal_scan_handler_t)); + pwscn_rec->flg = 2; + } + return; + }; + } + wifi_close_scan(); return; } -/* -------- WiFi Scan ------------------------------- */ -LOCAL int _wifi_scan(rtw_scan_type_t scan_type, rtw_bss_type_t bss_type) { - int ret; - scan_buf_arg * pscan_buf; - u16 flags = scan_type | (bss_type << 8); - wifi_reg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl, NULL); - return wext_set_scan(WLAN0_NAME, NULL, 0, flags); -} - -/* -------- WiFi Scan ------------------------------- */ +/* -------- WiFi Scan Start ------------------------- */ LOCAL int _wifi_scan_networks(rtw_scan_result_handler_t results_handler) { internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; -#if SCAN_USE_SEMAPHORE - rtw_bool_t result; - if(NULL == pscan_rec->scan_semaphore) - rtw_init_sema(&pscan_rec->scan_semaphore, 1); - - pscan_rec->scan_start_time = rtw_get_current_time(); - /* Initialise the semaphore that will prevent simultaneous access - cannot be a mutex, since - * we don't want to allow the same thread to start a new scan */ - result = (rtw_bool_t)rtw_down_timeout_sema(&pscan_rec->scan_semaphore, SCAN_LONGEST_WAIT_TIME); - if ( result != RTW_TRUE ) - { - /* Return error result, but set the semaphore to work the next time */ - rtw_up_sema(&pscan_rec->scan_semaphore); - return RTW_TIMEOUT; - } -#else - if (pscan_rec->scan_running) { - int count = 100; - while (pscan_rec->scan_running && count > 0) { - rtw_msleep_os(20); - count--; - } - if (count == 0) { - printf("[%d]WiFi: Scan is running. Wait 2s timeout.\n", - rtw_get_current_time()); - return RTW_TIMEOUT; - } - } - pscan_rec->scan_start_time = rtw_get_current_time(); - pscan_rec->scan_running = 1; -#endif - pscan_rec->gscan_result_handler = results_handler; pscan_rec->max_ap_size = MAX_AP_SIZE; pscan_rec->ap_details = (rtw_scan_result_t*) rtw_zmalloc(MAX_AP_SIZE * sizeof(rtw_scan_result_t) + MAX_AP_SIZE * sizeof(rtw_scan_result_t*)); @@ -133,19 +124,19 @@ LOCAL int _wifi_scan_networks(rtw_scan_result_handler_t results_handler) { pscan_rec->pap_details = (rtw_scan_result_t**) (&pscan_rec->ap_details[MAX_AP_SIZE]); pscan_rec->scan_cnt = 0; pscan_rec->scan_complete = RTW_FALSE; - pscan_rec->user_data = NULL; // ????????? - - if (_wifi_scan(RTW_SCAN_COMMAMD << 4 | RTW_SCAN_TYPE_ACTIVE, RTW_BSS_TYPE_ANY) == RTW_SUCCESS) { + pscan_rec->user_data = NULL; + wifi_reg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl, NULL); + wifi_reg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl, NULL); + if(wext_set_scan(WLAN0_NAME, NULL, 0, RTW_SCAN_TYPE_ACTIVE | (RTW_SCAN_COMMAMD << 4) | (RTW_BSS_TYPE_ANY << 8)) == RTW_SUCCESS) { return RTW_SUCCESS; - }; - rtw_free((u8*)pscan_rec->ap_details); + } }; - rtw_memset((void *) pscan_rec, 0, sizeof(internal_scan_handler_t)); + wifi_close_scan(); return RTW_ERROR; } -/* -------- WiFi Scan ------------------------------- */ -#define scan_channels 14 -/* -------- WiFi Scan ------------------------------- */ + +/* -------- wext_set_pscan_channels ----------------- */ + LOCAL int wext_set_pscan_channels(void) { struct iwreq iwr; int ret = -1; @@ -153,21 +144,18 @@ LOCAL int wext_set_pscan_channels(void) { int i = 0; rtw_memset(&iwr, 0, sizeof(iwr)); //Format of para:function_name num_channel chan1... pscan_config1 ... - iwr.u.data.length = (scan_channels + scan_channels + 1) + 12; - para = pvPortMalloc((scan_channels + scan_channels + 1) + 12); //size:num_chan + num_time + length + function_name + iwr.u.data.length = (SCAN_CHANNELS + SCAN_CHANNELS + 1) + 12; + para = rtw_malloc(iwr.u.data.length); //size:num_chan + num_time + length + function_name iwr.u.data.pointer = para; if (para != NULL) { - //Cmd - rtw_memcpy((char*) para, "PartialScan", 12); - //length - *(para + 12) = scan_channels; - for (i = 0; i < scan_channels; i++) { + rtw_memcpy((char*) para, "PartialScan", 12); //Cmd + *(para + 12) = SCAN_CHANNELS; // length + for (i = 0; i < SCAN_CHANNELS; i++) { *(para + 13 + i) = i + 1; - *((__u16 *) (para + 13 + scan_channels + i)) = PSCAN_ENABLE; + *((__u16 *) (para + 13 + SCAN_CHANNELS + i)) = PSCAN_ENABLE; } - ret = iw_ioctl(WLAN0_NAME, SIOCDEVPRIVATE, &iwr); - vPortFree(para); + rtw_free(para); } #if CONFIG_DEBUG_LOG > 3 else { @@ -176,49 +164,38 @@ LOCAL int wext_set_pscan_channels(void) { #endif return ret; } + /* -------- WiFi Scan ------------------------------- */ -LOCAL volatile uint8_t scan_end; -/* -------- WiFi Scan ------------------------------- */ -LOCAL rtw_result_t _scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) +rtw_result_t api_wifi_scan(api_scan_result_handler_t scan_result_cb) { - if (malloced_scan_result->scan_complete != RTW_TRUE) { - rtw_scan_result_t* record = &malloced_scan_result->ap_details; - record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ - if(scan_end == 1) { - printf("\nScan networks:\n\n"); - printf("N\tType\tMAC\t\t\tSignal\tCh\tWPS\tSecyrity\tSSID\n\n"); - }; - printf("%d\t", scan_end++); - printf("%s\t", (record->bss_type == RTW_BSS_TYPE_ADHOC)? "Adhoc": "Infra"); - printf(MAC_FMT, MAC_ARG(record->BSSID.octet)); - printf("\t%d\t", record->signal_strength); - printf("%d\t", record->channel); - printf("%d\t", record->wps_type); - { - uint8 * s = rtw_security_to_str(record->security); - printf("%s\t", s); - if(strlen(s) < 8) printf("\t"); - } - printf("%s\n", record->SSID.val); - } else { - scan_end = 0; - printf("\n"); - } - return RTW_SUCCESS; -} -/* -------- WiFi Scan ------------------------------- */ -void api_wifi_scan(void) -{ - scan_end = 1; - if(wext_set_pscan_channels() < 0){ - error_printf("ERROR: wifi set partial scan channel fail\n"); - } else if(_wifi_scan_networks(_scan_result_handler) != RTW_SUCCESS){ - error_printf("ERROR: wifi scan failed\n"); - } else { + internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; + web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; + if ((!pscan_rec->scan_running) + && (!pwscn_rec->flg)) { + pscan_rec->scan_running = 1; + rtw_memset(pwscn_rec, 0, sizeof(web_scan_handler_t)); + pwscn_rec->flg = 1; + debug_printf("\nStart scan...\n"); + pwscn_rec->timer = xTimerCreate("webscan", 2500, pdFALSE, NULL, (TimerCallbackFunction_t)wifi_close_scan); + if(!pwscn_rec->timer) { +// error_printf("Error xTimerCreate\n"); + } else if(xTimerStart(pwscn_rec->timer, portMAX_DELAY) != pdPASS) { +// error_printf("Error xTimerStart\n"); + } else if(wext_set_pscan_channels() < 0) { +// error_printf("ERROR: wifi set partial scan channel fail\n"); + } else if(_wifi_scan_networks(scan_result_cb) != RTW_SUCCESS) { +// error_printf("ERROR: wifi scan failed\n"); + } else if(scan_result_cb) { int i = 300; - while(i-- && scan_end) { + while(i-- && pscan_rec->scan_running) { vTaskDelay(10); }; - }; + return RTW_SUCCESS; + } else + return RTW_SUCCESS; + wifi_close_scan(); + return RTW_ERROR; + }; + return RTW_TIMEOUT; } diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h index 8457298..d42628f 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/hal_intf.h @@ -234,7 +234,7 @@ struct hal_ops { void (*disable_interrupt)(_adapter *padapter); s32 (*interrupt_handler)(_adapter *padapter); - void (*clear_interrupt)(_adapter *padapter); +//pvvx void (*clear_interrupt)(_adapter *padapter); // нету в SDK ! #ifdef CONFIG_WOWLAN void (*disable_interrupt_but_cpwm2)(_adapter *padapter); diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h index b504f25..4d14c3d 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h @@ -480,16 +480,16 @@ typedef struct _RT_CHANNEL_INFO extern int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const u32 channel_num, int *pchannel_idx); -#ifdef CONFIG_CUSTOM_IE -#ifndef _CUS_IE_ -#define _CUS_IE_ -typedef struct _cus_ie +//#ifdef CONFIG_CUSTOM_IE +//#ifndef _CUS_IE_ +//#define _CUS_IE_ +typedef struct __cus_ie { u8 *ie; u8 type; -}rtw_custom_ie_t, *p_rtw_custom_ie_t; -#endif /* _CUS_IE_ */ -#endif +}_rtw_custom_ie_t, *_p_rtw_custom_ie_t; +//#endif /* _CUS_IE_ */ +//#endif struct mlme_ext_priv { @@ -563,7 +563,7 @@ struct mlme_ext_priv #endif u8 partial_scan; #ifdef CONFIG_CUSTOM_IE - p_rtw_custom_ie_t cus_ven_ie; + _p_rtw_custom_ie_t cus_ven_ie; u8 ie_num; #endif diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h index 5044832..2ecfeee 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_lib.h @@ -364,7 +364,7 @@ typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *); struct _NDIS_802_11_SSID { - uint32_t SsidLength; + uint32_t SsidLength; //+164 uint8_t Ssid[36]; }; typedef struct _NDIS_802_11_SSID NDIS_802_11_SSID; @@ -422,7 +422,7 @@ struct _WLAN_BSSID_EX { uint32_t Length; NDIS_802_11_MAC_ADDRESS MacAddress; uint8_t Reserved[2]; - NDIS_802_11_SSID Ssid; + NDIS_802_11_SSID Ssid; // +164 uint32_t Privacy; NDIS_802_11_RSSI Rssi; NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; @@ -514,21 +514,21 @@ enum _RT_SCAN_TYPE //: sint32_t typedef enum _RT_SCAN_TYPE RT_SCAN_TYPE; struct mlme_priv { - _lock lock; - sint fw_state; - uint8_t bScanInProcess; - uint8_t to_join; - uint8_t *nic_hdl; - _list *pscanned; - _queue free_bss_pool; - _queue scanned_queue; - uint8_t *free_bss_buf; - uint16_t num_of_scanned; - uint8_t *scan_buf; - uint32_t scan_buf_len; - uint16_t scan_cnt; - uint16_t scan_type; - NDIS_802_11_SSID assoc_ssid; + _lock lock; //+12 + sint fw_state; //+16 + uint8_t bScanInProcess; //+20 + uint8_t to_join; //+21 + uint8_t *nic_hdl; //+24 + _list *pscanned; //+28 + _queue free_bss_pool; //+32 + _queue scanned_queue; //+44 + uint8_t *free_bss_buf; //+56 + uint16_t num_of_scanned; //+60 + uint8_t *scan_buf; //+64 + uint32_t scan_buf_len; //+68 + uint16_t scan_cnt; //+72 + uint16_t scan_type; //+74 + NDIS_802_11_SSID assoc_ssid; //+76 uint8_t assoc_bssid[6]; struct wlan_network cur_network; uint32_t scan_interval; @@ -687,7 +687,7 @@ struct mlme_ext_priv { //__attribute__((packed))? uint8_t mlmeext_init; struct atomic_t event_seq; uint16_t mgnt_seq; - uint8_t cur_channel; + uint8_t cur_channel; // padapter+1270 uint8_t cur_bwmode; uint8_t cur_ch_offset; uint8_t cur_wireless_mode; @@ -845,7 +845,7 @@ struct _atr_aligned8_ recv_priv { uint16_t rxbuffersize; uint8_t is_signal_dbg; uint8_t signal_strength_dbg; - int8_t rssi; + int8_t rssi; // +2932 int8_t rxpwdb; uint8_t signal_strength; uint8_t signal_qual; @@ -1980,7 +1980,7 @@ struct hal_ops { struct _atr_aligned4_ _ADAPTER { uint16_t HardwareType; uint16_t interface_type; //+2 - uint32_t work_mode; + uint32_t work_mode; //+4 struct dvobj_priv *dvobj; //+8 struct mlme_priv mlmepriv; //+12 [1244] struct mlme_ext_priv mlmeextpriv; //+1256 [912] diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h index 32e9006..e1f9fde 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wifi_structures.h @@ -125,7 +125,7 @@ typedef struct rtw_scan_handler_result { * @brief The structure is used to store the WIFI setting gotten from WIFI driver. */ typedef struct rtw_wifi_setting { - rtw_mode_t mode; + rtw_mode_t mode; unsigned char ssid[33]; unsigned char channel; rtw_security_t security_type; diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_bssdef.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_bssdef.h index 8701d02..2c86f31 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_bssdef.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_bssdef.h @@ -617,7 +617,7 @@ typedef struct _WLAN_BSSID_EX u8 Reserved[1]; //[0]: IS beacon frame u8 bP2pNetwork; #else - u8 Reserved[2]; //[0]: IS beacon frame + u8 Reserved[2]; //[0]: IS beacon frame (padapter+163) #endif NDIS_802_11_SSID Ssid; u32 Privacy; diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h index 0c5936b..33364c2 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/include/wlan_lib.h @@ -254,7 +254,7 @@ extern struct sk_buff *rltk_wlan_alloc_skb(unsigned int total_len); extern void rltk_wlan_send_skb(int idx, struct sk_buff *skb); extern void rltk_netif_rx(struct sk_buff *skb); extern int rltk_del_station(const char *ifname, u8 *hwaddr); -extern int rltk_get_auto_chl(const char *ifname, u8 *channel_set, int channel_num, int a4); +extern int rltk_get_auto_chl(const char *ifname, u8 *channel_set, int channel_num); extern int rltk_set_tx_power_percentage(rtw_tx_pwr_percentage_t power_percentage_idx); extern int rltk_wlan_control(unsigned long cmd, void *data); extern unsigned char rltk_wlan_running(unsigned char idx); diff --git a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/wireless.h b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/wireless.h index d21e683..c874909 100644 --- a/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/wireless.h +++ b/RTL00_SDKV35a/component/common/drivers/wlan/realtek/src/osdep/wireless.h @@ -512,13 +512,13 @@ typedef long long __i64; #define IW_QUAL_QUAL_UPDATED 0x01 /* Value was updated since last read */ #define IW_QUAL_LEVEL_UPDATED 0x02 #define IW_QUAL_NOISE_UPDATED 0x04 -#define IW_QUAL_ALL_UPDATED 0x07 -#define IW_QUAL_DBM 0x08 /* Level + Noise are dBm */ +#define IW_QUAL_ALL_UPDATED 0x07 +#define IW_QUAL_DBM 0x08 /* Level + Noise are dBm */ #define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ #define IW_QUAL_LEVEL_INVALID 0x20 #define IW_QUAL_NOISE_INVALID 0x40 -#define IW_QUAL_RCPI 0x80 /* Level + Noise are 802.11k RCPI */ -#define IW_QUAL_ALL_INVALID 0x70 +#define IW_QUAL_RCPI 0x80 /* Level + Noise are 802.11k RCPI */ +#define IW_QUAL_ALL_INVALID 0x70 /* Frequency flags */ #define IW_FREQ_AUTO 0x00 /* Let the driver decides */ @@ -567,7 +567,7 @@ typedef long long __i64; #define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */ /* Retry limits and lifetime flags available */ -#define IW_RETRY_ON 0x0000 /* No details... */ +#define IW_RETRY_ON 0x0000 /* No details... */ #define IW_RETRY_TYPE 0xF000 /* Type of parameter */ #define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/ #define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */ @@ -631,10 +631,10 @@ typedef long long __i64; #define IW_AUTH_WPA_VERSION_WPA2 0x00000004 /* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ -#define IW_AUTH_CIPHER_NONE 0x00000001 +#define IW_AUTH_CIPHER_NONE 0x00000001 #define IW_AUTH_CIPHER_WEP40 0x00000002 -#define IW_AUTH_CIPHER_TKIP 0x00000004 -#define IW_AUTH_CIPHER_CCMP 0x00000008 +#define IW_AUTH_CIPHER_TKIP 0x00000004 +#define IW_AUTH_CIPHER_CCMP 0x00000008 #define IW_AUTH_CIPHER_WEP104 0x00000010 /* IW_AUTH_KEY_MGMT values (bit field) */ @@ -644,7 +644,7 @@ typedef long long __i64; /* IW_AUTH_80211_AUTH_ALG values (bit field) */ #define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 #define IW_AUTH_ALG_SHARED_KEY 0x00000002 -#define IW_AUTH_ALG_LEAP 0x00000004 +#define IW_AUTH_ALG_LEAP 0x00000004 /* IW_AUTH_ROAMING_CONTROL values */ #define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ @@ -666,15 +666,15 @@ typedef long long __i64; /* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */ #define IW_MICFAILURE_KEY_ID 0x00000003 /* Key ID 0..3 */ -#define IW_MICFAILURE_GROUP 0x00000004 +#define IW_MICFAILURE_GROUP 0x00000004 #define IW_MICFAILURE_PAIRWISE 0x00000008 #define IW_MICFAILURE_STAKEY 0x00000010 -#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported) +#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported) */ /* Bit field values for enc_capa in struct iw_range */ -#define IW_ENC_CAPA_WPA 0x00000001 -#define IW_ENC_CAPA_WPA2 0x00000002 +#define IW_ENC_CAPA_WPA 0x00000001 +#define IW_ENC_CAPA_WPA2 0x00000002 #define IW_ENC_CAPA_CIPHER_TKIP 0x00000004 #define IW_ENC_CAPA_CIPHER_CCMP 0x00000008 @@ -698,8 +698,8 @@ typedef long long __i64; /* Modulations bitmasks */ #define IW_MODUL_ALL 0x00000000 /* Everything supported */ -#define IW_MODUL_FH 0x00000001 /* Frequency Hopping */ -#define IW_MODUL_DS 0x00000002 /* Original Direct Sequence */ +#define IW_MODUL_FH 0x00000001 /* Frequency Hopping */ +#define IW_MODUL_DS 0x00000002 /* Original Direct Sequence */ #define IW_MODUL_CCK 0x00000004 /* 802.11b : 5.5 + 11 Mb/s */ #define IW_MODUL_11B (IW_MODUL_DS | IW_MODUL_CCK) #define IW_MODUL_PBCC 0x00000008 /* TI : 5.5 + 11 + 22 Mb/s */ @@ -714,8 +714,8 @@ typedef long long __i64; #define IW_MODUL_CUSTOM 0x40000000 /* Driver specific */ /* Bitrate flags available */ -#define IW_BITRATE_TYPE 0x00FF /* Type of value */ -#define IW_BITRATE_UNICAST 0x0001 /* Maximum/Fixed unicast bitrate */ +#define IW_BITRATE_TYPE 0x00FF /* Type of value */ +#define IW_BITRATE_UNICAST 0x0001 /* Maximum/Fixed unicast bitrate */ #define IW_BITRATE_BROADCAST 0x0002 /* Fixed broadcast bitrate */ /****************************** TYPES ******************************/ @@ -772,7 +772,7 @@ struct iw_freq struct iw_quality { __u8 qual; /* link quality (%retries, SNR, - %missed beacons or better...) */ + %missed beacons or better...) */ __u8 level; /* signal level (dBm) */ __u8 noise; /* noise level (dBm) */ __u8 updated; /* Flags to know if updated */ @@ -988,7 +988,7 @@ union iwreq_data struct iw_param txpower; /* default transmit power */ struct iw_param rts; /* RTS threshold threshold */ struct iw_param frag; /* Fragmentation threshold */ - __u32 mode; /* Operation mode */ + __u32 mode; /* Operation mode */ struct iw_param retry; /* Retry limits & lifetime */ struct iw_point encoding; /* Encoding stuff : tokens */ diff --git a/RTL00_SDKV35a/component/common/mbed/hal_ext/flash_eep.h b/RTL00_SDKV35a/component/common/mbed/hal_ext/flash_eep.h index 4a2d7a9..18604ca 100644 --- a/RTL00_SDKV35a/component/common/mbed/hal_ext/flash_eep.h +++ b/RTL00_SDKV35a/component/common/mbed/hal_ext/flash_eep.h @@ -31,9 +31,9 @@ extern "C" { enum eFMEMORY_ERRORS { FMEM_NOT_FOUND = -1, // -1 - не найден FMEM_FLASH_ERR = -2, // -2 - flash rd/wr/erase error - FMEM_ERROR = -3, // -3 - error - FMEM_OVR_ERR = -4, // -4 - переполнение FMEMORY_SCFG_BANK_SIZE - FMEM_MEM_ERR = -5 // -5 - heap alloc error + FMEM_ERROR = -3, // -3 - error + FMEM_OVR_ERR = -4, // -4 - переполнение FMEMORY_SCFG_BANK_SIZE + FMEM_MEM_ERR = -5 // -5 - heap alloc error }; //----------------------------------------------------------------------------- // extern QueueHandle_t flash_mutex; diff --git a/RTL00_SDKV35a/component/common/network/dhcp/dhcps.c b/RTL00_SDKV35a/component/common/network/dhcp/dhcps.c index e183a8c..ad5be28 100644 --- a/RTL00_SDKV35a/component/common/network/dhcp/dhcps.c +++ b/RTL00_SDKV35a/component/common/network/dhcp/dhcps.c @@ -521,7 +521,7 @@ void dhcps_init(struct netif * pnetif) memset(&ip_table, 0, sizeof(struct table)); if((dhcps_ip4addr_pool_end | dhcps_ip4addr_pool_start) == 0) { - dhcps_ip4addr_pool_start = 1; + dhcps_ip4addr_pool_start = 2; dhcps_ip4addr_pool_end = 255; } diff --git a/RTL00_SDKV35a/component/os/freertos/freertos_service.c b/RTL00_SDKV35a/component/os/freertos/freertos_service.c index 2d91563..b8c68eb 100644 --- a/RTL00_SDKV35a/component/os/freertos/freertos_service.c +++ b/RTL00_SDKV35a/component/os/freertos/freertos_service.c @@ -622,12 +622,14 @@ _timerHandle _freertos_timerCreate( const signed char *pcTimerName, if(xTimerPeriodInTicks == TIMER_MAX_DELAY) { xTimerPeriodInTicks = portMAX_DELAY; } +// printf("xTimerCreate: %s, %u, %u, %p\n", pcTimerName, xTimerPeriodInTicks, uxAutoReload, pxCallbackFunction); return xTimerCreate((const char *)pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction); } u32 _freertos_timerDelete( _timerHandle xTimer, osdepTickType xBlockTime ) { +// printf("xTimerDelete: %p\n", xTimer); return (u32)xTimerDelete(xTimer, xBlockTime); } diff --git a/build/bin/ota.bin b/build/bin/ota.bin index 493449b456607656a9c3324c97a3c0396ea4bee1..deb8174d738cd6fd43ba0b41a0e03d1635bc62b2 100644 GIT binary patch delta 33799 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 delta 33031 zcmZsD349dA^8fVg>}In$m>h(VgfP2-m;=HlKnUS51RQd3i#$ZcaEQwxM(~fp=Of`1 z6%`p^5D>#51_Vq9Ap{A*<9YBD69MJal|xQ-g22q)|8MUGug~w3Po=x7yQ{0KtGlbK zd$xLSD%~8>%BP;yWVv8eE@?XDEjQm7tz-Du5{93; zisRq@onfqZIeza{X$Q$RO|Bq(C%~KK($8ca+u)TJvSYH}@un|e($(fFTT&sh8kJ|X zAGM_wL87hpti~|eN#Cw;F5bg!al_O&X>XOl#Yk z+_*}bubW16(m7pMc8gPDxwN>1vmDP8hFJ>sQu7$*1C)Jt3d7g0l0@!jL+N&opI%j) zrQb&qUqw8(D!@Hg!sHnNB>>v9%I&pmkf<}zGV$A`5vDQz=)Y(*SF)R8{mI_jC9f&p zAN^sQB!(P_+=KE0Xi{3CpmTD&6dt-zpk#*sA5GCB{JR`4@gWxJcxbqvlxLfCG4utt z;N99uVHa68^Jr~8e~*MuKshRCTBrHlS}}48iHX}0z>P#m+5QZn;l0`;Q3F}_>GvdW z`xry{dmO*vJt;0`v*}wzDFx*{>EoDOc2!!fH)b`7T$!flXDkSas}&+!l_qVCeVsLa zC1rJ7OiLZ;m`oz?4{FPNhVK|C^=n)PvZciMxwO>k_#yf$1884qPtv~9@dbc=cbW2ebp|n1Y%lgbO@s*LsDnw` zqjAFH`5W#Jf=xAlSf5wbrAbA3d;#1TV2{1AS@kEj$;$LOE;2#W;=D4 zzJ1_0D|DB(ri?SqL?h1v7JMbKsnfZh%6C3#cB;TLLg~=3V!kfk7FNKfhZRagUhfup ztGk}Jp5yoeKnmiU&P$75&xviP$Uc4b;~MAc2IL}88#PtW_g*D^`+73xQ}1{r_v;C) z?VJ?%Msm4Nt#&gF8H0_z4(E@&@sR#ji&caK7TG|vv@T{CBdl>Sqj+VOrZXEvM&Om_ zG{!8H8I)u%CuaIFvoy9_L`!H$M2$C4J?YTH{S6H4O#txF4PF$xLueCk0T zYagljtfh_UOe5tt+Nv+-bI_1hrx$tUv_>1~uJ9hArfY#u&GIsW)|fOb$rj&WP+oG9 zq@)saF(Y&;F(}`9ZYDmFpDK=280LvV-IW9vm)QNBu6ta8vBjj^^`?phlp=s-&zkKf zCCEo9f8f$}XIp5_E*DLobC(x1@X98wBEI^r^O@i?A!t_h1lx1O?#kD0CPiu1*`v|t z|2eK+6-2G^6$rBzIH!^yYt{4HknVonH^@Aqw~guEzeO09DyE1=CCK4ZzwypZTB>DR zmumB^nTS1ajVu09E31$k3==!DW3kn;t<_jgmTG;3uQg*uT<6!WRWjVo3f`oQ^F|ia zVv)tbk+{w%NCG*9UO_Y|75@KAyd0*HNh$Y|q@E=lRoq29n1WdS>M&p~;qxHfP3Jj& zJi@wA!W&aoH0cGl_+d?8N{2E{Y~^`r!W)S(l_+DZ^Qpi10(r(prpb6-di{+=XvjE^ z&aX~P6D38-*Q4J`-D}l8b%-~+INrwgBk5C5_a5H6crDoOJ)-w813D65+@yTrS)GOHgbGSAuCDlmE_rQFxGC`gR5 z4OUoPREe>nXO|#55zQbG;^}7p0)ul!)9p+wFenucCME7dheBPIPtEjHHN+LO7RpXs zX~*Jr7C%F!;fmn%sVjW#i`OsU6+IKu>{B1{8ttV2nU)C9{K?HeKZ%dQwm`hXu)rY)A=_xSI;Yb^*jT7*w;GgjW;?$a(mtPCD*3!yzsS- zx7IC#ZB*n|ScA~|OB>}t%XEV7zeRoN=A@pFb)^-8)srik;4i+HK2Xnp{W9ZU zKdOf`wEEJq6 z^QmEOVS!#zd_qmf;)H^Z3w$c)j)&yf)Zk`aD%(s_jV;9PQ}=j%>cc)gVpU$&9$nxo zR~6UPvcWaP5+O!FKTbLL8Xiquagi>ZopfQ8SKNAKKjd)QEr_L!w09HQdNvDT!DK!E zCcj&-1Bso64z({sZw1 z0U;{N&UF|WFz~J`s)$KiO-E3gYGYfcF+^fp1sx+L+4RaVm#rc6F9YRvLpq*V4AcL- zjPj715$IIs^V%tyn4}kWbN->CZSi$s!@>&8koR*gu2m=}bUAy*Wu9X~ILoz0o5=?w zHXX59d{9Av&nG@)n&?=YkL&mhz=ME?0X6_%7db4_PjDFOJjGM#4W*<>JH+xqIUM0Y zE=(acwE1 zgd<&(%fb+byUYtHd6Vm>GD_Uwn!JE^iFIvRaK8ojAu55dLFWfRD}XJBrnU!k0rUp& zbs@tRTd;XSKXCPjK1(+?PPy#;QDYV}DU9+(#o&9ELwVuK8B8&2 z1FTHzcqXs)(~21dO?JjS^3IqsKJ|oCN=%zrKEg9fB+5khc#%^Ey2rtQAnBzoTV_nR z<=E!OWr4#toO$>9>Ne*;c>c4yx+$hCcC~IbQC@ej8+4d^{DsnnGiZSH{1X53ZqMz> z2&}{@r9O5e>8G`X+gUNk79m=P=p+{P4r!>jF=hy8vQj=PInqMNGD)AF9?{;@&ENWt z7PClsS}P4o?^vGU$rM?!L$SGF{m{!-M~jrt^R6GS(h`DGK11#*&AuXIz65g2W%S z{;LfwRIqg9eyAufNVHqAw-57D+#b!sJjxhO1y>oBwXOxlL|g#z@D}6F98joojIW{L zza5ghTVhd=GS8KQah&K#g(PXlELVhOMj?$&cTpW2=`gqDOoC=k^XEM3VtO3Cy|w~f zm}~aedci48>wbV#Nbwn&QFz?6gCl`0IsKKc<)O z`cBnWUuBq%tP`w-y%4@sUf~ z+#@^fEJ)r1VAJ9~2{AIS6;ouAEA;2&(3ygeqy?sng~N_u~Pwegzv2Gc}Uf@;DS z=cT#UvvIz3k*OuXMtlQhBE{vn%F>k@wE|+X)^!?2 zH{+|mq!sbQ2iI06c-476>7Lcfg)6`Nq_oV8WGXgF{|V5hqNDtlA>L^X!+-Rxj$e%U zjuvTQrj_@qXS|$!aJr$TOMzEC;gybLTFSlZQE$o$uj+uoTm|}fy>#WV#HNT|^@`hG zlPX3RWNK`BNkV79jx<3y%4oRAzwBM*|E?a~*|bF_q8U~4Evu-V92 zzQBk@kuT6IH#EK>?{@bXqdg3a#d{6*^s=NHy1M-CAOp1)!OwJfx$<3u0eed+1QrbL zPeBCVfPvRGGQ1OE)Cp>3>1HphCg~hKB(U9wk8akL>4r=wO@~_OThc)OmM0beuX|F< zQVPD@SDbKeUwWxm{mGMDoLuzN%;W-+8rl>gcEm7!4{P-SW{uXx%C1_YB{St~v?PHb z+7(C(&#X!Sq5pdJJ5u;~#EyEl%!)>M*fV)nB*KFpVU|yQNYjf1mWWra_Rz7v?g>g^ zPxDAuc_t^cL%7|evxgU?fr)oKj6f|h+Oc8i%p}0;01=RPLRZeejL4d`9RC`^Y>DIP zoDG3tQd&2#cyo1}O)o|&Y`ah~QS8vn?#zW~w`!{z*qwb4yQ}q~#|u8YSa)+#gt61n zvR4-rEeKw~tm+9Srg(bV&INTi#qPAC>`VSy8Hkb!#I@G1loW6xei_Gcbt-y5alO z^#^HLlA_`C-%c!l>_VaKO$TFrFkRPz#R&yQG^7p_pwnJ8$irp`&9IUf%z3w76f6z4 z%2==JatCz}xnM5VWh6~cZx)I*%Fw>hjHu@J$XOT2$p|gKkTV00o}v1Tr8qSho6BZY4K)=n(PlAvf3=xbJu1(#`c$36 zSR8AkEaoYM@u|HJYK_#~;M z&4OjvPJfRicc7Oqxr0*3g`{GG-PjoL!o0udH zvXGqFapF^qskv&#(V;Klq=@4fxW_pV|DUqz@ZW}>9ERxy4$+%Dg@tH8YoZ5UYE{y{ z1o|OO=wm6DoSc1y&4A&HP@Z;1C=E_JghZrE-33@2wA-neE+mDo<1o;)BqtI(mc8e^ z>THcJjC>x!$uj1Mf6#Nd%!++k%1e!;Etb{D!zS$Qp<}Y&HS!Kq8m64a>Yh>qyYOMB zS@ch8Z0upm(>`q9C1J{!$gV(knA3zx8(hKoFT2d55ut>Vw8=1KToc`xsAhiiCdUr| zlcCVqqEpg{9D$wdl1g(D*(ok*RZdLkIG05nBwFb@qDlL5az^xWk=`0Cfgn)Ka8(X@ zF#dm64Rj}d>AQT6SqNH70V@Edb)lj`(nrrD_(UwJ<)1f&l7Ww&ybXX0) zK?9r6Sc1&)m)aU+zti#Sfr~-7Jx6*yS15>cCfUZ@j5Xm(d&JiJV?4#pG}eSEAzr~2 zrWn1LWF>m|E*@jJQ&jr80xXPfIM>nzmc6s|m^CD}?##@mFNbTLg##g;ou>uQ^2W6~!z z>mYDirl)2tt}2NKV?qs+6o(BaTp5p2@1s<4Gc9pcd!RT4CE{(2w6k9X8|;t{_lp(6 zl;xfrF$3IRbeB#^u??R2?}jClDFMb7t~{Vgclu=uAsWGwr7VJe`Yv3h_R8Szbv*6V zV+dz|FBSFg#lELW75!tlFy*9A+R#5Pa;0|S>L<2AGc97rAvsVfvs3!4e{y1&veO4+ zmkDrLfrhvE_EKYP3Db1CyJQ+*r3PUC0dZZzl;?a_C<%2)bQCMVPL}rl)$|!QkQ^k& z4)Lm=JERu|Btx7debf&hAeje}Lw)-|QhAAz)WdKK9>ydIwvO1feOV0hJw5@1hs+4{ zGfe5>6U4wM>HH4SO*4GzWuFiiz!8k-`WdA|DXr2vCW*8r=s%gPn*!?xp1F|P&I2DI zh82*+{?pP652i&=dyV6B>hf<}hv-G-(OBrmI#=z%2fOIlqo<`G@_#UVaYn~;6Qqv^ zPcd+haeVCKwP{0s(6N<|)tU;X6I1C#jz2t!qC&Q!P!fpOt?XGzn2>XpzEB?Rfq`Ve_z6TIr=lGR?ZvcsJaQqa& z{{wz4;J<*gfNkgF;y^O&R zY-jPq;z$0dy;#9W>CZ=HgepOp{GkftO|r$#5o&^!FMUZioCl^0wqWHGA6*h2g7YQT zW>OBjq}k7Ri98QdbTyzP`=&F@qBo?i&rk0XtbB#D{GaL}1%De70+H&g}Z7DpS%Xo_E<>8VT z3;UKJeyuUpVA5j|+ZWQDE;v|+DtR91tFm5kZ=&D30hBSyke{(18UFYiQrv?o%+ zXF-}NsO{?NJgyZMq_JN*rQ-_{S;Zm!x?n#StSs|NJ6=dD|Cf`4XZd9Y268@8+~nH6 z45i7%+DR|2+x3>uv=tSkH{1RDmSANz&K%ksv`yOH;~t+6-ebmC$71hfi(^ZSjr0KV z6*l8y8&^bk_{@H>P1O3QUgl1yQ(9*#Fb%65YAOH>=X*b*3DU@acZ@7=KWzt&1JLx|&IT-xf1$bAG$C>9#z}!&)+L6GIfA=cdgj^3u&2 zBs)TyHDmqIn^#HFr4nAUiBpj(u`%Wl<+=xJ2*N8KCdp8!6Shrel-E66At%5I=!t~w zsGzNyD-8egWrpX9-zkST58Hu_ugS57C=o|Whf-!JQ|*DhR(?3$aAn z366ZcKdm-zYhW$G_OK!;zgDxDfNquR7UqZ zOpTf5^W_{LjD||l5Kb$ngNi#_a;$MBA<9>cdJtxtbihyof3K+3jTojEPil<45^Ls? z{G79sv?M;wHge^-mG${OT1L(sH?uxJy=9*xg{g6*2&?iFFHA_>hzl;$Ily5V(qw0Xa8&z$>sW8yqbc+V9eCO zbgJhMlAfPlO?ojuVMBhm5nD?-T&OM4wN?x!{ZegU#NTAKBgMKQU%ZfK2~jMbo-bzE z0wu<1NhLw{d7zeR!vUj$4^g5#O!77x?alZ^#=I!M!`U7nV-~<)DS9Bt`Q$vwynS^s z^MH-y1l?rACu!WRMfpQeNUSqIy6!onZ zCPZ244&R_piYk%33)4x7lvbX??$D&M<=N4%Yw)7m!&=7%M?=E2=|!5fxjcqlph*YH z`i?vRvG8J_LPjY;EW3~Z_ZVWm3R%R)xfo@y3w8>8=sa9NJ6!M2>;VOw z+8il8TQQvF+|tpC#IO+eU^}rG%uxl5@~d>SqT>KMU7E2Ru#CW%V9TZfp2pnz59U~V zfP>C6yI2#c|0Ed{v0j!$q%0qKld2 zOxO{Ln2A@Nk%d->WVJKGFUZ%OtiVHzufQd0vX7Js7sr>=Ua45%9z^fy1fPkJN`Oj& zN`Qz2eOq>zmgDP8%6~OzkMMxvahG6o>aTHTh)A(}I2ewMa^CZRGQow@5lY;`?c^^l ze4|M)DK{Ln&Lww2jY-+AG5)*E+h+^~j&jxK!A%D;PtnWF7M=f=0wra?qlr+aX?Lq=ul(40rjo`u1d5PXBH*cGK+QHqMM?{ z1c;#*u59jWNjE2BNiQ@C4>HO(4#tvN7!2-@Ids_h809#|b>O)toUgXh)MH?*&pE2R zNjMU}^-wI9Q-i2;E6lcVj7+9`MR`qWV<@%^Mw#NUh#~$h<8ep2XlZkxaVVB}cq=NfeuosJ z^zaYo{mn$HOC4qqx6NoLzFIS_>$Vx`HQj5Xg%IV0lMGO=4rmBb);Q^XrbD%OSloAG zg}_a>FlG8=92`gGC6{lTocvsfGSk&zcu7fYEs$gAPPWT|SZRnd$(2&FswPWh%uI5K z@{S`*WX-&=x8&E7-zNLiwZ0Y5>=avwQtrqoq3692?#p?*d79~( zlgFehOFQ>+sPo;4kjgwacA#`!GYd~kd;tp&2?KDbPr1#V;t)=SA=Q=dh}a|?T9*ms z4s{q%PxDkuhPpX>Bq~HAJ_yc=ZX^P+{7+R%g>5;y?*S#^Ln_Hq>HB4U+1Lyza`_k-}SwlvE{k_;BJ z7}greyrxB19qI(vwgpM)K`oaSW%j9$c|$Q0x1eWM5DxnbBklZ*7&3A3 zwieg1UfQ@74`^Pl4uz{Rpc@_s?P!pHB(lNk_9kv)Qb~Z#e-8as2XrTo>4iP73$0b| zrF~pS2g|3%w#nk}EFAZf_q4HK@Uy@$^u(0_ouUrXRTxsiLgjYQQNo1b8QyN{39W5k z6pE2ZaiqaOVztnb+wx6k9TQoNbdJ?@%=K9FkS*m}7(;sAzB-Kw>qYrdBCODy=seon z7W!ZT1D5Q;&7R`xg~6li{UWBRJ$&K+l+?c=c1nSxj7p#ZvBzMR?DhO#GMnb_ls>bZ zs_)w#Dzvw?7;91~Ev#S=649^re;J5j{tB^_xD08P1g2mGh%0|+!=E#(x4(2pS{kyY zlXVu_sDci~FjU_P?se=ruWo(*Na^KQGg-GL9ey>jobz88_Qa}j6_2BG8Zr@cYCUmP zh>JvFoIL~S+Zw%8Oh@dLzf3A(*V@YHg(3E2r0xDPNr-*oFGIJR@7l_Q3t4u$&>r`f zp-XFxrW0cuu%%_%j6xTCEKo=Nne7qV=Fh~GPY4!b{0r+oe_lJ}t<|JgRtgDY-1Mp2 zK8(mQz>ffC9oAGphjmiSYnISaco6a71&&Wvs*gxRUP~z-uHt$P&>iqUzy&}%Ar)8g zWAQXYr}T9b^UqhGv5ka@(N0JLKGALQ8#AnsYfqo~*uVAZ?Qw;#Q$pRHiW7^7^o&wI z7?Htenx4ePlA4jDM3x$qgA?503scH>nrv@ zoV0wyB(^t^e%@eVe_l-()x7JB%o6=~>ahr14Fiu*%>2QZT^`x{h5}wZkfck zxN6z0bBLj@o8iB7N%ObO1fAN8+s+d9El=%{cV8jwAVw;BZ&zeBxZe%f4_E_OZyW>>D0 zGIk$90qNJ>^Jy@B&s_G3K{~rJ0W}ckL_H(@FS?@c&ZuX~+p#-Wnm{ z0It#XxOB9Ms#@)j$C9v{ETgJBT~h8oYwSvxp})1n+TY5L!3L&>AB3$^)kQ98@xBsv ztgH6&zEQ-m9jsPmO1b;@87S>FnbPh3b1ZZ?)+0w(#Nj~C6|=1sbLm;!jtinyz@ymW zIt#l#Q`%9NNQ2Mn@Cr6lVhe!O20N{v$Y;6`N#yr zQPli2Q(AsxE_*anavn*hfu-pz`?{a!4*bN#vdx*bMgP4`*pus|fuC=UI0*qzbHr#16_3{3Q-6|LKmUYg z9{A!04Yqzckv;C)cWgHs{u$_=1So*h>!d?p{cH%Jq#a)`MA_Qpxsr;B(C{T*zd31=P z=^(!hRX>%+qTcOO-PmIeN%&4+YaCMkciR)EJG?2}X+gZJPIl14kuNz5#{g4nD05dG z;*hxSg>XtH6phga-I-F>_ly0KEX$D&eV-iu9CGOm#&*DfZ0XnU)58Bu68^ayDf#q- zxR?82k^@EqdILHE^nmNx(uUJV5QLi?NWxX;`WXn)H37 zIJ>|jZTO**P4P(me>`YffwFCr%lqSTb_E8{9-A=1?MvD=mn-i2T%0YT{l*fUGb!F1yPxC(lcBe%jCPca_+D>hExy z2I|*lT{P(8R-w&GKaYC85kv|AbR1UZNMo){XRC5*4_%2PF|?0Weso}%b|bz%r}oCr zCSs!1R|3#Y?^O%CCP%Vd`@uws&{`m5x*lgZ4JKFRNNLxXle<#Q^?%3E4$#K$m!nih zKUAB4V?K$b)M;yh`cNHNI(Bm*Tb)x|bZa>qc^FyMfP;Xefc-hO7k^D=O_bbzz!y2S zk*%yQ{8N7%{X$p`uI?;mkLJ|wxHE^%qSfv%E0hc+Nn85@K&w$Qv zL|XQKJ(^GJ{3(}O)_H`r&@%UF(cV!S>j8nGr4p&V=*}i||B3U?AuRDoulSto68GBW zq>{~Y*QXFNn=_pESFPWmCyQD3{Q3GsBUwmHl!zTURhjaRV6xRflJ8QSsB;ZK4b~3+ zgU~P=b;t=~tJ=Y9u=EuxV_VfouWSn=qiC%|VI-M`7sE(FZnY=)ErW$#e7CB*@HEbV zOaE5&U5~+1=&x7l86wC9?Q~6@x@MKe}nC*jY4yZG)v%o#vw5w1V*`5F0J# zAvVDut47x!alJo-9zE9&6>zh37{}#+1Laf97_jP%B=gyw&&u6M3Wfy zF{ivd8iO?0DIbU?Vt)sn=IaCd4E@|95uZZvweu46cyCdf#~1Pit!mgIEAT)240y#H zR{W+VtS}r{)+y(-CtV^xMD0!hE8qpd%JuS`_9QEf+H73$(YT5Tu9>8S!qw+LxDTax z7LQvhc%OO(kBXwL^~c(iUBs{->|X9GztDk9FX@d z)^!n{0>BOaG_;~*5gm6P*#7i|}@vUBQHtGj!g%=w34Q_{8)rlIc?eaz+WZnvfhTtLkUG$coN4c)hv(kr3 z)5NSo*4nBL)pSW|;-jnmvfC&etx7L%EdG5+{4*)|M?WSeZ zGV`CDZw4j~m?SNMmU;fl^PPdA6Cp27i%ViHOSLZe-l3}y2Q=0Bc3Nk=-bev1wS@Yp zxYjgaIW4M~YfU%A+uok}ZcPgM&`y)rbtGvq~oBP6S}AcEmwd zNBiU(pu|4tlMV5poa~eH5Qgb}&7k~rVJRs48~d_XPD>yb_8qT0B7t1YFKHu5 zB}~cFW+-|3{9gdjPXK6B$Nh}s$tB{qfTJwYk-64ap4$l?PKrl-Lnk7PI@*|C3=Pbt zhxfFC#1cil>Pan5Es8CRC`%nl26Iis98o$_;aFo+V(FIHt|M|pMg7`C@9sE@1k0lZP3?(<7|r$SEv&;g+QQ{hwf zzTZD;7~L(CwrnD_h@q}KF z;rh##D;vyM9xs&3`DTn%bw7E!nG_{*IA2!$9l7{;Ij&%Y(#NFuuv zUvO@(a=;NLruPU5T&_|8p8P zkUqZpjC7Jqvc5tFEwl=SRv|ptR*+Vx0=Q`!d6bE3h@b2yZ|Fvr$I&_zNAqaCDulFb zRX;hmJLU?+I<7m}Yx=XC9G*eM2|1~Heh;Lv_6_2vPnl!U8PYS#e>=(HD?0jE>NSV1 zH~~i4Mm)Zzd$L~u4Y1s7z2IJEnkZdbFLns;ueUq5es2aDL9!?TTA22hcEX6X5o3Fw zk^R6?hG|C`#Kh9 z@l3KhvDqL0v+eus`0M4$3$w@=_EDGoZ59#z?a}sW-fr3kU@Zg_5VoA%lZ^0>K21|z zcjwBhdy-tgKq(IC?|PC68IdBG5}Km|?ZLFv)_o;CD8L%sF_%_RV;BwT;_UN7>>UkCe@ z-ejh5UqN{6Ex)Pr9lnX{O6yz>*;J`YB^wddT&ris$|2z1T?Jb>U0*fMal9#_-Rc5F7uIyNn^K2Z7HUn`)*d;5^w z$o}X*59k621?2UYoqb5QAnQjdUkoOj5CZyx}d*2w;$<}@~!vxt2vDYz;psBDmtI~u}@dP++51gcV~?9 zUpz`I=wE-NAIT?O#-pHD&2PwoOV_Iogh?A)18=GMS2Yh`{pB?Ns`fup-(>(fOv1Z+ zZeC^a3NLjN$8X#y|2mMQg-5jER&4a+k{<-_uKVUyI_FAIZtF&Q62+YXj@E4-sJre# zm}2Am%Lg7LoBPjm!vReFIxjIz+2FYmw2XDXs;{~Os$>KcFCWIkG8;8A(i^BjMoq6@ z)p3XARe8i}7=~I`Hp-vnk+jIJZfai9wwR_Nf!5eTSg=Dc$O8wFJl5crD+ZAw_KQaO zt3f1%owh-~H;7oWrhx`qe9oq;i5(g%mJSW1<7fOm{g^*Z6&v-6@=2Vft=>P%#m}Vm z+R81@Ct`k}+{VA){q6lD9Y5>OdNltre>%XA96lJ9Ut4?sD7SI;U+d|LAM>XJh9>3J z-`3yC_|$t%Y;pY4f2|k5JvN8p{*=K+e>%_?PX1spG5eWdO7cpKR-AjA7zTu%`70qX z{8S{oZ>e99ru90VCCPDe%$uI;pF*4{*c%S zZMQ$~{>Yxts{fJR|Bv+Hf26RcUHuZHm9G7x01Mo$ zzes?3OYZuxg5ZtQM9j_7x-c;sQ~0J&C-!cz_`gTs3iVL_?;5zG2-}MMgH71N8q1;T zuK{SCKA6isH5%7lB#DvmC{aw4KYWNhIU=A3C$xmjz+lmI>3;pNlbVtjU9(**JzPQ; z<-_-TM47wumtNDf_D5QtBa*m3I%f3K{JS(l{|_Ahf8e73furrX|7eHm?g@?YmkEp> z{U)AC>D4?+B6eqkudj#UwXjjGxFN?Uwq6i#8GPq_;KmSur_aIlmbn!o35d8Q}^rPdl** z>1M>g08YPI-aL#PH{Ah_8rbi?BhMcWV}w)&(*Fhi=)T|vM)5MSHRtwyyYCmZYlD1t zI1$*D4YGSUImkv;$_GY}<(9OzIxo`UNn!GI#qU}+l*ZZEHe>w7{_>=eumlmlFp?Z$ zN2STRqsWn%0jM_$KkYCL;cJ5!=FL2Ykt^l!(J)IHY=K=_vdHGne!QeQuJ3|UOZdqFG-V@(Ns};{TbARuEr|^m7=!9DH>| zzdWL^An6I?0Pri3js@IAyic9343B!#2bG03#R?sTTWS}dJZvmUU^CtF%&{bmjd#oI z#$u#{-SVNa*Z`mQ$Y&8oJ??p1)8kdC5%;xvD_MU_waX!okj!Lqi12j{gl|+B#)J5E zKnvp3j=gVYMPHDoJVJKG9UP$NV{xX)!I!^04A!Fv`vYQQpo|Ea?b?K8!-(7lTsQ@ykoe#{| zF{A6`cPG=-B3N<{Ox`isZ@ImZQ^!$x;`N7F8RATTO;9TG&lw7u@)6=GkJ+qrbcXtK zd(+%I_NUa{?&*Wr;9K3DNi(FZty4iWNOi=RheX35$(+OhSU|Rhi-ZA~XT$udq zc+!6Q#lK_(T5vdKEfDVHjfvOk?&Lj8350^c@wRf5&p^2=jvFh4JLM&U(vJD~_Yjsv zIm&;7za%wZ^kt!bNi;j;TjSvhddD$!!B*R(gshr?#AFAt?8_s$mdO`w`85Hlz2+cE zwRxl;o{`$O`Xz-&iuh3rzHXH!~opAM7+KZe(2abE!OC<+<{CT|%+x+>5~Q@yQz`9!jsu&KWKxJl#& zAsc0V3F%EL4C~L1JHVjKBGnPI;P* zSjg@Amu#e?p8eV*Z+#lB+y;+)>}fL4WIc-Ogdfno3v%Qf_@0+k)vudF))O|-BU?*J zT>c7=zN)kGwxE`$1b+MK(pr^>l zX~^lUC~kRWDOt+yam$g2G# zok$!6RPT~^%qK%wt5d!;pA2Mqr`+v%creEM{D%lz5PpfU`*nG41sTid;+@rOqkrETtf<=#$=_9w z#Dpi@;Ugu8C-B8E4WquKfHqqZgI1f0tyFOzPNenj7#Id#V zm{-VVQ&(R|L8^EiU&YDJSBS+x$EbC8z2#MMk(lUPfO6$pW9Bk#yGRY>j@+q0j zVNZuEzG*tw05PP6jo!_QDqEkZKq36 zTt2GEL1&nCS>~!%Bg@@gJTC!1t|717K!miRzF;t0O0KE-KFH__Y;(*xUqQ$S_ZRV^*hAc<*=JJ zQiewA@d$)AlIjY)fB1`Fetw61XL$)ff?&;J&3m*sYZg>7L0RbOhnJaIc*zvEDnWVP zBmYo|v+h2(Y}`T?_O*C8%Mx+s^DLAoj_rq^SV&M}p|Qs70F3}PK?(O$p{W2JgWR+Q z>*)};e0dA$7P{6I4hCNYgR5L}!dBAFKYK!dkVkAK!`M+SdDB){KZ9KIp{=9~JH{p3 zx02GZyUyuFI`g;MDAfB+etaAGk(A2=wv+e5uVG%^*U!T+Kem%^N9kOY$#5{4pm?08 zaV%iX&)irt_?a8h;5}MoTXz-Y*v!OiOk-r@-QDwo&loKUN^d_l3tC{zHQud;=5=$* z(K|>6c~Ks`gLEfP%Fph=@}DPvxC2H^y+iiyAl6WWBNW}L0DIU1a^E9~;dHtD)U~w}I`MfFFL7`JE&dAKb}lJINe&h9+;=Ny^x6njF0g>vp^*XYV38y{7v@z|m52 zRh^8l(Nf{4IpOiIEpHsg6rsB&UC8Oq`6rk4TX&IWwpTabKehL&de&nAxm6%{%47AD z8;TzeqDxhq?(Wz_4&k{CU1NgSbTMA}z$?$$OM0ch5q z6;g0j-R?Glvo+xC9k=ZLfF!nQRK2Ad`!cyAKU+fvlTYNj8q$?i%jarHAF@V{+6T+v z#rnbfU>T4b@>8|s0rH*vMlI=dUm^F^l4>$rp1Pk57K)s-_hZq#nEi_T7022?tJ(ET zff&0pG&f%P+*N?m{c0MuNFJY6RZ=S>9=mdF9eIGQcFE`K$ThZ~tNybC#6U=s{B=D! z$6Zxl)a2a<$xOsXYjRuzelO^%IzW^28^|c@RW(TKZr8WQGFsJ$KXfg?nWq-)^)$=$XA zhd04OaJl8pM@dZ3G?FR)tlpBRHj!sTe^IwAv{C;S!MloWfw%2!YJbxo2uB%pbe@z!y z&;69FBX7yU|0SL8D{IDo$yjo}e#w7H9m{Ha>T|!q5tSA8)*tzjl#(ceZyJPLIY?EX zanpy}S5!~^p#PC_68;bI9{-B`z}^~IzxQjhf!3Fcz9HG|F1SOA&1F-{PH5Z76&2Iu zo4-txZ^)4Ft?rECEelR)Rmk4tmT_r4(DI_YvTVx&W|h6nQbtw@3#OK_t4bE=R>c%F zYr9cywp*UoOorX>!GUHR*t_kmpWi|T8rbB$@`3Nkc(Sg(-D%9w&YUBqhCqg&Hm%j} z^;%L&*GenwA_AMeqjI-?^cnJ$pWj1gaU5yJ%H~OD`3nfkyRrN=gg^ZtXPv`x^o6h9 zc8+j_?SaF>d9ur}y9XYG^r%m~KqlcA?9`7P^%XymEE4~zhp#bhjH;<9<5n?tPGT@5 zp}YEtu}Z!C^^ce++vK}Hk^uu(dK$GZmGsQYH|L4%cIKkQ4UbUUZevs}a_F316}Bt< z{aB@kx1+sLOSUelxnFLQS1z@aXd=}wvy*t8=@w?k9qeezKzY|Cve`i6+CX{4WwJP& z#;Gl>1@eEmj28)`rpos&6QMlU8NAVqEBusBI_a|7(`oXj@M4gm>2znvMm;X~X$hK6 z!j}+ydgtcQwo<&mRID?sEgkJo^UmY-PHMea^Ki8S=cTFkHpvaxrD1Rnj#13d>geKJa*gd4pM@GI4kL~XkSnZvo@?Xo5>RSq*&!EE!fWXh-}gC`71URo&>J- z2}0X=N|O&A}bxr@{E>;7kc6L z2(c80LS{`*;Qj;J>`tTQ622R^HspzhooV7F^&++%#?A;~cMJZ5%?HcrZ72*bxd-pL zTl^nZzH*&(?{(N$DCUdBRhQIy--@cCJB@x8202z#8FmhBW5J@)6xaGJY@}EPCWCl` zq@*NjIU?t8bQwO7kAfsORZWj9G4xh^-{BqL2GSW09Z z%LnDjk+*ObeAg?FxkctA4DgoX9Y!=()&1m>nvI_&Qs<5qL)TwYOT6;=TVyk9^vW;( zLUM=P@QlV-M5EikctY1l@8m7rt(Vjvfi+sffxQT9I65}~*pq&2B(UED8@cl#Kg(Zw zWalp=!Ey*caZ{l^ZmrNJS*cRxpxi-}%h@^H%A+g0JaW#jq+9YV{IK4)+ClI&-Luse zw2}Urjj=g&LsY5Jet%i5g2(JvvOg}_6SNU8LU1s;q^5w@XtBGWR-8v3{~L^ch~YPq z8gtT}^Zv#m1YcCzL&l4|e=Lr`w1wUQ|6Ivm$Z#+0|Z`r14Cr4S@tQg6Hdl*46L&_*M;qLTO- z_((MP5ae^(bx!NW2W>Q!T}TUS8D17!#rCH9_mwNi&NMlpb3qJKL3OVa#vLP29h_;f7+Vd@CG{PbJmNM+e4b0* zahq&sQ(W?>yChbg_B&ZQ>TBoqnQ61Q*3KySxib^vY6OSJoa3R8bOaiKGg>&{jymtF zY^@(>0PcX(cz4CW4Co8j`Y%w};gs|4z$?7oDNnqE!^N9U`Gq^gmN)hf%K!RrrduIY=HZ- zj{Dqy4P1cxX2*T*Kk?%z_n*PncE62-4msf-TnE(-x&J*fWyHe2P%g!9!38MK`-Ady z-~yCqIOs&?T1SG1$NX4Id(vNMkAgGt9)4e@pTpQTFqNGysl6O>7nR_(wxfQ9N{l4@ zk~&rsVLKd!nvaBgK*N}waLD&Gl7hT2EeUy_BG0JF-5jLi{%*d{K`wF~6xJcHcM=;r z$S1QdQW>Rq`3BelJrjmhCKz{emW%3Dxz2@8)K1AixkxJi1?EfQfh?5VKa;7EN-q0$vGn{AEq=fXaM#ZyY_8rA19_f# zqJEcweE|;H59*VR?03X45!hd*%dClYW^{%pCb;l~_7%yR#U}m##;!fCs$%=^y=HSf zBG49*Pyr9;qLLy4DhgK#ADzG_J~H1yh=CUY5zR_P?d2`=nyI6v_BO;9n6!P1l~$I< zQ^mxvd}V3)+=p|3^ZU*@kad5*KYo1pp0(D@n%T4Wo;`cdnwd41^hX_W7J1uUJr841 zuD(%=T?2~}ck}LTs6@H0x3TkEZD^m|QTx<`f)wh%TRW*zcUdqG+ERg=*CHHa0x%wU ze7CmiQ8Fs%+jKj~4|JkT%0O25Y*&2h9(C|ce;O)J<)8UevOI*h51`p}$iZI;pfs8D zn*o#}yJ=$r$w7vHBe(QL+JqpwO7!w>9ve(yf@TJj8B|*xOgQm(cWX^u=tHK|>IK$M zKZfO&4(;Sydr%#PJNWugN|YbtzlKtP+>y8HN&VV2H5rRuUf_u}j01yWEWIu5>hAL~ zJ+Z*_7e22iJtu3trYA*2t#rf}wcZe2WZW*jU~X4eWm|)nWGA>x9)yK!_}0R+>7L)N4l`~y_9av6eKvGy zwzaEUqkY+zwlTv#m?xi(<2lh}mMgTi(eyeq>_u2%jbf1nHpgNz_Mfv>mNpzA17i!BU)0Wm$Z0F_~G?w19^Z7F<9PY1p{tVjUW2<*fMwX76 zT1l!@Buw~xaw;@43i+;78b(VCxy?m2%S_tJOrJW|ShstxvFfQ6=W7R3uWB)C8-=I*a*4@G~p{!OAEDiv*7qz_E z6hL&dP}`D41#Eiq*Q5r0!qj?T;KxjT>3z7@M2fawkowp?QilVnzzfS{DH<4agVc0j z(Kn=C0Y)Ny>u*Wje2mnar%0Xi9pvNCKS}EGueGgn$(y`RohJ4Eb4;Cq;*2lUPRt|s z_LP{+%io}3a98QOpPSyq)BX(~{w5uVbEgIe_gO)~;I2Eg0V^n%bwA#)xjryl;_^F5 zX`^j#+#ZILO;tME4_L{iIHH_6!F~+6s(Z1MDIjqg4MwTx$ z&*~Sn$9K~)nc|W)DxxjS*RmI%yZuY{c!!{h5BHl&sNyI0YM<|=7&iDU3>hht&RR=l zcK^`04r!5TUbT|>=kd=@l7q^|8{^OFYn<_w&iIJ5j%jU$DQfgtefd6@WkQSGhg0zG z=8*fHyXIVe`ntGcxA$sI2gpmN=wi+55M7n2W-otmm~NWHSmTK8YNr#@MF}MSh2S37#(m^F6ea)THM!UA}{VxZcmlepht&Q>2IS={+43G z4i{rACX}fgf|=T58dDzwO|ZBeRtw(-#}MDL#Byq~cII2Ow1#a+@ItV5@jE&o8-z#d z5y{$?Q?!iSXF&KRh^aN(c=uAg1d@{Z#!@ukpeIXdHN_mzrk7EOOv~)r@^U1HuP8pW z5*jOPT5cs?2jZ*mVimB;l-5xdSUxCr9cXnR{OyvIos}5 z;I@XXQPx!H78}n!Lvi%4ef;w?RNB_J-XlaV?HnIj8?qpMLF+ni&d*YBW39Dqe3f2o z<>hB7cw&|QfmKYWVsO%tB8iThm=~CfgRKI#1F7)+eg)KMX$udeKkDxs4KFrYUM=*r zROv^pa1@+pJ{NaKRVv0jnPSU^m1Kk6CiQ=LOI zG|s^b&QVBUtV6++w!C7IgRdn3rn05TrL@QkWqj7k>&{VdXaIWMh;MsU-_W37Nvv1~ z8}3XYN^w=6gcR4|le|ig!E}*o>h5y~bNpN>GBJJ;j`qlX9ba6HYhBjFcU4m;9YEKt zng-CAdfxFop7zhQC(cuEIV!-hY|psB*dBY9&^b&9uz1uO<12MlwGT6K+b7p$L{;a105$-R`aGnj}Lgd<;W48jNH8E0u;Y(B#I#%}wa zxer9b%0`j>l4sm*%Wk#K?8SrH^H+UHr;)x+i}?~5=)bmASyw>&aHF77P$jyZ{QDXT z4*R6BU(x5N4Sg)v%Uo9XmV&QuymJkGLT52nH(tHwd^-eQBwtEx;!zjrG<9m^hM(|~ z`%gKr(U8(w8PFXU!sYWXXmj$lV4Ph zJ*&<^aSt*u_+M$g2j8zaXMb zVT;dZYa7!B>l5K^prP2}Eba;2aTTkvam>IZ$?23|7>&l^){jCdrUBW&Qb06;!jObj zOqPn}qAB!AllZ(V^dzzHSh|`kPV0KH$aDj>Yyhc7acn{wfg~W@gL|gxL50IY<@-6`a3p$r;ZlWm$1&? zrby$?2G9Ho>;l1e+@?VJckR2|)I}a}8gIQIoYr+vDeQi!V)o3BuvF-S?4BFP1$M@~ zJpUaL0qydKT0?qP=urq23*eN<3cbIbhu)<={e$d&`{N#j1j%pv*LvoEfK&0qBJumB zp84;A_ZADr!EXld0sdF;?}9hj`TDz*;qi+tzQ|aRhmZw!uHK_i^=n&=RVtZSl$~HK zsKD|%ZNxp%;e)B@aMsg0l!xmGbqkGy51X?Xnj556s6S_`aAV}iNkB)RmI!`JD%}*!RCnaR()+E#|N36w~&m6$8&wIu<;>W$lnuq1W&-ou;@8 zv$@M$tVLOAu&h+;<#xWXo~DEQz^+}a7oESMDSVinI(iR3r1Hy$IulRDkorBM} zQ&i9be1wQ@M<2wCu16dw{C7exajek0#!uO)pLhTJXf#Bx1T-8f15&te1I2jFYZ?yc zwZUeSrCi5at?3QahsHPYH4T(xZpqT`prVdOjc!Rh6TCQ#$fJ=ad$okS^!egO>gxSn z<7HgaCg=3|eCX#L;GZ|*8|kw~t!oou!>I#@wx?}`x7k%s3Li@G$Zi1+lXQ?@bdayd zM-3fNtUl&){dB_`<{P{k^9K3^T}DG5jtxh!+zZ9shp_C!>39&gBjxFXYh##+@*CDp zWqyGoza_vcfEQM|c1)AHvl`EM&xCUQsfM+yS$8iHeFq7*A%pmowI^AmPv=7(rptN` ze7z^`7whE8bzjW9k=gjbYJ4rK=%GG(NKvOFK?LZ-WAJ4%3-|rX9$G8X`#RGHCHw>F z4`3pe%re4WJ}5kUNJqszZ^>>UvF}RUR;RVE|8(hcXUW|1YLn|?i z<@kP$8H{2_D3Mz_0p7I_<;d558lSC9ttG+~C4!li}TPm27oFw7~x zjP*({C;hLmf3}1nT^pxj9M+tn@Z`oKpZa?*8NKD=A*KL^5 zQZezn7te!5{%qn|DrjxK1v}J)LYHnLL%4@aVZNpjX zP+5*B(^uGeus6#$w~Qm`xCycGo|ZC4Ki}Enl{hdHoXs%W(xqgQnE-H#)Kfs?uY@~r3P zZftSSQvG|Zj0&<$7Ap`&V{;&^Sa$W?#SD2&QN+03H1sbp?pF5$Kh=#zxZT>X)ZODO zgjIW$>S6oDgX~J7-3VbG6k>K5<70!yT7J+2U~Wu6#&FK8zjp)_A2veOQ~|?f`KN(B znC!K(>6!R-)_2+uhW_#<9vaHRDGN<+C<~#*_rvRyPR7>0YdfmNaS|!x?&<85P=@2&9$m z8kUp|XB1M&M@6wrTJTG+b>F$=HH(aEqcWA1C6XX99S=@fJLSP<128hKJ2^C!K5FOEaqxY3}k zk3)tuuu?M*X5Plg891!)y$gTOMWUf=k>C96G#QPdSVW_(8^NZ-@5>GC!ALe)CiM?Kb~GF8<#!8> zFyM{%@c3K&LlO2nx3vy$SC;H~HX1ROvS=`HP9HtD#cFrSPqZ zY%+Ns;WUPwboWDvhM}%ZuHa|Jusyz$?52$M^);PN>ErE5;4Xk0ZRcCYGT)9v>~Rl# z;EP@Kk}hZ5)jK$6U!2nW+4*V23q$19u`J5BOCeL={*tMSO7IQ3i>Y09V?U_fTI4w9 z-G+jzHOq8%LMGn8y^`?YO=;k-C9x#x-oURXvG3i*ZI)JG=Z9*3B$=IXpK`GO;pV4i z<+E%P`5A4!goOw`kTz9g7YWBB@RlG9Xnb%gyG5_o^T?U(20c=*1wO~l-~qp=JxF6_ zSt)@wPnyO2`HBpt@602#8C0`yAVS&n2CQc#6v>mdl9xnh*L#Y1H@0L2=jL)6XFG-=OMTZ!DR?;hxnN) zR6Io3Lcui%ZmLMT!l@#-??u=S@$F7gzf!Is9&v(v~mlrb?CpSGg!!$P~In$JqmYkWHnqiumoSxw>{Y_Owi{R85e?|;R&g_npAw|u(`_tJ`=WuZ?3|aq6i-d_-^3*@ zol=lqCigHf3H;dhQFR+!wM_P3dz@nOV7}x%0BKvvP7%XJB1C>UunO2_Hbh|Ibr!+AQ1x71@EN{%avicM-2ly-hlH}J>7 z-`$Kj(4C;|-;=TYSyn&T2pwP$_wH0&(M!B*G`T!($3 zna-)<(?=*<%qjTVegulWL0c|$Tgc+i8+f#W2aZ&HDX&6{8mWZIj#569mEl)p zl^+|X4CwRTW%vhz?h`j$cWdNTS@nSYTQlu&?crTSu;fgMQyZn7OjL5ZcopZvx&%aQ zW9qBhv|;m=)oyu(_>f85B%WpT^CXj?&c7$IFPI4ZWP_xR0N;e2kAz&aSyEXgQzrpJ zF5V)k)4}fnM8ac;*T9!I%ZDMK1%IPi-VgZ?@C+N$Ks`@dx=B)v5PVz#k{dQ9>j1td zcBl~Gyt|qu2lC%~99uO*4x!SZzzewsC@ROVhk~9bMZ;(Y|*L!c!BBfodU?UJzlCQ`P zhr>z5@gkniki<4iCDuJ0H1N85AoeNl1@B zCOeQ`#wTu@M>MdWh zSPAtI*QaWguAuppc*$ZVEpLN~ob~U64y2k8D&%lbA;*DY28^00!u?$JxcIiKP6@gM z;Z>bTT_yA&zb|MYhN(gOdXriLIxPU>zMvl=zQ#v-WCtp&XqQz$lB{{MD9Q(Y@M+nb zsj~+#br5J{Bt}bnF|`BmBrpc@OW{o23H~X-GlHo%AwLg(XJ4ik4PmNyYlw`G9EA-N z=v{)%QGj(o6<|09n+Gr!SOgpb>W<|ps{a=-z5qjkw}9(_@+IE$KnyS*$N*je)&pCC zy})lk=dWN~060(s1RYn@!9W_Y40spV3w!~b1jN=<6`;QX$_Y$S%fn9;kO<5ImI51q z(}40d6o7ufC}0-wI`9#21gHjX0QZ5`-=M%ie_#yo9Iyy@8`unJz$L)_TSe^#3;{BM zy!H4w1pEZ_IEj)2tAOu;TR_lviaG`O5cmPO1q6JrV3&1RoB{t+iaHnA415dR2LeuG zydRhcd;pXIb|B;j*!6);KrPU(ROzKIFNL8N=v0Qw4NL-F2etyof%`x-%o74xV0Pby5>kvx}+s&i?zH0jt;V{qdc1&i8!J_k7Rye9!hh z=T7CG$hY=KuDKXl;U&@p50U(V5J~TgmNxj`kyaQ(q))vnsZ`v{~<~xwJji zX3YVT_z2?co>uAAMT|`cC<4%yIo_|nqvcgvN^@nGFhoB#813>tqS->D-VjXsb_uuj zIl<`ryM)YkA4k3j`s=&Z9OV@TK3m@x{OuMSDVvV}qbf>r7I|yinT4Za;XzLS*d?3{ zdx_;fs2?89UD>Z0wpz?pOb( zYkxBCOE=?Wx>@+p%KGcl+oOkQI2(YrmA2&MH!4m79Jt4n&act(VSGn^z*%DKAgy&X zNgpa|>xYWg7AY-p#RaR0MK!%#!o=={(J#1(^EruC8+o>}xW1LKaI||ItE36vcfZEE z(uB`?oM63a!dlCCedGxh7Yi_*5bjuJsQXHhZsEzE#!{}P-RPxe#$@CJa_@lJTyVF1 z7>(QgDvS1pB}_ssX@R<7yV?3lZy1zQ`bbQ76hP8(5wcV8c#U;y_YVv8J+q z?schvlja{{8hEJlaR9Z4x1ipQ0Nn*Or$)FAzyP)aUI5J+gs&sq0eAy(YDZM%-&96O zuei(aF@=@)$_mscBcuhv6mb^ZEweGwbHcE`o!DP|!ozg{h+&6${%r;&pJ)sOw2;na&gVt)B&e3i{FI_Av%}sP#`A{j#LvbG}X6A85 zdpfitR9d1ev=e?I)Wex|yR*Q2oqs|V4WID~#(s(UI_YV}f<9Z|>j_O}p^C?p4(6G8 zG&WYD_BPXJYRk!2)aGfyoRJFC``DfJWoW`Y6H0|hGXlcOejk$(VQ6Nbs1`qCvHkW* zS(@R4=03cUXQc7MvdmGXU-&hNw=eVzVp0P?H!}@XQ+fb3-k;hu?M2x6KPoOA&>xTo z$Q?JXaHh;KL%wa*^cdi%h8d|Ounhc518mY7&u`MQk)M9wsu#^^Mj99Bh1T~%>q*iZ z3M1t8?^Jr)M=b9*QkutM2;FjxFodr847$E+epE4SNFYSafI}S|DoW_!6YRWCzUWMzc#TjwGS1gITEFxU`p@J`6x0kGIvIE zIMPocJ?$ftaH)T6@)StF81T*O4EHKRYC8{XrW$Fgkt%56pC<%!){};v-n-4D-*?UR z*Oj-K25NlN=yVr^4Oz((hk7-3LoruRZS%q0^)+}F&8(d< z$Dvef4_IqDkAAf>AU6k+R>nUxyt+IgAg}TWaRaRC2d_XW0Vs7l)%Rw0kJeK`HOM!|mmcjiZwJWe3a(+s@=@ z2e#GjR?0^jvg-3-8B{(SWOxYhG+++kZvbjF%NtdtTyc#KU8&~7rQCpq?;w5XPUcm- ziLbw2Y-7Rj&BIK?qbi13gF;*|Ex7ME6f*F~|nTv7P_8R^G@v8%2Kq<=)ZgNw^W|Nr3XQfaNH{qY#=r4#IPbh?I1 zM7aE-n)|wshMNt12c#bY{uRU%e^D`SA>0P&zg`W)%0C*ApFBz|T#fodu0s>-P^{uz z1M*wT}`z7tCfu9iAL2TCS_7%A5@X-vf{Ug>yq+A8DI_5Eo0HU zIfdV!QPkxh5zNrP6@Fx=A;o5izg?v2d4D2Qq>%mizOB-Y(PG7C>X<(_8+wHM?i;@DlQCg zPQcuSaMe3%j?VZU5&s%|fJM8mXlrt<6G? zDQudd(P-Y?W*3K)R{PkegjmQ0k`&_PU=7omFsB(+OjoECO#hQLOt*G{HFR#g>4+`h zFcPiSfrbW>q=s2dw+d-Pv3@sANfF5~A0-^Y=1EmgO4Jc`q z;Zpt)x){+xp14NMy#gV_F! z{MKy2UOTI}zMD0@1l>BSj9*cim>U6teN1(c5RDE@$noB~QR-Xfy1KfCo zB?#$Z;)$RYVMoxwFkDUK=p=`#+ThStg-hXqB*%ncEEKVg!I+xjX3^Y0Pq)z#E_rcW zN-EL>w?yjGwDqc7wcRj^t1oZcQoL|lNFLs|G+gTK*7C+8#_~#|rf6i*t3|I)&VnIz zbr(d zUQrYe$&6J@QXC%(s?ng@3o3gfr8wy8VYh%H-oZqr3h{IlA)T?Dih`Ml~*`1A}+GbcdGew$FNyuK6XSFOmnzjaF6Jo z7%si*#g3I}r7r{hdhdR^9bCpVl=l{fjI^?YeM0fbxUS)n!)yJ$5tOpK@4M!dnGUcV z#v4ZX<)3}R{*m2hg-gS|)Hl+~(gwnT-UDDMy+&DTuyqU_%_JEeu{_lW6|u!jwKHPo zgN7%0jeKh#s_a}%ykqOkfP6JzjBCXa^!LV@#iPo5R}bN55$#vd!re2%{!z)%JKt1u zSv5I#tRpl$^SA+)@`h4|ipJSTj;r(*;0;fyIp*=|Gvm*w^|nQ7uA)@U zZGEEp<0tNF*sOrCZ}J5F$_Z*NqoA$2#m}t z_xD3czW(v2a2i`v7$&(~haP4uw;GWeOY?j9t1nJsqf7+&Yn6uhyUs(A%+oNIl)_f^_fP(c3o2a@yxS2_JqHB&Aeiw?Yd0O?R=wJ z`@$SH^jj}yGFEuyAB2||JjU+xR)4#oh;Jo0Y0(PXah$W=nqOFxqZ!Y40x z)^2FYU=38oR1>kEy#40s639ubdgS^uK4e)V*F@U)M z5%4kKXMh`!1lk*GyF~jK4OSN7)H;k+cvl|@kq)J67FYOw+vu#?S zEC-}8%%`h_Go>@S>ZN0zOUm_fH9w(hB?h=#z8$dgda1_4u5r{E5i9fxMP=hgx0iOh z9_G!tVbUvJjnkZDG@IZ=X)kTUc4q~)I?J)ud6lCWi(8$FdkbflB%A94 zDvRc9xOJRjw0@ziw1zkz367+Pc{-5w(pA4;UV2cimlk@2@0TWL+5_qq9eJH8keD1I zdCBzyy``t%nk0SIsXsS;sjMs`{n%dLHR+`y4?PD`VfOVFvX{lhg<+p)cc}B}?xIg{ zcM(-wJc?<6n`!Q{w8(}w!RTiCEohbbp3@QO?``^uRMVOEsTve7eOd9%0 z@hFO?`5l41UbSpiN?kODvoR&HiI^ju1P41Vn3fy&*0JVLXZw61hihsV#QoC9q};^} z9BPj%);e|c7-3AV)8MpOJc{y<0Dtf z28`JT6)TCM1Moo-gg~SYa5isOQwWEX5zYEY71NRo|~DBm>pix0}rl zl98h%amfyoakM5QS)RXjoG?R=ei_RYqa(azPdZE)fwxw)% z`U_-WPsb!BiB@Su)z-~9xfg8aFsaZze^I(a1sXDNtdjIJqjwh5&k?HH?=irPdhs?8x6HZ#OY`bf>)K~rmZOi?e|lv7){y+zI5 zJ8!5;atv2YOsF$yk?_@u1TIX9JFH-naR_}0^)bTT6=p-RFU1jc*H&tiep*u3!bF5L z=JIa&bFYy0T8y#QYqL}|*oj9K1(qp1rer!_=lWMhYEYf2fz>VR?A4q@`sktBFZ1+?>U(Q3+%X z^UmzqF}aMi*)!Zp%vw_v;;#sAzaCpkM+`M&mN7DqyshTu1A6|zaQ^^21sDcUBTo&( z)dE%`pK{0php`?NY8%$X^6E9JHS8MHvqohaj+`ewjHO>w^6H;w4Mj@p4dJa-y_|#d zWBI|kZg^07I3u=X)b-@ELUTJP1Zue87OZa=)Na}65k|jZF8$7Jv3D-&{>kwB8%?bW zdq>Hw>x#nX+)Qf!#y^;9g{Q;{1bo|yK zq-vq+p=yb$AxTWvnK%!SbO~z4V<=4fp3*pV|Z+OPL61ho}1(qoq{RxVb8eG)KYV%4m`NF2*7^arJtmUh?`u zAl-B2Vp;mw$HZ6Ob3b?IoEFs%g#(LHH-lPgQU$$b#K_hE8;6sFXoMbzUMj-FpD+!< zz6_?G{^XDNv|zl~&!tkqYn5-}@*t6a*JUd&Ll?T`(QYG#nb8;m!w%sGS6N{HIque> zw*bkgJztifQt#mV%@bk`Qf=aOa z4KS9F^TXh^J$xV}cy?zb>nFh&&hAtjwAIPbj2t`|6=R?qdGgMO3d_0Wf`7ZnZfYZ5 zH`$`$RViT&Y!XRIDl&DZ*by#uOEXv8O_AM;2 z@`r-C=u=_%>V9OZuyA#kzHT|!m59z7=}K~t6jdV&4^Mn9>x|E30GOm*rp|E)`(fel z#>FCLbqQauHkP{OM4+DKqJWBZshyE15Q%scgh?eG5DUku#nrpvf1t}|#9B3%07wJa z01pA40?^S;NAw4X7Xy|8)&c4O{{a{!Rz*@sV>=7mbnJjdsyRfBxmcL}_5ilAxA6Yk zV`<=iJEyb}S}eGGY#z=nsJ;9UO?Q-BpLCRrM>h9SvuO#!S#tZh3)X!XTwS(jL;DhOCXy4HI~FFTgfv}QXoK%k zYktq5t#He6$}B$jesmw|1KuEvd}ja~2nc2GM3cF~`gcr;q0&D14j9YRjbnMn-Ky7M_y!>!V&5kWUN$T-!xA94?Ab>3~PL zz1GO~4+xwPSGvPbTg@>2YtR?Qc6MuWg2T|Tb!K~hTva=8p!VNQ`dYEn)#IM<`Z(P6 zK#law%`~+3R7Z&Nf}d_>J4uSa5Zl*I(luPcP8XshDs`Mbz(sG@$HPEr&d z1Xf*XJqLvc!%IU_Q74)`hYyj9||ET(@g)G zpeg7WjGLr(MT}8bA0-vBY$HL6#yORtL6y|f9IP_f*mgXc%e8x`)Y>x@?cFzXS{3d= zjZ8Y03Nvm)jj-N5wB-wwzqa_VV!a*|%hx8B*GI+rE6v~hOcE7dO{s(rm1yfKC8jVS z|1>;EPFwMGxA$BfEV?yj!8%?+|-I<8=)gVngV*m81cthRxm8L!pow2La0Mwaa zW=F*8f|(dJ38BUqOjIuUt6*LPVtakU`x}g<8@%+YS%%*-YOaS=d_>?xOX>5!Fx)c0 z!+>7_1$VKdtyEjo|8(4vx0i>a7EnTNESF~q3}Vk|+-CX8kcEP~!e48F(&cXY=p zRD}S-)wH*_&y6o>pU0*MZ}m)#qzfOtte_Vd^ul8KMd5hQEJLW&(I313@)QD@kCl;* z_*M6Wxa96;mt5}Yt7r#p%sJGMHeA>DNKV0xk(!^I;AIFZck~5eN^TK_Kr*8YfMWUweS+`S+iPE9Oz$#*>}di~^K8XnxLG@{4kn*O*_ zX9tp$sb~9*UI$k*ZqP7&AjYM`jLv!1!R@?Gna+`c?NgREq}qvjnKHw;&NU6EWjLhQ zCg*Q&q1Pl8E;=O-Z0a$lN5S-NBGySm(j&uvn-D)U*3q-Hx?OO2F*P^wWqQ!!5;tez^Yh!C}il}QW>X{w)rvn2Rhj|F61N)LmC6}qXDehN(Uzy ztZt&#{-%fRs&__X!F8%uJ2Y|moSnV-YUIO?*rF!KTF0iMiA8ZQtCB;SbjF1F@Q3-?;M8ASACM0Pw00Hj z)FposU`mZxKN=oX+!wM{Me&hx!OMwR}QcH2+vh@hDvU^*WvPsF|TtuxVT()Ehg^t&=j)Pkk72KG-#7> z>a>=(nAl-fzg(K`k3tv66;sze%Xh#vHG0Ucb9S(AS-2&HJP3v;gEmc2xpdPv78=_HJhe#LfR1n_zX%*vcCVk6;jfQT^BE-rs{(RgO)YF({!sIQ{>8W=^f^ixNd?;)ji&~Tv4=EKDdQLC(&r_Iu#LT>+**=(UX`lH za}a`DyTVw~&g)uixZ&yMRXJN@1HGZr4?b+3LE%(XscaLaJ+IJon7gnpRQksEuba3{ z!ydogxzcCQ-bdYCoR<>|a|(y`z{Z%d{Lz;FxPQ4+&Q4MSjsf?Y=$n}h z%A7UvGeadp5*;zsR%})-x}-W9ey#lLHyifnoun!pqoN_ir#OqLoqbBEN$zryt`YVw z#nbBcEc?>_e+ zo`ChG5#g@@I&ubqj*jqDgu&5{FcS2sfJXp_k%yIUxMlPu<%>11Ru)119&dL$9B_rD z@IV%o^GvUSO-ZA1JxX6R`R3uiEfY7m3#@$*`CmDrr>%QDoNzzRC;!#TuaIYj+w0XzI$RZ{gFP~zg)uToYcb|oVYY*9 znZgi(Z851BA;saBbG)`XecOu4`%+r5)fOsE_+;1q*0D>+Hx+`b={UM$ zt_hohujpMTi9%JMD|Bj!%n!vmGn7sw90%+nU}tf3Hm*i&HrF1p{fN!s+99?Zv1d7b zF1_(_$=eT6{;#52)&lO9BC!LJTEN$U%Yfeie^mYkiciA{%_YAY6oa<747lk=&aSW8 zG?Q`0I_L&y0dO;dRX?vBRHkrYz|8^fncu6Pj+b2YqLfzd2T%b@@3slRiCDn_{Q+D} z#OR1z6UORj<-HQxu3W{mkhW@s@?!~QY*Qwe(6$XyCNI<@%u?Q47~0mt^g~p84}s4l z!1I9R00FQQPy>j<+7gFSos}!4i{7k?%~KgM69?4BPI-R$DZJW5J@XS3V(HvOE9nW( zy4g415uP`-C}WYzm^9BXcMF8&sUf^6KtB>B{lZsJn3&?LY&+Na$P)UHx{bhd$uU*4fMmC0-OVji8(kI@5e7ISqg!Q)I3UNX)u|`;SC=o_g3sK2U zY;Zf=6IZA$I5RS)Ea>6yUZz*~^TwotySk$Hi>AJymnQoY3W|!jI=rO`#Ns(AbB`&? zDoW-P(7A(OsDHs%)Wllj=7zKZ+>ch&Q8UHKGGAIscVvZ^jO2jqKxw89$UWR2~e z;dP8r@3h_N)sYN#HD19xkNb^!EJ`(=`_1j3TnRJf1GSDszuM8q6S427%kcv>3+jzu zvnH)@a^ocS94n-6GPCcfh4Gtm*ezON^QIweXN~avrp@fZjlzP>$&_;Y=4`e~BV63P znw_i_=586!b_fx^+%lJvWNuxoJ&0OLGK9lhGsB-|3D*Izo)B)AzuLd`8ms>!E!_V5 zBsSo#9#cM-XfOB}?pdGk*?Y6Vr#fx>_kC0gpWq_3c2Vf2$ z#G*TENE$v|o!@9UHGxUdH84hauPHRFOBd$7KbKvXUVZufWTG9Hq2bn~3y~H3*>M}I zKdYEaNT|?f&%p32zIU73Q*FURHEyHu(w?Ir5VH3!puvH?^VrvQLic@3^+jOtBw#{@ zaA04Kb^@Ykv3uW`2hlMf4tWq=`{8&NbT>XskNl&UhCAJ!aO*Y-Y5V7C*KSgCZ*3CZ z-=D_TdaBRtpFzS4afwdRcv-#}j2lS%n=B*C-?@bql~%)H zth>K98JxHQfU87XV5QbFGHPe2Y zgB(@9+D>nEa3?X3UY$7cAZi-$AUjcQHd7L=MvDuZjH-!_r8(}Vtq#3oUC#X`1MYO0 zhB+BRtgam0PO(l1;+B(X1KRG+Dv!m`UVgzO`k?2ley-jRvgbtt(p zLpXV49=k3>;Oo27U~c{Q>^)C){?TZ{&hiLF4J+6*k8r&qRlgDBvJhyLF@R#y_@q*b2=Q<0*;G5yl^@x-UlvgTMToX0rdh zL4(`>e3JG0t4Dvej}6}p#ub1s0OcD6?Z2;STT#NDe=i1c^}MgM35%Tl-@L&VW((OT zHq+qDiO(o<^M6W+L5OO6IM^}kdsfeC97I^&EmSn+kgmebrf&Lg!MH3tlo^pN#GSMd zMi_qbDfVA3Vf)D(ZQm?BWXu+BoZO?OWPP)Q&8OnDHYgX-!>4j$hJs)Ok~`5Nil*J) z3xnX>WESOye4ENDiZJI}BYQ~^R)4!Qah>9~sLvYtd-B@~W?g5Xdpe#y>RZB?d-6O* zC_HTpr)-?4j8@o~AuK+)62^QN$KJ~lW_=fzNJY`r_~i?D zC;EVtR;xj^y#@%|zvEdn@5XmiXfWpNcr9(xoNQsw*_X5v5Ji6`pNnJ1Wefbd#oEV# zDb5y-pUVtJ2M?^)ejm=#*)isa6YK|G;o1-7?0B!R^1>nglb~%Io%t6}WYT0-joz-| z4J%dBgn*hatV+PDc~@TP2_)^9r?z){A4c1auuEc(W!;Q zgBimJE_f$<5JFDN78W$GAW4F+`Q;ee04mXg!j$zrzIyfb1tgMINkw?T6s?Q7v6x++ zUA^JP3N~^LvX%qh0;~h9%&t!Rr8}#q>{bG{W>-)8l~sjr48}FwI|!FU)H_Srb=lQ- z?#yM=X|V@05@kbK(%QBHXfeu$RzX?P;+5IeYwvAi6DjS3ax|Zo`9oRNW0a$;nbJJq zMO#OC%mK9aHdRw~nkSRc#cqaoE@69ng)=@kTjdc>`pelOPxT9dIcjZXuw?Bu6ICc*^x}_p(3@K$-y)CnX|dfZH?+t$ zpLnnxDWs*eVWc|^)51t@_C;^#CaqcBVq{w6v)(?u7VlioH29o&Aqn+`y5s{4T7YyA9077P;JAaDVrd zNc%@Chw)-gbi*jV3$KOPT62rM)=isfh2X0Ydl>t~7I|ebR*9xBbBk#mNR0L^j2eiR z-+?S(ADS{a?1ze#5P~t97z)6 z=;=+VN#utoXz;~QCtlsuC9g|vi~PDvJQ;~jdEO}VEJc@LUT(%iko}g9$If#$jEFO-6WMB6YZ%2`sNLnKsbfw|E ze-uw7`qaimlRZSc5@H=1D1OKyhgdF_%j6mw|3e@Qf2r z8lJ_sG(}5j|KY0&`Ea0TuwTOvKhhSDM*QQpxB>CX0B7d%Xx~fncHnI&n~L~O#LEz$ zgZQ?9&VH+JoP%C%NV16Um^64`BgtVRZ=p)e+zIui_)?4 zSGObsn;wX=t6NgE@s4+A?ZS;Mr4!+iOO8o}@CksmXuw%C<`aas28w0_?Eku7e9}PT z!oT-h>Ns<3URHR`-Zeo!ncl7nN_slnxbSUXrK!&RuSW}1M0!hv4 z8WM}&Gjto11vPrS^y!n@Y=*G+5D!D#3jD8LaeM;l9(Kh`pV}Ibd(kVdOdwrzZb1%O z?=HwjWx5NX@>1DpM@Wd%PNC|f9YRh1LHp=#Y12#M?F5p;jYfVhfKH8)oaGX2oyqb@ ziunQ$rN$u~1Q^hK5mfsaUwd3;#GD-k;)zm zpu2CT!3JCwV8kFXrVHsFGomd`@q|8p0?nX7;@B>j`j#vaS9d{AEgvi%=tA;Y=S9)q zg~ZV?&WO2a`QX|~M$(;x7ojlcWSkQaJ~>ESYa%(}^f4Gs(>&lVn@DD&6J3T17+sAX zPr+4rDm?r4H!}@!Th!dpEn=pb>`Sb0ZFeNii5fA*v7<=HF`PoQB}bagEHuCJB$9_35R8QQi*WrJ$nsbmaErwk}D z)c|eS4}h!akq3gTM4C2&HvU^c$sqBiG_og=mZJ)y$_Xl=EuYdaA0+1VCcK{VrF>9k zZEvzzPZdFVl@Au)^8k@DD%}0Ec!*Tve>&_#Bdcd|Kqk(r07MEs{v~Wse09*jyU7N(CndG>Z zrnw>F>i%SwwzXWXzdxBs^kKn_VBskP$at*<>4YKT(E+4u7~}t~IjcSan4h+Yw+CP* zN*GeB&n7v9O&ubR8AuHJxxoX;ZFyFGZSg>IgoHogz1d9tkS*`3xvB4p*@H=P_|P_7 zVJmJP#U%kpH?5X!YHrrM;vV4ALfYsq1nH<-7T>7A*;wr{7IC;plW_>43h~QK9Ry&9 zkZptB^H^|A1%JTk=npD@gD2i;+$)KMoT-DlmFmwzJu zFoamO(OcErhwqA!LrHSvBOdCHYxSdsK{B*p%uvkC*Ds213?(+UuSfiPC}!rhM?`~- zSlHC9VvY^lsZ{V_?dKh;D#IuPUp%Tc9Y6EG(@zA`)Rbv{@u+}&ssU#@w2HNF`L8_i z`b*jPS(Mj`q1!U&&*fD1CxU6Jt_MP)uK%Keo3nwn$3Oe$a;>;0=2F}rirNxPxA74@!-$D$ zHZh09wQ2T==l(yFE&l^|N?FG+RSfh*m7%hqQZ`y2RMo0=ire}>aOM94x6`U>*Cr<| zEPj^ryLL_~`+@}?boD8v@-OLwe@P$tOZw|SrKwOq1k+R}e+cUQ3l1I-aq4i=E%QO^ zuK$IA1*2Pk(g1at+zVjL;9-vyqk1?=FsSR)`5hc9@el#W`1(<>@<##4y)&G=6xnJ- zr<8;~tr|zO7mpxu<_Gw@e-fM4ru?234}&h)U$i;8VEO-UPT2pzasLAs{TCdq$NPId zbfle9m>^B7`ss&ajHPd5p`sQa8A+biW?{-2G(`MzB*}~$ggCt*FVLlLTl$yx z#TXv{D?;%U2m0|mSvv8L^nY*qK8KR%hA#`(Z~=KAyg7!dWSkLxk+5WMUlsR|xt!^%d}=8%i&OKL-KWhKTQv zB3axrc(^#*E&2E-t^Xe(-X4W5;Vwmt%q82xr+bKzzI$lPJDN*og*4;Q)h#(j?43tO z#T-*YThyWdx~WqQ9HC0NbvDj-c74$^`N&^6PZswHt#IQGW8xT1!3XeTmKtm8qymPUjy7Xe;04$lN0(Q zz|n?1`=0n2KEhA@S6g}&!ea+Q>ln$;7^==6ICH`w3yi-W zNkzD77{k0{W0idSoCavkEnfwB(ht)Vt0g5Z+hQV zH2BI!mqcGgla06JaPhH6NT2SzJ|W!WfO?5x-a7*KDxe8*x)Xh{QIal-`yU~D;@%pH zEdUM(VYpYmbrEk<5#kGJE^MecZyYKOyC7~D2jiEJ_ZD<~7n}KUWK0}Q-vva2mf|05 zKfrg$qa>?Kwuio)x9}#ZA67~xhr#rCIGQr&fC82Py2VJ4Gw5Fb=z)ziVM zE@>_Hi2G)VQL^D*NK}$dMd=vOmH$7wq3)E0M#;dQXH=5mce=O!L>H_#MM`ncUTC~) z8yk;`ZI3*txTKAc%G)YnC$|{>7>S9V8qA^F5KT!~Py?)6%zBI%v+~?i7jAb2A8-7e93X~gU86=7?pc!!Y4T^ z8<-@G17ZSZDCDt^lNtKGZF%y}+If%T^?TeJAWXZk&oVN$hY-@yP6tEDuG*6m$y&nx z=C7UcB)LJzD)He-q#v0lzBY-RCL!WePm^WrJ+FBAX|j&wh<__0{ldTeNX^{_ECQ_i zNIYCbwo}TxT#;MG0tE^||Vo>4M+zg4(C$xx_f zPuM`Cv`HK=g(R_~_K1_Fko2f$J&jeGO`ldV8`wVDJt2FI(oS*56fhqu{xXGhV{f^| z=&3lasl};NNgr}kTtAgeC3Ur~spK0%PKy7WPI|J(KN9auCswjkOv2}N;i>KregHo< zSpAnSv2q46lOwgKW{_A7>+y=WXTy)$>=k3?kRf{IQ#?(>2CNm6esSAeOeBxs=@~I=?%W^Fh+U-7er`XLq*W3IXYh=ejGQh~ zj$b@Gmn>%kK5^1>*o&U?iF=;I9Qu{7_Uq>eoX?z39P~UE`r}aO!}xzFs#vZ@V-DlF zyqoeQw^;l=EtbCEAk`KfSFOs3;wc5@L;Ax8N^gZDyENlxqeP4UBgq+dD{0&b{ ze)*Yj%MiYJgK+O4Y`P&HT};L~9C(2^M;BaihW{#mR8M+qo7DGp+JlN^(<fUehtru8`D_Q8hc znm?s&&3|C9y?*{}SU5b{^lf(rU&eQq3TywpfjmOkZ7$Kck&G_=8)g-+ei{C%sk1c9 zRmLA`(M9xa$l-NnVtRyUHcSA1IzCt-a0y>kF&jEdlUzDH;SGC5YhumJhE+;Lac60q zi`hUeyM0T9s^}VI@J4-pizteE`Rqv)BlGS@>&$QhcE8g5l z+9$v04@Db`(Z*uG+PN1qV^1{a03LX^ZeghITAL)AH<6?21nF)-yt;`TS9g{kRm20E z$(X*KrBpmM@`f(ubNK}6J{DNF|4kaHoq*X5r0>yJ~)3y{1k zPSI3qhqraLV;b5dKCp!pk$qy+Rx(*@!7I2!whvy~N(d`q?s%6Nqc8b2n`uS5Z2exw zsoR?%o$-s6@4{Le{NlxTiM8tu53QsGmHgyst)!=?^?k&j6qCMW-E_YY=U&mN4d~cE1yGRyK>CW8+@X*oTP?*jz9T1r7VJgN8O?WnBXY9eo5S1 zPDZnf-Qx9f?3$i)i`w@{SGLS8roKmt+b6kad(J8j6EW$M8Bup{-~7;XI&*^bS`eF# zKG$XI?p4lDkQRHyqMam-%oX3>NqUjT#QL3BJkrIGUD)b`dc^!)#2VID2}2{wAWUyX zT(OHJhSSOS&8pu`@4zl{i^bGi{yteeB+>oAICOi7Go9C>-=f`g6;t0^QxY~%%Uex0 zUcDy)f1sn{v#Rj9lxQ`nH?tWD65|%1{D2r(k0LJkfXrn-af#PHASLW#msnJRRp42d zxU_;~^9RoA-9MzPy`>Byh*N!u`Lm)k6#^ynelI*9fSdSgFa(XArY&fSk?oqQ+Oe?*3p8j)0zZe+XI zqmuL|E5xTOv9Xw2`*tNZ7Q`S{SCJmr0-UcRogdhrzX~NLi60#x!;K{_+Wc{-V?MmV z0eNu%s-_dnlD6hYR+Gi-H*RrlHL=8e<*`*6wq#TtQW#FVhuILaH(pxp78|RHq0^7< zT;vU`s#hX8tXJi9OA;^L7X#I#2Yb>jS`L!y>{IUA$Qq(0lIfYA;s!j@;e@pt;c^0(HZYS*|ueSVm%hIp5i<8 zq%(;Vu~~RN?3T=U1~`qm*W@2OV(L*;{cn#r<|r8-PPbjOd|TNAN3nBx#UtK03gyi8 zh`I(cPe0B*5?}3HldZwBapJZH=)H@$tARY77=b@9nffR(2ETa3>$|`3Gan;vZmN5O zJ>;gY-6>@P+VCW%r%y>bNfe*{6zj0!5f^<5cj+0i;ZxFud?{Y~l)Oeh6QB8vJj!1xsmpFp5*FUP&e?^K(RA2uzsH=RK zEI;R^pZonJr_`?c7bzv-e^FH2zsW`Rn61|RZ?c(|7dL!EG9%h~+u2PeQ%X)LJIPNn z?ERZR+50zSM0leo&HmoPQ%VK0k9)+z6WH|a@rY|qVBfRZBUYXuqaR4h{s#x|yC2nl z_8&4t%ijJ-WY3TZWM%CWXE3DL`-)ih9Z4X~weNmMo(W2zJ%@wFM%cr9y;yD+!lX2o zt3>#!Q(SxwQ^kFM?ZI`Ey+=YE=XPqaLi28<{=&k+w2WXdkECw!+ zSh8D;y$HizFAlp%20t?1SFdy}r$29?+He@JB^k=3`WL501)Kx>dDJ7fHNIf3Q-`eT8M^3!8ZVN3u;z<6qmv z&6mm2QW~e*=dXkL^j{SWi;PwHUzwTl4naBCj=J+`{?bZo&8wB_eIxJz)2iz#Mz?#( z^)SYSt9A{4Rd%>Sx6rtyvr4!sPj=~pDLepVX!>ziyDb{L+M*OR{jiH{;ZnLZhHWto zrVMazPtiQS%?~ofH8@QVafP>~4Z(D#D*|j1erJ>B63<>CgW@AxNsHK&sHTjW=d|rk zt6RPxntN{*>&#c_n~SSt6n9b4+*?;nGbr*qtZ-M!SL{o;`1lD2iRTW9Gkzku(fJCC zkG1LNE*9(=IZzH$#Ls>r$J1NKpPG|uKD^iN6?X43v|r7Kykg>Gczwl0NBfr7G*{$f z0b0t!Uy(l#h)1ts9N%||&TAw(e7*}l{+6c+XTBn@4~T3tNzc9_uLzJ{x+Z3wjsE~| zD${u`$siqb;Vo^i_Dz}(A7GjF6h8>Fc2E3q(-piI5a%|N5v5n;p@E0_bUv@*3TCnu z6(e_RTR7H$^>sysi66PA;BMJ`1ODUnJLRg8VxGnWX@j)TWy9Gb+}VLI#_^9?mjT=} z__IuQw+_4`1J*hluic%DHgH%W=ru{xb`8s?}f?o{(nIuFm_iJvdxvSQY76ZESioD1#4*D7SGyJ0C zXEKqs`Nc1OCN|PZ)Z8Ei`je1&*JCVqewaAv1}1`2K5^R(GB;tiuNV&^qA}+kBv<5V zzJj~*Jp4<;#w+q_pJ=&Bwy~K$5&wOYU25<>46R3_f$_eujnTU~b1&-^xjnEtb2zXZ zu;FONU|`uGHWFA3u#vk*TB(S#cZVZvV-&up);Go^l_^h^mnoC1iFsP{(C@c#{eXe81TvPB0$s7|7Rk3=0KQBvzUuk__Yw&+VPB)4yRsKijg_MXt5`yXWeIKGZ=5#WewDMpbbWIGtGy+-=tbL;Nv_ z(*k$ZrMtKCF)gH3w>$<8-@3%N?m!Z_N-FMP?QL+0U)~`O+tS}Tzxq4plHWPM{5$8l zzjJ;bC(g$h${8csCC>c~C!KLFaqDkn!FUc-MspbIk8*|WHll7Sz2^5ibidc(Q65O| z|9u#>1aVaQyEqCysNU{trGBOm zV4#SIWMn3$W_J1d)YR=g?TVTuq@KhyyJ%&lfP;4v3CZl@XzCdT82)DuP=5bf|62d7 z_00S3{l5Eh&e><5eSNnsheI}~xf^6(Ll)P}3w3#E+t=Bl%QcFx^)mXpHaUytIe1FF zyu&-lp&m*vL`P!ejsVwPN=S{~iOY7FDqy^qUGAaYM??RIN?k0M&i7#qE3*aP*o&F|2+93BH)$_=XkxNGo!$5Hj zdbt7PZlH-+qenI^!&1B&Jsf+OU&Pp1jo!5>)Fd@1dC}lI!y0pV2sJ3NVz{!JA@~*%1qP8|Vc6PT_fNmvxp&K1je$k(9;_*iM zR354QWu#z*q!P`y14YP!84mmQE}o;1Mi3AHv@6lM8{ zzZycl1uYAq5K!%>5SlGhdWn`CN^djes(!xt1M9~$?Lk(W;o!9qG`?#W?96o8 z(ye44EPqlp3`JLOL1`Qk9FKuPZ>u|>)RX#qTOFVu{}@>?mqtd1nvC_37H zlbN*iV{LOUS|}S|#1*aqHkNSzK2#Yp4}3oG60iz*9w-Es0M7thO1Nhf-6Xk*+oPz| zAi{4f(MqEUtAqR6d3;|=PF~)y-qs_^SbU+KdzIKXGC+o@k5<3U?K)Js+)j`^(L;=s z4I$pv*j9F<7grT^ssE$21e=aANPj|u6oR3Sii9@h!-?vSn z8j6YN-qnICnVQ!lbV8x+CECRiwAPiPhHJTx(n>OXi>p=BHG2xxGFn!zRZk>8A`A}M zCsPD{QKE%CMtQPw874sZ=EuoF=S%qJCupMYZ+l4n56};|u$$BufZ*MnrqD?;mTIS_ z&~`T(-N`Iy7TTxjmhdDXEm3 zGn`agn?dih;Z=@xwmn|!YgX6F4@a&T8nCwgX2_cP{RFajw&Q=XA z4O*YZh@~i(^iPlGVHpe(Sd@i)k3CN6OeDAybP?zupc_lInk>3Ovb*;E910{lP^#UW zOS{<&m+weD{yxlde*iPO@49o%!TNp7YB|-IUGLNMt9VRP!nzVQ)A`W#G~BS>4Hu{ImFvme%4?PD3446H zeWLxuDORS94$Ws1eJ0b`Pk7~KdY`s`qAl7&2AOVsqAlA>Wi64tOJyQb`@8fusJ8t* z+DyVDzL*~MJg2{gzK44VD?W!_g|@Dka%4}_{+5X?f5kN+YQN^WoAO!v4o$3BXr9xJ z+G~613z>YLh(#Ft5-Jjgo6|S?#pJL zdXRjKXZ3@vBMRD*gUFuOV-C6h`CnYcu+q!oZX7zOB_ASBnPg3yRz`I)y?2lg|BQAU z-$PovfRcmS{m&>;rlXBoD7Gocl+wTxKc^HqjPuW_AANsNJM}r0xhR+PN1L_RkCTZ! zk2{px(5htlkHu&LXHl=Gfzo%tn90145-I)5~9=`CD_!^}1x>KmhL48lt zTB6Ui-KQyBrhRtJQjXwaVrg|HG|K9=W0m+Wh&Ez`g@zKh@!1v%^Ykmj_Xg+=M3(XG z7FfF{V1aFuM>|0r<~V)YsM1)-lnd|J=-j&QfTR zML*pvRxL4Dkw}+B7fr0n8;oeD01JRj?EKyf>T2$2_BUVB_Z*5k;EJu+9%c(HZ{RS8 zqLA|mcVx9ruf!UUYP4-EICn!Bk1?6+U{FPLM6$rOZxRwqb2bLN6e$D-Z7AUq(^u5< zug{{knS&h$XDOT>$85?u@>4AO>SjLp9EC>qLvIxcbga`iH7eLlD=fN19S}*1Ow{R9 zk?f5U6&IC-l^y3O!pHb`h+Iq|M4>_%w~n7Yha38CNudu823mkr3`y;R0@uLrEg@zNKqR!;$io1}wHb zvUwP{UqB&S!;>yj$MHLod1>?%IVANrNxyrV2HM5r2%a~iS z=rfvxVF#t6Gg_@%C5!%e6CZF1Pi4ddx_er62e#^pp;w_B-K50szbDNz+{Ok|VbQ&H zNKV+B@JU%}K5JVAt)M2kJN7kXxL8>`xsOtDwlz0iNFf0_A~%a#Q*dp1_>eR9AqYs$ z=$FoPxh=a?JEIrleZ79wM|2tM>m1fzic$1$>{Yhcq5WH%?rqQBY1mtCe)l+?&4Ucq-vCk~i)AXf^r8trR<`V-oHw&ajQpaBtOk z&M6spH_a)L=EH`#ttHkRJ9ocEex5V!8*JNsFxMkn^r?0pbB#v!kFyWNWU57vu}h&# zI!8a*KT(dgz$}Jqq+ZbvB`M4v{bY>OFW9a|+A4Y_s{Jf_7ryrzP0jkV-eU7XWH&+m zKWwXl`i+{d zQBL1?ZN*EaP^0O(eg!i_i=EZrbJZi0M2Q?+&!eu>-H`c6cscM2AZ+rBD$x};Q)E!s zz1y~3GuKf7k+ELOxIvd?!_UyHJj~5EshEy7aqCT5L36P4wcZhqo-stekSc&sp)Pzw4z=;xrD(XSJIyE})qlYgKCU_7ty zX!0vLufNsAhu)$kbQ?qIwi?5{m!rS9_J4fuG?!bR)@m3rSR zS3*3Bqs?dZd3KM@lY+WpkzBxs(ShE@BW>Zm&gdEN6;20{SGDE z4-b~t1XOzz?@T(Qn}vmxa*yJ-z$b`Z+u*l>j|cxN_$}aL?Y#Cj<+yjml#lD~BKW+I z$-6rgsotxvayHo-?q-FXY}?w@IL*^D8|KG#)h?J z_i4DSoY#9h__sRE0N2!{McDALd;394Jy5G(wkt3s6p-bgTC1P8x9r6bvH=G~5C3w$ zXJVy3%)!5`r?}up(Et%$3|GiSH^T=s?GCBz~_lYuFKCw8OyXGsz4ibtYHQl-AUf&b*72u~p|L!|SOKtLw0MGLjE%I+u(U-LhbTmJ{~eW!>VI_oN6btCnd|Sf8HScb_%xYCP-rG! zDYJavd-bAWn0G{!%lM;M7Y%ei!aa#SN?+IW=>(HYd+YhD#NvyDPAW3I5IP$GzYy00 z<43rT@%Qta;=Oo8iRq9b$$*SL4^!T3_Quh!PBV?J&baU6(eFhVtlY$amlP!}Zn5Ku zy<<-Ia_m7`j`jT_jR*V&wfP}jd#7T8(*P(>VJs&2zkAf;00(SEMKi`Vpa%dwl(fV(5&7E2Ms4+)E7qAOadx8qfejf3?79;UE(PqF!QA}&#=V#{i-!eab{ zDJJ2@!paa~Z_?Eqgt*IW{8I&wW2Q~qzyVHcy)B_&r~om@u!!DvA>v}iR~0vXq6-W0 z>W}FYwe=BtKo=>kbYUwEBK*zIxR-$q7Z2!h1Iv>G_%{aDSN75x3~Un-tLGcs*mjCc z=W#}68nMWhT0)y9l(;wtYS?aNkBc>-Sq|@1E|~(VEw*(g92T<6J>JE-9+qwImeVGw z$L;b5wRiDNMwZ>lry0so%I$Yu+y{kYF^00+#TvmMYR~$}UVLCyA>KKRVbb@IVqM9{g|Q2sr}gQdi#NPAwYZ0wJGqZ{xF!w_o@hReGZA@8 z59VvQfm^=Q^1M{7e=rs+J;&@f`!wnCe0GTd}Pm4&Hy-1 z0<_G+@AqU8@*g}nk{!WHpR1AVUvdH;)QfddV;n2c$}{C{sQ18vU`&C{>ct%NQKL4i zH$%rYwn__$LRh(nHa41#VPvi1n`2on<^0Bt{n!$6|6O~vAIdP@uhLHSXYaG*1Dlxo z%m$`beTWg4k4TLMo+%@BIk4#rMq?n0=1hIEl+<0oj|VY2bD7i$zhboKCaKp!`+iBP z{slieh~?3zSV=V)*LJ*-PaDh@`imRe{;cRSV!|2kX!{TugBGXse>G`02eVaje1XH| zb|WLRpIH%ym{|uql+DXAuCAKdmc!09eA6(JjRmvTnU0CDw=UN1v0$=Jaqtg^vVedj z2Qv#j=Q1~})7yh(ZZ24-Ct}iShaw4bIjiL+FfZ4bNMywI0Ja%nZiO`MsRK^zN8w2si(z&$lPs_rV!Aq6bzB|IYBoSrmGveSq0H zt1+xue+Y)O#0sO9lFwr%usGlEN|@U3IF1bc60PQaI2Q}JuuoeufqAv3-!E!wr?V3> z9dF>%X5eLfrGZz@V5u~vfyd5dKNv;9kY1N$>qTx%WhacUlnpr2`d(d3Wn0lFtnVX| zgz2P=OE`3`xr5Z2_#5f$Px{2hmt?S;G{mOO&SYot(qGkvKg~kqcB`N*NfLi}HVfpn zSxlv2jMvR(LA(GCo-qf13WgB*yMpr(f9r(cuJ9{x3dG<3IjkdpY!2(dN6r>1!Y|e- z5X$?7-wF}d;*<(*vXCmm87er7_*)_VMmqJx-`7I=t}}vcX5tw_S|9`~gkYpIgpgXq zU#t++3cpanWeAnKLQpHX0`d2?a84FnsM9I*d<3^n{M{8!#px$vc^7`vRL%`K?0IeH zJl30ePfA;uX-c1$J1hI?1>xN@di3sXqkHVp{oLl>~g z-jmYPa!t9J1rW_y5N}GEmz&8O7O=ng9|f#OhbP8M@unxT&Do~BdCz9%Yu?YW1B@o1 zqg2R(Udl=M7kW~_&Z+1p02x5)6h%EeT~WWn={e!k6!jbUt%JJ|dKI7-KwpEu;8Q?N zkpEx&GmvjZJQ8%dXCn*J@*V7ru0{KboCN}9LXtKvY2g|8@K%4pPs#nqU+A^{_CKIg zzNke7(C9L3Gup`wOk#Mv{BzVl+|LxxvsqlAu zz`y<9ytc5baz{3Nid&pjq~!)HTRXTdD43a_i2^2Z&uAseC=N!Gp3OC0 zATQt(a# z@*^z#1a3mZ7w8GZ0z-f#U@|Zhm<{9u&u`Mq{gohAbZ@Jy)&rfk!4lR3{L?$IZ42lK z|BAOD-!7|3;CF$~2G2n|f=&QE1ieQf8-?&mz;$37{PDbkInc zcDYCm1oIj^Is?Oi>u`4l?jh2WEwXwTI0EQ!9|ye#*%jad@D1GG1K%LQUBFe~3*dQR zEbu0f37m$`z@4&Mg)rBUiMfbt1o#nKLm>n+6?hVO3z!eQ1iS<60zTfRtsJDpc|?xJ zx<7F}{~yY~NKz7bUb3RZzZ6H#cW4cQFBUH)e&U@P19udtM{J9HNFP$Mqf#0R>IeE> zA8l5W;wgJ&N4KOK*h)KHMSDWoZfu9PdIu<;v+&+y6kq?t7FqR%Tl_>s;@1i2R;A4t zqx6>P9gFtHqsrT|a;pvx5IGziI|7`@%&)(-Jg(cn$f`Ts|GCjZkATAY_pdEvigqVO z$?vXC-Hq`upbF@*2cM1?$16S>s-?v)MXS)>DcmfoC-fC1)8BENF2{+EaLr#MsTS}( zaayKu4_SwEX2Gv)b!Tso)YrgY1w`P^kk^85ZgqEpTfs4e4*^2n5$-_n(Jk&G>B?G3 zje}!&t3og$91VVQtGfd7so>}0@IVnk1((!(@Jn0WFK)(h$KclhB7-iQBy^6LdZN|+ z4fMYU-w24B_XylF&W(!zB&kS}*2AL@9HX5ck~9JCN5Omlr={BNbV*Wu!Eb7n_kz18 z+#)j~!K&4|;^M3XB_?lR?TdS z=SnNCDC)>zsuU{dBvlf|yGM^`CkgAXiSQTZp%UR=_7h+Eyb{4beqI^g53z}#B+H`2 zp5QH`nx{c80zU)40m?>2y$33RdTdm9pT$bBGrS=KWgLrhwk}p8xn;4ERWu}oRB>IS zx{zuD74E23cLM0tCRrUX{QX-B`_#W$3Z9@#;s0D9sjGz^+&cs{VG%Cq1#eQ1fy!M; zEe9P9`4u0j!-pu<;zOhYl4L8A@#&IA#i9M#59hWHW$N`Gxf1iI5!&ch=^CB)4vaB03yDG5nW&#a0;jf{J+AP2EYp7 z)34Ats0C9GxPOfy8ekvr18@Vt473^m!~%~3sX#8U82AME1@Jq8DjawZ_!TgIgN^}^ z45R~#fmeaGfH;?Q3+N}n55V;z{5b%>ZxuBLNCMJ;4Zsh;b)XsW{SIzZ(g z=prHwG=gFT#DIVaA%-9!c&yiYBpk}ABOtffL7;o?|F33(*Z2SOy;Rk!s#mXGy{dZk zs(M!Kjj7%hv*!DlRX(Cj@({%zFe+KDIOSvCE6NJNs9ex=%Bxcq`T|@(@~9eazY1XuOSNz z&C<;zI_ZD9ZtR6R`dA?Y;7^MqlRgT3?uhItod-vj%o?jK>o-1JrjDQjV?OEma+FJ%uXP{*gw@ZUeZi_d4*WYpe_UrSu@$I>u2*+6JGsLOa7N^6BmVwQTP zTxJJ(q$EocJ8wX3zU2!NbIu*3w78bq6U$;7mK4P(|8`07T`Sm1ue7miF6mnPP1n9; z!fhAhWV%_!@ao1Z%FAT~^!z*k?JMm`#+N$22(a%CQ@*gyAV!KE#C|7<&|W#>Vp8{L zoNbS0D2P$s)e?fubV4%^Y0~7hv2j~n#QC_wa)QWKmo|n7ONY}E*re{#>9k91=kC&n z_kGO@-KDkGiKaPdv`K5jxPdO5r6Hhv|x3fxt$^h^wke*oF@y&C7?EThMw=UM*47d8W&J+`=lGIlUTqJ|yjn83B;jAWjIb7?khCzM9tg0` zF-pKz+KA3HQhwuX`f@%G4QX|HkylP?w1Msl?-Ode6$R8BKO<<3sUuSzi46wjc{fQ- zElII6Lgx~La@2P{`H{kOag4$+j|}OqBzd^x?q_t}6N-#2CgqMlT_m8?9$5BtiqoWo z1t{frJ-Y5}3(eW(q3JW;@}dS_c}=TGtiI!ZJp5DynpJ(_&OEWZ@|BmdD$P1)9Qyn} z*X7HCs5QO_VfF^+RPqySdVU+y-LD3Qq>S$4V7d=z5k{tqR?(=0xdQ4p{spPawOreB zZILY-v8QYa_8+ve3dzMV<}sb@Hp{kFV>wx_^%cI-j1>u8Ub<4raMvq%lQPjCW2ePp z?7)$PE+|MsImLcKG$|Fq|I7Rwrjbc0_mk9KB^*`UB|MmdScB>?Z~@^9Al=u_a{MHO zb&-TOT30sd1=jw6CNQPLnI^XKtTf`~axyezqE8o8 zC#H##qU7t*Z>8>~>VP`TpKDKau>DEqjFWvv^|7x9+kHm&8EHUALX4Y~&wT4N2V+of zdxaXr_@0n*7I3p{q<>WA(xwbMu`JVOLDT*rP%N|dz7Z+&x3&t5Ua^)3x{U}EV;w^k zRu@}hZ0OZB%t^!)kcjYQIX}bT{G{o2CKnl$3KwHdIM=aQR~1mReN_z!cGg1KNhs}P zZ)XWIR2r=afq=R)(80cOF|X*Eh~|L$H^0$I2ApbX51K!E+56~x)raMYQPoQ0jqZKu zyb1}B_S}Z}H*`uN>fRFl0CzZe48Is%Uy(hUgedmR*biA$Z zIY{m`UpIRvM~cD{l0Kv*)h=msn3Xk_5vijjZEit_63d7fN6hRP$5QRbFhY<^u~|ig5o0Oke9WF6=REI(X-iJ z-Wg-xym)gMdx909o<5AWj}xs80rm9&qjdCP0qiP>`f3|`t>@REQ_ewp{;L<5;QCRG zH0|*EZ*+V=bb@v?$6i{O;4p|w3py>an(=}Nr&nn@SNX;hFhAInn zr>$Tk&0FYXdJJw(8(CSVSAOxCYu+sD3Veb$)$S}yEL&C>*4$lr!7bEuwhKk4$^vSX zS6Hl9lz>pv$(~fyX>ma1yorz;n;zb*OJ|!&y0L{g1L_`sKz$&fN36=vI^&80<*MSD zQ8u)OSlWy2p&ut)d<~DLe)5p6oRf5Alo!2vWk2L_(kqCijkI@@+j=$^VbL@_{|drt z0F}rwgjWH-0QfrN$P%y;?h6|cW=|*yvon^2l7RZ1Pbh1=!WRV81x@8tME{2PhJg?j zWtTdP3>bLJ6FY)QT}ww$n&DtuXEH=$TLm2>r8@M=NROi-@(%;$^+Gy6GluDZenz?9 z%LsI;^9AjcY)sN~ySd;{(YE-ysF6`cDUkP*9LLM{E{i zbNR5M5TB2{&ot4oPWf8L_W%qAJOFS2__~;pF+qYOQRg2#mELelnzTc#5R{`44np26 zJ`%Bhp8eWPp0?T>xN--Y3pLUmjnJ7x8+jIRuc0-FZvoT;__}r@+ZCl?#N$10mQlhn zo@r%K2%|kIiz#`N=f^Ti+~AqEn0ATvyt(*Z3*LiN0$+j7_kdOaTMkX_0O$(n1K{f- zMlQ8r^MZgncsR?L+m%CTJln0a8cqq~*i=Dd`|FBngThL_u>fQKChF03@kgv0VF91| zzSelfSilJFlqU~$zp9KOmglO++&=OI-PkzgqW=etS;|-$<+F;RcP$4CqLovaVzvet znYKwxLF>mAvx}OXOv;$sxZ6*+rEu`sPwwcZn{wE-y0t`E?P53SF!%U#r46Uh0O|EP{ukU@(2EgR ziBn1g>}JwmYl(KUVxFVDXd9-JSkybHq2A{BVW7!Mg{*WnBZ539-O0#o-@%s^Y<)*d zib#1{FJ)(TD(~UT7Fn^QJ*8;l@QatniImT?o*ypL5`tSm>XO$4iG1x7#Av0?M?3ov z!=8vQGTAo{4@u?|Uo3X+b|cKCfz;SiJ>9Fuv{RmkS{#OiTL9F|`WO;#27HF09Dwjk zK;AI?I}W&kLZ2Zd%{o32@FC*VKBL3%RduxTim&nxGq(Cp#Tf2rwDMvwMVw=9R}?VH zQ&Ln`NA{RYO3TWL+2az#Fi64CFy{8trR|gleA1k(tcfdJ{Y1u6fUL(oLzBY9AG85$ z4J}l#bmYFTC@)HO+OW5e^i$j(&B8p$7*2#&8I|>(#dabthIn|3ac3SVRJkVA(C}X_ z=|)!ah%jZL$BJ>B;!1}kX~tYnd&}%%8k^;zIylCa(v~w7nmIF=^Pq?6dF0mm3UpyX zO0d?`ZfQdI_eg~l(IY!n?`Et8zrJ75!~FK;Y*7#yWvVo$$MA3t--Po&|)T5`s7HiVjo(Wwy`4a2_3nL^zoLgL@f;Kdhnp&D##$^7|!a_Md@JOqB z=4PA*$-4k-TD%V-9ngCNnc1QXvY8J2;AZJ&&nf2J-rJW+pYJX=UeR7=ny5-pP5A7r zG~JdldAL_^H<$8_RAcTL>cc>TY7bqXQ!$TBEg?1%8z>W2kLxl^S8CJ>iN#jec_iJ8 zF9%XrCXO0fTbbln7Y3wDHX9eM{2GuFvU{Xau~GVufHoB!<+lv+&g&TdgQGfrDdIa? zr1{x4-mjkWbIzfehL)~He)X7N+M8`D_p3+z)|GzM1%tT?^zZoT%40EGMZfx!*IAP; z#ua62Y-Zz?yaKu~J3h*8B3TJo$v+Ft3{I6OmKw$Gxm5h;!ckbTupOJcKY%4;mf za8dpafQSDAz5`qY`~sju>21-CfgNweMC33zr?{!1{edq-)QKsu^Ggd@5Pae=)ATnT z!x+(-E_Llk6yD-XV;vv;8V3WSz0%dyUU9fMAzFFP6|JPYr7bz;azsLBjO*=`eFu1! zDHw>#S6^Y!SQ3iPa&b6scN#%3+dGH}BGVd8NFJk+!K7Ea%%uxmEzuU(8p;URY~(aw zWW=J#7wMI28sAWGt9!iB83o1?{RU@dS!xYkU4C_uL0XFtWIDQB`L@A;y`>Za3kUZn zAcAkez)PDM-iIHF;Q^m8H=y3H=|uud#IIKS=-6NNg<08? zJknLZX-Vx6ZujY&(M1_x;td}oP)m$jv4kR3|v}VvNGJixiW^j?L`Oe28|dwx)sI*%z@pT3>p+;B)P|>r2`jJ0B_g z&*Bk_!xuAadVz`QzFv+qVI5DfJ8dZYe6Usz#7=A7gSFC8tNhQ^x}n-|-+lN$%$J7$ zLts;-x+!*m&w~H`kp9U2Z@Du2S@d@Pe|X%|HBSO$`DxMrHD2}iB*d*_t3 zkd6&$YJG1C@{JqeWU=L_N!q&wujIRD~Z9J_v%H#(%`5x z`&ExOtb4?{6uYiR>a5IW!LDIuAKB+uQv$-QIA>Htw^=49)t+r$tXZ=-Cxb(yU`w6V z!Kv#J+uQ*;8$vlfBFoR^&4!<6xW317oEnVHWwWb>o9xT9xr{zoZH`Tk%5!Z2Rp&C= z%?`?9fkK#o+UJ1QNX zUCT`n|G}7=t7ab={ya{KIF5mPoCERyA2uESJJ6FuFulMbdQ+gV5bY;T^uSB4O4^rD zKco?TE#;D%bFOq4FnsNm$K36e1~(l-BGRSq94rpn?Q~2RV&&^N3^XmtiNuLz?@7Np zPooPXUqEoOj6WP4^gJ%RVqcE(d?RU#f-k)lE5VG5Txa+Hl2Q!Gqp`IK-h!X`^4aI3wNwOWVMV6k*#rCBK~pv5bv5WY^Yr|y2tNn(t;<6DU$~{}ewO$H z!HPF8$JV3*S>vYv_qwGk$a?L!EGoqH?vD7s)-4J7mH`!QS+qGFnzLb%UvyB1)$kiM z@ERIRk~#iDTZ8PkI({Q?@d&r)NzdjBMG5Xy$0UcbCR*u$*v4Rtr?@%BnkXg0FF2wU zqaTy3L=WG^LkxF&0bi42UopdR`cX^c3-)9ho62|)PW_`*1CC`;S zHx0f4#pWxWp5|CMhsk`Rxqh0?LOo8=%KciZqqJm_L#W9VGsJXkxpTE{j=2sdb852= z0;gqqX*PRRNg@~%YM9gnY%tNvB$RpwrR>eL#1ZX2yA>r89gOs9|MqOSOWNJvEJP_Q ze0gFIaDU!gI^F6RI_F;v%cfBRj3ZjPPm?b8&lMsxf+b5?0{sk}yG-qsq2K9v+Np;S z&ihWvAJCh9Ta!u$#B))~@qqN=fP|P;+Of+YIfl%!h@FPzL8VgM(t88alB1NJ0T{bX zh|3Bz{AOS;HO7`PO((lc?g2Jx0A>wL=o+Ow8L&Y~s6(QYSOIo&wC^rw&US$05Yar$ zuYT&1<_t`OIL8F28$Lv`03?S8_JO4GJSC}z;TArUNfjKOuxkf$807l`0tgSA9qMP4 z(la24p;6KW9ip$z4yYFcLP7{fFrpi0mky`2O6!FdJp4WFIT@!Vu--_Yp> z?jephKU|wI?0X$s`B1HU_$*>7ox<^lrgD7M)Y>`4qlv+LQb*&5M|`0(U3r+}Pa^Ng z2~@LX}rNF7=)NclJfCcFp{<-%3Q6KFLP7u{R4TmMV|B zQ+jE^RWe_CYGG%?gGb>u|F(A1!cBzzMyt*J=PXiQ3qjunh^sk%72q2{^2;1Q9q>=! z*8~0wI1PwKUJtKt|+7)CS}9H(%}~|_@V7A zab)6{AGBvG7%B0o*dCEe7$$$D!uV4i=J`TRxbk@*)q(TCEWr`3d=#Kd!u@c*m>nkN zkVl&GRM(iZAVpULO0r)j!z_7OTKm+juHnj;IO|`j1L#>X#my7_NNaXV*9y z1jMEUq@=P5BO{e+?>Ny?6rsET-;^a)u%y5N5vjc8U8k+Et<#pnqw=*Cmky5o$w0!y&FIoqYMQZ`+?!Vepxat9?y<-OH&tT zn8Mm_uFm3GVQ~igxm!BCIGI&k()Ww^bK%N!erdzg8RdU>bMP#`z`#H*B#M_@+1Ep9 z@~}?Qo6EY|@`<*xg7jg#f7cSO%)^;OdzrRL+k4m-2*7*H80%Qc^jwHG|R%B+WIxp zoPT{?9@j(9U!m2|Olh5Y)Y@t$?Hxz_$SsBKPG>p_EDvaDyhDso0>0}GhsaCUXOrCa z(%jh_hhM);QZJP7l0%$izUyNP!geh*{BC$wn+yJCGh8pTHWZ8dhxi%I4iMcE-TDC zJylEPGaO@9Oea~fe9=<=~Osa$A48<8I(@~4lO{(Jo&0_2HoX+{lSd!26KY!VZ!C+FTf$3Jy z9w5CwzMT3@VbZ3;tkGLbI-aX7(Y00#CH>PKU?kXNwaaSTR4AS+utX>pU$19!9HA29 zwbYU@=R#0Rci@0g!AB^uJ|=COgZ5@pGLy2Tu;b~TAd@11zf$x-kPFFKl6~v)QszDf z$qT#AMo-na8%qj@;}&;oE64tNCb=fnF;q(_F*>KyW@ZQu(x1J)EVe*PvHi|?gmM$c zCDTN8pmccYa4a3t&}X}hj(24`Vs96e7brh1X=r8Ig*6w6ZgsXMSgV=@0Ui0WY}bScWtBH-b7qaf(n-{}T9^oB zxi@-~J~g&Py7_D-DUlM&t?Uj>8djbgw_1Z2-5J$7Av_KercE!=q}Ao|>|#yYQ9htN zLix&fWjggX8kbl^${=YOg2u;TT4s`zuHqpZ56v4geRO zXUL=KZU9inI;Bty3LiFJ@@BXM>nEgN=3 zGG^jscTBMjB3bKh9~9(jH!JWEKnw(>#eoGU}X|Gf)aD&l%I>F~4q!OT#pb{V= zLEoM`M9cAYCgr~xv`4s4@p((IIStUb6o^Q1`ZySljB?g@pEB8l(-BJC!0qJEEqtR% zFe%quw9W-@QH@F2t}(&8%v+}nMXqu+;KNM^GEdOU%obhnmI5c6#u;n5;GG6_o<3jw z0Pg-eH>k5RtHxDGn=i2FaSH1!Y|>wAVOZz_(& zuikIQa%u>cTjxF^{kW_{`5W$%hA!@vw?ZDxVvpV#i!uC31SRHBtf;U#T79mKv&FL9`(&tMc`OsEWV1o`RM(G(G z&U>4QR+m1~Aa0x8PW(^J%x>FeXV!GDi4!7}V{S4~y*#iXLRsgg_n9u$;$v~&jTHhn z-NN))({OMcTaZ@1ZCcus5y~7-$5ACE=2{@f)17RW3$fA&Wva(ovZf|SWKx*42;~h| zj>x9)!rqdbCBIAysOtkOq1jePgi`M6Q9{pq5z5neu`r{AE9#0xB|=%@qH?^q`aKO# zQmiP{nBb^l(XspAA2ScxrNe`Y96UCbqM9I*SN3Qu?}C4W?4*<67dP3g7j>DDO>AoL zp1w21_H}Ws-3Vi~iTj(-OrM`SGVp|Rtyy7=wZF)OZ_Gof8nwfFae5?}XS?99o|f%3bP6 zpdRC?mJIiD&KOjPL3{|D6#^X8=C~+yK+M(8@(urwNF6 z2J{3B0n7qC0}yZ_O)^Pygq3YMvhO~n{rgmsrP8O*^<&LFBzDDk8cbYKSZ>D5$0gAM z9RJYz*YDGGobtEBamq7?J19bfv95#isO!i+V`E-j96T_33xO`X)Ef8)tnduv72K!9 z9xM&MJ6TyRU;rG*-Q^Lw%@K?4CT812ZrvU&ZfrpPA;4Ip&NOOqOcnMbXHFbg!#!e}k(c?h$JF(>+X~gph_PPMgwqc-O2)3gaX-jiGB-LO^5u;jT zn3uHnHkUftvu$x|W?0LG#Rc%f87yy_4OK36jEC|Qmrbua)=2L@->+kD&&R(;a1@&Z z>>e$?fZGsI9a7-=lw_mQ4n7ga`bhJ5Xs=7<;lH@oH8y_?eSojnPyYJRxea7Q!BFI`!g)frbaxPDV=@*pyo zD!Z*BE!roWTZj8^Df@*k#xg9{Mx}#an)HIe&T~sozmQP=x<4cYJ)Zf5#6X4cK(HAv zx%SnTEqRQHsmmXsn~Ff`a29j(m5!5n;ihdKXjfB`wTG@ZV^ANizW= zY}~G>)S|medqI3j3om&|iyZrvCN%FUhnG2^KID(YNZf#)*+4kz4~(=6GGfTa#oKyZ z$NFjGHawttp*j+-#*l9KT(qNM!I8)XtJ|Bn&8a0JHvc;GmtD}E0;V_iysorXxu5oN z10Ae@YHpLopIP`iNZ!}Rf+5HP!_X5~5_F0>NY`LU1q+qi0apnVg;#jHsVB6y!-zS+1Bull$80M!opw!OHPXeb>6okLlwog{Yf%j8b?fp>CaO2(M`>?^=EN1y-nP&O z3mC98A8z)PKyM5lUGJALO&#D1|Er|_1+h~K9A#7j4TwD+vt+OD|C8CwV5jui(nzZ{r$>m(|!mt-sjmvl(mDiAsm|N?Gt3q5P z3KN|@kiMnSOT|pYP6W%OBX*^&j9wV#OheikER%}ZN5L|5yZN@QOtg^WqzmoW!7_Ad ztUtB_s?;Bno@mO>iv?ne3XjoH9&X3{{ZIz?Syn(#ZSP~ z44u-?OHwXfe%vtzCPq6U75HSYC1}jBLcTL|&O`swXLi69zD|kscD5&vAkyPX`A}Sf zzcWVufbAm)^Z!~KlXNS_4#3R8lbx<{&XV*x~}di6{8-<-5) z(^R$(k-ptzVSi>N_ohNt<)lHI2eFHF(zBa4u{SnI39n_)lHzOmY!oLgeQh<{$VoA; zPh=m{OLJbIPm7#>{aM2eh;DnfG<8dE^!p6q9|N=oU_JV3w{E$_nto49Yu}v8ws>l9 zy*Zy4`gs}tbB{D@+Z@oTJ-Y2QVPEyt?tSY;!VY1i{I_?-RD=87fc=1VfQ>fk?%T=i z5t|fWH6KCkimD7^sL0myhiuY&JNL4yHq_4AHJ^|((usHaN7wmZzZ^y9AMR#XZIF_8 zA4UP```wFZFmcZU_9uh%#h#_6RUohuusmCuxVO--98q*^%ihuVqPO-Ax);rTcOr{& ztKZFu`MsK+&&J!eFE>a>-(6t%0?yx$Woblp5B3Fb?bFq>Nc1!C|5Efx$O&0DYlNit zaE-3VrK3Ys)#_l}Orox{jH>SRNE!QV=2b95e`zs0UoDKs2BwD}gsoE5B_3(Pz7lqV zr}p^1vBa<)tX5@98TI>uuOZx> zEu|eC9k(p7yHK}Tf3(z*k=RKThTT<{2Beh-6}B?F_UZShvut&?^nGJ4TkDhJ4^K86 zLCue|rA3Dqut&0`YlqWl5Yu#;{nT4~vnh_S1H2OV!3vh~N~=D|GJTBVvpjx=55Em6-N2;U9v_)lwmG{t|G&2gdwhe`h5b5Et9-tjjs66Lj{_9I$qmx3FE1HFC~3o2&!TW`{MY$}Mb7wdUSyxi zlfM6E6Ahkj{*WREwUm)-Qhm#~p!{3!tBpQ7fUstdH1b#>xhuVVtec6+f%x*nnbJJz z@G&bnDqTMIFuNHy7sm??CAoOVni9G`F4BqESKNPofO17>NFQU9R<>Ia1JoFMlyHQ zVJ_+Rw?Z@}6N$!XgWhb(^4-#)D9iGsUEifeKZ#s=g|QtlFjxBiyNu}HlZ1aVPl`V| zIpKxAnB{&gCK@QO8}p>mr=K<~M-&6~_2~q*B2T(@`dPzsz`T|x%|DYHjK12hcGsC`mM&rk z&wb4<_DL^(U&&g1Qq~U#Oe;~gZFb%K;cIp!2G40un(PgvZd<_FyFHoUNGdsBB8YkL z%h36T0=JwaEXT3VMq;KL>o|BGAHP;n@c6Yg1@J&t7#p9v!!XCsN>hK_&+qq?I0EXg z@SBF}*ILdSbO~$FW@V5^J>Li-MF2VutMa76pJuUDd9}NKN+9vHk5xf*Xqa{*zA>-% z^d%E9(dw%J=;qDK7Is~p6m#W!6D2}xfsp%3g5e~XT$3jyTwOu#NN-;KS3K-okr+yywic=n)sdxx*Pmsp^J?>NtYBjfA*&j20B{7bKd<)a%{10T$?XSx zmRHNRvbyMxgK_i=VKunAy_7wYSG(c%d^U$xySJ`TGL$53?K1$aM#<17C`nrVY+h}y zx`j=qW$)Fa`LxdOa;d%LI?P&VnR~Qo? z$)7}!L1`2jhKry{D~VEvS0~mQda!L(>-|)f=v5I_AUPwF^kA>#$&(|=w^ldmTmevv zwPWxkG}1vma)Q{ZcJv!8{lrRhs~Y2%CqKhPlzUY?8maaI+~=lZDjJnXq>e{ zn{7w@2FlgNJlVjLo2H9xT%x?6C;4n=ubkhWtZaYQV`xp&brSPMeHAOUs>kJH?a8C; zn;tnohK!&76n49vW@clny1+B$?#}5k_IFnf5#_?Trr}~2(Ezp$mR5D9hj!Bj#veg! zoLGR^8s@aTNPk9vZ@o1W;%gx#hq9&&3X&W?}3-Cd2B(x^WujwG{jHhF3s ziDw^j%ZuVLNJHK7jyNI?aM5YLF|^Up?=6z?Ed*b?FiDRG7o`P!F<;cGMjf;Pe<@(V zGv+A!E0(C@Xkb~lZ0$h0#=MW(odGt$(|}bQ<*6M=P6jpFIQx-=iuPPHu|~qz7d*KS zr+5~xTPpZ~dJ3?hCZNTwSuBEG+$e6%AOZMcHCkT0j1iKV<% z-Kce2g0}$hgFgnXC|N?soyWMZf_+Tmk%+Hui^n0pvMp{#e5uA;_~MYxJPCXO%4Y$; z2=NNU=OJFI8SOWECpf4htQBr(7&y2dYE`FbFt^Ja1CV(u7#fC`=y%XtdLZSxLC;F> zFU=5hidkE$I$YDGW{BIK`00tBXv_$rgERv$sS6)nm;p>QFnzRMw9Jz~J$WB6l+i3L zmzG)d=%N&05`an7l4zNyetN14FmxgmBxnh#tYx{@6(2lw6B2-?I^Ry~g6A7n;L=N| zlZtE20G88Y?Obc7A<^;roVRMM=tDbAUeSqU#7_eAMSw5R0S@7>2+jHOC!H{F4hA+P zkc8;n0c!(q=~SFhq^LUrvNeH-))fI=D&y4S#i3A^*XV~N#-j2_0F{Ul;S>Od3KR<2 zaRK=>D6xYB^4$awP7BDkM3NV!4>W`FW5uPQ9FYH+NVc&r_~nEoVqxF#%Y%~0`NEPm zl2pKyJZ*-Or_cWd0R04jHuZIoZ#=m~{04B8B|0!y`pMHf!^27Oh`-pG2xE^lX4;{E zx%BX!QIuSwsF!`|_Vf|vvi4=^W5`ghiKMhI9iwopu_?LqO>?)=d7`3z<)e3ZoW%lW zKSeweaU1X-_+)oyk``I#qYpgH$gTFtS;?epp&4z`cF%z~%F{i5DeqL~NdPK;%0HDo z)$V)!qju4qGI?z>DdfwL_auO>o{DO6%NLW$@)(Nop5kDN>3IjBEMI=Q3ps3|c={)Ace^kuft8E&fW<=VAjmrz=W>KA^X1%BQW#AyGijRU0kyeXbtsPJ(Rx(~ zY1yj&az=N|6^K>rPWGC9FDLuE6LE50x}M(yX{>*l1nE=eSagQ;iVfaQa`=jlK9+jP zrL!l&Cfkh1*K|t`3ZMaoo1-_}%S;ocOY513@xgk#^Xs?tAfrhRB|r<)-qKDOkv3v% z?=i9;ILa{XD1*H1`Es(2>`JEfs4%D?f*o$lr{$~jhnbP+7#b81l>_RG?oGt;v`v~O z_>d|%a}cLbn=%{lLfTR7u22fXA!LCHn#zOHqxrpR=zoTK?FE`k08~l10rI8ZR()j>%&H#LX@J-k;aI>CJ)5-D0Jd*Rp%+UHk<#%tbfD&)% zOY&m|p#MCeDf@wJ|kMxM9WrhJdfG*i6PtPM?7-)LH06C{0nPUjm ztKZs>OeUthU>^~-e5m7v_#&GKl9I|UrA+aXkU z#b8)slLp8;29qrV7JA_Trhc90nWkLu+z496x|`~MydhOGf{7On;bEDB+8CJ))E=Xj z*G+ZeA-SS}*bF04>!;1~dj%vTrkj^qSF|mrX;`SWTLoCKBhSe_hL8f*;FU{ zjq;%(#LCXxBwrdrEIBhlgSDS==xWTv&0^{BP&#q;pVJQo(^RohFTao^Sla6SrCj11 zTCc6#qCz4ThRSXJ13uW^U($(lf3HXL9}1>J{K)=77=CT-{iWRId4H^@vp*C}hwMzs zYp|_9l?kYKn^=3|V}Gm{!aX#f;(nLG=3qM17fya-C`k!2!ITt~7;QNAHZcqcJ^n{R zVEj+%5aG@L5AK+@j$vvTh>9|)vmeto+U_+UVw~b$`!nvoV8O~iBZIi@f5OSLhW#e7 zW7_Uu-o24Mrd9tXz5g%iLw`ws`G+)R>TEDg<@7tF&cEQ``;f!#C*6V)qm{1wr2q@u zjXy|$I!o>Zu!7)?(-h3j(z+-y4paDgKqvNTumrzH;EMH7{%;$&5$zo-3lB753u`Qg zs=oxFb^2m12h=!Rcac;^!lOhnLw@Ie^62Q09vst>vO|MK)1~|MBadrJL0rvtvGh<0 zU6c>q>k(z{_8)pp)7o!od8$Yfe(RVqNb}Fqi2Q$W{QrZC`wNb?!5JA^vGsRV%0a z;<_%Fcl{)bysesCVkh}Y2HGoq9QeQuPJXuO6`9UldV@(NXX%Z3bLNylCVJ%+ z6EM=@UU}C9Y=DpX1;Tsi(@gaT{ z(1JL%WAB++ap&ame^1vIdW9+QT=KqWs5AA8sj-IhPP{H^6bEf+xMr2D?v zJ7#yA_SQ6-S^`V%zG*wA1ueIi^XfP%PrUv}QHHrQUlNpx!ZU`Vrb2{x%9E0!baF=q zbNkTT+s>TLa;Hfos=vw22zhwhpclEaQ1uk|^)f*z!1t*-r9dZ$2}5c1yLiX+=Wt3fD(uVfv?-jQ9eWEesWz~DcmkE5tMe!hrdR! zEXq;-8-gXN`Jyk23`(NeC7+!HPtY5#8H=|%rY7aogd`@rh-Dw_70a~qj>4Ld)LwFt z)Y<~lAJ0ggTZ59qBSrkE1z)#D6AGBJHyI(DzNbx5Hp=z~$-wvrT{Dv2FI4y=f}B zM#yIQ&LgA`sgN^E$O+OxCez3=_LxszF^#MvMmcdh=@aeWgG<`I9KRpomwV)?)5%s^ zat0|Tifo@jdXkg!zh;nB@`?P$4AME}JG`;+8Xs|2xT!}`z+>X$8lRm30qb`~_7{}5 z<#Q;_mRHH_Op+7(FHdug{?!j^mUVOQ8Yg0f2_NVo)KT5tL#3|4H2T5nyz4C^C5F6PifBFwn9=*vGCiWA@2b*8zmM1uf zh1{xt%0W8m*{^)^+Q;C@ZSctlA0vZIwj;Pr_#WLmC$sb6dR|slzhXYwNZ4ebER>Rj z!j(RKRTt%TUj^QI8r!XEGFl4Zd?P9PcNn>gLVP-S9Q3#D4y7r#m*0!m#ahz9ULqrB zAg7C>c;#nG$#Qm&S7x7pjr+V;9{mK?-bLQ}(kBS~;fFo4a{)=}!9vI{;CFkdp!qtz zB~s*zud6msJ3C{I!|KHdiIY+rqKc!6uB*f&XDlRX(ezCg{biR|>CXUdte?7&^w61h zB5?pvy-VJ(hzw(GZu#sYGKl5fa?(@qU`z_g6P_Yj;GJ(&>JF9ud;J!6fQMVnGKdB(e zNsoA=$5e1)SMkpS*-5hZ|_(i}iBh zi)4$bTOgt+UA&5q;^b>D5{rQjQS0vdnE#OT#6+JGgbLUDSCK3hpMl9)FJs|e>61sk zOh(6+_(&dNY}h)fdMa+f?+CS4B1!Zwub!7CL&}E4}^o+QgTHt3~U=?))g%4sU4F!tYK5C%HWFby7kO%Jr|4 zX@&`Se{ylq+sRu9VYgtazd?k!mwft7v>{`@=^e&td?!g+j{BN7pk=TMmcBu3T@QI_ zBV}l$9&bQsBk7*d^M^kO=G!;Ox0dJe8wj=>Hf4{NV9S9jCMnPQ`r~0{4jwWktVvRy z^2uLU;;6gND{GbH*?txuXIUoBd5VP+C9wVR3kyk#85(QM4bcc;la%Nn6`BgsG05+} ziRE;dS3dqG$%i3WqufWb8$IdUt>3eKL$@8v;T$w+prM_#oR#?KIsylX4z%8vKQ z&09%n)E)P%5xSJ4+E~>4MIN<{{6Na(?%T=R(N{1p@9F0uSRdQT(Xl!YWilE}CMiDm zNt_DUl*g|v8~XS)Y3Lp;rmedQavUin#hAg!#yh(ghMzK8l9WC{Y!0-*m~XsO4b97P z%iIpqgFGYm+CjRLN9Acdu=*Fs@9cmLQ}2>*?jW{EgDVo~9clDFq_8D@p0%(usLB zc&94cQn*cQuO$5J+lHOQjL+@lgq>tQJ6n@q+)2vVEKTNiVbxC5t)eQ1KAW>a+Y6K_L9PgVg5|$AK8_t43-DJOUiQszWv&vT*EGlW^5~Z*Y~gByn4TF zUPTmLR=0aiU~L^(d&4W=e3vA*X;ghoHMV8)lRT}43?(1QZ`F`)q+0%84e3kP$+~?o z44$d)wGV~?xhDU;mfT0amCI{M=X(mdwU$(qdGZ7M$xva0n|6N!+PEK&F$3ze0f?G* ze@R>S-`h`~Wpy4ow~kovpXe#5F>mfwb3kKw!!Bk+*gJ{JYaYX9Bb=E1?fva$=O;D0 z9xoEjJ0tTGl}|lIDBZuNQH$a6RaGT5G7_;VZ>uBsvDF^=%Q|v}?eD37?>%B5q)Be9 zCug|J>NA@B+5s{Lv2mJgYQWD0T~-Hba!vyoYrCw5Y2BUrRx`u3js??8b?9rl`2O5Ulx|4cgO0R|+YPw(E*8t;Ww|t=iQrIX*93<1&3DfH5AA|(*SNId` zL&Rg+6mm(e@E_NjZS1c3z3?1zpdj{2;gx@SaP;sN;EK$rI&eEn@N6yI`ySq(V@YT_25t3Q`>O(MNBA5DdAlf1j|F=)hIZR5qpVdAtdBLVmRY$nMTFR3@=2b#zekw2^3wSG>a=n{U>N^WjKldpT_TTNtQG&P?n znKlv=kATFOAc-Wlz$@=QLKc{`!2NiIcu8f0brZrILDH>q@dxCQ3iC@(CH-b}x1d2Z=}VRl%3OiI|U z1jXQ$g^x&K%0&-EW@VH~OHEa5cGxCWogK)*{14k@7sIwBD97bxACc$DXL7{Hdv?ap~4>?vi_%Z_Q=$xkY# z$v1zPCf|@@(ObPe>~AhUrd1*PHLra88#2i9jJLAv&Be?bXPKpptPvK^C}Y=@EY_`w zFKX6yque~NJfWG4yw`&r%{Z@T?X92HLIxSww7v3<@5m&wp+4{(W@s1AWvwBQ;m1wu zwY$BSmD07+2D^yBWbdThsULER{3FQkuG2V;G-GM=WwQJ^gymT*e+A)>-^-RWSdTsn z)K5A?IKuYCS>Y_%W!T*l&p~?DN1r28@dI}1hpzh4?@10x{Mg6Wm^R1ORFrXR7$+w& z7?Q|c{YA4xiLy=p=?5}!&?;Y}*0quzS^4GyvE9yml(^;-YTIp&twj!<(`%x3 zMZaTKdipy#8?`jsvYLD4ruyX)Cy66c{Xd-~QD?e=*>M{?nleb~!q^$|rHe!;&v%D!PQeAfwX;sTsP=N3f+;*0WN13m9kE%Dt9@F6 zrc?1D1fSWZIkK%3A1q~dN42Hnf@$6z-Ig{7(?)kYP)YiY3gf2Mi>&|``|@)?kzR>E zx>BEEGhFbZ5$Z)>erN6VTlx9%mPHdEy$Ye$OAV>2M@) zt&b4e#y>Q9#}$%ezNk*pNOxlkv#vmV8!t6O^*3m;a)rc4-qPsKO3U}r*+0M3@*8c z?zv@itiWi< zy+*9oWGzqRf{i|hk2J2f;HRX5%`Qc=QD}hf_q0iQ#Wj*)do-|7J7i-sV=&^U4T&f8 z*Ev3{l_%S6lWVs>2ABA{s64e5)JHmV58BwfxsRQVq<{)4%nET_Xk=2 z+$UfAnIu^b;wNq@w1;gK+Eg3WsyviCfO2^|N7;CEWtUI3-XvLRbMeD^N3{dsYnE@T zBWyGMH5+4dyz-S_$jYvIU)Y_Me>gng~6qG`kbV0r4`CSedJz<-T;EGD( z67Vr-@P5eWr00y*n-AM;Dm#}E)iSEgT*daG`uC+L%*iylp>tsjQ$cmFGsYs*1WAph z63Y-Dv6**1(g&*NiCQ1^`WS_nV&smuNQaoWJz;k$$AxDbEXGy?b3uK>BM-WT5nt$$ zH{2rIS*u4bxI@hHgkQ<3v0u5b&dHd|wRS_NVNZxD{`lRwkh}D0UP4} zwCf)CUjY~5zS(t;`;US+%KazswcTsufJ=_N3*SMtOU}AWrjLI150p#sTW}%D3xA_L z3%C&F*)BSfxz;h@;h`Xw(w_PU+GF8Nyo=wL>F+YO4NPU{3ur$O{CoopfnG_&DwB*mIm>zVviz0@pQxRXTRbG4{|pA^MLx3Xk?a8S8vL@! zOU}lR@V~CvZ09mNwM4b%FyX;^1N^cVmmX|Szntu&CIc3bee31vKGLJy*H}5MV%QKk zpwHvjoiyeOjMMX~-?tQx3D2u;U%I#iR@iy9)z?*EJX~ou;@9!(e^v|Y;d)c|?|Jo% z?_lfTcH!q@oLy7k^7L>|oX6RRv7TxPcQ&*N?F?s`bykrs_I5E|;rzkl02bt7gY{v& z7ke~TvUor2-*VrWn z2kaDFY(HV7sxU@*B!Vi|d3A(${S`JDp0Rrqva<7ewU<|pCu||x-djJJu=#pJJmh)m zk@`&r_Gvg|->r`~vfmQJ6kvazCEp5X-95U%6%$^3O#71L%w&~??lIy>v|^(zu1Wm%H1{YOuh<5?$b(C3X}y?-x5) ztv4mf4%$#3vXbLJkz3kQ&E!k10H$E|~l411)v?RMlY4PU`y7@T?U4nv{`t+9v?{agGH z>qp_iBs+=Dy5~eD9o(zM^rwZg(;-~Sw?NrG{&@&h_;ad_L$PoTA6s}fo$|XhV8ZR%fn@A>unB#d z-CY_sYM&0I-OTYI?32&N^5+L*PFtmhRj8|(;{nJDYc;oMIxTm%2ZYO%)R4}7w;hv5 zmQ8oSl%H$+v`i%-D3BWWX{RSqmaNq3FPVAFWNIa~kjG4+@g7eVkowzh zQr`jw0yX)hF3sn=rqF2`R;Xo9rM!+*Y~gOnG@kxt;j@z|1n#f+mSoCvZ)&v9MV5{k zJ4mWjBuw~xWC}FX3wd4&jieQY{Dz%s5wmF*Gk#>#0BKdDgpW z0ck~PVQD|IVFm3QG@6Dc}>LF!}oNF4>F0E<`3(qLfR4N}v9 zrQeWx6?huyJAO;*juWKbJVWZd?+`u-{nMnL{94;QpWMjxOev}NUtnr7iZiiL`)mO@ zb)|$v{>54v33rtqhq(GLJni4`$Nxnq;oPa&%9VBG5AM2E3tC4xEbwIWjz*sliOX-# zN*&v@_V!3TRyBG_^A59*)NbY#x7GQgcKYAs(Sf29`Q^+5er^9A%4VG|wXl4l zc}~Be_1{M)WQtAH?i5lU^DrI2=WgWj{cZuM;-fsL6RP;>1KO?w6vc*}gC!$r$~kkH z%n&syL~{rRYI;Z4KCJN4^zENwFh|pQ7Uk%MR_g(zaG%Gp&O3P3R<*p zj^QCCV>AE#IE|6b{P7bskXW&neS%6HlnZ)8vlj9-8OfDfmD|%L)%Ven)%sg#lfR{? z;G@MDiwR=tR)41Uox#+{K;unzhtp*<r8RQbv(!5z;UHc!zziT62q~tt)rDPCl>*6M+TaP7a zfx||&QQ26no0@p?S&F3>5At1SsjRa{qjP{<)-x`wE?`mGqK*x2eDygRV5l>9j;q#- z&HRgV-9e!mK8Fm;9p(x3FVkA)N)Os^HX zn5y+-W;hDY^*bMXM^@|g3e3!@!*@)z{wZ3j^W@=Pt?x3Y!CJ3Kepo`-RYV$g1A8ip-@~uL*lOL%i z|KJZ>1{HmV+7NEKUT(L$w-Jm++Tni7rOr8D;CLrS+~#`gW}}yD!rx2 z5Tut6L`^X_h0X}G$?i6(LFV#)aq7S-{U#sx3r)#A-c)6FM`lMrJwXqGdVwAQHG&p` z`h$K98UUIP8U*?u&=Amfo1)Rn6+e)C2#+Qp8c)%qSHXJ%!keuR=+HZ!NgXkU8)CXY zxdm-sM|2e&_+wY7Gc9W3L$08iNp52Atil^zGTI$oO2=Z5aJUckRnB8sZir`=nAO}q z=@LU&8?I0Ub+Pc%SI8^ZuW9HV_oU0yH=8q5cU*V(rswcRbOYD5$vzNiG<}1iQ?tGr z-w%22JItMoTg^{~bb^M`6l-#d55!%p!NxJsvm~2Seql74fS-O0N-+b-0#*Q`2^5AT zEMhWMt`SY4d#c1!uF_N3O^APT6))O18u25;-2R;q&PGSEo+kSYwh6a14l(5~H`bvJ zgedSc_H4XEK@|*FLx#aI;ysFot1zBQi6BpNwh*zNL+Qh5s>7L(i zl;kjQ0uZi)Mf(_gOi@LNg`<<|?b?lNfI%OggKyJr5*vPSpTMkRqBxz?sb>KBYiENhhiTD_{wj2)w$%qhfDFqBJulW zF8MpbyNLzk;CFy`2LCJgcfdPZ_?o+v?)*zrT#=z57m`Jm&G#rs{ko~vEFGU*lof9% zsKnwrZOA>*--D&(;C=F$bg^;0I9ov9y51;tC@=&t0SQ1|v7-Kgn{pf<@Gkk!BG*%J zm0gc>J_8=R4h7VKp8&oD{Ey(rfj=N@85HX_xX}%FXiFpE3Z)H|`rD0s*#io6>tU0> z{HJ_DBQJSCy(zJgUw%N#JpQ{BcTj@5V!lwPsLnUd72^Nbei?e<;E z72MNS+wA##=;xO3T`l-T`m{y!XeI17RdQrc>NYr=UH_DDp%jPg7U49r4)angc{qR2 z+zrJF_p8uLn>ku}5C09AIS}r91uc09b{xTaFBJG7WLZbk@Fea*+S0?D0-2HWn>USS zo<1VS<-jVy6{}pkr%HjW)+Np*zCwSddDBW3=qjS`AmMIg5SO&6goU~HJmPG;qG!X| zd%_{HP_9DvXx=Qdi9R*>T2#?Pee{T;&V+s_=)+U+Y?+04d}Rr$6UjYn$$jJhf#fBa zh$XZ1;8za|&mPh-@uRorm4S1M{QjPogF5~QA5RQ!q>}hHVly4>=i#ly0>#)$AY<7c zUteEeB$L4H#%5YRj3Qn|8cfrK6-o+`mSjC8^253?TliHh zS9*2U|B^l4E9wN03$8VQH~9-V3_<~ z8EuswyIuBB+o53}k9KBhT}N7>9HQL*kAw5$0hpno6gV_Q^25%ozii~cIb+*B7pvyx z!Y-4K@5|_zS19UhACQ_4+O>eGhd{Sh%4%ta=BBb$GM$F8pfmF!QE@x7F|Hdd4qMNe zN62z$xxUWA-Q8HeU;8kEjvpZ=&c#%Yk>%)7{k?_`ZlYpcDf5YKs2e5 zFZW;*o%+<-zg*B!zUaZ;WUh}xum*Qo7LwO5+|-jr(2_cBSx+{(0|hqn^SxOlxioUO zK5SXPGW~ljjPf;26$=o?Vs9XG~DBN z`>-0yYQGX?lr4RJBP<4r&4-mo^tBV+hx)^~mmitiesYOI9avf?Ax zzD#y~v-P>S&E~he4uk%hR_+zVLMRhWZx9Qhsjb?gAm%Q+I@%JTSqHsS!MF8ef$}T- zWIuLPzQZr;t>KB3NmPVR`wH)VNtx!CNo&01NBue#ut=gM0Yz-z1w>aExW@Pd-DI2iy zPD4S9vh7tEwN(>)=P+jBg&&&=^D?HsHn_Bmhm%e*hmZMEgJTO%h-F@+H}i~G)Qua> z+L~BoNYPcA+c4&42usFkh3j3odoB_UU3>VQ{|bw>Q}%d1X(TJ9e-`lGqu3-tmyKe( z9CMJ*I<&;2naN`vs;=;7Q=U3Lt=p`rXbi;~8twJbY$n{k+|cTuW>aNS|KP*MvSF^C zx6lX!Zg>w*yu~*N+3yG!0@*;sEq+3R@HfXZkM6@Q zu@Btgid}S)uB6}9yV+)6oY4na_~(chcF42iS%gQgLZ-g;B~zCk$0z6~OzpJ~+d=Kq z{3bBBPUK&sMa*QUWa7=d^*KCv)0+9hS!@;sHuLkd*!NE2XO`As8;sL*? z)u%E)Svd}Eo-l`b@g?a@di@MEEJM98*_;AoLmkT`e=nX@gK2!1d0n#Ezd?I2{^ z#bLBiX%>fcarj-tjuvT`*i-~}M98*_!v&kNkfn>mXj@i7wnQA(3EA&+SZ5wRmp#IN zhm2av_{_Ozw1+bO$z1k|VSdhY*(phx8GLSt(!I;G@uqlVT1HxqF(++qO6GzbUnl-U zxH6dc7^wL6%FZzkO?Vh1O~^^iNz2SIre#GLdnE_k|M|RuN^d?qLNW4^flBftb2F1u z0(vDs<|Mt8o|qBB$44m7%UQfQLg~MGkdn=RiBLN8>_Lhj|8S79M0+fQ1+&a2$B!R7 zKFat~+Uzvr{FEGHR$_KeT4K6!eo|tFF)1}MBO@iCy~5jzHox^s)edz&KS=Uzw?>uhua2 zI>M`gi3mqR?=8@+prfYSc~{Un=nMJ(#ScXMbmVg!Y515X=A-RzW^eY)&02wnrtNR? zay!ouzWx{9GwY$eU02YYwzNWj{Sv#5A|jSPJ5dhw^|F8{bnB5yxjgjF^@B zkgrSQ7rhjZ+{tYP5V~;-VUGZ9=jkuJC`h|p(01POFTCL|ywhKJmp0z`oakcP(+b`J zi)U>ai9mZsg2&MRpYrxhg}mcmhjJF?><+}3~<+9y4g?T_&1`YQoEv%liZ z-{`Mg;;TcH!~pT=3?Dnj6om?#v>-bzXR$G7aaM{kZN4!hGsif8K~`2~c1}t%R>h;P z`-Uoo%Cug|GqmzhB|~<}n)@8;xdie;N{$vYK-nPk36aW*DBt)p$;osV5w`&i7Mu;U_N?h9*tt3Io?&VsX591OL zx|^x5?bf0eDjOVf3-KY7uw6XN=;ujBL2Z9eVOuaE{cx+Kjt1X~jgLgQc88?0DyB{W zM7TIlQfGqS4~T>(5U+u+XbT@j_#F5fZQ(-*{{fz1KN_g#N-MTYssRCayFhZlo@Cv? z_rnG?BEzolN@^JR*tYP=_a*g7@Z$hcfcW<$brSg3+rpio|1a=I0MRbV2%i9d0}%Pu z>_h>;cfh75_&p?P69mo(RIax-YEyoZ)U)8H*c2pb9>TvNEE3z_d!b8}E-``)h3I&` zB3rFi8x`jZeKuVZyDUwZm?epwqecu>r367IsFK*cIpkS1S{L}sOO-$#y-XPzBh8YK z9)C=>BE5`H+)j`5luR)52~*!#U@DLVya=oU768kEH-2Ee$1=rNWEATxjFQ+JRTA}< zuUe)AIg9&KynUb2j)kwDb_g*(rjgX3P2&f3hf)-n3H9^Qd?e)0$w!KaX zx*YQA9;B`pdI-NOs1HV|K?k~#dK`3yH->#dKR|q~yY$G%sIa18Rsl&e=gOie?}g*j zasX534q@t0(3UU^miA|AH{dB?9Kx@JFm*5ZX8@N_rrt#OCGdL(GPP(pQ^jjTWc>Lt zm@t6>#})N?U^7q+IG%vb0~il11&#m>Cvp|l>kHUkfDynOz;!_R5-)ln3YZ9_1FL{7 zz%Jkb@Eg$cD;O654%7m^Clz%VkP55>-T@8(UjU~8u`^XA=x=~>3NzGlafkpCfH}Yl zU@K4xC|^SX7zB&~<^ZdK4}i~s8sG+SAL#fE3JgR7o0;~ph0Vjd`z+jjs1TrhM KFIFfcyZ#TW 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 delta 33026 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 delta 33026 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 F{U4unmmUBB delta 33235 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 f9ZPY!feFBJU?*@Icmni+QGz46OeqV}Ol@wl diff --git a/build/obj/build.nmap b/build/obj/build.nmap index 3bea650..9aa56e3 100644 --- a/build/obj/build.nmap +++ b/build/obj/build.nmap @@ -1,5 +1,6 @@ U __aeabi_d2iz U __aeabi_f2d + U dhcp_mode_sta U mfl_code_to_length 00000000 A __vectors_table 00000000 D __rom_image_end__ @@ -7,7 +8,7 @@ 00000101 A Reset_Handler 00000109 A NMI_Handler 0000010d A HardFault_Handler -00000110 A UartLogRamCmdTableSize +00000120 A UartLogRamCmdTableSize 00000121 A MemManage_Handler 00000125 A BusFault_Handler 00000129 A UsageFault_Handler @@ -907,2294 +908,2294 @@ 10008944 T memset 1000894c T sscanf 10008966 T __aeabi_llsr -1000897c T wlan_init_done_callback -10008980 t chk_ap_netif_num -100089cc t wifi_autoreconnect_hdl_ -10008a1c T read_wifi_cfg -10008a64 T write_wifi_cfg -10008aa4 t StartStDHCPClient -10008b0c T _wifi_on -10008bc8 T _LwIP_Init -10008c74 T idx_to_rtw_security -10008c88 T rtw_security_to_idx -10008ca8 T rtw_security_to_str -10008cbc T show_wifi_ap_ip -10008cf0 T wifi_run_ap -10008e0c T show_wifi_st_ip -10008e40 T wifi_run_st -10008f08 T wifi_run -10009000 T wifi_init -10009034 t wifi_autoreconnect_thread_ -10009094 T show_wifi_st_cfg -100090e4 T show_wifi_ap_cfg -10009150 T show_wifi_cfg -100091b0 t mp3_cfg_read -100091e8 t user_init_thrd -10009200 t tskmad -1000941c t tskreader -10009824 T render_sample_block -10009898 T set_dac_sample_rate -100098dc T connect_close -10009904 T connect_start -100099a4 t fATWS -10009a84 T ShowMemInfo -10009ab0 T main -10009b04 t fATSN -10009b8c t _scan_result_handler -10009c80 t fATWI -10009db8 t fATOF -10009dbc t fATON -10009dc0 t fATWR -10009ddc t fATPN -10009eb4 t fATPA -10009f94 t fATSP -10009fd8 t fATDS -1000a000 t fATSW -1000a00a t fATSD -1000a014 t fATST -1000a084 T print_hex_dump -1000a0b4 T dump_bytes -1000a148 t fATSB -1000a180 T print_udp_pcb -1000a1ec T print_tcp_pcb -1000a2c4 t fATLW -1000a2d4 T RamFifoClose -1000a330 T RamFifoInit -1000a484 T RamFifoRead -1000a540 T RamFifoWrite -1000a5f4 T RamFifoFill -1000a620 T RamFifoFree -1000a634 T RamFifoLen -1000a640 t decode_header -1000a7b0 T mad_header_init -1000a7dc T mad_frame_finish -1000a7f4 T mad_header_decode -1000aa90 T mad_frame_decode -1000ab14 T mad_frame_mute -1000ab5e T mad_frame_init -1000ab7c t III_requantize -1000abf8 t III_aliasreduce -1000ac60 t fastsdct -1000ad98 t III_imdct_l -1000b1b0 t III_imdct_s -1000b304 t III_overlap -1000b32e t III_freqinver -1000b378 t III_decode -1000c394 T mad_layer_III -1000c7f8 T mad_bit_init -1000c804 T mad_bit_length -1000c81c T mad_bit_nextbyte -1000c828 T mad_bit_skip -1000c858 T mad_bit_read -1000c8c4 T mad_bit_crc -1000c9b8 t scale -1000c9c4 t dct32 -1000d258 t synth_half -1000d69c t synth_full -1000daf0 T mad_synth_mute -1000db28 T mad_synth_init -1000db4c T mad_synth_frame -1000dbe0 t scale_rational -1000dc54 T mad_timer_set -1000dd3c T mad_stream_init -1000dd6e T mad_stream_finish -1000dd80 T mad_stream_buffer -1000dd94 T mad_stream_sync -1000dddc T mad_stream_errorstr -1000df38 t i2s_test_tx_complete -1000df50 T i2sClose -1000dfdc T i2sInit -1000e150 T i2sSetRate -1000e1d8 T i2sPushPWMSamples -1000e340 W __low_level_init -1000e344 T SystemCoreClockUpdate -1000e358 t print_on -1000e370 W console_help -1000e3b0 T GetArgvRam -1000e460 T get_eap_phase -1000e464 T get_eap_method -1000e468 T eap_autoreconnect_hdl -1000e46c t wifi_no_network_hdl -1000e484 t wifi_ap_sta_disassoc_hdl -1000e488 T wifi_scan_done_hdl -1000e4f8 t wifi_handshake_done_hdl -1000e514 t wifi_disconn_hdl -1000e57c t wifi_connected_hdl -1000e5b0 T wifi_scan_each_report_hdl -1000e6f0 t wifi_ap_sta_assoc_hdl -1000e6f2 T wifi_rx_beacon_hdl -1000e6f4 T wifi_connect -1000eb28 T wifi_set_country -1000eb34 T wifi_off -1000eba8 T wifi_start_ap -1000ecc0 T wifi_scan -1000ed18 T wifi_scan_networks -1000edc8 T wifi_set_pscan_chan -1000ede0 T wifi_get_setting -1000ee90 T wifi_show_setting -1000ef54 T wifi_set_network_mode -1000ef6c T wifi_indication -1000efa8 T wifi_reg_event_handler -1000effc T wifi_unreg_event_handler -1000f040 T init_event_callback_list -1000f050 T promisc_deinit -1000f054 T promisc_recv_func -1000f058 T promisc_set -1000f05c T is_promisc_enabled -1000f066 T iw_ioctl -1000f082 T wext_get_ssid -1000f0cc T wext_set_ssid -1000f100 T wext_set_bssid -1000f14a T is_broadcast_ether_addr -1000f16c T wext_set_auth_param -1000f19a T wext_set_key_ext -1000f29a T wext_get_enc_ext -1000f2fc T wext_set_passphrase -1000f330 T wext_get_passphrase -1000f360 T wext_enable_powersave -1000f3b8 T wext_set_mode -1000f3dc T wext_get_mode -1000f406 T wext_set_ap_ssid -1000f43a T wext_set_country -1000f460 T wext_set_pscan_channel -1000f4e0 T wext_set_channel -1000f50e T wext_get_channel -1000f53a T wext_set_scan -1000f56a T wext_get_scan -1000f59c T wext_wlan_indicate -1000f6e4 T wext_set_adaptivity -1000f70c T wext_set_sta_num -1000f710 T LwIP_DHCP -1000f804 t netconn_recv_data -1000f8d4 T netconn_new_with_proto_and_callback -1000f934 T netconn_delete -1000f958 T netconn_getaddr -1000f99c T netconn_connect -1000f9dc T netconn_recv_tcp_pbuf -1000f9f0 T netconn_recv -1000fa78 T netconn_recved -1000faa4 T netconn_send -1000fae0 T netconn_write_partly -1000fb70 T netconn_gethostbyname -1000fbc8 t recv_udp -1000fc38 t recv_raw -1000fcbc t setup_tcp -1000fd00 t err_tcp -1000fd98 t do_connected -1000fe04 t do_writemore -1000ff04 t do_close_internal -1000fff0 t poll_tcp -10010040 t do_dns_found -1001006c t sent_tcp -100100ba t recv_tcp -10010134 T do_newconn -100101c4 T netconn_alloc -10010230 T netconn_free -1001025c t netconn_drain -100102ec T do_delconn -10010378 T do_connect -1001040c T do_send -1001047c T do_recv -100104bc T do_write -100104f6 T do_getaddr -1001056c T do_gethostbyname -10010598 T netbuf_delete -100105b8 T netbuf_free -100105ce T netbuf_ref -10010608 T lwip_gethostbyname -10010654 t get_socket -10010674 t alloc_socket -100106e4 t event_callback -10010814 T lwip_socket_init -10010816 T lwip_close -10010868 T lwip_connect -100108c4 T lwip_recvfrom -10010a7c T lwip_read -10010a90 T lwip_sendto -10010b3c T lwip_send -10010bb4 T lwip_socket -10010c28 T lwip_write -10010c30 t tcpip_thread -10010cb4 T tcpip_input -10010cfc T tcpip_callback_with_block -10010d50 T tcpip_timeout -10010d94 T tcpip_apimsg -10010dec T tcpip_init -10010e30 t autoip_start_probing -10010e7c t autoip_arp_announce -10010ea8 T autoip_start -10010f3c T autoip_tmr -1001104c T autoip_arp_reply -100110f4 t icmp_send_response.isra.0 -10011164 T icmp_input -10011288 T icmp_dest_unreach -10011292 T icmp_time_exceeded -1001129c t igmp_send -10011340 t igmp_delaying_member -1001137c t igmp_lookup_group.part.1 -100113b4 T igmp_init -100113d0 T igmp_report_groups -100113f4 T igmp_lookfor_group -10011414 T igmp_start -10011450 T igmp_input -10011514 T igmp_tmr -10011540 t lwip_standard_chksum -10011598 T inet_chksum_pseudo -1001161e T inet_chksum -1001162a T inet_chksum_pbuf -10011670 T ip_route -100116ac T ip_input -10011884 T ip_output_if_opt -100119d8 T ip_output_if -100119fa T ip_output -10011a32 T ip4_addr_isbroadcast -10011a6a T ipaddr_aton -10011b80 T ipaddr_addr -10011b98 T ipaddr_ntoa_r -10011c30 T ipaddr_ntoa -10011c3c t ipfrag_free_pbuf_custom -10011c54 t ip_reass_free_complete_datagram -10011cd4 t ip_reass_remove_oldest_datagram -10011d48 T ip_reass_tmr -10011d70 T ip_reass -10012020 T ip_frag -1001218c T lwip_htons -10012192 T lwip_ntohs -10012198 T lwip_htonl -1001219c T lwip_ntohl -100121a0 t dhcp_set_state -100121b0 t dhcp_option -100121d0 t dhcp_option_byte -100121e2 t dhcp_option_short -10012204 t dhcp_option_long -10012248 t dhcp_create_msg -1001239c t dhcp_delete_msg -100123b2 t dhcp_check -100123d8 t dhcp_bind -100124ac t dhcp_option_trailer -100124d8 t dhcp_discover -1001258c t dhcp_reboot -10012630 t dhcp_option_hostname.isra.1 -10012670 t dhcp_rebind -10012704 t dhcp_select -100127f0 t dhcp_recv -10012bf4 T dhcp_arp_reply -10012c74 T dhcp_renew -10012d08 T dhcp_release -10012db0 T dhcp_coarse_tmr -10012e3c T dhcp_fine_tmr -10012ed8 T dhcp_release_unicast -10012f9c T dhcp_stop -10012fcc T dhcp_start -1001306c t dns_parse_name -10013088 t dns_recv -1001321c t dns_send -100132ec t dns_check_entry -1001339c T dns_setserver -100133bc T dns_init -10013414 T dns_tmr -10013440 T dns_gethostbyname -10013580 T lwip_init -100135a8 T sys_timeout -10013608 T tcp_timer_needed -1001363c t tcpip_tcp_timer -10013674 T sys_timeouts_init -100136e8 t dns_timer -10013704 t igmp_timer -1001371c t autoip_timer -10013734 t dhcp_timer_fine -10013750 t dhcp_timer_coarse -1001376c t arp_timer -10013788 t ip_reass_timer -100137a4 T sys_untimeout -100137ec T sys_timeouts_mbox_fetch -10013850 T netif_init -10013854 T netif_set_ipaddr -100138ac T netif_set_addr -100138c8 T netif_add -1001392c T netif_set_gw -10013934 T netif_set_netmask -1001393c T netif_set_default -10013948 T netif_set_up -1001397e T netif_set_down -10013998 t pbuf_free_ooseq_callback -100139cc t pbuf_pool_is_empty -10013a08 T pbuf_alloced_custom -10013a5c T pbuf_header -10013ab4 T pbuf_free -10013af4 T pbuf_alloc -10013c18 T pbuf_realloc -10013c4c T pbuf_clen -10013c5c T pbuf_ref -10013c76 T pbuf_cat -10013c92 T pbuf_chain -10013ca2 T pbuf_copy -10013d3e T pbuf_copy_partial -10013da6 T pbuf_coalesce -10013dd4 T raw_input -10013e4c T raw_connect -10013e56 T raw_recv -10013e5c T raw_sendto -10013eec T raw_send -10013ef4 T raw_remove -10013f1c T raw_new -10013f50 t tcp_new_port -10013fa0 T tcp_init -10013fbc T tcp_update_rcv_ann_wnd -10013ff2 T tcp_recved -1001402c T tcp_seg_free -10014046 T tcp_segs_free -10014058 T tcp_seg_copy -10014080 T tcp_arg -10014084 T tcp_recv -1001408a T tcp_sent -10014090 T tcp_err -10014096 T tcp_accept -1001409a T tcp_poll -100140a4 T tcp_pcb_purge -100140e4 T tcp_slowtmr -100143a0 T tcp_pcb_remove -10014408 t tcp_close_shutdown -10014538 T tcp_close -10014550 T tcp_recv_null -10014574 T tcp_process_refused_data -100145d4 T tcp_fasttmr -1001464c T tcp_tmr -10014670 T tcp_shutdown -100146c0 T tcp_abandon -10014758 T tcp_abort -10014760 T tcp_next_iss -10014778 T tcp_alloc -10014898 T tcp_new -1001489e T tcp_eff_send_mss -100148bc T tcp_connect -10014a18 t tcp_oos_insert_segment -10014a98 t tcp_receive -10015270 t tcp_parseopt.isra.0 -100152f4 T tcp_input -10015b4c t tcp_pbuf_prealloc -10015ba0 t tcp_create_segment -10015c68 t tcp_output_alloc_header.constprop.0 -10015cd2 T tcp_write -10016022 T tcp_enqueue_flags -100160ca T tcp_send_fin -10016112 T tcp_send_empty_ack -10016170 T tcp_output -100163e8 T tcp_rst -10016480 T tcp_rexmit_rto -100164ae T tcp_rexmit -100164fe T tcp_rexmit_fast -10016554 T tcp_keepalive -100165a6 T tcp_zero_window_probe -10016650 T udp_init -1001666c T udp_input -100167f4 T udp_bind -1001689c T udp_sendto_if -1001699a T udp_sendto -100169d0 T udp_send -100169dc T udp_connect -10016a24 T udp_disconnect -10016a34 T udp_recv -10016a3c T udp_remove -10016a64 T udp_new -10016a88 t etharp_free_entry -10016ab8 t etharp_find_entry -10016b94 t etharp_send_ip -10016bc8 T etharp_tmr -10016c08 T etharp_cleanup_netif -10016c30 T etharp_raw -10016cec T etharp_request -10016d18 t etharp_output_to_arp_index -10016d60 T etharp_query -10016e64 T etharp_output -10016f5c T ethernet_input -1001714c t low_level_output -100171a8 t arp_timer -100171c4 T ethernetif_recv -1001723c T ethernetif_init -10017280 T lwip_POST_SLEEP_PROCESSING -1001729c T rltk_wlan_set_netif_info -100172bc T rltk_wlan_send -10017350 T rltk_wlan_recv -100173bc T netif_is_valid_IP -100173f0 T netif_get_idx -10017408 T netif_rx -10017418 T netif_post_sleep_processing -1001741c T sys_mbox_new -10017436 T sys_mbox_free -1001744a T sys_mbox_post -1001746a T sys_mbox_trypost -1001748c T sys_arch_mbox_fetch -100174d6 T sys_arch_mbox_tryfetch -100174f6 T sys_mbox_valid -10017500 T sys_mbox_set_invalid -10017506 T sys_sem_new -10017542 T sys_arch_sem_wait -10017582 T sys_sem_signal -1001758e T sys_sem_free -10017594 T sys_sem_valid -1001759e T sys_sem_set_invalid -100175a4 T sys_init -100175c8 T sys_thread_new_tcm -10017630 T sys_arch_protect -1001763a T sys_arch_unprotect -10017640 t mark_ip_in_table -10017684 t dhcps_initialize_message -10017734 t add_offer_options -10017824 T dhcps_handle_state_machine_change -100178f4 t dhcps_receive_udp_packet_handler -10017bc0 T dhcps_deinit -10017be8 T dhcps_init -10017cf0 t prvInsertBlockIntoFreeList -10017d38 t vPortDefineHeapRegions.constprop.1 -10017dd8 T pvPortMalloc -10017eb8 T __vPortFree -10017efc T vPortSetExtFree -10017f18 T vPortFree -10017f48 T xPortGetFreeHeapSize -10017f54 t prvPortStartFirstTask -10017f74 T pxPortInitialiseStack -10017f90 T vPortSVCHandler -10017fb0 t pxCurrentTCBConst2 -10017fb4 T vPortYield -10017fcc T ulPortSetInterruptMask -10017fdc t prvTaskExitError -10017fe4 T vPortEnterCritical -10018000 T vPortClearInterruptMask -10018008 T vPortExitCritical -1001801c T xPortPendSVHandler -1001805c t pxCurrentTCBConst -10018060 T xPortSysTickHandler -10018084 W vPortSuppressTicksAndSleep -1001819c W vPortSetupTimerInterrupt -100181ec T xPortStartScheduler -1001821c T vApplicationIdleHook -10018220 T vApplicationStackOverflowHook -1001823c T osKernelSysTick -10018240 T vListInitialise -10018256 T vListInitialiseItem -1001825c T vListInsertEnd -10018274 T vListInsert -100182a4 T uxListRemove -100182c4 t prvCopyDataToQueue -1001832e t prvCopyDataFromQueue -10018356 t prvUnlockQueue -100183be T xQueueGenericReset -10018418 T xQueueGenericCreate -10018464 T xQueueCreateCountingSemaphore -10018476 T xQueueGenericSend -10018554 T xQueueCreateMutex -1001859e T xQueueGenericSendFromISR -10018602 T xQueueGenericReceive -10018706 T uxQueueMessagesWaiting -10018718 T vQueueDelete -1001872e T vQueueWaitForMessageRestricted -10018768 t prvGenerateRunTimeOfPeroid -100187a8 t prvGetExpectedIdleTime -100187d8 t prvListTaskWithinSingleList -100188c0 t prvResetNextTaskUnblockTime -100188e4 t prvAddCurrentTaskToDelayedList -10018934 T xTaskGenericCreate -10018ae8 T vTaskDelete -10018b88 T uxTaskPriorityGet -10018ba4 T vTaskPrioritySet -10018c5c T vTaskStartScheduler -10018cb4 T vTaskSuspendAll -10018cc4 T xTaskGetTickCount -10018cdc T pcTaskGetTaskName -10018cec T vTaskStepTick -10018cfc T xTaskIncrementTick -10018e7c T xTaskResumeAll -10018f44 T vTaskDelay -10018f94 t prvIdleTask -1001901c T uxTaskGetSystemState -100190cc T vTaskSwitchContext -10019184 T vTaskPlaceOnEventList -100191e0 T vTaskPlaceOnEventListRestricted -10019224 T xTaskRemoveFromEventList -10019294 T vTaskSetTimeOutState -100192ac T xTaskCheckForTimeOut -100192f8 T vTaskMissedYield -10019304 T eTaskConfirmSleepModeStatus -10019324 T xTaskGetSchedulerState -10019344 T vTaskPriorityInherit -100193d8 T xTaskPriorityDisinherit -10019448 T sprintf_pcTaskName -10019468 T vTaskList -10019518 T vTaskGetRunTimeStats -100195d8 T pvTaskIncrementMutexHeldCount -100195f0 T vTaskGetCurrentTCB -100195fc t prvCheckForValidListAndQueue -10019648 t prvInsertTimerInActiveList -10019684 T xTimerCreateTimerTask -100196c0 T xTimerCreate -100196fc T xTimerGenericCommand -10019790 t prvSwitchTimerLists -10019800 t prvTimerTask -10019964 T xTimerIsTimerActive -1001997c t device_mutex_init -100199c0 T device_mutex_lock -100199f0 T device_mutex_unlock -10019a0c t _freertos_systime_to_sec -10019a16 t _freertos_ms_to_systime -10019a18 t _freertos_sec_to_systime -10019a20 t _freertos_usleep_os -10019a22 t _freertos_ATOMIC_SET -10019a26 t _freertos_ATOMIC_READ -10019a2a t _freertos_modular64 -10019a9e t _freertos_thread_enter -10019aa0 t _freertos_enter_critical -10019aa4 t _freertos_exit_critical -10019aa8 t _freertos_ATOMIC_SUB_RETURN -10019ac0 t _freertos_ATOMIC_DEC_RETURN -10019ad6 t _freertos_ATOMIC_ADD_RETURN -10019aee t _freertos_ATOMIC_INC_RETURN -10019b04 t _freertos_ATOMIC_SUB -10019b1c t _freertos_ATOMIC_DEC -10019b22 t _freertos_ATOMIC_ADD -10019b3a t _freertos_ATOMIC_INC -10019b40 t _freertos_enter_critical_from_isr -10019b50 T _freertos_malloc -10019b54 T _freertos_zmalloc -10019b6c t _freertos_memset -10019b70 T _freertos_mfree -10019b74 t _freertos_get_current_time -10019b78 t _freertos_spinunlock_irqsave -10019b8e t _freertos_spinunlock -10019b9a t _freertos_mutex_put -10019b9e T _freertos_wakeup_task -10019ba4 t _freertos_up_sema -10019ba8 t _freertos_exit_critical_mutex -10019bb4 T _freertos_timerCreate -10019bb8 T _freertos_timerDelete -10019bcc T _freertos_timerStop -10019be0 T _freertos_timerChangePeriod -10019bfa T _freertos_timerIsTimerActive -10019bfe T _freertos_acquire_wakelock -10019c04 T _freertos_release_wakelock -10019c0a T _freertos_get_scheduler_state -10019c2a t _freertos_thread_exit -10019c30 t _freertos_GetFreeHeapSize -10019c34 t _freertos_yield_os -10019c38 t _freertos_udelay_os -10019c3c t _freertos_mdelay_os -10019c40 t _freertos_deinit_xqueue -10019c5a t _freertos_spinlock_free -10019c6c t _freertos_mutex_free -10019c70 t _freertos_free_sema -10019c74 t _freertos_push_to_xqueue -10019c9c t _freertos_pop_from_xqueue -10019cc4 t _freertos_down_sema -10019ce6 t _freertos_init_xqueue -10019d00 t _freertos_spinlock_irqsave -10019d3c t _freertos_spinlock -10019d74 t _freertos_enter_critical_mutex -10019dac t _freertos_mutex_get -10019de4 t _freertos_spinlock_init -10019df2 t _freertos_mutex_init -10019df8 t _freertos_exit_critical_from_isr -10019e04 t _freertos_up_sema_from_isr -10019e2c t _freertos_init_sema -10019e3c t _freertos_create_task -10019eb4 t _freertos_memcmp -10019ec2 t _freertos_memcpy -10019ec8 t _freertos_delete_task -10019f14 t _freertos_mutex_get_timeout -10019f50 t _freertos_systime_to_ms -10019f52 t _freertos_msleep_os -10019f56 T save_and_cli -10019f5a T restore_flags -10019f5e T cli -10019f64 T _freertos_arc4random -10019f94 t _freertos_get_random_bytes -10019fd2 T RtlInitSema -10019fe0 T RtlUpSemaFromISR -1001a000 T RtlDownSema -1001a014 T RtlUdelayOS -1001a018 T _htons -1001a01e T _ntohs -1001a024 T _rtw_zvmalloc -1001a044 T _rtw_vmfree -1001a068 T _rtw_malloc -1001a078 T _rtw_zmalloc -1001a088 T _rtw_mfree -1001a098 T deinit_mem_monitor -1001a09a T rtw_vmfree -1001a09e T rtw_mfree -1001a0a4 T rtw_memcpy -1001a0b4 T rtw_memcmp -1001a0c4 T rtw_memset -1001a0d4 T rtw_init_listhead -1001a0da T rtw_is_list_empty -1001a0e4 T rtw_list_insert_head -1001a0f0 T rtw_list_insert_tail -1001a0fc T rtw_list_delete -1001a10c T rtw_init_sema -1001a11c T rtw_free_sema -1001a12c T rtw_up_sema -1001a13c T rtw_up_sema_from_isr -1001a14c T rtw_down_timeout_sema -1001a15c T rtw_down_sema -1001a170 T rtw_mutex_init -1001a180 T rtw_mutex_free -1001a190 T rtw_mutex_put -1001a1a0 T rtw_mutex_get_timeout -1001a1b4 T rtw_enter_critical_from_isr -1001a1c4 T rtw_enter_critical -1001a1c8 T rtw_exit_critical_from_isr -1001a1d8 T rtw_exit_critical -1001a1dc T rtw_enter_critical_mutex -1001a1ec T rtw_exit_critical_mutex -1001a1fc T rtw_queue_empty -1001a206 T rtw_end_of_queue_search -1001a210 T rtw_spinlock_init -1001a220 T rtw_init_queue -1001a22c T rtw_spinlock_free -1001a23c T rtw_spin_lock -1001a24c T rtw_enter_critical_bh -1001a250 T rtw_spin_unlock -1001a260 T rtw_exit_critical_bh -1001a264 T rtw_get_current_time -1001a274 T rtw_systime_to_ms -1001a288 T rtw_systime_to_sec -1001a29c T rtw_ms_to_systime -1001a2b0 T rtw_sec_to_systime -1001a2c4 T rtw_get_passing_time_ms -1001a2d8 T rtw_msleep_os -1001a2e8 T rtw_usleep_os -1001a2f8 T rtw_mdelay_os -1001a308 T rtw_udelay_os -1001a318 T ATOMIC_SET -1001a328 T ATOMIC_INC -1001a338 T ATOMIC_INC_RETURN -1001a34c T ATOMIC_DEC_RETURN -1001a360 T ATOMIC_DEC_AND_TEST -1001a370 T rtw_modular64 -1001a38c T rtw_get_random_bytes -1001a3a0 T rtw_getFreeHeapSize -1001a3b0 T init_mem_monitor -1001a3c0 T add_mem_usage -1001a3f4 T rtw_zvmalloc -1001a414 T rtw_malloc -1001a434 T rtw_zmalloc -1001a454 T rtw_netif_queue_stopped -1001a458 T rtw_netif_wake_queue -1001a45a T rtw_netif_start_queue -1001a45c T rtw_netif_stop_queue -1001a45e T flush_signals_thread -1001a460 T rtw_acquire_wakelock -1001a470 T rtw_release_wakelock -1001a480 T rtw_create_task -1001a49c T rtw_delete_task -1001a4ac T rtw_wakeup_task -1001a4bc T rtw_timerCreate -1001a4d8 T rtw_timerDelete -1001a4ec T rtw_timerIsTimerActive -1001a500 T rtw_timerStop -1001a514 T rtw_timerChangePeriod -1001a528 T rtw_thread_enter -1001a538 T rtw_thread_exit -1001a548 T tcm_heap_free -1001a5c8 T tcm_heap_init -1001a618 T tcm_heap_freeSpace -1001a658 T tcm_heap_malloc -1001a6f8 T tcm_heap_calloc -1001a710 T flash_init -1001a7ac T flash_turnon -1001a7c4 T flash_erase_sector -1001a7f0 T flash_stream_read -1001a8c0 T flash_stream_write -1001aa18 T i2s_init -1001aaf0 T i2s_set_dma_buffer -1001ab42 T i2s_tx_irq_handler -1001ab48 T i2s_set_param -1001ab7c T i2s_deinit -1001ab80 T i2s_enable -1001ab84 T i2s_disable -1001ab88 W pinmap_merge -1001abc4 W pinmap_find_peripheral -1001abdc W pinmap_peripheral -1001ac14 T sleep_ex_selective -1001ac28 T deepsleep_ex -1001ac4c T us_ticker_read -1001ac78 T En32KCalibration -1001ad0c T WDGInitial -1001ad98 T WDGStart -1001adb0 T WDGRefresh -1001adcc T I2SISRHandle -1001ae88 T RtkI2SDeInit -1001af68 T RtkI2SEnable -1001afa4 T RtkI2SDisable -1001afe0 T RtkI2SLoadDefault -1001b044 T HalI2SOpInit -1001b0c0 T RtkI2SInit -1001b284 T HalI2SInit -1001b2c2 T HalI2SDisable -1001b2e8 T HalI2SEnable -1001b30c T HalI2SDeInit -1001b364 T HalTimerOpInit_Patch -1001b3a0 T freertos_ready_to_sleep -1001b3b0 T freertos_pre_sleep_processing -1001b474 T freertos_post_sleep_processing -1001b498 T acquire_wakelock -1001b4d8 T release_wakelock -1001b534 T get_wakelock_status -1001b540 T HalI2SInitRtl8195a_Patch -1001b642 T HalI2SSetRateRtl8195a -1001b688 T HalI2SSetWordLenRtl8195a -1001b6b0 T HalI2SSetChNumRtl8195a -1001b6d8 T HalI2SSetPageNumRtl8195a -1001b700 T HalI2SSetPageSizeRtl8195a -1001b72a T HalI2SSetDMABufRtl8195a -1001b794 T HalI2SGetTxPageRtl8195a -1001b7b4 T HalI2SPageSendRtl8195a -1001b800 T HalI2SClearAllOwnBitRtl8195a -1001b834 T HalI2SDMACtrlRtl8195a -1001b838 T HalTimerIrq2To7Handle_Patch -1001b88c T HalTimerIrqRegisterRtl8195a_Patch -1001b908 T HalTimerIrqUnRegisterRtl8195a_Patch -1001b980 T HalTimerDeInitRtl8195a_Patch -1001b9b4 T HalTimerReadCountRtl8195a_Patch -1001b9cc T HalTimerReLoadRtl8195a_Patch -1001ba00 T HalTimerInitRtl8195a_Patch -1001bad4 T HalTimerIrqEnRtl8195a -1001bae8 T HalTimerEnRtl8195a_Patch -1001bafc T HalTimerDisRtl8195a_Patch -1001bb10 t rtw_ht_operation_update -1001bbc2 t associated_clients_update.part.11 -1001bbfe T chk_sta_is_alive -1001bc3c T add_RATid -1001bd44 T update_sta_info_apmode -1001bdfc T update_beacon -1001c0bc T rtw_check_beacon_data -1001c7bc T associated_clients_update -1001c7c6 T bss_cap_update_on_sta_join -1001c976 T bss_cap_update_on_sta_leave -1001ca72 T ap_free_sta -1001cb24 T expire_timeout_chk -1001cc60 T rtw_sta_flush -1001cce4 T free_mlme_ap_info -1001cd30 T sta_info_update -1001cd6c T ap_sta_info_defer_update -1001cd9c T start_ap_mode -1001cddc T init_mlme_ap_info -1001cdf2 T stop_ap_mode -1001ce40 T rtw_generate_bcn_ie -1001d164 T set_hidden_ssid -1001d1bc T _rtw_init_evt_priv -1001d1ce T _rtw_free_cmd_priv -1001d1d8 T _rtw_enqueue_cmd -1001d204 T _rtw_dequeue_cmd -1001d238 T _rtw_observequeue_cmd -1001d24c T rtw_init_cmd_priv -1001d256 T rtw_init_evt_priv -1001d25a T rtw_free_evt_priv -1001d25c T rtw_free_cmd_priv -1001d260 T rtw_cmd_filter -1001d27e T rtw_free_cmd_obj -1001d2a8 T rtw_enqueue_cmd -1001d2fe T rtw_set_channel_plan_cmd_callback -1001d316 T rtw_survey_cmd_callback -1001d332 T rtw_disassoc_cmd_callback -1001d362 T rtw_joinbss_cmd_callback -1001d37e T rtw_setstaKey_cmdrsp_callback -1001d398 T rtw_cmd_thread -1001d4f4 T rtw_joinbss_cmd -1001d79e T rtw_disassoc_cmd -1001d7ec T rtw_setstakey_cmd -1001d8dc T rtw_clearstakey_cmd -1001d97c T rtw_dynamic_chk_wk_cmd -1001d9ce T rtw_set_chplan_cmd -1001da4e T dynamic_chk_wk_hdl -1001db16 T lps_ctrl_wk_hdl -1001db7a T rtw_lps_ctrl_wk_cmd -1001dbe4 T rtw_sitesurvey_cmd -1001dcac T rpt_timer_setting_wk_hdl -1001dcc0 T rtw_ps_cmd -1001dd1c T rtw_chk_hi_queue_cmd -1001dd70 T rtw_drvextra_cmd_hdl -1001de4c t rtw_free_mlme_ie_data -1001de64 T rtw_init_mlme_timer -1001dec0 T rtw_del_mlme_timer -1001dee0 T reconnect_timer_hdl -1001df80 T _rtw_init_mlme_priv -1001e002 T rtw_mfree_mlme_priv_lock -1001e01e T rtw_free_mlme_priv_ie_data -1001e056 T _rtw_free_mlme_priv -1001e07e T _rtw_alloc_network -1001e0ce T _rtw_free_network -1001e12e T _rtw_free_network_nolock -1001e154 T _rtw_find_network -1001e190 T _rtw_free_network_queue -1001e1d8 T rtw_if_up -1001e1f8 T rtw_get_capability_from_ie -1001e1fc T rtw_get_capability -1001e216 T rtw_get_beacon_interval_from_ie -1001e21a T rtw_init_mlme_priv -1001e232 T rtw_free_mlme_priv -1001e236 T rtw_free_network_queue -1001e23a T rtw_is_same_ibss -1001e250 T is_same_network -1001e2b4 T update_network -1001e34e T rtw_update_scanned_network -1001e460 T rtw_add_network -1001e49e T rtw_survey_event_callback -1001e54a T rtw_dummy_event_callback -1001e54c T rtw_free_assoc_resources -1001e616 T rtw_indicate_connect -1001e626 T rtw_indicate_disconnect -1001e648 T rtw_indicate_scan_done -1001e64c T rtw_joinbss_event_callback -1001e66a T search_max_mac_id -1001e6b2 T rtw_stassoc_hw_rpt -1001e6ea T rtw_stassoc_event_callback -1001e718 T rtw_stadel_event_callback -1001e7be T _rtw_join_timeout_handler -1001e848 T rtw_join_timeout_handler -1001e8a0 T rtw_scan_timeout_handler -1001e8d0 T _rtw_scan_timeout_handler -1001e8d4 T rtw_dynamic_check_timer_handlder -1001e92c T _dynamic_check_timer_handlder -1001e970 T rtw_select_and_join_from_scanned_queue -1001ea44 T rtw_surveydone_event_callback -1001eb5c T rtw_set_auth -1001ebac T rtw_set_key -1001ec6e T rtw_restruct_wmm_ie -1001ecd4 T rtw_restruct_sec_ie -1001ed40 T rtw_joinbss_reset -1001ed50 T rtw_restructure_ht_ie -1001ee30 T rtw_update_ht_cap -1001eeba T rtw_joinbss_event_prehandle -1001f0e6 T rtw_linked_check -1001f102 T rtw_buddy_adapter_up -1001f13a T check_buddy_fwstate -1001f158 t get_da -1001f178 t get_sa -1001f1a2 T OnAction -1001f1b4 T DoReserved -1001f1b8 t _mgt_dispatcher.isra.2 -1001f204 T rtw_is_channel_set_contains_channel -1001f226 T init_hw_mlme_ext -1001f23c T init_channel_set -1001f2d4 T free_mlme_ext_priv -1001f2fc T mgt_dispatcher -1001f384 T alloc_mgtxmitframe -1001f3bc T update_mgnt_tx_rate -1001f3c2 T update_mgntframe_attrib -1001f41e T rtw_build_mgnt_frame -1001f474 T dump_mgntframe -1001f48e T rtw_send_mgnt -1001f4ac t issue_action_BSSCoexistPacket -1001f6b8 T update_hidden_ssid -1001f70c T issue_beacon -1001f924 T issue_probersp -1001fbb4 T OnProbeReq -1001fc7c T issue_probereq -1001fe34 T issue_auth -1002009c T OnAuth -10020340 T issue_asocrsp -100205b4 T issue_assocreq -100208f0 T issue_nulldata -100209da T issue_qos_nulldata -10020b0c T issue_deauth -10020bf4 T issue_action_BA -10020e70 T OnAction_back -10020f3e T collect_bss_info -10021170 T start_clnt_auth -10021200 T start_clnt_assoc -10021234 T OnAuthClient -10021314 T report_scan_result_one -100214d4 T add_site_survey -1002165a T report_survey_event -10021898 T OnProbeRsp -100218cc T report_surveydone_event -10021930 T report_join_res -100219a0 T OnAssocRsp -10021aec T report_del_sta_event -10021b7e T receive_disconnect -10021bd4 T OnBeacon -10021d5c T OnDeAuth -10021eb4 T OnDisassoc -10022024 T report_add_sta_event -10022098 T OnAssocReq -10022688 T rtw_port_switch_chk -1002270c T update_sta_info -1002278c T mlmeext_sta_del_event_callback -1002280c T _linked_info_dump -1002286e T _linked_rx_signal_strehgth_display -100228a8 T linked_status_chk -10022b1c T survey_timer_hdl -10022bfc T _survey_timer_hdl -10022c00 T link_timer_hdl -10022c7e T _link_timer_hdl -10022c82 T addba_timer_hdl -10022ca2 T NULL_hdl -10022ca6 T setopmode_hdl -10022cec T disconnect_hdl -10022d98 T setauth_hdl -10022da8 T setkey_hdl -10022e00 T set_stakey_hdl -10022f04 T set_tx_beacon_cmd -10022f78 T mlme_evt_hdl -10022fc4 T tx_beacon_hdl -1002307e T check_buddy_mlmeinfo_state -10023098 T site_survey -10023268 T sitesurvey_cmd_hdl -10023376 T concurrent_chk_start_clnt_join -1002340c T start_clnt_join -100234e0 T join_cmd_hdl -10023604 T concurrent_chk_joinbss_done -100237cc T mlmeext_joinbss_event_callback -10023908 T set_chplan_hdl -10023924 T init_mlme_ext_timer -10023980 T init_mlme_ext_priv -10023abc t get_hdr_bssid -10023ae4 t filter_packet -10023b6c t promisc_get_encrypt -10023bbe t promisc_info_get -10023c62 t promisc_set_enable -10023cfe T _promisc_deinit -10023d50 T _promisc_recv_func -1002429c T _promisc_set -1002432c T _is_promisc_enabled -10024344 t SetEAPOL_KEYIV -100243e2 t ToDrv_SetPTK -1002448a t Message_ReplayCounter_OC2LI.isra.2 -100244b8 t Message_SmallerEqualReplayCounter.isra.4 -100244ea t Message_setReplayCounter.isra.5 -10024508 t INCLargeInteger -10024528 t INCOctet16_INTEGER -10024570 t INCOctet32_INTEGER -100245d0 t ToDrv_DisconnectSTA -10024694 t CheckMIC.constprop.14 -10024714 t CalcMIC.constprop.15 -10024774 T DecWPA2KeyData -10024828 T DecGTK -100248e4 T ToDrv_SetGTK -10024974 T init_wpa_sta_info -10024a60 T SendEAPOL -10025118 T ClientSendEAPOL -10025600 t ResendTimeout -10025688 T EAPOLKeyRecvd -10025800 T ClientEAPOLKeyRecvd -10025bc0 T psk_derive -10025c74 T psk_init -10025d64 T psk_strip_rsn_pairwise -10025de4 T psk_strip_wpa_pairwise -10025e64 T tkip_send_mic_failure_report -10025fd8 T pwr_state_check_handler -10025fdc T ips_enter -10026084 T ips_leave -1002619c T rtw_pwr_unassociated_idle -100261e6 T rtw_ps_processor -1002623e T PS_RDY_CHECK -100262a6 T rtw_set_ps_mode -10026314 T LPS_RF_ON_check -1002636a T LPS_Enter -100263d8 T LPS_Leave -10026414 T LeaveAllPowerSaveMode -10026424 T rtw_init_pwrctrl_priv -100264f8 T rtw_free_pwrctrl_priv -1002650c T _rtw_pwr_wakeup -100265e8 T rtw_pm_set_lps -10026630 T rtw_pm_set_ips -10026674 T rtw_pm_set_tdma_param -10026690 T rtw_pm_set_lps_dtim -1002669c T rtw_pm_get_lps_dtim -100266a8 t recvframe_pull -100266ca t recvframe_pull_tail -100266ec T rtw_signal_stat_timer_hdl -1002678a T _rtw_init_sta_recv_priv -100267a8 T _rtw_init_recv_priv -10026850 T rtw_mfree_recv_priv_lock -10026884 T _rtw_alloc_recvframe -100268b6 T rtw_alloc_recvframe -100268dc T rtw_free_recvframe -10026978 T _rtw_enqueue_recvframe -100269a4 T rtw_enqueue_recvframe -100269ce T rtw_free_recvframe_queue -10026a06 T rtw_free_uc_swdec_pending_queue -10026a2e T _rtw_free_recv_priv -10026a5e T rtw_free_buf_pending_queue -10026a62 T recvframe_chkmic -10026b60 T decryptor -10026bfc T portctrl -10026c72 T recv_decache -10026ca0 T process_pwrbit_data -10026ce0 T process_wmmps_data -10026d68 T count_rx_stats -10026ddc T sta2sta_data_frame -10026f18 T ap2sta_data_frame -10027044 T sta2ap_data_frame -100270cc T validate_recv_ctrl_frame -10027266 T validate_recv_data_frame -100274c0 T wlanhdr_to_ethhdr -100275fc T recvframe_defrag -100276a6 T recvframe_chk_defrag -1002775c T validate_recv_mgnt_frame -10027798 T validate_recv_frame -10027860 T recv_indicatepkt_reorder -10027882 T process_recv_indicatepkts -100278da T recv_func_prehandle -10027902 T recv_func_posthandle -10027966 T recv_func -100279f0 T rtw_recv_entry -10027a20 T rtw_recv_tasklet -10027a78 T rtw_wep_encrypt -10027abe T rtw_wep_decrypt -10027b04 T rtw_tkip_encrypt -10027b70 T rtw_tkip_decrypt -10027bdc T rtw_aes_encrypt -10027c48 T rtw_aes_decrypt -10027cac T rtw_init_sec_priv -10027d1e T rtw_free_sec_priv -10027d3e t wifi_mac_hash -10027d68 T _addba_timer_hdl -10027d6c T _rtw_init_stainfo -10027de6 T _rtw_init_sta_priv -10027ece T _rtw_free_sta_xmit_priv_lock -10027efa T rtw_mfree_stainfo -10027f26 T rtw_mfree_sta_priv_lock -10027f5c T _rtw_free_sta_priv -10027f7c T init_addba_retry_timer -10027fa4 T rtw_alloc_stainfo -1002806e T rtw_free_stainfo -10028210 T rtw_get_stainfo -1002828c T rtw_init_bcmc_stainfo -100282bc T rtw_get_bcmc_stainfo -100282e0 T rtw_free_all_stainfo -1002833a T cckrates_included -10028362 T cckratesonly_included -1002838a T networktype_to_raid_ex -100283e8 T judge_network_type -10028438 T ratetbl_val_2wifirate -1002844c T is_basicrate -10028478 T ratetbl2rateset -100284bc T get_rate_set -100284e6 T UpdateBrateTbl -10028518 T UpdateBrateTblForSoftAP -1002854c T Save_DM_Func_Flag -10028562 T Restore_DM_Func_Flag -10028578 T Switch_DM_Func -10028594 T Set_MSR -100285b8 T set_opmode -100285fc T SelectChannel -10028630 T SetBWMode -1002866c T set_channel_bwmode -100286c2 T get_my_bssid -100286c6 T get_beacon_interval -100286e4 T is_client_associated_to_ap -100286fc T is_client_associated_to_ibss -10028718 T is_IBSS_empty -1002873a T decide_wait_for_beacon_timeout -10028756 T invalidate_cam_all -1002875e T write_cam -100287d4 T clear_cam_entry -10028802 T flush_all_cam_entry -10028860 T WMM_param_handler -10028886 T WMMOnAssocRsp -10028954 T HT_caps_handler -100289f4 T HT_info_handler -10028a18 T HTOnAssocRsp -10028a50 T ERP_IE_handler -10028a6c T VCS_update -10028abe T rtw_check_bcn_info -10028cce T update_beacon_info -10028d24 T is_ap_in_tkip -10028d9c T wifirate2_ratetbl_inx -10028e08 T update_basic_rate -10028e36 T update_supported_rate -10028e60 T update_MCS_rate -10028e6c T support_short_GI -10028e9a T get_highest_rate_idx -10028eb4 T Update_RA_Entry -10028ebc T set_sta_rate -10028ec4 T update_tx_basic_rate -10028f1c T check_assoc_AP -10029010 T update_IOT_info -1002906e T update_capinfo -100290ec T update_wireless_mode -1002918c T update_bmc_sta_support_rate -100291b4 T update_TSF -100291c6 T correct_TSF -100291ce t _init_txservq -100291e4 t set_qos -10029234 T _rtw_init_sta_xmit_priv -1002927a T rtw_mfree_xmit_priv_lock -100292c6 T qos_acm -10029300 T xmitframe_addmic -1002945e T xmitframe_swencrypt -1002948a T rtw_make_wlanhdr -1002966a T rtw_txframes_pending -100296a6 T rtw_txframes_sta_ac_pending -100296dc T rtw_txframes_update_attrib_vcs_info -1002977c T rtw_put_snap -100297c0 T rtw_update_protection -10029806 T rtw_count_tx_stats -10029856 T rtw_free_xmitbuf_ext -10029898 T rtw_alloc_xmitframe -100298f0 T rtw_free_xmitframe -10029942 T rtw_free_xmitframe_queue -10029980 T rtw_get_sta_pending -100299c0 T rtw_xmit_classifier -10029a26 T rtw_xmitframe_enqueue -10029a34 T rtw_alloc_hwxmits -10029a8e T rtw_free_hwxmits -10029aa4 T _rtw_free_xmit_priv -10029b70 T rtw_init_hwxmits -10029b88 T _rtw_init_xmit_priv -10029d40 T rtw_get_ff_hwaddr -10029d54 T xmitframe_enqueue_for_sleeping_sta -10029f14 t dequeue_xmitframes_to_sleeping_queue -10029f6a T stop_sta_xmit -1002a052 T wakeup_sta_to_xmit -1002a268 T xmit_delivery_enabled_frames -1002a384 T rtw_xmit_tasklet -1002a3dc T rtw_xmit_mgnt -1002a3e0 T rtw_xmit -1002a70a T rtw_sctx_done_err -1002a716 T rtw_alloc_xmitbuf -1002a770 T rtw_free_xmitbuf -1002a7e2 T rtw_alloc_xmitbuf_ext -1002a868 T rtw_sctx_done -1002a86e t rtl8195a_free_rx_ring -1002a87c t bus_write32 -1002a8d8 t bus_write16 -1002a934 t bus_write8 -1002a990 t bus_read32 -1002a9ea t bus_read16 -1002aa46 t bus_read8 -1002aaa2 t rtl8195a_free_tx_ring -1002ab30 T rtl8195a_init_desc_ring -1002ac70 T rtl8195a_free_desc_ring -1002ac8c T rtl8195a_reset_desc_ring -1002ad22 T InitLxDmaRtl8195a -1002ae84 T rtl8195a_check_txdesc_closed -1002aefc t rtl8195a_tx_isr -1002afe0 T InterruptRecognized8195a -1002b070 T InitInterrupt8195a -1002b090 T EnableDMA8195a -1002b0b8 T EnableInterrupt8195a -1002b0f8 T DisableDMA8195a -1002b104 T DisableInterrupt8195a -1002b11c T UpdateInterruptMask8195a -1002b17e T CheckRxTgRtl8195a -1002b1b8 T rtl8192ee_check_rxdesc_remain -1002b1e8 T rtl8195a_recv_tasklet -1002b4fc T rtl8195a_tx_int_handler -1002b528 T InterruptHandle8195a -1002b79c T rtl8195a_xmit_tasklet -1002b7c4 T lxbus_set_intf_ops -1002b804 t GetTxBufDesc -1002b84e t UpdateFirstTxbdtoXmitBuf.isra.3 -1002b880 t check_nic_enough_desc.isra.4 -1002b8d0 T rtl8195ab_init_xmit_priv -1002b8de T rtl8195ab_free_xmit_priv -1002b8e6 T GetDmaTxbdIdx -1002b902 T rtl8195a_enqueue_xmitbuf -1002b926 T rtl8195a_dequeue_xmitbuf -1002b94a T SetTxbdForLxDMARtl8195ab -1002b9ca T UpdateTxbdHostIndex -1002ba08 T rtw_dump_xframe -1002bbda T check_tx_desc_resource -1002bc14 T rtw_dequeue_xframe -1002bca8 T rtw_xmitframe_coalesce -1002bf5c T rtl8195ab_xmitframe_resume -1002c052 T rtl8195ab_mgnt_xmit -1002c08e T rtl8195ab_hal_xmit -1002c19c t Hal_GetEfuseDefinition -1002c1cc t ResumeTxBeacon -1002c210 T UpdateHalRAMask8195A -1002c3a8 T HalLittleWifiMCUThreadRtl8195a -1002c3fc T HalCheckInReqStateThreadRtl8195a -1002c448 T HalTDMAChangeStateThreadRtl8195a -1002c494 t rtl8195a_read_chip_version -1002c508 t Hal_EfuseWordEnableDataWrite -1002c74c t Hal_EfusePowerSwitch -1002c760 t rtl8195a_free_hal_data -1002c77a t StopTxBeacon -1002c7c4 T SetHalODMVar8195A -1002c87c T rtl8195a_start_thread -1002c8e4 T rtl8195a_stop_thread -1002c908 t Hal_ReadEFuse -1002ca78 T GetHalODMVar8195A -1002ca8c t rtw_flash_map_update.part.12 -1002cb2c t rtw_flash_map_erase -1002cb70 t Hal_EfusePgPacketWrite -1002cdec t Hal_EfuseGetCurrentSize -1002cecc t rtw_flash_map_write -1002d09a T rtl8195a_InitBeaconParameters -1002d10a T _InitBurstPktLen_8195AB -1002d114 T rtl8195a_set_hal_ops -1002d1f4 T rtl8195a_init_default_value -1002d1f6 T rtl8195a_InitLLTTable -1002d240 T Hal_GetChnlGroup8195A -1002d27c T rtw_config_map_read -1002d368 T rtw_config_map_write -1002d414 T Hal_InitPGData -1002d472 T Hal_EfuseParseIDCode -1002d48a T Hal_ReadPowerValueFromPROM_8195A -1002d528 T Hal_EfuseParseTxPowerInfo_8195A -1002d5c0 T Hal_EfuseParseEEPROMVer_8195A -1002d5d6 T Hal_EfuseParsePackageType_8195A -1002d640 T Hal_EfuseParseChnlPlan_8195A -1002d670 T Hal_EfuseParseCustomerID_8195A -1002d686 T Hal_EfuseParseXtal_8195A -1002d69e T Hal_EfuseParseThermalMeter_8195A -1002d6c6 T Hal_ReadRFGainOffset -1002d716 T BWMapping_8195A -1002d736 T SCMapping_8195A -1002d75e T rtl8195a_update_txdesc -1002da2e T rtl8195a_fill_fake_txdesc -1002daec T SetHwReg8195A -1002e7ac T GetHwReg8195A -1002e840 T SetHalDefVar8195A -1002e920 T GetHalDefVar8195A -1002e944 T PHY_QueryBBReg_8195A_Safe -1002e970 T PHY_SetBBReg_8195A_Safe -1002e99c t phy_RFSerialRead_8195A -1002ea50 T PHY_QueryRFReg_8195A -1002ea68 T PHY_SetRFReg_8195A -1002eac0 T PHY_MACConfig8195A -1002eada T PHY_BBConfig8195A -1002ebea T PHY_RFConfig8195A -1002ebee T PHY_SetTxPowerIndex_8195A -1002ecf8 T phy_TxPwrAdjInPercentage -1002ed38 T PHY_GetTxPowerIndex_8195A -1002ee28 T PHY_SetTxPowerLevel8195A -1002ee2e T phy_SpurCalibration_8195A -1002f0e6 T phy_SetRegBW_8195A -1002f124 T phy_PostSetBwMode8195A -1002f280 T phy_SwChnl8195A -1002f328 T phy_SwChnlAndSetBwMode8195A -1002f378 T PHY_HandleSwChnlAndSetBW8195A -1002f428 T PHY_SetBWMode8195A -1002f44a T PHY_SwChnl8195A -1002f464 T PHY_SetSwChnlBWMode8195A -1002f482 t HalTimerEnable -1002f494 T InitTDMATimer -1002f4bc T ChangeStateByTDMA -1002f4cc T GetMinRateInRRSR -1002f500 T CheckInReqState -1002f510 T InitCheckStateTimer -1002f540 T InitGTimer1ms -1002f58c T DeInitGTimer1ms -1002f5d4 T ChangeTransmiteRate -1002f610 T PowerBitSetting -1002f68c T ChkandChangePS -1002f6f0 T IssueRsvdPagePacketSetting -1002f764 T IssuePSPoll -1002f790 T WaitTxStateMachineOk -1002f7e4 T IssueNullData -1002f874 T PsCloseRF -1002f8a8 T PsOpenRF -1002f8d8 T ChkTxQueueIsEmpty -1002f8f0 T InitPS -1002f960 T ConfigListenBeaconPeriod -1002f984 T PS_S2_Condition_Match -1002f9b8 T PS_S4_Condition_Match -1002fa34 T PS_32K_Condition_Match -1002fa70 T PS_S2ToS3ToS0State -1002fad8 T PS_S2ToS0State -1002faf4 T PS_S3ToS2orS0State -1002fb24 T PS_S0ToS1ToS2State -1002fb80 T PS_S1ToS0orS2State -1002fbb0 T PS_S2ToS4State -1002fbfc T PS_S0ToS6State -1002fc1c T PS_S6ToS0State -1002fc34 T CheckTSFIsStable -1002fc84 T WaitHWStateReady -1002fc94 T SysClkDown -1002fd04 T SysClkUp -1002fd50 T ResetPSParm -1002fdc4 T PS_S4ToS2State -1002fde8 T SleepTo32K -1002fe48 T Change_PS_State -1002fff4 T Legacy_PS_Setting -10030068 T PSModeSetting -1003010c T ChangePSStateByRPWM -10030150 T ChangeTDMAState -10030270 T TDMAChangeStateTask -1003029a T EnterPS -100302bc T SetSmartPSTimer -100302f8 T GTimer7Handle -10030354 T SmartPS2InitTimerAndToGetRxPkt -10030390 T PS_OnBeacon -10030440 T PSBcnEarlyProcess -100304fc T PSMtiBcnEarlyProcess -100305a8 T PSRxBcnProcess -100306f8 T TxPktInPSOn -10030736 T PsBcnToProcess -100307f0 T GTimer6Handle -1003083c T RPWMProcess -10030878 T PSSetMode -100308f0 T SpeRPT -10030a10 T ISR_BcnEarly -10030a7c T ISR_MtiBcnEarly -10030ab0 T ISR_RxBcn -10030acc T ISR_RxBCMD1 -10030afc T ISR_RxBCMD0 -10030b50 T ISR_RxUCMD1 -10030b8e T ISR_RxUCMD0 -10030bca T ISR_TxPktIn -10030bdc T ISR_TXCCX -10030be0 T H2CHDL_SetPwrMode -10030d08 T CheckInReqStateTask -10030d4e T HalGetNullTxRpt -10030d6c T ISR_TBTT -10030de4 T H2CHDL_BcnIgnoreEDCCA -10030df4 T PMUInitial -10030e44 T PMUTask -10030f50 T PHY_RF6052SetBandwidth8195A -10030f94 T PHY_RF6052_Config8195A -1003104c t process_rssi -10031082 T rtl8195a_query_rx_desc_status -10031132 T rtl8195a_query_rx_phy_status -1003128a T hal_com_get_channel_plan -100312be T HAL_IsLegalChannel -100312dc T MRateToHwRate -100312f0 T HwRateToMRate -10031304 T HalSetBrateCfg -100313b0 T Hal_MappingOutPipe -100313cc T hal_init_macaddr -100313f8 T hw_var_port_switch -10031680 T SetHwReg -1003168a T GetHwReg -1003168c T switch_power_saving_mode -100316d0 T rtw_bb_rf_gain_offset -10031718 T PHY_GetRateValuesOfTxPowerByRate -100318b0 T PHY_StoreTxPowerByRateNew -1003194c T PHY_InitTxPowerByRate -10031964 T PHY_StoreTxPowerByRate -1003197c T PHY_GetTxPowerIndexBase -10031a1c T PHY_GetTxPowerTrackingOffset -10031a48 T PHY_GetRateIndexOfTxPowerByRate -10031a5c T PHY_GetTxPowerByRate -10031abc T phy_StoreTxPowerByRateBase -10031b08 T PHY_SetTxPowerByRate -10031b44 T phy_ConvertTxPowerByRateInDbmToRelativeValues -10031c44 T PHY_TxPowerByRateConfiguration -10031c56 T PHY_SetTxPowerIndexByRateArray -10031c94 T PHY_SetTxPowerIndexByRateSection -10031cf8 T PHY_SetTxPowerLevelByPath -10031d2e T phy_GetWorldWideLimit -10031d5a T PHY_GetTxPowerLimit -10031e84 T PHY_ConvertTxPowerLimitToPowerIndex -10031fd4 T PHY_InitTxPowerLimit -1003201c T PHY_SetTxPowerLimit -10032098 T PHY_GetTxPowerIndex -100320a8 T rtw_hal_chip_configure -100320be T rtw_hal_read_chip_info -100320d4 T rtw_hal_read_chip_version -100320ea T rtw_hal_def_value_init -10032100 T rtw_hal_free_data -10032116 T rtw_hal_dm_init -1003212c T rtw_hal_dm_deinit -10032142 T rtw_hal_init -1003216c T rtw_hal_deinit -10032186 T rtw_hal_set_hwreg -10032194 T rtw_hal_get_hwreg -100321a2 T rtw_hal_set_def_var -100321b4 T rtw_hal_get_def_var -100321c6 T rtw_hal_set_odm_var -100321d4 T rtw_hal_get_odm_var -100321e2 T rtw_hal_enable_interrupt -10032204 T rtw_hal_disable_interrupt -10032226 T rtw_hal_inirp_init -10032238 T rtw_hal_inirp_deinit -1003224a T rtw_hal_irp_reset -10032258 T rtw_hal_xmit -1003226a T rtw_hal_mgnt_xmit -1003227c T rtw_hal_init_xmit_priv -1003228e T rtw_hal_free_xmit_priv -1003229c T rtw_hal_update_ra_mask -100322ca T rtw_hal_add_ra_tid -100322d8 T rtw_hal_clone_data -100322e6 T rtw_hal_start_thread -100322f4 T rtw_hal_stop_thread -10032302 T rtw_hal_read_bbreg -10032336 T rtw_hal_write_bbreg -10032362 T rtw_hal_read_rfreg -10032374 T rtw_hal_write_rfreg -10032388 T rtw_hal_interrupt_handler -1003239a T rtw_hal_set_bwmode -100323a8 T rtw_hal_set_chan -100323b6 T rtw_hal_set_chnl_bw -100323cc T rtw_hal_dm_watchdog -100323e2 T rtw_hal_macid_sleep -10032402 T rtw_hal_macid_wakeup -10032422 T decide_chip_type_by_device_id -10032428 t rtw_net_get_stats -10032478 t netdev_if2_close -10032498 t netdev_close -100324f4 t rtw_if1_deinit -1003258e T rtw_os_indicate_connect -10032592 T rtw_os_indicate_scan_done -10032596 T rtw_reset_securitypriv -1003268a T rtw_os_indicate_disconnect -100326d4 T rtw_init_netdev -10032824 T rtw_drv_if2_init -10032a2c T rtw_drv_if2_stop -10032a82 T rtw_drv_if2_free -10032ad0 T _netdev_open -10032bec T _netdev_if2_open -10032ca8 T netdev_if2_open -10032cd0 T netdev_open -10032cf8 T rtw_drv_probe -10032e78 T rtw_dev_remove -10032ebc T rtw_drv_entry -10032ee8 T rtw_drv_halt -10032f18 t rtw_wx_set_autoreconnect -10032f46 t rtw_wx_get_autoreconnect -10032f54 t rtw_forwarding_set -10032f76 t rtw_set_ch_deauth -10032f98 t get_priv_size -10032fac t rtw_wx_del_custome_ie -10032ff8 t rtw_wx_set_pscan_freq -1003307a t rtw_wx_update_custome_ie -100330ec t rtw_set_tos_value -1003310c t rtw_get_tx_power -10033250 t rtw_wx_set_custome_ie -100332fc t rtw_pm_get -10033340 t rtw_pm_set -100333f4 t rtw_wx_read32 -100334a0 t rtw_wx_write32 -10033504 t rtw_wx_set_freq.isra.10 -100335ac T rtw_ex_set -1003366c T wireless_send_event -10033676 T indicate_wx_custom_event -100336d2 T indicate_wx_scan_result_present -100336fa T indicate_wx_scan_complete_event -10033724 T rtw_indicate_sta_assoc -10033774 T rtw_indicate_sta_disassoc -100337cc T rtw_indicate_wx_assoc_event -100337fe T rtw_indicate_wx_disassoc_event -1003382e T rtw_set_wpa_ie -10033944 T strtopsk -100339b0 T rtw_wx_get_passphrase -100339fc T rtw_wx_set_ap_essid -10033aec T mac_reg_dump -10033b98 T bb_reg_dump -10033bf4 T rf_reg_dump -10033c6c t rtw_dbg_port -100342d4 T rtw_set_sta_num -100342f0 T rtw_ex_get_drv_ability -100343b0 T rtw_ex_get -10034648 T rtw_ioctl -100355d4 T rtw_os_recv_resource_init -100355d8 T rtw_os_recv_resource_alloc -100355e2 T rtw_os_recv_resource_free -100355e4 T rtw_tkip_countermeasure -10035684 T rtw_handle_tkip_mic_err -1003572c T rtw_recv_indicatepkt -1003597c T skb_fail_inc -10035998 T skb_fail_get_and_rst -100359b4 T init_skb_pool -10035a0c T init_skb_data_pool -10035a64 T alloc_skb -10035b64 T kfree_skb -10035bcc T kfree_skb_chk_key -10035bd0 T skb_put -10035c04 T skb_reserve -10035c12 T dev_alloc_skb -10035c2e T skb_end_pointer -10035c32 T skb_set_tail_pointer -10035c3a T skb_pull -10035c52 T skb_copy -10035c7a T rtw_remainder_len -10035c86 T _rtw_open_pktfile -10035c98 T _rtw_pktfile_read -10035cc6 T rtw_set_tx_chksum_offload -10035cc8 T rtw_os_xmit_resource_alloc -10035cd2 T rtw_os_xmit_resource_free -10035cd4 T rtw_os_pkt_complete -10035cdc T rtw_os_xmit_complete -10035cee T rtw_os_xmit_schedule -10035d2a T rtw_xmit_entry -10035d76 T rtw_alloc_etherdev_with_old_priv -10035d8c T rtw_alloc_etherdev -10035db8 T rtw_free_netdev -10035dd8 T timer_wrapper -10035e2c T alloc_etherdev -10035e88 T free_netdev -10035ea2 T dev_alloc_name -10035eac T init_timer_wrapper -10035ecc T deinit_timer_wrapper -10035f18 T init_timer -10035fd0 T mod_timer -100360b0 T cancel_timer_ex -100360f8 T del_timer_sync -1003615c T rtw_init_timer -10036164 T rtw_set_timer -10036168 T rtw_cancel_timer -10036172 T rtw_del_timer -10036178 T rltk_get_idx_bydev -10036188 T rltk_wlan_init -10036210 T rltk_wlan_deinit -100362d4 T rltk_wlan_start -10036308 T rltk_wlan_check_isup -10036318 T rltk_wlan_tx_inc -1003632c T rltk_wlan_tx_dec -10036340 T rltk_wlan_get_recv_skb -10036350 T rltk_wlan_alloc_skb -10036390 T rltk_wlan_send_skb -100363c4 T rltk_netif_rx -10036470 T rltk_set_sta_num -10036474 T rltk_set_tx_power_percentage -100364a8 T rltk_wlan_control -1003653c T rltk_wlan_running -10036554 T rltk_wlan_handshake_done -10036588 T rltk_wlan_wireless_mode -10036614 T rltk_wlan_is_connected_to_ap -10036658 T Efuse_PowerSwitch -10036664 T Efuse_GetCurrentSize -10036670 T Efuse_CalculateWordCnts -10036694 T EFUSE_GetEfuseDefinition -100366a8 T efuse_OneByteRead -100366dc T efuse_OneByteWrite -10036710 T Efuse_PgPacketWrite -10036724 T efuse_WordEnableDataRead -10036756 T Efuse_WordEnableDataWrite -1003676a T efuse_GetCurrentSize -10036792 T rtw_efuse_map_read -100367f4 T rtw_efuse_map_write -10036974 T rtw_macaddr_cfg -10036a38 T rtw_get_cipher_info -10036ab2 T rtw_get_bcn_info -10036b82 T rtw_init_default_value -10036bf0 T rtw_cancel_all_timer -10036c5a T rtw_free_drv_sw -10036cd0 T rtw_reset_drv_sw -10036d2c T rtw_init_drv_sw -10036db4 T rtw_start_drv_threads -10036e70 T rtw_stop_drv_threads -10036ea4 T rtw_read8 -10036eb2 T rtw_read16 -10036ec0 T rtw_read32 -10036ece T rtw_write8 -10036edc T rtw_write16 -10036eea T rtw_write32 -10036ef8 T rtw_do_join -10036f9c T rtw_set_802_11_bssid -10037120 T rtw_set_802_11_ssid -10037228 T rtw_set_802_11_infrastructure_mode -100372ca T rtw_set_802_11_bssid_list_scan -1003731a T rtw_set_802_11_authentication_mode -1003733c T rtw_set_802_11_add_wep -1003739c T ODM_InitRAInfo -1003743c T InitialRateUpdate -1003753c T RateUp_search_RateMask -1003756e T RateDown_search_RateMask -100375c0 T StartRateByRSSI -100375ea T RateUpRAM8195A -1003767e T RateDownTrying -100376bc T TryDone -10037754 T RateDownStepRAM8195A -100377f4 T RateDecisionRAM8195A -100378d8 T ArfrRefresh -10037ae0 T H2CHDL_Set_MACID_Config -10037ba4 T PHY_DM_RA_SetRSSI_8195A -10037bd2 t CheckPositive.isra.0 -10037cb4 T ODM_ReadAndConfig_MP_8195A_AGC_TAB -10037d2c T ODM_ReadAndConfig_MP_8195A_PHY_REG -10037da4 T ODM_GetVersion_MP_8195A_PHY_REG -10037da8 T ODM_ReadAndConfig_MP_8195A_PHY_REG_PG -10037ddc T odm_ConfigRFReg_8195A -10037e14 T odm_ConfigRF_RadioA_8195A -10037e24 T odm_ConfigMAC_8195A -10037e28 T odm_ConfigBB_AGC_8195A -10037e38 T odm_ConfigBB_PHY_REG_PG_8195A -10037e66 T odm_ConfigBB_PHY_8195A -10037eae T odm_ConfigBB_TXPWR_LMT_8195A -10037ed4 T ODM_CmnInfoInit -10037fc8 T ODM_CmnInfoHook -1003806c T ODM_CmnInfoPtrArrayHook -1003807c T ODM_CmnInfoUpdate -1003814c T odm_CommonInfoSelfInit -100381c0 T ODM_DMInit -1003820e T odm_CommonInfoSelfUpdate -10038260 T ODM_DMWatchdog -100382cc T PhyDM_Get_Structure -100382f0 T Phydm_CheckAdaptivity -1003831e T Phydm_NHMCounterStatisticsInit -10038394 T Phydm_SetEDCCAThreshold -100383cc T Phydm_MACEDCCAState -1003840a T Phydm_AdaptivityInit -100384e8 T Phydm_Adaptivity -10038608 T ODM_CfoTrackingInit -10038632 T ODM_CfoTracking -10038652 T ODM_ParsingCFO -10038684 T ODM_InitDebugSetting -10038698 T ODM_Write_DIG -10038738 T odm_ForbiddenIGICheck -100387ca T ODM_Write_CCK_CCA_Thres -10038804 T odm_DIGInit -1003889e T odm_DigAbort -100388c0 T odm_DIGbyRSSI_LPS -1003896c T odm_FAThresholdCheck -10038998 T odm_DIG -10038bf8 T odm_FalseAlarmCounterStatistics -10038c24 T odm_CCKPacketDetectionThresh -10038c7c T odm_RxPhyStatus8195A_Parsing -10038d80 T odm_Process_RSSIForDM_8195A -10038ec2 T ODM_PhyStatusQuery_8195A -10038eee T ODM_PhyStatusQuery -10038ef2 T ODM_ConfigRFWithHeaderFile -10038f10 T ODM_ConfigRFWithTxPwrTrackHeaderFile -10038f42 T ODM_ConfigBBWithHeaderFile -10038f6a T ODM_ConfigMACWithHeaderFile -10038f7c T ODM_Read1Byte -10038f82 T ODM_Read4Byte -10038f88 T ODM_Write1Byte -10038f8e T ODM_Write2Byte -10038f94 T ODM_Write4Byte -10038f9a T ODM_SetMACReg -10038fa0 T ODM_SetBBReg -10038fa6 T ODM_GetBBReg -10038fac T ODM_SetRFReg -10038fb2 T ODM_GetRFReg -10038fb8 T ODM_MoveMemory -10038fc2 T ODM_delay_ms -10038fc6 T ODM_delay_us -10038fcc T getSwingIndex -10039024 T odm_TXPowerTrackingThermalMeterInit -100390d6 T odm_TXPowerTrackingInit -100390da T odm_TXPowerTrackingCheckIOT -1003910e T ODM_TXPowerTrackingCheck -1003911c T odm_RSSIMonitorInit -10039124 T ODM_RAPostActionOnAssoc -1003912c T odm_RSSIMonitorCheckIOT -10039200 T odm_RSSIMonitorCheck -10039214 T odm_RateAdaptiveMaskInit -1003923c T ODM_RAStateCheck -1003927e T odm_RefreshRateAdaptiveMaskIOT -100392ce T odm_RefreshRateAdaptiveMask -100392e4 T ODM_Get_Rate_Bitmap -100393d4 t _ReadEfuseInfo8195a -1003949c t rtl8195a_interface_configure -100394d0 t rtl8195a_hal_deinit -1003950c T _InitPowerOn -1003958c t ReadAdapterInfo8195a -100395bc T _InitDriverInfoSize -100395c6 T _InitNetworkType -100395e8 T _InitWMACSetting -10039658 T _InitAdaptiveCtrl -1003969c T _InitEDCA -10039718 T _InitRateFallback -1003975c T _InitRetryFunction -10039788 T _InitOperationMode -100397d0 T _InitInterrupt -10039810 t rtl8195a_hal_init -10039ae8 T rtl8195ab_set_hal_ops -10039bc0 T FillH2CCmd8195A -10039be0 T CheckFwRsvdPageContent -10039be2 T rtl8195a_set_FwRsvdPage_cmd -10039bec T rtl8195a_set_FwMediaStatusRpt_cmd -10039c18 T rtl8195a_set_FwMacIdConfig_cmd -10039cd8 T rtl8195a_set_FwPwrMode_cmd -10039d68 T rtl8195a_download_rsvd_page -1003a070 T rtl8195a_set_FwJoinBssRpt_cmd -1003a07a T rtl8195a_Add_RateATid -1003a0cc T rtw_rpt_h_addr -1003a118 T rtw_txrpt_read8 -1003a136 T rtw_txrpt_write8 -1003a15a T rtw_ratemask_read8 -1003a178 T rtw_ratemask_write8 -1003a19c T ReadRateMask8 -1003a1a6 T WriteRateMask8 -1003a1aa T ReadTxrpt8 -1003a1b4 T WriteTxrpt8 -1003a1b8 T ResetTxrpt -1003a1f0 T PsuseTxrpt -1003a210 T CheckMaxMacidNum -1003a248 T GetMediaStatusCommon -1003a262 T GetTxrptStatistic -1003a318 T rtl8195a_InitHalDm -1003a43c T rtl8195a_HalDmWatchDog -1003a520 T rtl8195a_init_dm_priv -1003a5f8 T rtl8195a_deinit_dm_priv -1003a5fa T MediaConnection -1003a618 T MediaDisconnection -1003a638 T RATaskEnable -1003a662 T SetMediaStatus -1003a6a0 T H2CHDL_JoinInfo -1003a6d8 T H2CHDL_SetRsvdPage -1003a770 T H2CCmdCommon -1003a7b4 T HalPwrSeqCmdParsing -1003a874 T hci_dvobj_init -1003a884 T hci_dvobj_deinit -1003a894 T hci_dvobj_request_irq -1003a8a4 T hci_dvobj_free_irq -1003a8b4 T hci_lxbus_dvobj_init -1003a8f0 T hci_lxbus_dvobj_deinit -1003a930 T hci_lxbus_dvobj_request_irq -1003a984 T hci_lxbus_free_irq -1003a9dc T hci_lxbus_intf_stop -1003aa14 T rtw_interrupt_thread -1003aa88 T lextra_bus_dma_Interrupt -1003aad0 T init_rom_wlan_ram_map -1003aae8 T ODM_ReadAndConfig_MP_8195A_MAC_REG -1003ac44 t CheckPositive.isra.0 -1003ad28 T ODM_ReadAndConfig_MP_8195A_RadioA -1003ada0 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN48 -1003adf0 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN56 -1003ae40 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_TFBGA96 -1003ae90 T ODM_ReadAndConfig_MP_8195A_TXPWR_LMT -1003aec8 T ODM_ReadAndConfig_MP_8195A_TxXtalTrack -1003aef4 T GetDeltaSwingTable_8195A -1003af24 T GetDeltaSwingXtalTable_8195A -1003af34 T ODM_TxXtalTrackSetXtal_8195A -1003af54 T Hal_MPT_CCKTxPowerAdjust -1003b024 T ODM_TxPwrTrackSetPwr_8195A -1003b134 T ConfigureTxpowerTrack_8195A -1003b180 T phy_PathA_IQK_8195A -1003b334 T phy_PathA_RxIQK8195A -1003b6c8 T _PHY_PathAFillIQKMatrix8195A -1003b85e T _PHY_PathBFillIQKMatrix8195A -1003b9da T _PHY_SaveADDARegisters8195A -1003ba0e T _PHY_SaveMACRegisters8195A -1003ba3c T _PHY_ReloadADDARegisters8195A -1003ba70 T _PHY_ReloadMACRegisters8195A -1003baa0 T _PHY_PathADDAOn8195A -1003badc T _PHY_MACSettingCalibration8195A -1003bb24 T _PHY_PIModeSwitch8195A -1003bb60 T phy_SimularityCompare_8195A -1003bc94 T phy_IQCalibrate_8195A -1003c00c T phy_LCCalibrate_8195A -1003c07c T PHY_LCCalibrate_8195A -1003c0dc T PHY_IQCalibrate_8195A -1003c390 T DoIQK_8195A -1003c3ae T ConfigureTxpowerTrack -1003c3c0 T ODM_TXPowerTrackingCallback_ThermalMeter -1003c7cc T ODM_ResetIQKResult -1003c814 T ODM_GetRightChnlPlaceforIQK -1003c868 t __rom_psk_PasswordHash_veneer -1003c878 t __rt_md5_hmac_veneer -1003c888 t __rtw_get_wps_attr_content_veneer -1003c898 t __SpicWaitBusyDoneRtl8195A_veneer -1003c8a8 t __aes_80211_decrypt_veneer -1003c8b8 t __rtw_set_ie_veneer -1003c8c8 t __rt_arc4_crypt_veneer -1003c8d8 t __rom_psk_CalcGTK_veneer -1003c8e8 t __wep_80211_encrypt_veneer -1003c8f8 t __AES_UnWRAP_veneer -1003c908 t ___vsscanf_veneer -1003c918 t __ROM_odm_FalseAlarmCounterStatistics_veneer -1003c928 t __rtw_seccalctkipmic_veneer -1003c938 t __HalI2SIntrCtrlRtl8195a_veneer -1003c948 t __rt_hmac_sha1_veneer -1003c958 t __rtw_secmicsetkey_veneer -1003c968 t __aes_80211_encrypt_veneer -1003c978 t __rtw_secmicappend_veneer -1003c988 t __rtw_get_ie_veneer -1003c998 t __rtw_get_sec_ie_veneer -1003c9a8 t __rtw_set_supported_rate_veneer -1003c9b8 t __wep_80211_decrypt_veneer -1003c9c8 t __prvStrCmp_veneer -1003c9d8 t __rtw_get_rateset_len_veneer -1003c9e8 t __ROM_odm_EVMdbToPercentage_veneer -1003c9f8 t __rtw_parse_wpa2_ie_veneer -1003ca08 t __key_2char2num_veneer -1003ca18 t __rtw_set_fixed_ie_veneer -1003ca28 t __ROM_ODM_CfoTrackingReset_veneer -1003ca38 t __ROM_odm_CfoTrackingFlow_veneer -1003ca48 t __AES_WRAP_veneer -1003ca58 t __phy_CalculateBitShift_veneer -1003ca68 t __rtw_get_wpa_ie_veneer -1003ca78 t __CmdDumpWord_veneer -1003ca88 t __Strtoul_veneer -1003ca98 t __HalI2SWrite32_veneer -1003caa8 t __rtw_ieee802_11_parse_elems_veneer -1003cab8 t __rtw_get_bit_value_from_ieee_value_veneer -1003cac8 t __ROM_odm_QueryRxPwrPercentage_veneer -1003cad8 t __HalI2SRead32_veneer -1003cae8 t __rom_psk_CalcPTK_veneer -1003caf8 t __rt_arc4_init_veneer -1003cb08 t __rtw_parse_wpa_ie_veneer -1003cb18 t __CmdWriteWord_veneer -1003cb28 t __PHY_SetBBReg_8195A_veneer -1003cb38 t __rtw_secgetmic_veneer -1003cb48 t __tkip_80211_decrypt_veneer -1003cb58 t __StrUpr_veneer -1003cb68 t __ROM_odm_SetCrystalCap_veneer -1003cb78 t __rtw_get_wpa2_ie_veneer -1003cb88 t __rtw_get_wps_ie_veneer -1003cb98 t __PHY_QueryBBReg_8195A_veneer -1003cba8 t __HalDelayUs_veneer -1003cbb8 t __ROM_odm_GetDefaultCrytaltalCap_veneer -1003cbc8 t __rtw_check_network_type_veneer -1003cbd8 t __HalI2SClrAllIntrRtl8195a_veneer -1003cbe8 t __tkip_80211_encrypt_veneer -1003cbf8 t __HalCpuClkConfig_veneer -1003cf95 d __func__.21308 -1003d2c1 d __FUNCTION__.14665 -1003d788 d bitrate_table -1003d8b4 d samplerate_table -1003d8c0 d decoder_table -1003d8cc d imdct_s -1003d95c d sfb_8000_short -1003d983 d sfb_32000_short -1003d9ac d is_table -1003d9c8 d rq_table -10045a04 d root_table -10045a20 d sfb_44100_mixed -10045a48 d is_lsf_table -10045ac0 d sflen_table -10045ae0 d sfb_16000_mixed -10045b04 d ca -10045b24 d sfb_44100_short -10045b4b d sfb_44100_long -10045b61 d sfb_48000_mixed -10045b87 d sfb_24000_long -10045ba0 d scale.7384 -10045be8 d sfb_32000_mixed -10045c0e d sfb_16000_short -10045c35 d sfb_8000_long -10045c4b d sfb_22050_mixed -10045c70 d window_l -10045d00 d sfb_48000_long -10045d18 d cs -10045d38 d sfb_24000_mixed -10045d5c d pretab -10045d72 d sfb_48000_short -10045d99 d sfb_22050_short -10045dc0 d sfb_8000_mixed -10045de8 d sfbwidth_table -10045e54 d sfb_24000_short -10045e7b d sfb_32000_long -10045e91 d sfb_22050_long -10045ea8 d window_s -10045ed8 d nsfb_table -10045f20 d hufftab24 -10046528 d hufftab10 -100466c0 d hufftab11 -10046860 d hufftab12 -100469e0 d hufftab13 -10047018 d hufftab3 -10047058 d hufftab15 -10047648 d hufftab16 -10047c90 d hufftab6 -10047d00 d hufftab7 -10047e00 D mad_huff_pair_table -10047f80 d hufftab9 -10048058 d hufftab1 -10048078 d hufftabA -100480e8 d hufftab2 -10048128 d hufftabB -10048168 D mad_huff_quad_table -10048170 d hufftab0 -10048174 d hufftab5 -100481dc d hufftab8 -100482e4 d crc_table -100484e4 d D -10048d64 D mad_timer_zero -100490f7 d __func__.20875 -1004968c d err_to_errno_table -100496d4 D ip_addr_broadcast -100496d8 D ip_addr_any -100496ec D memp_sizes -1004970c D tcp_pcb_lists -1004971c D tcp_state_str -10049748 D tcp_backoff -100497bd D tcp_persist_backoff -100497c4 D ethbroadcast -100497ca D ethzero -100497f9 d __FUNCTION__.9191 -100498bb d __FUNCTION__.9203 -100498ca d dhcp_option_lease_time_one_day -100498f3 d dhcp_option_interface_mtu -100498f5 d dhcp_magic_cookie -10049977 d __FUNCTION__.4595 -10049995 d ucExpectedStackBytes.7044 -100499a9 d CSWTCH.270 -10049a36 d __FUNCTION__.12255 -10049a4c d __FUNCTION__.12259 -10049a64 D osdep_service -10049b88 d __FUNCTION__.12110 -10049c15 d __FUNCTION__.12059 -10049c29 d __FUNCTION__.12121 -10049c44 d __FUNCTION__.12067 -10049c60 d __FUNCTION__.12093 -10049c7f d __FUNCTION__.7295 -10049d88 d PinMap_I2S_RX -10049e68 d PinMap_I2S_TX -10049ec8 d I2SDefaultSetting -10049edc d PinMap_I2S_CLK -10049f3c d PinMap_I2S_WS -10049f9c d __FUNCTION__.8784 -10049ff4 d __FUNCTION__.8600 -1004a001 d __FUNCTION__.8613 -1004a2a6 d __FUNCTION__.8455 -1004a2c8 d __FUNCTION__.8462 -1004a2e3 d __FUNCTION__.8469 -1004a3de d __func__.8808 -1004a3fd d __func__.8818 -1004a41b d __func__.8830 -1004a435 d __func__.8840 -1004a457 d __func__.8835 -1004a820 d __func__.8603 -1004a83a d __func__.8686 -1004a84d d __func__.8825 -1004a866 d __func__.8631 -1004a899 d __FUNCTION__.17777 -1004a8b8 D wlancmds -1004aab0 D rtw_cmd_callback -1004ad3c d RTW_ChannelPlan2G -1004adb4 D WPS_OUI -1004adb8 D RSN_TKIP_CIPHER -1004adbc D MCS_rate_1R -1004adcc D P2P_OUI -1004adf8 D WMM_INFO_OUI -1004adfe D RTW_WPA_OUI -1004ae02 D WMM_PARA_OUI -1004ae08 d RTW_ChannelPlanMap -1004ae20 D null_addr -1004ae26 D WMM_OUI -1004ae2c d wlanevents -1004aeec D zero_bssid -1004af29 d __FUNCTION__.17681 -1004af3f D SNAP_ETH_TYPE_APPLETALK_AARP -1004af41 d __FUNCTION__.17495 -1004af54 D SNAP_ETH_TYPE_IPX -1004af56 D rtw_bridge_tunnel_header -1004af7d D rtw_rfc1042_header -1004af9b d CSWTCH.36 -1004afa7 D ARTHEROS_OUI1 -1004afaa D ARTHEROS_OUI2 -1004afad D REALTEK_OUI -1004afb0 D RALINK_OUI -1004afb3 D MARVELL_OUI -1004afb6 D CISCO_OUI -1004afb9 d rtw_basic_rate_cck -1004afbd D BROADCOM_OUI1 -1004afc0 D BROADCOM_OUI2 -1004afc3 D REALTEK_96B_IE -1004afc9 d rtw_basic_rate_mix -1004afd0 d rtw_basic_rate_ofdm -1004afd3 D AIRGOCAP_OUI -1004afe7 d CSWTCH.66 -1004b000 d CSWTCH.48 -1004b042 d CSWTCH.28 -1004b054 D efuse_map_mask -1004b064 D flash_map_mask -1004b100 d __func__.21107 -1004b446 d CSWTCH.15 -1004b4ca d CSWTCH.17 -1004b539 d CSWTCH.14 -1004b5ce d __FUNCTION__.21257 -1004b5e0 d rtw_private_args -1004b9f7 d __FUNCTION__.21057 -1004ba0a d __FUNCTION__.21294 -1004ba1b d __FUNCTION__.21241 -1004ba2a d __FUNCTION__.21126 -1004ba3a d iw_priv_type_size -1004bb18 d __FUNCTION__.17334 -1004bb2e d __FUNCTION__.17736 -1004bb3e d __FUNCTION__.17760 -1004bb51 d __FUNCTION__.17712 -1004bb60 d __FUNCTION__.17649 -1004bb6e d __FUNCTION__.17661 -1004bf45 d __FUNCTION__.17827 -1004bf5e d __FUNCTION__.17654 -1004bf69 d __FUNCTION__.17615 -1004bf78 d __FUNCTION__.17811 -1004bf8a d __FUNCTION__.17765 -1004bf98 d __FUNCTION__.17724 -1004bfa9 d __FUNCTION__.17637 -1004d34a D CCKFCCTable_Ch14_8195A -1004d35a D CCKFCCTable_8195A -1004d36c D OFDMSwingTable_New -1004d418 D CCKCETable_8195A -1004d42e d CSWTCH.39 -1004d443 d __func__.20571 -1004d464 D hci_ops -1004d489 V Array_MP_8195A_TXPWR_LMT -1004d9fc D xHeapRegions -1004da1c D UartLogRamCmdTable -1004da1c D console_commands_main -1004da2c D console_cmd_wifi_api -1004da9c D console_commands_at -1004db0c D console_commands -1004db2c d UartLogRamCmdTable_end -1004db30 D __data_start__ -1004db30 D wlan_st_name -1004db38 D wifi_st_dhcp -1004db48 D wlan_ap_name -1004db50 D wifi_ap_dhcp -1004db60 D feep_tab -1004db90 D wifi_st_cfg -1004dc00 D wifi_cfg -1004dc08 D tab_txt_rtw_secyrity -1004dc30 D wifi_ap_cfg -1004dc9c D wlan_ap_netifn -1004dca0 D tab_code_rtw_secyrity -1004dcc8 D oversampling -1004dccc D SystemCoreClock -1004dcd0 D error_flag -1004dcd4 d tcp_port -1004dcd8 d iss.7833 -1004dcdc d udp_port -1004dcde D lwip_host_name -1004dcfe d dhcp_server_state_machine -1004dcff d dhcp_recorded_xid -1004dd04 d uxCriticalNesting -1004dd08 d xNextTaskUnblockTime -1004dd0c d seed.12226 -1004dd10 d wakeup_event -1004dd14 d wakelock -1004dd18 d last_wakelock_state -1004dd38 D mlme_sta_tbl -1004dda8 d PMKID_KDE_TYPE.17744 -1004ddb0 V nr_xmitbuff -1004ddb4 V nr_xmitframe -1004ddb8 d P802_1H_OUI -1004ddbb D rtw_adaptivity_mode -1004ddbc D g_user_ap_sta_num -1004ddc0 d rtw_private_handler -1004de04 V max_local_skb_num -1004de08 V max_skb_buf_num -1004de0c D rom_e_rtw_msgp_str_ -1004dfe8 D ARFB_table -1004e027 D TRYING_NECESSARY_idx -1004e03b D DROPING_NECESSARY -1004e04f D PER_RATE_UP -1004e063 D PER_RATE_DOWN -1004e078 V Array_MP_8195A_PHY_REG_PG -1004e108 D Array_MP_8195A_AGC_TAB -1004e318 D Array_MP_8195A_PHY_REG -1004e990 D rtl8195A_card_disable_flow -1004ea30 D rtl8195A_card_enable_flow -1004ead0 D Array_MP_8195A_MAC_REG -1004edd8 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_TFBGA96_8195A -1004edf8 D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_TFBGA96_8195A -1004ee18 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN48_8195A -1004ee36 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN56_8195A -1004ee54 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN48_8195A -1004ee72 D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN56_8195A -1004ee90 D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_TFBGA96_8195A -1004eeb0 D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN56_8195A -1004eece D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN48_8195A -1004eeec D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN56_8195A -1004ef0c D Array_MP_8195A_RadioA -1004f4d4 D gDeltaSwingTableXtal_MP_P_TxXtalTrack_8195A -1004f4f2 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_TFBGA96_8195A -1004f512 D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN48_8195A -1004f530 D .ram.bss$$Base -1004f530 D __bss_start__ -1004f530 D __data_end__ -1004f530 D __ram_image2_text_end__ -1004f530 d skbdata_list -1004f538 V skb_data_pool -10052938 d ucIdleTaskHeap -10052a50 D HalI2SOpSAL -10052a8c D SYSAdapte -10052a90 D PwrAdapter -10052d1c D libc_has_init -10052d1d D print_off -10052d20 d rheap_end -10052d24 D wifi_run_mode -10052d28 D wlan_st_netifn -10052d2c D wifi_autoreconnect -10052d34 d event_init.21315 -10052d38 d sampCntAdd -10052d3c d sampCnt -10052d40 D mp3_serv -10052dc2 D tskreader_enable -10052dc4 D readBuf -10052dc8 D tskmad_enable -10052dcc d bufUnderrunCt -10052dd0 d oldRate -10052dd4 d sampDelCnt -10052dd5 D scan_end -10052dd8 D pbuf_fifo -10052ddc D pi2s -10052de4 D I2sTxSema -10052de8 D rtw_join_status -10052dec D wifi_mode -10052df0 D scan_result_handler_ptr -10052e14 d join_user_data -10052e18 d event_callback_list -10052f98 D paff_array -10053010 D lwip_init_done -10053014 D xnetif -10053094 d s_aliases.7449 -10053098 d s_hostent.7448 -100530ac d s_hostent_addr.7450 -100530b0 D h_errno -100530b4 d s_phostent_addr.7451 -100530bc d select_cb_list -100530c0 d sockets -10053180 d select_cb_ctr -10053184 d mbox -10053188 d tcpip_init_done_arg -1005318c d tcpip_init_done -10053190 d allsystems -10053194 d allrouters -10053198 d igmp_group_list -1005319c D current_header -100531a0 d ip_id -100531a4 D current_iphdr_src -100531a8 D current_iphdr_dest -100531ac D current_netif -100531b0 d str.6812 -100531c0 d reassdatagrams -100531c4 d ip_reass_pbufcount -100531c6 D dhcp_rx_options_given -100531d0 d xid.7762 -100531d4 D dhcp_rx_options_val -100531fc d dns_seqno -10053200 d dns_table -10053660 d dns_servers -10053668 d dns_payload_buffer -1005386c d dns_pcb -10053870 d dns_payload -10053874 d tcpip_tcp_timer_active -10053878 d next_timeout -1005387c D netif_list -10053880 D netif_default -10053884 d netif_num -10053885 D pbuf_free_ooseq_pending -10053888 d raw_pcbs -1005388c D tcp_active_pcbs_changed -10053890 D tcp_ticks -10053894 d tcp_timer -10053898 D tcp_listen_pcbs -1005389c D tcp_active_pcbs -100538a0 d tcp_timer_ctr -100538a4 D tcp_tw_pcbs -100538a8 D tcp_tmp_pcb -100538ac D tcp_bound_pcbs -100538b0 d seqno -100538b4 d tcplen -100538b8 d ackno -100538bc d flags -100538bd d recv_flags -100538c0 d tcphdr -100538c4 d recv_data -100538c8 d inseg -100538dc D tcp_input_pcb -100538e0 D udp_pcbs -100538e4 d etharp_cached_entry -100538e8 d arp_table -100539b0 D lwip_tickless_used -100539b4 d s_timeoutlist -100539e4 d s_nextthread -100539e8 d dhcps_ip_table_semaphore -100539ec d dhcps_send_broadcast_address -100539f0 D dhcps_ip4addr_pool_end -100539f1 d dhcp_client_ethernet_address -10053a04 d dhcps_subnet_broadcast -10053a08 d bound_client_ethernet_address -10053a18 d dhcps_netif -10053a1c d dhcps_local_gateway -10053a20 d ip_table -10053a40 d dhcps_pcb -10053a44 d dhcp_message_total_options_lenth -10053a48 d dhcps_local_address -10053a4c d client_request_ip -10053a50 d dhcps_allocated_client_address -10053a54 D dhcps_ip4addr_pool_start -10053a58 d dhcps_local_mask -10053a5c d dhcps_network_id -10053a60 d dhcp_message_repository -10053a64 D ext_upper -10053a68 d xFreeBytesRemaining -10053a6c d ext_free -10053a70 D ext_lower -10053a74 d pxEnd -10053a78 d xStart -10053a80 d xMinimumEverFreeBytesRemaining -10053a84 d ulTimerCountsForOneTick -10053a88 d ulStoppedTimerCompensation -10053a8c d xMaximumPossibleSuppressedTicks -10053a90 d xPendingReadyList -10053aa4 d uxTopReadyPriority -10053aa8 d uxTasksDeleted -10053aac d xTickCount -10053ab0 d pxReadyTasksLists -10053b8c d pxOverflowDelayedTaskList -10053b90 d xTasksWaitingTermination -10053ba4 d pxDelayedTaskList -10053ba8 d xSchedulerRunning -10053bac d ulTaskSwitchedInTime -10053bb0 D pxCurrentTCB -10053bb4 d uxPendedTicks -10053bb8 d xSuspendedTaskList -10053bcc d uxCurrentNumberOfTasks -10053bd0 d ulDeltaTotalRunTime -10053bd4 d xDelayedTaskList2 -10053be8 d xDelayedTaskList1 -10053bfc d uxTaskNumber -10053c00 d xYieldPending -10053c04 d uxSchedulerSuspended -10053c08 d xNumOfOverflows -10053c0c d pxCurrentTimerList -10053c10 d xActiveTimerList1 -10053c24 d xActiveTimerList2 -10053c38 d xLastTime.5284 -10053c3c d xTimerQueue -10053c40 d pxOverflowTimerList -10053c44 d xTimerTaskHandle -10053c48 d device_mutex -10053c54 d mutex_init -10053c58 d uxSavedInterruptStatus -10053c5c D min_free_heap_size -10053c60 d g_heap_inited -10053c64 d tcm_lock -10053c68 D g_tcm_heap -10053c6c D flashobj -10053c78 D fspic_isinit -10053c7c D WDGAdapter -10053cb8 d last_acquire_wakelock_time -10053d38 D post_sleep_callback -10053db8 D pre_sleep_callback -10053e38 D reserve_pll -10053e3c d sys_sleep_time -10053e40 d hold_wakelock_time -10053ec0 D missing_tick -10053ec4 D Timer2To7HandlerData -10053edc D auto_reconnect_running -10053ee0 D p_wlan_autoreconnect_hdl -10053ee4 D mac_monitor_callback -10053ee8 D mf_list_head -10053eec d pscan_retry_cnt.21430 -10053ef0 D promisc_callback_all -10053ef4 D promisc_sema -10053ef8 D promisc_callback -10053efc D psk_essid -10053f44 D psk_passphrase -10053fc6 D psk_passphrase64 -10054007 D wpa_global_PSK -10054057 d RFC1042_OUI -1005405c d rx_ring_pool -1005613c d stop_report_count.20629 -1005613d D bCheckStateTIMER -10056140 d WifiMcuCmdBitMap.20974 -10056144 D p_wlan_init_done_callback -10056148 D rtw_power_percentage_idx -1005614c D p_wlan_uart_adapter_callback -10056150 D rtw_adaptivity_en -10056154 D p_wlan_mgmt_filter -10056158 D rtw_initmac -1005615c D rtw_adaptivity_th_l2h_ini -10056160 d drvpriv -10056174 D skbbuf_used_num -10056178 V skb_pool -10056330 D skbdata_used_num -10056334 d wrapper_skbbuf_list -1005633c D max_skbdata_used_num -10056340 D max_skbbuf_used_num -10056344 d skb_fail_count -10056348 D timer_table -10056350 D rltk_wlan_info -10056380 d timer_used_num -10056384 D max_timer_used_num -10056388 D Noisy_State -1005638c D pExportWlanIrqSemaphore -10056390 D gDeltaSwingTableXtal_MP_N_TxXtalTrack_8195A -100563ae D .ram.bss$$Limit -100563ae D __bss_end__ -100563b0 B __ram_heap2_start__ +1000897c t mp3_cfg_read +100089b4 t user_init_thrd +100089cc t tskmad +10008be8 t tskreader +10008ff0 T render_sample_block +10009064 T set_dac_sample_rate +100090a8 T connect_close +100090d0 T connect_start +10009170 t fATWS +10009250 T ShowMemInfo +1000927c T main +100092d0 t fATSN +100092dc t fATWI +10009410 t fATOF +10009414 t fATON +10009418 t fATWR +1000943c t fATPN +1000951c t scan_result_handler +10009620 t fATWP +10009668 t fATPA +10009750 t fATSP +10009794 t fATDS +100097bc t fATSW +100097c6 t fATSD +100097d0 t fATST +10009840 T print_hex_dump +10009870 T dump_bytes +10009904 t fATSB +1000993c T print_udp_pcb +100099a8 T print_tcp_pcb +10009a80 t fATLW +10009a90 T RamFifoClose +10009aec T RamFifoInit +10009c40 T RamFifoRead +10009cfc T RamFifoWrite +10009db0 T RamFifoFill +10009ddc T RamFifoFree +10009df0 T RamFifoLen +10009dfc t decode_header +10009f6c T mad_header_init +10009f98 T mad_frame_finish +10009fb0 T mad_header_decode +1000a24c T mad_frame_decode +1000a2d0 T mad_frame_mute +1000a31a T mad_frame_init +1000a338 t III_requantize +1000a3b4 t III_aliasreduce +1000a41c t fastsdct +1000a554 t III_imdct_l +1000a96c t III_imdct_s +1000aac0 t III_overlap +1000aaea t III_freqinver +1000ab34 t III_decode +1000bb50 T mad_layer_III +1000bfb4 T mad_bit_init +1000bfc0 T mad_bit_length +1000bfd8 T mad_bit_nextbyte +1000bfe4 T mad_bit_skip +1000c014 T mad_bit_read +1000c080 T mad_bit_crc +1000c174 t scale +1000c180 t dct32 +1000ca14 t synth_half +1000ce58 t synth_full +1000d2ac T mad_synth_mute +1000d2e4 T mad_synth_init +1000d308 T mad_synth_frame +1000d39c t scale_rational +1000d410 T mad_timer_set +1000d4f8 T mad_stream_init +1000d52a T mad_stream_finish +1000d53c T mad_stream_buffer +1000d550 T mad_stream_sync +1000d598 T mad_stream_errorstr +1000d6f4 t i2s_test_tx_complete +1000d70c T i2sClose +1000d798 T i2sInit +1000d90c T i2sSetRate +1000d994 T i2sPushPWMSamples +1000dafc W __low_level_init +1000db00 T SystemCoreClockUpdate +1000db14 t print_on +1000db2c W console_help +1000db6c T GetArgvRam +1000dc1c T get_eap_phase +1000dc20 T get_eap_method +1000dc24 T eap_autoreconnect_hdl +1000dc28 t wifi_no_network_hdl +1000dc40 t wifi_handshake_done_hdl +1000dc5c t wifi_disconn_hdl +1000dcc4 t wifi_connected_hdl +1000dcf8 T wifi_scan_each_report_hdl +1000de3c T wifi_rx_beacon_hdl +1000de40 T wifi_connect +1000e274 T wifi_disconnect +1000e2a8 T wifi_set_country +1000e2b4 T wifi_off +1000e328 T wifi_set_power_mode +1000e338 T wifi_set_lps_dtim +1000e344 T wifi_get_lps_dtim +1000e350 T wifi_start_ap +1000e43c T wifi_get_setting +1000e4ec T wifi_show_setting +1000e5b0 T wifi_set_network_mode +1000e5c8 T wifi_indication +1000e604 T wifi_reg_event_handler +1000e658 T wifi_unreg_event_handler +1000e69c T init_event_callback_list +1000e6ac T promisc_deinit +1000e6b0 T promisc_recv_func +1000e6b4 T promisc_set +1000e6b8 T is_promisc_enabled +1000e6c4 t get_padapter +1000e6dc T iw_ioctl +1000e6f8 T wext_get_ssid +1000e736 T wext_set_ssid +1000e76a T wext_set_bssid +1000e7b4 T is_broadcast_ether_addr +1000e7d6 T wext_set_auth_param +1000e804 T wext_set_key_ext +1000e904 T wext_get_enc_ext +1000e966 T wext_set_passphrase +1000e99c T wext_get_passphrase +1000e9d4 T wext_enable_powersave +1000e9fe T wext_set_lps_dtim +1000ea14 T wext_get_lps_dtim +1000ea2e T wext_set_mode +1000ea52 T wext_get_mode +1000ea88 T wext_set_ap_ssid +1000eac4 T wext_set_country +1000eae8 T wext_set_channel +1000eb16 T wext_get_channel +1000eb3e T wext_set_scan +1000eb70 T wext_wlan_indicate +1000ecb8 T wext_set_autoreconnect +1000ed08 T wext_set_adaptivity +1000ed30 T wext_set_sta_num +1000ed34 T LwIP_DHCP +1000ee28 t chk_ap_netif_num +1000ee74 t wifi_autoreconnect_hdl_ +1000eec4 T read_wifi_cfg +1000ef0c T write_wifi_cfg +1000ef4c T rtw_security_to_idx +1000ef6c T rtw_security_to_str +1000ef80 T show_wifi_ap_ip +1000efb4 t wifi_run_ap +1000f0c0 T show_wifi_st_ip +1000f0f4 t StartStDHCPClient +1000f170 t wifi_run_st.part.1 +1000f23c T wifi_run +1000f4bc T wifi_init +1000f58c t wifi_autoreconnect_thread_ +1000f5ec T show_wifi_st_cfg +1000f668 T show_wifi_ap_cfg +1000f6e4 T show_wifi_cfg +1000f744 T wifi_close_scan +1000f7c4 t _wifi_scan_done_hdl +1000f844 T api_wifi_scan +1000f9a8 t netconn_recv_data +1000fa78 T netconn_new_with_proto_and_callback +1000fad8 T netconn_delete +1000fafc T netconn_getaddr +1000fb40 T netconn_connect +1000fb80 T netconn_recv_tcp_pbuf +1000fb94 T netconn_recv +1000fc1c T netconn_recved +1000fc48 T netconn_send +1000fc84 T netconn_write_partly +1000fd14 T netconn_gethostbyname +1000fd6c t recv_udp +1000fddc t recv_raw +1000fe60 t setup_tcp +1000fea4 t err_tcp +1000ff3c t do_connected +1000ffa8 t do_writemore +100100a8 t do_close_internal +10010194 t poll_tcp +100101e4 t do_dns_found +10010210 t sent_tcp +1001025e t recv_tcp +100102d8 T do_newconn +10010368 T netconn_alloc +100103d4 T netconn_free +10010400 t netconn_drain +10010490 T do_delconn +1001051c T do_connect +100105b0 T do_send +10010620 T do_recv +10010660 T do_write +1001069a T do_getaddr +10010710 T do_gethostbyname +1001073c T netbuf_delete +1001075c T netbuf_free +10010772 T netbuf_ref +100107ac T lwip_gethostbyname +100107f8 t get_socket +10010818 t alloc_socket +10010888 t event_callback +100109b8 T lwip_socket_init +100109ba T lwip_close +10010a0c T lwip_connect +10010a68 T lwip_recvfrom +10010c20 T lwip_read +10010c34 T lwip_sendto +10010ce0 T lwip_send +10010d58 T lwip_socket +10010dcc T lwip_write +10010dd4 t tcpip_thread +10010e58 T tcpip_input +10010ea0 T tcpip_callback_with_block +10010ef4 T tcpip_timeout +10010f38 T tcpip_apimsg +10010f90 T tcpip_init +10010fd4 t autoip_start_probing +10011020 t autoip_arp_announce +1001104c T autoip_start +100110e0 T autoip_tmr +100111f0 T autoip_arp_reply +10011298 t icmp_send_response.isra.0 +10011308 T icmp_input +1001142c T icmp_dest_unreach +10011436 T icmp_time_exceeded +10011440 t igmp_send +100114e4 t igmp_delaying_member +10011520 t igmp_lookup_group.part.1 +10011558 T igmp_init +10011574 T igmp_report_groups +10011598 T igmp_lookfor_group +100115b8 T igmp_start +100115f4 T igmp_input +100116b8 T igmp_tmr +100116e4 t lwip_standard_chksum +1001173c T inet_chksum_pseudo +100117c2 T inet_chksum +100117ce T inet_chksum_pbuf +10011814 T ip_route +10011850 T ip_input +10011a28 T ip_output_if_opt +10011b7c T ip_output_if +10011b9e T ip_output +10011bd6 T ip4_addr_isbroadcast +10011c0e T ipaddr_aton +10011d24 T ipaddr_addr +10011d3c T ipaddr_ntoa_r +10011dd4 T ipaddr_ntoa +10011de0 t ipfrag_free_pbuf_custom +10011df8 t ip_reass_free_complete_datagram +10011e78 t ip_reass_remove_oldest_datagram +10011eec T ip_reass_tmr +10011f14 T ip_reass +100121c4 T ip_frag +10012330 T lwip_htons +10012336 T lwip_ntohs +1001233c T lwip_htonl +10012340 T lwip_ntohl +10012344 t dhcp_set_state +10012354 t dhcp_option +10012374 t dhcp_option_byte +10012386 t dhcp_option_short +100123a8 t dhcp_option_long +100123ec t dhcp_create_msg +10012540 t dhcp_delete_msg +10012556 t dhcp_check +1001257c t dhcp_bind +10012650 t dhcp_option_trailer +1001267c t dhcp_discover +10012730 t dhcp_reboot +100127d4 t dhcp_option_hostname.isra.1 +10012814 t dhcp_rebind +100128a8 t dhcp_select +10012994 t dhcp_recv +10012d98 T dhcp_arp_reply +10012e18 T dhcp_renew +10012eac T dhcp_release +10012f54 T dhcp_coarse_tmr +10012fe0 T dhcp_fine_tmr +1001307c T dhcp_release_unicast +10013140 T dhcp_stop +10013170 T dhcp_start +10013210 t dns_parse_name +1001322c t dns_recv +100133c0 t dns_send +10013490 t dns_check_entry +10013540 T dns_setserver +10013560 T dns_init +100135b8 T dns_tmr +100135e4 T dns_gethostbyname +10013724 T lwip_init +1001374c T sys_timeout +100137ac T tcp_timer_needed +100137e0 t tcpip_tcp_timer +10013818 T sys_timeouts_init +1001388c t dns_timer +100138a8 t igmp_timer +100138c0 t autoip_timer +100138d8 t dhcp_timer_fine +100138f4 t dhcp_timer_coarse +10013910 t arp_timer +1001392c t ip_reass_timer +10013948 T sys_untimeout +10013990 T sys_timeouts_mbox_fetch +100139f4 T netif_init +100139f8 T netif_set_ipaddr +10013a50 T netif_set_addr +10013a6c T netif_add +10013ad0 T netif_set_gw +10013ad8 T netif_set_netmask +10013ae0 T netif_set_default +10013aec T netif_set_up +10013b22 T netif_set_down +10013b3c t pbuf_free_ooseq_callback +10013b70 t pbuf_pool_is_empty +10013bac T pbuf_alloced_custom +10013c00 T pbuf_header +10013c58 T pbuf_free +10013c98 T pbuf_alloc +10013dbc T pbuf_realloc +10013df0 T pbuf_clen +10013e00 T pbuf_ref +10013e1a T pbuf_cat +10013e36 T pbuf_chain +10013e46 T pbuf_copy +10013ee2 T pbuf_copy_partial +10013f4a T pbuf_coalesce +10013f78 T raw_input +10013ff0 T raw_connect +10013ffa T raw_recv +10014000 T raw_sendto +10014090 T raw_send +10014098 T raw_remove +100140c0 T raw_new +100140f4 t tcp_new_port +10014144 T tcp_init +10014160 T tcp_update_rcv_ann_wnd +10014196 T tcp_recved +100141d0 T tcp_seg_free +100141ea T tcp_segs_free +100141fc T tcp_seg_copy +10014224 T tcp_arg +10014228 T tcp_recv +1001422e T tcp_sent +10014234 T tcp_err +1001423a T tcp_accept +1001423e T tcp_poll +10014248 T tcp_pcb_purge +10014288 T tcp_slowtmr +10014544 T tcp_pcb_remove +100145ac t tcp_close_shutdown +100146dc T tcp_close +100146f4 T tcp_recv_null +10014718 T tcp_process_refused_data +10014778 T tcp_fasttmr +100147f0 T tcp_tmr +10014814 T tcp_shutdown +10014864 T tcp_abandon +100148fc T tcp_abort +10014904 T tcp_next_iss +1001491c T tcp_alloc +10014a3c T tcp_new +10014a42 T tcp_eff_send_mss +10014a60 T tcp_connect +10014bbc t tcp_oos_insert_segment +10014c3c t tcp_receive +10015414 t tcp_parseopt.isra.0 +10015498 T tcp_input +10015cf0 t tcp_pbuf_prealloc +10015d44 t tcp_create_segment +10015e0c t tcp_output_alloc_header.constprop.0 +10015e76 T tcp_write +100161c6 T tcp_enqueue_flags +1001626e T tcp_send_fin +100162b6 T tcp_send_empty_ack +10016314 T tcp_output +1001658c T tcp_rst +10016624 T tcp_rexmit_rto +10016652 T tcp_rexmit +100166a2 T tcp_rexmit_fast +100166f8 T tcp_keepalive +1001674a T tcp_zero_window_probe +100167f4 T udp_init +10016810 T udp_input +10016998 T udp_bind +10016a40 T udp_sendto_if +10016b3e T udp_sendto +10016b74 T udp_send +10016b80 T udp_connect +10016bc8 T udp_disconnect +10016bd8 T udp_recv +10016be0 T udp_remove +10016c08 T udp_new +10016c2c t etharp_free_entry +10016c5c t etharp_find_entry +10016d38 t etharp_send_ip +10016d6c T etharp_tmr +10016dac T etharp_cleanup_netif +10016dd4 T etharp_raw +10016e90 T etharp_request +10016ebc t etharp_output_to_arp_index +10016f04 T etharp_query +10017008 T etharp_output +10017100 T ethernet_input +100172f0 t low_level_output +1001734c t arp_timer +10017368 T ethernetif_recv +100173e0 T ethernetif_init +10017424 T lwip_POST_SLEEP_PROCESSING +10017440 T rltk_wlan_set_netif_info +10017460 T rltk_wlan_send +100174f4 T rltk_wlan_recv +10017560 T netif_is_valid_IP +10017594 T netif_get_idx +100175ac T netif_rx +100175bc T netif_post_sleep_processing +100175c0 T sys_mbox_new +100175da T sys_mbox_free +100175ee T sys_mbox_post +1001760e T sys_mbox_trypost +10017630 T sys_arch_mbox_fetch +1001767a T sys_arch_mbox_tryfetch +1001769a T sys_mbox_valid +100176a4 T sys_mbox_set_invalid +100176aa T sys_sem_new +100176e6 T sys_arch_sem_wait +10017726 T sys_sem_signal +10017732 T sys_sem_free +10017738 T sys_sem_valid +10017742 T sys_sem_set_invalid +10017748 T sys_init +1001776c T sys_thread_new_tcm +100177d4 T sys_arch_protect +100177de T sys_arch_unprotect +100177e4 t mark_ip_in_table +10017828 t dhcps_initialize_message +100178d8 t add_offer_options +100179c8 T dhcps_handle_state_machine_change +10017a98 t dhcps_receive_udp_packet_handler +10017d64 T dhcps_deinit +10017d8c T dhcps_init +10017e94 t prvInsertBlockIntoFreeList +10017edc t vPortDefineHeapRegions.constprop.1 +10017f7c T pvPortMalloc +1001805c T __vPortFree +100180a0 T vPortSetExtFree +100180bc T vPortFree +100180ec T xPortGetFreeHeapSize +100180f8 t prvPortStartFirstTask +10018118 T pxPortInitialiseStack +10018134 T vPortSVCHandler +10018154 t pxCurrentTCBConst2 +10018158 T vPortYield +10018170 T ulPortSetInterruptMask +10018180 t prvTaskExitError +10018188 T vPortEnterCritical +100181a4 T vPortClearInterruptMask +100181ac T vPortExitCritical +100181c0 T xPortPendSVHandler +10018200 t pxCurrentTCBConst +10018204 T xPortSysTickHandler +10018228 W vPortSuppressTicksAndSleep +10018340 W vPortSetupTimerInterrupt +10018390 T xPortStartScheduler +100183c0 T vApplicationIdleHook +100183c4 T vApplicationStackOverflowHook +100183e0 T osKernelSysTick +100183e4 T vListInitialise +100183fa T vListInitialiseItem +10018400 T vListInsertEnd +10018418 T vListInsert +10018448 T uxListRemove +10018468 t prvCopyDataToQueue +100184d2 t prvCopyDataFromQueue +100184fa t prvUnlockQueue +10018562 T xQueueGenericReset +100185bc T xQueueGenericCreate +10018608 T xQueueCreateCountingSemaphore +1001861a T xQueueGenericSend +100186f8 T xQueueCreateMutex +10018742 T xQueueGenericSendFromISR +100187a6 T xQueueGenericReceive +100188aa T uxQueueMessagesWaiting +100188bc T vQueueDelete +100188d2 T vQueueWaitForMessageRestricted +1001890c t prvGenerateRunTimeOfPeroid +1001894c t prvGetExpectedIdleTime +1001897c t prvListTaskWithinSingleList +10018a64 t prvResetNextTaskUnblockTime +10018a88 t prvAddCurrentTaskToDelayedList +10018ad8 T xTaskGenericCreate +10018c8c T vTaskDelete +10018d2c T uxTaskPriorityGet +10018d48 T vTaskPrioritySet +10018e00 T vTaskStartScheduler +10018e58 T vTaskSuspendAll +10018e68 T xTaskGetTickCount +10018e80 T pcTaskGetTaskName +10018e90 T vTaskStepTick +10018ea0 T xTaskIncrementTick +10019020 T xTaskResumeAll +100190e8 T vTaskDelay +10019138 t prvIdleTask +100191c0 T uxTaskGetSystemState +10019270 T vTaskSwitchContext +10019328 T vTaskPlaceOnEventList +10019384 T vTaskPlaceOnEventListRestricted +100193c8 T xTaskRemoveFromEventList +10019438 T vTaskSetTimeOutState +10019450 T xTaskCheckForTimeOut +1001949c T vTaskMissedYield +100194a8 T eTaskConfirmSleepModeStatus +100194c8 T xTaskGetSchedulerState +100194e8 T vTaskPriorityInherit +1001957c T xTaskPriorityDisinherit +100195ec T sprintf_pcTaskName +1001960c T vTaskList +100196bc T vTaskGetRunTimeStats +1001977c T pvTaskIncrementMutexHeldCount +10019794 T vTaskGetCurrentTCB +100197a0 t prvCheckForValidListAndQueue +100197ec t prvInsertTimerInActiveList +10019828 T xTimerCreateTimerTask +10019864 T xTimerCreate +100198a0 T xTimerGenericCommand +10019934 t prvSwitchTimerLists +100199a4 t prvTimerTask +10019b08 T xTimerIsTimerActive +10019b20 t device_mutex_init +10019b64 T device_mutex_lock +10019b94 T device_mutex_unlock +10019bb0 t _freertos_systime_to_sec +10019bba t _freertos_ms_to_systime +10019bbc t _freertos_sec_to_systime +10019bc4 t _freertos_usleep_os +10019bc6 t _freertos_ATOMIC_SET +10019bca t _freertos_ATOMIC_READ +10019bce t _freertos_modular64 +10019c42 t _freertos_thread_enter +10019c44 t _freertos_enter_critical +10019c48 t _freertos_exit_critical +10019c4c t _freertos_ATOMIC_SUB_RETURN +10019c64 t _freertos_ATOMIC_DEC_RETURN +10019c7a t _freertos_ATOMIC_ADD_RETURN +10019c92 t _freertos_ATOMIC_INC_RETURN +10019ca8 t _freertos_ATOMIC_SUB +10019cc0 t _freertos_ATOMIC_DEC +10019cc6 t _freertos_ATOMIC_ADD +10019cde t _freertos_ATOMIC_INC +10019ce4 t _freertos_enter_critical_from_isr +10019cf4 T _freertos_malloc +10019cf8 T _freertos_zmalloc +10019d10 t _freertos_memset +10019d14 T _freertos_mfree +10019d18 t _freertos_get_current_time +10019d1c t _freertos_spinunlock_irqsave +10019d32 t _freertos_spinunlock +10019d3e t _freertos_mutex_put +10019d42 T _freertos_wakeup_task +10019d48 t _freertos_up_sema +10019d4c t _freertos_exit_critical_mutex +10019d58 T _freertos_timerCreate +10019d5c T _freertos_timerDelete +10019d70 T _freertos_timerStop +10019d84 T _freertos_timerChangePeriod +10019d9e T _freertos_timerIsTimerActive +10019da2 T _freertos_acquire_wakelock +10019da8 T _freertos_release_wakelock +10019dae T _freertos_get_scheduler_state +10019dce t _freertos_thread_exit +10019dd4 t _freertos_GetFreeHeapSize +10019dd8 t _freertos_yield_os +10019ddc t _freertos_udelay_os +10019de0 t _freertos_mdelay_os +10019de4 t _freertos_deinit_xqueue +10019dfe t _freertos_spinlock_free +10019e10 t _freertos_mutex_free +10019e14 t _freertos_free_sema +10019e18 t _freertos_push_to_xqueue +10019e40 t _freertos_pop_from_xqueue +10019e68 t _freertos_down_sema +10019e8a t _freertos_init_xqueue +10019ea4 t _freertos_spinlock_irqsave +10019ee0 t _freertos_spinlock +10019f18 t _freertos_enter_critical_mutex +10019f50 t _freertos_mutex_get +10019f88 t _freertos_spinlock_init +10019f96 t _freertos_mutex_init +10019f9c t _freertos_exit_critical_from_isr +10019fa8 t _freertos_up_sema_from_isr +10019fd0 t _freertos_init_sema +10019fe0 t _freertos_create_task +1001a058 t _freertos_memcmp +1001a066 t _freertos_memcpy +1001a06c t _freertos_delete_task +1001a0b8 t _freertos_mutex_get_timeout +1001a0f4 t _freertos_systime_to_ms +1001a0f6 t _freertos_msleep_os +1001a0fa T save_and_cli +1001a0fe T restore_flags +1001a102 T cli +1001a108 T _freertos_arc4random +1001a138 t _freertos_get_random_bytes +1001a176 T RtlInitSema +1001a184 T RtlUpSemaFromISR +1001a1a4 T RtlDownSema +1001a1b8 T RtlUdelayOS +1001a1bc T _htons +1001a1c2 T _ntohs +1001a1c8 T _rtw_zvmalloc +1001a1e8 T _rtw_vmfree +1001a20c T _rtw_malloc +1001a21c T _rtw_zmalloc +1001a22c T _rtw_mfree +1001a23c T deinit_mem_monitor +1001a23e T rtw_vmfree +1001a242 T rtw_mfree +1001a248 T rtw_memcpy +1001a258 T rtw_memcmp +1001a268 T rtw_memset +1001a278 T rtw_init_listhead +1001a27e T rtw_is_list_empty +1001a288 T rtw_list_insert_head +1001a294 T rtw_list_insert_tail +1001a2a0 T rtw_list_delete +1001a2b0 T rtw_init_sema +1001a2c0 T rtw_free_sema +1001a2d0 T rtw_up_sema +1001a2e0 T rtw_up_sema_from_isr +1001a2f0 T rtw_down_timeout_sema +1001a300 T rtw_down_sema +1001a314 T rtw_mutex_init +1001a324 T rtw_mutex_free +1001a334 T rtw_mutex_put +1001a344 T rtw_mutex_get_timeout +1001a358 T rtw_enter_critical_from_isr +1001a368 T rtw_enter_critical +1001a36c T rtw_exit_critical_from_isr +1001a37c T rtw_exit_critical +1001a380 T rtw_enter_critical_mutex +1001a390 T rtw_exit_critical_mutex +1001a3a0 T rtw_queue_empty +1001a3aa T rtw_end_of_queue_search +1001a3b4 T rtw_spinlock_init +1001a3c4 T rtw_init_queue +1001a3d0 T rtw_spinlock_free +1001a3e0 T rtw_spin_lock +1001a3f0 T rtw_enter_critical_bh +1001a3f4 T rtw_spin_unlock +1001a404 T rtw_exit_critical_bh +1001a408 T rtw_get_current_time +1001a418 T rtw_systime_to_ms +1001a42c T rtw_systime_to_sec +1001a440 T rtw_ms_to_systime +1001a454 T rtw_sec_to_systime +1001a468 T rtw_get_passing_time_ms +1001a47c T rtw_msleep_os +1001a48c T rtw_usleep_os +1001a49c T rtw_mdelay_os +1001a4ac T rtw_udelay_os +1001a4bc T ATOMIC_SET +1001a4cc T ATOMIC_INC +1001a4dc T ATOMIC_INC_RETURN +1001a4f0 T ATOMIC_DEC_RETURN +1001a504 T ATOMIC_DEC_AND_TEST +1001a514 T rtw_modular64 +1001a530 T rtw_get_random_bytes +1001a544 T rtw_getFreeHeapSize +1001a554 T init_mem_monitor +1001a564 T add_mem_usage +1001a598 T rtw_zvmalloc +1001a5b8 T rtw_malloc +1001a5d8 T rtw_zmalloc +1001a5f8 T rtw_netif_queue_stopped +1001a5fc T rtw_netif_wake_queue +1001a5fe T rtw_netif_start_queue +1001a600 T rtw_netif_stop_queue +1001a602 T flush_signals_thread +1001a604 T rtw_acquire_wakelock +1001a614 T rtw_release_wakelock +1001a624 T rtw_create_task +1001a640 T rtw_delete_task +1001a650 T rtw_wakeup_task +1001a660 T rtw_timerCreate +1001a67c T rtw_timerDelete +1001a690 T rtw_timerIsTimerActive +1001a6a4 T rtw_timerStop +1001a6b8 T rtw_timerChangePeriod +1001a6cc T rtw_thread_enter +1001a6dc T rtw_thread_exit +1001a6ec T tcm_heap_free +1001a76c T tcm_heap_init +1001a7bc T tcm_heap_freeSpace +1001a7fc T tcm_heap_malloc +1001a89c T tcm_heap_calloc +1001a8b4 T flash_init +1001a950 T flash_turnon +1001a968 T flash_erase_sector +1001a994 T flash_stream_read +1001aa64 T flash_stream_write +1001abbc T i2s_init +1001ac94 T i2s_set_dma_buffer +1001ace6 T i2s_tx_irq_handler +1001acec T i2s_set_param +1001ad20 T i2s_deinit +1001ad24 T i2s_enable +1001ad28 T i2s_disable +1001ad2c W pinmap_merge +1001ad68 W pinmap_find_peripheral +1001ad80 W pinmap_peripheral +1001adb8 T sleep_ex_selective +1001adcc T deepsleep_ex +1001adf0 T us_ticker_read +1001ae1c T En32KCalibration +1001aeb0 T WDGInitial +1001af3c T WDGStart +1001af54 T WDGRefresh +1001af70 T I2SISRHandle +1001b02c T RtkI2SDeInit +1001b10c T RtkI2SEnable +1001b148 T RtkI2SDisable +1001b184 T RtkI2SLoadDefault +1001b1e8 T HalI2SOpInit +1001b264 T RtkI2SInit +1001b428 T HalI2SInit +1001b466 T HalI2SDisable +1001b48c T HalI2SEnable +1001b4b0 T HalI2SDeInit +1001b508 T HalTimerOpInit_Patch +1001b544 T freertos_ready_to_sleep +1001b554 T freertos_pre_sleep_processing +1001b618 T freertos_post_sleep_processing +1001b63c T acquire_wakelock +1001b67c T release_wakelock +1001b6d8 T get_wakelock_status +1001b6e4 T HalI2SInitRtl8195a_Patch +1001b7e6 T HalI2SSetRateRtl8195a +1001b82c T HalI2SSetWordLenRtl8195a +1001b854 T HalI2SSetChNumRtl8195a +1001b87c T HalI2SSetPageNumRtl8195a +1001b8a4 T HalI2SSetPageSizeRtl8195a +1001b8ce T HalI2SSetDMABufRtl8195a +1001b938 T HalI2SGetTxPageRtl8195a +1001b958 T HalI2SPageSendRtl8195a +1001b9a4 T HalI2SClearAllOwnBitRtl8195a +1001b9d8 T HalI2SDMACtrlRtl8195a +1001b9dc T HalTimerIrq2To7Handle_Patch +1001ba30 T HalTimerIrqRegisterRtl8195a_Patch +1001baac T HalTimerIrqUnRegisterRtl8195a_Patch +1001bb24 T HalTimerDeInitRtl8195a_Patch +1001bb58 T HalTimerReadCountRtl8195a_Patch +1001bb70 T HalTimerReLoadRtl8195a_Patch +1001bba4 T HalTimerInitRtl8195a_Patch +1001bc78 T HalTimerIrqEnRtl8195a +1001bc8c T HalTimerEnRtl8195a_Patch +1001bca0 T HalTimerDisRtl8195a_Patch +1001bcb4 t rtw_ht_operation_update +1001bd66 t associated_clients_update.part.11 +1001bda2 T chk_sta_is_alive +1001bde0 T add_RATid +1001bee8 T update_sta_info_apmode +1001bfa0 T update_beacon +1001c260 T rtw_check_beacon_data +1001c960 T associated_clients_update +1001c96a T bss_cap_update_on_sta_join +1001cb1a T bss_cap_update_on_sta_leave +1001cc16 T ap_free_sta +1001ccc8 T expire_timeout_chk +1001ce04 T rtw_sta_flush +1001ce88 T free_mlme_ap_info +1001ced4 T sta_info_update +1001cf10 T ap_sta_info_defer_update +1001cf40 T start_ap_mode +1001cf80 T init_mlme_ap_info +1001cf96 T stop_ap_mode +1001cfe4 T rtw_generate_bcn_ie +1001d308 T set_hidden_ssid +1001d360 T _rtw_init_evt_priv +1001d372 T _rtw_free_cmd_priv +1001d37c T _rtw_enqueue_cmd +1001d3a8 T _rtw_dequeue_cmd +1001d3dc T _rtw_observequeue_cmd +1001d3f0 T rtw_init_cmd_priv +1001d3fa T rtw_init_evt_priv +1001d3fe T rtw_free_evt_priv +1001d400 T rtw_free_cmd_priv +1001d404 T rtw_cmd_filter +1001d422 T rtw_free_cmd_obj +1001d44c T rtw_enqueue_cmd +1001d4a2 T rtw_set_channel_plan_cmd_callback +1001d4ba T rtw_survey_cmd_callback +1001d4d6 T rtw_disassoc_cmd_callback +1001d506 T rtw_joinbss_cmd_callback +1001d522 T rtw_setstaKey_cmdrsp_callback +1001d53c T rtw_cmd_thread +1001d698 T rtw_joinbss_cmd +1001d942 T rtw_disassoc_cmd +1001d990 T rtw_setstakey_cmd +1001da80 T rtw_clearstakey_cmd +1001db20 T rtw_dynamic_chk_wk_cmd +1001db72 T rtw_set_chplan_cmd +1001dbf2 T dynamic_chk_wk_hdl +1001dcba T lps_ctrl_wk_hdl +1001dd1e T rtw_lps_ctrl_wk_cmd +1001dd88 T rtw_sitesurvey_cmd +1001de50 T rpt_timer_setting_wk_hdl +1001de64 T rtw_ps_cmd +1001dec0 T rtw_chk_hi_queue_cmd +1001df14 T rtw_drvextra_cmd_hdl +1001dff0 t rtw_free_mlme_ie_data +1001e008 T rtw_init_mlme_timer +1001e064 T rtw_del_mlme_timer +1001e084 T reconnect_timer_hdl +1001e124 T _rtw_init_mlme_priv +1001e1a6 T rtw_mfree_mlme_priv_lock +1001e1c2 T rtw_free_mlme_priv_ie_data +1001e1fa T _rtw_free_mlme_priv +1001e222 T _rtw_alloc_network +1001e272 T _rtw_free_network +1001e2d2 T _rtw_free_network_nolock +1001e2f8 T _rtw_find_network +1001e334 T _rtw_free_network_queue +1001e37c T rtw_if_up +1001e39c T rtw_get_capability_from_ie +1001e3a0 T rtw_get_capability +1001e3ba T rtw_get_beacon_interval_from_ie +1001e3be T rtw_init_mlme_priv +1001e3d6 T rtw_free_mlme_priv +1001e3da T rtw_free_network_queue +1001e3de T rtw_is_same_ibss +1001e3f4 T is_same_network +1001e458 T update_network +1001e4f2 T rtw_update_scanned_network +1001e604 T rtw_add_network +1001e642 T rtw_survey_event_callback +1001e6ee T rtw_dummy_event_callback +1001e6f0 T rtw_free_assoc_resources +1001e7ba T rtw_indicate_connect +1001e7ca T rtw_indicate_disconnect +1001e7ec T rtw_indicate_scan_done +1001e7f0 T rtw_joinbss_event_callback +1001e80e T search_max_mac_id +1001e856 T rtw_stassoc_hw_rpt +1001e88e T rtw_stassoc_event_callback +1001e8bc T rtw_stadel_event_callback +1001e962 T _rtw_join_timeout_handler +1001e9ec T rtw_join_timeout_handler +1001ea44 T rtw_scan_timeout_handler +1001ea74 T _rtw_scan_timeout_handler +1001ea78 T rtw_dynamic_check_timer_handlder +1001ead0 T _dynamic_check_timer_handlder +1001eb14 T rtw_select_and_join_from_scanned_queue +1001ebe8 T rtw_surveydone_event_callback +1001ed00 T rtw_set_auth +1001ed50 T rtw_set_key +1001ee12 T rtw_restruct_wmm_ie +1001ee78 T rtw_restruct_sec_ie +1001eee4 T rtw_joinbss_reset +1001eef4 T rtw_restructure_ht_ie +1001efd4 T rtw_update_ht_cap +1001f05e T rtw_joinbss_event_prehandle +1001f28a T rtw_linked_check +1001f2a6 T rtw_buddy_adapter_up +1001f2de T check_buddy_fwstate +1001f2fc t get_da +1001f31c t get_sa +1001f346 T OnAction +1001f358 T DoReserved +1001f35c t _mgt_dispatcher.isra.2 +1001f3a8 T rtw_is_channel_set_contains_channel +1001f3ca T init_hw_mlme_ext +1001f3e0 T init_channel_set +1001f478 T free_mlme_ext_priv +1001f4a0 T mgt_dispatcher +1001f528 T alloc_mgtxmitframe +1001f560 T update_mgnt_tx_rate +1001f566 T update_mgntframe_attrib +1001f5c2 T rtw_build_mgnt_frame +1001f618 T dump_mgntframe +1001f632 T rtw_send_mgnt +1001f650 t issue_action_BSSCoexistPacket +1001f85c T update_hidden_ssid +1001f8b0 T issue_beacon +1001fac8 T issue_probersp +1001fd58 T OnProbeReq +1001fe20 T issue_probereq +1001ffd8 T issue_auth +10020240 T OnAuth +100204e4 T issue_asocrsp +10020758 T issue_assocreq +10020a94 T issue_nulldata +10020b7e T issue_qos_nulldata +10020cb0 T issue_deauth +10020d98 T issue_action_BA +10021014 T OnAction_back +100210e2 T collect_bss_info +10021314 T start_clnt_auth +100213a4 T start_clnt_assoc +100213d8 T OnAuthClient +100214b8 T report_scan_result_one +10021678 T add_site_survey +100217fe T report_survey_event +10021a3c T OnProbeRsp +10021a70 T report_surveydone_event +10021ad4 T report_join_res +10021b44 T OnAssocRsp +10021c90 T report_del_sta_event +10021d22 T receive_disconnect +10021d78 T OnBeacon +10021f00 T OnDeAuth +10022058 T OnDisassoc +100221c8 T report_add_sta_event +1002223c T OnAssocReq +1002282c T rtw_port_switch_chk +100228b0 T update_sta_info +10022930 T mlmeext_sta_del_event_callback +100229b0 T _linked_info_dump +10022a12 T _linked_rx_signal_strehgth_display +10022a4c T linked_status_chk +10022cc0 T survey_timer_hdl +10022da0 T _survey_timer_hdl +10022da4 T link_timer_hdl +10022e22 T _link_timer_hdl +10022e26 T addba_timer_hdl +10022e46 T NULL_hdl +10022e4a T setopmode_hdl +10022e90 T disconnect_hdl +10022f3c T setauth_hdl +10022f4c T setkey_hdl +10022fa4 T set_stakey_hdl +100230a8 T set_tx_beacon_cmd +1002311c T mlme_evt_hdl +10023168 T tx_beacon_hdl +10023222 T check_buddy_mlmeinfo_state +1002323c T site_survey +1002340c T sitesurvey_cmd_hdl +1002351a T concurrent_chk_start_clnt_join +100235b0 T start_clnt_join +10023684 T join_cmd_hdl +100237a8 T concurrent_chk_joinbss_done +10023970 T mlmeext_joinbss_event_callback +10023aac T set_chplan_hdl +10023ac8 T init_mlme_ext_timer +10023b24 T init_mlme_ext_priv +10023c60 t get_hdr_bssid +10023c88 t filter_packet +10023d10 t promisc_get_encrypt +10023d62 t promisc_info_get +10023e06 t promisc_set_enable +10023ea2 T _promisc_deinit +10023ef4 T _promisc_recv_func +10024440 T _promisc_set +100244d0 T _is_promisc_enabled +100244e8 t SetEAPOL_KEYIV +10024586 t ToDrv_SetPTK +1002462e t Message_ReplayCounter_OC2LI.isra.2 +1002465c t Message_SmallerEqualReplayCounter.isra.4 +1002468e t Message_setReplayCounter.isra.5 +100246ac t INCLargeInteger +100246cc t INCOctet16_INTEGER +10024714 t INCOctet32_INTEGER +10024774 t ToDrv_DisconnectSTA +10024838 t CheckMIC.constprop.14 +100248b8 t CalcMIC.constprop.15 +10024918 T DecWPA2KeyData +100249cc T DecGTK +10024a88 T ToDrv_SetGTK +10024b18 T init_wpa_sta_info +10024c04 T SendEAPOL +100252bc T ClientSendEAPOL +100257a4 t ResendTimeout +1002582c T EAPOLKeyRecvd +100259a4 T ClientEAPOLKeyRecvd +10025d64 T psk_derive +10025e18 T psk_init +10025f08 T psk_strip_rsn_pairwise +10025f88 T psk_strip_wpa_pairwise +10026008 T tkip_send_mic_failure_report +1002617c T pwr_state_check_handler +10026180 T ips_enter +10026228 T ips_leave +10026340 T rtw_pwr_unassociated_idle +1002638a T rtw_ps_processor +100263e2 T PS_RDY_CHECK +1002644a T rtw_set_ps_mode +100264b8 T LPS_RF_ON_check +1002650e T LPS_Enter +1002657c T LPS_Leave +100265b8 T LeaveAllPowerSaveMode +100265c8 T rtw_init_pwrctrl_priv +1002669c T rtw_free_pwrctrl_priv +100266b0 T _rtw_pwr_wakeup +1002678c T rtw_pm_set_lps +100267d4 T rtw_pm_set_ips +10026818 T rtw_pm_set_tdma_param +10026834 T rtw_pm_set_lps_dtim +10026840 T rtw_pm_get_lps_dtim +1002684c t recvframe_pull +1002686e t recvframe_pull_tail +10026890 T rtw_signal_stat_timer_hdl +1002692e T _rtw_init_sta_recv_priv +1002694c T _rtw_init_recv_priv +100269f4 T rtw_mfree_recv_priv_lock +10026a28 T _rtw_alloc_recvframe +10026a5a T rtw_alloc_recvframe +10026a80 T rtw_free_recvframe +10026b1c T _rtw_enqueue_recvframe +10026b48 T rtw_enqueue_recvframe +10026b72 T rtw_free_recvframe_queue +10026baa T rtw_free_uc_swdec_pending_queue +10026bd2 T _rtw_free_recv_priv +10026c02 T rtw_free_buf_pending_queue +10026c06 T recvframe_chkmic +10026d04 T decryptor +10026da0 T portctrl +10026e16 T recv_decache +10026e44 T process_pwrbit_data +10026e84 T process_wmmps_data +10026f0c T count_rx_stats +10026f80 T sta2sta_data_frame +100270bc T ap2sta_data_frame +100271e8 T sta2ap_data_frame +10027270 T validate_recv_ctrl_frame +1002740a T validate_recv_data_frame +10027664 T wlanhdr_to_ethhdr +100277a0 T recvframe_defrag +1002784a T recvframe_chk_defrag +10027900 T validate_recv_mgnt_frame +1002793c T validate_recv_frame +10027a04 T recv_indicatepkt_reorder +10027a26 T process_recv_indicatepkts +10027a7e T recv_func_prehandle +10027aa6 T recv_func_posthandle +10027b0a T recv_func +10027b94 T rtw_recv_entry +10027bc4 T rtw_recv_tasklet +10027c1c T rtw_wep_encrypt +10027c62 T rtw_wep_decrypt +10027ca8 T rtw_tkip_encrypt +10027d14 T rtw_tkip_decrypt +10027d80 T rtw_aes_encrypt +10027dec T rtw_aes_decrypt +10027e50 T rtw_init_sec_priv +10027ec2 T rtw_free_sec_priv +10027ee2 t wifi_mac_hash +10027f0c T _addba_timer_hdl +10027f10 T _rtw_init_stainfo +10027f8a T _rtw_init_sta_priv +10028072 T _rtw_free_sta_xmit_priv_lock +1002809e T rtw_mfree_stainfo +100280ca T rtw_mfree_sta_priv_lock +10028100 T _rtw_free_sta_priv +10028120 T init_addba_retry_timer +10028148 T rtw_alloc_stainfo +10028212 T rtw_free_stainfo +100283b4 T rtw_get_stainfo +10028430 T rtw_init_bcmc_stainfo +10028460 T rtw_get_bcmc_stainfo +10028484 T rtw_free_all_stainfo +100284de T cckrates_included +10028506 T cckratesonly_included +1002852e T networktype_to_raid_ex +1002858c T judge_network_type +100285dc T ratetbl_val_2wifirate +100285f0 T is_basicrate +1002861c T ratetbl2rateset +10028660 T get_rate_set +1002868a T UpdateBrateTbl +100286bc T UpdateBrateTblForSoftAP +100286f0 T Save_DM_Func_Flag +10028706 T Restore_DM_Func_Flag +1002871c T Switch_DM_Func +10028738 T Set_MSR +1002875c T set_opmode +100287a0 T SelectChannel +100287d4 T SetBWMode +10028810 T set_channel_bwmode +10028866 T get_my_bssid +1002886a T get_beacon_interval +10028888 T is_client_associated_to_ap +100288a0 T is_client_associated_to_ibss +100288bc T is_IBSS_empty +100288de T decide_wait_for_beacon_timeout +100288fa T invalidate_cam_all +10028902 T write_cam +10028978 T clear_cam_entry +100289a6 T flush_all_cam_entry +10028a04 T WMM_param_handler +10028a2a T WMMOnAssocRsp +10028af8 T HT_caps_handler +10028b98 T HT_info_handler +10028bbc T HTOnAssocRsp +10028bf4 T ERP_IE_handler +10028c10 T VCS_update +10028c62 T rtw_check_bcn_info +10028e72 T update_beacon_info +10028ec8 T is_ap_in_tkip +10028f40 T wifirate2_ratetbl_inx +10028fac T update_basic_rate +10028fda T update_supported_rate +10029004 T update_MCS_rate +10029010 T support_short_GI +1002903e T get_highest_rate_idx +10029058 T Update_RA_Entry +10029060 T set_sta_rate +10029068 T update_tx_basic_rate +100290c0 T check_assoc_AP +100291b4 T update_IOT_info +10029212 T update_capinfo +10029290 T update_wireless_mode +10029330 T update_bmc_sta_support_rate +10029358 T update_TSF +1002936a T correct_TSF +10029372 t _init_txservq +10029388 t set_qos +100293d8 T _rtw_init_sta_xmit_priv +1002941e T rtw_mfree_xmit_priv_lock +1002946a T qos_acm +100294a4 T xmitframe_addmic +10029602 T xmitframe_swencrypt +1002962e T rtw_make_wlanhdr +1002980e T rtw_txframes_pending +1002984a T rtw_txframes_sta_ac_pending +10029880 T rtw_txframes_update_attrib_vcs_info +10029920 T rtw_put_snap +10029964 T rtw_update_protection +100299aa T rtw_count_tx_stats +100299fa T rtw_free_xmitbuf_ext +10029a3c T rtw_alloc_xmitframe +10029a94 T rtw_free_xmitframe +10029ae6 T rtw_free_xmitframe_queue +10029b24 T rtw_get_sta_pending +10029b64 T rtw_xmit_classifier +10029bca T rtw_xmitframe_enqueue +10029bd8 T rtw_alloc_hwxmits +10029c32 T rtw_free_hwxmits +10029c48 T _rtw_free_xmit_priv +10029d14 T rtw_init_hwxmits +10029d2c T _rtw_init_xmit_priv +10029ee4 T rtw_get_ff_hwaddr +10029ef8 T xmitframe_enqueue_for_sleeping_sta +1002a0b8 t dequeue_xmitframes_to_sleeping_queue +1002a10e T stop_sta_xmit +1002a1f6 T wakeup_sta_to_xmit +1002a40c T xmit_delivery_enabled_frames +1002a528 T rtw_xmit_tasklet +1002a580 T rtw_xmit_mgnt +1002a584 T rtw_xmit +1002a8ae T rtw_sctx_done_err +1002a8ba T rtw_alloc_xmitbuf +1002a914 T rtw_free_xmitbuf +1002a986 T rtw_alloc_xmitbuf_ext +1002aa0c T rtw_sctx_done +1002aa12 t rtl8195a_free_rx_ring +1002aa20 t bus_write32 +1002aa7c t bus_write16 +1002aad8 t bus_write8 +1002ab34 t bus_read32 +1002ab8e t bus_read16 +1002abea t bus_read8 +1002ac46 t rtl8195a_free_tx_ring +1002acd4 T rtl8195a_init_desc_ring +1002ae14 T rtl8195a_free_desc_ring +1002ae30 T rtl8195a_reset_desc_ring +1002aec6 T InitLxDmaRtl8195a +1002b028 T rtl8195a_check_txdesc_closed +1002b0a0 t rtl8195a_tx_isr +1002b184 T InterruptRecognized8195a +1002b214 T InitInterrupt8195a +1002b234 T EnableDMA8195a +1002b25c T EnableInterrupt8195a +1002b29c T DisableDMA8195a +1002b2a8 T DisableInterrupt8195a +1002b2c0 T UpdateInterruptMask8195a +1002b322 T CheckRxTgRtl8195a +1002b35c T rtl8192ee_check_rxdesc_remain +1002b38c T rtl8195a_recv_tasklet +1002b6a0 T rtl8195a_tx_int_handler +1002b6cc T InterruptHandle8195a +1002b940 T rtl8195a_xmit_tasklet +1002b968 T lxbus_set_intf_ops +1002b9a8 t GetTxBufDesc +1002b9f2 t UpdateFirstTxbdtoXmitBuf.isra.3 +1002ba24 t check_nic_enough_desc.isra.4 +1002ba74 T rtl8195ab_init_xmit_priv +1002ba82 T rtl8195ab_free_xmit_priv +1002ba8a T GetDmaTxbdIdx +1002baa6 T rtl8195a_enqueue_xmitbuf +1002baca T rtl8195a_dequeue_xmitbuf +1002baee T SetTxbdForLxDMARtl8195ab +1002bb6e T UpdateTxbdHostIndex +1002bbac T rtw_dump_xframe +1002bd7e T check_tx_desc_resource +1002bdb8 T rtw_dequeue_xframe +1002be4c T rtw_xmitframe_coalesce +1002c100 T rtl8195ab_xmitframe_resume +1002c1f6 T rtl8195ab_mgnt_xmit +1002c232 T rtl8195ab_hal_xmit +1002c340 t Hal_GetEfuseDefinition +1002c370 t ResumeTxBeacon +1002c3b4 T UpdateHalRAMask8195A +1002c54c T HalLittleWifiMCUThreadRtl8195a +1002c5a0 T HalCheckInReqStateThreadRtl8195a +1002c5ec T HalTDMAChangeStateThreadRtl8195a +1002c638 t rtl8195a_read_chip_version +1002c6ac t Hal_EfuseWordEnableDataWrite +1002c8f0 t Hal_EfusePowerSwitch +1002c904 t rtl8195a_free_hal_data +1002c91e t StopTxBeacon +1002c968 T SetHalODMVar8195A +1002ca20 T rtl8195a_start_thread +1002ca88 T rtl8195a_stop_thread +1002caac t Hal_ReadEFuse +1002cc1c T GetHalODMVar8195A +1002cc30 t rtw_flash_map_update.part.12 +1002ccd0 t rtw_flash_map_erase +1002cd14 t Hal_EfusePgPacketWrite +1002cf90 t Hal_EfuseGetCurrentSize +1002d070 t rtw_flash_map_write +1002d23e T rtl8195a_InitBeaconParameters +1002d2ae T _InitBurstPktLen_8195AB +1002d2b8 T rtl8195a_set_hal_ops +1002d398 T rtl8195a_init_default_value +1002d39a T rtl8195a_InitLLTTable +1002d3e4 T Hal_GetChnlGroup8195A +1002d420 T rtw_config_map_read +1002d50c T rtw_config_map_write +1002d5b8 T Hal_InitPGData +1002d616 T Hal_EfuseParseIDCode +1002d62e T Hal_ReadPowerValueFromPROM_8195A +1002d6cc T Hal_EfuseParseTxPowerInfo_8195A +1002d764 T Hal_EfuseParseEEPROMVer_8195A +1002d77a T Hal_EfuseParsePackageType_8195A +1002d7e4 T Hal_EfuseParseChnlPlan_8195A +1002d814 T Hal_EfuseParseCustomerID_8195A +1002d82a T Hal_EfuseParseXtal_8195A +1002d842 T Hal_EfuseParseThermalMeter_8195A +1002d86a T Hal_ReadRFGainOffset +1002d8ba T BWMapping_8195A +1002d8da T SCMapping_8195A +1002d902 T rtl8195a_update_txdesc +1002dbd2 T rtl8195a_fill_fake_txdesc +1002dc90 T SetHwReg8195A +1002e950 T GetHwReg8195A +1002e9e4 T SetHalDefVar8195A +1002eac4 T GetHalDefVar8195A +1002eae8 T PHY_QueryBBReg_8195A_Safe +1002eb14 T PHY_SetBBReg_8195A_Safe +1002eb40 t phy_RFSerialRead_8195A +1002ebf4 T PHY_QueryRFReg_8195A +1002ec0c T PHY_SetRFReg_8195A +1002ec64 T PHY_MACConfig8195A +1002ec7e T PHY_BBConfig8195A +1002ed8e T PHY_RFConfig8195A +1002ed92 T PHY_SetTxPowerIndex_8195A +1002ee9c T phy_TxPwrAdjInPercentage +1002eedc T PHY_GetTxPowerIndex_8195A +1002efcc T PHY_SetTxPowerLevel8195A +1002efd2 T phy_SpurCalibration_8195A +1002f28a T phy_SetRegBW_8195A +1002f2c8 T phy_PostSetBwMode8195A +1002f424 T phy_SwChnl8195A +1002f4cc T phy_SwChnlAndSetBwMode8195A +1002f51c T PHY_HandleSwChnlAndSetBW8195A +1002f5cc T PHY_SetBWMode8195A +1002f5ee T PHY_SwChnl8195A +1002f608 T PHY_SetSwChnlBWMode8195A +1002f626 t HalTimerEnable +1002f638 T InitTDMATimer +1002f660 T ChangeStateByTDMA +1002f670 T GetMinRateInRRSR +1002f6a4 T CheckInReqState +1002f6b4 T InitCheckStateTimer +1002f6e4 T InitGTimer1ms +1002f730 T DeInitGTimer1ms +1002f778 T ChangeTransmiteRate +1002f7b4 T PowerBitSetting +1002f830 T ChkandChangePS +1002f894 T IssueRsvdPagePacketSetting +1002f908 T IssuePSPoll +1002f934 T WaitTxStateMachineOk +1002f988 T IssueNullData +1002fa18 T PsCloseRF +1002fa4c T PsOpenRF +1002fa7c T ChkTxQueueIsEmpty +1002fa94 T InitPS +1002fb04 T ConfigListenBeaconPeriod +1002fb28 T PS_S2_Condition_Match +1002fb5c T PS_S4_Condition_Match +1002fbd8 T PS_32K_Condition_Match +1002fc14 T PS_S2ToS3ToS0State +1002fc7c T PS_S2ToS0State +1002fc98 T PS_S3ToS2orS0State +1002fcc8 T PS_S0ToS1ToS2State +1002fd24 T PS_S1ToS0orS2State +1002fd54 T PS_S2ToS4State +1002fda0 T PS_S0ToS6State +1002fdc0 T PS_S6ToS0State +1002fdd8 T CheckTSFIsStable +1002fe28 T WaitHWStateReady +1002fe38 T SysClkDown +1002fea8 T SysClkUp +1002fef4 T ResetPSParm +1002ff68 T PS_S4ToS2State +1002ff8c T SleepTo32K +1002ffec T Change_PS_State +10030198 T Legacy_PS_Setting +1003020c T PSModeSetting +100302b0 T ChangePSStateByRPWM +100302f4 T ChangeTDMAState +10030414 T TDMAChangeStateTask +1003043e T EnterPS +10030460 T SetSmartPSTimer +1003049c T GTimer7Handle +100304f8 T SmartPS2InitTimerAndToGetRxPkt +10030534 T PS_OnBeacon +100305e4 T PSBcnEarlyProcess +100306a0 T PSMtiBcnEarlyProcess +1003074c T PSRxBcnProcess +1003089c T TxPktInPSOn +100308da T PsBcnToProcess +10030994 T GTimer6Handle +100309e0 T RPWMProcess +10030a1c T PSSetMode +10030a94 T SpeRPT +10030bb4 T ISR_BcnEarly +10030c20 T ISR_MtiBcnEarly +10030c54 T ISR_RxBcn +10030c70 T ISR_RxBCMD1 +10030ca0 T ISR_RxBCMD0 +10030cf4 T ISR_RxUCMD1 +10030d32 T ISR_RxUCMD0 +10030d6e T ISR_TxPktIn +10030d80 T ISR_TXCCX +10030d84 T H2CHDL_SetPwrMode +10030eac T CheckInReqStateTask +10030ef2 T HalGetNullTxRpt +10030f10 T ISR_TBTT +10030f88 T H2CHDL_BcnIgnoreEDCCA +10030f98 T PMUInitial +10030fe8 T PMUTask +100310f4 T PHY_RF6052SetBandwidth8195A +10031138 T PHY_RF6052_Config8195A +100311f0 t process_rssi +10031226 T rtl8195a_query_rx_desc_status +100312d6 T rtl8195a_query_rx_phy_status +1003142e T hal_com_get_channel_plan +10031462 T HAL_IsLegalChannel +10031480 T MRateToHwRate +10031494 T HwRateToMRate +100314a8 T HalSetBrateCfg +10031554 T Hal_MappingOutPipe +10031570 T hal_init_macaddr +1003159c T hw_var_port_switch +10031824 T SetHwReg +1003182e T GetHwReg +10031830 T switch_power_saving_mode +10031874 T rtw_bb_rf_gain_offset +100318bc T PHY_GetRateValuesOfTxPowerByRate +10031a54 T PHY_StoreTxPowerByRateNew +10031af0 T PHY_InitTxPowerByRate +10031b08 T PHY_StoreTxPowerByRate +10031b20 T PHY_GetTxPowerIndexBase +10031bc0 T PHY_GetTxPowerTrackingOffset +10031bec T PHY_GetRateIndexOfTxPowerByRate +10031c00 T PHY_GetTxPowerByRate +10031c60 T phy_StoreTxPowerByRateBase +10031cac T PHY_SetTxPowerByRate +10031ce8 T phy_ConvertTxPowerByRateInDbmToRelativeValues +10031de8 T PHY_TxPowerByRateConfiguration +10031dfa T PHY_SetTxPowerIndexByRateArray +10031e38 T PHY_SetTxPowerIndexByRateSection +10031e9c T PHY_SetTxPowerLevelByPath +10031ed2 T phy_GetWorldWideLimit +10031efe T PHY_GetTxPowerLimit +10032028 T PHY_ConvertTxPowerLimitToPowerIndex +10032178 T PHY_InitTxPowerLimit +100321c0 T PHY_SetTxPowerLimit +1003223c T PHY_GetTxPowerIndex +1003224c T rtw_hal_chip_configure +10032262 T rtw_hal_read_chip_info +10032278 T rtw_hal_read_chip_version +1003228e T rtw_hal_def_value_init +100322a4 T rtw_hal_free_data +100322ba T rtw_hal_dm_init +100322d0 T rtw_hal_dm_deinit +100322e6 T rtw_hal_init +10032310 T rtw_hal_deinit +1003232a T rtw_hal_set_hwreg +10032338 T rtw_hal_get_hwreg +10032346 T rtw_hal_set_def_var +10032358 T rtw_hal_get_def_var +1003236a T rtw_hal_set_odm_var +10032378 T rtw_hal_get_odm_var +10032386 T rtw_hal_enable_interrupt +100323a8 T rtw_hal_disable_interrupt +100323ca T rtw_hal_inirp_init +100323dc T rtw_hal_inirp_deinit +100323ee T rtw_hal_irp_reset +100323fc T rtw_hal_xmit +1003240e T rtw_hal_mgnt_xmit +10032420 T rtw_hal_init_xmit_priv +10032432 T rtw_hal_free_xmit_priv +10032440 T rtw_hal_update_ra_mask +1003246e T rtw_hal_add_ra_tid +1003247c T rtw_hal_clone_data +1003248a T rtw_hal_start_thread +10032498 T rtw_hal_stop_thread +100324a6 T rtw_hal_read_bbreg +100324da T rtw_hal_write_bbreg +10032506 T rtw_hal_read_rfreg +10032518 T rtw_hal_write_rfreg +1003252c T rtw_hal_interrupt_handler +1003253e T rtw_hal_set_bwmode +1003254c T rtw_hal_set_chan +1003255a T rtw_hal_set_chnl_bw +10032570 T rtw_hal_dm_watchdog +10032586 T rtw_hal_macid_sleep +100325a6 T rtw_hal_macid_wakeup +100325c6 T decide_chip_type_by_device_id +100325cc t rtw_net_get_stats +1003261c t netdev_if2_close +1003263c t netdev_close +10032698 t rtw_if1_deinit +10032732 T rtw_os_indicate_connect +10032736 T rtw_os_indicate_scan_done +1003273a T rtw_reset_securitypriv +1003282e T rtw_os_indicate_disconnect +10032878 T rtw_init_netdev +100329c8 T rtw_drv_if2_init +10032bd0 T rtw_drv_if2_stop +10032c26 T rtw_drv_if2_free +10032c74 T _netdev_open +10032d90 T _netdev_if2_open +10032e4c T netdev_if2_open +10032e74 T netdev_open +10032e9c T rtw_drv_probe +1003301c T rtw_dev_remove +10033060 T rtw_drv_entry +1003308c T rtw_drv_halt +100330bc t rtw_wx_set_autoreconnect +100330ea t rtw_wx_get_autoreconnect +100330f8 t rtw_forwarding_set +1003311a t rtw_set_ch_deauth +1003313c t get_priv_size +10033150 t rtw_wx_del_custome_ie +1003319c t rtw_wx_set_pscan_freq +1003321e t rtw_wx_update_custome_ie +10033290 t rtw_set_tos_value +100332b0 t rtw_get_tx_power +100333f4 t rtw_wx_set_custome_ie +100334a0 t rtw_pm_get +100334e4 t rtw_pm_set +10033598 t rtw_wx_read32 +10033644 t rtw_wx_write32 +100336a8 t rtw_wx_set_freq.isra.10 +10033750 T rtw_ex_set +10033810 T wireless_send_event +1003381a T indicate_wx_custom_event +10033876 T indicate_wx_scan_result_present +1003389e T indicate_wx_scan_complete_event +100338c8 T rtw_indicate_sta_assoc +10033918 T rtw_indicate_sta_disassoc +10033970 T rtw_indicate_wx_assoc_event +100339a2 T rtw_indicate_wx_disassoc_event +100339d2 T rtw_set_wpa_ie +10033ae8 T strtopsk +10033b54 T rtw_wx_get_passphrase +10033ba0 T rtw_wx_set_ap_essid +10033c90 T mac_reg_dump +10033d3c T bb_reg_dump +10033d98 T rf_reg_dump +10033e10 t rtw_dbg_port +10034478 T rtw_set_sta_num +10034494 T rtw_ex_get_drv_ability +10034554 T rtw_ex_get +100347ec T rtw_ioctl +10035778 T rtw_os_recv_resource_init +1003577c T rtw_os_recv_resource_alloc +10035786 T rtw_os_recv_resource_free +10035788 T rtw_tkip_countermeasure +10035828 T rtw_handle_tkip_mic_err +100358d0 T rtw_recv_indicatepkt +10035b20 T skb_fail_inc +10035b3c T skb_fail_get_and_rst +10035b58 T init_skb_pool +10035bb0 T init_skb_data_pool +10035c08 T alloc_skb +10035d08 T kfree_skb +10035d70 T kfree_skb_chk_key +10035d74 T skb_put +10035da8 T skb_reserve +10035db6 T dev_alloc_skb +10035dd2 T skb_end_pointer +10035dd6 T skb_set_tail_pointer +10035dde T skb_pull +10035df6 T skb_copy +10035e1e T rtw_remainder_len +10035e2a T _rtw_open_pktfile +10035e3c T _rtw_pktfile_read +10035e6a T rtw_set_tx_chksum_offload +10035e6c T rtw_os_xmit_resource_alloc +10035e76 T rtw_os_xmit_resource_free +10035e78 T rtw_os_pkt_complete +10035e80 T rtw_os_xmit_complete +10035e92 T rtw_os_xmit_schedule +10035ece T rtw_xmit_entry +10035f1a T rtw_alloc_etherdev_with_old_priv +10035f30 T rtw_alloc_etherdev +10035f5c T rtw_free_netdev +10035f7c T timer_wrapper +10035fd0 T alloc_etherdev +1003602c T free_netdev +10036046 T dev_alloc_name +10036050 T init_timer_wrapper +10036070 T deinit_timer_wrapper +100360bc T init_timer +10036174 T mod_timer +10036254 T cancel_timer_ex +1003629c T del_timer_sync +10036300 T rtw_init_timer +10036308 T rtw_set_timer +1003630c T rtw_cancel_timer +10036316 T rtw_del_timer +1003631c T rltk_get_idx_bydev +1003632c T rltk_wlan_init +100363b4 T rltk_wlan_deinit +10036478 T rltk_wlan_start +100364ac T rltk_wlan_check_isup +100364bc T rltk_wlan_tx_inc +100364d0 T rltk_wlan_tx_dec +100364e4 T rltk_wlan_get_recv_skb +100364f4 T rltk_wlan_alloc_skb +10036534 T rltk_wlan_send_skb +10036568 T rltk_netif_rx +10036614 T rltk_set_sta_num +10036618 T rltk_set_tx_power_percentage +1003664c T rltk_wlan_control +100366e0 T rltk_wlan_running +100366f8 T rltk_wlan_handshake_done +1003672c T rltk_wlan_wireless_mode +100367b8 T rltk_wlan_is_connected_to_ap +100367fc T Efuse_PowerSwitch +10036808 T Efuse_GetCurrentSize +10036814 T Efuse_CalculateWordCnts +10036838 T EFUSE_GetEfuseDefinition +1003684c T efuse_OneByteRead +10036880 T efuse_OneByteWrite +100368b4 T Efuse_PgPacketWrite +100368c8 T efuse_WordEnableDataRead +100368fa T Efuse_WordEnableDataWrite +1003690e T efuse_GetCurrentSize +10036936 T rtw_efuse_map_read +10036998 T rtw_efuse_map_write +10036b18 T rtw_macaddr_cfg +10036bdc T rtw_get_cipher_info +10036c56 T rtw_get_bcn_info +10036d26 T rtw_init_default_value +10036d94 T rtw_cancel_all_timer +10036dfe T rtw_free_drv_sw +10036e74 T rtw_reset_drv_sw +10036ed0 T rtw_init_drv_sw +10036f58 T rtw_start_drv_threads +10037014 T rtw_stop_drv_threads +10037048 T rtw_read8 +10037056 T rtw_read16 +10037064 T rtw_read32 +10037072 T rtw_write8 +10037080 T rtw_write16 +1003708e T rtw_write32 +1003709c T rtw_do_join +10037140 T rtw_set_802_11_bssid +100372c4 T rtw_set_802_11_ssid +100373cc T rtw_set_802_11_infrastructure_mode +1003746e T rtw_set_802_11_bssid_list_scan +100374be T rtw_set_802_11_authentication_mode +100374e0 T rtw_set_802_11_add_wep +10037540 T ODM_InitRAInfo +100375e0 T InitialRateUpdate +100376e0 T RateUp_search_RateMask +10037712 T RateDown_search_RateMask +10037764 T StartRateByRSSI +1003778e T RateUpRAM8195A +10037822 T RateDownTrying +10037860 T TryDone +100378f8 T RateDownStepRAM8195A +10037998 T RateDecisionRAM8195A +10037a7c T ArfrRefresh +10037c84 T H2CHDL_Set_MACID_Config +10037d48 T PHY_DM_RA_SetRSSI_8195A +10037d76 t CheckPositive.isra.0 +10037e58 T ODM_ReadAndConfig_MP_8195A_AGC_TAB +10037ed0 T ODM_ReadAndConfig_MP_8195A_PHY_REG +10037f48 T ODM_GetVersion_MP_8195A_PHY_REG +10037f4c T ODM_ReadAndConfig_MP_8195A_PHY_REG_PG +10037f80 T odm_ConfigRFReg_8195A +10037fb8 T odm_ConfigRF_RadioA_8195A +10037fc8 T odm_ConfigMAC_8195A +10037fcc T odm_ConfigBB_AGC_8195A +10037fdc T odm_ConfigBB_PHY_REG_PG_8195A +1003800a T odm_ConfigBB_PHY_8195A +10038052 T odm_ConfigBB_TXPWR_LMT_8195A +10038078 T ODM_CmnInfoInit +1003816c T ODM_CmnInfoHook +10038210 T ODM_CmnInfoPtrArrayHook +10038220 T ODM_CmnInfoUpdate +100382f0 T odm_CommonInfoSelfInit +10038364 T ODM_DMInit +100383b2 T odm_CommonInfoSelfUpdate +10038404 T ODM_DMWatchdog +10038470 T PhyDM_Get_Structure +10038494 T Phydm_CheckAdaptivity +100384c2 T Phydm_NHMCounterStatisticsInit +10038538 T Phydm_SetEDCCAThreshold +10038570 T Phydm_MACEDCCAState +100385ae T Phydm_AdaptivityInit +1003868c T Phydm_Adaptivity +100387ac T ODM_CfoTrackingInit +100387d6 T ODM_CfoTracking +100387f6 T ODM_ParsingCFO +10038828 T ODM_InitDebugSetting +1003883c T ODM_Write_DIG +100388dc T odm_ForbiddenIGICheck +1003896e T ODM_Write_CCK_CCA_Thres +100389a8 T odm_DIGInit +10038a42 T odm_DigAbort +10038a64 T odm_DIGbyRSSI_LPS +10038b10 T odm_FAThresholdCheck +10038b3c T odm_DIG +10038d9c T odm_FalseAlarmCounterStatistics +10038dc8 T odm_CCKPacketDetectionThresh +10038e20 T odm_RxPhyStatus8195A_Parsing +10038f24 T odm_Process_RSSIForDM_8195A +10039066 T ODM_PhyStatusQuery_8195A +10039092 T ODM_PhyStatusQuery +10039096 T ODM_ConfigRFWithHeaderFile +100390b4 T ODM_ConfigRFWithTxPwrTrackHeaderFile +100390e6 T ODM_ConfigBBWithHeaderFile +1003910e T ODM_ConfigMACWithHeaderFile +10039120 T ODM_Read1Byte +10039126 T ODM_Read4Byte +1003912c T ODM_Write1Byte +10039132 T ODM_Write2Byte +10039138 T ODM_Write4Byte +1003913e T ODM_SetMACReg +10039144 T ODM_SetBBReg +1003914a T ODM_GetBBReg +10039150 T ODM_SetRFReg +10039156 T ODM_GetRFReg +1003915c T ODM_MoveMemory +10039166 T ODM_delay_ms +1003916a T ODM_delay_us +10039170 T getSwingIndex +100391c8 T odm_TXPowerTrackingThermalMeterInit +1003927a T odm_TXPowerTrackingInit +1003927e T odm_TXPowerTrackingCheckIOT +100392b2 T ODM_TXPowerTrackingCheck +100392c0 T odm_RSSIMonitorInit +100392c8 T ODM_RAPostActionOnAssoc +100392d0 T odm_RSSIMonitorCheckIOT +100393a4 T odm_RSSIMonitorCheck +100393b8 T odm_RateAdaptiveMaskInit +100393e0 T ODM_RAStateCheck +10039422 T odm_RefreshRateAdaptiveMaskIOT +10039472 T odm_RefreshRateAdaptiveMask +10039488 T ODM_Get_Rate_Bitmap +10039578 t _ReadEfuseInfo8195a +10039640 t rtl8195a_interface_configure +10039674 t rtl8195a_hal_deinit +100396b0 T _InitPowerOn +10039730 t ReadAdapterInfo8195a +10039760 T _InitDriverInfoSize +1003976a T _InitNetworkType +1003978c T _InitWMACSetting +100397fc T _InitAdaptiveCtrl +10039840 T _InitEDCA +100398bc T _InitRateFallback +10039900 T _InitRetryFunction +1003992c T _InitOperationMode +10039974 T _InitInterrupt +100399b4 t rtl8195a_hal_init +10039c8c T rtl8195ab_set_hal_ops +10039d64 T FillH2CCmd8195A +10039d84 T CheckFwRsvdPageContent +10039d86 T rtl8195a_set_FwRsvdPage_cmd +10039d90 T rtl8195a_set_FwMediaStatusRpt_cmd +10039dbc T rtl8195a_set_FwMacIdConfig_cmd +10039e7c T rtl8195a_set_FwPwrMode_cmd +10039f0c T rtl8195a_download_rsvd_page +1003a214 T rtl8195a_set_FwJoinBssRpt_cmd +1003a21e T rtl8195a_Add_RateATid +1003a270 T rtw_rpt_h_addr +1003a2bc T rtw_txrpt_read8 +1003a2da T rtw_txrpt_write8 +1003a2fe T rtw_ratemask_read8 +1003a31c T rtw_ratemask_write8 +1003a340 T ReadRateMask8 +1003a34a T WriteRateMask8 +1003a34e T ReadTxrpt8 +1003a358 T WriteTxrpt8 +1003a35c T ResetTxrpt +1003a394 T PsuseTxrpt +1003a3b4 T CheckMaxMacidNum +1003a3ec T GetMediaStatusCommon +1003a406 T GetTxrptStatistic +1003a4bc T rtl8195a_InitHalDm +1003a5e0 T rtl8195a_HalDmWatchDog +1003a6c4 T rtl8195a_init_dm_priv +1003a79c T rtl8195a_deinit_dm_priv +1003a79e T MediaConnection +1003a7bc T MediaDisconnection +1003a7dc T RATaskEnable +1003a806 T SetMediaStatus +1003a844 T H2CHDL_JoinInfo +1003a87c T H2CHDL_SetRsvdPage +1003a914 T H2CCmdCommon +1003a958 T HalPwrSeqCmdParsing +1003aa18 T hci_dvobj_init +1003aa28 T hci_dvobj_deinit +1003aa38 T hci_dvobj_request_irq +1003aa48 T hci_dvobj_free_irq +1003aa58 T hci_lxbus_dvobj_init +1003aa94 T hci_lxbus_dvobj_deinit +1003aad4 T hci_lxbus_dvobj_request_irq +1003ab28 T hci_lxbus_free_irq +1003ab80 T hci_lxbus_intf_stop +1003abb8 T rtw_interrupt_thread +1003ac2c T lextra_bus_dma_Interrupt +1003ac74 T init_rom_wlan_ram_map +1003ac8c T ODM_ReadAndConfig_MP_8195A_MAC_REG +1003ade8 t CheckPositive.isra.0 +1003aecc T ODM_ReadAndConfig_MP_8195A_RadioA +1003af44 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN48 +1003af94 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN56 +1003afe4 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_TFBGA96 +1003b034 T ODM_ReadAndConfig_MP_8195A_TXPWR_LMT +1003b06c T ODM_ReadAndConfig_MP_8195A_TxXtalTrack +1003b098 T GetDeltaSwingTable_8195A +1003b0c8 T GetDeltaSwingXtalTable_8195A +1003b0d8 T ODM_TxXtalTrackSetXtal_8195A +1003b0f8 T Hal_MPT_CCKTxPowerAdjust +1003b1c8 T ODM_TxPwrTrackSetPwr_8195A +1003b2d8 T ConfigureTxpowerTrack_8195A +1003b324 T phy_PathA_IQK_8195A +1003b4d8 T phy_PathA_RxIQK8195A +1003b86c T _PHY_PathAFillIQKMatrix8195A +1003ba02 T _PHY_PathBFillIQKMatrix8195A +1003bb7e T _PHY_SaveADDARegisters8195A +1003bbb2 T _PHY_SaveMACRegisters8195A +1003bbe0 T _PHY_ReloadADDARegisters8195A +1003bc14 T _PHY_ReloadMACRegisters8195A +1003bc44 T _PHY_PathADDAOn8195A +1003bc80 T _PHY_MACSettingCalibration8195A +1003bcc8 T _PHY_PIModeSwitch8195A +1003bd04 T phy_SimularityCompare_8195A +1003be38 T phy_IQCalibrate_8195A +1003c1b0 T phy_LCCalibrate_8195A +1003c220 T PHY_LCCalibrate_8195A +1003c280 T PHY_IQCalibrate_8195A +1003c534 T DoIQK_8195A +1003c552 T ConfigureTxpowerTrack +1003c564 T ODM_TXPowerTrackingCallback_ThermalMeter +1003c970 T ODM_ResetIQKResult +1003c9b8 T ODM_GetRightChnlPlaceforIQK +1003ca10 t __ROM_ODM_CfoTrackingReset_veneer +1003ca20 t __rom_psk_CalcGTK_veneer +1003ca30 t __HalCpuClkConfig_veneer +1003ca40 t __rom_psk_CalcPTK_veneer +1003ca50 t __rom_psk_PasswordHash_veneer +1003ca60 t __StrUpr_veneer +1003ca70 t __AES_UnWRAP_veneer +1003ca80 t __PHY_QueryBBReg_8195A_veneer +1003ca90 t __rtw_parse_wpa_ie_veneer +1003caa0 t __rtw_get_wps_attr_content_veneer +1003cab0 t __ROM_odm_EVMdbToPercentage_veneer +1003cac0 t __aes_80211_encrypt_veneer +1003cad0 t __rtw_get_sec_ie_veneer +1003cae0 t __HalDelayUs_veneer +1003caf0 t __tkip_80211_decrypt_veneer +1003cb00 t __ROM_odm_CfoTrackingFlow_veneer +1003cb10 t __rtw_get_ie_veneer +1003cb20 t __rtw_seccalctkipmic_veneer +1003cb30 t __aes_80211_decrypt_veneer +1003cb40 t __rtw_ieee802_11_parse_elems_veneer +1003cb50 t __rtw_get_wpa2_ie_veneer +1003cb60 t __ROM_odm_QueryRxPwrPercentage_veneer +1003cb70 t __rtw_get_wps_ie_veneer +1003cb80 t __rt_hmac_sha1_veneer +1003cb90 t __rtw_parse_wpa2_ie_veneer +1003cba0 t __ROM_odm_FalseAlarmCounterStatistics_veneer +1003cbb0 t __prvStrCmp_veneer +1003cbc0 t __rtw_secmicappend_veneer +1003cbd0 t __rtw_secgetmic_veneer +1003cbe0 t __rtw_check_network_type_veneer +1003cbf0 t __rtw_get_bit_value_from_ieee_value_veneer +1003cc00 t __SpicWaitBusyDoneRtl8195A_veneer +1003cc10 t __rtw_set_supported_rate_veneer +1003cc20 t __wep_80211_decrypt_veneer +1003cc30 t __rtw_secmicsetkey_veneer +1003cc40 t __ROM_odm_SetCrystalCap_veneer +1003cc50 t __CmdDumpWord_veneer +1003cc60 t __HalI2SIntrCtrlRtl8195a_veneer +1003cc70 t __rt_md5_hmac_veneer +1003cc80 t __rt_arc4_crypt_veneer +1003cc90 t __PHY_SetBBReg_8195A_veneer +1003cca0 t __rtw_get_rateset_len_veneer +1003ccb0 t __CmdWriteWord_veneer +1003ccc0 t __phy_CalculateBitShift_veneer +1003ccd0 t __wep_80211_encrypt_veneer +1003cce0 t __HalI2SRead32_veneer +1003ccf0 t __rtw_get_wpa_ie_veneer +1003cd00 t __rtw_set_ie_veneer +1003cd10 t __AES_WRAP_veneer +1003cd20 t __rtw_set_fixed_ie_veneer +1003cd30 t __ROM_odm_GetDefaultCrytaltalCap_veneer +1003cd40 t __key_2char2num_veneer +1003cd50 t __Strtoul_veneer +1003cd60 t __tkip_80211_encrypt_veneer +1003cd70 t __rt_arc4_init_veneer +1003cd80 t ___vsscanf_veneer +1003cd90 t __HalI2SWrite32_veneer +1003cda0 t __HalI2SClrAllIntrRtl8195a_veneer +1003d149 d __FUNCTION__.14742 +1003d5c8 d bitrate_table +1003d6f4 d samplerate_table +1003d700 d decoder_table +1003d70c d imdct_s +1003d79c d sfb_8000_short +1003d7c3 d sfb_32000_short +1003d7ec d is_table +1003d808 d rq_table +10045844 d root_table +10045860 d sfb_44100_mixed +10045888 d is_lsf_table +10045900 d sflen_table +10045920 d sfb_16000_mixed +10045944 d ca +10045964 d sfb_44100_short +1004598b d sfb_44100_long +100459a1 d sfb_48000_mixed +100459c7 d sfb_24000_long +100459e0 d scale.7384 +10045a28 d sfb_32000_mixed +10045a4e d sfb_16000_short +10045a75 d sfb_8000_long +10045a8b d sfb_22050_mixed +10045ab0 d window_l +10045b40 d sfb_48000_long +10045b58 d cs +10045b78 d sfb_24000_mixed +10045b9c d pretab +10045bb2 d sfb_48000_short +10045bd9 d sfb_22050_short +10045c00 d sfb_8000_mixed +10045c28 d sfbwidth_table +10045c94 d sfb_24000_short +10045cbb d sfb_32000_long +10045cd1 d sfb_22050_long +10045ce8 d window_s +10045d18 d nsfb_table +10045d60 d hufftab24 +10046368 d hufftab10 +10046500 d hufftab11 +100466a0 d hufftab12 +10046820 d hufftab13 +10046e58 d hufftab3 +10046e98 d hufftab15 +10047488 d hufftab16 +10047ad0 d hufftab6 +10047b40 d hufftab7 +10047c40 D mad_huff_pair_table +10047dc0 d hufftab9 +10047e98 d hufftab1 +10047eb8 d hufftabA +10047f28 d hufftab2 +10047f68 d hufftabB +10047fa8 D mad_huff_quad_table +10047fb0 d hufftab0 +10047fb4 d hufftab5 +1004801c d hufftab8 +10048124 d crc_table +10048324 d D +10048ba4 D mad_timer_zero +10048f37 d __func__.19140 +10049815 d __func__.19912 +10049854 d err_to_errno_table +1004989c D ip_addr_broadcast +100498a0 D ip_addr_any +100498b4 D memp_sizes +100498d4 D tcp_pcb_lists +100498e4 D tcp_state_str +10049910 D tcp_backoff +10049985 D tcp_persist_backoff +1004998c D ethbroadcast +10049992 D ethzero +100499c1 d __FUNCTION__.9191 +10049a83 d __FUNCTION__.9203 +10049a92 d dhcp_option_lease_time_one_day +10049abb d dhcp_option_interface_mtu +10049abd d dhcp_magic_cookie +10049b3f d __FUNCTION__.4595 +10049b5d d ucExpectedStackBytes.7044 +10049b71 d CSWTCH.270 +10049bfe d __FUNCTION__.12255 +10049c14 d __FUNCTION__.12259 +10049c2c D osdep_service +10049d50 d __FUNCTION__.12110 +10049ddd d __FUNCTION__.12059 +10049df1 d __FUNCTION__.12121 +10049e0c d __FUNCTION__.12067 +10049e28 d __FUNCTION__.12093 +10049e47 d __FUNCTION__.7295 +10049f50 d PinMap_I2S_RX +1004a030 d PinMap_I2S_TX +1004a090 d I2SDefaultSetting +1004a0a4 d PinMap_I2S_CLK +1004a104 d PinMap_I2S_WS +1004a164 d __FUNCTION__.8784 +1004a1bc d __FUNCTION__.8600 +1004a1c9 d __FUNCTION__.8613 +1004a46e d __FUNCTION__.8455 +1004a490 d __FUNCTION__.8462 +1004a4ab d __FUNCTION__.8469 +1004a5a6 d __func__.8808 +1004a5c5 d __func__.8818 +1004a5e3 d __func__.8830 +1004a5fd d __func__.8840 +1004a61f d __func__.8835 +1004a9e8 d __func__.8603 +1004aa02 d __func__.8686 +1004aa15 d __func__.8825 +1004aa2e d __func__.8631 +1004aa61 d __FUNCTION__.17777 +1004aa80 D wlancmds +1004ac78 D rtw_cmd_callback +1004af04 d RTW_ChannelPlan2G +1004af7c D WPS_OUI +1004af80 D RSN_TKIP_CIPHER +1004af84 D MCS_rate_1R +1004af94 D P2P_OUI +1004afc0 D WMM_INFO_OUI +1004afc6 D RTW_WPA_OUI +1004afca D WMM_PARA_OUI +1004afd0 d RTW_ChannelPlanMap +1004afe8 D null_addr +1004afee D WMM_OUI +1004aff4 d wlanevents +1004b0b4 D zero_bssid +1004b0f1 d __FUNCTION__.17681 +1004b107 D SNAP_ETH_TYPE_APPLETALK_AARP +1004b109 d __FUNCTION__.17495 +1004b11c D SNAP_ETH_TYPE_IPX +1004b11e D rtw_bridge_tunnel_header +1004b145 D rtw_rfc1042_header +1004b163 d CSWTCH.36 +1004b16f D ARTHEROS_OUI1 +1004b172 D ARTHEROS_OUI2 +1004b175 D REALTEK_OUI +1004b178 D RALINK_OUI +1004b17b D MARVELL_OUI +1004b17e D CISCO_OUI +1004b181 d rtw_basic_rate_cck +1004b185 D BROADCOM_OUI1 +1004b188 D BROADCOM_OUI2 +1004b18b D REALTEK_96B_IE +1004b191 d rtw_basic_rate_mix +1004b198 d rtw_basic_rate_ofdm +1004b19b D AIRGOCAP_OUI +1004b1af d CSWTCH.66 +1004b1c8 d CSWTCH.48 +1004b20a d CSWTCH.28 +1004b21c D efuse_map_mask +1004b22c D flash_map_mask +1004b2c8 d __func__.21107 +1004b60e d CSWTCH.15 +1004b692 d CSWTCH.17 +1004b701 d CSWTCH.14 +1004b796 d __FUNCTION__.21257 +1004b7a8 d rtw_private_args +1004bbbf d __FUNCTION__.21057 +1004bbd2 d __FUNCTION__.21294 +1004bbe3 d __FUNCTION__.21241 +1004bbf2 d __FUNCTION__.21126 +1004bc02 d iw_priv_type_size +1004bce0 d __FUNCTION__.17334 +1004bcf6 d __FUNCTION__.17736 +1004bd06 d __FUNCTION__.17760 +1004bd19 d __FUNCTION__.17712 +1004bd28 d __FUNCTION__.17649 +1004bd36 d __FUNCTION__.17661 +1004c10d d __FUNCTION__.17827 +1004c126 d __FUNCTION__.17654 +1004c131 d __FUNCTION__.17615 +1004c140 d __FUNCTION__.17811 +1004c152 d __FUNCTION__.17765 +1004c160 d __FUNCTION__.17724 +1004c171 d __FUNCTION__.17637 +1004d512 D CCKFCCTable_Ch14_8195A +1004d522 D CCKFCCTable_8195A +1004d534 D OFDMSwingTable_New +1004d5e0 D CCKCETable_8195A +1004d5f6 d CSWTCH.39 +1004d60b d __func__.20571 +1004d62c D hci_ops +1004d651 V Array_MP_8195A_TXPWR_LMT +1004dbc4 D xHeapRegions +1004dbe4 D UartLogRamCmdTable +1004dbe4 D console_commands_main +1004dbf4 D console_cmd_wifi_api +1004dc74 D console_commands_at +1004dce4 D console_commands +1004dd04 d UartLogRamCmdTable_end +1004dd08 D __data_start__ +1004dd08 D oversampling +1004dd0c D SystemCoreClock +1004dd10 D error_flag +1004dd11 D wlan_st_name +1004dd17 D wifi_cfg +1004dd1e D wlan_ap_name +1004dd24 D wifi_ap_dhcp +1004dd34 D wifi_st_dhcp +1004dd44 D feep_tab +1004dd84 D wifi_st_cfg +1004ddf4 D tab_txt_rtw_secyrity +1004de1c D wifi_ap_cfg +1004de84 D wlan_ap_netifn +1004de88 D tab_code_rtw_secyrity +1004deb0 d tcp_port +1004deb4 d iss.7833 +1004deb8 d udp_port +1004deba D lwip_host_name +1004deda d dhcp_server_state_machine +1004dedb d dhcp_recorded_xid +1004dee0 d uxCriticalNesting +1004dee4 d xNextTaskUnblockTime +1004dee8 d seed.12226 +1004deec d wakeup_event +1004def0 d wakelock +1004def4 d last_wakelock_state +1004df14 D mlme_sta_tbl +1004df84 d PMKID_KDE_TYPE.17744 +1004df8c V nr_xmitbuff +1004df90 V nr_xmitframe +1004df94 d P802_1H_OUI +1004df97 D rtw_adaptivity_mode +1004df98 D g_user_ap_sta_num +1004df9c d rtw_private_handler +1004dfe0 V max_local_skb_num +1004dfe4 V max_skb_buf_num +1004dfe8 D rom_e_rtw_msgp_str_ +1004e1c4 D ARFB_table +1004e203 D TRYING_NECESSARY_idx +1004e217 D DROPING_NECESSARY +1004e22b D PER_RATE_UP +1004e23f D PER_RATE_DOWN +1004e254 V Array_MP_8195A_PHY_REG_PG +1004e2e4 D Array_MP_8195A_AGC_TAB +1004e4f4 D Array_MP_8195A_PHY_REG +1004eb6c D rtl8195A_card_disable_flow +1004ec0c D rtl8195A_card_enable_flow +1004ecac D Array_MP_8195A_MAC_REG +1004efb4 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_TFBGA96_8195A +1004efd4 D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_TFBGA96_8195A +1004eff4 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN48_8195A +1004f012 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN56_8195A +1004f030 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN48_8195A +1004f04e D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN56_8195A +1004f06c D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_TFBGA96_8195A +1004f08c D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN56_8195A +1004f0aa D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN48_8195A +1004f0c8 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN56_8195A +1004f0e8 D Array_MP_8195A_RadioA +1004f6b0 D gDeltaSwingTableXtal_MP_P_TxXtalTrack_8195A +1004f6ce D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_TFBGA96_8195A +1004f6ee D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN48_8195A +1004f70c D .ram.bss$$Base +1004f70c D __bss_start__ +1004f70c D __data_end__ +1004f70c D __ram_image2_text_end__ +1004f70c d skbdata_list +1004f714 V skb_data_pool +10052b14 d ucIdleTaskHeap +10052c2c D HalI2SOpSAL +10052c68 D SYSAdapte +10052c6c D PwrAdapter +10052ef8 D libc_has_init +10052ef9 D print_off +10052efc d rheap_end +10052f00 d sampCntAdd +10052f04 d sampCnt +10052f08 D mp3_serv +10052f8a D tskreader_enable +10052f8c D readBuf +10052f90 D tskmad_enable +10052f94 d bufUnderrunCt +10052f98 d oldRate +10052f9c d sampDelCnt +10052fa0 D pbuf_fifo +10052fa4 D pi2s +10052fac D I2sTxSema +10052fb0 D rtw_join_status +10052fb4 D wifi_mode +10052fb8 D scan_result_handler_ptr +10052fcc d join_user_data +10052fd0 d event_callback_list +10053150 D paff_array +100531c8 D lwip_init_done +100531cc D xnetif +1005324c D wifi_run_mode +1005324d D wlan_st_netifn +10053250 D wifi_autoreconnect +10053258 D wifi_st_status +1005325c D web_scan_handler_ptr +10053268 d s_aliases.7449 +1005326c d s_hostent.7448 +10053280 d s_hostent_addr.7450 +10053284 D h_errno +10053288 d s_phostent_addr.7451 +10053290 d select_cb_list +10053294 d sockets +10053354 d select_cb_ctr +10053358 d mbox +1005335c d tcpip_init_done_arg +10053360 d tcpip_init_done +10053364 d allsystems +10053368 d allrouters +1005336c d igmp_group_list +10053370 D current_header +10053374 d ip_id +10053378 D current_iphdr_src +1005337c D current_iphdr_dest +10053380 D current_netif +10053384 d str.6812 +10053394 d reassdatagrams +10053398 d ip_reass_pbufcount +1005339a D dhcp_rx_options_given +100533a4 d xid.7762 +100533a8 D dhcp_rx_options_val +100533d0 d dns_seqno +100533d4 d dns_table +10053834 d dns_servers +1005383c d dns_payload_buffer +10053a40 d dns_pcb +10053a44 d dns_payload +10053a48 d tcpip_tcp_timer_active +10053a4c d next_timeout +10053a50 D netif_list +10053a54 D netif_default +10053a58 d netif_num +10053a59 D pbuf_free_ooseq_pending +10053a5c d raw_pcbs +10053a60 D tcp_active_pcbs_changed +10053a64 D tcp_ticks +10053a68 d tcp_timer +10053a6c D tcp_listen_pcbs +10053a70 D tcp_active_pcbs +10053a74 d tcp_timer_ctr +10053a78 D tcp_tw_pcbs +10053a7c D tcp_tmp_pcb +10053a80 D tcp_bound_pcbs +10053a84 d seqno +10053a88 d tcplen +10053a8c d ackno +10053a90 d flags +10053a91 d recv_flags +10053a94 d tcphdr +10053a98 d recv_data +10053a9c d inseg +10053ab0 D tcp_input_pcb +10053ab4 D udp_pcbs +10053ab8 d etharp_cached_entry +10053abc d arp_table +10053b84 D lwip_tickless_used +10053b88 d s_timeoutlist +10053bb8 d s_nextthread +10053bbc d dhcps_ip_table_semaphore +10053bc0 d dhcps_send_broadcast_address +10053bc4 D dhcps_ip4addr_pool_end +10053bc5 d dhcp_client_ethernet_address +10053bd8 d dhcps_subnet_broadcast +10053bdc d bound_client_ethernet_address +10053bec d dhcps_netif +10053bf0 d dhcps_local_gateway +10053bf4 d ip_table +10053c14 d dhcps_pcb +10053c18 d dhcp_message_total_options_lenth +10053c1c d dhcps_local_address +10053c20 d client_request_ip +10053c24 d dhcps_allocated_client_address +10053c28 D dhcps_ip4addr_pool_start +10053c2c d dhcps_local_mask +10053c30 d dhcps_network_id +10053c34 d dhcp_message_repository +10053c38 D ext_upper +10053c3c d xFreeBytesRemaining +10053c40 d ext_free +10053c44 D ext_lower +10053c48 d pxEnd +10053c4c d xStart +10053c54 d xMinimumEverFreeBytesRemaining +10053c58 d ulTimerCountsForOneTick +10053c5c d ulStoppedTimerCompensation +10053c60 d xMaximumPossibleSuppressedTicks +10053c64 d xPendingReadyList +10053c78 d uxTopReadyPriority +10053c7c d uxTasksDeleted +10053c80 d xTickCount +10053c84 d pxReadyTasksLists +10053d60 d pxOverflowDelayedTaskList +10053d64 d xTasksWaitingTermination +10053d78 d pxDelayedTaskList +10053d7c d xSchedulerRunning +10053d80 d ulTaskSwitchedInTime +10053d84 D pxCurrentTCB +10053d88 d uxPendedTicks +10053d8c d xSuspendedTaskList +10053da0 d uxCurrentNumberOfTasks +10053da4 d ulDeltaTotalRunTime +10053da8 d xDelayedTaskList2 +10053dbc d xDelayedTaskList1 +10053dd0 d uxTaskNumber +10053dd4 d xYieldPending +10053dd8 d uxSchedulerSuspended +10053ddc d xNumOfOverflows +10053de0 d pxCurrentTimerList +10053de4 d xActiveTimerList1 +10053df8 d xActiveTimerList2 +10053e0c d xLastTime.5284 +10053e10 d xTimerQueue +10053e14 d pxOverflowTimerList +10053e18 d xTimerTaskHandle +10053e1c d device_mutex +10053e28 d mutex_init +10053e2c d uxSavedInterruptStatus +10053e30 D min_free_heap_size +10053e34 d g_heap_inited +10053e38 d tcm_lock +10053e3c D g_tcm_heap +10053e40 D flashobj +10053e4c D fspic_isinit +10053e50 D WDGAdapter +10053e8c d last_acquire_wakelock_time +10053f0c D post_sleep_callback +10053f8c D pre_sleep_callback +1005400c D reserve_pll +10054010 d sys_sleep_time +10054014 d hold_wakelock_time +10054094 D missing_tick +10054098 D Timer2To7HandlerData +100540b0 D auto_reconnect_running +100540b4 D p_wlan_autoreconnect_hdl +100540b8 D mac_monitor_callback +100540bc D mf_list_head +100540c0 d pscan_retry_cnt.21430 +100540c4 D promisc_callback_all +100540c8 D promisc_sema +100540cc D promisc_callback +100540d0 D psk_essid +10054118 D psk_passphrase +1005419a D psk_passphrase64 +100541db D wpa_global_PSK +1005422b d RFC1042_OUI +10054230 d rx_ring_pool +10056310 d stop_report_count.20629 +10056311 D bCheckStateTIMER +10056314 d WifiMcuCmdBitMap.20974 +10056318 D p_wlan_init_done_callback +1005631c D rtw_power_percentage_idx +10056320 D p_wlan_uart_adapter_callback +10056324 D rtw_adaptivity_en +10056328 D p_wlan_mgmt_filter +1005632c D rtw_initmac +10056330 D rtw_adaptivity_th_l2h_ini +10056334 d drvpriv +10056348 D skbbuf_used_num +1005634c V skb_pool +10056504 D skbdata_used_num +10056508 d wrapper_skbbuf_list +10056510 D max_skbdata_used_num +10056514 D max_skbbuf_used_num +10056518 d skb_fail_count +1005651c D timer_table +10056524 D rltk_wlan_info +10056554 d timer_used_num +10056558 D max_timer_used_num +1005655c D Noisy_State +10056560 D pExportWlanIrqSemaphore +10056564 D gDeltaSwingTableXtal_MP_N_TxXtalTrack_8195A +10056582 D .ram.bss$$Limit +10056582 D __bss_end__ +10056588 B __ram_heap2_start__ 10070000 A __ram_heap2_end__ 1fff0000 D __ram_tcm_start__ 1fff0000 D __tcm_heap_start__ diff --git a/flasher.mk b/flasher.mk index 4c111ed..fd07669 100644 --- a/flasher.mk +++ b/flasher.mk @@ -167,7 +167,7 @@ flashimage2p: flashwebfs: @$(OPENOCD) -f interface/$(FLASHER).cfg -c "transport select swd" -f $(FLASHER_PATH)rtl8710.ocd -c "init" -c "adapter_khz $(FLASHER_SPEED)" -c "reset halt" \ -c "rtl8710_flash_auto_erase 1" -c "rtl8710_flash_auto_verify 1" \ - -c "rtl8710_flash_write $(BIN_DIR)/webpages.espfs 0xd0000" \ + -c "rtl8710_flash_write $(BIN_DIR)/ 0xd0000" \ -c "rtl8710_reboot" -c "reset run" -c shutdown diff --git a/project/inc/user_config.h b/project/inc/user_config.h new file mode 100644 index 0000000..8ff13eb --- /dev/null +++ b/project/inc/user_config.h @@ -0,0 +1,9 @@ +#ifndef _user_config_h_ +#define _user_config_h_ + +#define SYS_VERSION "1.0.0" +#define SDK_VERSION "3.5.3" + +#endif // _user_config_h_ + + diff --git a/project/inc/wifi_user_set.h b/project/inc/wifi_user_set.h index ec84d84..f0ad1cf 100644 --- a/project/inc/wifi_user_set.h +++ b/project/inc/wifi_user_set.h @@ -10,55 +10,60 @@ //========================================= //==== Wlan Config ======================== -#define DEF_WIFI_MODE RTW_MODE_STA // Стартовый режим WiFi: RTW_MODE_STA_AP, RTW_MODE_AP, RTW_MODE_STA, RTW_MODE_NONE -#define DEF_WIFI_AP_STATIONS 3 // Max number of STAs, should be 1..3, default is 3 -#define DEF_WIFI_COUNTRY RTW_COUNTRY_RU // Страна для установки органичений каналов и прочего... -#define DEF_WIFI_TX_PWR RTW_TX_PWR_PERCENTAGE_50 // RTW_TX_PWR_PERCENTAGE_75 // RTW_TX_PWR_PERCENTAGE_100 +#define DEF_WIFI_MODE RTW_MODE_STA_AP // Стартовый режим WiFi: RTW_MODE_STA_AP, RTW_MODE_AP, RTW_MODE_STA, RTW_MODE_NONE +#define DEF_WIFI_AP_STATIONS 3 // Max number of STAs, should be 1..3, default is 3 +#define DEF_WIFI_COUNTRY RTW_COUNTRY_RU // Регион использования WiFi... +#define DEF_WIFI_TX_PWR RTW_TX_PWR_PERCENTAGE_25 // RTW_TX_PWR_PERCENTAGE_75 // RTW_TX_PWR_PERCENTAGE_100 #define DEF_WIFI_BGN RTW_NETWORK_BGN // rtw_network_mode_t -#define DEF_WIFI_ST_SLEEP 0 // 0 - none, 1 - on +#define DEF_WIFI_ADAPTIVITY RTW_ADAPTIVITY_NORMAL // RTW_ADAPTIVITY_DISABLE/RTW_ADAPTIVITY_NORMAL/RTW_ADAPTIVITY_CARRIER_SENSE -#define DEF_LOAD_CFG ( 0 \ - | BID_WIFI_AP_CFG \ - | BID_WIFI_ST_CFG \ - | BID_AP_DHCP_CFG \ - | BID_ST_DHCP_CFG \ -)// | BID_WIFI_CFG \ +/* Опции загрузки конфигов по старту */ +//#define DEF_LOAD_CFG 0 // старт в назначенном режиме по умолчанию +//#define DEF_LOAD_CFG BID_ALL_WIFI_CFG // старт в назначенном общем режиме по умолчанию, с загрузками последних конфигураций ST и AP +#define DEF_LOAD_CFG (BID_ALL_WIFI_CFG | BID_WIFI_CFG) // старт в записанном режиме -#define DEF_SAVE_CFG ( 0 \ - | BID_WIFI_AP_CFG \ - | BID_WIFI_ST_CFG \ - | BID_AP_DHCP_CFG \ - | BID_ST_DHCP_CFG \ - | BID_WIFI_CFG \ -) +/* Опции разрешения записи конфигов по упсешному соединению или выполнению операции установок режимов WiFi без ошибок */ +#define DEF_SAVE_CFG (BID_ALL_WIFI_CFG | BID_WIFI_CFG) // сохранение по успешному соединению/выполненю для всех конфигов: + // (для ST или AP пишутся раздельно) с проверкой на изменения //==== Interface 0 - wlan0 = AP =========== #define DEF_AP_SSID "RTL871X" #define DEF_AP_PASSWORD "0123456789" -#define DEF_AP_SECURITY RTW_SECURITY_WPA2_AES_PSK // RTW_SECURITY_OPEN, RTW_SECURITY_WEP_PSK -#define DEF_AP_BEACON 100 // 100...6000 ms -#define DEF_AP_CHANNEL 1 // 1..14 -#define DEF_AP_CHANNEL 1 // 1..14 -#define DEF_AP_DHCP_MODE 1 // =0 dhcp off, =1 - dhcp on +/* Варианты типов Security для AP: + RTW_SECURITY_OPEN - Open Security + RTW_SECURITY_WPA_TKIP_PSK - WPA Security + RTW_SECURITY_WPA2_AES_PSK - WPA2 Security using AES cipher + RTW_SECURITY_WPA2_MIXED_PSK - WPA2 Security using AES and/or TKIP ciphers */ +#define DEF_AP_SECURITY RTW_SECURITY_WPA2_AES_PSK // WEP security is NOT IMPLEMENTED. It is NOT SECURE! +#define DEF_AP_BEACON 100 // 100...6000 ms +#define DEF_AP_CHANNEL 1 // 1..14 +#define DEF_AP_CHANNEL 1 // 1..14 +#define DEF_AP_DHCP_MODE 1 // =0 dhcp off, =1 - dhcp on #define DEF_AP_IP IP4ADDR(192,168,4,1) #define DEF_AP_MSK IP4ADDR(255,255,255,0) #define DEF_AP_GW IP4ADDR(192,168,4,1) -#define DEF_AP_DHCP_START 2 -#define DEF_AP_DHCP_STOP 15 +// if not defined DHCP_START && DHCP_STOP -> 2..255 +//#define DEF_AP_DHCP_START 2 // DHCP ip start xx.xx.xx.2 +//#define DEF_AP_DHCP_STOP 15 // DHCP ip stop xx.xx.xx.15 //==== Interface 1 - wlan1 = STA ========== -#define DEF_ST_SSID "HOMEAP" -#define DEF_ST_PASSWORD "0123456789" -#define DEF_ST_SECURITY RTW_SECURITY_WPA_WPA2_MIXED +#define DEF_ST_SSID "HOMEAP" // Имя SSID AP (роутера) для присоединения по умолчанию (первый старт) +#define DEF_ST_PASSWORD "0123456789" // Пароль AP (роутера) для присоединения по умолчанию (первый старт) +#define DEF_ST_SECURITY RTW_SECURITY_WPA_WPA2_MIXED // Тип Security #define DEF_ST_BSSID { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } // If bssid set is not ff.ff.ff.ff.ff.ff, -// station will connect to the router with both ssid[] and bssid[] matched. -#define DEF_ST_CHANNEL 1 // 1..14 -#define DEF_ST_AUTORECONNECT 3 // 0 - none, 1..254 - count, 255 - all -#define DEF_ST_RECONNECT_PAUSE 1 // 1 sec -#define DEF_ST_DHCP_MODE 1 // =0 dhcp off, =1 - dhcp on, =2 Static ip, =3 - auto +#define DEF_ST_USE_BSSID 0 // station will connect to the router with both ssid[] and bssid[] matched. +#define DEF_ST_CHANNEL 1 // 1..14 +#define DEF_ST_AUTORECONNECT 1 // 0 - none, 1..254 - count, 255 - all +#define DEF_ST_RECONNECT_PAUSE 1 // 5 sec +#define DEF_ST_SLEEP 3 // 0 - Off, 1 - IPS, 2 - LPS, 3 - IPS/LPS mode +#define DEF_ST_LPS_DTIM 0 // LPS DTIM +#define DEF_ST_DHCP_MODE 1 // =0 dhcp off, + // =1 - dhcp on, - динамический ip + // =2 Static ip, - fixed ip + // =3 - auto fix - старт в режиме "dhcp on", после получения ip - фиксация и переключение в режим рестартов со "Static ip" #define DEF_ST_IP IP4ADDR(192,168,1,100) #define DEF_ST_MSK IP4ADDR(255,255,255,0) #define DEF_ST_GW IP4ADDR(192,168,1,1) //==== Interface 2 - eth0 ================= -#define DEF_EH_DHCP_MODE 1 // =0 dhcp off, =1 - dhcp on +#define DEF_EH_DHCP_MODE 1 // =0 dhcp off, =1 - dhcp on #define DEF_EH_IP IP4ADDR(192,168,7,200) #define DEF_EH_MSK IP4ADDR(255,255,255,0) #define DEF_EH_GW IP4ADDR(192,168,7,1) diff --git a/project/src/user/wifi_console.c b/project/src/user/wifi_console.c index 6e5a675..b8af14d 100644 --- a/project/src/user/wifi_console.c +++ b/project/src/user/wifi_console.c @@ -22,6 +22,7 @@ extern struct netif xnetif[NET_IF_NUM]; //========================================================== //--- CONSOLE -------------------------- + // ATPN=[,password[,encryption[,auto reconnect[,reconnect pause]]]: WIFI Connect to AP LOCAL void fATPN(int argc, char *argv[]){ if(argc > 1) { @@ -35,28 +36,28 @@ LOCAL void fATPN(int argc, char *argv[]){ pswlen = strlen(wifi_st_cfg.password); strncpy(wifi_st_cfg.password, argv[2], NDIS_802_11_LENGTH_SSID); if(pswlen > 7) { - wifi_st_cfg.security_type = RTW_SECURITY_WPA2_AES_PSK; + wifi_st_cfg.security = IDX_SECURITY_WPA2_AES_PSK; } else if(!pswlen) { - wifi_st_cfg.security_type = RTW_SECURITY_OPEN; + wifi_st_cfg.security = IDX_SECURITY_OPEN; } else { printf("password len < 8!\n"); - wifi_st_cfg.security_type = RTW_SECURITY_OPEN; + wifi_st_cfg.security = IDX_SECURITY_OPEN; } } else { // default wifi_st_cfg.password[0] = 0; - wifi_st_cfg.security_type = RTW_SECURITY_OPEN; + wifi_st_cfg.security = IDX_SECURITY_OPEN; } if(argc > 3) { if(pswlen > 7) { - wifi_st_cfg.security_type = idx_to_rtw_security(atoi(argv[3])); + wifi_st_cfg.security = atoi(argv[3]); } else { printf("password len < 8!\n"); - wifi_st_cfg.security_type = RTW_SECURITY_OPEN; + wifi_st_cfg.security = IDX_SECURITY_OPEN; } } if(argc > 4) { @@ -68,6 +69,9 @@ LOCAL void fATPN(int argc, char *argv[]){ } else wifi_st_cfg.reconnect_pause = 5; show_wifi_st_cfg(); +#if CONFIG_WLAN_CONNECT_CB + connect_close(); +#endif wifi_run(wifi_run_mode | RTW_MODE_STA); } } @@ -85,22 +89,22 @@ LOCAL void fATPA(int argc, char *argv[]){ strncpy(wifi_ap_cfg.password, argv[2], NDIS_802_11_LENGTH_SSID); int i = strlen(wifi_ap_cfg.password); if(i > 7) { - wifi_ap_cfg.security_type = RTW_SECURITY_WPA2_AES_PSK; + wifi_ap_cfg.security = 1; // IDX_SECURITY_WPA2_AES_PSK; } else if(i == 0) { - wifi_ap_cfg.security_type = RTW_SECURITY_OPEN; + wifi_ap_cfg.security = 0; // IDX_SECURITY_OPEN; } else { printf("password len < 8!\n"); - wifi_ap_cfg.security_type = RTW_SECURITY_OPEN; + wifi_ap_cfg.security = 0; // IDX_SECURITY_OPEN; } } else { wifi_ap_cfg.password[0] = 0; - wifi_ap_cfg.security_type = RTW_SECURITY_OPEN; + wifi_ap_cfg.security = 0; // IDX_SECURITY_OPEN; } if(argc > 3) { - wifi_ap_cfg.security_type = (argv[3][0] == '0')? RTW_SECURITY_OPEN : RTW_SECURITY_WPA2_AES_PSK; + wifi_ap_cfg.security = (argv[3][0] == '0')? 0 : 1; //RTW_SECURITY_OPEN : RTW_SECURITY_WPA2_AES_PSK; } if(argc > 4) { wifi_ap_cfg.channel = atoi(argv[4]); @@ -117,6 +121,9 @@ LOCAL void fATPA(int argc, char *argv[]){ else wifi_ap_cfg.max_sta = 3; show_wifi_ap_cfg(); +#if CONFIG_WLAN_CONNECT_CB + connect_close(); +#endif wifi_run(wifi_run_mode | RTW_MODE_AP); } } @@ -126,9 +133,13 @@ LOCAL void fATPA(int argc, char *argv[]){ LOCAL void fATWR(int argc, char *argv[]){ rtw_mode_t mode = RTW_MODE_NONE; if(argc > 1) mode = atoi(argv[1]); +#if CONFIG_WLAN_CONNECT_CB + connect_close(); +#endif wifi_run(mode); } +#if CONFIG_WLAN_CONNECT_CB // Close connections LOCAL void fATOF(int argc, char *argv[]){ connect_close(); @@ -138,8 +149,25 @@ LOCAL void fATOF(int argc, char *argv[]){ LOCAL void fATON(int argc, char *argv[]){ connect_start(); } +#endif LOCAL void fATWI(int argc, char *argv[]) { +#if 1 + if(argc > 2) { + uint8_t c = argv[1][0] | 0x20; + if(c == 's') { + int i = atoi(argv[2]); + printf("Save configs(%d)..\n", i); + write_wifi_cfg(atoi(argv[2])); + } + else if(c == 'l') { + wifi_cfg.load_flg = atoi(argv[2]); + } + else if(c == 'm') { + wifi_cfg.mode = atoi(argv[2]); + } + } +#endif rtw_wifi_setting_t Setting; if((wifi_run_mode & RTW_MODE_AP) && wifi_get_setting(wlan_ap_name, &Setting) == 0) { @@ -163,22 +191,6 @@ LOCAL void fATWI(int argc, char *argv[]) { printf(&str_rom_57ch3Dch0A[25]); // "================================\n" show_wifi_st_cfg(); printf("\n"); -#if 1 - if(argc > 2) { - uint8_t c = argv[1][0] | 0x20; - if(c == 's') { - int i = atoi(argv[2]); - printf("Save configs(%d)..\n", i); - write_wifi_cfg(atoi(argv[2])); - } - else if(c == 'l') { - wifi_cfg.load_flg = atoi(argv[2]); - } - else if(c == 'm') { - wifi_cfg.mode = atoi(argv[2]); - } - } -#endif } extern uint8_t rtw_power_percentage_idx; @@ -212,77 +224,100 @@ LOCAL void fATSF(int argc, char *argv[]) printf("\nTSF: %08x%08x\n", (uint32_t)(tsf>>32), (uint32_t)(tsf)); } +LOCAL void fATWP(int argc, char *argv[]) { + if(argc > 1) { + release_wakelock(0xffff); + wifi_set_power_mode(1, 1); + wifi_set_lps_dtim(atoi(argv[1])); + } + else { + unsigned char x; + if(wifi_get_lps_dtim(&x) >= 0) { + printf("DTIM: %d\n", x); + } + } +} /* -------- WiFi Scan ------------------------------- */ -volatile uint8_t scan_end; -/* -------- WiFi Scan ------------------------------- */ -LOCAL rtw_result_t _scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) +LOCAL void scan_result_handler(internal_scan_handler_t* ap_scan_result) { - if (malloced_scan_result->scan_complete != RTW_TRUE) { - rtw_scan_result_t* record = &malloced_scan_result->ap_details; - record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ - if(scan_end == 1) { + if (ap_scan_result) { + if(ap_scan_result->scan_cnt) { printf("\nScan networks:\n\n"); printf("N\tType\tMAC\t\t\tSignal\tCh\tWPS\tSecyrity\tSSID\n\n"); - }; - printf("%d\t", scan_end++); - printf("%s\t", (record->bss_type == RTW_BSS_TYPE_ADHOC)? "Adhoc": "Infra"); - printf(MAC_FMT, MAC_ARG(record->BSSID.octet)); - printf("\t%d\t", record->signal_strength); - printf("%d\t", record->channel); - printf("%d\t", record->wps_type); - { - uint8 * s = rtw_security_to_str(record->security); - printf("%s\t", s); - if(strlen(s) < 8) printf("\t"); - } - printf("%s\n", record->SSID.val); + for(int i = 0 ; i < ap_scan_result->scan_cnt; i++) { + rtw_scan_result_t* record = &ap_scan_result->ap_details[i]; + printf("%d\t", i+1); + printf("%s\t", (record->bss_type == RTW_BSS_TYPE_ADHOC)? "Adhoc": "Infra"); + printf(MAC_FMT, MAC_ARG(record->BSSID.octet)); + printf("\t%d\t", record->signal_strength); + printf("%d\t", record->channel); + printf("%d\t", record->wps_type); + { + uint8 * s = rtw_security_to_str(record->security); + printf("%s\t", s); + if(strlen(s) < 8) printf("\t"); + } + record->SSID.val[record->SSID.len] = '\0'; + printf("%s\n", record->SSID.val); + } + + } } else { - scan_end = 0; - printf("\n"); + printf("Scan networks: None!\n"); } - return RTW_SUCCESS; } /* -------- WiFi Scan ------------------------------- */ -#define scan_channels 14 LOCAL void fATSN(int argc, char *argv[]) { - int i; - u8 *channel_list = (u8*)pvPortMalloc(scan_channels*2); - if(channel_list) { - scan_end = 1; - u8 * pscan_config = &channel_list[scan_channels]; - //parse command channel list - for(i = 1; i <= scan_channels; i++){ - *(channel_list + i - 1) = i; - *(pscan_config + i - 1) = PSCAN_ENABLE; - }; - if(wifi_set_pscan_chan(channel_list, pscan_config, scan_channels) < 0){ - printf("ERROR: wifi set partial scan channel fail\n"); - } else if(wifi_scan_networks(_scan_result_handler, NULL ) != RTW_SUCCESS){ - printf("ERROR: wifi scan failed\n"); - } else { - i = 300; - while(i-- && scan_end) { - vTaskDelay(10); - }; - }; - vPortFree(channel_list); - } else { - printf("ERROR: Can't malloc memory for channel list\n"); - }; + api_wifi_scan(scan_result_handler); } +#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP +extern void cmd_ap_wps(int argc, char **argv); +extern void cmd_wps(int argc, char **argv); +//extern void cmd_wifi_on(int argc, char **argv); +#endif +#if CONFIG_ENABLE_P2P +extern void cmd_wifi_p2p_start(int argc, char **argv); +extern void cmd_wifi_p2p_stop(int argc, char **argv); +extern void cmd_p2p_listen(int argc, char **argv); +extern void cmd_p2p_find(int argc, char **argv); +extern void cmd_p2p_peers(int argc, char **argv); +extern void cmd_p2p_info(int argc, char **argv); +extern void cmd_p2p_disconnect(int argc, char **argv); +extern void cmd_p2p_connect(int argc, char **argv); +extern void cmd_wifi_p2p_auto_go_start(int argc, char **argv); +extern void cmd_p2p_peers(int argc, char **argv); +#endif //CONFIG_ENABLE_P2P + MON_RAM_TAB_SECTION COMMAND_TABLE console_cmd_wifi_api[] = { {"ATPN", 1, fATPN, "=[,password[,encryption[,auto-reconnect[,reconnect pause]]]: WIFI Connect to AP"}, {"ATPA", 1, fATPA, "=[,password[,encryption[,channel[,hidden[,max connections]]]]]: Start WIFI AP"}, +#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP + {"WPS_AP", 1, cmd_ap_wps, "=[,pin]: WiFi AP WPS"}, + {"WPS_ST", 1, cmd_wps, "=[,pin]: WiFi Station WPS"}, +#endif +#if CONFIG_ENABLE_P2P + {"P2P_START", 0, cmd_wifi_p2p_start, ": p2p start" }, + {"P2P_ASTART", 0, cmd_wifi_p2p_auto_go_start, ": p2p auto go start" }, + {"P2P_STOP", 0, cmd_wifi_p2p_stop, ": p2p stop"}, + {"P2P_PEERS", 0, cmd_p2p_peers, ": p2p peers" }, + {"P2P_FIND", 0, cmd_p2p_find, ": p2p find"}, + {"P2P_INFO", 0, cmd_p2p_info, ": p2p info"}, + {"P2P_DISCCONNECT", 0, cmd_p2p_disconnect, ": p2p disconnect"}, + {"P2P_CONNECT", 0, cmd_p2p_connect, ": p2p connect"}, +#endif {"ATWR", 0, fATWR, ": WIFI Connect, Disconnect"}, +#if CONFIG_WLAN_CONNECT_CB {"ATON", 0, fATON, ": Open connections"}, - {"ATOF", 0, fATOF, ": Close connections"}, + {"ATOFF", 0, fATOF, ": Close connections"}, +#endif {"ATWI", 0, fATWI, ": WiFi Info"}, #if CONFIG_DEBUG_LOG > 3 {"ATWT", 1, fATWT, "=: WiFi tx power: 0 - 100%, 1 - 75%, 2 - 50%, 3 - 25%, 4 - 12.5%"}, {"ATSF", 0, fATSF, ": Test TSF value"}, #endif + {"ATWP", 0, fATWP, ": WiFi power"}, {"ATSN", 0, fATSN, ": Scan networks"} }; diff --git a/sdkset.mk b/sdkset.mk index 66cd58b..404c52e 100644 --- a/sdkset.mk +++ b/sdkset.mk @@ -114,6 +114,8 @@ SRC_C += sdk/component/common/api/wifi/wifi_promisc.c SRC_C += sdk/component/common/api/wifi/wifi_simple_config.c SRC_C += sdk/component/common/api/wifi/wifi_util.c SRC_C += sdk/component/common/api/lwip_netconf.c +SRC_C += sdk/component/common/api/wifi_api.c +SRC_C += sdk/component/common/api/wifi_api_scan.c #network - app #SRC_C += sdk/component/common/utilities/ssl_client.c @@ -387,7 +389,6 @@ ADD_SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvv #ADD_SRC_C += sdk/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c #ADD_SRC_C += sdk/component/soc/realtek/8195a/fwlib/src/hal_sdio_host.c #ADD_SRC_C += sdk/component/common/file_system/fatfs/disk_if/src/sdcard.c -ADD_SRC_C += sdk/component/common/api/wifi_api.c #============================================= # PROGECT #=============================================