diff options
Diffstat (limited to 'drivers/staging/rtl8188eu')
50 files changed, 2680 insertions, 253 deletions
diff --git a/drivers/staging/rtl8188eu/Makefile b/drivers/staging/rtl8188eu/Makefile index 0a617b4..1639a45 100644 --- a/drivers/staging/rtl8188eu/Makefile +++ b/drivers/staging/rtl8188eu/Makefile @@ -1,3 +1,5 @@ +EXTRA_CFLAGS += -I$(src)/include + r8188eu-y := \ core/rtw_ap.o \ core/rtw_br_ext.o \ @@ -28,6 +30,7 @@ r8188eu-y := \ hal/HalPhyRf.o \ hal/HalPhyRf_8188e.o \ hal/HalPwrSeqCmd.o \ + hal/Hal8188EFWImg_CE.o \ hal/Hal8188EPwrSeq.o \ hal/Hal8188ERateAdaptive.o\ hal/hal_intf.o \ @@ -64,4 +67,4 @@ r8188eu-y := \ obj-$(CONFIG_R8188EU) := r8188eu.o -ccflags-y += -D__CHECK_ENDIAN__ -I$(src)/include +ccflags-y += -D__CHECK_ENDIAN__ diff --git a/drivers/staging/rtl8188eu/TODO b/drivers/staging/rtl8188eu/TODO index f7f389c..e50aa50 100644 --- a/drivers/staging/rtl8188eu/TODO +++ b/drivers/staging/rtl8188eu/TODO @@ -2,6 +2,7 @@ TODO: - find and remove remaining code valid only for 5 HGz. Most of the obvious ones have been removed, but things like channel > 14 still exist. - find and remove any code for other chips that is left over +- convert to external firmware - convert any remaining unusual variable types - find codes that can use %pM and %Nph formatting - checkpatch.pl fixes - most of the remaining ones are lines too long. Many diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c index 2f548eb..2c73823 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ap.c +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c @@ -348,7 +348,7 @@ void expire_timeout_chk(struct adapter *padapter) if (psta->state & WIFI_SLEEP_STATE) { if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) { - /* to check if alive by another methods if station is at ps mode. */ + /* to check if alive by another methods if staion is at ps mode. */ psta->expire_to = pstapriv->expire_to; psta->state |= WIFI_STA_ALIVE_CHK_STATE; @@ -1115,9 +1115,6 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) return _FAIL; } - /* fix bug of flush_cam_entry at STOP AP mode */ - psta->state |= WIFI_AP_STATE; - rtw_indicate_connect(padapter); pmlmepriv->cur_network.join_res = true;/* for check if already set beacon */ return ret; } diff --git a/drivers/staging/rtl8188eu/core/rtw_br_ext.c b/drivers/staging/rtl8188eu/core/rtw_br_ext.c index 9f40742..fbca394 100644 --- a/drivers/staging/rtl8188eu/core/rtw_br_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_br_ext.c @@ -527,7 +527,7 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) case NAT25_CHECK: return -1; case NAT25_INSERT: - /* some multicast with source IP is all zero, maybe other case is illegal */ + /* some muticast with source IP is all zero, maybe other case is illegal */ /* in class A, B, C, host address is all zero or all one is illegal */ if (iph->saddr == 0) return 0; @@ -677,8 +677,9 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method) switch (method) { case NAT25_CHECK: if (!memcmp(skb->data+ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) - DEBUG_INFO("NAT25: Check IPX skb_copy\n"); + DEBUG_INFO("NAT25: Check IPX skb_copy\n"); return 0; + return -1; case NAT25_INSERT: DEBUG_INFO("NAT25: Insert IPX, Dest =%08x,%02x%02x%02x%02x%02x%02x,%04x Source =%08x,%02x%02x%02x%02x%02x%02x,%04x\n", ipx->ipx_dest.net, diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c index f45f4ed..9632ef4 100644 --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c @@ -218,7 +218,7 @@ _func_enter_; _func_exit_; } -static int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj) +int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj) { u8 bAllow = false; /* set to true to allow enqueuing cmd when hw_init_completed is false */ @@ -1162,7 +1162,7 @@ _func_enter_; else memcpy(&psetstakey_para->key, &psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, 16); - /* jeff: set this because at least sw key is ready */ + /* jeff: set this becasue at least sw key is ready */ padapter->securitypriv.busetkipkey = true; res = rtw_enqueue_cmd(pcmdpriv, ph2c); @@ -1667,7 +1667,7 @@ static void traffic_status_watchdog(struct adapter *padapter) pmlmepriv->LinkDetectInfo.bHigherBusyTxTraffic = bHigherBusyTxTraffic; } -static void dynamic_chk_wk_hdl(struct adapter *padapter, u8 *pbuf, int sz) +void dynamic_chk_wk_hdl(struct adapter *padapter, u8 *pbuf, int sz) { struct mlme_priv *pmlmepriv; diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c b/drivers/staging/rtl8188eu/core/rtw_efuse.c index 806f56f..869434c 100644 --- a/drivers/staging/rtl8188eu/core/rtw_efuse.c +++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c @@ -159,7 +159,7 @@ Efuse_CalculateWordCnts(u8 word_en) /* */ /* Description: */ /* Execute E-Fuse read byte operation. */ -/* Referred from SD1 Richard. */ +/* Refered from SD1 Richard. */ /* */ /* Assumption: */ /* 1. Boot from E-Fuse and successfully auto-load. */ @@ -214,7 +214,7 @@ ReadEFuseByte( /* Description: */ /* 1. Execute E-Fuse read byte operation according as map offset and */ /* save to E-Fuse table. */ -/* 2. Referred from SD1 Richard. */ +/* 2. Refered from SD1 Richard. */ /* */ /* Assumption: */ /* 1. Boot from E-Fuse and successfully auto-load. */ @@ -542,7 +542,7 @@ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) { u8 offset, word_en; u8 *map; - u8 newdata[PGPKT_DATA_SIZE + 1]; + u8 newdata[PGPKT_DATA_SIZE]; s32 i, idx; u8 ret = _SUCCESS; u16 mapLen = 0; @@ -564,7 +564,7 @@ u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data) offset = (addr >> 3); word_en = 0xF; - _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1); + _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE); i = addr & 0x7; /* index of one package */ idx = 0; /* data index */ @@ -634,7 +634,7 @@ u8 rtw_BT_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data { u8 offset, word_en; u8 *map; - u8 newdata[PGPKT_DATA_SIZE + 1]; + u8 newdata[PGPKT_DATA_SIZE]; s32 i, idx; u8 ret = _SUCCESS; u16 mapLen = 0; @@ -656,7 +656,7 @@ u8 rtw_BT_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data offset = (addr >> 3); word_en = 0xF; - _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1); + _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE); i = addr & 0x7; /* index of one package */ idx = 0; /* data index */ diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c index e6f98fb..6fc7742 100644 --- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c @@ -1129,7 +1129,7 @@ void rtw_macaddr_cfg(u8 *mac_addr) mac[3] = 0x87; mac[4] = 0x00; mac[5] = 0x00; - /* use default mac address */ + /* use default mac addresss */ memcpy(mac_addr, mac, ETH_ALEN); DBG_88E("MAC Address from efuse error, assign default one !!!\n"); } diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c index ac3535d..ea66071 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c @@ -557,7 +557,7 @@ _func_enter_; sq_final = ((u32)(src->PhyInfo.SignalQuality)+(u32)(dst->PhyInfo.SignalQuality)*4)/5; rssi_final = (src->Rssi+dst->Rssi*4)/5; } else { - /* bss info not receiving from the right channel, use the original RX signal infos */ + /* bss info not receving from the right channel, use the original RX signal infos */ ss_final = dst->PhyInfo.SignalStrength; sq_final = dst->PhyInfo.SignalQuality; rssi_final = dst->Rssi; @@ -636,7 +636,7 @@ _func_enter_; pnetwork->aid = 0; pnetwork->join_res = 0; - /* bss info not receiving from the right channel */ + /* bss info not receving from the right channel */ if (pnetwork->network.PhyInfo.SignalQuality == 101) pnetwork->network.PhyInfo.SignalQuality = 0; } else { @@ -656,7 +656,7 @@ _func_enter_; pnetwork->last_scanned = rtw_get_current_time(); - /* bss info not receiving from the right channel */ + /* bss info not receving from the right channel */ if (pnetwork->network.PhyInfo.SignalQuality == 101) pnetwork->network.PhyInfo.SignalQuality = 0; rtw_list_insert_tail(&(pnetwork->list), &(queue->queue)); @@ -670,7 +670,7 @@ _func_enter_; pnetwork->last_scanned = rtw_get_current_time(); - /* target.Reserved[0]== 1, means that scanned network is a bcn frame. */ + /* target.Reserved[0]== 1, means that scaned network is a bcn frame. */ if ((pnetwork->network.IELength > target->IELength) && (target->Reserved[0] == 1)) update_ie = false; @@ -1130,7 +1130,7 @@ static struct sta_info *rtw_joinbss_update_stainfo(struct adapter *padapter, str padapter->securitypriv.wps_ie_len = 0; } /* for A-MPDU Rx reordering buffer control for bmc_sta & sta_info */ - /* if A-MPDU Rx is enabled, resetting rx_ordering_ctrl wstart_b(indicate_seq) to default value = 0xffff */ + /* if A-MPDU Rx is enabled, reseting rx_ordering_ctrl wstart_b(indicate_seq) to default value = 0xffff */ /* todo: check if AP can send A-MPDU packets */ for (i = 0; i < 16; i++) { /* preorder_ctrl = &precvpriv->recvreorder_ctrl[i]; */ @@ -1210,7 +1210,7 @@ static void rtw_joinbss_update_network(struct adapter *padapter, struct wlan_net rtw_update_ht_cap(padapter, cur_network->network.IEs, cur_network->network.IELength); } -/* Notes: the function could be > passive_level (the same context as Rx tasklet) */ +/* Notes: the fucntion could be > passive_level (the same context as Rx tasklet) */ /* pnetwork: returns from rtw_joinbss_event_callback */ /* ptarget_wlan: found from scanned_queue */ /* if join_res > 0, for (fw_state == WIFI_STATION_STATE), we check if "ptarget_sta" & "ptarget_wlan" exist. */ @@ -2177,7 +2177,7 @@ _func_enter_; _func_exit_; } -/* the function is at passive_level */ +/* the fucntion is at passive_level */ void rtw_joinbss_reset(struct adapter *padapter) { u8 threshold; @@ -2205,7 +2205,7 @@ void rtw_joinbss_reset(struct adapter *padapter) } } -/* the function is >= passive_level */ +/* the fucntion is >= passive_level */ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len) { u32 ielen, out_len; @@ -2273,7 +2273,7 @@ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_ return phtpriv->ht_option; } -/* the function is > passive_level (in critical_section) */ +/* the fucntion is > passive_level (in critical_section) */ void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len) { u8 *p, max_ampdu_sz; @@ -2332,7 +2332,7 @@ void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len) else pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i]; } - /* switch to the 40M Hz mode according to the AP */ + /* switch to the 40M Hz mode accoring to the AP */ pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; switch ((pmlmeinfo->HT_info.infos[0] & 0x3)) { case HT_EXTCHNL_OFFSET_UPPER: diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c index 7ab5ff0..4b2eb8e 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c @@ -1852,7 +1852,7 @@ void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); @@ -2199,7 +2199,7 @@ static void issue_p2p_GO_response(struct adapter *padapter, u8 *raddr, u8 *frame struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); @@ -2349,7 +2349,7 @@ static void issue_p2p_GO_response(struct adapter *padapter, u8 *raddr, u8 *frame if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) { /* Commented by Albert 2011/03/08 */ /* According to the P2P specification */ - /* if the sending device will be client, the P2P Capability should be reserved of group negotiation response frame */ + /* if the sending device will be client, the P2P Capability should be reserved of group negotation response frame */ p2pie[p2pielen++] = 0; } else { /* Be group owner or meet the error case */ @@ -2561,7 +2561,7 @@ static void issue_p2p_GO_confirm(struct adapter *padapter, u8 *raddr, u8 result) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); @@ -2729,7 +2729,7 @@ void issue_p2p_invitation_request(struct adapter *padapter, u8 *raddr) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); @@ -2981,7 +2981,7 @@ void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr, u8 dialo struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); @@ -3175,7 +3175,7 @@ void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid, u8 ussidle struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct wifidirect_info *pwdinfo = &(padapter->wdinfo); @@ -3283,7 +3283,7 @@ void issue_probersp_p2p(struct adapter *padapter, unsigned char *da) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; unsigned char *mac; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); @@ -3534,7 +3534,7 @@ static int _issue_probereq_p2p(struct adapter *padapter, u8 *da, int wait_ack) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; unsigned char *mac; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); @@ -4484,7 +4484,7 @@ void issue_beacon(struct adapter *padapter, int timeout_ms) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; unsigned int rate_len; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); #if defined(CONFIG_88EU_AP_MODE) @@ -4713,7 +4713,7 @@ void issue_probersp(struct adapter *padapter, unsigned char *da, u8 is_valid_p2p struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; unsigned char *mac, *bssid; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); #if defined (CONFIG_88EU_AP_MODE) @@ -4876,7 +4876,7 @@ static int _issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *ps struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; unsigned char *mac; unsigned char bssrate[NumRates]; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); @@ -5013,7 +5013,7 @@ void issue_auth(struct adapter *padapter, struct sta_info *psta, unsigned short struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; unsigned int val32; u16 val16; #ifdef CONFIG_88EU_AP_MODE @@ -5153,7 +5153,7 @@ void issue_asocrsp(struct adapter *padapter, unsigned short status, struct sta_i struct pkt_attrib *pattrib; unsigned char *pbuf, *pframe; unsigned short val; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; @@ -5290,7 +5290,7 @@ void issue_assocreq(struct adapter *padapter) struct pkt_attrib *pattrib; unsigned char *pframe, *p; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; __le16 le_tmp; unsigned int i, j, ie_len, index = 0; unsigned char rf_type, bssrate[NumRates], sta_bssrate[NumRates]; @@ -5625,7 +5625,7 @@ static int _issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv; struct mlme_ext_priv *pmlmeext; struct mlme_ext_info *pmlmeinfo; @@ -5740,8 +5740,7 @@ static int _issue_qos_nulldata(struct adapter *padapter, unsigned char *da, u16 struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; - unsigned short *qc; + unsigned short *fctrl, *qc; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); @@ -5861,7 +5860,7 @@ static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned s struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); @@ -5973,7 +5972,7 @@ void issue_action_spct_ch_switch (struct adapter *padapter, u8 *ra, u8 new_ch, u struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); @@ -6041,7 +6040,7 @@ void issue_action_BA(struct adapter *padapter, unsigned char *raddr, unsigned ch struct pkt_attrib *pattrib; u8 *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + u16 *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); @@ -6163,7 +6162,7 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct wlan_network *pnetwork = NULL; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; @@ -6699,7 +6698,7 @@ u8 collect_bss_info(struct adapter *padapter, union recv_frame *precv_frame, str } } - /* mark bss info receiving from nearby channel as SignalQuality 101 */ + /* mark bss info receving from nearby channel as SignalQuality 101 */ if (bssid->Configuration.DSConfig != rtw_get_oper_ch(padapter)) bssid->PhyInfo.SignalQuality = 101; return _SUCCESS; @@ -8111,7 +8110,7 @@ u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf) Save_DM_Func_Flag(padapter); Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, false); - /* config the initial gain under scanning, need to write the BB registers */ + /* config the initial gain under scaning, need to write the BB registers */ #ifdef CONFIG_88EU_P2P if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) initialgain = 0x1E; diff --git a/drivers/staging/rtl8188eu/core/rtw_p2p.c b/drivers/staging/rtl8188eu/core/rtw_p2p.c index f46cab1..8cf915f 100644 --- a/drivers/staging/rtl8188eu/core/rtw_p2p.c +++ b/drivers/staging/rtl8188eu/core/rtw_p2p.c @@ -135,7 +135,7 @@ static void issue_group_disc_req(struct wifidirect_info *pwdinfo, u8 *da) struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct adapter *padapter = pwdinfo->padapter; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); @@ -192,7 +192,7 @@ static void issue_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 s struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct adapter *padapter = pwdinfo->padapter; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); @@ -272,7 +272,7 @@ static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8 *raddr, struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); @@ -342,7 +342,7 @@ static void issue_p2p_presence_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 struct pkt_attrib *pattrib; unsigned char *pframe; struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + unsigned short *fctrl; struct adapter *padapter = pwdinfo->padapter; struct xmit_priv *pxmitpriv = &(padapter->xmitpriv); struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c index b45461f..58a1661 100644 --- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c +++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c @@ -193,7 +193,7 @@ void rtw_ps_processor(struct adapter *padapter) if (pwrpriv->ips_mode_req == IPS_NONE) goto exit; - if (!rtw_pwr_unassociated_idle(padapter)) + if (rtw_pwr_unassociated_idle(padapter) == false) goto exit; if ((pwrpriv->rf_pwrstate == rf_on) && ((pwrpriv->pwr_state_check_cnts%4) == 0)) { diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c index 9f0f30f7..2011657 100644 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c @@ -204,14 +204,11 @@ void rtw_init_recvframe(union recv_frame *precvframe, struct recv_priv *precvpri int rtw_free_recvframe(union recv_frame *precvframe, struct __queue *pfree_recv_queue) { unsigned long irqL; - struct adapter *padapter; - struct recv_priv *precvpriv; + struct adapter *padapter = precvframe->u.hdr.adapter; + struct recv_priv *precvpriv = &padapter->recvpriv; _func_enter_; - if (!precvframe) - return _FAIL; - padapter = precvframe->u.hdr.adapter; - precvpriv = &padapter->recvpriv; + if (precvframe->u.hdr.pkt) { dev_kfree_skb_any(precvframe->u.hdr.pkt);/* free skb by driver */ precvframe->u.hdr.pkt = NULL; @@ -1586,7 +1583,7 @@ _func_enter_; pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len; plist = get_next(plist); - } + }; /* free the defrag_q queue and return the prframe */ rtw_free_recvframe_queue(defrag_q, pfree_recv_queue); @@ -1801,14 +1798,16 @@ static int amsdu_to_msdu(struct adapter *padapter, union recv_frame *prframe) memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, ETH_ALEN); } - /* Indicate the packets to upper layer */ - /* Insert NAT2.5 RX here! */ - sub_skb->protocol = eth_type_trans(sub_skb, padapter->pnetdev); - sub_skb->dev = padapter->pnetdev; + /* Indicat the packets to upper layer */ + if (sub_skb) { + /* Insert NAT2.5 RX here! */ + sub_skb->protocol = eth_type_trans(sub_skb, padapter->pnetdev); + sub_skb->dev = padapter->pnetdev; - sub_skb->ip_summed = CHECKSUM_NONE; + sub_skb->ip_summed = CHECKSUM_NONE; - netif_rx(sub_skb); + netif_rx(sub_skb); + } } exit: diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c b/drivers/staging/rtl8188eu/core/rtw_security.c index e088457..0f076d0 100644 --- a/drivers/staging/rtl8188eu/core/rtw_security.c +++ b/drivers/staging/rtl8188eu/core/rtw_security.c @@ -916,7 +916,7 @@ _func_enter_; add1b[i] = 0x00; } - swap_halfs[0] = in[2]; /* Swap halves */ + swap_halfs[0] = in[2]; /* Swap halfs */ swap_halfs[1] = in[3]; swap_halfs[2] = in[0]; swap_halfs[3] = in[1]; diff --git a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c index cd3c9a7..c2977be 100644 --- a/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/staging/rtl8188eu/core/rtw_sta_mgt.c @@ -267,8 +267,9 @@ _func_enter_; rtw_mfree_sta_priv_lock(pstapriv); - if (pstapriv->pallocated_stainfo_buf) + if (pstapriv->pallocated_stainfo_buf) { rtw_vmfree(pstapriv->pallocated_stainfo_buf, sizeof(struct sta_info)*NUM_STA+4); + } } _func_exit_; @@ -314,7 +315,7 @@ _func_enter_; rtw_list_insert_tail(&psta->hash_list, phash_list); - pstapriv->asoc_sta_count++; + pstapriv->asoc_sta_count++ ; _exit_critical_bh(&(pstapriv->sta_hash_lock), &irql2); @@ -418,7 +419,7 @@ _func_enter_; _cancel_timer_ex(&psta->addba_retry_timer); /* for A-MPDU Rx reordering buffer control, cancel reordering_ctrl_timer */ - for (i = 0; i < 16; i++) { + for (i = 0; i < 16 ; i++) { unsigned long irql; struct list_head *phead, *plist; union recv_frame *prframe; diff --git a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c index 153ec61..8018edd 100644 --- a/drivers/staging/rtl8188eu/core/rtw_wlan_util.c +++ b/drivers/staging/rtl8188eu/core/rtw_wlan_util.c @@ -80,7 +80,7 @@ int cckratesonly_included(unsigned char *rate, int ratelen) for (i = 0; i < ratelen; i++) { if ((((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) && (((rate[i]) & 0x7f) != 11) && (((rate[i]) & 0x7f) != 22)) - return false; + return false; } return true; @@ -766,7 +766,7 @@ void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE) for (i = 0; i < (pIE->Length); i++) { if (i != 2) { - /* Got the endian issue here. */ + /* Got the endian issue here. */ pmlmeinfo->HT_caps.u.HT_cap[i] &= (pIE->data[i]); } else { /* modify from fw by Thomas 2010/11/17 */ @@ -1096,13 +1096,13 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len) } kfree(bssid); - _func_exit_; return _SUCCESS; _mismatch: kfree(bssid); - _func_exit_; return _FAIL; + + _func_exit_; } void update_beacon_info(struct adapter *padapter, u8 *pframe, uint pkt_len, struct sta_info *psta) @@ -1186,7 +1186,7 @@ unsigned int should_forbid_n_rate(struct adapter *padapter) case _RSN_IE_2_: if ((_rtw_memcmp((pIE->data + 8), RSN_CIPHER_SUITE_CCMP, 4)) || (_rtw_memcmp((pIE->data + 12), RSN_CIPHER_SUITE_CCMP, 4))) - return false; + return false; default: break; } @@ -1368,21 +1368,21 @@ void update_tx_basic_rate(struct adapter *padapter, u8 wirelessmode) #ifdef CONFIG_88EU_P2P struct wifidirect_info *pwdinfo = &padapter->wdinfo; - /* Added by Albert 2011/03/22 */ - /* In the P2P mode, the driver should not support the b mode. */ - /* So, the Tx packet shouldn't use the CCK rate */ + /* Added by Albert 2011/03/22 */ + /* In the P2P mode, the driver should not support the b mode. */ + /* So, the Tx packet shouldn't use the CCK rate */ if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) return; #endif /* CONFIG_88EU_P2P */ _rtw_memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX); - if ((wirelessmode & WIRELESS_11B) && (wirelessmode == WIRELESS_11B)) + if ((wirelessmode & WIRELESS_11B) && (wirelessmode == WIRELESS_11B)) { memcpy(supported_rates, rtw_basic_rate_cck, 4); - else if (wirelessmode & WIRELESS_11B) + } else if (wirelessmode & WIRELESS_11B) { memcpy(supported_rates, rtw_basic_rate_mix, 7); - else + } else { memcpy(supported_rates, rtw_basic_rate_ofdm, 3); - + } if (wirelessmode & WIRELESS_11B) update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB); @@ -1435,7 +1435,7 @@ unsigned char check_assoc_AP(u8 *pframe, uint len) DBG_88E("link to Airgo Cap\n"); return HT_IOT_PEER_AIRGO; } else if (_rtw_memcmp(pIE->data, EPIGRAM_OUI, 3)) { - epigram_vendor_flag = 1; + epigram_vendor_flag = 1; if (ralink_vendor_flag) { DBG_88E("link to Tenda W311R AP\n"); return HT_IOT_PEER_TENDA; diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c b/drivers/staging/rtl8188eu/core/rtw_xmit.c index a594e51..bb5cd95 100644 --- a/drivers/staging/rtl8188eu/core/rtw_xmit.c +++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c @@ -1556,7 +1556,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, str xmitframe_phead = get_list_head(pframe_queue); xmitframe_plist = get_next(xmitframe_phead); - if (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { + while (!rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) { pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list); xmitframe_plist = get_next(xmitframe_plist); @@ -1564,7 +1564,12 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, str rtw_list_delete(&pxmitframe->list); ptxservq->qcnt--; + + break; + + pxmitframe = NULL; } + return pxmitframe; } diff --git a/drivers/staging/rtl8188eu/hal/Hal8188EFWImg_CE.c b/drivers/staging/rtl8188eu/hal/Hal8188EFWImg_CE.c new file mode 100644 index 0000000..95759be --- /dev/null +++ b/drivers/staging/rtl8188eu/hal/Hal8188EFWImg_CE.c @@ -0,0 +1,1761 @@ +/****************************************************************************** +* +* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along with +* this program; if not, write to the Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA +* +* +******************************************************************************/ +#include "odm_precomp.h" + +const u8 Rtl8188EFwImgArray[Rtl8188EFWImgArrayLength] = { + 0xE1, 0x88, 0x10, 0x00, 0x0B, 0x00, 0x01, 0x00, + 0x01, 0x21, 0x11, 0x27, 0x30, 0x36, 0x00, 0x00, + 0x2D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x45, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC1, 0x6F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xA1, 0xE6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x56, 0xF7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC2, 0xAF, 0x80, 0xFE, 0x32, 0x12, 0x42, 0x04, + 0x85, 0xD0, 0x0B, 0x75, 0xD0, 0x08, 0xAA, 0xE0, + 0xC2, 0x8C, 0xE5, 0x8A, 0x24, 0x67, 0xF5, 0x8A, + 0xE5, 0x8C, 0x34, 0x79, 0xF5, 0x8C, 0xD2, 0x8C, + 0xEC, 0x24, 0x89, 0xF8, 0xE6, 0xBC, 0x03, 0x02, + 0x74, 0xFF, 0xC3, 0x95, 0x81, 0xB4, 0x40, 0x00, + 0x40, 0xCE, 0x79, 0x04, 0x78, 0x80, 0x16, 0xE6, + 0x08, 0x70, 0x0B, 0xC2, 0xAF, 0xE6, 0x30, 0xE1, + 0x03, 0x44, 0x18, 0xF6, 0xD2, 0xAF, 0x08, 0xD9, + 0xED, 0xEA, 0x8B, 0xD0, 0x22, 0xE5, 0x0C, 0xFF, + 0x23, 0x24, 0x81, 0xF8, 0x0F, 0x08, 0x08, 0xBF, + 0x04, 0x04, 0x7F, 0x00, 0x78, 0x81, 0xE6, 0x30, + 0xE4, 0xF2, 0x00, 0xE5, 0x0C, 0xC3, 0x9F, 0x50, + 0x20, 0x05, 0x0C, 0x74, 0x88, 0x25, 0x0C, 0xF8, + 0xE6, 0xFD, 0xA6, 0x81, 0x08, 0xE6, 0xAE, 0x0C, + 0xBE, 0x03, 0x02, 0x74, 0xFF, 0xCD, 0xF8, 0xE8, + 0x6D, 0x60, 0xE0, 0x08, 0xE6, 0xC0, 0xE0, 0x80, + 0xF6, 0xE5, 0x0C, 0xD3, 0x9F, 0x40, 0x27, 0xE5, + 0x0C, 0x24, 0x89, 0xF8, 0xE6, 0xAE, 0x0C, 0xBE, + 0x03, 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xCD, + 0xF8, 0xE5, 0x81, 0x6D, 0x60, 0x06, 0xD0, 0xE0, + 0xF6, 0x18, 0x80, 0xF5, 0xE5, 0x0C, 0x24, 0x88, + 0xC8, 0xF6, 0x15, 0x0C, 0x80, 0xD3, 0xE5, 0x0C, + 0x23, 0x24, 0x81, 0xF8, 0x7F, 0x04, 0xC2, 0xAF, + 0xE6, 0x30, 0xE0, 0x03, 0x10, 0xE2, 0x0C, 0x7F, + 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, + 0x08, 0x54, 0xF4, 0x54, 0x7C, 0xC6, 0xD2, 0xAF, + 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x88, 0xA6, + 0x81, 0x74, 0x03, 0x60, 0x06, 0xFF, 0x08, 0x76, + 0xFF, 0xDF, 0xFB, 0x7F, 0x04, 0xE4, 0x78, 0x80, + 0xF6, 0x08, 0xF6, 0x08, 0xDF, 0xFA, 0x78, 0x81, + 0x76, 0x30, 0x90, 0x45, 0xDE, 0x74, 0x01, 0x93, + 0xC0, 0xE0, 0xE4, 0x93, 0xC0, 0xE0, 0x43, 0x89, + 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, + 0x8C, 0xD2, 0xAF, 0x22, 0x03, 0xEF, 0xD3, 0x94, + 0x03, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, + 0x2F, 0x2F, 0xF8, 0xE6, 0x20, 0xE5, 0xF4, 0xC2, + 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, + 0x0C, 0xEE, 0xC3, 0x9F, 0x50, 0x21, 0x0E, 0x74, + 0x88, 0x2E, 0xF8, 0xE6, 0xF9, 0x08, 0xE6, 0x18, + 0xBE, 0x03, 0x02, 0x74, 0xFF, 0xFD, 0xED, 0x69, + 0x60, 0x09, 0x09, 0xE7, 0x19, 0x19, 0xF7, 0x09, + 0x09, 0x80, 0xF3, 0x16, 0x16, 0x80, 0xDA, 0xEE, + 0xD3, 0x9F, 0x40, 0x04, 0x05, 0x81, 0x05, 0x81, + 0xEE, 0xD3, 0x9F, 0x40, 0x22, 0x74, 0x88, 0x2E, + 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, + 0xA9, 0x81, 0x18, 0x06, 0x06, 0xE6, 0xFD, 0xED, + 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, + 0xF7, 0x19, 0x80, 0xF3, 0x1E, 0x80, 0xD9, 0xEF, + 0x24, 0x88, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, + 0x04, 0x90, 0x45, 0xDE, 0x93, 0xF6, 0x08, 0xEF, + 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, + 0x94, 0x03, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, + 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, + 0xC2, 0xAF, 0xE6, 0x54, 0x8C, 0xF6, 0xD2, 0xAF, + 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x88, 0x2F, + 0xF8, 0xE6, 0xF5, 0x81, 0x02, 0x42, 0x4D, 0x50, + 0x2E, 0x74, 0x89, 0x2F, 0xF8, 0xE6, 0xBF, 0x03, + 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xF9, 0x74, + 0x88, 0x2F, 0xF8, 0xFB, 0xE6, 0xFC, 0xE9, 0x6C, + 0x60, 0x08, 0xA8, 0x05, 0xE7, 0xF6, 0x1D, 0x19, + 0x80, 0xF4, 0xA8, 0x03, 0xA6, 0x05, 0x1F, 0xE5, + 0x0C, 0xB5, 0x07, 0xE3, 0x7F, 0x00, 0x22, 0x74, + 0x89, 0x2F, 0xF8, 0xE6, 0xFD, 0x18, 0x86, 0x01, + 0x0F, 0x74, 0x88, 0x2F, 0xF8, 0xA6, 0x01, 0x08, + 0x86, 0x04, 0xE5, 0x0C, 0xB5, 0x07, 0x02, 0xAC, + 0x81, 0xED, 0x6C, 0x60, 0x08, 0x0D, 0x09, 0xA8, + 0x05, 0xE6, 0xF7, 0x80, 0xF4, 0xE5, 0x0C, 0xB5, + 0x07, 0xDE, 0x89, 0x81, 0x7F, 0x00, 0x22, 0xEF, + 0xD3, 0x94, 0x03, 0x40, 0x03, 0x7F, 0xFF, 0x22, + 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xC2, 0xAF, 0xE6, + 0x30, 0xE5, 0x05, 0x30, 0xE0, 0x02, 0xD2, 0xE4, + 0xD2, 0xE2, 0xC6, 0xD2, 0xAF, 0x7F, 0x00, 0x30, + 0xE2, 0x01, 0x0F, 0x02, 0x42, 0x4C, 0x8F, 0xF0, + 0xE4, 0xFF, 0xFE, 0xE5, 0x0C, 0x23, 0x24, 0x80, + 0xF8, 0xC2, 0xA9, 0x30, 0xF7, 0x0D, 0x7F, 0x08, + 0xE6, 0x60, 0x0B, 0x2D, 0xF6, 0x60, 0x30, 0x50, + 0x2E, 0x80, 0x07, 0x30, 0xF1, 0x06, 0xED, 0xF6, + 0x60, 0x25, 0x7E, 0x02, 0x08, 0x30, 0xF0, 0x10, + 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, + 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, 0x04, 0x80, 0x12, + 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, + 0x4E, 0xF6, 0xD2, 0xAF, 0x02, 0x42, 0x4D, 0x7F, + 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, + 0x56, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x4F, 0xFF, + 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, + 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, + 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xEF, + 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, + 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, + 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, + 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, + 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xE2, 0xFC, 0x08, + 0xE2, 0xFD, 0x08, 0xE2, 0xFE, 0x08, 0xE2, 0xFF, + 0x22, 0xE2, 0xFB, 0x08, 0xE2, 0xF9, 0x08, 0xE2, + 0xFA, 0x08, 0xE2, 0xCB, 0xF8, 0x22, 0xEC, 0xF2, + 0x08, 0xED, 0xF2, 0x08, 0xEE, 0xF2, 0x08, 0xEF, + 0xF2, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, 0xE5, + 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, + 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, + 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x22, + 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, + 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, + 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, + 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, + 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x02, 0x45, + 0x8C, 0x02, 0x42, 0xDD, 0xE4, 0x93, 0xA3, 0xF8, + 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, + 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, + 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, + 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, + 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, + 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, + 0x10, 0x20, 0x40, 0x80, 0x90, 0x45, 0xD1, 0xE4, + 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, + 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, + 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, + 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, + 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, + 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, + 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, + 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, + 0xBE, 0x00, 0x41, 0x82, 0x09, 0x00, 0x41, 0x82, + 0x0A, 0x00, 0x41, 0x82, 0x17, 0x00, 0x59, 0xE2, + 0x5C, 0x24, 0x5E, 0x5D, 0x5F, 0xA1, 0xC0, 0xE0, + 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, + 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, + 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, + 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xE6, + 0xF0, 0x74, 0x45, 0xA3, 0xF0, 0xD1, 0x35, 0x74, + 0xE6, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x45, + 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, + 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, + 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, + 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x00, 0x54, + 0xE0, 0x55, 0x35, 0xF5, 0x39, 0xA3, 0xE0, 0x55, + 0x36, 0xF5, 0x3A, 0xA3, 0xE0, 0x55, 0x37, 0xF5, + 0x3B, 0xA3, 0xE0, 0x55, 0x38, 0xF5, 0x3C, 0xAD, + 0x39, 0x7F, 0x54, 0x12, 0x32, 0x1E, 0xAD, 0x3A, + 0x7F, 0x55, 0x12, 0x32, 0x1E, 0xAD, 0x3B, 0x7F, + 0x56, 0x12, 0x32, 0x1E, 0xAD, 0x3C, 0x7F, 0x57, + 0x12, 0x32, 0x1E, 0x53, 0x91, 0xEF, 0x22, 0xC0, + 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, + 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, + 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, + 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, + 0x6F, 0xF0, 0x74, 0x46, 0xA3, 0xF0, 0x12, 0x6C, + 0x78, 0xE5, 0x41, 0x30, 0xE4, 0x04, 0x7F, 0x02, + 0x91, 0x27, 0xE5, 0x41, 0x30, 0xE6, 0x03, 0x12, + 0x6C, 0xD5, 0xE5, 0x43, 0x30, 0xE0, 0x03, 0x12, + 0x51, 0xC2, 0xE5, 0x43, 0x30, 0xE1, 0x03, 0x12, + 0x4D, 0x0C, 0xE5, 0x43, 0x30, 0xE2, 0x03, 0x12, + 0x4C, 0xC1, 0xE5, 0x43, 0x30, 0xE3, 0x03, 0x12, + 0x6C, 0xE2, 0xE5, 0x43, 0x30, 0xE4, 0x03, 0x12, + 0x6D, 0x04, 0xE5, 0x43, 0x30, 0xE5, 0x03, 0x12, + 0x6D, 0x33, 0xE5, 0x43, 0x30, 0xE6, 0x02, 0xF1, + 0x0F, 0xE5, 0x44, 0x30, 0xE1, 0x03, 0x12, 0x51, + 0x7F, 0x74, 0x6F, 0x04, 0x90, 0x01, 0xC4, 0xF0, + 0x74, 0x46, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, + 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, + 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, + 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, + 0x80, 0xDE, 0xE0, 0xB4, 0x01, 0x13, 0x90, 0x81, + 0x27, 0xE0, 0x60, 0x0D, 0x90, 0x81, 0x2B, 0xE0, + 0x54, 0xFE, 0xF0, 0x54, 0x07, 0x70, 0x02, 0xF1, + 0x2A, 0x22, 0x90, 0x81, 0x1F, 0xE0, 0x90, 0x81, + 0x29, 0x30, 0xE0, 0x05, 0xE0, 0xFF, 0x02, 0x74, + 0x8F, 0xE0, 0xFF, 0x7D, 0x01, 0xD3, 0x10, 0xAF, + 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x82, 0x13, 0xED, + 0xF0, 0x90, 0x81, 0x2A, 0xE0, 0x90, 0x82, 0x14, + 0xF0, 0x90, 0x81, 0x24, 0xE0, 0xFE, 0xC4, 0x13, + 0x13, 0x54, 0x03, 0x30, 0xE0, 0x03, 0x02, 0x48, + 0xA0, 0xEE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, + 0x30, 0xE0, 0x03, 0x02, 0x48, 0xA0, 0x90, 0x82, + 0x14, 0xE0, 0xFE, 0x6F, 0x70, 0x03, 0x02, 0x48, + 0xA0, 0xEF, 0x70, 0x03, 0x02, 0x48, 0x17, 0x24, + 0xFE, 0x70, 0x03, 0x02, 0x48, 0x50, 0x24, 0xFE, + 0x60, 0x51, 0x24, 0xFC, 0x70, 0x03, 0x02, 0x48, + 0x8B, 0x24, 0xFC, 0x60, 0x03, 0x02, 0x48, 0xA0, + 0xEE, 0xB4, 0x0E, 0x03, 0x12, 0x49, 0x5E, 0x90, + 0x82, 0x14, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, + 0x49, 0x93, 0x90, 0x82, 0x14, 0xE0, 0xB4, 0x06, + 0x03, 0x12, 0x49, 0x34, 0x90, 0x82, 0x14, 0xE0, + 0xB4, 0x04, 0x0F, 0x90, 0x82, 0x13, 0xE0, 0xFF, + 0x60, 0x05, 0x12, 0x73, 0x75, 0x80, 0x03, 0x12, + 0x66, 0x26, 0x90, 0x82, 0x14, 0xE0, 0x64, 0x08, + 0x60, 0x03, 0x02, 0x48, 0xA0, 0x12, 0x73, 0xD3, + 0x02, 0x48, 0xA0, 0x90, 0x82, 0x14, 0xE0, 0x70, + 0x05, 0x7F, 0x01, 0x12, 0x49, 0x93, 0x90, 0x82, + 0x14, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x49, 0x34, + 0x90, 0x82, 0x14, 0xE0, 0xB4, 0x0E, 0x09, 0x12, + 0x48, 0xA5, 0xBF, 0x01, 0x03, 0x12, 0x49, 0x5E, + 0x90, 0x82, 0x14, 0xE0, 0x64, 0x0C, 0x60, 0x02, + 0x01, 0xA0, 0x11, 0xA5, 0xEF, 0x64, 0x01, 0x60, + 0x02, 0x01, 0xA0, 0x11, 0xFA, 0x01, 0xA0, 0x90, + 0x82, 0x14, 0xE0, 0xB4, 0x0E, 0x07, 0x11, 0xA5, + 0xBF, 0x01, 0x02, 0x31, 0x5E, 0x90, 0x82, 0x14, + 0xE0, 0xB4, 0x06, 0x02, 0x31, 0x34, 0x90, 0x82, + 0x14, 0xE0, 0xB4, 0x0C, 0x07, 0x11, 0xA5, 0xBF, + 0x01, 0x02, 0x11, 0xFA, 0x90, 0x82, 0x14, 0xE0, + 0x64, 0x04, 0x70, 0x5C, 0x12, 0x72, 0xF5, 0xEF, + 0x64, 0x01, 0x70, 0x54, 0x31, 0xBE, 0x80, 0x50, + 0x90, 0x82, 0x14, 0xE0, 0xB4, 0x0E, 0x07, 0x11, + 0xA5, 0xBF, 0x01, 0x02, 0x31, 0x5E, 0x90, 0x82, + 0x14, 0xE0, 0xB4, 0x06, 0x02, 0x31, 0x34, 0x90, + 0x82, 0x14, 0xE0, 0xB4, 0x0C, 0x07, 0x11, 0xA5, + 0xBF, 0x01, 0x02, 0x11, 0xFA, 0x90, 0x82, 0x14, + 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x31, 0x93, 0x90, + 0x82, 0x14, 0xE0, 0xB4, 0x04, 0x1A, 0x12, 0x73, + 0xBB, 0x80, 0x15, 0x90, 0x82, 0x14, 0xE0, 0xB4, + 0x0C, 0x0E, 0x90, 0x81, 0x25, 0xE0, 0xFF, 0x13, + 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0x31, 0xB1, + 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD1, 0xAB, 0xEF, + 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x01, 0xF0, 0x80, 0x3D, 0x90, 0x81, 0x24, 0xE0, + 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, + 0x08, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x80, + 0x28, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x08, + 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x80, 0x19, + 0x90, 0x81, 0x29, 0xE0, 0xD3, 0x94, 0x04, 0x40, + 0x08, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x80, + 0x08, 0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, + 0x22, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x7F, + 0x00, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, + 0x70, 0x31, 0x90, 0x81, 0x25, 0xE0, 0x54, 0xFD, + 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x7F, + 0x01, 0xF1, 0x0D, 0xBF, 0x01, 0x12, 0x90, 0x81, + 0x24, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x81, 0x2A, + 0x74, 0x0E, 0xF0, 0x90, 0x81, 0x23, 0xF0, 0x22, + 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, + 0xB8, 0x04, 0xF0, 0x22, 0x90, 0x81, 0x25, 0xE0, + 0x90, 0x06, 0x04, 0x20, 0xE0, 0x0C, 0xE0, 0x44, + 0x40, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x04, 0xF0, + 0x80, 0x0E, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x81, + 0x2A, 0x74, 0x0C, 0xF0, 0x90, 0x81, 0x23, 0xF0, + 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x81, + 0x25, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x08, 0x90, + 0x81, 0x2A, 0x74, 0x0C, 0xF0, 0x80, 0x1E, 0x90, + 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE0, 0x44, + 0x80, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x04, 0xF0, + 0x90, 0x05, 0x27, 0xE0, 0x44, 0x80, 0xF0, 0x90, + 0x81, 0x23, 0x74, 0x04, 0xF0, 0x90, 0x05, 0x22, + 0xE4, 0xF0, 0x22, 0x90, 0x82, 0x15, 0xEF, 0xF0, + 0x12, 0x54, 0x65, 0x90, 0x82, 0x15, 0xE0, 0x60, + 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x81, + 0x2A, 0x74, 0x04, 0xF0, 0x90, 0x81, 0x23, 0xF0, + 0x22, 0x31, 0xE3, 0x90, 0x81, 0x2A, 0x74, 0x08, + 0xF0, 0x90, 0x81, 0x23, 0xF0, 0x22, 0x90, 0x05, + 0x22, 0x74, 0xFF, 0xF0, 0xF1, 0x3A, 0x90, 0x01, + 0x37, 0x74, 0x02, 0xF0, 0xFD, 0x7F, 0x03, 0x51, + 0x57, 0x31, 0xE3, 0xE4, 0x90, 0x81, 0x2A, 0xF0, + 0x90, 0x81, 0x23, 0xF0, 0x22, 0x90, 0x05, 0x22, + 0x74, 0xFF, 0xF0, 0xF1, 0x3A, 0x90, 0x85, 0xBB, + 0x12, 0x20, 0xDA, 0xCC, 0xF0, 0x00, 0xC0, 0x7F, + 0x8C, 0x7E, 0x08, 0x12, 0x2E, 0xA2, 0x90, 0x85, + 0xBB, 0x12, 0x20, 0xDA, 0x00, 0x00, 0x00, 0x14, + 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2E, 0xA2, 0x90, + 0x81, 0xF9, 0x12, 0x20, 0xDA, 0x00, 0x00, 0x00, + 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x55, 0x1C, 0x7F, + 0x7C, 0x7E, 0x08, 0x12, 0x2D, 0x5C, 0xEC, 0x44, + 0x80, 0xFC, 0x90, 0x82, 0x05, 0x12, 0x20, 0xCE, + 0x90, 0x82, 0x05, 0x12, 0x44, 0xD9, 0x90, 0x85, + 0xBB, 0x12, 0x20, 0xCE, 0x7F, 0x7C, 0x7E, 0x08, + 0x12, 0x2E, 0xA2, 0x90, 0x01, 0x00, 0x74, 0x3F, + 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, + 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x22, 0x90, 0x01, + 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x74, + 0x3D, 0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, + 0x30, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, + 0x83, 0xEE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, + 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x81, 0xCB, 0xF0, + 0x12, 0x1F, 0xA4, 0xFF, 0x54, 0x01, 0xFE, 0x90, + 0x81, 0x1F, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, + 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, + 0xFF, 0xF0, 0x12, 0x1F, 0xA4, 0xFE, 0x54, 0x04, + 0xFD, 0xEF, 0x54, 0xFB, 0x4D, 0xFF, 0x90, 0x81, + 0x1F, 0xF0, 0xEE, 0x54, 0x08, 0xFE, 0xEF, 0x54, + 0xF7, 0x4E, 0xFF, 0xF0, 0x12, 0x1F, 0xA4, 0xFE, + 0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0x4D, 0xFF, + 0x90, 0x81, 0x1F, 0xF0, 0xEE, 0x54, 0x20, 0xFE, + 0xEF, 0x54, 0xDF, 0x4E, 0xF0, 0x12, 0x1F, 0xA4, + 0xC3, 0x13, 0x20, 0xE0, 0x02, 0x61, 0x5E, 0x90, + 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, 0x6D, 0x90, + 0x81, 0xCB, 0x74, 0x21, 0xF0, 0xEF, 0x13, 0x13, + 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0x51, 0x4E, 0x90, + 0x81, 0xCB, 0xE0, 0x44, 0x08, 0xF0, 0x80, 0x0C, + 0xE4, 0x90, 0x81, 0x20, 0xF0, 0xA3, 0xF0, 0x7D, + 0x40, 0xFF, 0x91, 0x26, 0x90, 0x81, 0x1F, 0xE0, + 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, + 0x07, 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x12, 0xF0, + 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, + 0x81, 0xCB, 0xE0, 0x44, 0x14, 0xF0, 0x90, 0x81, + 0x1F, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, + 0x07, 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x80, 0xF0, + 0x90, 0x81, 0xCB, 0xE0, 0x90, 0x05, 0x27, 0xF0, + 0x90, 0x81, 0x22, 0xE0, 0x60, 0x02, 0x81, 0x17, + 0x7F, 0x01, 0x80, 0x15, 0x90, 0x81, 0xCB, 0x74, + 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x81, + 0x22, 0xE0, 0x64, 0x04, 0x60, 0x02, 0x81, 0x17, + 0xFF, 0x12, 0x53, 0x0E, 0x81, 0x17, 0x90, 0x81, + 0x1F, 0xE0, 0xFF, 0x20, 0xE0, 0x02, 0x61, 0xE7, + 0x90, 0x81, 0xCB, 0x74, 0x31, 0xF0, 0xEF, 0x13, + 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0x51, 0x4E, + 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x08, 0xF0, 0x80, + 0x06, 0x7D, 0x40, 0xE4, 0xFF, 0x91, 0x26, 0x90, + 0x81, 0x1F, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, + 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x81, 0xCB, 0xE0, + 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, + 0xE0, 0x07, 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x04, + 0xF0, 0x90, 0x81, 0xCB, 0xE0, 0x90, 0x05, 0x27, + 0xF0, 0x90, 0x81, 0x23, 0xE0, 0x64, 0x02, 0x70, + 0x1D, 0xFD, 0x7F, 0x04, 0x12, 0x47, 0x3D, 0x12, + 0x51, 0x73, 0xBF, 0x01, 0x09, 0x90, 0x81, 0x29, + 0xE0, 0xFF, 0x7D, 0x01, 0x80, 0x03, 0xE4, 0xFD, + 0xFF, 0x12, 0x47, 0x3D, 0x80, 0x41, 0x90, 0x81, + 0x2A, 0xE0, 0x90, 0x81, 0x23, 0xF0, 0x90, 0x05, + 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x30, 0x90, + 0x81, 0xCB, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, + 0xF0, 0x90, 0x81, 0x23, 0xE0, 0xB4, 0x02, 0x06, + 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x0B, 0x90, 0x81, + 0x23, 0xE0, 0xB4, 0x08, 0x07, 0x7D, 0x01, 0x7F, + 0x0C, 0x12, 0x47, 0x3D, 0xD1, 0x34, 0x90, 0x81, + 0x29, 0x12, 0x47, 0x39, 0x12, 0x5A, 0xA7, 0xD0, + 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x02, 0x7F, 0x02, + 0x91, 0x26, 0x7D, 0x01, 0x7F, 0x02, 0x74, 0x3D, + 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, 0xFE, + 0xF6, 0x74, 0x30, 0x2F, 0xF5, 0x82, 0xE4, 0x34, + 0x01, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0x70, + 0x37, 0x7D, 0x78, 0x7F, 0x02, 0x91, 0x26, 0x7D, + 0x02, 0x7F, 0x03, 0x91, 0x26, 0x7D, 0xC8, 0x7F, + 0x02, 0x12, 0x71, 0x8F, 0x90, 0x01, 0x57, 0xE4, + 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x7D, + 0x01, 0x7F, 0x0C, 0x12, 0x47, 0x3D, 0x90, 0x81, + 0x24, 0xE0, 0x54, 0xF7, 0xF0, 0x54, 0xEF, 0xF0, + 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, + 0x90, 0x01, 0x36, 0x74, 0x78, 0xF0, 0xA3, 0x74, + 0x02, 0xF0, 0x7D, 0x78, 0xFF, 0x51, 0x57, 0x7D, + 0x02, 0x7F, 0x03, 0x51, 0x57, 0x90, 0x06, 0x0A, + 0xE0, 0x44, 0x07, 0xF0, 0x90, 0x81, 0x32, 0xA3, + 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x90, 0x80, 0xDE, + 0xE0, 0xB4, 0x01, 0x15, 0x90, 0x81, 0x25, 0xE0, + 0x54, 0xFB, 0xF0, 0x90, 0x81, 0x2A, 0xE0, 0x20, + 0xE2, 0x0E, 0x7D, 0x01, 0x7F, 0x04, 0x02, 0x47, + 0x3D, 0x90, 0x81, 0x25, 0xE0, 0x44, 0x04, 0xF0, + 0x22, 0x90, 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, + 0x08, 0x90, 0x81, 0x23, 0xE0, 0x64, 0x02, 0x60, + 0x3A, 0x90, 0x81, 0x27, 0xE0, 0x70, 0x04, 0xEF, + 0x30, 0xE0, 0x0A, 0x90, 0x81, 0x2A, 0xE0, 0x64, + 0x02, 0x60, 0x28, 0xB1, 0x83, 0x90, 0x81, 0x25, + 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, + 0x14, 0x90, 0x81, 0x2D, 0xE0, 0xFF, 0xA3, 0xE0, + 0x6F, 0x70, 0x0A, 0xF1, 0xCD, 0x91, 0x1C, 0x90, + 0x81, 0x2E, 0xE0, 0x14, 0xF0, 0x90, 0x01, 0xE6, + 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x81, 0x1F, 0xE0, + 0x30, 0xE0, 0x06, 0x90, 0x81, 0x21, 0x74, 0x01, + 0xF0, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x45, 0x90, + 0x81, 0x25, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, + 0x1F, 0x30, 0xE0, 0x12, 0x90, 0x01, 0x3B, 0xE0, + 0x30, 0xE4, 0x0B, 0x91, 0x1C, 0x90, 0x81, 0x2D, + 0xE0, 0x14, 0x90, 0x05, 0x73, 0xF0, 0x90, 0x82, + 0x0B, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, 0xA9, + 0xC3, 0x90, 0x82, 0x0C, 0xE0, 0x94, 0x80, 0x90, + 0x82, 0x0B, 0xE0, 0x64, 0x80, 0x94, 0x80, 0x40, + 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, + 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x75, 0xF8, 0xD1, + 0xD6, 0x90, 0x81, 0x3F, 0xE0, 0x30, 0xE0, 0x0C, + 0xE4, 0xF5, 0x1D, 0xA3, 0xF1, 0xFB, 0x90, 0x01, + 0x57, 0x74, 0x05, 0xF0, 0x90, 0x01, 0xBE, 0xE0, + 0x04, 0xF0, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0x64, + 0x01, 0x60, 0x02, 0xC1, 0x23, 0x90, 0x81, 0x27, + 0xE0, 0x70, 0x02, 0xC1, 0x23, 0x90, 0x81, 0x26, + 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, 0x22, + 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x81, 0x2E, 0xF0, + 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x81, 0x2D, 0xF0, + 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x81, 0x2D, + 0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90, 0x81, 0x2E, + 0xEF, 0xF0, 0x90, 0x81, 0x25, 0xE0, 0x44, 0x04, + 0xF0, 0xE4, 0x90, 0x81, 0x30, 0xF0, 0x90, 0x81, + 0x32, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x90, + 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, + 0x02, 0xF0, 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFD, + 0xF0, 0x54, 0xEF, 0xF0, 0x90, 0x81, 0x26, 0xE0, + 0xFF, 0xC4, 0x54, 0x0F, 0x24, 0xFD, 0x50, 0x02, + 0x80, 0x0F, 0x90, 0x81, 0x1F, 0xE0, 0x30, 0xE0, + 0x05, 0x12, 0x6D, 0xF2, 0x80, 0x03, 0x12, 0x6E, + 0xC9, 0x90, 0x81, 0x25, 0xE0, 0x13, 0x13, 0x13, + 0x54, 0x1F, 0x30, 0xE0, 0x0E, 0x90, 0x81, 0x2D, + 0xE0, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x04, 0xF1, + 0xCD, 0x91, 0x22, 0x90, 0x81, 0x1F, 0xE0, 0xC3, + 0x13, 0x20, 0xE0, 0x07, 0x90, 0x81, 0x25, 0xE0, + 0x44, 0x04, 0xF0, 0x22, 0xD1, 0xAB, 0xEF, 0x70, + 0x02, 0xD1, 0x3C, 0x22, 0x90, 0x81, 0x27, 0xE0, + 0x64, 0x01, 0x70, 0x66, 0x90, 0x81, 0x26, 0xE0, + 0x54, 0x0F, 0x60, 0x51, 0x90, 0x81, 0x2A, 0xE0, + 0x70, 0x03, 0xFF, 0x31, 0x93, 0x90, 0x81, 0x2A, + 0xE0, 0x64, 0x0C, 0x60, 0x03, 0x12, 0x66, 0x26, + 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, + 0x74, 0x04, 0xF0, 0xD1, 0xAB, 0xEF, 0x64, 0x01, + 0x60, 0x38, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x50, + 0x05, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, + 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x81, 0x2A, + 0xE0, 0x70, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, + 0x47, 0x3D, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, + 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, + 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, + 0x02, 0x7F, 0x00, 0x22, 0x12, 0x50, 0x60, 0x90, + 0x81, 0x2D, 0xE0, 0x14, 0x90, 0x05, 0x73, 0xF0, + 0x7D, 0x02, 0x7F, 0x02, 0x51, 0x57, 0x90, 0x81, + 0x42, 0xE0, 0x30, 0xE0, 0x2D, 0x90, 0x80, 0xDE, + 0xE0, 0xB4, 0x01, 0x26, 0x90, 0x82, 0x17, 0xE0, + 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x81, + 0x44, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x82, 0x17, + 0xF0, 0x90, 0x81, 0x44, 0xE0, 0xFF, 0x90, 0x81, + 0x43, 0xE0, 0xB5, 0x07, 0x05, 0xE4, 0xA3, 0xF0, + 0xF1, 0x0B, 0x22, 0xE4, 0xFF, 0x8F, 0x53, 0x90, + 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, + 0xE0, 0xF5, 0x56, 0x74, 0xFF, 0xF0, 0xF1, 0x3A, + 0xBF, 0x01, 0x03, 0x12, 0x74, 0xFB, 0x90, 0x05, + 0x22, 0xE5, 0x56, 0xF0, 0x80, 0x03, 0x12, 0x74, + 0xFB, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x7F, + 0x01, 0x22, 0xE4, 0x90, 0x82, 0x0F, 0xF0, 0xA3, + 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, + 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, + 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, + 0x82, 0x10, 0xE0, 0x94, 0xE8, 0x90, 0x82, 0x0F, + 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC0, + 0xE0, 0x44, 0x20, 0xF0, 0x7F, 0x00, 0x22, 0x7F, + 0x32, 0x7E, 0x00, 0x12, 0x32, 0xAA, 0x90, 0x82, + 0x0F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, 0xA9, + 0x80, 0xBF, 0x74, 0x1F, 0x2D, 0xF5, 0x82, 0xE4, + 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0xF0, + 0xEF, 0x60, 0x1D, 0x74, 0x21, 0x2D, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, + 0xF0, 0x74, 0x1F, 0x2D, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, + 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, + 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x74, 0x1F, + 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, + 0xE0, 0x44, 0x40, 0xF0, 0x22, 0xEF, 0x14, 0x90, + 0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, + 0xF0, 0xFD, 0x7F, 0x03, 0x74, 0x45, 0x2F, 0xF8, + 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, + 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, + 0x22, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0xF5, 0x1D, + 0x90, 0x81, 0x39, 0xE0, 0xF5, 0x1E, 0xE4, 0xFB, + 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x8E, 0x19, 0x8F, + 0x1A, 0xE5, 0x1E, 0x54, 0x07, 0xC4, 0x33, 0x54, + 0xE0, 0x85, 0x19, 0x83, 0x85, 0x1A, 0x82, 0xF0, + 0xE5, 0x1D, 0x54, 0x07, 0xC4, 0x33, 0x54, 0xE0, + 0xFF, 0xE5, 0x1E, 0x13, 0x13, 0x13, 0x54, 0x1F, + 0x4F, 0xA3, 0xF0, 0xEB, 0x54, 0x07, 0xC4, 0x33, + 0x54, 0xE0, 0xFF, 0xE5, 0x1D, 0x13, 0x13, 0x13, + 0x54, 0x1F, 0x4F, 0x85, 0x1A, 0x82, 0x85, 0x19, + 0x83, 0xA3, 0xA3, 0xF0, 0xBD, 0x01, 0x0C, 0x85, + 0x1A, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0x74, + 0x03, 0xF0, 0x22, 0x85, 0x1A, 0x82, 0x85, 0x19, + 0x83, 0xA3, 0xA3, 0xA3, 0x74, 0x01, 0xF0, 0x22, + 0xE4, 0x90, 0x81, 0x4D, 0xF0, 0x90, 0x81, 0x27, + 0xE0, 0x60, 0x58, 0x90, 0x80, 0xDE, 0xE0, 0x64, + 0x01, 0x70, 0x50, 0x90, 0x81, 0x4D, 0x04, 0xF0, + 0xE4, 0x90, 0x81, 0x2E, 0xF0, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x15, 0x90, 0x81, 0x23, 0xE0, + 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x81, 0x4D, 0xF0, + 0x31, 0x73, 0xEF, 0x70, 0x04, 0x90, 0x81, 0x4D, + 0xF0, 0x90, 0x81, 0x4D, 0xE0, 0x60, 0x24, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x10, 0xF0, 0xE4, 0xF5, + 0x1D, 0x90, 0x81, 0x2F, 0x12, 0x4F, 0xFB, 0x90, + 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x81, 0x2A, + 0xE0, 0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04, + 0x12, 0x47, 0x3D, 0x22, 0xE4, 0x90, 0x81, 0x4C, + 0xF0, 0x90, 0x81, 0x27, 0xE0, 0x70, 0x02, 0x21, + 0x72, 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, 0x60, + 0x02, 0x21, 0x72, 0x90, 0x81, 0x26, 0xE0, 0xFF, + 0xC4, 0x54, 0x0F, 0x60, 0x22, 0x24, 0xFE, 0x60, + 0x03, 0x04, 0x70, 0x21, 0x90, 0x81, 0x2E, 0xE0, + 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x81, + 0x30, 0xE0, 0x60, 0x11, 0xEF, 0x70, 0x08, 0x90, + 0x81, 0x2D, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x90, + 0x81, 0x4C, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x15, 0x90, 0x81, 0x23, 0xE0, + 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x81, 0x4C, 0xF0, + 0x31, 0x73, 0xEF, 0x70, 0x04, 0x90, 0x81, 0x4C, + 0xF0, 0x90, 0x81, 0x4C, 0xE0, 0x60, 0x43, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x81, + 0x30, 0xE0, 0x60, 0x03, 0xB4, 0x01, 0x09, 0xE4, + 0xF5, 0x1D, 0x90, 0x81, 0x30, 0xE0, 0x80, 0x0D, + 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x30, 0xE0, 0x75, + 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x81, + 0x2F, 0xE0, 0x2F, 0x12, 0x4F, 0xFC, 0x90, 0x01, + 0x57, 0x74, 0x05, 0xF0, 0x90, 0x81, 0x2A, 0xE0, + 0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, + 0x47, 0x3D, 0x22, 0x90, 0x05, 0x43, 0xE0, 0x7F, + 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0x90, + 0x81, 0x27, 0xE0, 0x70, 0x07, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x11, 0x90, 0x81, 0x1F, 0xE0, + 0x30, 0xE0, 0x07, 0x31, 0x73, 0xBF, 0x01, 0x05, + 0x41, 0x5B, 0x12, 0x4E, 0x3C, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, 0x1E, + 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x04, 0x80, 0x0B, + 0x31, 0x73, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, + 0x02, 0x7F, 0x02, 0x71, 0x0E, 0xD0, 0xD0, 0x92, + 0xAF, 0x22, 0x90, 0x81, 0x4B, 0xE0, 0x60, 0x0F, + 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x02, + 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, + 0x81, 0x1F, 0xE0, 0x30, 0xE0, 0x10, 0xA3, 0x74, + 0x01, 0xF0, 0x90, 0x81, 0x1F, 0xE0, 0xFF, 0xC3, + 0x13, 0x30, 0xE0, 0x02, 0x31, 0x9E, 0x11, 0xC4, + 0x90, 0x81, 0x3F, 0xE0, 0x30, 0xE0, 0x07, 0x91, + 0x65, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, + 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, 0x3D, 0x90, + 0x81, 0x23, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, + 0x7E, 0x01, 0x90, 0x81, 0x22, 0xE0, 0x7D, 0x00, + 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, + 0x23, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x21, + 0x9E, 0x51, 0x45, 0x90, 0x81, 0x23, 0xE0, 0xB4, + 0x08, 0x06, 0xE4, 0xFD, 0x7F, 0x0C, 0x80, 0x09, + 0x90, 0x81, 0x23, 0xE0, 0x70, 0x06, 0xFD, 0x7F, + 0x04, 0x12, 0x47, 0x3D, 0x22, 0x90, 0x81, 0x1E, + 0xE0, 0xB4, 0x01, 0x0F, 0x90, 0x81, 0x23, 0xE0, + 0x64, 0x02, 0x60, 0x07, 0x7D, 0x01, 0x7F, 0x02, + 0x12, 0x47, 0x3D, 0x90, 0x81, 0x27, 0xE0, 0x64, + 0x02, 0x60, 0x14, 0x90, 0x81, 0x26, 0xE0, 0x54, + 0x0F, 0x60, 0x0C, 0x12, 0x4E, 0xAB, 0xEF, 0x70, + 0x06, 0xFD, 0x7F, 0x0C, 0x12, 0x47, 0x3D, 0x22, + 0x90, 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, 0x3F, + 0x90, 0x81, 0x23, 0xE0, 0x7E, 0x00, 0xB4, 0x02, + 0x02, 0x7E, 0x01, 0x90, 0x81, 0x22, 0xE0, 0x7D, + 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, + 0x70, 0x25, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x02, + 0x21, 0x9E, 0x12, 0x74, 0xAC, 0x90, 0x81, 0x23, + 0xE0, 0xB4, 0x0C, 0x06, 0xE4, 0xFD, 0x7F, 0x08, + 0x80, 0x0A, 0x90, 0x81, 0x23, 0xE0, 0xB4, 0x04, + 0x06, 0xE4, 0xFD, 0xFF, 0x12, 0x47, 0x3D, 0x22, + 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, + 0x81, 0xCB, 0x12, 0x45, 0x1F, 0x12, 0x1F, 0xA4, + 0xFF, 0x90, 0x81, 0x1E, 0xF0, 0xBF, 0x01, 0x12, + 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, 0x90, 0x00, + 0x01, 0x12, 0x1F, 0xBD, 0x64, 0x01, 0x60, 0x21, + 0x80, 0x1D, 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, + 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0x64, 0x01, + 0x60, 0x0F, 0x90, 0x81, 0x1F, 0xE0, 0x20, 0xE0, + 0x06, 0xE4, 0xFF, 0x71, 0x0E, 0x80, 0x02, 0x31, + 0x9E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, 0x22, + 0xE0, 0x90, 0x82, 0x16, 0xF0, 0x6F, 0x70, 0x02, + 0x81, 0x04, 0xEF, 0x14, 0x60, 0x3E, 0x14, 0x60, + 0x62, 0x14, 0x70, 0x02, 0x61, 0xB8, 0x14, 0x70, + 0x02, 0x61, 0xDF, 0x24, 0x04, 0x60, 0x02, 0x81, + 0x04, 0x90, 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x04, + 0x04, 0x91, 0x41, 0x81, 0x04, 0xEF, 0xB4, 0x02, + 0x04, 0x91, 0x50, 0x81, 0x04, 0x90, 0x82, 0x16, + 0xE0, 0xFF, 0xB4, 0x03, 0x04, 0x91, 0x54, 0x81, + 0x04, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x81, 0x04, + 0x91, 0x43, 0x81, 0x04, 0x90, 0x82, 0x16, 0xE0, + 0xFF, 0xB4, 0x04, 0x04, 0x91, 0xF3, 0x81, 0x04, + 0xEF, 0xB4, 0x02, 0x04, 0x91, 0x58, 0x81, 0x04, + 0x90, 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x03, 0x04, + 0x91, 0xE8, 0x81, 0x04, 0xEF, 0x70, 0x7D, 0x91, + 0x2B, 0x80, 0x79, 0x90, 0x82, 0x16, 0xE0, 0xB4, + 0x04, 0x05, 0x12, 0x74, 0x60, 0x80, 0x6D, 0x90, + 0x82, 0x16, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0x21, + 0x80, 0x62, 0x90, 0x82, 0x16, 0xE0, 0xB4, 0x03, + 0x05, 0x12, 0x74, 0x71, 0x80, 0x56, 0x90, 0x82, + 0x16, 0xE0, 0x70, 0x50, 0x91, 0x1F, 0x80, 0x4C, + 0x90, 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x04, 0x05, + 0x12, 0x74, 0x4C, 0x80, 0x3F, 0xEF, 0xB4, 0x01, + 0x04, 0x91, 0x34, 0x80, 0x37, 0xEF, 0xB4, 0x02, + 0x04, 0x91, 0xDF, 0x80, 0x2F, 0x90, 0x82, 0x16, + 0xE0, 0x70, 0x29, 0x91, 0x32, 0x80, 0x25, 0x90, + 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x03, 0x05, 0x12, + 0x74, 0x7B, 0x80, 0x18, 0xEF, 0xB4, 0x01, 0x04, + 0x91, 0x0B, 0x80, 0x10, 0xEF, 0xB4, 0x02, 0x04, + 0xB1, 0x06, 0x80, 0x08, 0x90, 0x82, 0x16, 0xE0, + 0x70, 0x02, 0x91, 0x09, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0x91, 0x2B, 0x90, 0x05, 0x22, 0x74, 0x6F, + 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, + 0x90, 0x81, 0x22, 0x74, 0x04, 0xF0, 0x22, 0x91, + 0x2B, 0x12, 0x49, 0xDD, 0x90, 0x81, 0x22, 0x74, + 0x02, 0xF0, 0x22, 0x90, 0x81, 0x22, 0x74, 0x01, + 0xF0, 0x22, 0x91, 0x2B, 0x90, 0x05, 0x22, 0x74, + 0xFF, 0xF0, 0x90, 0x81, 0x22, 0x74, 0x03, 0xF0, + 0x22, 0x91, 0xF3, 0x90, 0x05, 0x27, 0xE0, 0x54, + 0xBF, 0xF0, 0xE4, 0x90, 0x81, 0x22, 0xF0, 0x22, + 0x91, 0x58, 0x80, 0xEF, 0x91, 0xE8, 0x80, 0xEB, + 0x91, 0x65, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, + 0x81, 0x22, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, + 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0x01, 0xE0, + 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, + 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, + 0x06, 0xB4, 0x74, 0x86, 0xF0, 0x7F, 0x7C, 0x7E, + 0x08, 0x12, 0x2D, 0x5C, 0xEC, 0x54, 0x7F, 0xFC, + 0x90, 0x82, 0x01, 0x12, 0x20, 0xCE, 0x90, 0x82, + 0x01, 0x12, 0x44, 0xD9, 0x90, 0x85, 0xBB, 0x12, + 0x20, 0xCE, 0x7F, 0x7C, 0x7E, 0x08, 0x12, 0x2E, + 0xA2, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xDA, 0xCC, + 0xC0, 0x00, 0xC0, 0x7F, 0x8C, 0x7E, 0x08, 0x12, + 0x2E, 0xA2, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xDA, + 0x00, 0xC0, 0x00, 0x14, 0x7F, 0x70, 0x7E, 0x0E, + 0x12, 0x2E, 0xA2, 0x90, 0x81, 0xF9, 0x12, 0x20, + 0xDA, 0x00, 0x03, 0x3E, 0x60, 0xE4, 0xFD, 0xFF, + 0xB1, 0x1C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x91, + 0x65, 0x90, 0x81, 0x22, 0x74, 0x03, 0xF0, 0x22, + 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x81, 0x22, + 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, + 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, + 0x81, 0x22, 0x74, 0x01, 0xF0, 0x22, 0x91, 0x65, + 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x05, + 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x81, 0x22, + 0x74, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, + 0xC3, 0xC0, 0xD0, 0xC0, 0x07, 0xC0, 0x05, 0x90, + 0x81, 0xF9, 0x12, 0x44, 0xD9, 0x90, 0x81, 0xE5, + 0x12, 0x20, 0xCE, 0xD0, 0x05, 0xD0, 0x07, 0x12, + 0x60, 0xF5, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, + 0x81, 0xC8, 0x12, 0x45, 0x1F, 0xEF, 0x12, 0x45, + 0x28, 0x55, 0x71, 0x00, 0x55, 0x7A, 0x01, 0x55, + 0x83, 0x02, 0x55, 0x8B, 0x03, 0x55, 0x94, 0x04, + 0x55, 0x9C, 0x20, 0x55, 0xA4, 0x21, 0x55, 0xAD, + 0x23, 0x55, 0xB5, 0x24, 0x55, 0xBE, 0x25, 0x55, + 0xC7, 0x26, 0x55, 0xCF, 0xC0, 0x00, 0x00, 0x55, + 0xD8, 0x90, 0x81, 0xC8, 0x12, 0x45, 0x16, 0x02, + 0x6A, 0xB0, 0x90, 0x81, 0xC8, 0x12, 0x45, 0x16, + 0x02, 0x65, 0x81, 0x90, 0x81, 0xC8, 0x12, 0x45, + 0x16, 0x41, 0xC0, 0x90, 0x81, 0xC8, 0x12, 0x45, + 0x16, 0x02, 0x75, 0xD8, 0x90, 0x81, 0xC8, 0x12, + 0x45, 0x16, 0x80, 0x44, 0x90, 0x81, 0xC8, 0x12, + 0x45, 0x16, 0xC1, 0x4B, 0x90, 0x81, 0xC8, 0x12, + 0x45, 0x16, 0x02, 0x6A, 0xF8, 0x90, 0x81, 0xC8, + 0x12, 0x45, 0x16, 0xE1, 0xE1, 0x90, 0x81, 0xC8, + 0x12, 0x45, 0x16, 0x02, 0x4A, 0x6C, 0x90, 0x81, + 0xC8, 0x12, 0x45, 0x16, 0x02, 0x6B, 0x3E, 0x90, + 0x81, 0xC8, 0x12, 0x45, 0x16, 0x80, 0x3E, 0x90, + 0x81, 0xC8, 0x12, 0x45, 0x16, 0x02, 0x6B, 0x4E, + 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x22, + 0x12, 0x5A, 0x4B, 0x12, 0x1F, 0xA4, 0xFF, 0x54, + 0x01, 0xFE, 0x90, 0x81, 0x45, 0xE0, 0x54, 0xFE, + 0x4E, 0xF0, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x14, + 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0x90, 0x81, + 0x46, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0xBD, + 0x90, 0x81, 0x47, 0xF0, 0x22, 0x12, 0x1F, 0xA4, + 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x81, 0x3F, 0xE0, + 0x54, 0xFE, 0x4E, 0xF0, 0x90, 0x00, 0x01, 0x12, + 0x1F, 0xBD, 0xFE, 0x90, 0x05, 0x54, 0xE0, 0xC3, + 0x9E, 0x90, 0x81, 0x40, 0xF0, 0xEF, 0x20, 0xE0, + 0x07, 0x91, 0x65, 0x90, 0x05, 0x22, 0xE4, 0xF0, + 0x90, 0x81, 0x3F, 0xE0, 0x54, 0x01, 0x90, 0x01, + 0xBC, 0xF0, 0x90, 0x81, 0x40, 0xE0, 0x90, 0x01, + 0xBD, 0xF0, 0x22, 0x12, 0x1F, 0xA4, 0xFF, 0x54, + 0x7F, 0x90, 0x81, 0x27, 0xF0, 0xEF, 0xC4, 0x13, + 0x13, 0x13, 0x54, 0x01, 0xA3, 0xF0, 0x90, 0x00, + 0x01, 0x12, 0x1F, 0xBD, 0xFF, 0x54, 0xF0, 0xC4, + 0x54, 0x0F, 0xFE, 0x90, 0x81, 0x26, 0xE0, 0x54, + 0xF0, 0x4E, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, + 0xBD, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0x81, + 0x24, 0xE0, 0x54, 0xFD, 0x4E, 0xF0, 0xEF, 0x54, + 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x81, 0x26, + 0xE0, 0x54, 0x0F, 0x4F, 0xF0, 0x90, 0x00, 0x04, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x29, 0xF0, 0xD1, + 0xC6, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x90, + 0x01, 0xB8, 0xF0, 0x90, 0x81, 0x27, 0xE0, 0x90, + 0x01, 0xBA, 0xF0, 0x90, 0x81, 0x29, 0xE0, 0x90, + 0x01, 0xBB, 0xF0, 0x90, 0x81, 0x26, 0xE0, 0x54, + 0x0F, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x90, 0x81, + 0xCB, 0x12, 0x45, 0x1F, 0x12, 0x72, 0xB3, 0x90, + 0x81, 0x27, 0xE0, 0xFF, 0x12, 0x4C, 0x3E, 0x90, + 0x81, 0x27, 0xE0, 0x60, 0x19, 0x90, 0x81, 0xCB, + 0x12, 0x45, 0x16, 0x90, 0x00, 0x01, 0x12, 0x1F, + 0xBD, 0x54, 0x0F, 0xFF, 0x90, 0x00, 0x02, 0x12, + 0x1F, 0xBD, 0xFD, 0x12, 0x72, 0xC4, 0x22, 0xC0, + 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, + 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, + 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, + 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, + 0xF7, 0xF0, 0x74, 0x56, 0xA3, 0xF0, 0x12, 0x6C, + 0xA5, 0xE5, 0x49, 0x30, 0xE1, 0x03, 0x12, 0x6F, + 0x79, 0xE5, 0x49, 0x30, 0xE2, 0x02, 0xF1, 0xA5, + 0xE5, 0x49, 0x30, 0xE3, 0x03, 0x12, 0x6F, 0x8D, + 0xE5, 0x4A, 0x30, 0xE0, 0x03, 0x12, 0x6F, 0xC9, + 0xE5, 0x4A, 0x30, 0xE4, 0x03, 0x12, 0x70, 0x22, + 0xE5, 0x4B, 0x30, 0xE1, 0x02, 0x51, 0x78, 0xE5, + 0x4B, 0x30, 0xE0, 0x02, 0x31, 0xFF, 0xE5, 0x4B, + 0x30, 0xE3, 0x02, 0xF1, 0xE0, 0xE5, 0x4C, 0x30, + 0xE1, 0x05, 0x7F, 0x03, 0x12, 0x44, 0x27, 0xE5, + 0x4C, 0x30, 0xE4, 0x03, 0x12, 0x4E, 0xC4, 0xE5, + 0x4C, 0x30, 0xE5, 0x03, 0x12, 0x70, 0x38, 0xE5, + 0x4C, 0x30, 0xE6, 0x03, 0x12, 0x70, 0xCE, 0x74, + 0xF7, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x56, + 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, + 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, + 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, + 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x81, 0x27, + 0xE0, 0x60, 0x34, 0x90, 0x06, 0x92, 0xE0, 0x30, + 0xE0, 0x23, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x11, 0x05, + 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, + 0x92, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x81, 0x24, + 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x47, 0x2A, 0x22, + 0x22, 0x12, 0x1F, 0xA4, 0x90, 0x81, 0x31, 0xF0, + 0x22, 0x90, 0x01, 0xC8, 0xE4, 0xF0, 0xA3, 0xF0, + 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x81, 0x79, 0x51, + 0x7F, 0xFF, 0xFE, 0x12, 0x2B, 0x27, 0xBF, 0x01, + 0x09, 0x90, 0x81, 0x51, 0xE0, 0x64, 0x03, 0x60, + 0x03, 0x22, 0x01, 0xAB, 0xE4, 0x90, 0x81, 0x56, + 0xF0, 0x90, 0x81, 0x56, 0xE0, 0xFF, 0xC3, 0x94, + 0x02, 0x40, 0x02, 0x01, 0xE6, 0xC3, 0x74, 0xFE, + 0x9F, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x7B, 0x01, + 0x7A, 0x81, 0x79, 0x52, 0x12, 0x2B, 0x27, 0xEF, + 0x64, 0x01, 0x70, 0x77, 0x90, 0x81, 0x52, 0xE0, + 0xFF, 0x54, 0xC0, 0xFE, 0x60, 0x05, 0xEF, 0x54, + 0x0C, 0x70, 0x16, 0x90, 0x81, 0x52, 0xE0, 0xFF, + 0x54, 0x30, 0x60, 0x67, 0xEF, 0x54, 0x03, 0x60, + 0x62, 0x90, 0x81, 0x53, 0x74, 0x01, 0xF0, 0x80, + 0x05, 0xE4, 0x90, 0x81, 0x53, 0xF0, 0x90, 0x81, + 0x53, 0xE0, 0x90, 0x81, 0x52, 0x70, 0x16, 0xE0, + 0xFF, 0xEE, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x81, + 0x54, 0xF0, 0xEF, 0x54, 0x0C, 0x13, 0x13, 0x54, + 0x3F, 0xA3, 0xF0, 0x80, 0x0D, 0xE0, 0xFE, 0x54, + 0x30, 0x90, 0x81, 0x54, 0xF0, 0xEE, 0x54, 0x03, + 0xA3, 0xF0, 0x90, 0x81, 0x54, 0xE0, 0x64, 0x30, + 0x70, 0x54, 0xA3, 0xE0, 0x64, 0x02, 0x70, 0x4E, + 0x90, 0x00, 0xF5, 0xE0, 0x54, 0x40, 0x90, 0x81, + 0x57, 0xF0, 0xE0, 0x70, 0x41, 0xA3, 0x74, 0x02, + 0xF0, 0x80, 0x10, 0x90, 0x81, 0x58, 0x74, 0x01, + 0xF0, 0x80, 0x08, 0x90, 0x81, 0x56, 0xE0, 0x04, + 0xF0, 0x01, 0x11, 0x90, 0x01, 0xC4, 0x74, 0xE9, + 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x81, 0x58, + 0xE0, 0x90, 0x01, 0xC8, 0xF0, 0x90, 0x81, 0x52, + 0xE0, 0x90, 0x01, 0xC9, 0xF0, 0x90, 0x81, 0x53, + 0xE0, 0x90, 0x01, 0xCA, 0xF0, 0xE4, 0xFD, 0x7F, + 0x1F, 0x12, 0x32, 0x1E, 0x80, 0xD5, 0x22, 0x90, + 0x00, 0xF7, 0xE0, 0x20, 0xE7, 0x09, 0xE0, 0x7F, + 0x01, 0x20, 0xE6, 0x0C, 0x7F, 0x02, 0x22, 0x90, + 0x00, 0xF7, 0xE0, 0x30, 0xE6, 0x02, 0x7F, 0x03, + 0x22, 0x11, 0xE7, 0x90, 0x80, 0x3C, 0xEF, 0xF0, + 0x31, 0x13, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, + 0x02, 0x2D, 0xA7, 0x31, 0x81, 0x31, 0xB1, 0x31, + 0x40, 0x31, 0x5F, 0xE4, 0xF5, 0x35, 0xF5, 0x36, + 0xF5, 0x37, 0xF5, 0x38, 0xAD, 0x35, 0x7F, 0x50, + 0x12, 0x32, 0x1E, 0xAD, 0x36, 0x7F, 0x51, 0x12, + 0x32, 0x1E, 0xAD, 0x37, 0x7F, 0x52, 0x12, 0x32, + 0x1E, 0xAD, 0x38, 0x7F, 0x53, 0x02, 0x32, 0x1E, + 0x75, 0x3D, 0x10, 0xE4, 0xF5, 0x3E, 0x75, 0x3F, + 0x07, 0x75, 0x40, 0x02, 0x90, 0x01, 0x30, 0xE5, + 0x3D, 0xF0, 0xA3, 0xE5, 0x3E, 0xF0, 0xA3, 0xE5, + 0x3F, 0xF0, 0xA3, 0xE5, 0x40, 0xF0, 0x22, 0x75, + 0x45, 0x0E, 0x75, 0x46, 0x01, 0x43, 0x46, 0x10, + 0x75, 0x47, 0x03, 0x75, 0x48, 0x62, 0x90, 0x01, + 0x38, 0xE5, 0x45, 0xF0, 0xA3, 0xE5, 0x46, 0xF0, + 0xA3, 0xE5, 0x47, 0xF0, 0xA3, 0xE5, 0x48, 0xF0, + 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, + 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, + 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, + 0x50, 0x12, 0x32, 0x1E, 0xE4, 0xFD, 0x7F, 0x51, + 0x12, 0x32, 0x1E, 0xE4, 0xFD, 0x7F, 0x52, 0x12, + 0x32, 0x1E, 0xE4, 0xFD, 0x7F, 0x53, 0x02, 0x32, + 0x1E, 0x90, 0x01, 0x34, 0x74, 0xFF, 0xF0, 0xA3, + 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x3C, + 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, + 0x7F, 0x54, 0x12, 0x32, 0x1E, 0x7D, 0xFF, 0x7F, + 0x55, 0x12, 0x32, 0x1E, 0x7D, 0xFF, 0x7F, 0x56, + 0x12, 0x32, 0x1E, 0x7D, 0xFF, 0x7F, 0x57, 0x02, + 0x32, 0x1E, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, + 0xFD, 0x7F, 0x80, 0x12, 0x32, 0x1E, 0x90, 0xFD, + 0x00, 0xE0, 0x54, 0xBF, 0xF0, 0x12, 0x57, 0xE9, + 0x51, 0x77, 0x12, 0x32, 0x77, 0x51, 0xC9, 0x51, + 0x5E, 0x7F, 0x01, 0x12, 0x43, 0x15, 0x90, 0x81, + 0x41, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x43, 0x15, + 0x90, 0x81, 0x41, 0xE0, 0x04, 0xF0, 0x7F, 0x03, + 0x12, 0x43, 0x15, 0x90, 0x81, 0x41, 0xE0, 0x04, + 0xF0, 0x31, 0x01, 0x51, 0x3F, 0x90, 0x00, 0x80, + 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x80, 0x12, 0x32, + 0x1E, 0x75, 0x20, 0xFF, 0x51, 0x68, 0x51, 0xF9, + 0x51, 0x7F, 0xE4, 0xFF, 0x02, 0x43, 0x9E, 0x51, + 0x62, 0x51, 0x6F, 0x51, 0xA7, 0x71, 0x4F, 0x51, + 0x8A, 0x51, 0x95, 0x90, 0x81, 0x45, 0xE0, 0x54, + 0xFE, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0xA3, 0xF0, + 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xE4, 0xF5, + 0x4D, 0x22, 0xE4, 0x90, 0x80, 0xDE, 0xF0, 0x22, + 0x75, 0xE8, 0x03, 0x75, 0xA8, 0x84, 0x22, 0xE4, + 0x90, 0x80, 0xD8, 0xF0, 0xA3, 0xF0, 0x22, 0x90, + 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, + 0x01, 0xE4, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x01, + 0xF0, 0x22, 0x90, 0x81, 0x3F, 0xE0, 0x54, 0xFE, + 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x90, 0x81, 0x42, + 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0x7F, 0xF0, 0xA3, + 0x74, 0x0A, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x90, + 0x81, 0x1F, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFD, + 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xF7, 0xF0, 0x54, + 0xEF, 0xF0, 0x54, 0xDF, 0xF0, 0xE4, 0xA3, 0xF0, + 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x0C, 0xF0, + 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, + 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, + 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, + 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, + 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, + 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, + 0x22, 0xE4, 0x90, 0x81, 0x51, 0xF0, 0xA3, 0xF0, + 0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4, + 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, + 0xC3, 0x90, 0x81, 0x52, 0xE0, 0x94, 0x88, 0x90, + 0x81, 0x51, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, + 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90, + 0x81, 0x51, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, + 0xA9, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x32, 0xAA, + 0xD3, 0x90, 0x81, 0x52, 0xE0, 0x94, 0x32, 0x90, + 0x81, 0x51, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, + 0x01, 0xC6, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0xE4, + 0x90, 0x81, 0x27, 0xF0, 0xA3, 0xF0, 0x90, 0x81, + 0x26, 0xE0, 0x54, 0x0F, 0xF0, 0x54, 0xF0, 0xF0, + 0x90, 0x81, 0x24, 0xE0, 0x54, 0xFD, 0xF0, 0x54, + 0xF7, 0xF0, 0x54, 0xEF, 0xF0, 0x90, 0x81, 0x2D, + 0x74, 0x01, 0xF0, 0xA3, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x54, 0xFB, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, + 0xF0, 0xE4, 0x90, 0x81, 0x30, 0xF0, 0x90, 0x81, + 0x2F, 0x74, 0x07, 0xF0, 0x90, 0x81, 0x32, 0xE4, + 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0xE4, 0x90, 0x81, + 0x2B, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x54, 0xFE, + 0xF0, 0x90, 0x81, 0x29, 0x74, 0x0C, 0xF0, 0x90, + 0x81, 0x24, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x81, + 0x2A, 0x74, 0x0C, 0xF0, 0x90, 0x81, 0x24, 0xE0, + 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, + 0x54, 0xFE, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, + 0xF0, 0x90, 0x81, 0x34, 0x12, 0x20, 0xDA, 0x00, + 0x00, 0x00, 0x00, 0x90, 0x80, 0x3C, 0xE0, 0xB4, + 0x01, 0x08, 0x90, 0x81, 0x31, 0x74, 0x99, 0xF0, + 0x80, 0x12, 0x90, 0x80, 0x3C, 0xE0, 0x90, 0x81, + 0x31, 0xB4, 0x03, 0x05, 0x74, 0x90, 0xF0, 0x80, + 0x03, 0x74, 0x40, 0xF0, 0x90, 0x81, 0x38, 0x74, + 0x01, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xE0, + 0x54, 0x01, 0x44, 0x28, 0xF0, 0xA3, 0x74, 0x05, + 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, + 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xF7, 0xF0, 0x54, + 0xEF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xBF, 0xF0, + 0xE4, 0xA3, 0xF0, 0x22, 0xE4, 0x90, 0x81, 0x59, + 0xF0, 0x90, 0x81, 0x59, 0xE0, 0x64, 0x01, 0xF0, + 0x24, 0x24, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x5C, + 0xA3, 0xF0, 0x90, 0x81, 0x2A, 0xE0, 0xFF, 0x90, + 0x81, 0x29, 0xE0, 0x6F, 0x60, 0x03, 0x12, 0x47, + 0x2A, 0xD1, 0x08, 0xBF, 0x01, 0x02, 0x91, 0x5F, + 0xB1, 0xF2, 0x12, 0x32, 0x9E, 0xBF, 0x01, 0x02, + 0xB1, 0x67, 0x12, 0x42, 0x4D, 0x80, 0xCA, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, + 0x24, 0xE0, 0x30, 0xE0, 0x24, 0x90, 0x81, 0x1F, + 0xE0, 0xFF, 0x30, 0xE0, 0x1A, 0xC3, 0x13, 0x30, + 0xE0, 0x07, 0xB1, 0xFB, 0xBF, 0x01, 0x12, 0x80, + 0x0A, 0x90, 0x81, 0x23, 0xE0, 0xFF, 0x60, 0x03, + 0xB4, 0x08, 0x06, 0x91, 0x96, 0x80, 0x02, 0x91, + 0xA6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xB1, 0x22, 0x91, + 0xBA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x81, + 0x2A, 0xE0, 0x70, 0x0D, 0xD1, 0x2F, 0xBF, 0x01, + 0x08, 0x91, 0x96, 0x90, 0x01, 0xE5, 0xE0, 0x04, + 0xF0, 0x22, 0xB1, 0xF3, 0x90, 0x00, 0x08, 0xE0, + 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x32, 0x1E, + 0xE4, 0xFF, 0x8F, 0x50, 0xE4, 0x90, 0x81, 0x5A, + 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, + 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, + 0x50, 0x60, 0x3E, 0xC3, 0x90, 0x81, 0x5B, 0xE0, + 0x94, 0x88, 0x90, 0x81, 0x5A, 0xE0, 0x94, 0x13, + 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, + 0xF0, 0x22, 0x90, 0x81, 0x5A, 0xE4, 0x75, 0xF0, + 0x01, 0x12, 0x44, 0xA9, 0x7F, 0x14, 0x7E, 0x00, + 0x12, 0x32, 0xAA, 0xD3, 0x90, 0x81, 0x5B, 0xE0, + 0x94, 0x32, 0x90, 0x81, 0x5A, 0xE0, 0x94, 0x00, + 0x40, 0xB9, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, + 0xB2, 0x22, 0x90, 0x81, 0x31, 0xE0, 0xFD, 0x7F, + 0x93, 0x12, 0x32, 0x1E, 0x90, 0x81, 0x28, 0xE0, + 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, + 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01, + 0x2F, 0x74, 0x90, 0xF0, 0x90, 0x00, 0x08, 0xE0, + 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12, 0x32, 0x1E, + 0x7F, 0x01, 0x91, 0xCA, 0x90, 0x00, 0x90, 0xE0, + 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x32, 0x1E, + 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x32, 0xAA, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x2D, + 0xA7, 0xE4, 0xF5, 0x52, 0x12, 0x32, 0x9E, 0xEF, + 0x60, 0x73, 0x63, 0x52, 0x01, 0xE5, 0x52, 0x24, + 0x67, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x5D, 0xA3, + 0xF0, 0x90, 0x00, 0x88, 0xE0, 0xF5, 0x50, 0xF5, + 0x51, 0x54, 0x0F, 0x60, 0xDF, 0xE5, 0x50, 0x30, + 0xE0, 0x0B, 0x20, 0xE4, 0x03, 0x12, 0x29, 0xC5, + 0x53, 0x51, 0xEE, 0x80, 0x3F, 0xE5, 0x50, 0x30, + 0xE1, 0x16, 0x20, 0xE5, 0x0E, 0x12, 0x11, 0xBD, + 0xEF, 0x70, 0x03, 0x43, 0x51, 0x20, 0x90, 0x01, + 0x06, 0xE4, 0xF0, 0x53, 0x51, 0xFD, 0x80, 0x24, + 0xE5, 0x50, 0x30, 0xE2, 0x0B, 0x20, 0xE6, 0x03, + 0x12, 0x67, 0x06, 0x53, 0x51, 0xFB, 0x80, 0x14, + 0xE5, 0x50, 0x30, 0xE3, 0x0F, 0x20, 0xE7, 0x09, + 0x12, 0x61, 0x6E, 0xEF, 0x70, 0x03, 0x43, 0x51, + 0x80, 0x53, 0x51, 0xF7, 0xAD, 0x51, 0x7F, 0x88, + 0x12, 0x32, 0x1E, 0x80, 0x87, 0xD0, 0xD0, 0x92, + 0xAF, 0x22, 0x22, 0x90, 0x00, 0x90, 0xE0, 0x20, + 0xE0, 0xF9, 0x22, 0x90, 0x81, 0x22, 0xE0, 0x64, + 0x02, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, + 0x7F, 0x02, 0x90, 0x81, 0x41, 0xE0, 0xFE, 0xEF, + 0xC3, 0x9E, 0x50, 0x18, 0xEF, 0x25, 0xE0, 0x24, + 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x0B, 0x90, 0x01, + 0xB8, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x7F, 0x00, + 0x22, 0x0F, 0x80, 0xDE, 0x7F, 0x01, 0x22, 0x90, + 0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB8, + 0x74, 0x01, 0xF0, 0x80, 0x17, 0x90, 0x02, 0x86, + 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x04, 0xF0, 0x80, 0x08, 0x90, 0x01, 0xB8, 0xE4, + 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB9, 0x74, + 0x08, 0xF0, 0x7F, 0x00, 0x22, 0xE4, 0xFB, 0xFA, + 0xFD, 0x7F, 0x01, 0x12, 0x44, 0x4E, 0x90, 0x81, + 0xBD, 0xEF, 0xF0, 0x60, 0xF0, 0xD1, 0x71, 0x80, + 0xEC, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, + 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x81, + 0xBE, 0xF0, 0x90, 0x81, 0xBE, 0xE0, 0xFD, 0x70, + 0x02, 0xE1, 0x9C, 0x90, 0x82, 0x09, 0xE0, 0xFF, + 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, + 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, + 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xE1, 0x95, 0x90, + 0x82, 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, + 0xD0, 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, 0xBF, + 0xF0, 0x75, 0x13, 0x01, 0x75, 0x14, 0x81, 0x75, + 0x15, 0xBF, 0x75, 0x16, 0x01, 0x7B, 0x01, 0x7A, + 0x81, 0x79, 0xC0, 0x12, 0x2B, 0xED, 0x90, 0x82, + 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, + 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, 0xC1, 0xF0, + 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, + 0x01, 0xD2, 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, + 0xC2, 0xF0, 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, + 0x04, 0x90, 0x01, 0xD3, 0x12, 0x45, 0x0A, 0xE0, + 0x90, 0x81, 0xC3, 0xF0, 0x90, 0x82, 0x09, 0xE0, + 0x75, 0xF0, 0x04, 0x90, 0x01, 0xF0, 0x12, 0x45, + 0x0A, 0xE0, 0x90, 0x81, 0xC4, 0xF0, 0x90, 0x82, + 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xF1, + 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, 0xC5, 0xF0, + 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, + 0x01, 0xF2, 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, + 0xC6, 0xF0, 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, + 0x04, 0x90, 0x01, 0xF3, 0x12, 0x45, 0x0A, 0xE0, + 0x90, 0x81, 0xC7, 0xF0, 0x90, 0x81, 0xBE, 0xE0, + 0xFF, 0x90, 0x82, 0x09, 0xE0, 0xFE, 0x74, 0x01, + 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xF4, 0x5F, 0x90, 0x81, 0xBE, 0xF0, 0x90, + 0x82, 0x09, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, + 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, + 0x01, 0xCC, 0xF0, 0x90, 0x81, 0xC0, 0xE0, 0xFF, + 0x7B, 0x01, 0x7A, 0x81, 0x79, 0xC1, 0x12, 0x55, + 0x3F, 0x90, 0x82, 0x09, 0xE0, 0x04, 0xF0, 0xE0, + 0x54, 0x03, 0xF0, 0xC1, 0x82, 0x90, 0x01, 0xC0, + 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, + 0x44, 0x4E, 0x90, 0x81, 0xD0, 0xEF, 0xF0, 0x60, + 0xF0, 0x12, 0x6C, 0x19, 0x80, 0xEB, 0x90, 0x81, + 0xD4, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, + 0x20, 0xDA, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x90, + 0x81, 0xE2, 0xF0, 0x7F, 0x24, 0x7E, 0x08, 0x12, + 0x2D, 0x5C, 0x90, 0x81, 0xDA, 0x12, 0x20, 0xCE, + 0x90, 0x81, 0xD4, 0xE0, 0xFB, 0x70, 0x08, 0x90, + 0x81, 0xDA, 0x12, 0x44, 0xD9, 0x80, 0x16, 0xEB, + 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x62, 0xF5, 0x82, + 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, + 0xE0, 0xFF, 0x12, 0x2D, 0x5C, 0x90, 0x81, 0xDE, + 0x12, 0x20, 0xCE, 0x90, 0x81, 0xD5, 0xE0, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x17, 0x12, 0x20, + 0xBB, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, + 0x07, 0x90, 0x81, 0xDE, 0x12, 0x44, 0xD9, 0xED, + 0x54, 0x7F, 0xFD, 0xEC, 0x54, 0x80, 0xFC, 0x12, + 0x44, 0xCC, 0xEC, 0x44, 0x80, 0xFC, 0x90, 0x81, + 0xDE, 0x12, 0x20, 0xCE, 0x90, 0x81, 0xDA, 0x12, + 0x44, 0xD9, 0xEC, 0x54, 0x7F, 0xFC, 0x90, 0x85, + 0xBB, 0x12, 0x20, 0xCE, 0x7F, 0x24, 0x7E, 0x08, + 0x12, 0x2E, 0xA2, 0x90, 0x81, 0xD4, 0xE0, 0x75, + 0xF0, 0x08, 0xA4, 0x24, 0x62, 0xF5, 0x82, 0xE4, + 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, + 0xFF, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x81, 0xDE, + 0x12, 0x44, 0xD9, 0x90, 0x85, 0xBB, 0x12, 0x20, + 0xCE, 0xD0, 0x07, 0xD0, 0x06, 0x12, 0x2E, 0xA2, + 0x90, 0x81, 0xDA, 0x12, 0x44, 0xD9, 0xEC, 0x44, + 0x80, 0xFC, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xCE, + 0x7F, 0x24, 0x7E, 0x08, 0x12, 0x2E, 0xA2, 0x90, + 0x81, 0xD4, 0xE0, 0x70, 0x04, 0x7F, 0x20, 0x80, + 0x09, 0x90, 0x81, 0xD4, 0xE0, 0xB4, 0x01, 0x16, + 0x7F, 0x28, 0x7E, 0x08, 0x12, 0x2D, 0x5C, 0x78, + 0x08, 0x12, 0x20, 0xA8, 0xEF, 0x54, 0x01, 0xFF, + 0xE4, 0x90, 0x81, 0xE2, 0xEF, 0xF0, 0x90, 0x81, + 0xE2, 0xE0, 0x90, 0x81, 0xD4, 0x60, 0x0E, 0xE0, + 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x66, 0xF5, 0x82, + 0xE4, 0x34, 0x87, 0x80, 0x0C, 0xE0, 0x75, 0xF0, + 0x08, 0xA4, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, + 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, + 0x12, 0x2D, 0x5C, 0xED, 0x54, 0x0F, 0xFD, 0xE4, + 0xFC, 0x90, 0x81, 0xD6, 0x12, 0x20, 0xCE, 0x90, + 0x81, 0xD6, 0x02, 0x44, 0xD9, 0x90, 0x81, 0xE3, + 0xEF, 0xF0, 0xAB, 0x05, 0x90, 0x81, 0xE9, 0x12, + 0x20, 0xDA, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x03, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x14, 0x12, 0x20, + 0xBB, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, + 0x07, 0x90, 0x81, 0xE5, 0x12, 0x44, 0xD9, 0xED, + 0x54, 0x0F, 0xFD, 0xE4, 0xFC, 0x12, 0x44, 0xCC, + 0xEC, 0x54, 0x0F, 0xFC, 0x90, 0x81, 0xE9, 0x12, + 0x20, 0xCE, 0x90, 0x81, 0xE3, 0xE0, 0x75, 0xF0, + 0x08, 0xA4, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, + 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, + 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x81, 0xE9, 0x12, + 0x44, 0xD9, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xCE, + 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x2E, 0xA2, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x5F, + 0xB6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x78, 0x10, + 0x74, 0x01, 0xF2, 0x90, 0x02, 0x09, 0xE0, 0x78, + 0x00, 0xF2, 0x08, 0x74, 0x20, 0xF2, 0x18, 0xE2, + 0xFF, 0x30, 0xE0, 0x05, 0x08, 0xE2, 0x24, 0x80, + 0xF2, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, + 0x78, 0x01, 0xE2, 0x24, 0x00, 0xF5, 0x82, 0xE4, + 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x78, 0x03, 0xF2, + 0x64, 0x04, 0x60, 0x0D, 0xE2, 0xFF, 0x64, 0x08, + 0x60, 0x07, 0xEF, 0x64, 0x0C, 0x60, 0x02, 0x61, + 0xDE, 0xE4, 0x78, 0x02, 0xF2, 0x78, 0x03, 0xE2, + 0xFF, 0x18, 0xE2, 0xC3, 0x9F, 0x50, 0x2D, 0xE2, + 0xFD, 0x18, 0xE2, 0x2D, 0x90, 0x81, 0x5A, 0xF0, + 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x04, 0x2D, + 0xF8, 0xEE, 0xF2, 0xEF, 0xB4, 0xFF, 0x06, 0x90, + 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0x78, 0x02, 0xE2, + 0x04, 0xF2, 0x80, 0xC9, 0x78, 0x04, 0xE2, 0x78, + 0x12, 0xF2, 0xFF, 0x78, 0x05, 0xE2, 0x78, 0x11, + 0xF2, 0x78, 0x06, 0xE2, 0x78, 0x13, 0xF2, 0x78, + 0x07, 0xE2, 0x78, 0x14, 0xF2, 0x78, 0x08, 0xE2, + 0x78, 0x33, 0xF2, 0x78, 0x09, 0xE2, 0x78, 0x34, + 0xF2, 0x78, 0x0A, 0xE2, 0x78, 0x35, 0xF2, 0x78, + 0x0B, 0xE2, 0x78, 0x36, 0xF2, 0x78, 0x0C, 0xE2, + 0x78, 0x37, 0xF2, 0x78, 0x0D, 0xE2, 0x78, 0x38, + 0xF2, 0x78, 0x0E, 0xE2, 0x78, 0x39, 0xF2, 0x78, + 0x0F, 0xE2, 0x78, 0x3A, 0xF2, 0xE4, 0x78, 0x15, + 0xF2, 0xEF, 0x24, 0xF8, 0x60, 0x75, 0x24, 0xFC, + 0x60, 0x6C, 0x24, 0x08, 0x60, 0x02, 0x61, 0xC0, + 0x78, 0x11, 0xE2, 0xB4, 0x01, 0x05, 0x12, 0x29, + 0xC5, 0x61, 0xC5, 0x78, 0x11, 0xE2, 0xB4, 0x02, + 0x05, 0x12, 0x11, 0xBD, 0x61, 0xC5, 0x78, 0x11, + 0xE2, 0xB4, 0x03, 0x04, 0xF1, 0x06, 0x61, 0xC5, + 0x78, 0x11, 0xE2, 0xB4, 0x10, 0x17, 0x78, 0x14, + 0xE2, 0xFE, 0x18, 0xE2, 0xFD, 0xED, 0xFF, 0x78, + 0x16, 0xEE, 0xF2, 0xFE, 0x08, 0xEF, 0xF2, 0xFF, + 0x12, 0x32, 0xAA, 0x61, 0xC5, 0x78, 0x11, 0xE2, + 0xB4, 0x11, 0x17, 0x78, 0x14, 0xE2, 0xFE, 0x18, + 0xE2, 0xFD, 0xED, 0xFF, 0x78, 0x16, 0xEE, 0xF2, + 0xFE, 0x08, 0xEF, 0xF2, 0xFF, 0x12, 0x32, 0x06, + 0x61, 0xC5, 0x78, 0x11, 0xE2, 0xF4, 0x60, 0x02, + 0x61, 0xC5, 0x18, 0xF2, 0x61, 0xC5, 0x78, 0x15, + 0x74, 0x01, 0xF2, 0x78, 0x11, 0xE2, 0x64, 0x07, + 0x60, 0x02, 0x61, 0xAA, 0x78, 0x34, 0xE2, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x20, + 0xBB, 0xC0, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, + 0x07, 0x78, 0x33, 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, + 0xFE, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0xC0, 0x04, + 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x78, 0x35, + 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x10, + 0x12, 0x20, 0xBB, 0xD0, 0x03, 0xD0, 0x02, 0xD0, + 0x01, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0x78, 0x18, + 0x12, 0x44, 0xFE, 0x78, 0x15, 0xE2, 0x70, 0x02, + 0x61, 0x93, 0x18, 0xE2, 0xFF, 0x18, 0xE2, 0xFD, + 0x31, 0x5F, 0x78, 0x1C, 0x12, 0x44, 0xFE, 0x78, + 0x38, 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, + 0x08, 0x12, 0x20, 0xBB, 0xC0, 0x04, 0xA9, 0x05, + 0xAA, 0x06, 0xAB, 0x07, 0x78, 0x37, 0xE2, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0xD0, 0x00, 0x12, 0x44, + 0xCC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, + 0x07, 0x78, 0x39, 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, + 0xFE, 0x78, 0x10, 0x12, 0x20, 0xBB, 0xD0, 0x03, + 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x44, + 0xCC, 0x78, 0x20, 0x12, 0x44, 0xFE, 0x78, 0x20, + 0x12, 0x44, 0xE5, 0x12, 0x20, 0x9B, 0x78, 0x1C, + 0x12, 0x44, 0xF1, 0x12, 0x44, 0xBF, 0xC0, 0x04, + 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x78, 0x18, + 0x12, 0x44, 0xE5, 0x78, 0x20, 0x12, 0x44, 0xF1, + 0x12, 0x44, 0xBF, 0xD0, 0x03, 0xD0, 0x02, 0xD0, + 0x01, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0x78, 0x18, + 0x12, 0x44, 0xFE, 0x78, 0x18, 0x12, 0x44, 0xE5, + 0x90, 0x81, 0xF9, 0x12, 0x20, 0xCE, 0x78, 0x13, + 0xE2, 0xFD, 0x08, 0xE2, 0xFF, 0x12, 0x55, 0x1C, + 0x80, 0x1B, 0x78, 0x13, 0xE2, 0xFF, 0x08, 0xE2, + 0xFD, 0x78, 0x11, 0xE2, 0xFB, 0x78, 0x15, 0xE2, + 0x90, 0x81, 0xBC, 0xF0, 0x71, 0xE1, 0x80, 0x05, + 0x78, 0x10, 0x74, 0x02, 0xF2, 0x78, 0x10, 0xE2, + 0xFF, 0xC3, 0x94, 0x02, 0x50, 0x10, 0xEF, 0x60, + 0x0A, 0x78, 0x02, 0xE2, 0xFF, 0x18, 0xE2, 0x2F, + 0xF2, 0x21, 0x90, 0x7F, 0x01, 0x22, 0x7F, 0x00, + 0x22, 0xAC, 0x07, 0xED, 0xAD, 0x04, 0x78, 0x24, + 0xF2, 0xED, 0x08, 0xF2, 0xEB, 0xB4, 0x04, 0x07, + 0x78, 0x27, 0x74, 0x01, 0xF2, 0x80, 0x0E, 0xEB, + 0x78, 0x27, 0xB4, 0x05, 0x05, 0x74, 0x02, 0xF2, + 0x80, 0x03, 0x74, 0x04, 0xF2, 0xD3, 0x78, 0x25, + 0xE2, 0x94, 0xFF, 0x18, 0xE2, 0x94, 0x00, 0x50, + 0x63, 0xE4, 0x78, 0x26, 0xF2, 0x78, 0x27, 0xE2, + 0xFF, 0x18, 0xE2, 0xFE, 0xC3, 0x9F, 0x40, 0x02, + 0xA1, 0x7F, 0x74, 0x33, 0x2E, 0xF8, 0xE2, 0x78, + 0x28, 0xF2, 0x90, 0x81, 0xBC, 0xE0, 0x60, 0x2D, + 0x74, 0x37, 0x2E, 0xF8, 0xE2, 0x78, 0x32, 0xF2, + 0xEE, 0xFF, 0x78, 0x25, 0xE2, 0x2F, 0xFF, 0x18, + 0xE2, 0x34, 0x00, 0x8F, 0x82, 0xF5, 0x83, 0xE0, + 0x78, 0x29, 0xF2, 0x78, 0x32, 0xE2, 0xFF, 0xF4, + 0xFE, 0x78, 0x29, 0xE2, 0x5E, 0xFE, 0x18, 0xE2, + 0xFD, 0xEF, 0x5D, 0x4E, 0xF2, 0x78, 0x24, 0x08, + 0xE2, 0xFF, 0x08, 0xE2, 0x2F, 0xFF, 0x78, 0x28, + 0xE2, 0xFD, 0x12, 0x32, 0x1E, 0x78, 0x26, 0xE2, + 0x04, 0xF2, 0x80, 0xA1, 0xD3, 0x78, 0x25, 0xE2, + 0x94, 0xFF, 0x18, 0xE2, 0x94, 0x07, 0x50, 0x69, + 0xE4, 0x78, 0x26, 0xF2, 0x78, 0x27, 0xE2, 0xFF, + 0x18, 0xE2, 0xFE, 0xC3, 0x9F, 0x40, 0x02, 0xA1, + 0x7F, 0x74, 0x33, 0x2E, 0xF8, 0xE2, 0x78, 0x28, + 0xF2, 0x90, 0x81, 0xBC, 0xE0, 0x60, 0x2D, 0x78, + 0x26, 0xE2, 0xFF, 0xFD, 0x18, 0xE2, 0x2D, 0xFD, + 0x18, 0xE2, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, + 0xE0, 0x78, 0x29, 0xF2, 0x74, 0x37, 0x2F, 0xF8, + 0xE2, 0x78, 0x32, 0xF2, 0xE2, 0xFF, 0xF4, 0xFE, + 0x78, 0x29, 0xE2, 0x5E, 0xFE, 0x18, 0xE2, 0xFD, + 0xEF, 0x5D, 0x4E, 0xF2, 0x78, 0x28, 0xE2, 0xFF, + 0x78, 0x26, 0xE2, 0xFD, 0x18, 0xE2, 0x2D, 0xFD, + 0x18, 0xE2, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, + 0xEF, 0xF0, 0x78, 0x26, 0xE2, 0x04, 0xF2, 0x80, + 0x9B, 0x90, 0x81, 0xBC, 0xE0, 0x60, 0x0F, 0x78, + 0x24, 0xE2, 0xFE, 0x08, 0xE2, 0xFF, 0x12, 0x2D, + 0x5C, 0x78, 0x2E, 0x12, 0x44, 0xFE, 0xE4, 0x78, + 0x26, 0xF2, 0x78, 0x27, 0xE2, 0xFF, 0x18, 0xE2, + 0xFE, 0xC3, 0x9F, 0x50, 0x5D, 0x74, 0x33, 0x2E, + 0xF8, 0xE2, 0x78, 0x28, 0xF2, 0x90, 0x81, 0xBC, + 0xE0, 0x60, 0x2B, 0x78, 0x2E, 0x12, 0x44, 0xE5, + 0x78, 0x26, 0xE2, 0xFB, 0x75, 0xF0, 0x08, 0xA4, + 0xF9, 0xF8, 0x12, 0x20, 0xA8, 0x78, 0x29, 0xEF, + 0xF2, 0x74, 0x37, 0x2B, 0xF8, 0xE2, 0x78, 0x32, + 0xF2, 0xE2, 0xFE, 0xF4, 0x5F, 0xFF, 0x78, 0x28, + 0xE2, 0xFD, 0xEE, 0x5D, 0x4F, 0xF2, 0x78, 0x28, + 0xE2, 0xFF, 0x78, 0x26, 0xE2, 0xFD, 0xC3, 0x74, + 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x7B, + 0xFE, 0x74, 0x2A, 0x2D, 0xF9, 0x74, 0x80, 0x3C, + 0xFA, 0xEF, 0x12, 0x1F, 0xEA, 0xE2, 0x04, 0xF2, + 0x80, 0x98, 0x78, 0x2A, 0x12, 0x44, 0xE5, 0x90, + 0x85, 0xBB, 0x12, 0x20, 0xCE, 0x78, 0x24, 0xE2, + 0xFE, 0x08, 0xE2, 0xFF, 0x12, 0x2E, 0xA2, 0x22, + 0x22, 0x90, 0x81, 0xCB, 0x12, 0x45, 0x1F, 0x90, + 0x00, 0x01, 0x12, 0x1F, 0xBD, 0xFF, 0xFE, 0x12, + 0x1F, 0xA4, 0xFD, 0xC3, 0x13, 0x30, 0xE0, 0x12, + 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, 0x90, 0x00, + 0x02, 0x12, 0x1F, 0xBD, 0x90, 0x81, 0xCF, 0xF0, + 0x80, 0x05, 0x90, 0x81, 0xCF, 0xEF, 0xF0, 0x90, + 0x81, 0xCE, 0xEE, 0xF0, 0x90, 0x81, 0xCF, 0xE0, + 0xFE, 0x90, 0x81, 0xCE, 0xE0, 0xFF, 0xD3, 0x9E, + 0x50, 0x38, 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, + 0x12, 0x1F, 0xA4, 0x54, 0x01, 0xFE, 0x74, 0xDE, + 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, + 0xEE, 0xF0, 0x74, 0xDE, 0x2F, 0xF5, 0x82, 0xE4, + 0x34, 0x80, 0xF5, 0x83, 0xE0, 0x70, 0x04, 0xD1, + 0x25, 0x80, 0x07, 0x90, 0x81, 0xCE, 0xE0, 0xFF, + 0xB1, 0x80, 0x90, 0x81, 0xCE, 0xE0, 0x04, 0xF0, + 0x80, 0xBA, 0x90, 0x80, 0xDE, 0xE0, 0x70, 0x24, + 0x90, 0x81, 0x2A, 0xE0, 0x70, 0x04, 0xFF, 0x12, + 0x49, 0x93, 0x90, 0x81, 0x2A, 0xE0, 0x64, 0x0C, + 0x60, 0x02, 0xD1, 0x26, 0x90, 0x81, 0x24, 0xE0, + 0x54, 0xF7, 0xF0, 0x54, 0xEF, 0xF0, 0x54, 0xBF, + 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x22, 0x90, 0x06, + 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x05, 0x22, + 0xE4, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x0C, 0xF0, + 0x22, 0x90, 0x81, 0xED, 0xEF, 0xF0, 0xA3, 0xED, + 0xF0, 0xAD, 0x03, 0xAC, 0x02, 0xE4, 0x90, 0x81, + 0xF5, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, + 0x39, 0xF0, 0x74, 0x66, 0xA3, 0xF0, 0xEC, 0x54, + 0x3F, 0xFC, 0x90, 0x01, 0x40, 0xED, 0xF0, 0xAE, + 0x04, 0xEE, 0xA3, 0xF0, 0x90, 0x81, 0xED, 0xE0, + 0x24, 0x81, 0x60, 0x34, 0x24, 0xDA, 0x60, 0x1C, + 0x24, 0x3C, 0x70, 0x41, 0x90, 0x81, 0xEE, 0xE0, + 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x90, 0x81, + 0xF2, 0xF0, 0xA3, 0x74, 0x69, 0xF0, 0xA3, 0x74, + 0x80, 0xF0, 0x80, 0x2C, 0x90, 0x81, 0xEE, 0xE0, + 0x54, 0x01, 0x90, 0x81, 0xF2, 0xF0, 0xA3, 0x74, + 0xA5, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x80, 0x18, + 0x90, 0x81, 0xEE, 0xE0, 0xC4, 0x54, 0x10, 0x90, + 0x81, 0xF2, 0xF0, 0xA3, 0x74, 0x7F, 0xF0, 0xA3, + 0x74, 0x10, 0xF0, 0x80, 0x03, 0x7F, 0x00, 0x22, + 0x90, 0x81, 0xF3, 0xE0, 0x90, 0x01, 0x06, 0xF0, + 0x90, 0x81, 0xF2, 0xE0, 0x60, 0x0E, 0x90, 0x01, + 0x42, 0xF0, 0x90, 0x81, 0xF1, 0xE0, 0x90, 0x01, + 0x43, 0xF0, 0x80, 0x0D, 0x90, 0x01, 0x43, 0xE4, + 0xF0, 0x90, 0x81, 0xF2, 0xE0, 0x90, 0x01, 0x42, + 0xF0, 0x90, 0x81, 0xF4, 0xE0, 0xFF, 0x90, 0x01, + 0x42, 0xE0, 0x5F, 0xFF, 0x90, 0x81, 0xF2, 0xE0, + 0x6F, 0x60, 0xEE, 0x74, 0x39, 0x04, 0x90, 0x01, + 0xC4, 0xF0, 0x74, 0x66, 0xA3, 0xF0, 0x90, 0x01, + 0x43, 0xE4, 0xF0, 0x7F, 0x01, 0x22, 0xE4, 0x90, + 0x81, 0x6A, 0xF0, 0x90, 0x87, 0x5F, 0xE0, 0x90, + 0x81, 0x69, 0xF0, 0xE4, 0x90, 0x81, 0x76, 0xF0, + 0x90, 0x81, 0x66, 0xF0, 0x90, 0x81, 0x66, 0xE0, + 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x15, 0x74, 0x79, + 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, + 0x74, 0xFF, 0xF0, 0x90, 0x81, 0x66, 0xE0, 0x04, + 0xF0, 0x80, 0xE1, 0xE4, 0x90, 0x81, 0x66, 0xF0, + 0x90, 0x81, 0x69, 0xE0, 0xFF, 0x90, 0x81, 0x66, + 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, 0x02, 0x68, + 0x12, 0x74, 0xDF, 0x2E, 0xF9, 0xE4, 0x34, 0x86, + 0x75, 0x13, 0x01, 0xF5, 0x14, 0x89, 0x15, 0x75, + 0x16, 0x0A, 0x7B, 0x01, 0x7A, 0x81, 0x79, 0x5B, + 0x12, 0x2B, 0xED, 0x90, 0x81, 0x5C, 0xE0, 0xFF, + 0x12, 0x2F, 0x27, 0xEF, 0x04, 0x90, 0x81, 0x76, + 0xF0, 0x90, 0x81, 0x5B, 0xE0, 0xFF, 0xA3, 0xE0, + 0xFD, 0x12, 0x31, 0xEA, 0xEF, 0x24, 0xC8, 0x90, + 0x81, 0x78, 0xF0, 0x75, 0xF0, 0x08, 0xA4, 0xF0, + 0x90, 0x81, 0x5C, 0xE0, 0x54, 0x0F, 0x90, 0x81, + 0x77, 0xF0, 0xE4, 0x90, 0x81, 0x65, 0xF0, 0x90, + 0x81, 0x67, 0xF0, 0x90, 0x81, 0x67, 0xE0, 0xFF, + 0xC3, 0x94, 0x04, 0x50, 0x57, 0x90, 0x81, 0x77, + 0xE0, 0xFE, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, + 0x13, 0xD8, 0xFC, 0x20, 0xE0, 0x3E, 0x90, 0x81, + 0x67, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x81, 0x78, + 0xE0, 0x2F, 0x24, 0x79, 0xF9, 0xE4, 0x34, 0x81, + 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x01, 0x90, + 0x81, 0x65, 0xE0, 0x75, 0xF0, 0x02, 0xA4, 0x24, + 0x5D, 0xF9, 0x74, 0x81, 0x35, 0xF0, 0x8B, 0x13, + 0xF5, 0x14, 0x89, 0x15, 0x75, 0x16, 0x02, 0xD0, + 0x01, 0xD0, 0x03, 0x12, 0x2B, 0xED, 0x90, 0x81, + 0x65, 0xE0, 0x04, 0xF0, 0x90, 0x81, 0x67, 0xE0, + 0x04, 0xF0, 0x80, 0x9F, 0x90, 0x81, 0x76, 0xE0, + 0xFF, 0x90, 0x81, 0x66, 0xE0, 0x2F, 0xF0, 0x02, + 0x67, 0x40, 0xE4, 0x90, 0x81, 0x6A, 0xF0, 0x90, + 0x81, 0x6A, 0xE0, 0xC3, 0x94, 0x40, 0x40, 0x02, + 0x41, 0xAF, 0xE0, 0xFF, 0x24, 0x79, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0x90, 0x81, + 0x6C, 0xF0, 0xE0, 0xFE, 0x54, 0xF0, 0xC4, 0x54, + 0x0F, 0xFD, 0x90, 0x81, 0x6B, 0xF0, 0xEE, 0x54, + 0x0F, 0xFE, 0xA3, 0xF0, 0x74, 0x7A, 0x2F, 0xF5, + 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0x90, + 0x81, 0x6D, 0xF0, 0xFC, 0xEE, 0xFE, 0xEC, 0xFB, + 0xEB, 0xFF, 0x90, 0x81, 0x72, 0xEE, 0xF0, 0xA3, + 0xEF, 0xF0, 0xED, 0x12, 0x45, 0x28, 0x68, 0x8B, + 0x00, 0x68, 0xC2, 0x01, 0x69, 0x73, 0x02, 0x6A, + 0xA0, 0x03, 0x69, 0x8E, 0x04, 0x69, 0xAF, 0x05, + 0x69, 0xAF, 0x06, 0x69, 0xAF, 0x07, 0x69, 0xAF, + 0x08, 0x6A, 0x33, 0x09, 0x6A, 0x69, 0x0A, 0x00, + 0x00, 0x6A, 0xAF, 0x90, 0x81, 0x6A, 0xE0, 0xFD, + 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, + 0x83, 0xE0, 0xFE, 0x74, 0x7B, 0x2D, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFD, 0xED, + 0xFF, 0x90, 0x81, 0x74, 0xEE, 0xF0, 0xFC, 0xA3, + 0xEF, 0xF0, 0x90, 0x81, 0x6D, 0xE0, 0xFF, 0x12, + 0x2F, 0x96, 0x90, 0x81, 0x68, 0x74, 0x02, 0xF0, + 0x41, 0xA0, 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7C, + 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, + 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, + 0x20, 0xBB, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, + 0xAB, 0x07, 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7B, + 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, + 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x12, 0x44, 0xCC, + 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, + 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7D, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFF, 0xE4, + 0xFC, 0xFD, 0xFE, 0x78, 0x10, 0x12, 0x20, 0xBB, + 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, + 0x12, 0x44, 0xCC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, + 0x06, 0xC0, 0x07, 0x90, 0x81, 0x6A, 0xE0, 0x24, + 0x7E, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, + 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, + 0x12, 0x20, 0xBB, 0xD0, 0x03, 0xD0, 0x02, 0xD0, + 0x01, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0x90, 0x81, + 0x6E, 0x12, 0x20, 0xCE, 0x90, 0x81, 0x6E, 0x12, + 0x44, 0xD9, 0x90, 0x85, 0x96, 0x12, 0x20, 0xCE, + 0x90, 0x81, 0x72, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, + 0x12, 0x2E, 0xE4, 0x90, 0x81, 0x68, 0x74, 0x04, + 0xF0, 0x41, 0xA0, 0x90, 0x81, 0x6D, 0xE0, 0xFD, + 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7B, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, + 0xFF, 0x12, 0x30, 0xC7, 0x80, 0x19, 0x90, 0x81, + 0x6D, 0xE0, 0xFD, 0x90, 0x81, 0x6A, 0xE0, 0x24, + 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, + 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x30, 0x6A, 0x90, + 0x81, 0x68, 0x74, 0x01, 0xF0, 0x41, 0xA0, 0x90, + 0x81, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x81, 0x6A, + 0xE0, 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x81, + 0xF5, 0x83, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, + 0x78, 0x08, 0x12, 0x20, 0xBB, 0xA8, 0x04, 0xA9, + 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x81, 0x6A, + 0xE0, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x81, + 0xF5, 0x83, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, + 0x12, 0x44, 0xCC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, + 0x06, 0xC0, 0x07, 0x90, 0x81, 0x6C, 0xE0, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x10, 0x12, 0x20, + 0xBB, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, + 0x00, 0x12, 0x44, 0xCC, 0x90, 0x81, 0x6E, 0x12, + 0x20, 0xCE, 0x90, 0x81, 0x6B, 0xE0, 0x24, 0xFB, + 0xFF, 0xC0, 0x07, 0x90, 0x81, 0x6E, 0x12, 0x44, + 0xD9, 0x90, 0x81, 0xF9, 0x12, 0x20, 0xCE, 0x90, + 0x81, 0x6D, 0xE0, 0xFD, 0xD0, 0x07, 0x12, 0x55, + 0x1C, 0x80, 0x6D, 0x90, 0x81, 0x68, 0x74, 0x01, + 0xF0, 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7B, 0xF9, + 0xE4, 0x34, 0x81, 0x75, 0x13, 0x01, 0xF5, 0x14, + 0x89, 0x15, 0x75, 0x16, 0x01, 0x7B, 0xFE, 0x7A, + 0x80, 0x79, 0x33, 0x12, 0x2B, 0xED, 0x90, 0x81, + 0x6D, 0xE0, 0xFF, 0x90, 0x81, 0x6C, 0xE0, 0xFD, + 0xE4, 0x90, 0x81, 0xBC, 0xF0, 0x7B, 0x04, 0x80, + 0x34, 0x90, 0x81, 0x68, 0x74, 0x04, 0xF0, 0x90, + 0x81, 0x6A, 0xE0, 0x24, 0x7B, 0xF9, 0xE4, 0x34, + 0x81, 0x75, 0x13, 0x01, 0xF5, 0x14, 0x89, 0x15, + 0x75, 0x16, 0x04, 0x7B, 0xFE, 0x7A, 0x80, 0x79, + 0x33, 0x12, 0x2B, 0xED, 0x90, 0x81, 0x6D, 0xE0, + 0xFF, 0x90, 0x81, 0x6C, 0xE0, 0xFD, 0xE4, 0x90, + 0x81, 0xBC, 0xF0, 0x7B, 0x06, 0x12, 0x63, 0xE1, + 0x90, 0x81, 0x68, 0xE0, 0x24, 0x02, 0xFF, 0x90, + 0x81, 0x6A, 0xE0, 0x2F, 0xF0, 0x01, 0x17, 0x22, + 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1F, 0xA4, + 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x80, 0x3D, + 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0xFF, + 0xED, 0x2F, 0x90, 0x80, 0x3E, 0xF0, 0x90, 0x00, + 0x02, 0x12, 0x1F, 0xBD, 0xFF, 0xED, 0x2F, 0x90, + 0x80, 0x3F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, + 0xBD, 0xFF, 0xED, 0x2F, 0x90, 0x80, 0x40, 0xF0, + 0x90, 0x00, 0x04, 0x12, 0x1F, 0xBD, 0xFF, 0xAE, + 0x05, 0xED, 0x2F, 0x90, 0x80, 0x41, 0xF0, 0x22, + 0x90, 0x00, 0x02, 0x12, 0x1F, 0xBD, 0xFF, 0x30, + 0xE0, 0x26, 0x12, 0x1F, 0xA4, 0x90, 0x81, 0x38, + 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0x90, + 0x81, 0x39, 0xF0, 0xEF, 0x54, 0xFE, 0xFF, 0xA3, + 0xE0, 0x54, 0x01, 0x4F, 0xF0, 0x90, 0x00, 0x03, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x3B, 0xF0, 0x22, + 0x90, 0x81, 0x38, 0x74, 0x01, 0xF0, 0xA3, 0x74, + 0x05, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, + 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1F, + 0xA4, 0x90, 0x81, 0x3E, 0xF0, 0x90, 0x81, 0x3E, + 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1F, + 0xA4, 0x90, 0x81, 0x4A, 0xF0, 0x90, 0x00, 0x01, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x4B, 0xF0, 0x22, + 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, + 0x81, 0xFD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, + 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x81, 0xFD, 0xE0, + 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, + 0x60, 0x2D, 0xC3, 0x90, 0x82, 0x00, 0xE0, 0x94, + 0xE8, 0x90, 0x81, 0xFF, 0xE0, 0x94, 0x03, 0x40, + 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, 0xF0, + 0x7F, 0x00, 0x80, 0x15, 0x90, 0x81, 0xFF, 0xE4, + 0x75, 0xF0, 0x01, 0x12, 0x44, 0xA9, 0x7F, 0x0A, + 0x7E, 0x00, 0x12, 0x32, 0xAA, 0x80, 0xC5, 0x7F, + 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, 0xD1, + 0x12, 0x45, 0x1F, 0x90, 0x82, 0x0A, 0xE0, 0xFF, + 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x1F, + 0xFC, 0x7F, 0xAF, 0x7E, 0x01, 0x71, 0x60, 0xEF, + 0x60, 0x3A, 0x90, 0x81, 0xD1, 0x12, 0x45, 0x16, + 0x8B, 0x13, 0x8A, 0x14, 0x89, 0x15, 0x90, 0x00, + 0x0E, 0x12, 0x1F, 0xBD, 0x24, 0x02, 0xF5, 0x16, + 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x2B, + 0xED, 0x90, 0x81, 0xD1, 0x12, 0x45, 0x16, 0x90, + 0x00, 0x0E, 0x12, 0x1F, 0xBD, 0x90, 0x01, 0xAE, + 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, + 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, + 0xE4, 0xFF, 0x90, 0x80, 0xD9, 0xE0, 0xFE, 0x90, + 0x80, 0xD8, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, + 0x01, 0x80, 0x02, 0x7E, 0x00, 0xEE, 0x64, 0x01, + 0x60, 0x32, 0x90, 0x01, 0xAF, 0xE0, 0x70, 0x13, + 0xED, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x42, 0xF9, + 0x74, 0x80, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x71, + 0xB6, 0x7F, 0x01, 0xEF, 0x60, 0x16, 0x90, 0x80, + 0xD8, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0xB4, + 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, + 0x90, 0x80, 0xD8, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0x8F, 0x0D, 0x22, 0x8F, 0x0E, 0x22, 0x22, + 0x90, 0x01, 0x34, 0xE0, 0x55, 0x3D, 0xF5, 0x41, + 0xA3, 0xE0, 0x55, 0x3E, 0xF5, 0x42, 0xA3, 0xE0, + 0x55, 0x3F, 0xF5, 0x43, 0xA3, 0xE0, 0x55, 0x40, + 0xF5, 0x44, 0x90, 0x01, 0x34, 0xE5, 0x41, 0xF0, + 0xA3, 0xE5, 0x42, 0xF0, 0xA3, 0xE5, 0x43, 0xF0, + 0xA3, 0xE5, 0x44, 0xF0, 0x22, 0x90, 0x01, 0x3C, + 0xE0, 0x55, 0x45, 0xF5, 0x49, 0xA3, 0xE0, 0x55, + 0x46, 0xF5, 0x4A, 0xA3, 0xE0, 0x55, 0x47, 0xF5, + 0x4B, 0xA3, 0xE0, 0x55, 0x48, 0xF5, 0x4C, 0x90, + 0x01, 0x3C, 0xE5, 0x49, 0xF0, 0xA3, 0xE5, 0x4A, + 0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0xA3, 0xE5, 0x4C, + 0xF0, 0x53, 0x91, 0xDF, 0x22, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x05, 0xE4, 0xA3, 0xF0, 0xA3, + 0xF0, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, + 0x70, 0x19, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x13, + 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, + 0x74, 0x02, 0x12, 0x4F, 0xF4, 0x90, 0x01, 0x57, + 0x74, 0x05, 0xF0, 0x22, 0x90, 0x80, 0xDE, 0xE0, + 0x64, 0x01, 0x70, 0x26, 0x90, 0x81, 0x27, 0xE0, + 0x60, 0x20, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, + 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x81, 0x2B, 0xE0, + 0x54, 0xFD, 0xF0, 0x54, 0x07, 0x70, 0x03, 0x12, + 0x47, 0x2A, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0xB4, + 0x01, 0x14, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x0E, + 0x90, 0x81, 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x02, + 0x60, 0x02, 0x80, 0x03, 0xD1, 0x7F, 0x22, 0x90, + 0x04, 0x1D, 0xE0, 0x70, 0x13, 0x90, 0x80, 0x3E, + 0xE0, 0xFF, 0xE4, 0xFD, 0xB1, 0x69, 0x8E, 0x4E, + 0x8F, 0x4F, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, + 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, + 0x90, 0x82, 0x0E, 0xED, 0xF0, 0x90, 0x82, 0x0D, + 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0xF1, 0x37, 0x7C, + 0x00, 0xAD, 0x07, 0x90, 0x82, 0x0D, 0xE0, 0x90, + 0x04, 0x25, 0xF0, 0x90, 0x82, 0x0E, 0xE0, 0x60, + 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, + 0x05, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, + 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2D, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, + 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, + 0xAF, 0x22, 0x8F, 0x4E, 0xF1, 0x4B, 0xBF, 0x01, + 0x18, 0x90, 0x80, 0x40, 0xE0, 0xFF, 0x7D, 0x01, + 0xB1, 0x69, 0xAD, 0x07, 0xAC, 0x06, 0xAF, 0x4E, + 0x12, 0x4F, 0x82, 0x90, 0x04, 0x1F, 0x74, 0x20, + 0xF0, 0x22, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x81, + 0x4C, 0xF0, 0xE0, 0xFD, 0x54, 0xC0, 0x70, 0x09, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFE, 0xF0, 0x80, + 0x72, 0xED, 0x30, 0xE6, 0x4B, 0x90, 0x81, 0x27, + 0xE0, 0x64, 0x02, 0x70, 0x2A, 0x90, 0x81, 0x24, + 0xE0, 0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x09, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x28, + 0x90, 0x81, 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x01, + 0x70, 0x2D, 0x90, 0x81, 0x2B, 0xE0, 0x44, 0x04, + 0xF0, 0x7F, 0x01, 0xB1, 0xD2, 0x80, 0x20, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x81, + 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x02, 0x60, 0x04, + 0xB1, 0x4F, 0x80, 0x0B, 0xD1, 0x7F, 0x80, 0x07, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFE, 0xF0, 0x90, + 0x81, 0x4C, 0xE0, 0x90, 0x81, 0x2B, 0x30, 0xE7, + 0x11, 0x12, 0x4F, 0xF1, 0x90, 0x01, 0x57, 0x74, + 0x05, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x44, 0x04, + 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, + 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, + 0x08, 0xF0, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x50, + 0x05, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, + 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x81, 0x2A, 0xE0, + 0x64, 0x0C, 0x60, 0x0C, 0xE4, 0xFD, 0x7F, 0x0C, + 0x12, 0x47, 0x3D, 0xE4, 0xFF, 0x12, 0x4F, 0x0D, + 0x22, 0xE4, 0x90, 0x81, 0x4C, 0xF0, 0x90, 0x06, + 0xA9, 0xE0, 0x90, 0x81, 0x4C, 0xF0, 0xE0, 0x54, + 0xC0, 0x70, 0x0D, 0x90, 0x81, 0x2B, 0xE0, 0x54, + 0xFE, 0xF0, 0x54, 0xFD, 0xF0, 0x02, 0x47, 0x2A, + 0x90, 0x81, 0x4C, 0xE0, 0x30, 0xE6, 0x21, 0x90, + 0x81, 0x27, 0xE0, 0x64, 0x01, 0x70, 0x20, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x81, + 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x02, 0x60, 0x04, + 0xB1, 0x4F, 0x80, 0x0B, 0xD1, 0x7F, 0x80, 0x07, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFE, 0xF0, 0x90, + 0x81, 0x4C, 0xE0, 0x90, 0x81, 0x2B, 0x30, 0xE7, + 0x11, 0x12, 0x4F, 0xF1, 0x90, 0x01, 0x57, 0x74, + 0x05, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x44, 0x04, + 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0xE4, + 0xFE, 0xEF, 0xC3, 0x13, 0xFD, 0xEF, 0x30, 0xE0, + 0x02, 0x7E, 0x80, 0x90, 0xFD, 0x10, 0xED, 0xF0, + 0xAF, 0x06, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, + 0xC0, 0xD0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, + 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, + 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90, + 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, + 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x03, 0x12, + 0x73, 0xE1, 0x90, 0x81, 0x3F, 0xE0, 0x30, 0xE0, + 0x03, 0x12, 0x49, 0xDD, 0x22, 0x90, 0x81, 0x27, + 0xE0, 0x60, 0x35, 0x90, 0x06, 0x92, 0xE0, 0x30, + 0xE1, 0x24, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x50, + 0x05, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, + 0x06, 0x92, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x81, + 0x24, 0xE0, 0x54, 0xEF, 0xF0, 0x12, 0x47, 0x2A, + 0x22, 0x12, 0x71, 0x48, 0x90, 0x81, 0x4D, 0xEF, + 0xF0, 0x90, 0x81, 0x24, 0x30, 0xE0, 0x06, 0xE0, + 0x44, 0x01, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFE, + 0xF0, 0x90, 0x81, 0x4D, 0xE0, 0x30, 0xE6, 0x11, + 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, + 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, + 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x30, 0xE0, 0x1A, + 0x90, 0x81, 0x32, 0xE4, 0xF0, 0xA3, 0x74, 0x07, + 0xF0, 0x90, 0x81, 0x32, 0xA3, 0xE0, 0x90, 0x05, + 0x58, 0xF0, 0x90, 0x04, 0xEC, 0xE0, 0x54, 0xDD, + 0xF0, 0x22, 0x90, 0x04, 0xEC, 0xE0, 0x44, 0x22, + 0xF0, 0x22, 0x90, 0x81, 0x4A, 0xE0, 0x60, 0x0F, + 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, + 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0x22, + 0x90, 0x81, 0x24, 0xE0, 0xFF, 0xC4, 0x13, 0x13, + 0x54, 0x03, 0x30, 0xE0, 0x27, 0xEF, 0x54, 0xBF, + 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x81, 0x25, + 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, 0xF0, 0x80, + 0x10, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0xB9, + 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, + 0xF0, 0x12, 0x47, 0x2A, 0xE4, 0xFF, 0x90, 0x81, + 0x45, 0xE0, 0x30, 0xE0, 0x48, 0x90, 0x81, 0x49, + 0xE0, 0xFD, 0x60, 0x41, 0x74, 0x01, 0x7E, 0x00, + 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, + 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x04, 0xE0, + 0xE0, 0xFB, 0xEF, 0x5B, 0x60, 0x06, 0xE4, 0x90, + 0x81, 0x49, 0xF0, 0x22, 0x90, 0x81, 0x47, 0xE0, + 0xD3, 0x9D, 0x50, 0x10, 0x90, 0x01, 0xC7, 0x74, + 0x10, 0xF0, 0x11, 0xBE, 0x90, 0x81, 0x45, 0xE0, + 0x54, 0xFE, 0xF0, 0x22, 0x12, 0x4F, 0x0B, 0x90, + 0x81, 0x49, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x80, + 0x3C, 0xE0, 0x64, 0x02, 0x60, 0x07, 0x90, 0x06, + 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x81, + 0x24, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, + 0x01, 0x30, 0xE0, 0x2C, 0xEF, 0x54, 0x7F, 0xF0, + 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x81, 0x25, 0x30, + 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0F, + 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x01, 0xB9, 0x74, + 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x04, 0xF0, 0x90, + 0x81, 0x27, 0xE0, 0x60, 0x03, 0x12, 0x47, 0x2A, + 0x7F, 0x01, 0x01, 0x6E, 0xC3, 0xEE, 0x94, 0x01, + 0x40, 0x0A, 0x0D, 0xED, 0x13, 0x90, 0xFD, 0x10, + 0xF0, 0xE4, 0x2F, 0xFF, 0x22, 0xC3, 0xEE, 0x94, + 0x01, 0x40, 0x24, 0x90, 0xFD, 0x11, 0xE0, 0x6D, + 0x70, 0x1A, 0x90, 0x01, 0x17, 0xE0, 0xB5, 0x05, + 0x0D, 0x90, 0x01, 0xE4, 0x74, 0x77, 0xF0, 0x90, + 0xFD, 0x11, 0xE4, 0xF0, 0x80, 0x06, 0xED, 0x04, + 0x90, 0xFD, 0x11, 0xF0, 0xE4, 0x2F, 0xFF, 0x22, + 0xE4, 0x90, 0x81, 0x4E, 0xF0, 0xA3, 0xF0, 0xA3, + 0xF0, 0x90, 0x00, 0x83, 0xE0, 0x90, 0x81, 0x4E, + 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xFE, 0x90, 0x81, + 0x4E, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, + 0x90, 0x81, 0x50, 0xE0, 0x94, 0x64, 0x90, 0x81, + 0x4F, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, + 0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x81, 0x4E, + 0xE0, 0xFF, 0x22, 0x90, 0x81, 0x4F, 0xE4, 0x75, + 0xF0, 0x01, 0x12, 0x44, 0xA9, 0x80, 0xC2, 0x74, + 0x45, 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, + 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, + 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x82, + 0x12, 0xED, 0xF0, 0x90, 0x82, 0x11, 0xEF, 0xF0, + 0xD3, 0x94, 0x07, 0x50, 0x70, 0xE0, 0xFF, 0x74, + 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, + 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47, 0xE0, + 0x5F, 0xFD, 0x7F, 0x47, 0x12, 0x32, 0x1E, 0x90, + 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, + 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xFF, + 0x90, 0x00, 0x46, 0xE0, 0x4F, 0xFD, 0x7F, 0x46, + 0x12, 0x32, 0x1E, 0x90, 0x82, 0x12, 0xE0, 0x60, + 0x18, 0x90, 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, + 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xFF, 0x90, 0x00, 0x45, 0xE0, 0x4F, 0x80, + 0x17, 0x90, 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, + 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x45, 0xE0, 0x5F, + 0xFD, 0x7F, 0x45, 0x80, 0x7E, 0x90, 0x82, 0x11, + 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0x24, 0x04, 0xFF, + 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, + 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, + 0xE0, 0x5F, 0xFD, 0x7F, 0x43, 0x12, 0x32, 0x1E, + 0x90, 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, 0xA8, + 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, + 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x4F, 0xFD, 0x7F, + 0x43, 0x12, 0x32, 0x1E, 0x90, 0x82, 0x12, 0xE0, + 0x60, 0x1D, 0x90, 0x82, 0x11, 0xE0, 0x24, 0x04, + 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, + 0xC3, 0x33, 0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x42, + 0xE0, 0x4F, 0xFD, 0x7F, 0x42, 0x80, 0x1C, 0x90, + 0x82, 0x11, 0xE0, 0x24, 0x04, 0xFF, 0x74, 0x01, + 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0x5F, + 0xFD, 0x7F, 0x42, 0x12, 0x32, 0x1E, 0xD0, 0xD0, + 0x92, 0xAF, 0x22, 0x90, 0x81, 0x24, 0xE0, 0x54, + 0xFB, 0xF0, 0xE4, 0x90, 0x81, 0x30, 0xF0, 0x90, + 0x81, 0x2B, 0xF0, 0x22, 0xEF, 0x24, 0xFE, 0x60, + 0x0C, 0x04, 0x70, 0x28, 0x90, 0x81, 0x2D, 0x74, + 0x01, 0xF0, 0xA3, 0xF0, 0x22, 0xED, 0x70, 0x0A, + 0x90, 0x81, 0x3B, 0xE0, 0x90, 0x81, 0x2D, 0xF0, + 0x80, 0x05, 0x90, 0x81, 0x2D, 0xED, 0xF0, 0x90, + 0x81, 0x2D, 0xE0, 0xA3, 0xF0, 0x90, 0x81, 0x25, + 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x12, 0x4E, 0xAB, + 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB8, + 0x74, 0x01, 0xF0, 0x80, 0x67, 0x90, 0x81, 0x2B, + 0xE0, 0xFF, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, + 0xB8, 0x74, 0x02, 0xF0, 0x80, 0x56, 0x90, 0x81, + 0x29, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x50, 0x08, + 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x80, 0x44, + 0xEF, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x08, 0xF0, 0x80, 0x38, 0x90, 0x81, 0x2B, 0xE0, + 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB8, 0x74, 0x10, + 0xF0, 0x80, 0x29, 0x90, 0x81, 0x25, 0xE0, 0x13, + 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x08, 0x90, 0x01, + 0xB8, 0x74, 0x20, 0xF0, 0x80, 0x16, 0x90, 0x81, + 0x3E, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x80, 0xF0, 0x80, 0x08, 0x90, 0x01, 0xB8, 0xE4, + 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB9, 0x74, + 0x04, 0xF0, 0x7F, 0x00, 0x22, 0xEF, 0x60, 0x42, + 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, 0x70, 0x3A, + 0x90, 0x81, 0x25, 0xE0, 0x54, 0xFE, 0xF0, 0x90, + 0x05, 0x22, 0x74, 0x0F, 0xF0, 0x90, 0x06, 0x04, + 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0xFF, 0x12, 0x4F, + 0x0D, 0xBF, 0x01, 0x12, 0x90, 0x81, 0x24, 0xE0, + 0x44, 0x40, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x06, + 0xF0, 0x90, 0x81, 0x23, 0xF0, 0x22, 0x90, 0x01, + 0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x74, + 0x08, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, + 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, + 0x90, 0x81, 0x2A, 0x74, 0x02, 0xF0, 0x90, 0x81, + 0x23, 0xF0, 0x22, 0x12, 0x54, 0x65, 0x90, 0x81, + 0x2A, 0x74, 0x0C, 0xF0, 0x90, 0x81, 0x23, 0xF0, + 0x22, 0x90, 0x81, 0x24, 0xE0, 0xFF, 0x13, 0x13, + 0x54, 0x3F, 0x30, 0xE0, 0x11, 0xEF, 0x54, 0xFB, + 0xF0, 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFD, 0xF0, + 0x54, 0x07, 0x70, 0x42, 0x80, 0x3D, 0x90, 0x81, + 0x30, 0xE0, 0x04, 0xF0, 0x90, 0x81, 0x2B, 0xE0, + 0x54, 0xEF, 0xF0, 0x90, 0x81, 0x30, 0xE0, 0xFF, + 0xB4, 0x01, 0x02, 0x80, 0x04, 0xEF, 0xB4, 0x02, + 0x06, 0x90, 0x05, 0x58, 0xE0, 0x04, 0xF0, 0x90, + 0x81, 0x38, 0xE0, 0xFF, 0x90, 0x81, 0x30, 0xE0, + 0xD3, 0x9F, 0x40, 0x0F, 0x90, 0x80, 0xDE, 0xE0, + 0xB4, 0x01, 0x0B, 0x90, 0x81, 0x25, 0xE0, 0x54, + 0xFB, 0xF0, 0x22, 0x12, 0x47, 0x2A, 0x22, 0x22, + 0x90, 0x05, 0x2B, 0xE0, 0x7F, 0x00, 0x30, 0xE7, + 0x02, 0x7F, 0x01, 0x22, 0x90, 0x05, 0x22, 0x74, + 0xFF, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, + 0xF0, 0x90, 0x81, 0x22, 0x74, 0x03, 0xF0, 0x22, + 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x12, + 0x49, 0xDD, 0x90, 0x81, 0x22, 0x74, 0x02, 0xF0, + 0x22, 0x12, 0x49, 0xE3, 0x90, 0x81, 0x22, 0x74, + 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, + 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, + 0x90, 0x81, 0x22, 0x74, 0x04, 0xF0, 0x22, 0xAE, + 0x07, 0x12, 0x51, 0x73, 0xBF, 0x01, 0x12, 0x90, + 0x81, 0x23, 0xE0, 0x64, 0x02, 0x60, 0x0A, 0xAF, + 0x06, 0x7D, 0x01, 0x12, 0x47, 0x3D, 0x7F, 0x01, + 0x22, 0x7F, 0x00, 0x22, 0x90, 0x01, 0x57, 0xE0, + 0x60, 0x48, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, + 0x02, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0xFF, 0x13, + 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xEF, 0x54, + 0xFB, 0xF0, 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFD, + 0xF0, 0x22, 0x90, 0x81, 0x30, 0xE0, 0x04, 0xF0, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xEF, 0xF0, 0x90, + 0x81, 0x38, 0xE0, 0xFF, 0x90, 0x81, 0x30, 0xE0, + 0xD3, 0x9F, 0x40, 0x0E, 0x90, 0x80, 0xDE, 0xE0, + 0xB4, 0x01, 0x07, 0x90, 0x81, 0x25, 0xE0, 0x54, + 0xFB, 0xF0, 0x22, 0x90, 0x80, 0x3F, 0xE0, 0xFF, + 0x7D, 0x01, 0x12, 0x6D, 0x69, 0x8E, 0x54, 0x8F, + 0x55, 0xAD, 0x55, 0xAC, 0x54, 0xAF, 0x53, 0x12, + 0x4F, 0x82, 0xAF, 0x55, 0xAE, 0x54, 0x90, 0x04, + 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, + 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, + 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, + 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, + 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, + 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, + 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, + 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, + 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, + 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, + 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, + 0xF0, 0x22, 0xAB, 0x07, 0xAA, 0x06, 0xED, 0x2B, + 0xFB, 0xE4, 0x3A, 0xFA, 0xC3, 0x90, 0x80, 0xDB, + 0xE0, 0x9B, 0x90, 0x80, 0xDA, 0xE0, 0x9A, 0x50, + 0x13, 0xA3, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0x80, + 0xDA, 0xE0, 0x34, 0x00, 0xFE, 0xC3, 0xEB, 0x9F, + 0xFB, 0xEA, 0x9E, 0xFA, 0xEA, 0x90, 0xFD, 0x11, + 0xF0, 0xAF, 0x03, 0x74, 0x00, 0x2F, 0xF5, 0x82, + 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0xFF, 0x22, + 0x12, 0x1F, 0xA4, 0xFF, 0x54, 0x01, 0xFE, 0x90, + 0x81, 0x42, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, + 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x43, 0xF0, 0x22, + 0x90, 0x81, 0x45, 0xE0, 0x30, 0xE0, 0x2D, 0x90, + 0x81, 0x48, 0xE0, 0x04, 0xF0, 0xE0, 0xFF, 0x90, + 0x81, 0x46, 0xE0, 0xB5, 0x07, 0x1E, 0x90, 0x06, + 0x92, 0xE0, 0x54, 0x1C, 0x70, 0x0B, 0x12, 0x4F, + 0x0B, 0x90, 0x81, 0x49, 0xE0, 0x04, 0xF0, 0x80, + 0x06, 0x90, 0x06, 0x92, 0x74, 0x1C, 0xF0, 0xE4, + 0x90, 0x81, 0x48, 0xF0, 0x22, 0x00, 0xBB, 0x8E, +}; diff --git a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c index 8a7947d..e4f20da 100644 --- a/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/rtl8188eu/hal/HalPhyRf_8188e.c @@ -819,7 +819,7 @@ void _PHY_SaveADDARegisters(struct adapter *adapt, u32 *ADDAReg, u32 *ADDABackup struct hal_data_8188e *pHalData = GET_HAL_DATA(adapt); struct odm_dm_struct *dm_odm = &pHalData->odmpriv; - if (!ODM_CheckPowerStatus(adapt)) + if (ODM_CheckPowerStatus(adapt) == false) return; ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("Save ADDA parameters.\n")); @@ -888,7 +888,7 @@ _PHY_PathADDAOn( ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("ADDA ON.\n")); pathOn = isPathAOn ? 0x04db25a4 : 0x0b1b25a4; - if (!is2t) { + if (false == is2t) { pathOn = 0x0bdb25a0; ODM_SetBBReg(dm_odm, ADDAReg[0], bMaskDWord, 0x0b1b25a0); } else { @@ -1276,6 +1276,407 @@ static void phy_LCCalibrate_8188E(struct adapter *adapt, bool is2t) } } +/* Analog Pre-distortion calibration */ +#define APK_BB_REG_NUM 8 +#define APK_CURVE_REG_NUM 4 +#define PATH_NUM 2 + +static void phy_APCalibrate_8188E(struct adapter *adapt, s8 delta, bool is2t) +{ + struct hal_data_8188e *pHalData = GET_HAL_DATA(adapt); + struct odm_dm_struct *dm_odm = &pHalData->odmpriv; + u32 regD[PATH_NUM]; + u32 tmpreg, index, offset, apkbound; + u8 path, i, pathbound = PATH_NUM; + u32 BB_backup[APK_BB_REG_NUM]; + u32 BB_REG[APK_BB_REG_NUM] = { + rFPGA1_TxBlock, rOFDM0_TRxPathEnable, + rFPGA0_RFMOD, rOFDM0_TRMuxPar, + rFPGA0_XCD_RFInterfaceSW, rFPGA0_XAB_RFInterfaceSW, + rFPGA0_XA_RFInterfaceOE, rFPGA0_XB_RFInterfaceOE }; + u32 BB_AP_MODE[APK_BB_REG_NUM] = { + 0x00000020, 0x00a05430, 0x02040000, + 0x000800e4, 0x00204000 }; + u32 BB_normal_AP_MODE[APK_BB_REG_NUM] = { + 0x00000020, 0x00a05430, 0x02040000, + 0x000800e4, 0x22204000 }; + + u32 AFE_backup[IQK_ADDA_REG_NUM]; + u32 AFE_REG[IQK_ADDA_REG_NUM] = { + rFPGA0_XCD_SwitchControl, rBlue_Tooth, + rRx_Wait_CCA, rTx_CCK_RFON, + rTx_CCK_BBON, rTx_OFDM_RFON, + rTx_OFDM_BBON, rTx_To_Rx, + rTx_To_Tx, rRx_CCK, + rRx_OFDM, rRx_Wait_RIFS, + rRx_TO_Rx, rStandby, + rSleep, rPMPD_ANAEN }; + + u32 MAC_backup[IQK_MAC_REG_NUM]; + u32 MAC_REG[IQK_MAC_REG_NUM] = { + REG_TXPAUSE, REG_BCN_CTRL, + REG_BCN_CTRL_1, REG_GPIO_MUXCFG}; + + u32 APK_RF_init_value[PATH_NUM][APK_BB_REG_NUM] = { + {0x0852c, 0x1852c, 0x5852c, 0x1852c, 0x5852c}, + {0x2852e, 0x0852e, 0x3852e, 0x0852e, 0x0852e} + }; + + u32 APK_normal_RF_init_value[PATH_NUM][APK_BB_REG_NUM] = { + {0x0852c, 0x0a52c, 0x3a52c, 0x5a52c, 0x5a52c}, /* path settings equal to path b settings */ + {0x0852c, 0x0a52c, 0x5a52c, 0x5a52c, 0x5a52c} + }; + + u32 APK_RF_value_0[PATH_NUM][APK_BB_REG_NUM] = { + {0x52019, 0x52014, 0x52013, 0x5200f, 0x5208d}, + {0x5201a, 0x52019, 0x52016, 0x52033, 0x52050} + }; + + u32 APK_normal_RF_value_0[PATH_NUM][APK_BB_REG_NUM] = { + {0x52019, 0x52017, 0x52010, 0x5200d, 0x5206a}, /* path settings equal to path b settings */ + {0x52019, 0x52017, 0x52010, 0x5200d, 0x5206a} + }; + + u32 AFE_on_off[PATH_NUM] = { + 0x04db25a4, 0x0b1b25a4}; /* path A on path B off / path A off path B on */ + + u32 APK_offset[PATH_NUM] = { + rConfig_AntA, rConfig_AntB}; + + u32 APK_normal_offset[PATH_NUM] = { + rConfig_Pmpd_AntA, rConfig_Pmpd_AntB}; + + u32 APK_value[PATH_NUM] = { + 0x92fc0000, 0x12fc0000}; + + u32 APK_normal_value[PATH_NUM] = { + 0x92680000, 0x12680000}; + + s8 APK_delta_mapping[APK_BB_REG_NUM][13] = { + {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6}, + {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6}, + {-6, -4, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6}, + {-1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6}, + {-11, -9, -7, -5, -3, -1, 0, 0, 0, 0, 0, 0, 0} + }; + + u32 APK_normal_setting_value_1[13] = { + 0x01017018, 0xf7ed8f84, 0x1b1a1816, 0x2522201e, 0x322e2b28, + 0x433f3a36, 0x5b544e49, 0x7b726a62, 0xa69a8f84, 0xdfcfc0b3, + 0x12680000, 0x00880000, 0x00880000 + }; + + u32 APK_normal_setting_value_2[16] = { + 0x01c7021d, 0x01670183, 0x01000123, 0x00bf00e2, 0x008d00a3, + 0x0068007b, 0x004d0059, 0x003a0042, 0x002b0031, 0x001f0025, + 0x0017001b, 0x00110014, 0x000c000f, 0x0009000b, 0x00070008, + 0x00050006 + }; + + u32 APK_result[PATH_NUM][APK_BB_REG_NUM]; /* val_1_1a, val_1_2a, val_2a, val_3a, val_4a */ + s32 BB_offset, delta_V, delta_offset; + + if (*(dm_odm->mp_mode) == 1) { + struct mpt_context *pMptCtx = &(adapt->mppriv.MptCtx); + pMptCtx->APK_bound[0] = 45; + pMptCtx->APK_bound[1] = 52; + } + + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("==>phy_APCalibrate_8188E() delta %d\n", delta)); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("AP Calibration for %s\n", (is2t ? "2T2R" : "1T1R"))); + if (!is2t) + pathbound = 1; + + /* 2 FOR NORMAL CHIP SETTINGS */ + +/* Temporarily do not allow normal driver to do the following settings + * because these offset and value will cause RF internal PA to be + * unpredictably disabled by HW, such that RF Tx signal will disappear + * after disable/enable card many times on 88CU. RF SD and DD have not + * find the root cause, so we remove these actions temporarily. + */ + if (*(dm_odm->mp_mode) != 1) + return; + /* settings adjust for normal chip */ + for (index = 0; index < PATH_NUM; index++) { + APK_offset[index] = APK_normal_offset[index]; + APK_value[index] = APK_normal_value[index]; + AFE_on_off[index] = 0x6fdb25a4; + } + + for (index = 0; index < APK_BB_REG_NUM; index++) { + for (path = 0; path < pathbound; path++) { + APK_RF_init_value[path][index] = APK_normal_RF_init_value[path][index]; + APK_RF_value_0[path][index] = APK_normal_RF_value_0[path][index]; + } + BB_AP_MODE[index] = BB_normal_AP_MODE[index]; + } + + apkbound = 6; + + /* save BB default value */ + for (index = 0; index < APK_BB_REG_NUM; index++) { + if (index == 0) /* skip */ + continue; + BB_backup[index] = ODM_GetBBReg(dm_odm, BB_REG[index], bMaskDWord); + } + + /* save MAC default value */ + _PHY_SaveMACRegisters(adapt, MAC_REG, MAC_backup); + + /* save AFE default value */ + _PHY_SaveADDARegisters(adapt, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM); + + for (path = 0; path < pathbound; path++) { + if (path == RF_PATH_A) { + /* path A APK */ + /* load APK setting */ + /* path-A */ + offset = rPdp_AntA; + for (index = 0; index < 11; index++) { + ODM_SetBBReg(dm_odm, offset, bMaskDWord, APK_normal_setting_value_1[index]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", + offset, ODM_GetBBReg(dm_odm, offset, bMaskDWord))); + offset += 0x04; + } + + ODM_SetBBReg(dm_odm, rConfig_Pmpd_AntB, bMaskDWord, 0x12680000); + + offset = rConfig_AntA; + for (; index < 13; index++) { + ODM_SetBBReg(dm_odm, offset, bMaskDWord, APK_normal_setting_value_1[index]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", + offset, ODM_GetBBReg(dm_odm, offset, bMaskDWord))); + offset += 0x04; + } + + /* page-B1 */ + ODM_SetBBReg(dm_odm, rFPGA0_IQK, bMaskDWord, 0x40000000); + + /* path A */ + offset = rPdp_AntA; + for (index = 0; index < 16; index++) { + ODM_SetBBReg(dm_odm, offset, bMaskDWord, APK_normal_setting_value_2[index]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", + offset, ODM_GetBBReg(dm_odm, offset, bMaskDWord))); + + offset += 0x04; + } + ODM_SetBBReg(dm_odm, rFPGA0_IQK, bMaskDWord, 0x00000000); + } else if (path == RF_PATH_B) { + /* path B APK */ + /* load APK setting */ + /* path-B */ + offset = rPdp_AntB; + for (index = 0; index < 10; index++) { + ODM_SetBBReg(dm_odm, offset, bMaskDWord, APK_normal_setting_value_1[index]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", + offset, ODM_GetBBReg(dm_odm, offset, bMaskDWord))); + + offset += 0x04; + } + ODM_SetBBReg(dm_odm, rConfig_Pmpd_AntA, bMaskDWord, 0x12680000); + PHY_SetBBReg(adapt, rConfig_Pmpd_AntB, bMaskDWord, 0x12680000); + + offset = rConfig_AntA; + index = 11; + for (; index < 13; index++) { /* offset 0xb68, 0xb6c */ + ODM_SetBBReg(dm_odm, offset, bMaskDWord, APK_normal_setting_value_1[index]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", + offset, ODM_GetBBReg(dm_odm, offset, bMaskDWord))); + offset += 0x04; + } + + /* page-B1 */ + ODM_SetBBReg(dm_odm, rFPGA0_IQK, bMaskDWord, 0x40000000); + + /* path B */ + offset = 0xb60; + for (index = 0; index < 16; index++) { + ODM_SetBBReg(dm_odm, offset, bMaskDWord, APK_normal_setting_value_2[index]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", + offset, ODM_GetBBReg(dm_odm, offset, bMaskDWord))); + + offset += 0x04; + } + ODM_SetBBReg(dm_odm, rFPGA0_IQK, bMaskDWord, 0); + } + + /* save RF default value */ + regD[path] = PHY_QueryRFReg(adapt, path, RF_TXBIAS_A, bMaskDWord); + + /* Path A AFE all on, path B AFE All off or vise versa */ + for (index = 0; index < IQK_ADDA_REG_NUM; index++) + ODM_SetBBReg(dm_odm, AFE_REG[index], bMaskDWord, AFE_on_off[path]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0xe70 %x\n", + ODM_GetBBReg(dm_odm, rRx_Wait_CCA, bMaskDWord))); + + /* BB to AP mode */ + if (path == 0) { + for (index = 0; index < APK_BB_REG_NUM; index++) { + if (index == 0) /* skip */ + continue; + else if (index < 5) + ODM_SetBBReg(dm_odm, BB_REG[index], bMaskDWord, BB_AP_MODE[index]); + else if (BB_REG[index] == 0x870) + ODM_SetBBReg(dm_odm, BB_REG[index], bMaskDWord, BB_backup[index]|BIT10|BIT26); + else + ODM_SetBBReg(dm_odm, BB_REG[index], BIT10, 0x0); + } + + ODM_SetBBReg(dm_odm, rTx_IQK_Tone_A, bMaskDWord, 0x01008c00); + ODM_SetBBReg(dm_odm, rRx_IQK_Tone_A, bMaskDWord, 0x01008c00); + } else { + /* path B */ + ODM_SetBBReg(dm_odm, rTx_IQK_Tone_B, bMaskDWord, 0x01008c00); + ODM_SetBBReg(dm_odm, rRx_IQK_Tone_B, bMaskDWord, 0x01008c00); + } + + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() offset 0x800 %x\n", + ODM_GetBBReg(dm_odm, 0x800, bMaskDWord))); + + /* MAC settings */ + _PHY_MACSettingCalibration(adapt, MAC_REG, MAC_backup); + + if (path == RF_PATH_A) { + /* Path B to standby mode */ + ODM_SetRFReg(dm_odm, RF_PATH_B, RF_AC, bMaskDWord, 0x10000); + } else { + /* Path A to standby mode */ + ODM_SetRFReg(dm_odm, RF_PATH_A, RF_AC, bMaskDWord, 0x10000); + ODM_SetRFReg(dm_odm, RF_PATH_A, RF_MODE1, bMaskDWord, 0x1000f); + ODM_SetRFReg(dm_odm, RF_PATH_A, RF_MODE2, bMaskDWord, 0x20103); + } + + delta_offset = ((delta+14)/2); + if (delta_offset < 0) + delta_offset = 0; + else if (delta_offset > 12) + delta_offset = 12; + + /* AP calibration */ + for (index = 0; index < APK_BB_REG_NUM; index++) { + if (index != 1) /* only DO PA11+PAD01001, AP RF setting */ + continue; + + tmpreg = APK_RF_init_value[path][index]; + if (!dm_odm->RFCalibrateInfo.bAPKThermalMeterIgnore) { + BB_offset = (tmpreg & 0xF0000) >> 16; + + if (!(tmpreg & BIT15)) /* sign bit 0 */ + BB_offset = -BB_offset; + + delta_V = APK_delta_mapping[index][delta_offset]; + + BB_offset += delta_V; + + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, + ("phy_APCalibrate_8188E() APK index %d tmpreg 0x%x delta_V %d delta_offset %d\n", + index, tmpreg, delta_V, delta_offset)); + + if (BB_offset < 0) { + tmpreg = tmpreg & (~BIT15); + BB_offset = -BB_offset; + } else { + tmpreg = tmpreg | BIT15; + } + tmpreg = (tmpreg & 0xFFF0FFFF) | (BB_offset << 16); + } + + ODM_SetRFReg(dm_odm, path, RF_IPA_A, bMaskDWord, 0x8992e); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("phy_APCalibrate_8188E() offset 0xc %x\n", PHY_QueryRFReg(adapt, path, RF_IPA_A, bMaskDWord))); + ODM_SetRFReg(dm_odm, path, RF_AC, bMaskDWord, APK_RF_value_0[path][index]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("phy_APCalibrate_8188E() offset 0x0 %x\n", PHY_QueryRFReg(adapt, path, RF_AC, bMaskDWord))); + ODM_SetRFReg(dm_odm, path, RF_TXBIAS_A, bMaskDWord, tmpreg); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("phy_APCalibrate_8188E() offset 0xd %x\n", PHY_QueryRFReg(adapt, path, RF_TXBIAS_A, bMaskDWord))); + /* PA11+PAD01111, one shot */ + i = 0; + do { + ODM_SetBBReg(dm_odm, rFPGA0_IQK, bMaskDWord, 0x80000000); + ODM_SetBBReg(dm_odm, APK_offset[path], bMaskDWord, APK_value[0]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", APK_offset[path], ODM_GetBBReg(dm_odm, APK_offset[path], bMaskDWord))); + ODM_delay_ms(3); + ODM_SetBBReg(dm_odm, APK_offset[path], bMaskDWord, APK_value[1]); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("phy_APCalibrate_8188E() offset 0x%x value 0x%x\n", APK_offset[path], ODM_GetBBReg(dm_odm, APK_offset[path], bMaskDWord))); + + ODM_delay_ms(20); + ODM_SetBBReg(dm_odm, rFPGA0_IQK, bMaskDWord, 0x00000000); + + if (path == RF_PATH_A) + tmpreg = ODM_GetBBReg(dm_odm, rAPK, 0x03E00000); + else + tmpreg = ODM_GetBBReg(dm_odm, rAPK, 0xF8000000); + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("phy_APCalibrate_8188E() offset 0xbd8[25:21] %x\n", tmpreg)); + + i++; + } while (tmpreg > apkbound && i < 4); + + APK_result[path][index] = tmpreg; + } + } + + /* reload MAC default value */ + _PHY_ReloadMACRegisters(adapt, MAC_REG, MAC_backup); + + /* reload BB default value */ + for (index = 0; index < APK_BB_REG_NUM; index++) { + if (index == 0) /* skip */ + continue; + ODM_SetBBReg(dm_odm, BB_REG[index], bMaskDWord, BB_backup[index]); + } + + /* reload AFE default value */ + reload_adda_reg(adapt, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM); + + /* reload RF path default value */ + for (path = 0; path < pathbound; path++) { + ODM_SetRFReg(dm_odm, path, 0xd, bMaskDWord, regD[path]); + if (path == RF_PATH_B) { + ODM_SetRFReg(dm_odm, RF_PATH_A, RF_MODE1, bMaskDWord, 0x1000f); + ODM_SetRFReg(dm_odm, RF_PATH_A, RF_MODE2, bMaskDWord, 0x20101); + } + + /* note no index == 0 */ + if (APK_result[path][1] > 6) + APK_result[path][1] = 6; + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("apk path %d result %d 0x%x \t", path, 1, APK_result[path][1])); + } + + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("\n")); + + for (path = 0; path < pathbound; path++) { + ODM_SetRFReg(dm_odm, path, 0x3, bMaskDWord, + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (APK_result[path][1] << 5) | APK_result[path][1])); + if (path == RF_PATH_A) + ODM_SetRFReg(dm_odm, path, 0x4, bMaskDWord, + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x00 << 5) | 0x05)); + else + ODM_SetRFReg(dm_odm, path, 0x4, bMaskDWord, + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x02 << 5) | 0x05)); + ODM_SetRFReg(dm_odm, path, RF_BS_PA_APSET_G9_G11, bMaskDWord, + ((0x08 << 15) | (0x08 << 10) | (0x08 << 5) | 0x08)); + } + + dm_odm->RFCalibrateInfo.bAPKdone = true; + + ODM_RT_TRACE(dm_odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("<==phy_APCalibrate_8188E()\n")); +} + +#define DP_BB_REG_NUM 7 +#define DP_RF_REG_NUM 1 +#define DP_RETRY_LIMIT 10 +#define DP_PATH_NUM 2 +#define DP_DPK_NUM 3 +#define DP_DPK_VALUE_NUM 2 + void PHY_IQCalibrate_8188E(struct adapter *adapt, bool recovery) { struct hal_data_8188e *pHalData = GET_HAL_DATA(adapt); @@ -1296,7 +1697,7 @@ void PHY_IQCalibrate_8188E(struct adapter *adapt, bool recovery) bool is2t; is2t = (dm_odm->RFType == ODM_2T2R) ? true : false; - if (!ODM_CheckPowerStatus(adapt)) + if (ODM_CheckPowerStatus(adapt) == false) return; if (!(dm_odm->SupportAbility & ODM_RF_CALIBRATION)) @@ -1466,6 +1867,28 @@ void PHY_LCCalibrate_8188E(struct adapter *adapt) ("LCK:Finish!!!interface %d\n", dm_odm->InterfaceIndex)); } +void PHY_APCalibrate_8188E(struct adapter *adapt, s8 delta) +{ + struct hal_data_8188e *pHalData = GET_HAL_DATA(adapt); + struct odm_dm_struct *dm_odm = &pHalData->odmpriv; + + return; + if (!(dm_odm->SupportAbility & ODM_RF_CALIBRATION)) + return; + +#if FOR_BRAZIL_PRETEST != 1 + if (dm_odm->RFCalibrateInfo.bAPKdone) +#endif + return; + + if (dm_odm->RFType == ODM_2T2R) { + phy_APCalibrate_8188E(adapt, delta, true); + } else { + /* For 88C 1T1R */ + phy_APCalibrate_8188E(adapt, delta, false); + } +} + static void phy_setrfpathswitch_8188e(struct adapter *adapt, bool main, bool is2t) { struct hal_data_8188e *pHalData = GET_HAL_DATA(adapt); diff --git a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c index 5700dbc..e913a22 100644 --- a/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c +++ b/drivers/staging/rtl8188eu/hal/HalPwrSeqCmd.c @@ -85,7 +85,7 @@ u8 HalPwrSeqCmdParsing(struct adapter *padapter, u8 cut_vers, u8 fab_vers, value &= ~(GET_PWR_CFG_MASK(pwrcfgcmd)); value |= (GET_PWR_CFG_VALUE(pwrcfgcmd) & GET_PWR_CFG_MASK(pwrcfgcmd)); - /* Write the value back to system register */ + /* Write the value back to sytem register */ rtw_write8(padapter, offset, value); break; case PWR_CMD_POLLING: diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 8be2ad7..8c858775 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -273,7 +273,7 @@ void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, __le16 mstatus_rpt) static void ConstructBeacon(struct adapter *adapt, u8 *pframe, u32 *pLength) { struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + u16 *fctrl; u32 rate_len, pktlen; struct mlme_ext_priv *pmlmeext = &(adapt->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); @@ -360,7 +360,7 @@ static void ConstructPSPoll(struct adapter *adapt, u8 *pframe, u32 *pLength) struct rtw_ieee80211_hdr *pwlanhdr; struct mlme_ext_priv *pmlmeext = &(adapt->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - __le16 *fctrl; + u16 *fctrl; pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; @@ -391,7 +391,7 @@ static void ConstructNullFunctionData(struct adapter *adapt, u8 *pframe, u8 bForcePowerSave) { struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + u16 *fctrl; u32 pktlen; struct mlme_priv *pmlmepriv = &adapt->mlmepriv; struct wlan_network *cur_network = &pmlmepriv->cur_network; @@ -450,7 +450,7 @@ static void ConstructNullFunctionData(struct adapter *adapt, u8 *pframe, static void ConstructProbeRsp(struct adapter *adapt, u8 *pframe, u32 *pLength, u8 *StaAddr, bool bHideSSID) { struct rtw_ieee80211_hdr *pwlanhdr; - __le16 *fctrl; + u16 *fctrl; u8 *mac, *bssid; u32 pktlen; struct mlme_ext_priv *pmlmeext = &(adapt->mlmeextpriv); @@ -484,7 +484,7 @@ static void ConstructProbeRsp(struct adapter *adapt, u8 *pframe, u32 *pLength, u *pLength = pktlen; } -/* To check if reserved page content is destroyed by beacon because beacon is too large. */ +/* To check if reserved page content is destroyed by beacon beacuse beacon is too large. */ /* 2010.06.23. Added by tynli. */ void CheckFwRsvdPageContent(struct adapter *Adapter) { @@ -496,9 +496,9 @@ void CheckFwRsvdPageContent(struct adapter *Adapter) /* (1)Beacon, (2)Ps-poll, (3)Null data, (4)ProbeRsp. */ /* Input: */ /* bDLFinished - false: At the first time we will send all the packets as a large packet to Hw, */ -/* so we need to set the packet length to total length. */ +/* so we need to set the packet length to total lengh. */ /* true: At the second time, we should send the first packet (default:beacon) */ -/* to Hw again and set the length in descriptor to the real beacon length. */ +/* to Hw again and set the lengh in descriptor to the real beacon lengh. */ /* 2009.10.15 by tynli. */ static void SetFwRsvdPagePkt(struct adapter *adapt, bool bDLFinished) { @@ -671,7 +671,7 @@ _func_enter_; DBG_88E("%s: 1 Download RSVD success! DLBcnCount:%u, poll:%u\n", __func__, DLBcnCount, poll); /* */ /* We just can send the reserved page twice during the time that Tx thread is stopped (e.g. pnpsetpower) */ - /* because we need to free the Tx BCN Desc which is used by the first reserved page packet. */ + /* becuase we need to free the Tx BCN Desc which is used by the first reserved page packet. */ /* At run time, we cannot get the Tx Desc until it is released in TxHandleInterrupt() so we will return */ /* the beacon TCB in the following code. 2011.11.23. by tynli. */ /* */ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c index 52b3fba..292ba62 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c @@ -19,7 +19,6 @@ ******************************************************************************/ #define _HAL_INIT_C_ -#include <linux/firmware.h> #include <drv_types.h> #include <rtw_efuse.h> @@ -589,15 +588,13 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) u8 writeFW_retry = 0; u32 fwdl_start_time; struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); - struct dvobj_priv *dvobj = adapter_to_dvobj(padapter); - struct device *device = dvobj_to_dev(dvobj); + + u8 *FwImage; + u32 FwImageLen; struct rt_firmware *pFirmware = NULL; - const struct firmware *fw; struct rt_firmware_hdr *pFwHdr = NULL; u8 *pFirmwareBuf; - u32 FirmwareLen; - char fw_name[] = "rtlwifi/rtl8188eufw.bin"; - static int log_version; + u32 FirmwareLen; RT_TRACE(_module_hal_init_c_, _drv_info_, ("+%s\n", __func__)); pFirmware = (struct rt_firmware *)rtw_zmalloc(sizeof(struct rt_firmware)); @@ -606,32 +603,27 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) goto Exit; } - if (request_firmware(&fw, fw_name, device)) { - rtStatus = _FAIL; - goto Exit; - } - if (!fw) { - pr_err("Firmware %s not available\n", fw_name); - rtStatus = _FAIL; - goto Exit; - } - if (fw->size > FW_8188E_SIZE) { - rtStatus = _FAIL; - RT_TRACE(_module_hal_init_c_, _drv_err_, ("Firmware size exceed 0x%X. Check it.\n", FW_8188E_SIZE)); - goto Exit; - } + FwImage = (u8 *)Rtl8188E_FwImageArray; + FwImageLen = Rtl8188E_FWImgArrayLength; - pFirmware->szFwBuffer = kzalloc(FW_8188E_SIZE, GFP_KERNEL); - if (!pFirmware->szFwBuffer) { - rtStatus = _FAIL; - goto Exit; + pFirmware->eFWSource = FW_SOURCE_HEADER_FILE; + + switch (pFirmware->eFWSource) { + case FW_SOURCE_IMG_FILE: + break; + case FW_SOURCE_HEADER_FILE: + if (FwImageLen > FW_8188E_SIZE) { + rtStatus = _FAIL; + RT_TRACE(_module_hal_init_c_, _drv_err_, ("Firmware size exceed 0x%X. Check it.\n", FW_8188E_SIZE)); + goto Exit; + } + + pFirmware->szFwBuffer = FwImage; + pFirmware->ulFwLength = FwImageLen; + break; } - memcpy(pFirmware->szFwBuffer, fw->data, fw->size); - pFirmware->ulFwLength = fw->size; pFirmwareBuf = pFirmware->szFwBuffer; FirmwareLen = pFirmware->ulFwLength; - release_firmware(fw); - DBG_88E_LEVEL(_drv_info_, "+%s: !bUsedWoWLANFw, FmrmwareLen:%d+\n", __func__, FirmwareLen); /* To Check Fw header. Added by tynli. 2009.12.04. */ @@ -641,10 +633,8 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) pHalData->FirmwareSubVersion = pFwHdr->Subversion; pHalData->FirmwareSignature = le16_to_cpu(pFwHdr->Signature); - if (!log_version++) - pr_info("%sFirmware Version %d, SubVersion %d, Signature 0x%x\n", - DRIVER_PREFIX, pHalData->FirmwareVersion, - pHalData->FirmwareSubVersion, pHalData->FirmwareSignature); + DBG_88E("%s: fw_ver =%d fw_subver =%d sig = 0x%x\n", + __func__, pHalData->FirmwareVersion, pHalData->FirmwareSubVersion, pHalData->FirmwareSignature); if (IS_FW_HEADER_EXIST(pFwHdr)) { /* Shift 32 bytes for FW header */ @@ -687,7 +677,7 @@ s32 rtl8188e_FirmwareDownload(struct adapter *padapter) goto Exit; } RT_TRACE(_module_hal_init_c_, _drv_info_, ("Firmware is ready to run!\n")); - kfree(pFirmware->szFwBuffer); + Exit: kfree(pFirmware); @@ -1489,6 +1479,7 @@ static bool hal_EfusePgPacketWrite1ByteHeader(struct adapter *pAdapter, u8 efuse static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt, bool bPseudoTest) { + bool bRet = false; u16 efuse_addr = *pAddr; u8 badworden = 0; u32 PgWriteSuccess = 0; @@ -1506,6 +1497,7 @@ static bool hal_EfusePgPacketWriteData(struct adapter *pAdapter, u8 efuseType, u else return true; } + return bRet; } static bool @@ -1661,7 +1653,7 @@ hal_EfusePgCheckAvailableAddr( { u16 efuse_max_available_len = 0; - /* Change to check TYPE_EFUSE_MAP_LEN , because 8188E raw 256, logic map over 256. */ + /* Change to check TYPE_EFUSE_MAP_LEN , beacuse 8188E raw 256, logic map over 256. */ EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len, false); if (Efuse_GetCurrentSize(pAdapter, efuseType, bPseudoTest) >= efuse_max_available_len) @@ -2108,7 +2100,7 @@ static u8 Hal_GetChnlGroup88E(u8 chnl, u8 *pGroup) if (chnl <= 14) { bIn24G = true; - if (chnl < 3) /* Channel 1-2 */ + if (chnl < 3) /* Chanel 1-2 */ *pGroup = 0; else if (chnl < 6) /* Channel 3-5 */ *pGroup = 1; @@ -2190,7 +2182,7 @@ void Hal_ReadTxPowerInfo88E(struct adapter *padapter, u8 *PROMContent, bool Auto pHalData->bTXPowerDataReadFromEEPORM = true; for (rfPath = 0; rfPath < pHalData->NumTotalRFPath; rfPath++) { - for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) { + for (ch = 0; ch <= CHANNEL_MAX_NUMBER; ch++) { bIn24G = Hal_GetChnlGroup88E(ch, &group); if (bIn24G) { pHalData->Index24G_CCK_Base[rfPath][ch] = pwrInfo24G.IndexCCK_Base[rfPath][group]; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c index 68bb96d..ff468a6 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_phycfg.c @@ -559,7 +559,7 @@ static int phy_BB8188E_Config_ParaFile(struct adapter *Adapter) /* */ /* 1. Read PHY_REG.TXT BB INIT!! */ - /* We will separate as 88C / 92C according to chip version */ + /* We will seperate as 88C / 92C according to chip version */ /* */ if (HAL_STATUS_FAILURE == ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG)) rtStatus = _FAIL; @@ -685,7 +685,7 @@ static u8 phy_DbmToTxPwrIdx(struct adapter *Adapter, enum wireless_mode Wireless /* */ /* Tested by MP, we found that CCK Index 0 equals to 8dbm, OFDM legacy equals to */ - /* 3dbm, and OFDM HT equals to 0dbm respectively. */ + /* 3dbm, and OFDM HT equals to 0dbm repectively. */ /* Note: */ /* The mapping may be different by different NICs. Do not use this formula for what needs accurate result. */ /* By Bruce, 2008-01-29. */ @@ -1006,12 +1006,12 @@ _PHY_SetBWMode92C( switch (pHalData->CurrentChannelBW) { case HT_CHANNEL_WIDTH_20: regBwOpMode |= BW_OPMODE_20MHZ; - /* 2007/02/07 Mark by Emily because we have not verify whether this register works */ + /* 2007/02/07 Mark by Emily becasue we have not verify whether this register works */ rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode); break; case HT_CHANNEL_WIDTH_40: regBwOpMode &= ~BW_OPMODE_20MHZ; - /* 2007/02/07 Mark by Emily because we have not verify whether this register works */ + /* 2007/02/07 Mark by Emily becasue we have not verify whether this register works */ rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode); regRRSR_RSC = (regRRSR_RSC&0x90) | (pHalData->nCur40MhzPrimeSC<<5); rtw_write8(Adapter, REG_RRSR+2, regRRSR_RSC); diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c b/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c index 299e03e..bfdf9b3 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_rf6052.c @@ -181,7 +181,7 @@ i * Currently, we cannot fully disable driver dynamic * tx power mechanism because it is referenced by BT * coexist mechanism. * In the future, two mechanism shall be separated from - * each other and maintained independently. */ + * each other and maintained independantly. */ if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) { TxAGC[RF_PATH_A] = 0x10101010; TxAGC[RF_PATH_B] = 0x10101010; @@ -216,11 +216,11 @@ i * Currently, we cannot fully disable driver dynamic ODM_TxPwrTrackAdjust88E(&pHalData->odmpriv, 1, &direction, &pwrtrac_value); if (direction == 1) { - /* Increase TX power */ + /* Increase TX pwoer */ TxAGC[0] += pwrtrac_value; TxAGC[1] += pwrtrac_value; } else if (direction == 2) { - /* Decrease TX power */ + /* Decrease TX pwoer */ TxAGC[0] -= pwrtrac_value; TxAGC[1] -= pwrtrac_value; } @@ -292,7 +292,7 @@ static void get_rx_power_val_by_reg(struct adapter *Adapter, u8 Channel, if (pHalData->pwrGroupCnt == 1) chnlGroup = 0; if (pHalData->pwrGroupCnt >= pHalData->PGMaxGroup) { - if (Channel < 3) /* Channel 1-2 */ + if (Channel < 3) /* Chanel 1-2 */ chnlGroup = 0; else if (Channel < 6) /* Channel 3-5 */ chnlGroup = 1; @@ -349,7 +349,7 @@ static void get_rx_power_val_by_reg(struct adapter *Adapter, u8 Channel, } /* 20100427 Joseph: Driver dynamic Tx power shall not affect Tx power. It shall be determined by power training mechanism. */ /* Currently, we cannot fully disable driver dynamic tx power mechanism because it is referenced by BT coexist mechanism. */ -/* In the future, two mechanism shall be separated from each other and maintained independently. Thanks for Lanhsin's reminder. */ +/* In the future, two mechanism shall be separated from each other and maintained independantly. Thanks for Lanhsin's reminder. */ /* 92d do not need this */ if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) writeVal = 0x14141414; diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c index 8f43f49..bd8a9ae 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -332,7 +332,7 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz, u8 bag /* 2009.11.05. tynli_test. Suggested by SD4 Filen for FW LPS. */ /* (1) The sequence number of each non-Qos frame / broadcast / multicast / */ - /* mgnt frame should be controlled by Hw because Fw will also send null data */ + /* mgnt frame should be controled by Hw because Fw will also send null data */ /* which we cannot control when Fw LPS enable. */ /* --> default enable non-Qos data sequense number. 2010.06.23. by tynli. */ /* (2) Enable HW SEQ control for beacon packet, because we use Hw beacon. */ diff --git a/drivers/staging/rtl8188eu/hal/usb_halinit.c b/drivers/staging/rtl8188eu/hal/usb_halinit.c index cca9732..5e656ce 100644 --- a/drivers/staging/rtl8188eu/hal/usb_halinit.c +++ b/drivers/staging/rtl8188eu/hal/usb_halinit.c @@ -464,7 +464,7 @@ static void _InitRetryFunction(struct adapter *Adapter) /*----------------------------------------------------------------------------- * Function: usb_AggSettingTxUpdate() * - * Overview: Separate TX/RX parameters update independent for TP detection and + * Overview: Seperate TX/RX parameters update independent for TP detection and * dynamic TX/RX aggreagtion parameters update. * * Input: struct adapter * @@ -473,7 +473,7 @@ static void _InitRetryFunction(struct adapter *Adapter) * * Revised History: * When Who Remark - * 12/10/2010 MHC Separate to smaller function. + * 12/10/2010 MHC Seperate to smaller function. * *---------------------------------------------------------------------------*/ static void usb_AggSettingTxUpdate(struct adapter *Adapter) @@ -496,7 +496,7 @@ static void usb_AggSettingTxUpdate(struct adapter *Adapter) /*----------------------------------------------------------------------------- * Function: usb_AggSettingRxUpdate() * - * Overview: Separate TX/RX parameters update independent for TP detection and + * Overview: Seperate TX/RX parameters update independent for TP detection and * dynamic TX/RX aggreagtion parameters update. * * Input: struct adapter * @@ -505,7 +505,7 @@ static void usb_AggSettingTxUpdate(struct adapter *Adapter) * * Revised History: * When Who Remark - * 12/10/2010 MHC Separate to smaller function. + * 12/10/2010 MHC Seperate to smaller function. * *---------------------------------------------------------------------------*/ static void @@ -847,7 +847,7 @@ _func_enter_; /* */ /* Init CR MACTXEN, MACRXEN after setting RxFF boundary REG_TRXFF_BNDY to patch */ - /* Hw bug which Hw initials RxFF boundary size to a value which is larger than the real Rx buffer size in 88E. */ + /* Hw bug which Hw initials RxFF boundry size to a value which is larger than the real Rx buffer size in 88E. */ /* */ /* Enable MACTXEN/MACRXEN block */ value16 = rtw_read16(Adapter, REG_CR); diff --git a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c index 787763e..bc56416 100644 --- a/drivers/staging/rtl8188eu/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/hal/usb_ops_linux.c @@ -547,8 +547,6 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs) RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("usb_read_port_complete : purb->status(%d) != 0\n", purb->status)); DBG_88E("###=> usb_read_port_complete => urb status(%d)\n", purb->status); - skb_put(precvbuf->pskb, purb->actual_length); - precvbuf->pskb = NULL; if (rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(adapt))) adapt->bSurpriseRemoved = true; @@ -607,68 +605,68 @@ _func_enter_; return _FAIL; } - if (!precvbuf) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("usb_read_port:precvbuf==NULL\n")); - return _FAIL; - } - if ((!precvbuf->reuse) || (precvbuf->pskb == NULL)) { precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue); if (NULL != precvbuf->pskb) precvbuf->reuse = true; } - rtl8188eu_init_recvbuf(adapter, precvbuf); + if (precvbuf != NULL) { + rtl8188eu_init_recvbuf(adapter, precvbuf); - /* re-assign for linux based on skb */ - if ((!precvbuf->reuse) || (precvbuf->pskb == NULL)) { - precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ); - if (precvbuf->pskb == NULL) { - RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("init_recvbuf(): alloc_skb fail!\n")); - DBG_88E("#### usb_read_port() alloc_skb fail!#####\n"); - return _FAIL; - } + /* re-assign for linux based on skb */ + if ((!precvbuf->reuse) || (precvbuf->pskb == NULL)) { + precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ); + if (precvbuf->pskb == NULL) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("init_recvbuf(): alloc_skb fail!\n")); + DBG_88E("#### usb_read_port() alloc_skb fail!#####\n"); + return _FAIL; + } - tmpaddr = (size_t)precvbuf->pskb->data; - alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1); - skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment)); - - precvbuf->phead = precvbuf->pskb->head; - precvbuf->pdata = precvbuf->pskb->data; - precvbuf->ptail = skb_tail_pointer(precvbuf->pskb); - precvbuf->pend = skb_end_pointer(precvbuf->pskb); - precvbuf->pbuf = precvbuf->pskb->data; - } else { /* reuse skb */ - precvbuf->phead = precvbuf->pskb->head; - precvbuf->pdata = precvbuf->pskb->data; - precvbuf->ptail = skb_tail_pointer(precvbuf->pskb); - precvbuf->pend = skb_end_pointer(precvbuf->pskb); - precvbuf->pbuf = precvbuf->pskb->data; - - precvbuf->reuse = false; - } + tmpaddr = (size_t)precvbuf->pskb->data; + alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1); + skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment)); + + precvbuf->phead = precvbuf->pskb->head; + precvbuf->pdata = precvbuf->pskb->data; + precvbuf->ptail = skb_tail_pointer(precvbuf->pskb); + precvbuf->pend = skb_end_pointer(precvbuf->pskb); + precvbuf->pbuf = precvbuf->pskb->data; + } else { /* reuse skb */ + precvbuf->phead = precvbuf->pskb->head; + precvbuf->pdata = precvbuf->pskb->data; + precvbuf->ptail = skb_tail_pointer(precvbuf->pskb); + precvbuf->pend = skb_end_pointer(precvbuf->pskb); + precvbuf->pbuf = precvbuf->pskb->data; + + precvbuf->reuse = false; + } - precvpriv->rx_pending_cnt++; + precvpriv->rx_pending_cnt++; - purb = precvbuf->purb; + purb = precvbuf->purb; - /* translate DMA FIFO addr to pipehandle */ - pipe = ffaddr2pipehdl(pdvobj, addr); + /* translate DMA FIFO addr to pipehandle */ + pipe = ffaddr2pipehdl(pdvobj, addr); - usb_fill_bulk_urb(purb, pusbd, pipe, - precvbuf->pbuf, - MAX_RECVBUF_SZ, - usb_read_port_complete, - precvbuf);/* context is precvbuf */ + usb_fill_bulk_urb(purb, pusbd, pipe, + precvbuf->pbuf, + MAX_RECVBUF_SZ, + usb_read_port_complete, + precvbuf);/* context is precvbuf */ - err = usb_submit_urb(purb, GFP_ATOMIC); - if ((err) && (err != (-EPERM))) { + err = usb_submit_urb(purb, GFP_ATOMIC); + if ((err) && (err != (-EPERM))) { + RT_TRACE(_module_hci_ops_os_c_, _drv_err_, + ("cannot submit rx in-token(err=0x%.8x), URB_STATUS =0x%.8x", + err, purb->status)); + DBG_88E("cannot submit rx in-token(err = 0x%08x),urb_status = %d\n", + err, purb->status); + ret = _FAIL; + } + } else { RT_TRACE(_module_hci_ops_os_c_, _drv_err_, - ("cannot submit rx in-token(err=0x%.8x), URB_STATUS =0x%.8x", - err, purb->status)); - DBG_88E("cannot submit rx in-token(err = 0x%08x),urb_status = %d\n", - err, purb->status); + ("usb_read_port:precvbuf ==NULL\n")); ret = _FAIL; } diff --git a/drivers/staging/rtl8188eu/include/Hal8188EFWImg_CE.h b/drivers/staging/rtl8188eu/include/Hal8188EFWImg_CE.h new file mode 100644 index 0000000..949c33b --- /dev/null +++ b/drivers/staging/rtl8188eu/include/Hal8188EFWImg_CE.h @@ -0,0 +1,28 @@ +/****************************************************************************** +* +* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along with +* this program; if not, write to the Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA +* +* +******************************************************************************/ +#ifndef __INC_HAL8188E_FW_IMG_H +#define __INC_HAL8188E_FW_IMG_H + +/* V10(1641) */ +#define Rtl8188EFWImgArrayLength 13904 + +extern const u8 Rtl8188EFwImgArray[Rtl8188EFWImgArrayLength]; + +#endif /* __INC_HAL8188E_FW_IMG_H */ diff --git a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h index 25cae81..c4769e2 100644 --- a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h +++ b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h @@ -75,7 +75,7 @@ enum rf_radio_path { #define MAX_PG_GROUP 13 -#define RF_PATH_MAX 3 +#define RF_PATH_MAX 2 #define MAX_RF_PATH RF_PATH_MAX #define MAX_TX_COUNT 4 /* path numbers */ diff --git a/drivers/staging/rtl8188eu/include/Hal8188EPhyReg.h b/drivers/staging/rtl8188eu/include/Hal8188EPhyReg.h index 9f2969b..0e06d29 100644 --- a/drivers/staging/rtl8188eu/include/Hal8188EPhyReg.h +++ b/drivers/staging/rtl8188eu/include/Hal8188EPhyReg.h @@ -26,7 +26,7 @@ /* 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00 */ /* 3. RF register 0x00-2E */ /* 4. Bit Mask for BB/RF register */ -/* 5. Other definition for BB/RF R/W */ +/* 5. Other defintion for BB/RF R/W */ /* */ diff --git a/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h b/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h index 287e9f9..fa583f2 100644 --- a/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h +++ b/drivers/staging/rtl8188eu/include/HalPhyRf_8188e.h @@ -45,6 +45,8 @@ void PHY_IQCalibrate_8188E(struct adapter *Adapter, bool ReCovery); void PHY_LCCalibrate_8188E(struct adapter *pAdapter); /* AP calibrate */ +void PHY_APCalibrate_8188E(struct adapter *pAdapter, s8 delta); + void PHY_DigitalPredistortion_8188E(struct adapter *pAdapter); void _PHY_SaveADDARegisters(struct adapter *pAdapter, u32 *ADDAReg, diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h b/drivers/staging/rtl8188eu/include/ieee80211.h index c4d38d1..cd37ea4 100644 --- a/drivers/staging/rtl8188eu/include/ieee80211.h +++ b/drivers/staging/rtl8188eu/include/ieee80211.h @@ -306,8 +306,8 @@ struct ieee_ibss_seq { }; struct rtw_ieee80211_hdr { - __le16 frame_ctl; - __le16 duration_id; + u16 frame_ctl; + u16 duration_id; u8 addr1[ETH_ALEN]; u8 addr2[ETH_ALEN]; u8 addr3[ETH_ALEN]; @@ -316,8 +316,8 @@ struct rtw_ieee80211_hdr { } __packed; struct rtw_ieee80211_hdr_3addr { - __le16 frame_ctl; - __le16 duration_id; + u16 frame_ctl; + u16 duration_id; u8 addr1[ETH_ALEN]; u8 addr2[ETH_ALEN]; u8 addr3[ETH_ALEN]; @@ -325,8 +325,8 @@ struct rtw_ieee80211_hdr_3addr { } __packed; struct rtw_ieee80211_hdr_qos { - __le16 frame_ctl; - __le16 duration_id; + u16 frame_ctl; + u16 duration_id; u8 addr1[ETH_ALEN]; u8 addr2[ETH_ALEN]; u8 addr3[ETH_ALEN]; @@ -336,8 +336,8 @@ struct rtw_ieee80211_hdr_qos { } __packed; struct rtw_ieee80211_hdr_3addr_qos { - __le16 frame_ctl; - __le16 duration_id; + u16 frame_ctl; + u16 duration_id; u8 addr1[ETH_ALEN]; u8 addr2[ETH_ALEN]; u8 addr3[ETH_ALEN]; diff --git a/drivers/staging/rtl8188eu/include/odm.h b/drivers/staging/rtl8188eu/include/odm.h index eaa4bc1..4787bac 100644 --- a/drivers/staging/rtl8188eu/include/odm.h +++ b/drivers/staging/rtl8188eu/include/odm.h @@ -283,6 +283,8 @@ struct odm_rate_adapt { /* Declare for common info */ +#define MAX_PATH_NUM_92CS 2 + struct odm_phy_status_info { u8 RxPWDBAll; u8 SignalQuality; /* in 0-100 index. */ @@ -948,7 +950,7 @@ struct odm_dm_struct { struct timer_list FastAntTrainingTimer; }; /* DM_Dynamic_Mechanism_Structure */ -#define ODM_RF_PATH_MAX 3 +#define ODM_RF_PATH_MAX 2 enum ODM_RF_RADIO_PATH { ODM_RF_PATH_A = 0, /* Radio Path A */ diff --git a/drivers/staging/rtl8188eu/include/odm_HWConfig.h b/drivers/staging/rtl8188eu/include/odm_HWConfig.h index df52722..63779f5 100644 --- a/drivers/staging/rtl8188eu/include/odm_HWConfig.h +++ b/drivers/staging/rtl8188eu/include/odm_HWConfig.h @@ -69,7 +69,7 @@ struct phy_rx_agc_info { }; struct phy_status_rpt { - struct phy_rx_agc_info path_agc[3]; + struct phy_rx_agc_info path_agc[2]; u8 ch_corr[2]; u8 cck_sig_qual_ofdm_pwdb_all; u8 cck_agc_rpt_ofdm_cfosho_a; @@ -79,7 +79,7 @@ struct phy_status_rpt { u8 path_cfotail[2]; u8 pcts_mask[2]; s8 stream_rxevm[2]; - u8 path_rxsnr[3]; + u8 path_rxsnr[2]; u8 noise_power_db_lsb; u8 rsvd_2[3]; u8 stream_csi[2]; diff --git a/drivers/staging/rtl8188eu/include/odm_debug.h b/drivers/staging/rtl8188eu/include/odm_debug.h index 622f4c1..a9ba6df 100644 --- a/drivers/staging/rtl8188eu/include/odm_debug.h +++ b/drivers/staging/rtl8188eu/include/odm_debug.h @@ -27,7 +27,7 @@ /* Define the debug levels */ /* */ /* 1. DBG_TRACE and DBG_LOUD are used for normal cases. */ -/* They can help SW engineer to develop or trace states changed */ +/* They can help SW engineer to develope or trace states changed */ /* and also help HW enginner to trace every operation to and from HW, */ /* e.g IO, Tx, Rx. */ /* */ diff --git a/drivers/staging/rtl8188eu/include/odm_precomp.h b/drivers/staging/rtl8188eu/include/odm_precomp.h index d1d95f4..520cbba 100644 --- a/drivers/staging/rtl8188eu/include/odm_precomp.h +++ b/drivers/staging/rtl8188eu/include/odm_precomp.h @@ -31,6 +31,11 @@ #include <drv_types.h> #include <hal_intf.h> +/* 2 Hardware Parameter Files */ + +#include "Hal8188EFWImg_CE.h" + + /* 2 OutSrc Header Files */ #include "odm.h" diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h b/drivers/staging/rtl8188eu/include/osdep_service.h index 36523ed..44f24fa 100644 --- a/drivers/staging/rtl8188eu/include/osdep_service.h +++ b/drivers/staging/rtl8188eu/include/osdep_service.h @@ -430,6 +430,11 @@ int ATOMIC_SUB_RETURN(ATOMIC_T *v, int i); int ATOMIC_INC_RETURN(ATOMIC_T *v); int ATOMIC_DEC_RETURN(ATOMIC_T *v); +/* File operation APIs, just for linux now */ +int rtw_is_file_readable(char *path); +int rtw_retrive_from_file(char *path, u8 __user *buf, u32 sz); +int rtw_store_to_file(char *path, u8 __user *buf, u32 sz); + struct rtw_netdev_priv_indicator { void *priv; u32 sizeof_priv; diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h index 8cafd7a..819285b 100644 --- a/drivers/staging/rtl8188eu/include/rtw_cmd.h +++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h @@ -745,7 +745,7 @@ struct TDLSoption_param Result: 0x00: success -0x01: success, and check Response. +0x01: sucess, and check Response. 0x02: cmd ignored due to duplicated sequcne number 0x03: cmd dropped due to invalid cmd code 0x04: reserved. diff --git a/drivers/staging/rtl8188eu/include/rtw_led.h b/drivers/staging/rtl8188eu/include/rtw_led.h index d0da4fd..2e61804 100644 --- a/drivers/staging/rtl8188eu/include/rtw_led.h +++ b/drivers/staging/rtl8188eu/include/rtw_led.h @@ -163,14 +163,14 @@ enum LED_STRATEGY_871x { void LedControl8188eu(struct adapter *padapter, enum LED_CTL_MODE LedAction); struct led_priv{ - /* add for led control */ + /* add for led controll */ struct LED_871x SwLed0; struct LED_871x SwLed1; enum LED_STRATEGY_871x LedStrategy; u8 bRegUseLed; void (*LedControlHandler)(struct adapter *padapter, enum LED_CTL_MODE LedAction); - /* add for led control */ + /* add for led controll */ }; #define rtw_led_control(adapt, action) \ diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h index 4a7143e..22538e6 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme.h @@ -53,11 +53,11 @@ #define WIFI_SITE_MONITOR 0x00000800 /* to indicate the station is under site surveying */ #define WIFI_MP_STATE 0x00010000 -#define WIFI_MP_CTX_BACKGROUND 0x00020000 /* in continuous tx background */ -#define WIFI_MP_CTX_ST 0x00040000 /* in continuous tx with single-tone */ -#define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 /* pending in continuous tx background due to out of skb */ -#define WIFI_MP_CTX_CCK_HW 0x00100000 /* in continuous tx */ -#define WIFI_MP_CTX_CCK_CS 0x00200000 /* in continuous tx with carrier suppression */ +#define WIFI_MP_CTX_BACKGROUND 0x00020000 /* in continous tx background */ +#define WIFI_MP_CTX_ST 0x00040000 /* in continous tx with single-tone */ +#define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 /* pending in continous tx background due to out of skb */ +#define WIFI_MP_CTX_CCK_HW 0x00100000 /* in continous tx */ +#define WIFI_MP_CTX_CCK_CS 0x00200000 /* in continous tx with carrier suppression */ #define WIFI_MP_LPBK_STATE 0x00400000 #define _FW_UNDER_LINKING WIFI_UNDER_LINKING @@ -239,7 +239,7 @@ struct wifidirect_info { u8 profileindex; /* Used to point to the index of profileinfo array */ u8 peer_operating_ch; u8 find_phase_state_exchange_cnt; - /* The device password ID for group negotiation */ + /* The device password ID for group negotation */ u16 device_password_id_for_nego; u8 negotiation_dialog_token; /* SSID information for group negotitation */ diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h index b1bfa2e..853ab80 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -107,7 +107,7 @@ extern unsigned char WMM_PARA_OUI[]; /* Note: */ /* We just add new channel plan when the new channel plan is different * from any of the following channel plan. */ -/* If you just want to customize the actions(scan period or join actions) +/* If you just wnat to customize the acitions(scan period or join actions) * about one of the channel plan, */ /* customize them in struct rt_channel_info in the RT_CHANNEL_LIST. */ enum RT_CHANNEL_DOMAIN { diff --git a/drivers/staging/rtl8188eu/include/rtw_mp_phy_regdef.h b/drivers/staging/rtl8188eu/include/rtw_mp_phy_regdef.h index 30fd17f..3ad2207 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mp_phy_regdef.h +++ b/drivers/staging/rtl8188eu/include/rtw_mp_phy_regdef.h @@ -56,7 +56,7 @@ /* 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00 */ /* 3. RF register 0x00-2E */ /* 4. Bit Mask for BB/RF register */ -/* 5. Other definition for BB/RF R/W */ +/* 5. Other defintion for BB/RF R/W */ /* */ diff --git a/drivers/staging/rtl8188eu/include/rtw_recv.h b/drivers/staging/rtl8188eu/include/rtw_recv.h index be9c30c..bae8885 100644 --- a/drivers/staging/rtl8188eu/include/rtw_recv.h +++ b/drivers/staging/rtl8188eu/include/rtw_recv.h @@ -83,7 +83,7 @@ struct signal_stat { u32 total_num; /* num of valid elements */ u32 total_val; /* sum of valid elements */ }; -#define MAX_PATH_NUM_92CS 3 +#define MAX_PATH_NUM_92CS 2 struct phy_info { u8 RxPWDBAll; u8 SignalQuality; /* in 0-100 index. */ diff --git a/drivers/staging/rtl8188eu/include/rtw_rf.h b/drivers/staging/rtl8188eu/include/rtw_rf.h index 2df8837..089ecee 100644 --- a/drivers/staging/rtl8188eu/include/rtw_rf.h +++ b/drivers/staging/rtl8188eu/include/rtw_rf.h @@ -119,7 +119,7 @@ enum ht_channel_width { }; /* */ -/* Represent Extension Channel Offset in HT Capabilities */ +/* Represent Extention Channel Offset in HT Capabilities */ /* This is available only in 40Mhz mode. */ /* */ enum ht_extchnl_offset { diff --git a/drivers/staging/rtl8188eu/include/sta_info.h b/drivers/staging/rtl8188eu/include/sta_info.h index 3e909db..3ed2a39 100644 --- a/drivers/staging/rtl8188eu/include/sta_info.h +++ b/drivers/staging/rtl8188eu/include/sta_info.h @@ -338,7 +338,7 @@ struct sta_priv { */ struct sta_info *sta_aid[NUM_STA]; - u16 sta_dz_bitmap;/* only support 15 stations, station aid bitmap + u16 sta_dz_bitmap;/* only support 15 stations, staion aid bitmap * for sleeping sta. */ u16 tim_bitmap; /* only support 15 stations, aid=0~15 mapping * bit0~bit15 */ diff --git a/drivers/staging/rtl8188eu/include/wifi.h b/drivers/staging/rtl8188eu/include/wifi.h index 84e5199..a615659 100644 --- a/drivers/staging/rtl8188eu/include/wifi.h +++ b/drivers/staging/rtl8188eu/include/wifi.h @@ -984,7 +984,7 @@ enum ht_cap_ampdu_factor { #define P2P_PROVISION_TIMEOUT 5000 /* 3 seconds timeout for sending the prov disc request concurrent mode */ #define P2P_CONCURRENT_PROVISION_TIME 3000 -/* 5 seconds timeout for receiving the group negotiation response */ +/* 5 seconds timeout for receiving the group negotation response */ #define P2P_GO_NEGO_TIMEOUT 5000 /* 3 seconds timeout for sending the negotiation request under concurrent mode */ #define P2P_CONCURRENT_GO_NEGO_TIME 3000 diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c index ae54587..95953eb 100644 --- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c @@ -938,7 +938,7 @@ static int rtw_wx_set_pmkid(struct net_device *dev, memcpy(strIssueBssid, pPMK->bssid.sa_data, ETH_ALEN); if (pPMK->cmd == IW_PMKSA_ADD) { DBG_88E("[rtw_wx_set_pmkid] IW_PMKSA_ADD!\n"); - if (!memcmp(strIssueBssid, strZeroMacAddress, ETH_ALEN)) + if (!memcmp(strIssueBssid, strZeroMacAddress, ETH_ALEN) == true) return ret; else ret = true; @@ -1039,7 +1039,7 @@ static int rtw_wx_get_range(struct net_device *dev, range->avg_qual.qual = 92; /* > 8% missed beacons is 'bad' */ /* TODO: Find real 'good' to 'bad' threshol value for RSSI */ - range->avg_qual.level = 178; /* -78 dBm */ + range->avg_qual.level = 20 + -98; range->avg_qual.noise = 0; range->avg_qual.updated = 7; /* Updated all three */ @@ -1074,7 +1074,7 @@ static int rtw_wx_get_range(struct net_device *dev, /* The following code will proivde the security capability to network manager. */ /* If the driver doesn't provide this capability to network manager, */ -/* the WPA/WPA2 routers can't be chosen in the network manager. */ +/* the WPA/WPA2 routers can't be choosen in the network manager. */ /* #define IW_SCAN_CAPA_NONE 0x00 @@ -1373,7 +1373,7 @@ _func_enter_; } } - /* it has still some scan parameter to parse, we only do this now... */ + /* it has still some scan paramater to parse, we only do this now... */ _status = rtw_set_802_11_bssid_list_scan(padapter, ssid, RTW_SSID_SCAN_AMOUNT); } else { _status = rtw_set_802_11_bssid_list_scan(padapter, NULL, 0); @@ -2626,7 +2626,7 @@ static int rtw_get_ap_info(struct net_device *dev, return -EINVAL; } - if (!memcmp(bssid, pnetwork->network.MacAddress, ETH_ALEN)) { + if (!memcmp(bssid, pnetwork->network.MacAddress, ETH_ALEN) == true) { /* BSSID match, then check if supporting wpa/wpa2 */ DBG_88E("BSSID:%pM\n", (bssid)); @@ -2961,7 +2961,7 @@ static int rtw_p2p_get_status(struct net_device *dev, /* Commented by Albert 20110520 */ /* This function will return the config method description */ -/* This config method description will show us which config method the remote P2P device is intended to use */ +/* This config method description will show us which config method the remote P2P device is intented to use */ /* by sending the provisioning discovery request frame. */ static int rtw_p2p_get_req_cm(struct net_device *dev, @@ -3413,7 +3413,7 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev, /* +8 is for the str "InvProc =", we have to clear it at wrqu->data.pointer */ /* Commented by Ouden 20121226 */ - /* The application wants to know P2P initiation procedure is supported or not. */ + /* The application wants to know P2P initation procedure is support or not. */ /* Format: iwpriv wlanx p2p_get2 InvProc = 00:E0:4C:00:00:05 */ DBG_88E("[%s] data = %s\n", __func__, (char *)extra); @@ -4040,7 +4040,7 @@ static int rtw_rereg_nd_name(struct net_device *dev, if (0 != ret) goto exit; - if (!memcmp(rereg_priv->old_ifname, "disable%d", 9)) { + if (!memcmp(rereg_priv->old_ifname, "disable%d", 9) == true) { padapter->ledpriv.bRegUseLed = rereg_priv->old_bRegUseLed; rtw_hal_sw_led_init(padapter); rtw_ips_mode_req(&padapter->pwrctrlpriv, rereg_priv->old_ips_mode); @@ -4049,7 +4049,7 @@ static int rtw_rereg_nd_name(struct net_device *dev, strncpy(rereg_priv->old_ifname, new_ifname, IFNAMSIZ); rereg_priv->old_ifname[IFNAMSIZ-1] = 0; - if (!memcmp(new_ifname, "disable%d", 9)) { + if (!memcmp(new_ifname, "disable%d", 9) == true) { DBG_88E("%s disable\n", __func__); /* free network queue for Android's timming issue */ rtw_free_network_queue(padapter, true); @@ -4884,6 +4884,7 @@ static int set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid) case _TKIP_: case _TKIP_WTMIC_: case _AES_: + keylen = 16; default: keylen = 16; } @@ -6145,7 +6146,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk + 1]); - /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ + /* Change to check TYPE_EFUSE_MAP_LEN, beacuse 8188E raw 256, logic map over 256. */ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size, false); if ((addr+cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); @@ -6220,7 +6221,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, for (jj = 0, kk = 0; jj < cnts; jj++, kk += 2) setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk + 1]); - /* Change to check TYPE_EFUSE_MAP_LEN, because 8188E raw 256, logic map over 256. */ + /* Change to check TYPE_EFUSE_MAP_LEN, beacuse 8188E raw 256, logic map over 256. */ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size, false); if ((addr+cnts) > max_available_size) { DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts); diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c b/drivers/staging/rtl8188eu/os_dep/os_intfs.c index 17659bb..63bc913 100644 --- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c +++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c @@ -85,7 +85,7 @@ static int rtw_uapsd_acvi_en; static int rtw_uapsd_acvo_en; int rtw_ht_enable = 1; -int rtw_cbw40_enable = 3; /* 0 :disable, bit(0): enable 2.4g, bit(1): enable 5g */ +int rtw_cbw40_enable = 3; /* 0 :diable, bit(0): enable 2.4g, bit(1): enable 5g */ int rtw_ampdu_enable = 1;/* for enable tx_ampdu */ static int rtw_rx_stbc = 1;/* 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ */ static int rtw_ampdu_amsdu;/* 0: disabled, 1:enabled, 2:auto */ @@ -707,10 +707,6 @@ int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname) return 0; } -static const struct device_type wlan_type = { - .name = "wlan", -}; - struct net_device *rtw_init_netdev(struct adapter *old_padapter) { struct adapter *padapter; @@ -726,7 +722,6 @@ struct net_device *rtw_init_netdev(struct adapter *old_padapter) if (!pnetdev) return NULL; - pnetdev->dev.type = &wlan_type; padapter = rtw_netdev_priv(pnetdev); padapter->pnetdev = pnetdev; DBG_88E("register rtw_netdev_ops to netdev_ops\n"); diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c b/drivers/staging/rtl8188eu/os_dep/osdep_service.c index a1ae727..4e0bfb7 100644 --- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c +++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c @@ -356,6 +356,214 @@ inline int ATOMIC_DEC_RETURN(ATOMIC_T *v) return atomic_dec_return(v); } +/* Open a file with the specific @param path, @param flag, @param mode + * @param fpp the pointer of struct file pointer to get struct file pointer while file opening is success + * @param path the path of the file to open + * @param flag file operation flags, please refer to linux document + * @param mode please refer to linux document + * @return Linux specific error code + */ +static int openfile(struct file **fpp, char *path, int flag, int mode) +{ + struct file *fp; + + fp = filp_open(path, flag, mode); + if (IS_ERR(fp)) { + *fpp = NULL; + return PTR_ERR(fp); + } else { + *fpp = fp; + return 0; + } +} + +/* Close the file with the specific @param fp + * @param fp the pointer of struct file to close + * @return always 0 + */ +static int closefile(struct file *fp) +{ + filp_close(fp, NULL); + return 0; +} + +static int readfile(struct file *fp, char __user *buf, int len) +{ + int rlen = 0, sum = 0; + + if (!fp->f_op || !fp->f_op->read) + return -EPERM; + + while (sum < len) { + rlen = fp->f_op->read(fp, buf+sum, len-sum, &fp->f_pos); + if (rlen > 0) + sum += rlen; + else if (0 != rlen) + return rlen; + else + break; + } + return sum; +} + +static int writefile(struct file *fp, char __user *buf, int len) +{ + int wlen = 0, sum = 0; + + if (!fp->f_op || !fp->f_op->write) + return -EPERM; + + while (sum < len) { + wlen = fp->f_op->write(fp, buf+sum, len-sum, &fp->f_pos); + if (wlen > 0) + sum += wlen; + else if (0 != wlen) + return wlen; + else + break; + } + return sum; +} + +/* Test if the specifi @param path is a file and readable + * @param path the path of the file to test + * @return Linux specific error code + */ +static int isfilereadable(char *path) +{ + struct file *fp; + int ret = 0; + mm_segment_t oldfs; + char __user buf; + + fp = filp_open(path, O_RDONLY, 0); + if (IS_ERR(fp)) { + ret = PTR_ERR(fp); + } else { + oldfs = get_fs(); set_fs(get_ds()); + + if (1 != readfile(fp, &buf, 1)) + ret = PTR_ERR(fp); + + set_fs(oldfs); + filp_close(fp, NULL); + } + return ret; +} + +/* Open the file with @param path and retrive the file content into + * memory starting from @param buf for @param sz at most + * @param path the path of the file to open and read + * @param buf the starting address of the buffer to store file content + * @param sz how many bytes to read at most + * @return the byte we've read, or Linux specific error code + */ +static int retrievefromfile(char *path, u8 __user *buf, u32 sz) +{ + int ret = -1; + mm_segment_t oldfs; + struct file *fp; + + if (path && buf) { + ret = openfile(&fp, path, O_RDONLY, 0); + if (0 == ret) { + DBG_88E("%s openfile path:%s fp =%p\n", __func__, + path, fp); + + oldfs = get_fs(); set_fs(get_ds()); + ret = readfile(fp, buf, sz); + set_fs(oldfs); + closefile(fp); + + DBG_88E("%s readfile, ret:%d\n", __func__, ret); + + } else { + DBG_88E("%s openfile path:%s Fail, ret:%d\n", __func__, + path, ret); + } + } else { + DBG_88E("%s NULL pointer\n", __func__); + ret = -EINVAL; + } + return ret; +} + +/* +* Open the file with @param path and wirte @param sz byte of data starting from @param buf into the file +* @param path the path of the file to open and write +* @param buf the starting address of the data to write into file +* @param sz how many bytes to write at most +* @return the byte we've written, or Linux specific error code +*/ +static int storetofile(char *path, u8 __user *buf, u32 sz) +{ + int ret = 0; + mm_segment_t oldfs; + struct file *fp; + + if (path && buf) { + ret = openfile(&fp, path, O_CREAT|O_WRONLY, 0666); + if (0 == ret) { + DBG_88E("%s openfile path:%s fp =%p\n", __func__, path, fp); + + oldfs = get_fs(); set_fs(get_ds()); + ret = writefile(fp, buf, sz); + set_fs(oldfs); + closefile(fp); + + DBG_88E("%s writefile, ret:%d\n", __func__, ret); + + } else { + DBG_88E("%s openfile path:%s Fail, ret:%d\n", __func__, path, ret); + } + } else { + DBG_88E("%s NULL pointer\n", __func__); + ret = -EINVAL; + } + return ret; +} + +/* +* Test if the specifi @param path is a file and readable +* @param path the path of the file to test +* @return true or false +*/ +int rtw_is_file_readable(char *path) +{ + if (isfilereadable(path) == 0) + return true; + else + return false; +} + +/* +* Open the file with @param path and retrive the file content into memory starting from @param buf for @param sz at most +* @param path the path of the file to open and read +* @param buf the starting address of the buffer to store file content +* @param sz how many bytes to read at most +* @return the byte we've read +*/ +int rtw_retrive_from_file(char *path, u8 __user *buf, u32 sz) +{ + int ret = retrievefromfile(path, buf, sz); + + return ret >= 0 ? ret : 0; +} + +/* + * Open the file with @param path and wirte @param sz byte of data + * starting from @param buf into the file + * @param path the path of the file to open and write + * @param buf the starting address of the data to write into file + * @param sz how many bytes to write at most + * @return the byte we've written + */ +int rtw_store_to_file(char *path, u8 __user *buf, u32 sz) +{ + int ret = storetofile(path, buf, sz); + return ret >= 0 ? ret : 0; +} + struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv) { @@ -419,14 +627,13 @@ RETURN: int rtw_change_ifname(struct adapter *padapter, const char *ifname) { struct net_device *pnetdev; - struct net_device *cur_pnetdev; + struct net_device *cur_pnetdev = padapter->pnetdev; struct rereg_nd_name_data *rereg_priv; int ret; if (!padapter) goto error; - cur_pnetdev = padapter->pnetdev; rereg_priv = &padapter->rereg_nd_name_priv; /* free the old_pnetdev */ @@ -587,7 +794,7 @@ void *rtw_cbuf_pop(struct rtw_cbuf *cbuf) } /** - * rtw_cbuf_alloc - allocate a rtw_cbuf with given size and do initialization + * rtw_cbuf_alloc - allocte a rtw_cbuf with given size and do initialization * @size: size of pointer * * Returns: pointer of srtuct rtw_cbuf, NULL for allocation failure diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c b/drivers/staging/rtl8188eu/os_dep/recv_linux.c index 3852ff4..e2f4e7d 100644 --- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c @@ -77,7 +77,8 @@ int rtw_os_recvbuf_resource_alloc(struct adapter *padapter, int rtw_os_recvbuf_resource_free(struct adapter *padapter, struct recv_buf *precvbuf) { - usb_free_urb(precvbuf->purb); + if (precvbuf->purb) + usb_free_urb(precvbuf->purb); return _SUCCESS; } @@ -223,7 +224,8 @@ _func_exit_; _recv_indicatepkt_drop: /* enqueue back to free_recv_queue */ - rtw_free_recvframe(precv_frame, pfree_recv_queue); + if (precv_frame) + rtw_free_recvframe(precv_frame, pfree_recv_queue); _func_exit_; return _FAIL; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 7d14779..9ca3180 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -737,7 +737,7 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, status = _SUCCESS; free_hal_data: - if (status != _SUCCESS) + if (status != _SUCCESS && padapter->HalData) kfree(padapter->HalData); handle_dualmac: if (status != _SUCCESS) |