Index: Makefile
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/Makefile	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/Makefile	(working copy)
@@ -0,0 +1,110 @@
+	comma:= ,
+empty:=
+space:= $(empty) $(empty)
+bracketl:= (
+bracketl0:= \(
+bracketr:= )
+bracketr0:= \)
+
+
+OUTDIR = output
+ROOT_PATH =C:\keil
+
+UTIL_PATH = ..\rom\util
+
+C51BIN = $(ROOT_PATH)\c51\bin
+C51   = $(C51BIN)\c51
+A51   = $(C51BIN)\ax51
+BL51  = $(C51BIN)\lx51
+OH51  = $(C51BIN)\Ohx51
+OC51  = $(C51BIN)\oc51
+LIB51 = $(C51BIN)\libx51
+
+TARGET = $(OUTDIR)\fw
+TARGETHEX = $(TARGET).hex
+
+
+RAMTARGET = $(OUTDIR)\fwram
+
+RAMTARGETHEX = $(addsuffix .hex, $(RAMTARGET))
+
+############################## IMPORTANT ####################################
+#   opt level greater than 7 cannot be used, or the ram code and the rom code will be different
+##############################################################################
+OPT_LEVEL=7
+
+LIST_FILE_CTL=PR($(@:obj=lst))
+
+C_OPTS = object($@) OBJECTADVANCED  browse DF(ENABLE_APE) $(LIST_FILE_CTL) \
+OT($(OPT_LEVEL),SPEED) large
+
+#ASM_OPTS =  $(LIST_FILE_CTL) object($@)
+ASM_OPTS = SET (large) DEBUG EP $(LIST_FILE_CTL) object($@)
+
+LINK_OPTS = \
+	CLASSES (XDATA (X:0x1a00-X:0x1dFF), \
+	CODE(C:0-C:0xffff), DATA(D:0x10-0x7f), IDATA(I:0x80-0xcf)) \
+	SEGMENTS($(DATA_MAP)) \
+	NOOVERLAY \
+	PAGELENGTH(60000) \
+	CODE
+
+DATA_MAP = ?STACK(D:0xD0)
+CODE_MAP = ?PR?RAMENTRY?JUMPTABLE(C:0x0), ?PR?*, ?C*
+
+LINK_OBJ_RAM =ram sys
+
+LINK_OBJ_TMP_RAM = $(addsuffix .obj,$(LINK_OBJ_RAM)) ..\patch\utilities.obj ..\patch\gpio.obj ..\patch\iic.obj ..\patch\ipc.obj ..\patch\keyscan.obj ..\patch\adc.obj
+LINK_OBJ_DEPENDENCIES_RAM = $(addprefix $(OUTDIR)/, $(LINK_OBJ_TMP_RAM))
+LINK_OBJ_FILES_RAM = $(subst $(space),$(comma),$(LINK_OBJ_DEPENDENCIES_RAM))
+
+LINK_OBJ_TMP_ROM = $(addsuffix .obj,$(LINK_OBJ_ROM))
+LINK_OBJ_DEPENDENCIES_ROM = $(addprefix $(OUTDIR)/, $(LINK_OBJ_TMP_ROM))
+LINK_OBJ_FILES_ROM = $(subst $(space),$(comma),$(LINK_OBJ_DEPENDENCIES_ROM))
+
+
+.SUFFIXES: .a51
+RAM_BIN = $(RAMTARGET).rom
+
+
+PROG_FILE = ..\rom\program\c51.prog
+RAM_FILES = $(RAM_MIF) $(RAM_BIN) $(EEPROM_FILE) $(PROG_FILE)
+
+$(OUTDIR)/%.obj : %.c hwreg.h
+	$(C51) $< "$(C_OPTS)"
+
+$(OUTDIR)/%.obj : %.a51
+	$(A51) $< "$(ASM_OPTS)"
+
+all : $(RAM_FILES) 
+
+
+$(TARGET) : $(LINK_OBJ_DEPENDENCIES_RAM)
+	$(BL51) $(LINK_OBJ_FILES_RAM) TO $@ "$(LINK_OPTS)"
+
+$(TARGETHEX) : $(TARGET)
+	$(OH51) $(TARGET)
+
+
+$(RAM_BIN) : $(TARGETHEX)
+
+
+$(RAM_MIF) : $(TARGETHEX)
+	perl $(UTIL_PATH)\hex2mif.pl < $< rammif > $@
+
+
+$(EEPROM_FILE) : $(RAM_BIN)
+	cd ..\rom\output; ..\util\geneep.exe; cp eeprom.dat ..\..\sim 
+
+$(PROG_FILE) : $(RAM_BIN)
+#	perl $(UTIL_PATH)\setarg.pl $< c51 > $@
+
+clean:  
+	del /Q $(OUTDIR)\*.* 
+
+
+lib:
+	$(LIB51) TRANSFER $(OUTDIR)\ipc.obj TO $(OUTDIR)\yichip.LIB
+	
+ext:
+	$(LIB51) EXTRACT $(OUTDIR)\yichip.LIB (ipc) TO $(OUTDIR)\ipc.obj
Index: Peripheral.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/Peripheral.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/Peripheral.h	(working copy)
@@ -0,0 +1,26 @@
+
+
+
+
+#ifndef _YC_PERIPHERAL_H_
+#define _YC_PERIPHERAL_H_
+#include "common.h"
+
+
+#define LED1_GPIO	29	//green
+#define LED2_GPIO	30	//red
+#define LED4_GPIO	27	//blue
+ 
+#define BT_BUTTON_GPIO 0x1f
+
+#endif
+
+
+
+
+
+
+
+
+
+
Index: adc.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/adc.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/adc.h	(working copy)
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016, yichip Semiconductor(shenzhen office)
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Yichip Semiconductor.
+ */
+ 
+ /** @file
+ *
+ * IIC support for application
+ */
+#ifndef __DEV_ADC_H_
+#define __DEV_ADC_H_
+#include "type.h"
+#include "btreg.h"
+#include "hwreg.h"
+
+/**
+ * This function Get current ADC Value.
+ * 
+ * @param none.
+ * 
+ * @return adc value.
+*/
+u16_t ADC_GetCurrentValue();
+
+/**
+ * This function Get 3v base ADC Value.
+ * 
+ * @param none.
+ * 
+ * @return adc value.
+*/
+u16_t ADC_Get3vBase();
+
+/**
+ * This function Get 0v base ADC Value.
+ * 
+ * @param none.
+ * 
+ * @return adc value.
+*/
+u16_t ADC_Get0vBase();
+
+#endif/* YC_IIC_H */
+
Index: btreg.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/btreg.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/btreg.h	(working copy)
@@ -0,0 +1,1077 @@
+#ifndef _BT_REG_H_
+#define _BT_REG_H_
+#define	mem_le_adv_transmit                     	0x0000
+#define	mem_le_adv_waitcnt                      	0x0001
+#define	mem_le_adv_rcv                          	0x0002
+#define	mem_le_req_rcv                          	0x0003
+#define	mem_le_scanrsp_rcv                      	0x0004
+#define	mem_le_conn_rcv                         	0x0005
+#define	mem_inquiryscan_waitcnt                 	0x0006
+#define	mem_inquiryscan_rcvcnt                  	0x0007
+#define	mem_pagescan_waitcnt                    	0x0008
+#define	mem_pagescan_rcvcnt                     	0x0009
+#define	mem_pagescan_rcvfhscnt                  	0x000a
+#define	mem_slave_rcvcnt                        	0x000b
+#define	mem_page_transmit                       	0x000c
+#define	mem_page_rcv                            	0x000d
+#define	mem_page_rcv_fhs                        	0x000e
+#define	mem_master_rcvcnt                       	0x000f
+#define	mem_fhs_wait_counter                    	0x0010
+#define	mem_newconnto_counter                   	0x0011
+#define	mem_inquiry_transmit                    	0x0012
+#define	mem_inquiry_rcv                         	0x0013
+#define	mem_fw_ver                              	0x0014
+#define	mem_current_context                     	0x0015
+#define	mem_le_ch_mapped                        	0x0016
+#define	mem_last_freq                           	0x0017
+#define	mem_rssi                                	0x0018
+#define	mem_rx_type                             	0x0019
+#define	mem_rx_hec_err                          	0x001a
+#define	mem_rx_crc_err                          	0x001c
+#define	mem_context_ptr                         	0x001e
+#define	mem_display                             	0x0020
+#define	mem_bcd                                 	0x0028
+#define	mem_state                               	0x0030
+#define	mem_mode                                	0x0031
+#define	mem_tsniff                              	0x0032
+#define	mem_sniff_anchor                        	0x0034
+#define	mem_clk_offset                          	0x0038
+#define	mem_rx_window                           	0x003e
+#define	mem_plap                                	0x0040
+#define	mem_puap                                	0x0043
+#define	mem_pnap                                	0x0044
+#define	mem_conn_handle                         	0x0046
+#define	mem_arq                                 	0x0047
+#define	mem_lmp_to_send                         	0x0048
+#define	mem_lmi_opcode                          	0x0049
+#define	mem_lmo_reason                          	0x004a
+#define	mem_op                                  	0x004b
+#define	mem_state_map                           	0x004c
+#define	mem_supervision_timer                   	0x004d
+#define	mem_supervision_to                      	0x0051
+#define	mem_name_offset                         	0x0053
+#define	mem_key_size                            	0x0054
+#define	mem_conn_sm                             	0x0055
+#define	mem_aco                                 	0x0056
+#define	mem_kc                                  	0x0062
+#define	mem_conn_timer                          	0x0072
+#define	mem_sniff_attempt                       	0x0073
+#define	mem_sniff_timeout                       	0x0074
+#define	mem_dsniff                              	0x0075
+#define	mem_amaddr                              	0x0077
+#define	mem_lmo_opcode1                         	0x0078
+#define	mem_lmi_opcode1                         	0x0079
+#define	mem_lmo_reason1                         	0x007a
+#define	mem_lmo_tid1                            	0x007b
+#define	mem_lmo_opcode2                         	0x007c
+#define	mem_lmi_opcode2                         	0x007d
+#define	mem_lmo_reason2                         	0x007e
+#define	mem_lmo_tid2                            	0x007f
+#define	mem_hci_version                         	0x0080
+#define	mem_acl_pktlen                          	0x0083
+#define	mem_sco_pktlen                          	0x0085
+#define	mem_acl_pktcnt                          	0x0086
+#define	mem_sco_pktcnt                          	0x0088
+#define	mem_current_sniff_attempt               	0x008a
+#define	mem_current_sniff_timeout               	0x008b
+#define	mem_nfreq_index_inq                     	0x008c
+#define	mem_nfreq_index_page                    	0x008d
+#define	mem_ninqy_index                         	0x008e
+#define	mem_fhs_misc                            	0x008f
+#define	mem_tx_lch                              	0x0090
+#define	mem_tx_len                              	0x0091
+#define	mem_subsniff_instant                    	0x0093
+#define	mem_subsniff_rate                       	0x0097
+#define	mem_subsniff_tcmax                      	0x0098
+#define	mem_subsniff_tsniff                     	0x009a
+#define	mem_lpm_adjust                          	0x009b
+#define	mem_sync_clke                           	0x009c
+#define	mem_lpm_current_mult                    	0x00a2
+#define	mem_gpio_wakeup_low                     	0x00a3
+#define	mem_gpio_wakeup_high                    	0x00a7
+#define	mem_air_mode                            	0x00ab
+#define	mem_sco_asso_handle                     	0x00ac
+#define	mem_sco_handle                          	0x00ad
+#define	mem_esco_desco                          	0x00af
+#define	mem_esco_type                           	0x00b0
+#define	mem_neogotiation_state                  	0x00b1
+#define	mem_saved_amaddr                        	0x00b2
+#define	mem_esco_arq                            	0x00b3
+#define	mem_esco_saved_arq                      	0x00b4
+#define	mem_sco_obuf                            	0x00b5
+#define	mem_sco_ibuf                            	0x00d3
+#define	mem_sco_poll                            	0x00f1
+#define	mem_npage_index                         	0x00f2
+#define	mem_page_mode                           	0x00f3
+#define	mem_page_clk                            	0x00f4
+#define	mem_tst_pktcnt_sync                     	0x00f8
+#define	mem_tst_pktcnt_hec                      	0x00fa
+#define	mem_tst_pktcnt_crc                      	0x00fc
+#define	mem_tst_pktcnt_dmh                      	0x00fe
+#define	mem_tmp_buffer_head                     	0x0100
+#define	mem_tmp_buffer                          	0x0103
+#define	mem_tester_emulate                      	0x0153
+#define	mem_temp_payload                        	0x0154
+#define	test_mode_scenario                      	0x0154
+#define	test_mode_hopping_mode                  	0x0155
+#define	test_mode_tx_freq                       	0x0156
+#define	test_mode_rx_freq                       	0x0157
+#define	test_mode_power_mode                    	0x0158
+#define	test_mode_poll_period                   	0x0159
+#define	test_mode_packet_type                   	0x015a
+#define	test_mode_data_length                   	0x015b
+#define	mem_test_mode_old_debug_config          	0x015d
+#define	mem_tester_cnt                          	0x015e
+#define	mem_temp_am_addr                        	0x015f
+#define	mem_temp_arq                            	0x0160
+#define	mem_pdatatemp                           	0x0161
+#define	mem_len                                 	0x0169
+#define	mem_clkn_bt                             	0x016b
+#define	mem_clke_bt                             	0x016f
+#define	mem_dpll_clkn                           	0x0173
+#define	mem_connection_options                  	0x0177
+#define	mem_nameres_cnt                         	0x0178
+#define	mem_txptr                               	0x0179
+#define	mem_slot_offset                         	0x017b
+#define	extm_fhs_misc                           	0x017d
+#define	extm_newconn_am_addr                    	0x017e
+#define	extm_class                              	0x017f
+#define	extm_lap                                	0x0182
+#define	extm_uap                                	0x0185
+#define	extm_nap                                	0x0186
+#define	mem_debug_config                        	0x0189
+#define	mem_lch_code                            	0x018a
+#define	mem_fhs_am_addr                         	0x018b
+#define	mem_dpll_error                          	0x018c
+#define	mem_bdaddr_list_buff                    	0x018e
+#define	mem_select_list_item                    	0x01b2
+#define	mem_temp_reconn_record                  	0x01b3
+#define	mem_record_bt_mode                      	0x01b3
+#define	mem_temp_lap                            	0x01b4
+#define	mem_list_item_ptr                       	0x01ba
+#define	mem_eir                                 	0x01bc
+#define	mem_ucode_status                        	0x0220
+#define	mem_otp_ucode_flag                      	0x0221
+#define	mem_spid_tbuf                           	0x0223
+#define	mem_iicd_tbuf                           	0x0224
+#define	mem_addr_hi                             	0x0224
+#define	mem_addr_mi                             	0x0225
+#define	mem_addr_lo                             	0x0226
+#define	mem_iicd_addr                           	0x0227
+#define	mem_spid_rbuf                           	0x0228
+#define	mem_ucode_buf                           	0x022c
+#define	mem_ucode_len                           	0x022e
+#define	mem_sched_addr                          	0x0230
+#define	mem_ucode_ptr                           	0x0232
+#define	mem_ucode_keybuf                        	0x0234
+#define	mem_check_plap_temp                     	0x0244
+#define	mem_sensor_id                           	0x0256
+#define	mem_reconnect_flag                      	0x0257
+#define	mem_switch_fail_master_count            	0x0258
+#define	mem_app_evt_timer_count                 	0x0259
+#define	mem_dongle_count                        	0x025a
+#define	mem_le_addr_slave1                      	0x025b
+#define	mem_le_addr_slave2                      	0x0261
+#define	mem_le_peer_state                       	0x0267
+#define	mem_app_peer_addr                       	0x0268
+#define	mem_dongle_peers                        	0x026e
+#define	mem_dongle_pairing_cnt                  	0x026f
+#define	mem_dongle_signature                    	0x0270
+#define	mem_h5rx_ackcnt                         	0x0272
+#define	mem_check_err_acl_cont                  	0x0273
+#define	mem_rp_packets                          	0x0274
+#define	mem_packet_type                         	0x0275
+#define	mem_hci_sniff_conn_handle               	0x0277
+#define	mem_hci_sniff_max_interval              	0x0279
+#define	mem_hci_sniff_min_interval              	0x027b
+#define	mem_hci_sniff_attempt                   	0x027d
+#define	mem_hci_sniff_timeout                   	0x027f
+#define	mem_voice_setting                       	0x0281
+#define	mem_retransmission_effort               	0x0283
+#define	mem_sco_ptype                           	0x0284
+#define	mem_extm_uap_restore                    	0x0286
+#define	mem_h5rx_rptr                           	0x0289
+#define	mem_h5rx_ack                            	0x028b
+#define	mem_h5tx_ack                            	0x028c
+#define	mem_h5tx_rptr                           	0x028d
+#define	mem_h5tx_wptr                           	0x028f
+#define	mem_h5tx_free                           	0x0291
+#define	mem_h5rx_tmp                            	0x0293
+#define	mem_h5tx_seq                            	0x0294
+#define	mem_hci_acl_queue_wptr                  	0x0295
+#define	mem_hci_acl_queue_rptr                  	0x0297
+#define	mem_hci_acl_queue_end                   	0x0299
+#define	mem_hci_acl_queue_wcnt                  	0x029b
+#define	mem_hci_acl_cnt                         	0x029c
+#define	mem_hci_acl_tx_trigger_wptr             	0x029d
+#define	mem_ucode_id_local                      	0x029f
+#define	mem_temp                                	0x02a0
+#define	mem_timeup                              	0x02a8
+#define	mem_rega                                	0x02ac
+#define	mem_regb                                	0x02b0
+#define	mem_regc                                	0x02b4
+#define	mem_contr                               	0x02b7
+#define	mem_contw                               	0x02b9
+#define	mem_ucode_id_remote                     	0x02bb
+#define	mem_check_sum                           	0x02bc
+#define	mem_ucode_temp                          	0x02bd
+#define	mem_ucode_temp1                         	0x02be
+#define	mem_lock_in_enc                         	0x02bf
+#define	mem_hci_disconn_reason                  	0x02c0
+#define	mem_hci_curr_len                        	0x02c1
+#define	mem_hci_curr_target                     	0x02c2
+#define	mem_l2cap_mem_start                     	0x02c4
+#define	mem_l2cap_rxbuff1_len                   	0x02c4
+#define	mem_l2cap_rxbuff2_len                   	0x02c6
+#define	mem_l2cap_rxbuff_new                    	0x02c8
+#define	mem_l2cap_rxbuff_inuse                  	0x02ca
+#define	mem_l2cap_payload_ptr                   	0x02cb
+#define	mem_l2cap_rx_pkt_length                 	0x02cd
+#define	mem_l2cap_rx_cid                        	0x02cf
+#define	mem_l2cap_rx_done                       	0x02d1
+#define	mem_l2cap_signal_tx_buff_ptr            	0x02d2
+#define	mem_l2cap_signal_tx_payload_ptr         	0x02d4
+#define	mem_l2cap_signal_tx_length              	0x02d6
+#define	mem_sdp_tx_buff_ptr                     	0x02d8
+#define	mem_sdp_tx_payload_ptr                  	0x02da
+#define	mem_sdp_tx_pkt_length                   	0x02dc
+#define	mem_rfcomm_tx_buff_ptr                  	0x02de
+#define	mem_rfcomm_tx_payload_ptr               	0x02e0
+#define	mem_rfcomm_tx_pkt_length                	0x02e2
+#define	memL2CAP_T1                             	0x02e4
+#define	mem_CONTROL_tasks                       	0x02e6
+#define	mem_send_config_req                     	0x02e7
+#define	mem_config_identifier                   	0x02e8
+#define	mem_config_req_dest_CID                 	0x02e9
+#define	mem_rfcomm_malloc_fail_flag             	0x02eb
+#define	mem_message_to_uppersm                  	0x02ec
+#define	mem_upper_sm_remote_page                	0x02ed
+#define	mem_upper_sm_reconn                     	0x02ee
+#define	mem_upper_sm_ss                         	0x02ef
+#define	mem_tx_malloc_log                       	0x02f0
+#define	mem_l2cap_mem_end                       	0x0330
+#define	mem_scid                                	0x0330
+#define	mem_cmd_length                          	0x0332
+#define	mem_tt2                                 	0x0334
+#define	mem_tt3                                 	0x0336
+#define	mem_id                                  	0x0338
+#define	mem_psm                                 	0x033a
+#define	mem_l2cap_sdpres_delay_time             	0x033c
+#define	mem_le_rxbuf                            	0x0340
+#define	mem_le_mic                              	0x0378
+#define	mem_le_peer_mic                         	0x037c
+#define	mem_le_skdm                             	0x0380
+#define	mem_le_skds                             	0x0388
+#define	mem_le_peer_ltk                         	0x0390
+#define	mem_le_my_ltk                           	0x03a0
+#define	mem_le_mrand                            	0x03b0
+#define	mem_le_state                            	0x03c0
+#define	mem_le_mode                             	0x03c1
+#define	mem_le_tsniff                           	0x03c2
+#define	mem_le_anchor                           	0x03c4
+#define	mem_le_clk_offset                       	0x03c8
+#define	mem_le_receive_window                   	0x03ce
+#define	mem_le_plap                             	0x03d0
+#define	mem_le_conn_handle                      	0x03d6
+#define	mem_le_arq                              	0x03d7
+#define	mem_le_ch                               	0x03d8
+#define	mem_le_hop                              	0x03d9
+#define	mem_le_event_count                      	0x03da
+#define	mem_le_supervision_timer                	0x03dc
+#define	mem_le_instant                          	0x03e0
+#define	mem_le_channels                         	0x03e2
+#define	mem_le_conn_sm                          	0x03e3
+#define	mem_le_op                               	0x03e4
+#define	mem_le_access                           	0x03e5
+#define	mem_le_crcinit                          	0x03e9
+#define	mem_le_window_size                      	0x03ec
+#define	mem_le_slave_latency                    	0x03ed
+#define	mem_le_superto                          	0x03ef
+#define	mem_le_channel_map                      	0x03f1
+#define	mem_le_no_using                         	0x03f6
+#define	mem_le_peer_sca                         	0x03f8
+#define	mem_le_att_opcode                       	0x03f9
+#define	mem_le_att_handle                       	0x03fa
+#define	mem_le_err_code                         	0x03fc
+#define	mem_le_sk                               	0x03fd
+#define	mem_le_testtype                         	0x040d
+#define	mem_le_test_sync                        	0x040e
+#define	mem_le_test_pcnt                        	0x0410
+#define	mem_le_rxon_ts                          	0x0412
+#define	mem_le_rx_ll_opcode                     	0x0418
+#define	mem_le_notify_attr_start                	0x0419
+#define	mem_le_notify_len                       	0x041b
+#define	mem_cmd_le_create_conn                  	0x041c
+#define	mem_le_adv_temp                         	0x041d
+#define	mem_24g_id                              	0x0431
+#define	mem_lmo_header_length                   	0x0432
+#define	mem_lmo_header_opcode                   	0x0433
+#define	mem_lmo_payload                         	0x0434
+#define	mem_lmi_accepted_opcode                 	0x0445
+#define	mem_disconn_reason_send                 	0x0446
+#define	mem_tx_fixed_freq                       	0x0447
+#define	mem_rx_fixed_freq                       	0x0448
+#define	mem_ext_features_page                   	0x0449
+#define	mem_lmpext_ssp_enable                   	0x044a
+#define	mem_remote_sppcap                       	0x044c
+#define	mem_lmp_conn_state                      	0x044d
+#define	mem_soft_timer                          	0x044e
+#define	mem_pincode_state                       	0x0450
+#define	mem_sres_tid                            	0x0451
+#define	mem_accptsco_tid                        	0x0452
+#define	mem_auth_enable                         	0x0453
+#define	mem_wait_encryption                     	0x0454
+#define	mem_sniff_payload                       	0x0455
+#define	mem_aurand_send_delay_time              	0x0465
+#define	mem_module_temp_len                     	0x0469
+#define	mem_init_cnt                            	0x046b
+#define	mem_prcp_data                           	0x046d
+#define	mem_prcp                                	0x0481
+#define	mem_prcp_tx_len                         	0x0482
+#define	rx_buf_data_ptr                         	0x0483
+#define	memRemoteRPNBitRate                     	0x0485
+#define	memRemotePRNDataBits                    	0x0486
+#define	memRemotePRNStopBit                     	0x0487
+#define	memRemotePRNParity                      	0x0488
+#define	memRemotePRNFlowControl                 	0x0489
+#define	memRemotePRNXon                         	0x048a
+#define	memRemotePRNXoff                        	0x048b
+#define	mem_mod2div_temp                        	0x048c
+#define	mem_contw_temp                          	0x048f
+#define	mem_attrib_list                         	0x0491
+#define	mem_current_adss                        	0x0493
+#define	mem_current_channel                     	0x0494
+#define	mem_current_frame_type                  	0x0495
+#define	mem_current_fcs                         	0x0496
+#define	mem_current_length                      	0x0497
+#define	mem_rfcomm_uih_payload_ptr              	0x0499
+#define	mem_uih_cmd_type                        	0x049b
+#define	mem_uih_length                          	0x049c
+#define	mem_param_payload_ptr                   	0x049e
+#define	mem_ms_param                            	0x04a0
+#define	mem_pn_credit_flow_type_info            	0x04a1
+#define	mem_pn_priority                         	0x04a2
+#define	mem_pn_acknowledg_timer                 	0x04a3
+#define	mem_pn_max_retrans                      	0x04a4
+#define	mem_rfcomm_send_adss                    	0x04a5
+#define	mem_rfcomm_send_frame_type              	0x04a6
+#define	mem_rfcomm_send_fcs                     	0x04a7
+#define	mem_rfcomm_send_offset                  	0x04a8
+#define	mem_sdp_mem_start                       	0x04a9
+#define	mem_uuid_search_pat                     	0x04a9
+#define	mem_sdp_continue_byte                   	0x04ad
+#define	mem_sdp_pduid                           	0x04af
+#define	mem_sdp_transactionid                   	0x04b0
+#define	mem_sdp_attribute_maxbyte               	0x04b2
+#define	mem_sdp_record_maxcnt                   	0x04b4
+#define	mem_sdp_error_code                      	0x04b6
+#define	mem_sdp_record_handle                   	0x04be
+#define	mem_sdp_search_failed                   	0x04c2
+#define	mem_sdp_LACAP_found                     	0x04c3
+#define	mem_sdp_RFCOMM_found                    	0x04c4
+#define	mem_handle_list                         	0x04c5
+#define	mem_handle_humber                       	0x04dd
+#define	mem_sdp_mem_end                         	0x04de
+#define	mem_rxbuf                               	0x04de
+#define	mem_random_number                       	0x04ef
+#define	mem_round_key                           	0x04ff
+#define	mem_kinit                               	0x050f
+#define	mem_input_store                         	0x051f
+#define	mem_x                                   	0x052f
+#define	mem_y                                   	0x053f
+#define	mem_y15                                 	0x054e
+#define	mem_pin_length                          	0x054f
+#define	mem_pin                                 	0x0550
+#define	mem_key_store                           	0x0560
+#define	mem_key_store_end                       	0x0571
+#define	memp_ar_key                             	0x0572
+#define	memp_ar_input                           	0x0574
+#define	mem_ar_hround                           	0x0576
+#define	mem_ec_infinite                         	0x0580
+#define	mem_ec_loopc                            	0x0581
+#define	memdat                                  	0x0582
+#define	mem_ax                                  	0x0582
+#define	mem_ay                                  	0x059a
+#define	mem_az                                  	0x05b2
+#define	mem_bx                                  	0x05ca
+#define	mem_by                                  	0x05e2
+#define	mem_bz                                  	0x05fa
+#define	mem_cx                                  	0x0612
+#define	mem_cy                                  	0x062a
+#define	mem_cy5                                 	0x0641
+#define	mem_cz                                  	0x0642
+#define	mem_k                                   	0x065a
+#define	mem_align                               	0x0672
+#define	mem_tmp1                                	0x0682
+#define	memahbak                                	0x0682
+#define	mem_tmp5                                	0x069a
+#define	memahsave                               	0x06a2
+#define	mem_tmp2                                	0x06b2
+#define	memahsave_end                           	0x06c2
+#define	mem_addr_padding                        	0x06c2
+#define	mem_addr_value                          	0x06c3
+#define	mem_tmp3                                	0x06ca
+#define	mem_t1                                  	0x06ca
+#define	mem_addr_value_end                      	0x06cf
+#define	mem_addr_iocap_end                      	0x06d2
+#define	mem_tmp0                                	0x06e2
+#define	mem_t0                                  	0x06e2
+#define	mem_tmp0a                               	0x06ea
+#define	mem_t2                                  	0x06fa
+#define	mem_t3                                  	0x0712
+#define	mem_t7                                  	0x072a
+#define	mem_p                                   	0x0742
+#define	mem_a                                   	0x075a
+#define	mem_b                                   	0x0772
+#define	mem_gx                                  	0x078a
+#define	mem_gy                                  	0x07a2
+#define	memh0                                   	0x07ba
+#define	mem_sp_state_start                      	0x07da
+#define	mem_sp_state                            	0x07da
+#define	mem_master_sp_state                     	0x07db
+#define	mem_sp_flag                             	0x07dc
+#define	mem_master_sp_flag                      	0x07dd
+#define	mem_sp_calc                             	0x07de
+#define	mem_sp_dh_ready                         	0x07df
+#define	mem_sp_localsm                          	0x07e0
+#define	mem_pairing_auth                        	0x07e1
+#define	mem_sp_flag_start                       	0x07e2
+#define	mem_sp_local_key_send_count             	0x07e2
+#define	mem_sp_remote_key_recv_count            	0x07e3
+#define	mem_sp_remote_key_invalid               	0x07e4
+#define	mem_sp_dhkey_invalid                    	0x07e5
+#define	mem_sp_iocap_local                      	0x07e6
+#define	mem_sp_iocap_remote                     	0x07e9
+#define	mem_sp_gkey                             	0x07ec
+#define	mem_sp_pubkey_remote                    	0x07f0
+#define	mem_sp_pubkey_remote_x                  	0x07f0
+#define	mem_sp_pubkey_remote_x_end              	0x0808
+#define	mem_sp_pubkey_remote_y                  	0x0808
+#define	mem_sp_dhkey                            	0x0820
+#define	mem_sp_dhkey_end                        	0x0838
+#define	mem_sp_random_local                     	0x0838
+#define	mem_sp_random_local_end                 	0x0848
+#define	mem_sp_random_remote                    	0x0848
+#define	mem_sp_random_remote_end                	0x0858
+#define	memresult                               	0x0858
+#define	mem_sp_calc_result                      	0x0858
+#define	memh                                    	0x0858
+#define	memg                                    	0x085c
+#define	memf                                    	0x0860
+#define	meme                                    	0x0864
+#define	mem_sp_calc_result_high                 	0x0868
+#define	memd                                    	0x0868
+#define	memc                                    	0x086c
+#define	memb                                    	0x0870
+#define	mema                                    	0x0874
+#define	mem_sp_check_result                     	0x0878
+#define	mem_sp_confirm_remote                   	0x0888
+#define	mem_sp_prarm_stack                      	0x0898
+#define	mem_UI_data_txbuff_length               	0x08a8
+#define	mem_ipc_skip_continue_proc              	0x08aa
+#define	mem_ui_timer_temp                       	0x08ab
+#define	mem_ipc_rega_temp                       	0x08ab
+#define	mem_usb_status                          	0x08af
+#define	mem_usb_fifo_empty                      	0x08b0
+#define	mem_usb_read_len                        	0x08b1
+#define	mem_usb_rxbuf                           	0x08b2
+#define	mem_usb_cnt                             	0x08f2
+#define	mem_usb_tx_enable                       	0x08f4
+#define	mem_usb_tx_count                        	0x08f5
+#define	mem_usb_set_protocol_count              	0x08f6
+#define	mem_usb_desc                            	0x08f7
+#define	mem_usb_state                           	0x08f8
+#define	mem_usb_idle_cnt                        	0x08f9
+#define	mem_usb_idle_timeout                    	0x08fb
+#define	mem_usb_trig_timeout                    	0x08fd
+#define	mem_usb_setup                           	0x08ff
+#define	mem_usb_setup_bmRequestType             	0x08ff
+#define	mem_usb_setup_bRequest                  	0x0900
+#define	mem_usb_setup_bValue                    	0x0901
+#define	mem_usb_setup_bValueH                   	0x0902
+#define	mem_usb_setup_wIndex                    	0x0903
+#define	mem_usb_setup_bLength                   	0x0905
+#define	mem_usb_setup_bLengthH                  	0x0906
+#define	mem_usb0_setup                          	0x0907
+#define	mem_bufptr                              	0x090f
+#define	mem_remain                              	0x0911
+#define	mem_devicedesc                          	0x0912
+#define	mem_hidreportdesc_kb                    	0x0926
+#define	mem_hidreportdesc_m                     	0x09ee
+#define	mem_confdesc                            	0x0ab6
+#define	mem_string0                             	0x0b1a
+#define	mem_string1                             	0x0b1f
+#define	mem_string2                             	0x0b3d
+#define	mem_string3                             	0x0b5b
+#define	mem_hold_contr                          	0x0b79
+#define	mem_hold_contw                          	0x0b7b
+#define	mem_fifo_temp                           	0x0b7d
+#define	mem_c51_flag                            	0x0b7e
+#define	mem_c51_lmp_lock                        	0x0b7f
+#define	mem_wakup_from_power_flag               	0x0b80
+#define	mem_lmp_bb_disconnect_reason            	0x0b81
+#define	mem_patch00                             	0x4000
+#define	mem_patch01                             	0x4001
+#define	mem_patch02                             	0x4002
+#define	mem_patch03                             	0x4003
+#define	mem_patch04                             	0x4004
+#define	mem_patch05                             	0x4005
+#define	mem_patch06                             	0x4006
+#define	mem_patch07                             	0x4007
+#define	mem_patch08                             	0x4008
+#define	mem_patch09                             	0x4009
+#define	mem_patch0a                             	0x400a
+#define	mem_patch0b                             	0x400b
+#define	mem_patch0c                             	0x400c
+#define	mem_patch0d                             	0x400d
+#define	mem_patch0e                             	0x400e
+#define	mem_patch0f                             	0x400f
+#define	mem_patch10                             	0x4010
+#define	mem_patch11                             	0x4011
+#define	mem_patch12                             	0x4012
+#define	mem_patch13                             	0x4013
+#define	mem_patch14                             	0x4014
+#define	mem_patch15                             	0x4015
+#define	mem_patch16                             	0x4016
+#define	mem_patch17                             	0x4017
+#define	mem_patch18                             	0x4018
+#define	mem_patch19                             	0x4019
+#define	mem_patch1a                             	0x401a
+#define	mem_patch1b                             	0x401b
+#define	mem_patch1c                             	0x401c
+#define	mem_patch1d                             	0x401d
+#define	mem_patch1e                             	0x401e
+#define	mem_patch1f                             	0x401f
+#define	mem_patch20                             	0x4020
+#define	mem_patch21                             	0x4021
+#define	mem_patch22                             	0x4022
+#define	mem_patch23                             	0x4023
+#define	mem_patch24                             	0x4024
+#define	mem_patch25                             	0x4025
+#define	mem_patch26                             	0x4026
+#define	mem_patch27                             	0x4027
+#define	mem_patch28                             	0x4028
+#define	mem_patch29                             	0x4029
+#define	mem_patch2a                             	0x402a
+#define	mem_patch2b                             	0x402b
+#define	mem_patch2c                             	0x402c
+#define	mem_patch2d                             	0x402d
+#define	mem_patch2e                             	0x402e
+#define	mem_patch2f                             	0x402f
+#define	mem_patch30                             	0x4030
+#define	mem_patch31                             	0x4031
+#define	mem_patch32                             	0x4032
+#define	mem_patch33                             	0x4033
+#define	mem_patch34                             	0x4034
+#define	mem_patch35                             	0x4035
+#define	mem_patch36                             	0x4036
+#define	mem_patch37                             	0x4037
+#define	mem_patch38                             	0x4038
+#define	mem_patch39                             	0x4039
+#define	mem_patch3a                             	0x403a
+#define	mem_patch3b                             	0x403b
+#define	mem_patch3c                             	0x403c
+#define	mem_patch3d                             	0x403d
+#define	mem_patch3e                             	0x403e
+#define	mem_patch3f                             	0x403f
+#define	mem_context                             	0x4040
+#define	mem_current_amaddr                      	0x4130
+#define	mem_lpm_mode                            	0x4131
+#define	mem_device_option                       	0x4132
+#define	mem_scan_mode                           	0x4133
+#define	mem_last_clkn                           	0x4134
+#define	mem_features                            	0x4138
+#define	mem_lap                                 	0x4140
+#define	mem_uap                                 	0x4143
+#define	mem_nap                                 	0x4144
+#define	mem_npage                               	0x4146
+#define	mem_glap                                	0x4147
+#define	mem_class                               	0x414a
+#define	mem_iscan_window                        	0x414d
+#define	mem_iscan_interval                      	0x414f
+#define	mem_pscan_window                        	0x4151
+#define	mem_pscan_interval                      	0x4153
+#define	mem_page_interval                       	0x4155
+#define	mem_page_window                         	0x4157
+#define	mem_page_to                             	0x4159
+#define	mem_inq_window                          	0x415b
+#define	mem_fcomp_mul                           	0x415d
+#define	mem_fcomp_div                           	0x415e
+#define	mem_rx_window_init                      	0x415f
+#define	mem_rx_window_sniff                     	0x4161
+#define	mem_rf_init_ptr                         	0x4163
+#define	mem_last_type                           	0x4165
+#define	mem_last_type_esco                      	0x4166
+#define	mem_last_type_saved                     	0x4167
+#define	mem_retransmission_cnt                  	0x4168
+#define	mem_next_btclk                          	0x416a
+#define	mem_seqi                                	0x416e
+#define	mem_rf_rccal                            	0x416f
+#define	mem_handle_num                          	0x4170
+#define	mem_max_slot                            	0x4171
+#define	mem_eir_enable                          	0x4172
+#define	mem_afh_instant                         	0x4173
+#define	mem_afh_error_total                     	0x4177
+#define	mem_afh_cfg                             	0x4179
+#define	mem_afh_new_mod                         	0x417a
+#define	mem_afh_map_lo                          	0x417b
+#define	mem_afh_map_hi                          	0x4180
+#define	mem_afh_used                            	0x4185
+#define	mem_afh_index                           	0x4186
+#define	mem_afh_map_new                         	0x4188
+#define	mem_afh_map                             	0x4193
+#define	mem_afh_timer                           	0x41e3
+#define	mem_afh_classify_channel_map            	0x41e7
+#define	mem_chip_functions                      	0x41f1
+#define	mem_lpm_wake_lock                       	0x41f3
+#define	mem_lpm_interval                        	0x41f5
+#define	mem_lpm_overhead                        	0x41f7
+#define	mem_lpm_hibernate_switch                	0x41f8
+#define	mem_esco_addr                           	0x41f9
+#define	mem_sniff_unint_lost                    	0x41fa
+#define	mem_ptt                                 	0x41fb
+#define	mem_sleep_counter                       	0x41fc
+#define	mem_sleep_counter_all                   	0x4200
+#define	mem_sleep_clkn                          	0x4204
+#define	mem_sniff_rcv                           	0x420a
+#define	mem_sniff_lost                          	0x420d
+#define	mem_clks_per_lpo                        	0x4210
+#define	mem_lpm_mult                            	0x4213
+#define	mem_lpm_mult_timeout                    	0x4214
+#define	mem_lpm_mult_cnt                        	0x4215
+#define	mem_lpm_config                          	0x4216
+#define	mem_lpm_xtalcnt                         	0x4219
+#define	mem_lpm_buckcnt                         	0x421a
+#define	mem_lpm_ldocnt                          	0x421b
+#define	mem_lpm_isogate                         	0x421c
+#define	mem_lpm_isogate_final                   	0x421d
+#define	mem_saved_gpio                          	0x421e
+#define	mem_saved_gsel                          	0x422e
+#define	mem_saved_mark                          	0x4231
+#define	mem_saved_spidctrl                      	0x4239
+#define	mem_patch_ptr                           	0x423a
+#define	mem_patch_len                           	0x423c
+#define	mem_timers                              	0x423e
+#define	mem_link_key_exists                     	0x425e
+#define	mem_link_key_eeprom_head                	0x425f
+#define	mem_link_key                            	0x4262
+#define	mem_hci_cmd                             	0x4272
+#define	mem_hci_conn_handle                     	0x4273
+#define	mem_hci_plap                            	0x4274
+#define	mem_hci_puap                            	0x4277
+#define	mem_hci_pnap                            	0x4278
+#define	mem_uartd_rxitems_got_data              	0x427a
+#define	mem_uartd_rxitems_threshold             	0x427b
+#define	mem_uartd_rx_timeout                    	0x427c
+#define	mem_app_state                           	0x427e
+#define	mem_app_handshake_flag                  	0x427f
+#define	mem_sniff_param_interval                	0x4280
+#define	mem_sniff_param_attempt                 	0x4282
+#define	mem_sniff_param_timeout                 	0x4284
+#define	mem_cb_check_wakelock                   	0x4286
+#define	mem_cb_before_hibernate                 	0x4288
+#define	mem_cb_before_lpm                       	0x428a
+#define	mem_cb_le_process                       	0x428c
+#define	mem_cb_bt_process                       	0x428e
+#define	mem_cb_idle_process                     	0x4290
+#define	mem_cb_bb_event_process                 	0x4292
+#define	mem_cb_discovry_timeout                 	0x4294
+#define	mem_cb_att_write                        	0x4296
+#define	mem_cb_update_notify_value              	0x4298
+#define	mem_device_nums                         	0x429a
+#define	mem_eeprom_base                         	0x429b
+#define	mem_unsniff2sniff_timer_count           	0x429d
+#define	mem_wake_up_delay_timer                 	0x429e
+#define	mem_app_connection_options              	0x429f
+#define	mem_app_disconn_reason                  	0x42a0
+#define	mem_app_disconn_reason_flag             	0x42a2
+#define	mem_at_using_flag                       	0x42a4
+#define	mem_lpm_delay_after_sniff               	0x42a5
+#define	mem_xrecord_mode                        	0x42a9
+#define	mem_eeprom_block_size                   	0x42aa
+#define	mem_baud                                	0x42ac
+#define	mem_hci_lt_rx_state                     	0x42ae
+#define	mem_l2cap_xmem_start                    	0x42af
+#define	mem_l2cap_tx_multi_offset               	0x42af
+#define	mem_sdp_remote_cid                      	0x42b1
+#define	mem_rfcomm_remote_cid                   	0x42b3
+#define	mem_hid_ctrl_remote_cid                 	0x42b5
+#define	mem_hid_int_remote_cid                  	0x42b7
+#define	mem_sdp_state                           	0x42b9
+#define	mem_rfcomm_state                        	0x42ba
+#define	mem_hid_control_state                   	0x42bb
+#define	mem_hid_interrupt_state                 	0x42bc
+#define	mem_spp_state                           	0x42bd
+#define	mem_ML2CAP_comm_id                      	0x42be
+#define	mem_used_map                            	0x42bf
+#define	mem_tx_fifo0                            	0x42c0
+#define	mem_tx_fifo0_map                        	0x42c0
+#define	mem_tx_fifo0_ptr                        	0x42c1
+#define	mem_tx_fifo1                            	0x42c3
+#define	mem_tx_fifo1_map                        	0x42c3
+#define	mem_tx_fifo1_ptr                        	0x42c4
+#define	mem_tx_fifo2                            	0x42c6
+#define	mem_tx_fifo2_map                        	0x42c6
+#define	mem_tx_fifo2_ptr                        	0x42c7
+#define	mem_tx_fifo3                            	0x42c9
+#define	mem_tx_fifo3_map                        	0x42c9
+#define	mem_tx_fifo3_ptr                        	0x42ca
+#define	mem_tx_fifo_end                         	0x42cc
+#define	mem_l2cap_lpm_txbuf                     	0x42cc
+#define	mem_l2cap_flow_ctrl_flag                	0x43cc
+#define	mem_l2cap_pending_item                  	0x43cd
+#define	mem_l2cap_xmem_end                      	0x43ce
+#define	mem_le_dsniff                           	0x43ce
+#define	mem_le_conn_interval                    	0x43d0
+#define	mem_le_scan_enable                      	0x43d2
+#define	mem_le_scan_interval                    	0x43d3
+#define	mem_le_scan_window                      	0x43d5
+#define	mem_le_adv_led                          	0x43d7
+#define	mem_le_adv_enable                       	0x43d8
+#define	mem_le_adv_data_len                     	0x43d9
+#define	mem_le_adv_data                         	0x43da
+#define	mem_le_scan_data_len                    	0x43f9
+#define	mem_le_scan_data                        	0x43fa
+#define	mem_le_name_len                         	0x4419
+#define	mem_le_name                             	0x441a
+#define	mem_le_led_on_time                      	0x442e
+#define	mem_le_new_map                          	0x442f
+#define	mem_le_new_param                        	0x4434
+#define	mem_le_new_window                       	0x4434
+#define	mem_le_new_offset                       	0x4435
+#define	mem_le_new_interval                     	0x4437
+#define	mem_le_new_latency                      	0x4439
+#define	mem_le_new_timeout                      	0x443b
+#define	mem_le_temp                             	0x443d
+#define	mem_le_txheader                         	0x443e
+#define	mem_le_txlen                            	0x443f
+#define	mem_le_txpayload                        	0x4440
+#define	mem_le_txcid                            	0x4442
+#define	mem_le_l2cap                            	0x4444
+#define	mem_le_l2cap_response                   	0x4445
+#define	mem_le_txbdy                            	0x4446
+#define	mem_le_pcnt_tx                          	0x4465
+#define	mem_le_pcnt_rx                          	0x446a
+#define	mem_le_last_mic                         	0x446f
+#define	mem_le_ivm                              	0x4473
+#define	mem_le_ivs                              	0x4477
+#define	mem_le_ltk                              	0x447b
+#define	mem_ltk_exists                          	0x448b
+#define	mem_le_rconfirm                         	0x448c
+#define	mem_le_srand                            	0x449c
+#define	mem_le_iat                              	0x44ac
+#define	mem_le_rat                              	0x44ad
+#define	mem_le_preq                             	0x44ae
+#define	mem_le_pres                             	0x44b5
+#define	mem_le_search_handle_start              	0x44bc
+#define	mem_le_search_handle_end                	0x44be
+#define	mem_le_att_offset                       	0x44c0
+#define	mem_le_search_att_type                  	0x44c0
+#define	mem_le_notify_handle                    	0x44c2
+#define	mem_le_uuid                             	0x44c4
+#define	mem_le_handle_data_len                  	0x44c6
+#define	mem_le_handle_data                      	0x44c7
+#define	mem_le_adv_param                        	0x44d7
+#define	mem_le_adv_interval_min                 	0x44d7
+#define	mem_le_adv_interval_max                 	0x44d9
+#define	mem_le_adv_type                         	0x44db
+#define	mem_le_adv_own_addr_type                	0x44dc
+#define	mem_le_adv_direct_addr_type             	0x44dd
+#define	mem_le_adv_direct_addr                  	0x44de
+#define	mem_le_adv_channel_map                  	0x44e4
+#define	mem_le_adv_filter_policy                	0x44e5
+#define	mem_le_conn_param                       	0x44e6
+#define	mem_le_conn_peer_addr_type              	0x44e6
+#define	mem_le_conn_peer_addr                   	0x44e7
+#define	mem_le_conn_own_addr_type               	0x44ed
+#define	mem_le_conn_interval_min                	0x44ee
+#define	mem_le_conn_interval_max                	0x44f0
+#define	mem_le_conn_latency                     	0x44f2
+#define	mem_le_conn_superto                     	0x44f4
+#define	mem_le_scan_params                      	0x44f6
+#define	mem_le_scan_type                        	0x44f6
+#define	mem_le_scan_own_addr_type               	0x44f7
+#define	mem_le_scan_filter_policy               	0x44f8
+#define	mem_le_lap                              	0x44f9
+#define	mem_le_uap                              	0x44fc
+#define	mem_le_nap                              	0x44fd
+#define	mem_le_xtype_fifo                       	0x44ff
+#define	mem_le_att_list                         	0x4504
+#define	mem_le_switch_send_data                 	0x46f8
+#define	mem_le_transmit_window                  	0x46f9
+#define	mem_lmp_version                         	0x46fd
+#define	mem_lmp_subversion                      	0x4700
+#define	mem_local_name_length                   	0x4702
+#define	mem_local_name                          	0x4703
+#define	mem_local_name2                         	0x4706
+#define	mem_local_name_end                      	0x4746
+#define	mem_unsniff2sniff_timer                 	0x4747
+#define	mem_switch_flag                         	0x4748
+#define	mem_eeprom_ota_base_addr                	0x4749
+#define	mem_pn_dlci                             	0x474b
+#define	mem_pn_max_frame_size                   	0x474c
+#define	memFCStemp1                             	0x474e
+#define	memFCStemp2                             	0x474f
+#define	memFCStemp3                             	0x4750
+#define	mem_rfcomm_initiator                    	0x4751
+#define	mem_remote_spp_channel                  	0x4752
+#define	mem_HIUfcs_SPP                          	0x4753
+#define	mem_HIUfcs_SPP_WCredits                 	0x4754
+#define	mem_rfcomm_send_more_pkt                	0x4755
+#define	mem_remote_credits                      	0x4756
+#define	mem_credit_given                        	0x4757
+#define	mem_ms_channel                          	0x4758
+#define	memui_uuid_table                        	0x4759
+#define	mem_all_uuid_16bits                     	0x475b
+#define	mem_all_uuid_128bits                    	0x4771
+#define	mem_sp_local_key_invalid                	0x4793
+#define	mem_sp_private_key                      	0x4794
+#define	mem_sp_pubkey_local                     	0x47ac
+#define	mem_sp_pubkey_local_x                   	0x47ac
+#define	mem_sp_pubkey_local_x_end               	0x47c4
+#define	mem_sp_pubkey_local_y                   	0x47c4
+#define	mem_ssp_enable                          	0x47dc
+#define	mem_ipc_lock_bt                         	0x47dd
+#define	mem_ipc_lock_c51                        	0x47de
+#define	mem_ipc_fifo_bt2c51                     	0x47df
+#define	mem_ipc_fifo_c512bt                     	0x47e4
+#define	mem_led_switch                          	0x47e9
+#define	mem_ui_button_timer                     	0x47ea
+#define	mem_ui_button_last_state                	0x47eb
+#define	mem_ui_timer_last_btclk                 	0x47ec
+#define	mem_discovery_timeout_timer_count       	0x47f0
+#define	mem_hid_handshake_timer_count           	0x47f2
+#define	memui_reconnect_mode                    	0x47f3
+#define	mem_ui_state_map                        	0x47f4
+#define	mem_ui_profile_supported                	0x47f6
+#define	mem_led_gpio                            	0x47f7
+#define	mem_led_dark_time                       	0x47f8
+#define	mem_led_light_time                      	0x47fa
+#define	mem_ui_button_timeout                   	0x47fc
+#define	mem_ui_button_gpio                      	0x47fd
+#define	mem_discovery_timeout                   	0x47fe
+#define	mem_ir_ptr                              	0x4800
+#define	mem_ir_type                             	0x4802
+#define	mem_ir_cmd                              	0x4803
+#define	mem_ir_play_count                       	0x4804
+#define	mem_ir_report_len                       	0x4805
+#define	mem_ir_pulse_zero                       	0x4807
+#define	mem_ir_pulse_one                        	0x4808
+#define	mem_ir_pulses                           	0x4809
+#define	mem_ir_sequence_len                     	0x4825
+#define	mem_ir_sequence                         	0x4826
+#define	mem_acl_credits                         	0x4800
+#define	mem_allow_switch                        	0x4802
+#define	mem_hci_acl_queue_start                 	0x4803
+#define	mem_hci_wake_clk                        	0x4807
+#define	mem_kb_state                            	0x4800
+#define	mem_kb_report_data                      	0x4802
+#define	mem_kb_keys                             	0x4808
+#define	mem_kb_rcv_led_data                     	0x4809
+#define	mem_kb_fast_wake_last                   	0x480a
+#define	mem_led_cap_gpio                        	0x480e
+#define	mem_led_num_gpio                        	0x480f
+#define	mem_led_scl_gpio                        	0x4810
+#define	mem_kb_map                              	0x4811
+#define	mem_keyboard_uuid_list                  	0x48af
+#define	mem_at_gpio                             	0x4800
+#define	mem_module_wake_up_gpio                 	0x4801
+#define	mem_module_state_gpio                   	0x4802
+#define	mem_module_connect_state_gpio           	0x4803
+#define	mem_module_version                      	0x4804
+#define	mem_last_uart_clock                     	0x480a
+#define	mem_current_packet_length               	0x480e
+#define	mem_module_prepare_tx_len               	0x4810
+#define	mem_module_state                        	0x4812
+#define	mem_module_task                         	0x4813
+#define	mem_cmode_addr                          	0x4814
+#define	mem_at_scan_time                        	0x481a
+#define	mem_prarm_pswd                          	0x481c
+#define	mem_prarm_uart                          	0x4820
+#define	mem_prarm_blename                       	0x4824
+#define	mem_prarm_name                          	0x4827
+#define	mem_prarm_bleadss                       	0x482b
+#define	mem_prarm_adss                          	0x482e
+#define	mem_prarm_vers                          	0x4832
+#define	mem_prarm_class                         	0x4836
+#define	mem_prarm_clrflg                        	0x483b
+#define	mem_prarm_reconn                        	0x4841
+#define	mem_prarm_bledis                        	0x4847
+#define	mem_prarm_dis                           	0x4849
+#define	mem_prarm_stsn                          	0x484c
+#define	mem_prarm_atp                           	0x4850
+#define	mem_prarm_list                          	0x4853
+#define	mem_prarm_role                          	0x4857
+#define	mem_prarm_sniff                         	0x485b
+#define	mem_prarm_ldev                          	0x4860
+#define	mem_prarm_rssi                          	0x4864
+#define	mem_prarm_cdev                          	0x4868
+#define	mem_prarm_bleinqr                       	0x486c
+#define	mem_prarm_inqr                          	0x486f
+#define	mem_prarm_cmode                         	0x4873
+#define	mem_prarm_mode                          	0x4878
+#define	mem_prarm_dmstate                       	0x487c
+#define	mem_prarm_discov                        	0x4883
+#define	mem_prarm_ota                           	0x4889
+#define	mem_prarm_bleconn                       	0x488c
+#define	mem_prarm_conn                          	0x488e
+#define	mem_prarm_pageout                       	0x4892
+#define	mem_prarm_recfail                       	0x4899
+#define	mem_module_uuid_list                    	0x48a0
+#define	mem_mouse_x                             	0x4800
+#define	mem_mouse_y                             	0x4802
+#define	mem_mouse_z                             	0x4804
+#define	mem_mouse_key                           	0x4805
+#define	mem_mouse_z_last                        	0x4806
+#define	mem_mouse_z_before                      	0x4807
+#define	mem_mouse_z_now                         	0x4808
+#define	mem_mouse_z_data                        	0x4809
+#define	mem_mouse_move_flag                     	0x480a
+#define	mem_reconnect_timeout                   	0x480b
+#define	mem_mouse_direct_timeout                	0x480c
+#define	mem_mouse_no_data_timeout               	0x480e
+#define	mem_mouse_blank_data_timeout            	0x4810
+#define	mem_mouse_discovery_timer               	0x4812
+#define	mem_mouse_direct_timer                  	0x4814
+#define	mem_mouse_no_data_timer                 	0x4816
+#define	mem_mouse_blank_data_timer              	0x4818
+#define	mem_mouse_send_blank_timer              	0x481a
+#define	mem_mouse_dpi                           	0x481b
+#define	mem_mouse_dpi_button_state              	0x481c
+#define	mem_mouse_test_cnt                      	0x481d
+#define	mem_le_hibernate_timer                  	0x481e
+#define	mem_mouse_mode_state                    	0x4820
+#define	mem_sensor_type                         	0x4821
+#define	mem_lbutton_gpio                        	0x4822
+#define	mem_rbutton_gpio                        	0x4823
+#define	mem_mbutton_gpio                        	0x4824
+#define	mem_dpi_button_gpio                     	0x4825
+#define	mem_sensor_data_gpio                    	0x4826
+#define	mem_whee_a_data_gpio                    	0x4827
+#define	mem_whee_b_data_gpio                    	0x4828
+#define	mem_conn_cnt                            	0x4829
+#define	mem_mouse_uuid_list                     	0x482a
+#define	mem_24g_paring_tx_power_param           	0x4ab4
+#define	mem_5db_tx_power_param                  	0x4abe
+#define	mem_mouse_tz                            	0x4ac8
+#define	mem_last_txlch                          	0x4ac9
+#define	mem_last_txlen                          	0x4aca
+#define	mem_last_txdata                         	0x4acc
+#define	mem_current_event                       	0x4ae0
+#define	mem_ipc_lock_rx_data_bt                 	0x4ae1
+#define	mem_ipc_lock_rx_data_c51                	0x4ae2
+#define	mem_ipc_lock_tx_data_bt                 	0x4ae3
+#define	mem_ipc_lock_tx_data_c51                	0x4ae4
+#define	mem_ipc_2bt_fifo_head                   	0x4ae5
+#define	mem_ipc_2bt_fifo_end                    	0x4bad
+#define	mem_ipc_2bt_read_index                  	0x4bad
+#define	mem_ipc_2bt_write_index                 	0x4baf
+#define	mem_ipc_2C51_fifo_head                  	0x4bb1
+#define	mem_ipc_2C51_fifo_end                   	0x4c79
+#define	mem_ipc_2C51_read_index                 	0x4c79
+#define	mem_ipc_2C51_write_index                	0x4c7b
+#define	mem_c51_private_area                    	0x4c7d
+#define	mem_ipc_tx_evt_buff                     	0x4ce1
+#define	mem_ipc_tx_evt                          	0x4ce3
+#define	mem_ipc_bt_timer                        	0x4ce4
+#define	mem_ipc_rx_type                         	0x4ce6
+#define	mem_rfcomm_tx_buff                      	0x4ce7
+#define	mem_24g_tx_btclk                        	0x4ce7
+#define	mem_24g_interval                        	0x4ceb
+#define	mem_24g_txcnt                           	0x4cec
+#define	mem_24g_txfail_cnt                      	0x4cef
+#define	mem_24g_attempt_cnt                     	0x4cf0
+#define	mem_24g_attempt_flag                    	0x4cf1
+#define	mem_24g_rxcnt                           	0x4cf2
+#define	mem_24g_rxfail_cnt                      	0x4cf5
+#define	mem_loss_rate                           	0x4cf8
+#define	mem_24g_retry                           	0x4cfa
+#define	mem_24g_pid                             	0x4cfb
+#define	mem_24g_datalen                         	0x4cfc
+#define	mem_24g_crc                             	0x4cfd
+#define	mem_24g_rxbuf                           	0x4cff
+#define	mem_24g_addr                            	0x4d3f
+#define	mem_24g_len                             	0x4d43
+#define	mem_24g_txpayload                       	0x4d45
+#define	mem_24g_txdata                          	0x4d4f
+#define	mem_24g_ch                              	0x4d55
+#define	mem_24g_sifs                            	0x4d56
+#define	mem_24g_state                           	0x4d57
+#define	mem_24g_scremble                        	0x4d58
+#define	mem_dongle_exit_flag                    	0x4d68
+#define	mem_24g_current_ch_number               	0x4d69
+#define	mem_24g_ch_count_down                   	0x4d6a
+#define	mem_24g_ch_map1                         	0x4d6b
+#define	mem_24g_ch_map2                         	0x4d6f
+#define	mem_24g_ch_map3                         	0x4d73
+#define	mem_24g_ch_map4                         	0x4d77
+#define	mem_24g_interval_min                    	0x4d7b
+#define	mem_24g_interval_max                    	0x4d7c
+#define	mem_24g_ensure                          	0x4d7d
+#define	mem_24g_enter_hibernate                 	0x4d7e
+#define	mem_24g_enter_lpm_timer                 	0x4d86
+#define	mem_led_cap_delay_timer                 	0x4d87
+#define	mem_senser_id2                          	0x4d87
+#define	mem_senser_id3                          	0x4d88
+#define	mem_rpn_dlci                            	0x4d89
+#define	mem_ipc_last_check_timer                	0x4d8a
+#define	mem_att_send_handle                     	0x4d8e
+#define	mem_att_send_option                     	0x4d90
+#define	mem_lell_cur_opcode                     	0x4d91
+#define	mem_prepare_write_len                   	0x4d92
+#define	mem_ipc_c51_timer                       	0x4d93
+#define	mem_prepare_write_offest                	0x4d93
+#define	mem_le51_payload_len                    	0x4d95
+#define	mem_le51_cmd                            	0x4d96
+#define	mem_le51_tx_length                      	0x4d97
+#define	mem_le51_txbuff_inuse                   	0x4d98
+#define	mem_24g_pairing_sm                      	0x4d99
+#define	mem_24g_addr_copy                       	0x4d9a
+#define	mem_ipc_bt_100ms_timer                  	0x4d9e
+#define	mem_ipc_c51_100ms_timer                 	0x4d9f
+#define	mem_adc_config_flag                     	0x4da0
+#define	mem_adc_channel                         	0x4da1
+#define	mem_adc_0v                              	0x4da2
+#define	mem_adc_3v                              	0x4da4
+#define	mem_adc_current_value                   	0x4da6
+#define	mem_kb_map_c51                          	0x4da8
+#define	mem_kb_ks_col                           	0x4e46
+#define	mem_hibernate_flag                      	0x4e5b
+#define	mem_new_supervision_to                  	0x4e5c
+#define	mem_shutter_send_data                   	0x4800
+#define	mem_shutter_key_temp                    	0x4804
+#define	mem_shutter_send_length                 	0x4805
+#define	mem_shutter_clkn_bt_last                	0x4806
+#define	mem_shutter_key                         	0x480a
+#define	mem_shutter_flag                        	0x480b
+#define	mem_shutter_cable_unplug_conut          	0x480c
+#define	mem_shutter_hid_disconn_count           	0x480d
+#define	mem_shutter_1key_send_sm                	0x480e
+#define	mem_shutter_iphonekey_gpio              	0x480f
+#define	mem_shutter_androidkey_gpio             	0x4810
+#define	mem_shutter_key_number                  	0x4811
+#define	mem_shutter_uuid_list                   	0x4812
+#define	mem_mcmd                                	0xff0
+#define	mem_mouse_data                          	0xff1
+#define	mem_l2cap_rxbuff1                       	0x1000
+#define	mem_l2cap_rxbuff2                       	0x1400
+#define	mem_tx_buff0                            	0x1800
+#define	mem_tx_buff1                            	0x1880
+#define	mem_tx_buff2                            	0x1900
+#define	mem_tx_buff3                            	0x1980
+#define	mem_tx_buff4                            	0x1a00
+#define	mem_tx_buff5                            	0x1a80
+#define	mem_tx_buff6                            	0x1b00
+#define	mem_tx_buff7                            	0x1b80
+#define	mem_h5rx_buf                            	0x1800
+#define	mem_h5rx_buf_end                        	0x1bff
+#define	mem_h5tx_buf                            	0x1c00
+#define	mem_h5tx_buf_end                        	0x1fff
+#define	mem_module_rx_buf                       	0x4a00
+#define	mem_module_rx_buf_end                   	0x4fff
+#define	mem_module_tx_buf                       	0x1c00
+#define	mem_module_tx_buf_end                   	0x1fff
+#define	mem_ir_record                           	0x1800
+#define	mem_ir_record_max                       	0x1c
+#define	memk                                    	0x4b00
+#endif
Index: c.bat
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/c.bat	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/c.bat	(working copy)
@@ -0,0 +1,29 @@
+
+
+perl util\hex2mif.pl < output\fw.hex ram > output\fwram.rom
+copy .\patch\patch.dat + .\patch\user.dat + .\patch\rf.dat .\patch\sch.rom 
+perl util\transform_name2addr.pl .\patch\sch.rom .\output\sched.rom .\patch\memmap.format
+copy .\patch\ramcode.rom .\output\
+copy .\patch\geneep.exe .\output\
+@rem copy .\patch\*.obj .\output\*.obj
+
+copy .\util\eeprom2fulleeprom.pl .\eeprom2fulleeprom.pl
+copy .\util\crc16.pl .\crc16.pl
+
+cd output
+geneep geneep ramcode.rom fwram.rom sched.rom
+
+
+
+copy eeprom.dat ..\eeprom.dat
+cd ..
+perl eeprom2fulleeprom.pl eeprom.dat 128>compare2.dat
+perl crc16.pl compare2.dat 2 >.\output\eeprom.dat
+del eeprom.dat
+del compare2.dat
+del eeprom2fulleeprom.pl
+del crc16.pl
+
+:end
+
+
Index: common.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/common.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/common.h	(working copy)
@@ -0,0 +1,9 @@
+#ifndef _YC_INCLUDE_H_
+#define _YC_INCLUDE_H_
+#include "type.h"
+#include "btreg.h"
+#include "hwreg.h"
+#include "sys.h"
+#include "utilities.h"
+#endif
+
Index: gpio.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/gpio.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/gpio.h	(working copy)
@@ -0,0 +1,76 @@
+
+#ifndef _GPIO_H
+#define _GPIO_H
+#include "type.h"
+#include "Hwreg.h"
+
+extern volatile u8_t xdata YC_GPIOWakeupL[4];
+extern volatile u8_t xdata YC_GPIOWakeupH[4];
+
+#define GPIO_SetBit(gpio_num,reg_base, bit_val) if(bit_val)  \
+		*(reg_base + (gpio_num >> 3 & 3)) |= 1<<(gpio_num & 7);	\
+	else	\
+		*(reg_base + (gpio_num >> 3 & 3)) &= ~(1<<(gpio_num & 7))
+
+/**
+ * This function gpio get input status.0 low,1high
+ * 
+ * @param gpio_num
+ * 
+ * @return none.
+*/
+bool GPIO_GetInputStatus(u8_t gpio_num);
+/**
+ * This function set gpio out.
+ * 
+ * @param gpio_num,bit_val bit_val 0 low, 1high
+ * 
+ * @return none.
+*/
+void GPIO_Setout(u8_t gpio_num, bool bit_val);
+/**
+ * This function set gpio input
+ * 
+ * @param gpio_num,st 1 pull down ,0 pull up.
+ * 
+ * @return none.
+*/
+void GPIO_SetInput(u8_t gpio_num,bit  st);
+
+/**
+ * This function set gpio input
+ * 
+ * @param gpio_num,st 1 high ,0 low.
+ * 
+ * @return none.
+*/
+void GPIO_SetOutput(u8_t gpio_num,bit  st);
+/**
+ * This function set gpio wake.This function must use with GPIO_SetInput.
+ * 
+ * @param gpio_num, st 1 high wake,0 low wake.
+ * 
+ * @return none.
+*/
+void GPIO_SetWakeup(u8_t gpio_num,bit  st);
+
+/**
+ * This function set gpio wake by curent state for fast wake mcu.
+ * 
+ * @param gpio_num, st 1 high wake,0 low wake.
+ * 
+ * @return none.
+*/
+void GPIO_SetWakeupByCurrentState(u8_t gpio_num);
+
+/**
+ * This function Flip output state.
+ * 
+ * @param gpio_num.
+ * 
+ * @return none.
+*/
+void GPIO_FlipOutBit(u8_t gpio_num);
+#endif /* YC_GPIO_H */
+
+
Index: hwreg.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/hwreg.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/hwreg.h	(working copy)
@@ -0,0 +1,214 @@
+#ifndef _HWREG_H_
+#define _HWREG_H_
+
+
+#define HWRITED(reg, dword)	do{HWRITE(reg, (dword) & 0xff); \
+							HWRITE(reg + 1, (dword) >> 8 & 0xff); \
+							HWRITE(reg + 2, (dword) >> 16 & 0xff); \
+							HWRITE(reg + 3, (dword) >> 24 & 0xff); \
+							}while(0)
+
+#define HREADD(reg)			((u32_t)HREAD(reg)  | (u32_t)HREAD(reg + 1) << 8 | (u32_t)HREAD(reg + 2) << 16 | (u32_t)HREAD(reg + 3) << 24)
+
+#define ESWAP(word)			((word) >> 8 & 0xff | (word) << 8 & 0xff00)
+#define min(x,y) 				((x) < (y) ? (x) : (y))
+#define HREADW(reg)			(*((volatile unsigned int xdata *)(reg)))
+#define HWRITEW(mem, word)	HREADW(mem) = ESWAP(word)
+#define HREADWS(reg)			ESWAP(HREADW(reg))
+
+#define HREAD(reg)			(*(volatile unsigned char xdata *)(reg))
+#define HWRITE(reg, value)		*((volatile unsigned char xdata *)(reg)) = value
+
+#define SETBIT(reg, value)		HWRITE(reg,( (HREAD(reg)) | (value)))
+#define CLRBIT(reg, value)		HWRITE(reg, (HREAD(reg) & (~(value))))
+#define READBIT(reg, value)		((HREAD(reg)) & (value))
+#define BIT(x)					(1 << (x))
+
+
+#define PWM_EN			0x8084
+
+#define GPIO_OE(X)      0x8070 + X
+#define GPIO_OUT(X)     0x8074 + X
+#define GPIO_PUP(X)     0x8078 + X
+#define GPIO_PDN(X)     0x807c + X
+#define GPIO_SEL(X)     0x8080 + X
+#define GPIO_KEY(X)     0x8083 + X
+
+#define GPIO_IN(X)      0x811c + X
+
+
+#define PWM_PCOUNT(X)	(0x80a0 + X*4)
+#define PWM_NCOUNT(X)	(0x80a2 + X*4)
+
+#define CLOCK_SEL			0x8044
+#define CLOCK_SEL_12M		9
+
+#define LPM_EXENOE		0x813e
+
+// math cordic
+#define CORDIC_TYPE    	0x8053
+#define CORDIC_A     		0x80a8
+#define CORDIC_B     		0x80ac
+#define PERF_STATUS		0x812d
+#define CORDIC_RESULT     	0x8120
+
+#define YC_TYPE_SIN		0
+#define YC_TYPE_ATAN	1
+#define YC_TYPE_MULT	2
+#define YC_TYPE_DIV		3
+#define YC_TYPE_ASIN	         4
+#define YC_TYPE_SQRT	5
+#define YC_TYPE_COS		6
+#define YC_TYPE_TAN		7
+
+// DMA UART
+#define UART_BAUD     0x8052
+#define UART_RSADDR   0x8054
+#define UART_READDR   0x8056 
+#define UART_RRPTR    0x8058
+#define UART_TSADDR   0x805a 
+#define UART_TEADDR   0x805c 
+#define UART_TWPTR    0x805e
+#define UART_TRPTRP   0x8060 
+#define UART_CTRL     0x8062 
+#define CLKN	0x8100
+
+#define UART_STATUS  0x810c
+#define UART_RBAUD   0x810d 
+#define UART_TXITEMS 0x810e 
+#define UART_TRPTR   0x8110 
+#define UART_RXITEMS 0x8112 
+#define UART_RDPTR   0x8114 
+#define UART_RWPTR   0x8116 
+
+#define KSCN_KSCTRL                 	0x8063
+#define KSCN_RCTC                    	0x8064
+#define KSCN_ROW_MASK                	0x806f
+
+#define KSCN_EVENT_BUF           	0x811a
+#define KSCN_EVENT_NUM           	0x811b
+
+
+#define  CPUB_ICE_CTRL (*(volatile unsigned char xdata *)(0x8280))
+
+#define CPUB_ICE_BK0_LO			0x8205
+#define CPUB_ICE_BK0_HI			0x8206
+
+#define IIC_ADDR_START		0x8300
+#define IIC_PRER_LOW			0x8300
+#define IIC_SLAVE_ADDR		0x8301
+#define IIC_CTR				0x8302
+#define IIC_CR				0x8303
+#define IIC_RXR				0x8304
+#define IIC_TXR				0x8305
+#define IIC_SR				0x8306
+#define IIC_FIFO				0x8307
+
+#define USB_CONFIG		0x8c00
+#define USB_INT_MASK(x)	(0x8c01 + x)
+#define USB_TRG			0x8c10
+#define USB_STALL		0x8c11
+#define USB_CLEAR		0x8c12
+#define USB_EP(x)			(0x8c18 + x)
+#define USB_EP_LEN(x)		(0x8c20 + x)
+
+
+#define USB_STATUS		0x8c26
+#define USB_FIFO_EMPTY	0x8c27
+
+sfr DFIFO0     = 0x94;
+sfr DFIFO1     = 0x95;
+sfr DFIFO2     = 0x96;
+
+
+#define PWM_CLOCK           5 
+#define REG_CLK_OFF(n)		(*(volatile unsigned char xdata *)(0x8050 + n))
+
+#define REG_PWM_ENABLE   	(*(volatile unsigned char xdata *)0x8085)
+#define REG_PWM_CLK_SEL 	(*(volatile unsigned char xdata *)0x8042)
+#define REG_PWM_PCOUNT(n) 	(*(volatile unsigned char xdata *)(0x80a0 + n*4))
+#define REG_PWM_NCOUNT(n) 	(*(volatile unsigned char xdata *)(0x80a2 + n*4))
+
+
+#define REG_UART_CLK_SEL	(*(volatile unsigned char xdata *)0x8043)
+#define REG_UART_BAUD		(*(volatile unsigned short xdata *)0x8052)
+#define REG_UART_BAUD_HI		(*(volatile unsigned char xdata *)0x8053)
+#define REG_UART_RX_ADDR_S	(*(volatile unsigned short xdata *)0x8054)
+#define REG_UART_RX_ADDR_E 	(*(volatile unsigned short xdata *)0x8056)
+#define REG_UART_RX_PTR_R	(*(volatile unsigned short xdata *)0x8058)
+#define REG_UART_TX_ADDR_S	(*(volatile unsigned short xdata *)0x805a)
+#define REG_UART_TX_ADDR_E	(*(volatile unsigned short xdata *)0x805c)
+#define REG_UART_TX_PTR_W	(*(volatile unsigned short xdata *)0x805e)
+#define REG_UART_TX_PTRP_R	(*(volatile unsigned short xdata *)0x8060)
+#define REG_UART_CTRL		(*(volatile unsigned char xdata *)0x8062)
+
+//read only
+#define REG_UART_STATUS		(*(volatile unsigned char xdata *)0x810c)
+#define REG_UART_DET_BAUD	(*(volatile unsigned char xdata *)0x810d)
+#define REG_UART_TX_ITEMS	(*(volatile unsigned short xdata *)0x810e)
+#define REG_UART_TX_PTR_R	(*(volatile unsigned short xdata *)0x8110)
+#define REG_UART_RX_ITEMS	(*(volatile unsigned short xdata *)0x8112)
+#define REG_UART_RX_DPTR_R	(*(volatile unsigned short xdata *)0x8114)
+#define REG_UART_RX_PTR_W	(*(volatile unsigned short xdata *)0x8116)
+
+#define REG_GPIO_SELECT(n)	(*(volatile unsigned char xdata *)(0x8080 + n))
+
+#define REG_GPIO_OE(n) 	(*(volatile unsigned char xdata *)(0x8070 + n))
+#define REG_GPIO_OUT(n)	(*(volatile unsigned char xdata *)(0x8074 + n))
+#define REG_GPIO_PUP(n) 	(*(volatile unsigned char xdata *)(0x8078 + n))
+#define REG_GPIO_PDN(n)	(*(volatile unsigned char xdata *)(0x807c + n))
+#define REG_GPIO_SEL(n) 	(*(volatile unsigned char xdata *)(0x8080 + n))
+#define REG_GPIO_KEY(n) 	(*(volatile unsigned char xdata *)(0x8083 + n))
+
+#define REG_GPIO_IN(n)	(*(volatile unsigned char xdata *)(0x811c + n))	//n=0,1,2,3
+
+#define REG_MISC_CTRL			(*(volatile unsigned char xdata *)(0x8006))
+
+
+#define REG_SPID_CTRL  			(*(volatile unsigned char xdata *)(0x8086))
+#define REG_SPID_DELAY  		(*(volatile unsigned char xdata *)(0x8087))
+#define REG_SPID_TXADDR			(*(volatile unsigned short xdata *)(0x808a))
+#define REG_SPID_RXADDR			(*(volatile unsigned short xdata *)(0x808c))
+#define REG_SPID_TXLEN			(*(volatile unsigned short xdata *)(0x8088))
+#define REG_SPID_RXLEN			(*(volatile unsigned short xdata *)(0x808e))
+
+#define REG_IICD_CTRL			(*(volatile unsigned char xdata *)(0x8090))
+#define REG_IICD_SCL_LOW		(*(volatile unsigned char xdata *)(0x8091))
+#define REG_IICD_SCL_HIGH		(*(volatile unsigned char xdata *)(0x8092))
+#define REG_IICD_START_SETUP		(*(volatile unsigned char xdata *)(0x8093))
+#define REG_IICD_START_HOLD		(*(volatile unsigned char xdata *)(0x8094))
+#define REG_IICD_STOP_SETUP		(*(volatile unsigned char xdata *)(0x8095))
+#define REG_IICD_DATA_SETUP		(*(volatile unsigned char xdata *)(0x8096))
+#define REG_IICD_DATA_HOLD		(*(volatile unsigned char xdata *)(0x8097))
+#define REG_IICD_TXLEN			(*(volatile unsigned short xdata *)(0x8098))
+#define REG_IICD_TXADDR			(*(volatile unsigned short xdata *)(0x809a))
+#define REG_IICD_RXADDR			(*(volatile unsigned short xdata *)(0x809c))
+#define REG_IICD_RXLEN			(*(volatile unsigned short xdata *)(0x809e))
+#define REG_CLKN					(*(volatile unsigned long xdata *)(0x8100))
+#define REG_DMA_STATUS			(*(volatile unsigned char xdata *)(0x812c))
+
+#define REG_RFEN_ADC			(*(volatile unsigned char xdata *)(0x8906))
+#define REG_ADC_IN				(*(volatile unsigned short xdata *)(0x812e))
+#define REG_RF_ADC_GC			(*(volatile unsigned char xdata *)(0x8972))
+#define REG_RFEN_CHGPUMP		(*(volatile unsigned char xdata *)(0x8973))
+#define REG_RF_ADC_MODE		(*(volatile unsigned char xdata *)(0x8971))
+#define CORE_ADC_SUM		(*(volatile unsigned short xdata *)(0x8150))
+
+#define REG_KSCAN_KSCTRL				(*(volatile unsigned char xdata *)(0x8063))
+#define REG_KSCAN_RCTC				(*(volatile unsigned char xdata *)(0x8064))
+#define REG_KSCAN_SCANCYCLE_TIMER_L	(*(volatile unsigned char xdata *)(0x8065))
+#define REG_KSCAN_SCANCYCLE_TIMER_H	(*(volatile unsigned char xdata *)(0x8066))
+
+
+#define REG_KSCAN_KSTAT				(*(volatile unsigned char xdata *)(0x8119))
+#define REG_KSCAN_EVENT				(*(volatile unsigned char xdata *)(0x811a))
+#define REG_KSCAN_EVENT_NUM			(*(volatile unsigned char xdata *)(0x811b))
+
+#define REG_KSCAN_M_DEBOUNCE		(*(volatile unsigned char xdata *)(0x8067))
+#define REG_KSCAN_MODKEY				(*(volatile unsigned char xdata *)(0x8068))
+#define REG_KSCAN_ROWMASK			(*(volatile unsigned char xdata *)(0x806f))
+#define REG_CONFIG						(*(volatile unsigned char xdata *)(0x8043))
+
+
+
+#endif
Index: iic.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/iic.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/iic.h	(working copy)
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016, yichip Semiconductor(shenzhen office)
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Yichip Semiconductor.
+ */
+ 
+ /** @file
+ *
+ * IIC support for application
+ */
+#ifndef __DEV_EEP_H_
+#define __DEV_EEP_H_
+#include "type.h"
+#include "btreg.h"
+#include "hwreg.h"
+
+/**
+ * This function read data by IIC,Warning:pbuff can't not piont to address > 0x4000.
+ * 
+ * @param addr IIC address ,len length to read,pbuff pointer to restore data
+ * 
+ * @return none.
+*/
+void IIC_Read(u16_t addr, u16_t len, u8_t* pbuff);
+/**
+ * This function write data by IIC,Warning:pbuff can't not piont to address > 0x4000.
+ * 
+ * @param addr IIC address ,len length to write,pbuff pointer to store data
+ * 
+ * @return none.
+*/
+void IIC_write(u16_t addr,u16_t len, u8_t* pbuff);
+/**
+ * This function write data by IIC,can't ignore page of block device,Warning:pbuff can't not piont to address > 0x4000.
+ * 
+ * @param addr IIC address ,len length to read,pbuff pointer to store data
+ * 
+ * @return none.
+*/
+void IIC_WriteBlock(u16_t addr, u16_t len, u8_t* pbuff);
+#endif/* YC_IIC_H */
+
Index: ipc.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/ipc.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/ipc.h	(working copy)
@@ -0,0 +1,246 @@
+/*
+ * Copyright 2016, yichip Semiconductor(shenzhen office)
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Yichip Semiconductor.
+ */
+ 
+ /** @file
+ *
+ * ipc support for application
+ */
+#ifndef _YC_IPC_H_
+#define _YC_IPC_H_
+#include "type.h"
+
+#define BUG_FIX
+#ifdef BUG_FIX
+#define FIX_ENTER_LPM	0x01
+#define FIX_ENTER_HIBERNATE	0x03
+
+#endif
+
+/* IPC tx hardware address */
+#define IPC_TX_HEAD	mem_ipc_2bt_fifo_head
+#define IPC_TX_END	mem_ipc_2bt_fifo_end
+#define IPC_TX_WRITE_PTR	mem_ipc_2bt_write_index
+#define IPC_TX_READ_PTR		mem_ipc_2bt_read_index
+
+/*IPC rx hardware address*/
+#define IPC_RX_HEAD	mem_ipc_2C51_fifo_head
+#define IPC_RX_END	mem_ipc_2C51_fifo_end
+#define IPC_RX_WRITE_PTR	mem_ipc_2C51_write_index
+#define IPC_RX_READ_PTR		mem_ipc_2C51_read_index
+
+/*IPC c51 private area*/
+#define IPC_CONTROL_BLOCK	mem_c51_private_area
+
+/*IPC data type*/
+#define IPC_CONTROL_CMD		0x01
+#define IPC_CONTROL_EVT		0x02
+#define IPC_HID_DATA			0x03
+#define IPC_SPP_DATA			0x04
+#define IPC_BLE_DATA			0x05
+#define IPC_24G_DATA			0x06
+
+/*IPC cmd type*/
+#define IPC_CMD_START_DISCOVERY 		1
+#define IPC_CMD_STOP_DISCOVERY 			2
+#define IPC_CMD_RECONNECT 				3
+#define IPC_CMD_DISCONNECT 				4
+#define IPC_CMD_ENTER_SNIFF				5
+#define IPC_CMD_SET_PIN_CODE 			10
+#define IPC_CMD_START_INQUIRY 			11
+#define IPC_CMD_STOP_INQUIRY 			12
+#define IPC_CMD_START_ADV				13
+#define IPC_CMD_STOP_ADV				14
+#define IPC_CMD_ENTER_HIBERNATE 		25
+#define IPC_CMD_ROLE_SWITCH 				29
+#define IPC_CMD_BB_RECONN_CANCEL 		30
+#define IPC_CMD_STRAT_24G				33
+#define IPC_CMD_STOP_24G				34
+#define IPC_CMD_PAIR_24G				35
+#define IPC_CMD_UPDATE_SUPPERVISION_TO	40
+
+/*IPC event type*/
+#define IPC_EVT_NULL						0x00
+#define IPC_EVT_BB_CONNECTED			0x01
+#define IPC_EVT_BB_DISCONNECTED			0x02
+#define IPC_EVT_RECONN_STARTED			0x03
+#define IPC_EVT_RECONN_FAILED			0x04
+#define IPC_EVT_SETUP_COMPLETE			0x05
+#define IPC_EVT_HID_CONNECTED			0x06
+#define IPC_EVT_HID_DISCONNECTED		0x07
+#define IPC_EVT_SPP_CONNECTED			0x08
+#define IPC_EVT_SPP_DISCONNECTED		0x09
+#define IPC_EVT_PINCODE_REQ				0x0A
+#define IPC_EVT_HID_HANDSHAKE			0x12
+#define IPC_EVT_RECONN_PAGE_TIMEOUT	0X13
+#define IPC_EVT_LE_CONNECTED			0x14
+#define IPC_EVT_LE_DISCONNECTED			0x15
+#define IPC_EVT_LINKKEY_GENERATE		0x18
+#define IPC_EVT_RESET					0x2f
+#define IPC_EVT_WAKEUP					0x30
+#define IPC_EVT_24G_PAIRING_COMPLETE	0x31
+#define IPC_EVT_24G_ATTEMPT_FAIL		0x32
+#define IPC_EVT_HIBERNATE_WAKE			0x33
+
+/*IPC EVT callback function type*/
+typedef void (*tIPCEventCb)(u8_t);
+
+/*IPC SPP callback function type*/
+typedef void (*tIPCSppCb)(u8_t*, u16_t);
+
+/*IPC BLE callback function type*/
+typedef void (*tIPCBleCb)(u8_t*, u16_t);
+
+/*IPC timer(1s) callback function type*/
+typedef void (*tIPCTimer)(void);
+
+/*IPC Hid callback function type*/
+typedef void (*tIPCHidCb)(u8_t*, u16_t);
+
+/*IPC control block type*/
+typedef struct IPCContolBlock {
+	tIPCEventCb evtcb;		/*<ipc evt call back*/
+	tIPCSppCb sppcb;		/*<ipc spp call back*/
+	tIPCTimer timercb;		/*<ipc timer call back*/
+	tIPCTimer stimercb;
+	tIPCBleCb blecb;
+	tIPCHidCb hidcb;
+}tIPCControlBlock;
+
+
+typedef enum IPCRejReason{
+	AUTHENTICATION_FAILURE_ERROR = 0x05,
+	KEY_MISSING = 0x06,
+	ACL_CONNECTION_ALREADY_EXISTS = 0x0b,
+	OTHER_END_TERMINATED = 0x13,
+	ABOUT_TO_POEWR_OFF = 0x15,
+	LOCAL_HOST= 0x16,
+	PAIRING_NOT_ALLOWED = 0x18,
+	UNKNOWN_LMP_PDU = 0x19,
+	UNSUPPORTED_LMP_FEATURE = 0x1A,
+	UNSPECIFIED_ERROR = 0x1F,
+	UNSUPPORTED_PARAMETERS = 0x20,
+	SWITCH_NOT_ALLOWED = 0x21,
+	TRANSACTION_COLLISION = 0x23,
+	PDU_NOT_ALLOWED = 0x24,
+	ENCRYPTION_MODE_NOT_ACCEPTABLE = 0x25,
+	NOT_SUPPORT_CHN_CLASSIFICATION = 0x2e,
+	NOT_SUPPORT_SSP = 0x37,
+}tIPCREJREASON;
+
+/*IPC syc task type*/
+extern volatile u8_t current_task;
+
+#define BT_PIN_CODE_MAX_LEN 16
+extern u8_t xdata ipcPinlen;
+extern u8_t xdata ipcPin[BT_PIN_CODE_MAX_LEN];
+
+/*IPC set pincode*/
+#define IPC_SetPincode(p,l)	ipcPinlen= l,\
+							xmemcpy(ipcPin, p, ipcPinlen)
+
+/**
+ * This function rigist IPC Control Block.
+ * 
+ * @param cb the IPC control block.
+ * 
+ * @return none.
+*/
+void IPC_Initialize(tIPCControlBlock *cb);
+
+/**
+ * This function deal IPC Single process, callback the rigisted IPC control function.
+ * 
+ * @param none.
+ * 
+ * @return none.
+*/
+void IPC_DealSingleStep(void);
+
+/**
+ * This function tx control IPC command.
+ * 
+ * @param cmd IPC command want to send.
+ * 
+ * @return none.
+*/
+void IPC_TxControlCmd(u8_t cmd);
+/**
+ * This function tx HID IPC command,Cpu will block when TxBuffer is not Empty.
+ * 
+ * @param dt IPC HID data want to send,len length of hid data
+ * 
+ * @return none.
+*/
+void IPC_TxHidData(u8_t* dt, u8_t len);
+
+/**
+ * This function tx 24G IPC command,Cpu will block when TxBuffer is not Empty.
+ * 
+ * @param dt IPC HID data want to send,len length of hid data
+ * 
+ * @return none.
+*/
+void IPC_Tx24GData(u8_t* dt, u8_t len);
+
+/**
+ * This function tx SPP IPC command,Cpu will block when TxBuffer is not Empty.
+ * 
+ * @param dt IPC SPP data want to send,len length of SPP data
+ * 
+ * @return none.
+*/
+void IPC_TxSppData(u8_t* dt, u8_t len);
+
+/**
+ * This function tx BLE IPC command,Cpu will block when TxBuffer is not Empty.
+ * 
+ * @param dt IPC BLE data want to send,len length of BLE data
+ * 
+ * @return none.
+*/
+void IPC_TxBleData(u8_t* dt, u8_t len);
+
+/**
+ * This function will do nothing wait enter lpm.
+ * 
+ * @param none.
+ * 
+ * @return none.
+*/
+void IPC_WaitLpm(void);
+
+/**
+ * This function will do nothing abandon lpm this time.
+ * 
+ * @param none.
+ * 
+ * @return none.
+*/
+void IPC_AbandonLpm(void);
+
+/**
+ * This function will do nothing wait enter lpm.
+ * 
+ * @param none.
+ * 
+ * @return none.
+*/
+bit IPC_IsTxBuffEmpty(void);
+
+/**
+ * This function get reject reason.
+ * 
+ * @param none.
+ * 
+ * @return none.
+*/
+tIPCREJREASON IPC_GetBBDIsconnectReason();
+
+#endif /* YC_IPC_H */
Index: kbhid.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/kbhid.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/kbhid.h	(working copy)
@@ -0,0 +1,277 @@
+    /// KB USB usages
+enum UsbUsage {
+        USB_USAGE_A=4,
+        USB_USAGE_B=5,
+        USB_USAGE_C=6,
+        USB_USAGE_D=7,
+        USB_USAGE_E=8,
+        USB_USAGE_F=9,
+        USB_USAGE_G=10,
+        USB_USAGE_H=11,
+        USB_USAGE_I=12,
+        USB_USAGE_J=13,
+        USB_USAGE_K=14,
+        USB_USAGE_L=15,
+        USB_USAGE_M=16,
+        USB_USAGE_N=17,
+        USB_USAGE_O=18,
+        USB_USAGE_P=19,
+        USB_USAGE_Q=20,
+        USB_USAGE_R=21,
+        USB_USAGE_S=22,
+        USB_USAGE_T=23,
+        USB_USAGE_U=24,
+        USB_USAGE_V=25,
+        USB_USAGE_W=26,
+        USB_USAGE_X=27,
+        USB_USAGE_Y=28,
+        USB_USAGE_Z=29,
+    
+        USB_USAGE_1=30,
+        USB_USAGE_2=31,
+        USB_USAGE_3=32,
+        USB_USAGE_4=33,
+        USB_USAGE_5=34,
+        USB_USAGE_6=35,
+        USB_USAGE_7=36,
+        USB_USAGE_8=37,
+        USB_USAGE_9=38,
+        USB_USAGE_0=39,
+    
+        USB_USAGE_ENTER=40,
+        USB_USAGE_ESCAPE=41,
+        USB_USAGE_BACKSPACE=42,
+        USB_USAGE_TAB=43,
+        USB_USAGE_SPACEBAR=44,		//kongge
+        USB_USAGE_MINUS=45,			//-
+        USB_USAGE_EQUAL=46,			//=
+        USB_USAGE_LEFT_BRACKET=47,	//[
+        USB_USAGE_RIGHT_BRACKET=48,	//]
+        USB_USAGE_BACK_SLASH=49,	// \  //
+    
+        USB_USAGE_NON_US_HASH=50,
+        USB_USAGE_SEMICOLON=51,		//ï¼›	
+        USB_USAGE_QUOTE=52,			//â€˜	
+        USB_USAGE_ACCENT=53,		//~	
+        USB_USAGE_COMMA=54,			//,	
+        USB_USAGE_STOP_AND_GREATER=55,	//.
+        USB_USAGE_SLASH=56,			//  /	
+        USB_USAGE_CAPS_LOCK=57,		
+
+		
+        USB_USAGE_F1=58,
+        USB_USAGE_F2=59,
+        USB_USAGE_F3=60,
+        USB_USAGE_F4=61,
+        USB_USAGE_F5=62,
+        USB_USAGE_F6=63,
+        USB_USAGE_F7=64,
+        USB_USAGE_F8=65,
+        USB_USAGE_F9=66,
+        USB_USAGE_F10=67,
+        USB_USAGE_F11=68,
+        USB_USAGE_F12=69,
+    
+        USB_USAGE_PRINT_SCREEN=70,
+        USB_USAGE_SCROLL_LOCK=71,
+        USB_USAGE_PAUSE=72,
+        USB_USAGE_INSERT=73,
+        
+        USB_USAGE_HOME=74,
+        USB_USAGE_PAGE_UP=75,
+        USB_USAGE_DELETE=76,   
+        USB_USAGE_END=77,
+        USB_USAGE_PAGE_DOWN=78,
+
+        USB_USAGE_RIGHT_ARROW=79,
+        USB_USAGE_LEFT_ARROW=80,
+        USB_USAGE_DOWN_ARROW=81,
+        USB_USAGE_UP_ARROW=82,
+        
+        USB_USAGE_NUM_LOCK=83,
+        USB_USAGE_KP_SLASH=84,
+        USB_USAGE_KP_ASTERISK=85,
+        USB_USAGE_KP_MINUS=86,
+        USB_USAGE_KP_PLUS=87,
+        USB_USAGE_KP_ENTER=88,
+        
+        USB_USAGE_KP_1=89,
+        USB_USAGE_KP_2=90,
+        USB_USAGE_KP_3=91,
+        USB_USAGE_KP_4=92,
+        USB_USAGE_KP_5=93,
+        USB_USAGE_KP_6=94,
+        USB_USAGE_KP_7=95,
+        USB_USAGE_KP_8=96,
+        USB_USAGE_KP_9=97,
+        USB_USAGE_KP_0=98,
+        USB_USAGE_KP_DOT=99, 
+    
+        USB_USAGE_NON_US_BACK_SLASH=100,
+        USB_USAGE_APPLICATION=101,
+        USB_USAGE_POWER=102,
+        USB_USAGE_KP_EQUAL=103,
+        USB_USAGE_F13=104,
+        USB_USAGE_F14=105,
+        USB_USAGE_F15=106,
+        USB_USAGE_F16=107,
+        USB_USAGE_F17=108,
+        USB_USAGE_F18=109,
+    
+        USB_USAGE_F19=110,
+        USB_USAGE_F20=111,
+        USB_USAGE_F21=112,
+        USB_USAGE_F22=113,
+        USB_USAGE_F23=114,
+        USB_USAGE_F24=115,
+        USB_USAGE_EXECUTE=116,
+        USB_USAGE_HELP=117,
+        USB_USAGE_MENU=118,
+        USB_USAGE_SELECT=119,
+    
+        USB_USAGE_STOP=120,
+        USB_USAGE_AGAIN=121,
+        USB_USAGE_UNDO=122,
+        USB_USAGE_CUT=123,
+        USB_USAGE_COPY=124,
+        USB_USAGE_PASTE=125,
+        USB_USAGE_FIND=126,
+        USB_USAGE_MUTE=127,
+        USB_USAGE_VOL_UP=128,
+        USB_USAGE_VOL_DOWN=129,
+    
+        USB_USAGE_LOCKING_CAPS_LOCK=130,
+        USB_USAGE_LOCKING_NUM_LOCK=131,
+        USB_USAGE_LOCKING_SCROLL_LOCK=132,
+        USB_USAGE_KP_COMMA=133,
+        USB_USAGE_KP_EQUAL_AS400=134,
+        USB_USAGE_INTL_1=135,
+        USB_USAGE_INTL_2=136,
+        USB_USAGE_INTL_3=137,
+        USB_USAGE_INTL_4=138,
+        USB_USAGE_INTL_5=139,
+    
+        USB_USAGE_INTL_6=140,
+        USB_USAGE_INTL_7=141,
+        USB_USAGE_INTL_8=142,
+        USB_USAGE_INTL_9=143,
+        USB_USAGE_LANG_1=144,
+        USB_USAGE_LANG_2=145,
+        USB_USAGE_LANG_3=146,
+        USB_USAGE_LANG_4=147,
+        USB_USAGE_LANG_5=148,
+        USB_USAGE_LANG_6=149,
+    
+        USB_USAGE_LANG_7=150,
+        USB_USAGE_LANG_8=151,
+        USB_USAGE_LANG_9=152,
+        USB_USAGE_ALT_ERASE=153,
+        USB_USAGE_SYS_REQ=154,
+        USB_USAGE_CANCEL=155,
+        USB_USAGE_CLEAR=156,
+        USB_USAGE_PRIOR=157,
+        USB_USAGE_RETURN=158,
+        USB_USAGE_SEPARATOR=159,
+    
+        USB_USAGE_OUT=160,
+        USB_USAGE_OPER=161,
+        USB_USAGE_CLEAR_AGAIN=162,
+        USB_USAGE_CRSEL=163,
+        USB_USAGE_EXSEL=164,
+    
+        // Reserved 165-175
+    
+        USB_USAGE_KP_00=176,
+        USB_USAGE_KP_000=177,
+        USB_USAGE_THOUSANDS_SEPERATOR=178,
+        USB_USAGE_DECIMAL_SEPERATOR=179,
+    
+        USB_USAGE_CURRENCY_UNIT=180,
+        USB_USAGE_CURRENCY_SUB_UNIT=181,
+        USB_USAGE_KP_LEFT_PAREN=182,
+        USB_USAGE_KP_RIGHT_PAREN=183,
+        USB_USAGE_KP_LEFT_CURLY_BRACE=184,		
+        USB_USAGE_KP_RIGHT_CURLY_BRACE=185,	
+        USB_USAGE_KP_TAB=186,
+        USB_USAGE_KP_BACKSPACE=187,
+        USB_USAGE_KP_A=188,
+        USB_USAGE_KP_B=189,
+    
+        USB_USAGE_KP_C=190,
+        USB_USAGE_KP_D=191,
+        USB_USAGE_KP_E=192,
+        USB_USAGE_KP_F=193,
+        USB_USAGE_KP_XOR=194,
+        USB_USAGE_KP_CARET=195,
+        USB_USAGE_KP_PERCENT=196,
+        USB_USAGE_KP_LESS_THAN=197,
+        USB_USAGE_KP_GREATER_THAN=198,
+        USB_USAGE_KP_AMPERSAND=199,
+    
+        USB_USAGE_KP_DOUBLE_AMPERSAND=200,
+        USB_USAGE_KP_VERTICAL_BAR=201,
+        USB_USAGE_KP_DOUBLE_VERTICAL_BAR=202,
+        USB_USAGE_KP_COLON=203,
+        USB_USAGE_KP_HASH=204,
+        USB_USAGE_KP_SPACE=205,
+        USB_USAGE_KP_AT=206,
+        USB_USAGE_KP_EXCLAMATION=207,
+        USB_USAGE_KP_MEM_STORE=208,
+        USB_USAGE_KP_MEM_RECALL=209,
+    
+        USB_USAGE_KP_MEM_CLEAR=210,
+        USB_USAGE_KP_MEM_ADD=211,
+        USB_USAGE_KP_MEM_SUBTRACT=212,
+        USB_USAGE_KP_MEM_MULTIPLY=213,
+        USB_USAGE_KP_MEM_DIVIDE=214,
+        USB_USAGE_KP_PLUS_MINUS=215,
+        USB_USAGE_KP_CLEAR=216,
+        USB_USAGE_KP_CLEAR_ENTRY=217,
+        USB_USAGE_KP_BINARY=218,
+        USB_USAGE_KP_OCTAL=219,
+    
+        USB_USAGE_KP_DECIMAL=220,
+        USB_USAGE_KP_HEX=221,
+        
+        // 222-223 reserved
+        USB_USAGE_LEFT_CTL=224,
+        USB_USAGE_LEFT_SHIFT=225,
+        USB_USAGE_LEFT_ALT=226,
+        USB_USAGE_LEFT_GUI=227,
+        USB_USAGE_RIGHT_CTL=228,
+        USB_USAGE_RIGHT_SHIFT=229,
+        USB_USAGE_RIGHT_ALT=230,
+        USB_USAGE_RIGHT_GUI=231,
+};
+
+enum multKey{ 
+//mult key
+	HID_MKEY_HOME = 0x01,
+	HID_MKEY_VIRKB	 = 0x02,	//ruanjianpan
+	HID_MKEY_EMAILREADER = 0x03,
+	HID_MKEY_MENU = 0x04,
+	HID_MKEY_LIGHTUP = 0x05,
+	HID_MKEY_ACSEARCHER = 0x06,
+	HID_MKEY_PREMUSIC = 0x07,
+	HID_MKEY_STARTMUSIC = 0x08,
+	HID_MKEY_NEXTMUSIC = 0x09,
+	HID_MKEY_MUTE = 0x0a,
+	HID_MKEY_VOLDOWN = 0x0b,
+	HID_MKEY_VOLUP = 0x0c,
+	HID_MKEY_POWER = 0x0d,	//suopin
+	HID_MKEY_MUSIC = 0x0e,
+	HID_MKEY_SCREESAVE = 0x13,
+	HID_MKEY_LIGHTDOWN = 0x15,
+	HID_MKEY_INTERNET = 0x11
+};
+
+enum hidReportId{
+	HID_REPORTID_1 = 0x01,
+	HID_REPORTID_2 = 0x02
+};
+
+enum hidReportLen{
+	HID_REPORTLEN_1 = 0x09,
+	HID_REPORTLEN_2 = 0x05
+};
+
Index: keyscan.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/keyscan.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/keyscan.h	(working copy)
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016, yichip Semiconductor(shenzhen office)
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Yichip Semiconductor.
+ */
+
+#include "type.h"
+#include "btreg.h"
+#include "hwreg.h"
+
+#ifndef _KEYSCAN_
+#define _KEYSCAN_
+
+#define KS_BUFF_POLL_LEN 6
+typedef struct {
+	u8_t standardSel;
+	u8_t ksPool[KS_BUFF_POLL_LEN];
+}tKSEVENT;
+
+/**
+ * This function initlialize key scan hardware.
+ * 
+ * @param none.
+ * 
+ * @return none.
+*/
+void KS_Initialize(void);
+
+/**
+ * This function Get Keyscan event message.
+ * 
+ * @param none.
+ * 
+ * @return ptr of keyscan event.
+*/
+tKSEVENT *KS_GetCurrentEvt();
+
+/**
+ * This function scan ks matrix.
+ * 
+ * @param none.
+ * 
+ * @return ptr of keyscan event.
+*/
+void KS_ScanMatrix();
+
+void KS_Unistall();
+#endif
+ 
\ No newline at end of file
Index: keyscan.c
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/keyscan.c	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/keyscan.c	(working copy)
@@ -0,0 +1,328 @@
+#include "keyscan.h"
+#include "utilities.h"
+#include "gpio.h"
+#include "kbhid.h"
+
+#define KS_KEY_MAP_LEN	158
+#define KS_SEL_MAP_LEN	20
+#define KS_RAW_MAX	 	8
+
+#define	KB_KSCAN_COL_NUM				20
+#define	KB_KSCAN_ROW_NUM				7
+
+#define KS_SEL_RGUI					0x80
+#define KS_SEL_RALT					0x40
+#define KS_SEL_RSHIFT				0x20
+#define KS_SEL_RCTRL					0x10
+#define KS_SEL_LGUI					0x08
+#define KS_SEL_LALT					0x04
+#define KS_SEL_LSHIFT				0x02
+#define KS_SEL_LCTRL					0x01
+		
+
+#define KS_EVENT_EVT_BLOCK (mem_c51_private_area + 40) //0x4c0f
+
+#define GET_RAW_KEY_SEL(y, g, n)	REG_GPIO_PUP (g) &= ~n; \
+	REG_GPIO_OE(g) |= n; \
+	REG_GPIO_OUT(g) &= ~n;	\
+	REG_GPIO_OUT(g) &= ~n;	\
+	y = ~ REG_GPIO_IN(0);	\
+	REG_GPIO_PUP(g) |= n;	\
+	REG_GPIO_OE(g) &= ~n
+
+
+#define GET_RAW_KEY_SEL0(y,x)		GPIO_SetOutput(x, 0); \
+		y = ~ REG_GPIO_IN(0);	\
+		GPIO_SetInput(x, 0)
+
+static tKSEVENT ksEvtPool _at_ KS_EVENT_EVT_BLOCK;//4ca5
+static u8_t ksMap[KS_KEY_MAP_LEN] _at_ mem_kb_map_c51;
+static u8_t kscurrmult _at_ mem_lpm_mult;
+
+u8_t ksSelMapOld[KS_SEL_MAP_LEN] _at_ (0x4e80);
+u8_t ksSelMapCheck[KS_SEL_MAP_LEN] _at_ (0x4e80 + KS_SEL_MAP_LEN);
+u8_t ksSelMapCurr[KS_SEL_MAP_LEN] _at_ (0x4e80 + KS_SEL_MAP_LEN + KS_SEL_MAP_LEN);
+
+u8_t col[KB_KSCAN_COL_NUM+1] _at_ mem_kb_ks_col;//4e46
+u8_t ghost _at_ 0x4eff;
+u8_t rawCount _at_ 0x4efe;
+u8_t colCount _at_ 0x4efd;
+u8_t keyCount _at_ 0x4efc;
+u8_t keyinCount _at_ 0x4efb;
+u8_t keyoutCount _at_ 0x4efa;
+
+#define MAX(a,b) ((a)>(b)?(a):(b))
+
+static u8_t bit_count(u8_t v)
+{
+	unsigned char c;
+	for (c = 0; v; c++) {
+    	v &= v - 1;
+    }
+    return c;
+}
+
+
+//u8_t col[] = {25,26};
+static void keyIn(u8_t key)
+{
+	u8_t i = 0;
+
+	if (key == USB_USAGE_RIGHT_GUI) {
+		ksEvtPool.standardSel |= KS_SEL_RGUI;
+		return;
+	}
+	else if (key ==USB_USAGE_RIGHT_ALT) {
+		ksEvtPool.standardSel |= KS_SEL_RALT;
+		return;
+	}
+	else if (key ==USB_USAGE_RIGHT_SHIFT) {
+		ksEvtPool.standardSel |= KS_SEL_RSHIFT;
+		return;
+	}
+	else if (key ==USB_USAGE_RIGHT_CTL) {
+		ksEvtPool.standardSel |= KS_SEL_RCTRL;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_GUI) {
+		ksEvtPool.standardSel |= KS_SEL_LGUI;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_ALT) {
+		ksEvtPool.standardSel |= KS_SEL_LALT;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_SHIFT) {
+		ksEvtPool.standardSel |= KS_SEL_LSHIFT;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_CTL) {
+		ksEvtPool.standardSel |= KS_SEL_LCTRL;
+		return;
+	}
+	//special key
+
+	for (i=0 ; i<KS_BUFF_POLL_LEN ; i++) {
+		if (ksEvtPool.ksPool[i] == key)
+			break;
+		if (ksEvtPool.ksPool[i] == 0) {
+			ksEvtPool.ksPool[i] = key;
+			break;
+		}
+	}
+}
+
+static void keyOut(u8_t key)
+{
+	u8_t i = 0 ;
+	u8_t found = 0;
+
+	if (key == USB_USAGE_RIGHT_GUI ) {
+		ksEvtPool.standardSel &= ~KS_SEL_RGUI;
+		return;
+	}
+	else if (key ==USB_USAGE_RIGHT_ALT ) {
+		ksEvtPool.standardSel &= ~KS_SEL_RALT;
+		return;
+	}
+	else if (key ==USB_USAGE_RIGHT_SHIFT) {
+		ksEvtPool.standardSel &= ~KS_SEL_RSHIFT;
+		return;
+	}
+	else if (key ==USB_USAGE_RIGHT_CTL) {
+		ksEvtPool.standardSel &= ~KS_SEL_RCTRL;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_GUI) {
+		ksEvtPool.standardSel &= ~KS_SEL_LGUI;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_ALT) {
+		ksEvtPool.standardSel &= ~KS_SEL_LALT;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_SHIFT) {
+		ksEvtPool.standardSel &= ~KS_SEL_LSHIFT;
+		return;
+	}
+	else if (key ==USB_USAGE_LEFT_CTL) {
+		ksEvtPool.standardSel &= ~ KS_SEL_LCTRL;
+		return;
+	}
+	
+	for (i=0 ; i<KS_BUFF_POLL_LEN ; i++) {
+		if (found == 0) {
+			if (ksEvtPool.ksPool[i] == key) {
+				if (i == KS_BUFF_POLL_LEN-1) {
+					ksEvtPool.ksPool[i] = 0;
+				}
+				found = 1;
+			}
+		}
+		else {
+			ksEvtPool.ksPool[i-1] = ksEvtPool.ksPool[i];
+			if (ksEvtPool.ksPool[i] == 0)
+				break;
+			if (i == KS_BUFF_POLL_LEN-1) {
+				ksEvtPool.ksPool[i] = 0;
+			}
+		}
+	}
+}
+
+static void ksRawInitialize()
+{
+	u8_t i = 0;
+	
+	for (i=0; i<8; i++) {
+		GPIO_SetInput(i, 0);
+	}
+}
+
+static void ksColInitialize()
+{
+	u8_t i = 0;
+	for (i=0; col[i]!=0; i++) {
+		GPIO_SetInput(col[i], 0);
+	}
+}
+
+void KS_Initialize()
+{
+	REG_GPIO_SELECT(0) = 0;
+	REG_GPIO_SELECT(1) = 0;
+	REG_GPIO_SELECT(2) = 0;
+	ksRawInitialize();
+	ksColInitialize();
+}
+
+void KS_Unistall()
+{
+	u8_t i = 0;
+	u8_t temp = 0;
+	u8_t tgroup = 0;
+	u8_t tgpionum = 0;
+	for (i=0; col[i]!=0; i++) {
+		tgroup = col[i]  >> 3;
+		tgpionum = 1 << (col[i] & 7);
+		REG_GPIO_PUP (tgroup) &= ~tgpionum;
+		REG_GPIO_OE(tgroup) |= tgpionum;
+		REG_GPIO_OUT(tgroup) &= ~tgpionum;
+	}
+	temp = REG_GPIO_IN(0);
+	YC_GPIOWakeupL[0] = temp;
+	YC_GPIOWakeupH[0] = ~temp;
+}
+
+
+void KS_ScanMatrix()
+{
+	u8_t i = 0;
+	u8_t j = 0;
+	u8_t tgroup = 0;
+	u8_t tgpionum = 0;
+	u8_t temp = 0;
+	u8_t check = 0;
+	u8_t rawSel = 0;
+	for (i=0; col[i]!=0; i++) {
+		tgroup = col[i]  >> 3;
+		tgpionum = 1 << (col[i] & 7);
+		GET_RAW_KEY_SEL(ksSelMapCurr[i], tgroup, tgpionum);
+	}
+
+	Delay1ms(2);
+
+	for (i=0; col[i]!=0; i++) {
+		tgroup = col[i]  >> 3;
+		tgpionum = 1 << (col[i] & 7);
+		GET_RAW_KEY_SEL(ksSelMapCheck[i], tgroup, tgpionum);
+	}
+
+	for (i=0; col[i]!=0; i++) {
+		if (ksSelMapCheck[i]!=ksSelMapCurr[i]) {
+			ksSelMapCurr[i] &= ksSelMapCheck[i];
+		}
+	}
+}
+
+
+tKSEVENT *KS_GetCurrentEvt()
+{
+	//
+	u8_t i = 0;
+	u8_t j = 0;
+	u8_t temp = 0;
+	u8_t flag = 0;
+	u8_t offset = 0;
+	u8_t state = 0;
+	u8_t colCounttemp = 0;
+	u8_t rawSel =0;
+	u8_t keyCounttemp = 0;
+	//u8_t ksSelMapChange[]
+	KS_ScanMatrix();
+
+
+	for (i=0; col[i]!=0; i++) {
+		temp = ksSelMapCurr[i];
+		if (temp!=0) {
+			colCounttemp++;
+			rawSel = temp|rawSel;
+			keyCounttemp += bit_count(temp);
+		}
+	}
+	keyCount = keyCounttemp;
+	colCount = colCounttemp;
+	rawCount = bit_count(rawSel);
+	if (keyCount >2 && keyCount > MAX(colCount, rawCount)) {
+		ghost = 1;
+	}
+	else {
+		ghost = 0;
+	}
+	
+	for (i=0; col[i]!=0; i++) {
+		temp = ksSelMapCurr[i] ^ ksSelMapOld[i];
+		state = ksSelMapCurr[i];
+		if (temp == 0) {
+			continue;
+		}
+		else {
+			if (ghost) 
+				return NULL;
+			ksSelMapOld[i] = ksSelMapCurr[i];
+			for (j = 0 ; j<8 ; j++) {
+				if (temp&1) {
+					offset = i<<3 |j;
+					if (state & 1) {
+						keyinCount++;
+						keyIn(ksMap[offset]);
+					}
+					else {
+						keyoutCount++;
+						keyOut(ksMap[offset]);
+					}
+				}
+				temp = temp >>1;
+				state = state>>1;
+			}
+			flag = 1;
+		}
+	}
+
+	if (ksEvtPool.ksPool[0] ==0 && ksEvtPool.standardSel == 0) {
+		kscurrmult = 0x3a;
+	}
+	else {
+		kscurrmult = 0x3;
+	}
+	
+	if (flag) {
+		return &ksEvtPool;
+	}
+	else {
+		return NULL;
+	}
+	
+
+}
+
Index: output/eeprom.dat
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/eeprom.dat	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/eeprom.dat	(working copy)
@@ -0,0 +1,16384 @@
+00
+02
+aa
+55
+42
+0e
+c5
+12
+80
+17
+c0
+00
+00
+2e
+c0
+01
+80
+2b
+c0
+02
+81
+5c
+c0
+05
+03
+2b
+c0
+13
+83
+1b
+c0
+14
+03
+0a
+c0
+15
+83
+10
+c0
+21
+01
+a0
+c0
+21
+81
+d9
+c0
+28
+02
+ea
+c0
+2a
+02
+f9
+c0
+48
+02
+1b
+c0
+49
+01
+e1
+c0
+4a
+01
+e7
+c0
+4a
+81
+82
+c0
+58
+03
+05
+c0
+58
+81
+52
+c0
+59
+01
+84
+c0
+59
+81
+94
+c0
+5b
+02
+9b
+c0
+5c
+81
+68
+20
+20
+3b
+f1
+c0
+03
+81
+5a
+c0
+0c
+00
+68
+c0
+0d
+83
+3c
+c0
+11
+83
+5b
+c0
+12
+00
+a7
+c0
+1f
+02
+ae
+c0
+1f
+82
+b1
+c0
+43
+81
+04
+c0
+46
+82
+c3
+c0
+47
+02
+cd
+c0
+47
+82
+b9
+c0
+4e
+03
+77
+c0
+4f
+83
+2f
+c0
+66
+82
+1e
+c0
+67
+80
+55
+c0
+68
+01
+0b
+c0
+71
+01
+bc
+c0
+71
+81
+a4
+c0
+73
+00
+32
+20
+20
+3b
+f1
+20
+40
+00
+ab
+20
+40
+00
+70
+20
+20
+30
+15
+68
+10
+81
+3b
+60
+00
+8b
+80
+70
+80
+06
+08
+20
+20
+30
+03
+68
+00
+80
+7c
+20
+3a
+00
+37
+20
+40
+61
+d9
+68
+00
+80
+7c
+24
+7a
+00
+00
+68
+00
+80
+55
+20
+7a
+00
+00
+c0
+03
+00
+46
+c0
+08
+00
+3c
+20
+20
+62
+3e
+68
+00
+c7
+48
+c1
+00
+00
+00
+c0
+00
+80
+44
+d8
+e0
+00
+0a
+20
+40
+7e
+53
+24
+7a
+00
+00
+70
+47
+48
+00
+20
+20
+62
+9b
+20
+74
+80
+00
+20
+20
+00
+46
+68
+00
+81
+77
+c2
+81
+62
+9b
+c2
+80
+00
+49
+68
+00
+c2
+5e
+20
+3a
+62
+c7
+68
+00
+84
+4d
+c4
+01
+80
+00
+c4
+01
+00
+00
+68
+02
+04
+65
+d8
+40
+03
+20
+98
+40
+84
+00
+1c
+42
+7e
+00
+98
+46
+7c
+00
+24
+61
+00
+00
+20
+20
+62
+67
+da
+20
+47
+df
+20
+40
+7f
+9f
+20
+7a
+00
+00
+1f
+e2
+26
+00
+20
+40
+00
+5b
+20
+20
+3e
+a5
+c1
+0c
+00
+00
+c0
+03
+66
+14
+c0
+01
+00
+5f
+20
+20
+3e
+7d
+70
+42
+9d
+00
+68
+01
+47
+f4
+c2
+83
+bf
+08
+2f
+ec
+00
+01
+20
+40
+80
+65
+20
+20
+3f
+08
+68
+00
+84
+50
+c1
+01
+00
+00
+20
+20
+3e
+7b
+68
+01
+02
+cd
+20
+3a
+4d
+fc
+68
+00
+82
+cf
+c0
+00
+80
+6d
+20
+20
+4d
+bb
+20
+40
+52
+7a
+24
+7a
+00
+00
+20
+20
+4d
+c3
+68
+00
+c7
+dc
+20
+3a
+00
+74
+68
+00
+c7
+93
+20
+7a
+00
+00
+20
+40
+01
+63
+20
+74
+00
+00
+1f
+f0
+fe
+00
+1f
+e2
+0c
+00
+20
+40
+00
+e3
+60
+00
+cc
+e6
+c0
+00
+80
+87
+1f
+e2
+04
+00
+18
+c2
+22
+00
+68
+00
+c0
+40
+c3
+00
+00
+84
+1a
+22
+0c
+00
+c6
+84
+80
+00
+18
+42
+7e
+00
+c0
+01
+80
+91
+20
+20
+3b
+f1
+1a
+22
+0c
+00
+d8
+a0
+00
+f8
+20
+20
+00
+db
+20
+40
+00
+e3
+20
+40
+00
+e3
+60
+00
+8b
+7d
+20
+40
+00
+8c
+20
+20
+7c
+33
+20
+40
+00
+e6
+18
+c2
+04
+00
+18
+50
+84
+00
+60
+09
+4b
+ad
+20
+60
+00
+00
+20
+40
+00
+e3
+1f
+e2
+22
+00
+18
+c2
+7e
+00
+60
+01
+02
+b7
+1a
+20
+a2
+01
+20
+40
+4b
+2c
+18
+a0
+a5
+fe
+68
+01
+42
+b7
+e0
+a1
+00
+00
+58
+00
+00
+a1
+e0
+a0
+80
+00
+1a
+20
+f3
+ff
+68
+01
+02
+b7
+1f
+e2
+0c
+00
+20
+40
+00
+dd
+1a
+42
+0c
+00
+e8
+c1
+00
+00
+60
+01
+4e
+5f
+1f
+e0
+f2
+02
+20
+40
+7e
+45
+70
+4e
+5e
+32
+20
+60
+00
+00
+da
+40
+00
+00
+20
+40
+52
+7a
+24
+7a
+00
+00
+20
+20
+52
+4d
+68
+0a
+4d
+8a
+1c
+42
+7e
+00
+98
+46
+7e
+00
+d8
+40
+06
+40
+98
+46
+fc
+00
+20
+40
+7e
+fd
+18
+07
+fe
+00
+20
+7a
+00
+00
+1c
+42
+04
+00
+60
+0a
+4d
+8a
+68
+09
+4c
+e4
+18
+50
+84
+00
+98
+40
+fe
+00
+1f
+f0
+fe
+00
+60
+01
+4c
+e4
+1f
+f0
+fe
+00
+1f
+e1
+7e
+03
+c1
+80
+00
+00
+68
+00
+cd
+a0
+c2
+80
+00
+c2
+c2
+80
+80
+c4
+c2
+81
+00
+c6
+20
+60
+00
+00
+70
+89
+71
+bf
+20
+20
+00
+ca
+70
+89
+71
+af
+20
+20
+00
+ca
+70
+89
+71
+8f
+68
+00
+cd
+a1
+60
+10
+89
+73
+20
+20
+00
+ca
+68
+10
+80
+53
+79
+20
+7e
+07
+60
+10
+80
+53
+68
+10
+89
+73
+1f
+e1
+fe
+30
+60
+10
+89
+73
+70
+89
+06
+74
+70
+89
+06
+7c
+70
+89
+72
+aa
+20
+00
+13
+88
+68
+19
+01
+50
+68
+10
+80
+53
+79
+3f
+fe
+07
+60
+10
+80
+53
+18
+50
+84
+00
+60
+09
+4d
+a6
+20
+60
+00
+00
+20
+40
+00
+e3
+1f
+e2
+72
+00
+20
+40
+00
+df
+20
+20
+00
+8c
+20
+40
+00
+e3
+e0
+a0
+80
+00
+c2
+00
+00
+df
+20
+60
+00
+00
+20
+40
+00
+e6
+e8
+c0
+80
+00
+20
+60
+00
+00
+58
+00
+4b
+ad
+98
+c6
+7c
+00
+24
+62
+80
+00
+d8
+c0
+4a
+e5
+20
+60
+00
+00
+df
+20
+00
+03
+d8
+c0
+4c
+e1
+18
+c2
+22
+00
+68
+01
+4c
+7b
+1f
+f0
+fe
+00
+1f
+e2
+0a
+00
+1a
+22
+0c
+00
+e8
+c0
+80
+00
+e0
+a0
+80
+00
+20
+40
+00
+fa
+c2
+00
+00
+f2
+18
+a2
+7e
+00
+1f
+f0
+fe
+00
+60
+01
+4c
+7b
+20
+60
+00
+00
+58
+00
+4c
+79
+98
+a6
+7c
+00
+24
+62
+80
+00
+d8
+a0
+4b
+b1
+20
+60
+00
+00
+58
+00
+00
+10
+d8
+e0
+00
+03
+20
+40
+7e
+68
+9a
+40
+a4
+00
+20
+60
+00
+00
+da
+20
+00
+00
+68
+0a
+47
+ec
+1c
+42
+24
+00
+1a
+42
+7e
+00
+98
+46
+7c
+00
+24
+41
+00
+ff
+20
+20
+7c
+09
+60
+08
+82
+59
+68
+00
+cd
+9e
+1f
+e0
+fe
+01
+60
+00
+cd
+9e
+68
+00
+82
+59
+20
+7a
+00
+00
+1f
+e0
+ff
+ff
+60
+00
+82
+59
+20
+40
+01
+30
+20
+40
+01
+37
+20
+40
+01
+2a
+20
+40
+01
+18
+20
+20
+01
+0f
+68
+00
+ce
+5e
+20
+7a
+00
+00
+1f
+e0
+ff
+ff
+60
+00
+ce
+5e
+c1
+80
+80
+00
+70
+4e
+5e
+32
+68
+01
+47
+f4
+c4
+02
+80
+00
+68
+01
+4e
+5f
+20
+7a
+00
+00
+20
+40
+52
+7e
+24
+7a
+00
+00
+68
+01
+4e
+5f
+1f
+e2
+22
+00
+20
+40
+4b
+2c
+1a
+20
+f2
+02
+d8
+c0
+4e
+61
+20
+20
+7e
+45
+68
+00
+cd
+87
+20
+7a
+00
+00
+1f
+e0
+ff
+ff
+60
+00
+cd
+87
+20
+3a
+3f
+a4
+20
+20
+3f
+a6
+68
+00
+c7
+f2
+20
+7a
+00
+00
+1f
+e0
+ff
+ff
+60
+00
+c7
+f2
+24
+7a
+00
+00
+20
+40
+3e
+bd
+20
+20
+4b
+22
+68
+00
+cd
+86
+20
+7a
+00
+00
+1f
+e0
+ff
+ff
+60
+00
+cd
+86
+20
+60
+00
+00
+1a
+62
+7e
+00
+1f
+e1
+7e
+f0
+c1
+28
+00
+00
+20
+40
+01
+44
+1a
+62
+7e
+00
+20
+7a
+00
+00
+60
+00
+cc
+e3
+20
+20
+00
+eb
+1a
+62
+7e
+00
+c0
+05
+81
+48
+c0
+01
+01
+50
+20
+60
+00
+00
+70
+4e
+5e
+28
+58
+00
+00
+0a
+60
+01
+4e
+5f
+68
+01
+42
+b7
+e0
+a1
+00
+00
+58
+00
+01
+a1
+e0
+a1
+00
+00
+20
+60
+00
+00
+70
+4e
+5e
+00
+20
+60
+00
+00
+70
+41
+6e
+7f
+20
+40
+3c
+f3
+68
+00
+ce
+5b
+20
+7a
+00
+00
+70
+4e
+5b
+00
+1c
+42
+7e
+00
+60
+02
+4d
+8a
+20
+60
+00
+00
+20
+20
+3b
+f1
+20
+20
+3b
+f1
+20
+40
+33
+92
+20
+40
+34
+07
+20
+40
+30
+24
+20
+20
+30
+22
+68
+01
+4c
+79
+68
+09
+4c
+7b
+20
+20
+01
+65
+68
+01
+4b
+ad
+68
+09
+4b
+af
+98
+46
+7c
+00
+20
+22
+e9
+b1
+20
+20
+32
+0b
+68
+00
+c2
+19
+24
+7a
+00
+00
+70
+80
+42
+06
+58
+00
+0f
+0c
+20
+40
+3d
+a7
+58
+03
+0d
+40
+20
+40
+3b
+f3
+37
+d9
+82
+00
+1e
+22
+60
+00
+20
+40
+3b
+36
+20
+00
+13
+88
+20
+20
+3d
+9d
+68
+00
+c2
+19
+24
+3a
+01
+7a
+20
+40
+3d
+91
+20
+00
+75
+30
+20
+00
+75
+30
+20
+00
+75
+30
+20
+40
+3b
+0a
+70
+80
+42
+04
+68
+10
+89
+6b
+1f
+e1
+7e
+cf
+60
+10
+89
+6b
+1f
+e1
+fe
+30
+60
+10
+89
+6b
+20
+60
+00
+00
+20
+40
+01
+74
+20
+20
+3a
+af
+c6
+11
+80
+00
+20
+40
+3c
+ab
+68
+01
+c2
+10
+20
+7a
+00
+00
+68
+00
+c1
+31
+20
+7a
+00
+00
+20
+40
+52
+7e
+24
+7a
+00
+00
+20
+40
+3d
+ca
+24
+7a
+00
+00
+20
+40
+3b
+36
+68
+00
+c7
+dc
+20
+3a
+3d
+25
+68
+00
+c7
+93
+20
+7a
+00
+00
+20
+20
+3d
+25
+20
+40
+01
+63
+24
+74
+00
+00
+20
+40
+01
+60
+24
+74
+00
+00
+70
+0b
+7f
+01
+70
+0b
+7e
+01
+20
+40
+02
+b4
+68
+00
+8b
+7f
+24
+7a
+00
+00
+20
+40
+01
+63
+24
+74
+00
+00
+20
+20
+3d
+2d
+20
+40
+3e
+25
+20
+40
+6d
+ec
+20
+40
+35
+d6
+20
+20
+34
+80
+78
+54
+7c
+00
+20
+40
+61
+d9
+68
+00
+80
+48
+20
+7a
+00
+00
+c2
+83
+df
+10
+c0
+01
+01
+ac
+c0
+03
+81
+b9
+20
+20
+5e
+e0
+18
+00
+7e
+11
+20
+40
+61
+b5
+68
+00
+80
+49
+1f
+e2
+04
+00
+c0
+00
+01
+b4
+c0
+07
+01
+b4
+c0
+0e
+01
+b4
+20
+60
+00
+00
+e0
+a0
+80
+00
+68
+00
+c7
+02
+e0
+a0
+80
+00
+58
+00
+00
+0e
+20
+20
+5f
+a6
+20
+40
+60
+55
+70
+00
+72
+64
+20
+60
+00
+00
+68
+00
+80
+7d
+c0
+01
+81
+c8
+c0
+02
+5c
+67
+c0
+03
+81
+d6
+20
+20
+5b
+92
+68
+00
+80
+30
+c2
+80
+dd
+b5
+68
+01
+04
+e2
+1f
+e3
+fe
+00
+1f
+e6
+7c
+0f
+24
+21
+5d
+b5
+20
+20
+5d
+a4
+68
+00
+84
+df
+60
+00
+84
+45
+c0
+0c
+01
+d4
+c0
+09
+83
+07
+c0
+19
+81
+ce
+20
+20
+5c
+58
+68
+00
+84
+4d
+79
+20
+7e
+00
+60
+00
+84
+4d
+70
+0b
+7d
+01
+20
+40
+7c
+27
+20
+20
+5c
+83
+20
+40
+3f
+9e
+20
+20
+5c
+cc
+68
+00
+84
+df
+60
+00
+84
+46
+20
+20
+5c
+f3
+20
+40
+3d
+61
+20
+40
+3b
+e2
+20
+21
+34
+98
+20
+40
+32
+04
+24
+34
+34
+98
+20
+40
+38
+12
+24
+3a
+01
+a1
+20
+60
+00
+00
+60
+08
+80
+17
+18
+40
+a2
+04
+20
+20
+3a
+86
+60
+08
+80
+17
+18
+40
+a2
+00
+20
+20
+3a
+b6
+20
+40
+01
+e4
+58
+00
+05
+00
+20
+40
+3b
+f3
+20
+40
+01
+ef
+68
+00
+cd
+99
+d8
+a0
+46
+d8
+24
+3a
+01
+fb
+20
+20
+02
+02
+70
+89
+06
+01
+70
+89
+00
+3c
+70
+89
+01
+e0
+70
+89
+6d
+12
+20
+00
+00
+0a
+70
+89
+02
+01
+70
+89
+02
+3d
+20
+00
+00
+0a
+70
+89
+03
+b7
+20
+00
+00
+0a
+70
+89
+02
+7d
+20
+60
+00
+00
+68
+02
+ca
+b4
+e0
+a2
+80
+00
+e8
+c2
+80
+00
+e0
+a2
+80
+00
+70
+89
+56
+c2
+70
+89
+55
+d0
+20
+60
+00
+00
+68
+02
+ca
+be
+e0
+a2
+80
+00
+e8
+c2
+80
+00
+e0
+a2
+80
+00
+70
+89
+56
+df
+20
+40
+02
+0a
+70
+89
+55
+df
+20
+60
+00
+00
+20
+00
+00
+04
+70
+89
+55
+d1
+20
+00
+00
+04
+70
+89
+55
+d2
+20
+00
+00
+04
+70
+89
+55
+d4
+20
+00
+00
+04
+20
+60
+00
+00
+70
+89
+55
+d4
+20
+00
+00
+04
+70
+89
+55
+d2
+20
+00
+00
+04
+70
+89
+55
+d1
+20
+00
+00
+04
+70
+89
+55
+d0
+70
+89
+56
+c0
+20
+60
+00
+00
+20
+30
+ba
+6f
+20
+40
+02
+12
+20
+20
+3a
+6f
+70
+0b
+7e
+00
+70
+01
+77
+06
+20
+40
+3f
+a4
+58
+00
+02
+91
+60
+01
+42
+8e
+58
+00
+02
+9a
+60
+01
+42
+8a
+58
+00
+01
+3c
+60
+01
+42
+92
+58
+00
+02
+b8
+60
+01
+42
+90
+58
+00
+00
+70
+60
+01
+42
+8c
+58
+00
+02
+94
+60
+01
+42
+88
+58
+00
+4a
+e5
+1f
+f0
+fe
+00
+60
+01
+4b
+ad
+60
+01
+4b
+af
+20
+40
+3e
+0b
+58
+00
+4b
+b1
+1f
+f0
+fe
+00
+60
+01
+4c
+79
+60
+01
+4c
+7b
+68
+00
+ce
+5b
+c0
+2d
+02
+4c
+20
+35
+82
+4a
+68
+01
+4d
+a2
+1f
+f0
+fe
+00
+60
+01
+4d
+a2
+68
+01
+4d
+a4
+1f
+f0
+fe
+00
+60
+01
+4d
+a4
+20
+40
+02
+58
+68
+04
+02
+a0
+24
+3a
+02
+46
+68
+01
+4a
+d4
+1f
+f0
+fe
+00
+20
+3a
+02
+46
+60
+01
+4d
+a4
+70
+4c
+e3
+2f
+20
+40
+00
+eb
+70
+82
+80
+03
+20
+60
+00
+00
+70
+4c
+e3
+30
+20
+20
+02
+47
+1c
+e2
+7e
+00
+20
+3a
+02
+bb
+20
+40
+5b
+63
+20
+40
+4d
+99
+58
+00
+00
+00
+60
+04
+40
+40
+60
+01
+47
+f4
+58
+00
+00
+00
+60
+01
+4c
+e4
+60
+01
+4d
+93
+70
+4c
+e3
+33
+20
+20
+02
+47
+20
+40
+68
+8a
+58
+00
+07
+e2
+da
+20
+02
+a0
+d8
+40
+00
+0c
+20
+40
+68
+d3
+20
+40
+68
+8d
+68
+04
+02
+a0
+20
+7a
+00
+00
+68
+00
+cd
+a0
+c2
+80
+02
+65
+c2
+80
+82
+73
+c2
+81
+02
+83
+20
+60
+00
+00
+68
+09
+02
+a4
+68
+01
+02
+aa
+18
+42
+24
+00
+1f
+e2
+22
+00
+1f
+f0
+fe
+00
+60
+01
+4d
+a4
+1a
+22
+7e
+00
+98
+46
+26
+00
+1a
+63
+a6
+00
+1a
+42
+7e
+00
+9a
+66
+7e
+00
+1f
+f0
+fe
+00
+60
+01
+4d
+a2
+20
+60
+00
+00
+68
+09
+02
+a2
+68
+01
+02
+a8
+18
+42
+24
+00
+1f
+e2
+22
+00
+98
+46
+26
+00
+1a
+6b
+26
+00
+1a
+42
+7e
+00
+9a
+66
+7e
+00
+1f
+f0
+fe
+00
+60
+01
+4d
+a2
+1a
+63
+a6
+00
+1a
+22
+7e
+00
+9a
+66
+7e
+00
+1f
+f0
+fe
+00
+60
+01
+4d
+a4
+20
+60
+00
+00
+68
+09
+02
+a0
+68
+01
+02
+a6
+18
+42
+24
+00
+1f
+e2
+22
+00
+98
+46
+26
+00
+1a
+42
+7e
+00
+9a
+66
+7e
+00
+1f
+f0
+fe
+00
+60
+01
+4d
+a2
+1a
+6b
+fe
+00
+9a
+20
+fe
+00
+1f
+f0
+fe
+00
+60
+01
+4d
+a4
+20
+60
+00
+00
+20
+40
+52
+7c
+24
+7a
+00
+00
+20
+20
+00
+70
+78
+34
+7c
+00
+68
+12
+01
+38
+79
+34
+7e
+1a
+60
+12
+00
+4c
+20
+40
+3d
+b0
+70
+00
+a2
+01
+20
+60
+00
+00
+20
+40
+01
+63
+24
+74
+00
+00
+20
+40
+01
+60
+24
+74
+00
+00
+70
+0b
+7f
+01
+70
+0b
+7e
+01
+20
+40
+02
+b4
+68
+00
+8b
+7f
+24
+7a
+00
+00
+20
+40
+01
+63
+24
+74
+00
+00
+20
+20
+3d
+4f
+1a
+62
+7e
+00
+20
+60
+00
+00
+58
+00
+00
+00
+60
+01
+42
+a0
+60
+01
+47
+f4
+60
+00
+c2
+7f
+20
+20
+3f
+a6
+70
+89
+0f
+36
+70
+89
+0b
+5f
+20
+20
+53
+d4
+70
+89
+0f
+2e
+70
+89
+0b
+ff
+20
+20
+53
+d9
+68
+00
+8b
+7e
+20
+00
+00
+0a
+c0
+80
+02
+b4
+20
+60
+00
+00
+20
+60
+00
+00
+70
+0b
+7e
+03
+20
+40
+02
+b4
+70
+4e
+5b
+5a
+20
+40
+3d
+b8
+68
+12
+01
+38
+79
+3f
+fe
+0f
+60
+12
+00
+4c
+20
+40
+3d
+b0
+d8
+5f
+ff
+ff
+20
+20
+3c
+da
+20
+40
+7c
+20
+da
+20
+47
+e4
+20
+40
+7f
+9f
+1f
+e2
+04
+00
+20
+40
+7c
+24
+18
+42
+7e
+00
+20
+7a
+00
+00
+c0
+00
+82
+e1
+c0
+01
+82
+e4
+20
+20
+7c
+5a
+68
+00
+80
+7c
+20
+3a
+02
+d2
+20
+40
+61
+d9
+68
+00
+80
+7c
+24
+3a
+7c
+8c
+68
+00
+8b
+7d
+c5
+84
+fc
+87
+c0
+02
+02
+d7
+c0
+14
+02
+dd
+20
+20
+7c
+7b
+68
+01
+47
+f4
+c3
+01
+82
+da
+20
+20
+7c
+a4
+58
+00
+00
+00
+60
+02
+00
+51
+20
+60
+00
+00
+70
+00
+7c
+37
+68
+01
+4e
+5c
+60
+01
+00
+51
+20
+60
+00
+00
+20
+40
+3e
+ff
+70
+01
+77
+06
+20
+20
+7c
+97
+70
+01
+77
+06
+68
+00
+c7
+dc
+c0
+00
+02
+e8
+70
+01
+77
+17
+70
+42
+5e
+01
+20
+20
+7c
+a2
+20
+40
+32
+df
+24
+22
+b5
+68
+68
+00
+80
+47
+c3
+01
+b5
+71
+68
+00
+c1
+65
+c0
+09
+b5
+62
+68
+01
+4a
+ca
+1f
+e6
+7c
+14
+24
+21
+35
+62
+60
+01
+00
+91
+68
+00
+ca
+c9
+60
+00
+80
+90
+58
+00
+4a
+cc
+60
+01
+01
+79
+20
+20
+35
+62
+68
+01
+00
+91
+60
+01
+4a
+ca
+1f
+e6
+7c
+14
+24
+21
+35
+8f
+98
+00
+72
+00
+68
+00
+80
+90
+60
+00
+ca
+c9
+68
+01
+01
+79
+98
+00
+0c
+00
+d8
+a0
+4a
+cc
+20
+40
+7e
+45
+20
+20
+35
+8f
+20
+40
+3b
+36
+20
+20
+3c
+dc
+70
+0b
+7d
+20
+20
+40
+7c
+27
+20
+20
+03
+0b
+60
+0a
+00
+34
+70
+47
+48
+01
+58
+00
+ff
+ff
+60
+01
+00
+32
+70
+00
+73
+01
+20
+60
+00
+00
+20
+40
+3b
+aa
+20
+40
+03
+13
+20
+20
+32
+67
+1c
+40
+c2
+01
+20
+40
+3a
+54
+18
+00
+48
+03
+20
+40
+3a
+42
+20
+40
+3b
+ae
+20
+40
+3b
+b4
+20
+40
+3b
+c5
+20
+20
+37
+5c
+78
+54
+7c
+00
+68
+01
+00
+32
+d8
+40
+ff
+ff
+98
+46
+7c
+00
+24
+62
+80
+00
+68
+02
+00
+34
+20
+38
+03
+24
+9d
+06
+7e
+00
+20
+20
+03
+25
+9c
+46
+7e
+00
+1f
+e6
+7c
+04
+24
+61
+00
+00
+18
+00
+7e
+00
+60
+01
+00
+32
+78
+34
+7c
+00
+20
+60
+00
+00
+60
+0c
+02
+a0
+20
+40
+7e
+53
+68
+0c
+02
+a0
+20
+20
+30
+7c
+20
+40
+52
+7a
+24
+7a
+00
+00
+20
+40
+03
+33
+20
+20
+6d
+fd
+68
+00
+c1
+32
+c1
+00
+80
+00
+68
+00
+c3
+cd
+20
+7a
+00
+00
+1f
+e2
+22
+00
+70
+43
+cd
+00
+1a
+22
+7e
+00
+c0
+28
+4d
+dc
+20
+60
+00
+00
+e8
+c0
+80
+00
+c0
+05
+03
+3f
+20
+20
+4e
+14
+e8
+c0
+80
+00
+1f
+e2
+0e
+00
+e8
+c1
+00
+00
+1f
+e2
+22
+00
+1a
+62
+7e
+00
+9a
+26
+26
+00
+58
+00
+00
+0b
+e0
+a0
+80
+00
+18
+e2
+7e
+00
+e0
+a0
+80
+00
+e8
+c1
+00
+00
+c0
+01
+03
+4d
+c0
+01
+83
+54
+20
+20
+3b
+f1
+58
+02
+00
+08
+e0
+a3
+00
+00
+58
+00
+02
+00
+e0
+a2
+00
+00
+18
+00
+7e
+0c
+9a
+40
+a4
+00
+20
+20
+4e
+20
+58
+03
+00
+0c
+e0
+a3
+00
+00
+58
+00
+00
+06
+e0
+a4
+00
+00
+18
+00
+7e
+10
+9a
+40
+a4
+00
+20
+20
+4e
+20
+20
+40
+52
+c4
+18
+00
+24
+00
+20
+40
+52
+d0
+1f
+e2
+0a
+00
+68
+01
+02
+cd
+1f
+e2
+26
+00
+68
+01
+02
+cb
+98
+00
+0c
+00
+20
+40
+03
+65
+20
+20
+51
+10
+e8
+c0
+80
+00
+c0
+05
+03
+68
+20
+20
+51
+16
+e8
+c0
+80
+00
+1f
+e2
+0e
+00
+e8
+c1
+00
+00
+1f
+e2
+22
+00
+e8
+c1
+00
+00
+60
+01
+02
+a0
+1a
+62
+7e
+00
+9a
+26
+26
+00
+20
+40
+52
+d0
+58
+00
+00
+0b
+e0
+a0
+80
+00
+18
+e2
+7e
+00
+e0
+a0
+80
+00
+68
+01
+02
+a0
+20
+20
+03
+4a
+68
+01
+02
+cb
+1f
+e2
+0c
+00
+e8
+c0
+80
+00
+1f
+e1
+04
+0f
+1f
+f1
+fe
+00
+c0
+04
+cb
+18
+c0
+03
+cb
+18
+c0
+05
+03
+85
+c0
+02
+83
+83
+c0
+00
+cb
+05
+c0
+02
+4b
+18
+20
+60
+00
+00
+20
+40
+03
+85
+20
+20
+4b
+11
+58
+00
+00
+03
+60
+00
+cc
+ff
+58
+00
+00
+02
+e0
+a0
+80
+00
+1f
+e2
+72
+00
+20
+40
+7e
+45
+df
+20
+00
+04
+d8
+c0
+4c
+ff
+20
+40
+00
+ed
+70
+4d
+87
+02
+20
+60
+00
+00
+ec
+6b
+aa
+55
+00
+00
+aa
+55
+40
+00
+00
+40
+29
+04
+00
+00
+80
+09
+00
+00
+0c
+00
+11
+00
+00
+00
+00
+00
+00
+00
+35
+00
+00
+00
+4f
+02
+00
+00
+00
+00
+00
+00
+00
+00
+80
+00
+00
+09
+18
+00
+00
+c0
+00
+00
+00
+00
+00
+48
+00
+00
+80
+e0
+00
+90
+00
+00
+00
+00
+00
+a0
+01
+00
+4c
+00
+00
+00
+aa
+55
+03
+00
+4a
+41
+40
+25
+00
+aa
+55
+06
+00
+40
+41
+36
+08
+22
+08
+66
+22
+aa
+55
+17
+00
+02
+47
+16
+42
+6c
+75
+65
+74
+6f
+6f
+74
+68
+20
+33
+2e
+30
+20
+4b
+65
+79
+62
+6f
+61
+72
+64
+aa
+55
+03
+00
+80
+42
+0e
+00
+01
+aa
+55
+01
+00
+84
+42
+01
+aa
+55
+01
+00
+47
+47
+0a
+aa
+55
+01
+00
+dc
+47
+00
+aa
+55
+01
+00
+f6
+47
+01
+aa
+55
+01
+00
+72
+41
+01
+aa
+55
+0e
+00
+5b
+47
+06
+03
+11
+00
+00
+01
+02
+10
+24
+11
+00
+12
+01
+00
+aa
+55
+01
+00
+71
+47
+00
+aa
+55
+6a
+02
+2a
+48
+04
+00
+11
+01
+00
+10
+02
+11
+24
+00
+01
+00
+00
+36
+01
+aa
+09
+00
+00
+0a
+00
+01
+00
+00
+09
+00
+01
+35
+03
+19
+11
+24
+09
+00
+04
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+11
+35
+03
+19
+00
+11
+09
+00
+05
+35
+03
+19
+10
+02
+09
+00
+06
+35
+09
+09
+65
+6e
+09
+00
+6a
+09
+01
+00
+09
+00
+09
+35
+08
+35
+06
+19
+11
+24
+09
+01
+00
+09
+00
+0d
+35
+0f
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+13
+35
+03
+19
+00
+11
+09
+01
+00
+25
+3d
+42
+72
+6f
+61
+64
+63
+6f
+6d
+20
+42
+6c
+75
+65
+74
+6f
+6f
+74
+68
+20
+57
+69
+72
+65
+6c
+65
+73
+73
+20
+20
+4b
+65
+79
+62
+6f
+61
+72
+64
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+20
+09
+01
+01
+25
+08
+4b
+65
+79
+62
+6f
+61
+72
+64
+09
+01
+02
+25
+10
+42
+72
+6f
+61
+64
+63
+6f
+6d
+20
+43
+6f
+72
+70
+2e
+20
+20
+09
+02
+00
+09
+01
+00
+09
+02
+01
+09
+01
+11
+09
+02
+02
+08
+40
+09
+02
+03
+08
+21
+09
+02
+04
+28
+01
+09
+02
+05
+28
+01
+09
+02
+06
+35
+99
+35
+97
+08
+22
+25
+93
+05
+01
+09
+06
+a1
+01
+85
+01
+75
+01
+95
+08
+05
+07
+19
+e0
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05
+91
+02
+95
+01
+75
+03
+91
+03
+95
+06
+75
+08
+15
+00
+26
+ff
+00
+05
+07
+19
+00
+29
+ff
+81
+00
+c0
+05
+0c
+09
+01
+a1
+01
+85
+02
+15
+00
+25
+01
+75
+01
+95
+16
+0a
+b1
+01
+0a
+23
+02
+0a
+ae
+01
+0a
+8a
+01
+09
+40
+09
+6f
+0a
+21
+02
+09
+b6
+09
+cd
+09
+b5
+09
+e2
+09
+ea
+09
+e9
+09
+30
+0a
+83
+01
+0a
+05
+03
+0a
+07
+03
+0a
+08
+03
+0a
+01
+03
+0a
+9e
+01
+0a
+0a
+03
+09
+70
+81
+02
+95
+01
+75
+02
+81
+03
+c0
+09
+02
+07
+35
+08
+35
+06
+09
+04
+09
+09
+01
+00
+09
+02
+0b
+09
+01
+00
+09
+02
+0c
+09
+1f
+40
+09
+02
+0d
+28
+00
+09
+02
+0e
+28
+01
+09
+02
+0f
+09
+00
+12
+09
+02
+10
+09
+00
+00
+03
+10
+02
+12
+00
+00
+01
+00
+01
+00
+01
+36
+00
+a1
+09
+00
+00
+0a
+00
+01
+00
+01
+09
+00
+01
+35
+03
+19
+12
+00
+09
+00
+04
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+01
+35
+03
+19
+00
+01
+09
+00
+06
+35
+09
+09
+65
+6e
+09
+00
+6a
+09
+01
+00
+09
+00
+09
+35
+08
+35
+06
+19
+12
+00
+09
+01
+00
+09
+01
+00
+25
+2f
+42
+72
+6f
+61
+64
+63
+6f
+6d
+20
+42
+6c
+75
+65
+74
+6f
+6f
+74
+68
+20
+57
+69
+72
+65
+6c
+65
+73
+73
+20
+4b
+65
+79
+62
+6f
+61
+72
+64
+20
+50
+6e
+50
+20
+53
+65
+72
+76
+65
+72
+09
+01
+01
+25
+08
+4b
+65
+79
+62
+6f
+61
+72
+64
+09
+02
+00
+09
+01
+03
+09
+02
+01
+09
+0a
+5c
+09
+02
+02
+09
+85
+02
+09
+02
+03
+09
+00
+01
+09
+02
+04
+28
+01
+09
+02
+05
+09
+00
+02
+00
+aa
+55
+86
+00
+a8
+4d
+14
+2b
+04
+29
+1d
+00
+35
+1e
+1a
+39
+16
+00
+1b
+00
+3a
+1f
+08
+3c
+07
+3d
+06
+63
+3b
+20
+15
+17
+09
+0a
+19
+05
+22
+21
+18
+1c
+0d
+0b
+10
+11
+23
+24
+0c
+30
+0e
+3f
+36
+00
+2e
+25
+12
+40
+0f
+00
+37
+00
+41
+26
+00
+00
+00
+2c
+44
+51
+4c
+00
+00
+81
+85
+00
+00
+00
+00
+00
+00
+2a
+31
+00
+28
+00
+42
+43
+13
+2f
+33
+34
+00
+38
+2d
+27
+00
+00
+80
+83
+00
+87
+00
+45
+00
+00
+00
+00
+86
+00
+7f
+3e
+00
+82
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+4f
+00
+00
+00
+00
+00
+52
+00
+50
+aa
+55
+02
+00
+59
+47
+2a
+48
+aa
+55
+01
+00
+32
+41
+43
+aa
+55
+01
+00
+fb
+41
+00
+aa
+55
+08
+00
+38
+41
+ff
+ff
+8f
+f8
+83
+9d
+59
+82
+aa
+55
+01
+00
+dc
+07
+00
+aa
+55
+01
+00
+a2
+00
+00
+aa
+55
+01
+00
+dd
+07
+00
+aa
+55
+01
+00
+16
+00
+27
+aa
+55
+01
+00
+fd
+47
+ff
+aa
+55
+01
+00
+f7
+47
+ff
+aa
+55
+01
+00
+31
+41
+01
+aa
+55
+02
+00
+13
+42
+40
+03
+aa
+55
+01
+00
+f7
+41
+08
+aa
+55
+02
+00
+f5
+41
+00
+02
+aa
+55
+01
+00
+33
+41
+00
+aa
+55
+01
+00
+6e
+41
+80
+aa
+55
+02
+00
+e1
+4c
+02
+01
+aa
+55
+12
+00
+46
+4e
+08
+09
+0a
+0b
+0c
+0d
+0e
+11
+12
+13
+14
+15
+16
+17
+18
+19
+1a
+1b
+aa
+55
+06
+00
+a0
+4d
+01
+30
+9f
+3e
+cd
+4d
+aa
+55
+08
+00
+16
+42
+8f
+10
+ce
+00
+0a
+0b
+ef
+0f
+aa
+55
+01
+00
+f8
+41
+00
+aa
+55
+08
+00
+a3
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+02
+00
+5d
+41
+02
+24
+aa
+55
+08
+00
+4d
+41
+12
+00
+00
+02
+12
+00
+00
+02
+aa
+55
+02
+00
+5b
+41
+20
+00
+aa
+55
+04
+00
+57
+41
+20
+00
+00
+20
+aa
+55
+04
+00
+5f
+41
+80
+03
+00
+06
+aa
+55
+02
+00
+5c
+4e
+00
+13
+aa
+55
+02
+00
+9b
+42
+30
+3f
+aa
+55
+01
+00
+aa
+42
+20
+aa
+55
+7f
+00
+6c
+46
+07
+ff
+0a
+fb
+0b
+ff
+1a
+fb
+1b
+fb
+1c
+fb
+1d
+f6
+1e
+f2
+1f
+ee
+20
+ea
+21
+e6
+22
+e2
+23
+de
+24
+da
+25
+d6
+26
+d2
+27
+ce
+28
+ca
+29
+c6
+2a
+c2
+2b
+bd
+2c
+b9
+2d
+b5
+2e
+b1
+2f
+ad
+30
+a9
+31
+80
+32
+80
+33
+80
+34
+c0
+35
+c1
+36
+c2
+37
+c3
+38
+c4
+39
+c5
+3a
+c6
+3b
+c7
+3c
+06
+3d
+07
+3e
+46
+3f
+85
+40
+86
+41
+87
+42
+c6
+43
+c7
+44
+d6
+45
+d7
+46
+e6
+47
+f5
+48
+00
+49
+f8
+4a
+7f
+4e
+ec
+4f
+5e
+55
+d0
+56
+c0
+57
+4c
+58
+6c
+59
+50
+68
+e4
+69
+00
+6a
+00
+6b
+30
+ff
+aa
+55
+02
+00
+63
+41
+6c
+46
+aa
+55
+00
+00
+d8
+46
+aa
+55
+0a
+00
+be
+4a
+55
+d0
+56
+c0
+57
+4c
+58
+6c
+59
+50
+aa
+55
+0a
+00
+b4
+4a
+55
+d0
+56
+c0
+57
+4c
+58
+6c
+59
+50
+8a
+b3
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+06
+c9
Index: output/geneep.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: output/geneep.exe
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: output/otp.dat
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/otp.dat	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/otp.dat	(working copy)
@@ -0,0 +1,12 @@
+00
+02
+aa
+55
+00
+00
+aa
+55
+00
+00
+82
+78
Index: output/ramcode.rom
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/ramcode.rom	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/ramcode.rom	(working copy)
@@ -0,0 +1,912 @@
+c5128017
+c000002e
+c001802b
+c002815c
+c005032b
+c013831b
+c014030a
+c0158310
+c02101a0
+c02181d9
+c02802ea
+c02a02f9
+c048021b
+c04901e1
+c04a01e7
+c04a8182
+c0580305
+c0588152
+c0590184
+c0598194
+c05b029b
+c05c8168
+20203bf1
+c003815a
+c00c0068
+c00d833c
+c011835b
+c01200a7
+c01f02ae
+c01f82b1
+c0438104
+c04682c3
+c04702cd
+c04782b9
+c04e0377
+c04f832f
+c066821e
+c0678055
+c068010b
+c07101bc
+c07181a4
+c0730032
+20203bf1
+204000ab
+20400070
+20203015
+6810813b
+60008b80
+70800608
+20203003
+6800807c
+203a0037
+204061d9
+6800807c
+247a0000
+68008055
+207a0000
+c0030046
+c008003c
+2020623e
+6800c748
+c1000000
+c0008044
+d8e0000a
+20407e53
+247a0000
+70474800
+2020629b
+20748000
+20200046
+68008177
+c281629b
+c2800049
+6800c25e
+203a62c7
+6800844d
+c4018000
+c4010000
+68020465
+d8400320
+98408400
+1c427e00
+98467c00
+24610000
+20206267
+da2047df
+20407f9f
+207a0000
+1fe22600
+2040005b
+20203ea5
+c10c0000
+c0036614
+c001005f
+20203e7d
+70429d00
+680147f4
+c283bf08
+2fec0001
+20408065
+20203f08
+68008450
+c1010000
+20203e7b
+680102cd
+203a4dfc
+680082cf
+c000806d
+20204dbb
+2040527a
+247a0000
+20204dc3
+6800c7dc
+203a0074
+6800c793
+207a0000
+20400163
+20740000
+1ff0fe00
+1fe20c00
+204000e3
+6000cce6
+c0008087
+1fe20400
+18c22200
+6800c040
+c3000084
+1a220c00
+c6848000
+18427e00
+c0018091
+20203bf1
+1a220c00
+d8a000f8
+202000db
+204000e3
+204000e3
+60008b7d
+2040008c
+20207c33
+204000e6
+18c20400
+18508400
+60094bad
+20600000
+204000e3
+1fe22200
+18c27e00
+600102b7
+1a20a201
+20404b2c
+18a0a5fe
+680142b7
+e0a10000
+580000a1
+e0a08000
+1a20f3ff
+680102b7
+1fe20c00
+204000dd
+1a420c00
+e8c10000
+60014e5f
+1fe0f202
+20407e45
+704e5e32
+20600000
+da400000
+2040527a
+247a0000
+2020524d
+680a4d8a
+1c427e00
+98467e00
+d8400640
+9846fc00
+20407efd
+1807fe00
+207a0000
+1c420400
+600a4d8a
+68094ce4
+18508400
+9840fe00
+1ff0fe00
+60014ce4
+1ff0fe00
+1fe17e03
+c1800000
+6800cda0
+c28000c2
+c28080c4
+c28100c6
+20600000
+708971bf
+202000ca
+708971af
+202000ca
+7089718f
+6800cda1
+60108973
+202000ca
+68108053
+79207e07
+60108053
+68108973
+1fe1fe30
+60108973
+70890674
+7089067c
+708972aa
+20001388
+68190150
+68108053
+793ffe07
+60108053
+18508400
+60094da6
+20600000
+204000e3
+1fe27200
+204000df
+2020008c
+204000e3
+e0a08000
+c20000df
+20600000
+204000e6
+e8c08000
+20600000
+58004bad
+98c67c00
+24628000
+d8c04ae5
+20600000
+df200003
+d8c04ce1
+18c22200
+68014c7b
+1ff0fe00
+1fe20a00
+1a220c00
+e8c08000
+e0a08000
+204000fa
+c20000f2
+18a27e00
+1ff0fe00
+60014c7b
+20600000
+58004c79
+98a67c00
+24628000
+d8a04bb1
+20600000
+58000010
+d8e00003
+20407e68
+9a40a400
+20600000
+da200000
+680a47ec
+1c422400
+1a427e00
+98467c00
+244100ff
+20207c09
+60088259
+6800cd9e
+1fe0fe01
+6000cd9e
+68008259
+207a0000
+1fe0ffff
+60008259
+20400130
+20400137
+2040012a
+20400118
+2020010f
+6800ce5e
+207a0000
+1fe0ffff
+6000ce5e
+c1808000
+704e5e32
+680147f4
+c4028000
+68014e5f
+207a0000
+2040527e
+247a0000
+68014e5f
+1fe22200
+20404b2c
+1a20f202
+d8c04e61
+20207e45
+6800cd87
+207a0000
+1fe0ffff
+6000cd87
+203a3fa4
+20203fa6
+6800c7f2
+207a0000
+1fe0ffff
+6000c7f2
+247a0000
+20403ebd
+20204b22
+6800cd86
+207a0000
+1fe0ffff
+6000cd86
+20600000
+1a627e00
+1fe17ef0
+c1280000
+20400144
+1a627e00
+207a0000
+6000cce3
+202000eb
+1a627e00
+c0058148
+c0010150
+20600000
+704e5e28
+5800000a
+60014e5f
+680142b7
+e0a10000
+580001a1
+e0a10000
+20600000
+704e5e00
+20600000
+70416e7f
+20403cf3
+6800ce5b
+207a0000
+704e5b00
+1c427e00
+60024d8a
+20600000
+20203bf1
+20203bf1
+20403392
+20403407
+20403024
+20203022
+68014c79
+68094c7b
+20200165
+68014bad
+68094baf
+98467c00
+2022e9b1
+2020320b
+6800c219
+247a0000
+70804206
+58000f0c
+20403da7
+58030d40
+20403bf3
+37d98200
+1e226000
+20403b36
+20001388
+20203d9d
+6800c219
+243a017a
+20403d91
+20007530
+20007530
+20007530
+20403b0a
+70804204
+6810896b
+1fe17ecf
+6010896b
+1fe1fe30
+6010896b
+20600000
+20400174
+20203aaf
+c6118000
+20403cab
+6801c210
+207a0000
+6800c131
+207a0000
+2040527e
+247a0000
+20403dca
+247a0000
+20403b36
+6800c7dc
+203a3d25
+6800c793
+207a0000
+20203d25
+20400163
+24740000
+20400160
+24740000
+700b7f01
+700b7e01
+204002b4
+68008b7f
+247a0000
+20400163
+24740000
+20203d2d
+20403e25
+20406dec
+204035d6
+20203480
+78547c00
+204061d9
+68008048
+207a0000
+c283df10
+c00101ac
+c00381b9
+20205ee0
+18007e11
+204061b5
+68008049
+1fe20400
+c00001b4
+c00701b4
+c00e01b4
+20600000
+e0a08000
+6800c702
+e0a08000
+5800000e
+20205fa6
+20406055
+70007264
+20600000
+6800807d
+c00181c8
+c0025c67
+c00381d6
+20205b92
+68008030
+c280ddb5
+680104e2
+1fe3fe00
+1fe67c0f
+24215db5
+20205da4
+680084df
+60008445
+c00c01d4
+c0098307
+c01981ce
+20205c58
+6800844d
+79207e00
+6000844d
+700b7d01
+20407c27
+20205c83
+20403f9e
+20205ccc
+680084df
+60008446
+20205cf3
+20403d61
+20403be2
+20213498
+20403204
+24343498
+20403812
+243a01a1
+20600000
+60088017
+1840a204
+20203a86
+60088017
+1840a200
+20203ab6
+204001e4
+58000500
+20403bf3
+204001ef
+6800cd99
+d8a046d8
+243a01fb
+20200202
+70890601
+7089003c
+708901e0
+70896d12
+2000000a
+70890201
+7089023d
+2000000a
+708903b7
+2000000a
+7089027d
+20600000
+6802cab4
+e0a28000
+e8c28000
+e0a28000
+708956c2
+708955d0
+20600000
+6802cabe
+e0a28000
+e8c28000
+e0a28000
+708956df
+2040020a
+708955df
+20600000
+20000004
+708955d1
+20000004
+708955d2
+20000004
+708955d4
+20000004
+20600000
+708955d4
+20000004
+708955d2
+20000004
+708955d1
+20000004
+708955d0
+708956c0
+20600000
+2030ba6f
+20400212
+20203a6f
+700b7e00
+70017706
+20403fa4
+58000291
+6001428e
+5800029a
+6001428a
+5800013c
+60014292
+580002b8
+60014290
+58000070
+6001428c
+58000294
+60014288
+58004ae5
+1ff0fe00
+60014bad
+60014baf
+20403e0b
+58004bb1
+1ff0fe00
+60014c79
+60014c7b
+6800ce5b
+c02d024c
+2035824a
+68014da2
+1ff0fe00
+60014da2
+68014da4
+1ff0fe00
+60014da4
+20400258
+680402a0
+243a0246
+68014ad4
+1ff0fe00
+203a0246
+60014da4
+704ce32f
+204000eb
+70828003
+20600000
+704ce330
+20200247
+1ce27e00
+203a02bb
+20405b63
+20404d99
+58000000
+60044040
+600147f4
+58000000
+60014ce4
+60014d93
+704ce333
+20200247
+2040688a
+580007e2
+da2002a0
+d840000c
+204068d3
+2040688d
+680402a0
+207a0000
+6800cda0
+c2800265
+c2808273
+c2810283
+20600000
+680902a4
+680102aa
+18422400
+1fe22200
+1ff0fe00
+60014da4
+1a227e00
+98462600
+1a63a600
+1a427e00
+9a667e00
+1ff0fe00
+60014da2
+20600000
+680902a2
+680102a8
+18422400
+1fe22200
+98462600
+1a6b2600
+1a427e00
+9a667e00
+1ff0fe00
+60014da2
+1a63a600
+1a227e00
+9a667e00
+1ff0fe00
+60014da4
+20600000
+680902a0
+680102a6
+18422400
+1fe22200
+98462600
+1a427e00
+9a667e00
+1ff0fe00
+60014da2
+1a6bfe00
+9a20fe00
+1ff0fe00
+60014da4
+20600000
+2040527c
+247a0000
+20200070
+78347c00
+68120138
+79347e1a
+6012004c
+20403db0
+7000a201
+20600000
+20400163
+24740000
+20400160
+24740000
+700b7f01
+700b7e01
+204002b4
+68008b7f
+247a0000
+20400163
+24740000
+20203d4f
+1a627e00
+20600000
+58000000
+600142a0
+600147f4
+6000c27f
+20203fa6
+70890f36
+70890b5f
+202053d4
+70890f2e
+70890bff
+202053d9
+68008b7e
+2000000a
+c08002b4
+20600000
+20600000
+700b7e03
+204002b4
+704e5b5a
+20403db8
+68120138
+793ffe0f
+6012004c
+20403db0
+d85fffff
+20203cda
+20407c20
+da2047e4
+20407f9f
+1fe20400
+20407c24
+18427e00
+207a0000
+c00082e1
+c00182e4
+20207c5a
+6800807c
+203a02d2
+204061d9
+6800807c
+243a7c8c
+68008b7d
+c584fc87
+c00202d7
+c01402dd
+20207c7b
+680147f4
+c30182da
+20207ca4
+58000000
+60020051
+20600000
+70007c37
+68014e5c
+60010051
+20600000
+20403eff
+70017706
+20207c97
+70017706
+6800c7dc
+c00002e8
+70017717
+70425e01
+20207ca2
+204032df
+2422b568
+68008047
+c301b571
+6800c165
+c009b562
+68014aca
+1fe67c14
+24213562
+60010091
+6800cac9
+60008090
+58004acc
+60010179
+20203562
+68010091
+60014aca
+1fe67c14
+2421358f
+98007200
+68008090
+6000cac9
+68010179
+98000c00
+d8a04acc
+20407e45
+2020358f
+20403b36
+20203cdc
+700b7d20
+20407c27
+2020030b
+600a0034
+70474801
+5800ffff
+60010032
+70007301
+20600000
+20403baa
+20400313
+20203267
+1c40c201
+20403a54
+18004803
+20403a42
+20403bae
+20403bb4
+20403bc5
+2020375c
+78547c00
+68010032
+d840ffff
+98467c00
+24628000
+68020034
+20380324
+9d067e00
+20200325
+9c467e00
+1fe67c04
+24610000
+18007e00
+60010032
+78347c00
+20600000
+600c02a0
+20407e53
+680c02a0
+2020307c
+2040527a
+247a0000
+20400333
+20206dfd
+6800c132
+c1008000
+6800c3cd
+207a0000
+1fe22200
+7043cd00
+1a227e00
+c0284ddc
+20600000
+e8c08000
+c005033f
+20204e14
+e8c08000
+1fe20e00
+e8c10000
+1fe22200
+1a627e00
+9a262600
+5800000b
+e0a08000
+18e27e00
+e0a08000
+e8c10000
+c001034d
+c0018354
+20203bf1
+58020008
+e0a30000
+58000200
+e0a20000
+18007e0c
+9a40a400
+20204e20
+5803000c
+e0a30000
+58000006
+e0a40000
+18007e10
+9a40a400
+20204e20
+204052c4
+18002400
+204052d0
+1fe20a00
+680102cd
+1fe22600
+680102cb
+98000c00
+20400365
+20205110
+e8c08000
+c0050368
+20205116
+e8c08000
+1fe20e00
+e8c10000
+1fe22200
+e8c10000
+600102a0
+1a627e00
+9a262600
+204052d0
+5800000b
+e0a08000
+18e27e00
+e0a08000
+680102a0
+2020034a
+680102cb
+1fe20c00
+e8c08000
+1fe1040f
+1ff1fe00
+c004cb18
+c003cb18
+c0050385
+c0028383
+c000cb05
+c0024b18
+20600000
+20400385
+20204b11
+58000003
+6000ccff
+58000002
+e0a08000
+1fe27200
+20407e45
+df200004
+d8c04cff
+204000ed
+704d8702
+20600000
Index: output/sched.rom
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/sched.rom	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/output/sched.rom	(working copy)
@@ -0,0 +1,558 @@
+4000:
+29   #mem_patch00
+04   #mem_patch01
+00   #mem_patch02
+00   #mem_patch03
+80   #mem_patch04
+09   #mem_patch05
+00   #mem_patch06
+00   #mem_patch07
+0c   #mem_patch08
+00   #mem_patch09
+11   #mem_patch0A
+00   #mem_patch0B
+00   #mem_patch0C
+00   #mem_patch0D
+00   #mem_patch0E
+00   #mem_patch0F
+00   #mem_patch10
+00   #mem_patch11
+35   #mem_patch12
+00   #mem_patch13
+00   #mem_patch14
+00   #mem_patch15
+4f   #mem_patch16
+02   #mem_patch17
+00   #mem_patch18
+00   #mem_patch19
+00   #mem_patch1A
+00   #mem_patch1B
+00   #mem_patch1C
+00   #mem_patch1D
+00   #mem_patch1E
+00   #mem_patch1F
+80   #mem_patch20
+00   #mem_patch21
+00   #mem_patch22
+09   #mem_patch23
+18   #mem_patch24
+00   #mem_patch25
+00   #mem_patch26
+c0   #mem_patch27
+00   #mem_patch28
+00   #mem_patch29
+00   #mem_patch2A
+00   #mem_patch2B
+00   #mem_patch2C
+48   #mem_patch2D
+00   #mem_patch2E
+00   #mem_patch2F
+80   #mem_patch30
+e0   #mem_patch31
+00   #mem_patch32
+90   #mem_patch33
+00   #mem_patch34
+00   #mem_patch35
+00   #mem_patch36
+00   #mem_patch37
+00   #mem_patch38
+a0   #mem_patch39
+01   #mem_patch3A
+00   #mem_patch3B
+4c   #mem_patch3C
+00   #mem_patch3D
+00   #mem_patch3E
+00   #mem_patch3F
+
+
+414a: 40 25 00
+
+4140:36 08 22 08 66 22    
+4702:
+'Bluetooth 3.0 Keyboard
+4280:0e 00
+4282:01
+4284:01
+4747:0a
+47dc:00
+47f6:01
+
+4172:01
+
+475b:
+06
+03#Type: Complete list of 16-bit UUIDs
+1100 0001 0210 2411  0012  0100
+
+4771:00
+
+#mouse uuid
+482a:
+#uuids
+04 0011 0100 1002 1124
+
+#handle
+00010000
+
+#total length
+3601aa
+
+#attribute start, first 4 digit is attribute ID
+090000 0a 00010000
+090001 3503 191124
+090004 350d 3506 190100 090011 3503 190011
+090005 3503 191002
+090006 3509 09656e 09006a 090100
+090009 3508 3506 191124 090100
+09000d 350f 350d 3506 190100 090013 3503 190011
+
+#Service Name
+#090100 2517
+#'Apple Wireless Keyboard
+#41 70 70 6c 65 20 57 69 72 65 6c 65 73 73 20 4b 65 79 62 6f 61 72 64
+#Service Name
+090100 253d
+#'Broadcom Bluetooth Wireless  Keyboard                        
+4272 6f61 6463 6f6d 2042 6c75 6574 6f6f 7468 2057 6972 656c 6573 7320 204b 6579 626f 6172 6420 
+2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 20
+
+#Service Description
+090101 2508
+#'Keyboard
+4b6579626f617264
+
+#Provider Name
+#090102 250a
+#'Apple Inc.
+#41 70 70 6c 65 20 49 6e 63 2e
+#Provider Name
+090102 2510
+#'Broadcom Corp.  
+4272 6f61 6463 6f6d 2043 6f72 702e 2020
+
+090200 090100
+090201 090111
+090202 0840
+090203 0821
+090204 2801
+090205 2801
+090206 3599 3597 0822 2593
+
+# hid descriptor
+0501 # Usage Page(Generic Desktop)
+0906 # Usage(Keyboard)
+a101 # Collection(Application)
+8501 # Report ID(1)
+7501 # Report Size(1)
+9508 # Report Count(8)
+0507 # Usage Page(Keyboard/Keypad)
+19e0 # Usage Minimum(224)
+29e7 # Usage Maximum(231)
+1500 # Logical Minimum(0)
+2501 # Logical Maximum(1)
+8102 # Input(Data Variable Absolute) ; Modifier byte
+9501 # Report Count(1)
+7508 # Report Size(8)
+8103 # Input(Constant Variable Absolute) ; 
+9505 # Report Count(5)
+7501 # Report Size(1)
+0508 # Usage Page(LEDs)
+1901 # Usage Minimum(1)
+2905 # Usage Maximum(5)
+9102 # Output(Data Variable Absolute) ; LED report
+9501 # Report Count(1)
+7503 # Report Size(3)
+9103 # Output(Constant Variable Absolute) ; 
+9506 # Report Count(6)
+7508 # Report Size(8)
+1500 # Logical Minimum(0)
+26ff00 # Logical Maximum(255)
+0507 # Usage Page(Keyboard/Keypad)
+1900 # Usage Minimum(0)
+29ff # Usage Maximum(255)
+8100 # Input(Data Array) ; Key arrarys 6 bytes
+c0 # End Collection
+
+050c # Usage Page(Consumer)
+0901 # Usage(Control)
+a101 # Collection(Application)
+8502 # Report ID(2)
+1500 # Logical Minimum(0)
+2501 # Logical Maximum(1)
+7501 # Report Size(1)
+9516 # Report Count(22)
+0ab101 # Usage(433)
+0a2302 # Usage(AC Home)					#01 home
+0aae01 # Usage(virtual keyboard)                        #02
+0a8a01 # Usage(AL Email Reader)                      #03
+0940 # Usage(Menu)						#04 menu
+096f # Usage(Lignt Down)					#05
+0a2102 # Usage(AC Search) 					#06
+09b6 # Usage(Scan Previous Track) 			#07 previous music
+09cd # Usage(205)							#08 start music
+09b5 # Usage(Scan Next Track)				#09 next music
+09e2 # Usage(Mute)						#0a
+09ea # Usage(Volume Down)					#0b
+09e9 # Usage(Volume Up)					#0c
+0930 # Usage(Power)                                         #0d
+0a8301 # Usage(music)                                      #0e
+0a0503 # Usage(773)
+0a0703 # Usage(775)
+0a0803 # Usage(776)
+0a0103 # Usage(769)
+0a9e01 # Usage(AL Terminal Lock/Screensaver)	#13
+0a0a03 # Usage(778)
+#0a0b03 # Usage(779)
+0970 # Usage(Lignt Up)						#15
+8102 # Input(Data Variable Absolute)
+9501 # Report Count(1)
+7502 # Report Size(2)
+8103 # Input(Constant Variable Absolute)
+c0 # End Collection
+
+090207 3508 3506 090409 090100
+09020b 090100
+09020c 091f40
+09020d 2800
+09020e 2801
+09020f 090012
+090210 090000
+#attribute end
+
+#uuids for pnpInformation	
+03 1002 1200 0001
+
+#handle
+00010001
+
+#total length 90 bytes
+3600a1
+
+#attribute list
+090000 0a00010001
+090001 3503 191200
+090004 350d 3506 190100 090001 3503 190001
+090006 3509 09656e 09006a 090100
+090009 3508 3506 191200 090100
+090100 252f42726f6164636f6d20426c7565746f6f746820576972656c657373204b6579626f61726420506e5020536572766572
+090101 25084b6579626f617264
+090200 090103
+090201# VendorID
+090a5c
+090202#ProductID
+098502
+090203 090001
+090204 2801
+090205 090002
+
+#attribute end
+00
+
+4da8:
+14 # 00 q
+2b # 01 tab
+04 # 02 a
+29 # 03 esc
+1d # 04 z
+00
+35 # 06 `
+1e # 07 1
+1a # 08 w
+39 # 09 caps
+16 # 0a s
+00
+1b # 0c x
+00
+3a # 0e f1
+1f # 0f 2
+08 # 10 e
+3c # 11 f3
+07 # 12 d
+3d # 13 f4
+06 # 14 c
+63 # 15 .
+3b # 16 f2
+20 # 17 3
+15 # 18 r
+17 # 19 t
+09 # 1a f
+0a # 1b g
+19 # 1c v
+05 # 1d b
+22 # 1e 5
+21 # 1f 4
+18 # 20 u
+1c # 21 y
+0d # 22 j
+0b # 23 h
+10 # 24 m
+11 # 25 n
+23 # 26 6
+24 # 27 7
+0c # 28 i
+30 # 29 ]
+0e # 2a k
+3f # 2b f6
+36 # 2c ,
+00
+2e # 2e =
+25 # 2f 8
+12 # 30 o
+40 # 31  f7
+0f  # 32 l
+00 # 33
+37 # 34 .
+00 # 35
+41 # 36 f8
+26 # 37 9
+00 # 38
+00 # 39
+00 # 3a
+2c # 3b space
+44 # 3c f11
+51 # 3d down
+4c # 3e delete
+00 # 3f
+00  # 40 
+81  # 41 lshift
+85 # 42 rshift
+00
+00 # 44 
+00
+00 # 46 
+00 # 47  
+00 #48	
+2a #49 bksp
+31 #4a \
+00 # 4b 
+28 # 4c enter
+00 # 4d 
+42 # 4e  f9
+43 #4f f10
+13  #50 p
+2f  # 51 [
+33 # 52 ;
+34 #53 '
+00 #54  
+38 #55 /
+2d #56 
+27 #57 0
+00 #58
+00 # 59 
+80 # 5a  lctrl
+83 #5b lwin
+00 # 5c  
+87 #5d rwin
+00 # 5e 
+45 # 5f  f12
+00 # 60 
+00 # 61 
+00 # 62 
+00 # 63 
+86 # 64 ralt
+00 # 65 
+7f# 66 fn 
+3e # 67  f5
+00 # 68
+82 # 69 lalt
+00 # 6a  
+00 # 6b  
+00
+00  #6d  
+00
+00 # 6f  
+00
+00
+00
+00
+00 # 74  
+00 # 75 
+00 # 76
+00 # 77  
+00 # 78
+00 # 79  
+00 # 7a
+00 # 7b
+00 # 7c
+4f # 7d right
+00 
+00
+00
+00
+00
+52 #83 up
+00
+50 # 85 left      
+#Auto reconnection after power on
+
+4759:2a 48
+#Auto reconnection after power on
+4132:43
+41fb:0
+4138:
+ff
+ff
+8f
+f8	#fe--EDR  F8--BR
+83	#AFHclose 83
+9d
+59
+82
+
+#bluetootch param init
+07dc:00
+00a2:00
+07dd:00
+0016:27
+
+47fd:ff
+47f7:ff
+
+
+#2=mouse 4=dongle 6=ukey 7=ir
+4131:01
+4213:40
+4214:03
+41f7:08
+41f5:00 02
+4133:00
+
+416e:80
+
+
+4ce1:02 01
+
+4e46:
+08
+09
+0a
+0b
+0c
+0d
+0e
+11
+12
+13
+14
+15
+16
+17
+18
+19
+1a
+1b
+
+4da0:01
+4da1:30
+4da2:9f 3e
+4da4:cd 4d
+
+
+4216:8f 10 ce
+4219:00 0a 0b ef 0f
+41f8:00
+00a3:00 00 00 00 00 00 00 00
+415d:02
+415e:24
+414d:12 00
+414f:00 02
+4151:12 00
+4153:00 02
+415b:20 00
+4157:20 00
+4159:00 20
+415f:80 03
+4161:00 06
+4e5c:00 13
+
+429b:30 3f
+42aa:20
+#pointers to tail space of mem_le_att_list
+466c:
+07 ff #2M_IF
+0a fb
+0b ff 
+
+#agc table
+1a fb
+1b fb
+1c fb
+1d f6
+1e f2
+1f ee
+20 ea
+21 e6
+22 e2
+23 de
+24 da
+25 d6
+26 d2
+27 ce
+28 ca
+29 c6
+2a c2
+2b bd
+2c b9
+2d b5
+2e b1
+2f ad
+30 a9
+31 80
+32 80
+33 80
+34 c0
+35 c1
+36 c2
+37 c3
+38 c4
+39 c5
+3a c6
+3b c7
+3c 06
+3d 07
+3e 46
+3f 85
+40 86
+41 87
+42 c6
+43 c7
+44 d6
+45 d7
+46 e6
+47 f5
+48 00
+49 f8
+4a 7f
+4e ec
+4f 5e
+
+# tx power
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
+#dpll
+68 e4
+69 00
+6a 00
+6b 30
+ff
+4163:6c 46
+
+46d8:
+4abe:
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
+4ab4:
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
Index: patch/adc.obj
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: patch/adc.obj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: patch/geneep.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: patch/geneep.exe
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: patch/gpio.obj
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: patch/gpio.obj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: patch/iic.obj
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: patch/iic.obj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: patch/ipc.obj
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: patch/ipc.obj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: patch/keyscan.obj
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: patch/keyscan.obj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: patch/memmap.format
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/memmap.format	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/memmap.format	(working copy)
@@ -0,0 +1,1053 @@
+0x0000 mem_le_adv_transmit
+0x0001 mem_le_adv_waitcnt
+0x0002 mem_le_adv_rcv
+0x0003 mem_le_req_rcv
+0x0004 mem_le_scanrsp_rcv
+0x0005 mem_le_conn_rcv
+0x0006 mem_inquiryscan_waitcnt
+0x0007 mem_inquiryscan_rcvcnt
+0x0008 mem_pagescan_waitcnt
+0x0009 mem_pagescan_rcvcnt
+0x000a mem_pagescan_rcvfhscnt
+0x000b mem_slave_rcvcnt
+0x000c mem_page_transmit
+0x000d mem_page_rcv
+0x000e mem_page_rcv_fhs
+0x000f mem_master_rcvcnt
+0x0010 mem_fhs_wait_counter
+0x0011 mem_newconnto_counter
+0x0012 mem_inquiry_transmit
+0x0013 mem_inquiry_rcv
+0x0014 mem_fw_ver
+0x0015 mem_current_context
+0x0016 mem_le_ch_mapped
+0x0017 mem_last_freq
+0x0018 mem_rssi
+0x0019 mem_rx_type
+0x001a mem_rx_hec_err
+0x001c mem_rx_crc_err
+0x001e mem_context_ptr
+0x0020 mem_display
+0x0028 mem_bcd
+0x0030 mem_state
+0x0031 mem_mode
+0x0032 mem_tsniff
+0x0034 mem_sniff_anchor
+0x0038 mem_clk_offset
+0x003e mem_rx_window
+0x0040 mem_plap
+0x0043 mem_puap
+0x0044 mem_pnap
+0x0046 mem_conn_handle
+0x0047 mem_arq
+0x0048 mem_lmp_to_send
+0x0049 mem_lmi_opcode
+0x004a mem_lmo_reason
+0x004b mem_op
+0x004c mem_state_map
+0x004d mem_supervision_timer
+0x0051 mem_supervision_to
+0x0053 mem_name_offset
+0x0054 mem_key_size
+0x0055 mem_conn_sm
+0x0056 mem_aco
+0x0062 mem_kc
+0x0072 mem_conn_timer
+0x0073 mem_sniff_attempt
+0x0074 mem_sniff_timeout
+0x0075 mem_dsniff
+0x0077 mem_amaddr
+0x0078 mem_lmo_opcode1
+0x0079 mem_lmi_opcode1
+0x007a mem_lmo_reason1
+0x007b mem_lmo_tid1
+0x007c mem_lmo_opcode2
+0x007d mem_lmi_opcode2
+0x007e mem_lmo_reason2
+0x007f mem_lmo_tid2
+0x0080 mem_hci_version
+0x0083 mem_acl_pktlen
+0x0085 mem_sco_pktlen
+0x0086 mem_acl_pktcnt
+0x0088 mem_sco_pktcnt
+0x008a mem_current_sniff_attempt
+0x008b mem_current_sniff_timeout
+0x008c mem_nfreq_index_inq
+0x008d mem_nfreq_index_page
+0x008e mem_ninqy_index
+0x008f mem_fhs_misc
+0x0090 mem_tx_lch
+0x0091 mem_tx_len
+0x0093 mem_subsniff_instant
+0x0097 mem_subsniff_rate
+0x0098 mem_subsniff_tcmax
+0x009a mem_subsniff_tsniff
+0x009b mem_lpm_adjust
+0x009c mem_sync_clke
+0x00a2 mem_lpm_current_mult
+0x00a3 mem_gpio_wakeup_low
+0x00a7 mem_gpio_wakeup_high
+0x00ab mem_air_mode
+0x00ac mem_sco_asso_handle
+0x00ad mem_sco_handle
+0x00af mem_esco_desco
+0x00b0 mem_esco_type
+0x00b1 mem_neogotiation_state
+0x00b2 mem_saved_amaddr
+0x00b3 mem_esco_arq
+0x00b4 mem_esco_saved_arq
+0x00b5 mem_sco_obuf
+0x00d3 mem_sco_ibuf
+0x00f1 mem_sco_poll
+0x00f2 mem_npage_index
+0x00f3 mem_page_mode
+0x00f4 mem_page_clk
+0x00f8 mem_tst_pktcnt_sync
+0x00fa mem_tst_pktcnt_hec
+0x00fc mem_tst_pktcnt_crc
+0x00fe mem_tst_pktcnt_dmh
+0x0100 mem_tmp_buffer_head
+0x0103 mem_tmp_buffer
+0x0153 mem_tester_emulate
+0x0154 mem_temp_payload
+0x0154 test_mode_scenario
+0x0155 test_mode_hopping_mode
+0x0156 test_mode_tx_freq
+0x0157 test_mode_rx_freq
+0x0158 test_mode_power_mode
+0x0159 test_mode_poll_period
+0x015a test_mode_packet_type
+0x015b test_mode_data_length
+0x015d mem_test_mode_old_debug_config
+0x015e mem_tester_cnt
+0x015f mem_temp_am_addr
+0x0160 mem_temp_arq
+0x0161 mem_pdatatemp
+0x0169 mem_len
+0x016b mem_clkn_bt
+0x016f mem_clke_bt
+0x0173 mem_dpll_clkn
+0x0177 mem_connection_options
+0x0178 mem_nameres_cnt
+0x0179 mem_txptr
+0x017b mem_slot_offset
+0x017d extm_fhs_misc
+0x017e extm_newconn_am_addr
+0x017f extm_class
+0x0182 extm_lap
+0x0185 extm_uap
+0x0186 extm_nap
+0x0189 mem_debug_config
+0x018a mem_lch_code
+0x018b mem_fhs_am_addr
+0x018c mem_dpll_error
+0x018e mem_bdaddr_list_buff
+0x01b2 mem_select_list_item
+0x01b3 mem_temp_reconn_record
+0x01b3 mem_record_bt_mode
+0x01b4 mem_temp_lap
+0x01ba mem_list_item_ptr
+0x01bc mem_eir
+0x0220 mem_ucode_status
+0x0221 mem_otp_ucode_flag
+0x0223 mem_spid_tbuf/* spid buf: 03 addr[23:16] addr[15:8] addr[7:0] */
+0x0224 mem_iicd_tbuf/* iicd buf: iic_adr addr[15:8] addr[7:0] iic_adr */
+0x0224 mem_addr_hi
+0x0225 mem_addr_mi
+0x0226 mem_addr_lo
+0x0227 mem_iicd_addr
+0x0228 mem_spid_rbuf
+0x022c mem_ucode_buf
+0x022e mem_ucode_len
+0x0230 mem_sched_addr
+0x0232 mem_ucode_ptr
+0x0234 mem_ucode_keybuf
+0x0244 mem_check_plap_temp
+0x0256 mem_sensor_id
+0x0257 mem_reconnect_flag
+0x0258 mem_switch_fail_master_count
+0x0259 mem_app_evt_timer_count
+0x025a mem_dongle_count
+0x025b mem_le_addr_slave1
+0x0261 mem_le_addr_slave2
+0x0267 mem_le_peer_state
+0x0268 mem_app_peer_addr
+0x026e mem_dongle_peers
+0x026f mem_dongle_pairing_cnt
+0x0270 mem_dongle_signature
+0x0272 mem_h5rx_ackcnt
+0x0273 mem_check_err_acl_cont
+0x0274 mem_rp_packets
+0x0275 mem_packet_type
+0x0277 mem_hci_sniff_conn_handle
+0x0279 mem_hci_sniff_max_interval
+0x027b mem_hci_sniff_min_interval
+0x027d mem_hci_sniff_attempt
+0x027f mem_hci_sniff_timeout
+0x0281 mem_voice_setting
+0x0283 mem_retransmission_effort
+0x0284 mem_sco_ptype
+0x0286 mem_extm_uap_restore
+0x0289 mem_h5rx_rptr
+0x028b mem_h5rx_ack
+0x028c mem_h5tx_ack
+0x028d mem_h5tx_rptr
+0x028f mem_h5tx_wptr
+0x0291 mem_h5tx_free
+0x0293 mem_h5rx_tmp
+0x0294 mem_h5tx_seq
+0x0295 mem_hci_acl_queue_wptr
+0x0297 mem_hci_acl_queue_rptr
+0x0299 mem_hci_acl_queue_end
+0x029b mem_hci_acl_queue_wcnt
+0x029c mem_hci_acl_cnt
+0x029d mem_hci_acl_tx_trigger_wptr//tx via uart
+0x029f mem_ucode_id_local
+0x02a0 mem_temp//8 bytes
+0x02a8 mem_timeup// 4 bytes
+0x02ac mem_rega//4 bytes
+0x02b0 mem_regb//4 bytes
+0x02b4 mem_regc//3 bytes
+0x02b7 mem_contr//2 bytes
+0x02b9 mem_contw//2 bytes
+0x02bb mem_ucode_id_remote
+0x02bc mem_check_sum
+0x02bd mem_ucode_temp
+0x02be mem_ucode_temp1
+0x02bf mem_lock_in_enc//boolean
+0x02c0 mem_hci_disconn_reason
+0x02c1 mem_hci_curr_len
+0x02c2 mem_hci_curr_target
+0x02c4 mem_l2cap_mem_start
+0x02c4 mem_l2cap_rxbuff1_len
+0x02c6 mem_l2cap_rxbuff2_len
+0x02c8 mem_l2cap_rxbuff_new
+0x02ca mem_l2cap_rxbuff_inuse
+0x02cb mem_l2cap_payload_ptr
+0x02cd mem_l2cap_rx_pkt_length
+0x02cf mem_l2cap_rx_cid
+0x02d1 mem_l2cap_rx_done
+0x02d2 mem_l2cap_signal_tx_buff_ptr
+0x02d4 mem_l2cap_signal_tx_payload_ptr
+0x02d6 mem_l2cap_signal_tx_length
+0x02d8 mem_sdp_tx_buff_ptr
+0x02da mem_sdp_tx_payload_ptr
+0x02dc mem_sdp_tx_pkt_length
+0x02de mem_rfcomm_tx_buff_ptr
+0x02e0 mem_rfcomm_tx_payload_ptr
+0x02e2 mem_rfcomm_tx_pkt_length
+0x02e4 memL2CAP_T1
+0x02e6 mem_CONTROL_tasks
+0x02e7 mem_send_config_req
+0x02e8 mem_config_identifier
+0x02e9 mem_config_req_dest_CID
+0x02eb mem_rfcomm_malloc_fail_flag
+0x02ec mem_message_to_uppersm
+0x02ed mem_upper_sm_remote_page
+0x02ee mem_upper_sm_reconn
+0x02ef mem_upper_sm_ss
+0x02f0 mem_tx_malloc_log
+0x0330 mem_l2cap_mem_end
+0x0330 mem_scid
+0x0332 mem_cmd_length
+0x0334 mem_tt2
+0x0336 mem_tt3
+0x0338 mem_id
+0x033a mem_psm
+0x033c mem_l2cap_sdpres_delay_time
+0x0340 mem_le_rxbuf
+0x0378 mem_le_mic
+0x037c mem_le_peer_mic
+0x0380 mem_le_skdm
+0x0388 mem_le_skds
+0x0390 mem_le_peer_ltk
+0x03a0 mem_le_my_ltk
+0x03b0 mem_le_mrand
+0x03c0 mem_le_state
+0x03c1 mem_le_mode
+0x03c2 mem_le_tsniff
+0x03c4 mem_le_anchor
+0x03c8 mem_le_clk_offset
+0x03ce mem_le_receive_window
+0x03d0 mem_le_plap
+0x03d6 mem_le_conn_handle
+0x03d7 mem_le_arq
+0x03d8 mem_le_ch
+0x03d9 mem_le_hop
+0x03da mem_le_event_count
+0x03dc mem_le_supervision_timer
+0x03e0 mem_le_instant
+0x03e2 mem_le_channels
+0x03e3 mem_le_conn_sm
+0x03e4 mem_le_op
+0x03e5 mem_le_access
+0x03e9 mem_le_crcinit
+0x03ec mem_le_window_size
+0x03ed mem_le_slave_latency
+0x03ef mem_le_superto
+0x03f1 mem_le_channel_map
+0x03f6 mem_le_no_using
+0x03f8 mem_le_peer_sca
+0x03f9 mem_le_att_opcode
+0x03fa mem_le_att_handle
+0x03fc mem_le_err_code
+0x03fd mem_le_sk
+0x040d mem_le_testtype
+0x040e mem_le_test_sync
+0x0410 mem_le_test_pcnt
+0x0412 mem_le_rxon_ts
+0x0418 mem_le_rx_ll_opcode
+0x0419 mem_le_notify_attr_start
+0x041b mem_le_notify_len
+0x041c mem_cmd_le_create_conn
+0x041d mem_le_adv_temp
+0x0431 mem_24g_id
+0x0432 mem_lmo_header_length
+0x0433 mem_lmo_header_opcode
+0x0434 mem_lmo_payload
+0x0445 mem_lmi_accepted_opcode
+0x0446 mem_disconn_reason_send
+0x0447 mem_tx_fixed_freq
+0x0448 mem_rx_fixed_freq
+0x0449 mem_ext_features_page
+0x044a mem_lmpext_ssp_enable
+0x044c mem_remote_sppcap
+0x044d mem_lmp_conn_state
+0x044e mem_soft_timer
+0x0450 mem_pincode_state
+0x0451 mem_sres_tid
+0x0452 mem_accptsco_tid
+0x0453 mem_auth_enable
+0x0454 mem_wait_encryption
+0x0455 mem_sniff_payload
+0x0465 mem_aurand_send_delay_time
+0x0469 mem_module_temp_len
+0x046b mem_init_cnt
+0x046d mem_prcp_data
+0x0481 mem_prcp
+0x0482 mem_prcp_tx_len
+0x0483 rx_buf_data_ptr
+0x0485 memRemoteRPNBitRate
+0x0486 memRemotePRNDataBits
+0x0487 memRemotePRNStopBit
+0x0488 memRemotePRNParity
+0x0489 memRemotePRNFlowControl
+0x048a memRemotePRNXon
+0x048b memRemotePRNXoff
+0x048c mem_mod2div_temp
+0x048f mem_contw_temp
+0x0491 mem_attrib_list
+0x0493 mem_current_adss
+0x0494 mem_current_channel
+0x0495 mem_current_frame_type
+0x0496 mem_current_fcs
+0x0497 mem_current_length
+0x0499 mem_rfcomm_uih_payload_ptr
+0x049b mem_uih_cmd_type
+0x049c mem_uih_length
+0x049e mem_param_payload_ptr
+0x04a0 mem_ms_param
+0x04a1 mem_pn_credit_flow_type_info
+0x04a2 mem_pn_priority
+0x04a3 mem_pn_acknowledg_timer
+0x04a4 mem_pn_max_retrans
+0x04a5 mem_rfcomm_send_adss
+0x04a6 mem_rfcomm_send_frame_type
+0x04a7 mem_rfcomm_send_fcs
+0x04a8 mem_rfcomm_send_offset
+0x04a9 mem_sdp_mem_start
+0x04a9 mem_uuid_search_pat
+0x04ad mem_sdp_continue_byte
+0x04af mem_sdp_pduid
+0x04b0 mem_sdp_transactionid
+0x04b2 mem_sdp_attribute_maxbyte
+0x04b4 mem_sdp_record_maxcnt
+0x04b6 mem_sdp_error_code
+0x04be mem_sdp_record_handle
+0x04c2 mem_sdp_search_failed
+0x04c3 mem_sdp_LACAP_found
+0x04c4 mem_sdp_RFCOMM_found
+0x04c5 mem_handle_list
+0x04dd mem_handle_humber
+0x04de mem_sdp_mem_end
+0x04de mem_rxbuf
+0x04ef mem_random_number
+0x04ff mem_round_key
+0x050f mem_kinit
+0x051f mem_input_store
+0x052f mem_x
+0x053f mem_y
+0x054e mem_y15
+0x054f mem_pin_length
+0x0550 mem_pin
+0x0560 mem_key_store
+0x0571 mem_key_store_end
+0x0572 memp_ar_key
+0x0574 memp_ar_input
+0x0576 mem_ar_hround
+0x0580 mem_ec_infinite
+0x0581 mem_ec_loopc
+0x0582 memdat
+0x0582 mem_ax
+0x059a mem_ay
+0x05b2 mem_az
+0x05ca mem_bx
+0x05e2 mem_by
+0x05fa mem_bz
+0x0612 mem_cx
+0x062a mem_cy
+0x0641 mem_cy5
+0x0642 mem_cz
+0x065a mem_k
+0x0672 mem_align
+0x0682 mem_tmp1
+0x0682 memahbak
+0x069a mem_tmp5
+0x06a2 memahsave
+0x06b2 mem_tmp2
+0x06c2 memahsave_end
+0x06c2 mem_addr_padding
+0x06c3 mem_addr_value/* 12 bytes     */ 
+0x06ca mem_tmp3
+0x06ca mem_t1
+0x06cf mem_addr_value_end
+0x06d2 mem_addr_iocap_end
+0x06e2 mem_tmp0
+0x06e2 mem_t0
+0x06ea mem_tmp0a
+0x06fa mem_t2
+0x0712 mem_t3
+0x072a mem_t7
+0x0742 mem_p
+0x075a mem_a
+0x0772 mem_b
+0x078a mem_gx
+0x07a2 mem_gy
+0x07ba memh0
+0x07da mem_sp_state_start
+0x07da mem_sp_state
+0x07db mem_master_sp_state
+0x07dc mem_sp_flag
+0x07dd mem_master_sp_flag
+0x07de mem_sp_calc
+0x07df mem_sp_dh_ready
+0x07e0 mem_sp_localsm
+0x07e1 mem_pairing_auth
+0x07e2 mem_sp_flag_start
+0x07e2 mem_sp_local_key_send_count
+0x07e3 mem_sp_remote_key_recv_count
+0x07e4 mem_sp_remote_key_invalid
+0x07e5 mem_sp_dhkey_invalid
+0x07e6 mem_sp_iocap_local
+0x07e9 mem_sp_iocap_remote
+0x07ec mem_sp_gkey
+0x07f0 mem_sp_pubkey_remote
+0x07f0 mem_sp_pubkey_remote_x
+0x0808 mem_sp_pubkey_remote_x_end
+0x0808 mem_sp_pubkey_remote_y
+0x0820 mem_sp_dhkey
+0x0838 mem_sp_dhkey_end
+0x0838 mem_sp_random_local
+0x0848 mem_sp_random_local_end
+0x0848 mem_sp_random_remote
+0x0858 mem_sp_random_remote_end
+0x0858 memresult
+0x0858 mem_sp_calc_result
+0x0858 memh
+0x085c memg
+0x0860 memf
+0x0864 meme
+0x0868 mem_sp_calc_result_high
+0x0868 memd
+0x086c memc
+0x0870 memb
+0x0874 mema
+0x0878 mem_sp_check_result
+0x0888 mem_sp_confirm_remote
+0x0898 mem_sp_prarm_stack
+0x08a8 mem_UI_data_txbuff_length
+0x08aa mem_ipc_skip_continue_proc
+0x08ab mem_ui_timer_temp//length 4
+0x08ab mem_ipc_rega_temp
+0x08af mem_usb_status
+0x08b0 mem_usb_fifo_empty
+0x08b1 mem_usb_read_len
+0x08b2 mem_usb_rxbuf
+0x08f2 mem_usb_cnt
+0x08f4 mem_usb_tx_enable
+0x08f5 mem_usb_tx_count
+0x08f6 mem_usb_set_protocol_count
+0x08f7 mem_usb_desc
+0x08f8 mem_usb_state
+0x08f9 mem_usb_idle_cnt
+0x08fb mem_usb_idle_timeout
+0x08fd mem_usb_trig_timeout
+0x08ff mem_usb_setup
+0x08ff mem_usb_setup_bmRequestType
+0x0900 mem_usb_setup_bRequest
+0x0901 mem_usb_setup_bValue
+0x0902 mem_usb_setup_bValueH
+0x0903 mem_usb_setup_wIndex
+0x0905 mem_usb_setup_bLength
+0x0906 mem_usb_setup_bLengthH
+0x0907 mem_usb0_setup
+0x090f mem_bufptr
+0x0911 mem_remain
+0x0912 mem_devicedesc
+0x0926 mem_hidreportdesc_kb
+0x09ee mem_hidreportdesc_m
+0x0ab6 mem_confdesc
+0x0b1a mem_string0
+0x0b1f mem_string1
+0x0b3d mem_string2
+0x0b5b mem_string3
+0x0b79 mem_hold_contr
+0x0b7b mem_hold_contw
+0x0b7d mem_fifo_temp
+0x0b7e mem_c51_flag
+0x0b7f mem_c51_lmp_lock
+0x0b80 mem_wakup_from_power_flag
+0x0b81 mem_lmp_bb_disconnect_reason
+0x4000 mem_patch00
+0x4001 mem_patch01
+0x4002 mem_patch02
+0x4003 mem_patch03
+0x4004 mem_patch04
+0x4005 mem_patch05
+0x4006 mem_patch06
+0x4007 mem_patch07
+0x4008 mem_patch08
+0x4009 mem_patch09
+0x400a mem_patch0a
+0x400b mem_patch0b
+0x400c mem_patch0c
+0x400d mem_patch0d
+0x400e mem_patch0e
+0x400f mem_patch0f
+0x4010 mem_patch10
+0x4011 mem_patch11
+0x4012 mem_patch12
+0x4013 mem_patch13
+0x4014 mem_patch14
+0x4015 mem_patch15
+0x4016 mem_patch16
+0x4017 mem_patch17
+0x4018 mem_patch18
+0x4019 mem_patch19
+0x401a mem_patch1a
+0x401b mem_patch1b
+0x401c mem_patch1c
+0x401d mem_patch1d
+0x401e mem_patch1e
+0x401f mem_patch1f
+0x4020 mem_patch20
+0x4021 mem_patch21
+0x4022 mem_patch22
+0x4023 mem_patch23
+0x4024 mem_patch24
+0x4025 mem_patch25
+0x4026 mem_patch26
+0x4027 mem_patch27
+0x4028 mem_patch28
+0x4029 mem_patch29
+0x402a mem_patch2a
+0x402b mem_patch2b
+0x402c mem_patch2c
+0x402d mem_patch2d
+0x402e mem_patch2e
+0x402f mem_patch2f
+0x4030 mem_patch30
+0x4031 mem_patch31
+0x4032 mem_patch32
+0x4033 mem_patch33
+0x4034 mem_patch34
+0x4035 mem_patch35
+0x4036 mem_patch36
+0x4037 mem_patch37
+0x4038 mem_patch38
+0x4039 mem_patch39
+0x403a mem_patch3a
+0x403b mem_patch3b
+0x403c mem_patch3c
+0x403d mem_patch3d
+0x403e mem_patch3e
+0x403f mem_patch3f
+0x4040 mem_context
+0x4130 mem_current_amaddr
+0x4131 mem_lpm_mode
+0x4132 mem_device_option
+0x4133 mem_scan_mode
+0x4134 mem_last_clkn
+0x4138 mem_features
+0x4140 mem_lap
+0x4143 mem_uap
+0x4144 mem_nap
+0x4146 mem_npage
+0x4147 mem_glap
+0x414a mem_class
+0x414d mem_iscan_window
+0x414f mem_iscan_interval
+0x4151 mem_pscan_window
+0x4153 mem_pscan_interval
+0x4155 mem_page_interval
+0x4157 mem_page_window
+0x4159 mem_page_to
+0x415b mem_inq_window
+0x415d mem_fcomp_mul
+0x415e mem_fcomp_div
+0x415f mem_rx_window_init
+0x4161 mem_rx_window_sniff
+0x4163 mem_rf_init_ptr
+0x4165 mem_last_type
+0x4166 mem_last_type_esco
+0x4167 mem_last_type_saved
+0x4168 mem_retransmission_cnt
+0x416a mem_next_btclk
+0x416e mem_seqi
+0x416f mem_rf_rccal
+0x4170 mem_handle_num
+0x4171 mem_max_slot
+0x4172 mem_eir_enable
+0x4173 mem_afh_instant
+0x4177 mem_afh_error_total
+0x4179 mem_afh_cfg
+0x417a mem_afh_new_mod
+0x417b mem_afh_map_lo
+0x4180 mem_afh_map_hi
+0x4185 mem_afh_used
+0x4186 mem_afh_index
+0x4188 mem_afh_map_new
+0x4193 mem_afh_map
+0x41e3 mem_afh_timer
+0x41e7 mem_afh_classify_channel_map
+0x41f1 mem_chip_functions
+0x41f3 mem_lpm_wake_lock
+0x41f5 mem_lpm_interval
+0x41f7 mem_lpm_overhead
+0x41f8 mem_lpm_hibernate_switch
+0x41f9 mem_esco_addr
+0x41fa mem_sniff_unint_lost
+0x41fb mem_ptt
+0x41fc mem_sleep_counter//should be 0x41fc in REVC
+0x4200 mem_sleep_counter_all
+0x4204 mem_sleep_clkn
+0x420a mem_sniff_rcv
+0x420d mem_sniff_lost
+0x4210 mem_clks_per_lpo
+0x4213 mem_lpm_mult
+0x4214 mem_lpm_mult_timeout
+0x4215 mem_lpm_mult_cnt
+0x4216 mem_lpm_config
+0x4219 mem_lpm_xtalcnt
+0x421a mem_lpm_buckcnt
+0x421b mem_lpm_ldocnt
+0x421c mem_lpm_isogate
+0x421d mem_lpm_isogate_final
+0x421e mem_saved_gpio// should be 0x421e in REVC
+0x422e mem_saved_gsel
+0x4231 mem_saved_mark
+0x4239 mem_saved_spidctrl
+0x423a mem_patch_ptr
+0x423c mem_patch_len
+0x423e mem_timers
+0x425e mem_link_key_exists
+0x425f mem_link_key_eeprom_head
+0x4262 mem_link_key
+0x4272 mem_hci_cmd
+0x4273 mem_hci_conn_handle
+0x4274 mem_hci_plap
+0x4277 mem_hci_puap
+0x4278 mem_hci_pnap
+0x427a mem_uartd_rxitems_got_data
+0x427b mem_uartd_rxitems_threshold
+0x427c mem_uartd_rx_timeout
+0x427e mem_app_state
+0x427f mem_app_handshake_flag
+0x4280 mem_sniff_param_interval
+0x4282 mem_sniff_param_attempt
+0x4284 mem_sniff_param_timeout
+0x4286 mem_cb_check_wakelock
+0x4288 mem_cb_before_hibernate
+0x428a mem_cb_before_lpm
+0x428c mem_cb_le_process
+0x428e mem_cb_bt_process
+0x4290 mem_cb_idle_process
+0x4292 mem_cb_bb_event_process
+0x4294 mem_cb_discovry_timeout
+0x4296 mem_cb_att_write
+0x4298 mem_cb_update_notify_value
+0x429a mem_device_nums
+0x429b mem_eeprom_base
+0x429d mem_unsniff2sniff_timer_count
+0x429e mem_wake_up_delay_timer
+0x429f mem_app_connection_options
+0x42a0 mem_app_disconn_reason
+0x42a2 mem_app_disconn_reason_flag
+0x42a4 mem_at_using_flag
+0x42a5 mem_lpm_delay_after_sniff
+0x42a9 mem_xrecord_mode
+0x42aa mem_eeprom_block_size
+0x42ac mem_baud
+0x42ae mem_hci_lt_rx_state
+0x42af mem_l2cap_xmem_start
+0x42af mem_l2cap_tx_multi_offset//0 means single packet
+0x42b1 mem_sdp_remote_cid
+0x42b3 mem_rfcomm_remote_cid
+0x42b5 mem_hid_ctrl_remote_cid
+0x42b7 mem_hid_int_remote_cid
+0x42b9 mem_sdp_state
+0x42ba mem_rfcomm_state
+0x42bb mem_hid_control_state
+0x42bc mem_hid_interrupt_state
+0x42bd mem_spp_state
+0x42be mem_ML2CAP_comm_id
+0x42bf mem_used_map
+0x42c0 mem_tx_fifo0
+0x42c0 mem_tx_fifo0_map
+0x42c1 mem_tx_fifo0_ptr
+0x42c3 mem_tx_fifo1
+0x42c3 mem_tx_fifo1_map
+0x42c4 mem_tx_fifo1_ptr
+0x42c6 mem_tx_fifo2
+0x42c6 mem_tx_fifo2_map
+0x42c7 mem_tx_fifo2_ptr
+0x42c9 mem_tx_fifo3
+0x42c9 mem_tx_fifo3_map
+0x42ca mem_tx_fifo3_ptr
+0x42cc mem_tx_fifo_end
+0x42cc mem_l2cap_lpm_txbuf
+0x43cc mem_l2cap_flow_ctrl_flag
+0x43cd mem_l2cap_pending_item
+0x43ce mem_l2cap_xmem_end
+0x43ce mem_le_dsniff
+0x43d0 mem_le_conn_interval
+0x43d2 mem_le_scan_enable
+0x43d3 mem_le_scan_interval
+0x43d5 mem_le_scan_window
+0x43d7 mem_le_adv_led
+0x43d8 mem_le_adv_enable
+0x43d9 mem_le_adv_data_len
+0x43da mem_le_adv_data
+0x43f9 mem_le_scan_data_len
+0x43fa mem_le_scan_data
+0x4419 mem_le_name_len
+0x441a mem_le_name
+0x442e mem_le_led_on_time
+0x442f mem_le_new_map
+0x4434 mem_le_new_param
+0x4434 mem_le_new_window
+0x4435 mem_le_new_offset
+0x4437 mem_le_new_interval
+0x4439 mem_le_new_latency
+0x443b mem_le_new_timeout
+0x443d mem_le_temp
+0x443e mem_le_txheader
+0x443f mem_le_txlen
+0x4440 mem_le_txpayload
+0x4442 mem_le_txcid
+0x4444 mem_le_l2cap
+0x4445 mem_le_l2cap_response
+0x4446 mem_le_txbdy
+0x4465 mem_le_pcnt_tx
+0x446a mem_le_pcnt_rx
+0x446f mem_le_last_mic
+0x4473 mem_le_ivm
+0x4477 mem_le_ivs
+0x447b mem_le_ltk
+0x448b mem_ltk_exists
+0x448c mem_le_rconfirm
+0x449c mem_le_srand
+0x44ac mem_le_iat
+0x44ad mem_le_rat
+0x44ae mem_le_preq
+0x44b5 mem_le_pres
+0x44bc mem_le_search_handle_start
+0x44be mem_le_search_handle_end
+0x44c0 mem_le_att_offset
+0x44c0 mem_le_search_att_type
+0x44c2 mem_le_notify_handle
+0x44c4 mem_le_uuid
+0x44c6 mem_le_handle_data_len
+0x44c7 mem_le_handle_data
+0x44d7 mem_le_adv_param
+0x44d7 mem_le_adv_interval_min
+0x44d9 mem_le_adv_interval_max
+0x44db mem_le_adv_type
+0x44dc mem_le_adv_own_addr_type
+0x44dd mem_le_adv_direct_addr_type
+0x44de mem_le_adv_direct_addr
+0x44e4 mem_le_adv_channel_map
+0x44e5 mem_le_adv_filter_policy
+0x44e6 mem_le_conn_param
+0x44e6 mem_le_conn_peer_addr_type
+0x44e7 mem_le_conn_peer_addr
+0x44ed mem_le_conn_own_addr_type
+0x44ee mem_le_conn_interval_min
+0x44f0 mem_le_conn_interval_max
+0x44f2 mem_le_conn_latency
+0x44f4 mem_le_conn_superto
+0x44f6 mem_le_scan_params
+0x44f6 mem_le_scan_type
+0x44f7 mem_le_scan_own_addr_type
+0x44f8 mem_le_scan_filter_policy
+0x44f9 mem_le_lap
+0x44fc mem_le_uap
+0x44fd mem_le_nap
+0x44ff mem_le_xtype_fifo
+0x4504 mem_le_att_list
+0x46f8 mem_le_switch_send_data
+0x46f9 mem_le_transmit_window
+0x46fd mem_lmp_version
+0x4700 mem_lmp_subversion
+0x4702 mem_local_name_length
+0x4703 mem_local_name
+0x4706 mem_local_name2
+0x4746 mem_local_name_end
+0x4747 mem_unsniff2sniff_timer
+0x4748 mem_switch_flag
+0x4749 mem_eeprom_ota_base_addr/*the start- writing addr in eeprom  */
+0x474b mem_pn_dlci
+0x474c mem_pn_max_frame_size
+0x474e memFCStemp1
+0x474f memFCStemp2
+0x4750 memFCStemp3
+0x4751 mem_rfcomm_initiator
+0x4752 mem_remote_spp_channel
+0x4753 mem_HIUfcs_SPP
+0x4754 mem_HIUfcs_SPP_WCredits
+0x4755 mem_rfcomm_send_more_pkt
+0x4756 mem_remote_credits
+0x4757 mem_credit_given
+0x4758 mem_ms_channel
+0x4759 memui_uuid_table
+0x475b mem_all_uuid_16bits
+0x4771 mem_all_uuid_128bits
+0x4793 mem_sp_local_key_invalid
+0x4794 mem_sp_private_key
+0x47ac mem_sp_pubkey_local
+0x47ac mem_sp_pubkey_local_x
+0x47c4 mem_sp_pubkey_local_x_end
+0x47c4 mem_sp_pubkey_local_y
+0x47dc mem_ssp_enable
+0x47dd mem_ipc_lock_bt
+0x47de mem_ipc_lock_c51
+0x47df mem_ipc_fifo_bt2c51
+0x47e4 mem_ipc_fifo_c512bt
+0x47e9 mem_led_switch
+0x47ea mem_ui_button_timer
+0x47eb mem_ui_button_last_state
+0x47ec mem_ui_timer_last_btclk
+0x47f0 mem_discovery_timeout_timer_count
+0x47f2 mem_hid_handshake_timer_count
+0x47f3 memui_reconnect_mode
+0x47f4 mem_ui_state_map
+0x47f6 mem_ui_profile_supported
+0x47f7 mem_led_gpio
+0x47f8 mem_led_dark_time
+0x47fa mem_led_light_time
+0x47fc mem_ui_button_timeout
+0x47fd mem_ui_button_gpio
+0x47fe mem_discovery_timeout
+0x4800 mem_ir_ptr
+0x4802 mem_ir_type
+0x4803 mem_ir_cmd
+0x4804 mem_ir_play_count
+0x4805 mem_ir_report_len
+0x4807 mem_ir_pulse_zero
+0x4808 mem_ir_pulse_one
+0x4809 mem_ir_pulses
+0x4825 mem_ir_sequence_len
+0x4826 mem_ir_sequence
+0x4800 mem_acl_credits
+0x4802 mem_allow_switch
+0x4803 mem_hci_acl_queue_start/*param_acl_pktcnt+2 byte*/
+0x4807 mem_hci_wake_clk
+0x4800 mem_kb_state
+0x4802 mem_kb_report_data
+0x4808 mem_kb_keys
+0x4809 mem_kb_rcv_led_data
+0x480a mem_kb_fast_wake_last
+0x480e mem_led_cap_gpio
+0x480f mem_led_num_gpio
+0x4810 mem_led_scl_gpio
+0x4811 mem_kb_map
+0x48af mem_keyboard_uuid_list
+0x4800 mem_at_gpio
+0x4801 mem_module_wake_up_gpio
+0x4802 mem_module_state_gpio
+0x4803 mem_module_connect_state_gpio
+0x4804 mem_module_version
+0x480a mem_last_uart_clock
+0x480e mem_current_packet_length
+0x4810 mem_module_prepare_tx_len
+0x4812 mem_module_state
+0x4813 mem_module_task
+0x4814 mem_cmode_addr
+0x481a mem_at_scan_time
+0x481c mem_prarm_pswd
+0x4820 mem_prarm_uart
+0x4824 mem_prarm_blename
+0x4827 mem_prarm_name
+0x482b mem_prarm_bleadss
+0x482e mem_prarm_adss
+0x4832 mem_prarm_vers
+0x4836 mem_prarm_class
+0x483b mem_prarm_clrflg
+0x4841 mem_prarm_reconn
+0x4847 mem_prarm_bledis
+0x4849 mem_prarm_dis
+0x484c mem_prarm_stsn
+0x4850 mem_prarm_atp
+0x4853 mem_prarm_list
+0x4857 mem_prarm_role
+0x485b mem_prarm_sniff
+0x4860 mem_prarm_ldev
+0x4864 mem_prarm_rssi
+0x4868 mem_prarm_cdev
+0x486c mem_prarm_bleinqr
+0x486f mem_prarm_inqr
+0x4873 mem_prarm_cmode
+0x4878 mem_prarm_mode
+0x487c mem_prarm_dmstate
+0x4883 mem_prarm_discov
+0x4889 mem_prarm_ota
+0x488c mem_prarm_bleconn
+0x488e mem_prarm_conn
+0x4892 mem_prarm_pageout
+0x4899 mem_prarm_recfail
+0x48a0 mem_module_uuid_list
+0x4800 mem_mouse_x
+0x4802 mem_mouse_y
+0x4804 mem_mouse_z
+0x4805 mem_mouse_key
+0x4806 mem_mouse_z_last
+0x4807 mem_mouse_z_before
+0x4808 mem_mouse_z_now
+0x4809 mem_mouse_z_data
+0x480a mem_mouse_move_flag
+0x480b mem_reconnect_timeout
+0x480c mem_mouse_direct_timeout
+0x480e mem_mouse_no_data_timeout
+0x4810 mem_mouse_blank_data_timeout
+0x4812 mem_mouse_discovery_timer
+0x4814 mem_mouse_direct_timer
+0x4816 mem_mouse_no_data_timer
+0x4818 mem_mouse_blank_data_timer
+0x481a mem_mouse_send_blank_timer
+0x481b mem_mouse_dpi
+0x481c mem_mouse_dpi_button_state
+0x481d mem_mouse_test_cnt
+0x481e mem_le_hibernate_timer
+0x4820 mem_mouse_mode_state
+0x4821 mem_sensor_type
+0x4822 mem_lbutton_gpio
+0x4823 mem_rbutton_gpio
+0x4824 mem_mbutton_gpio
+0x4825 mem_dpi_button_gpio
+0x4826 mem_sensor_data_gpio
+0x4827 mem_whee_a_data_gpio
+0x4828 mem_whee_b_data_gpio
+0x4829 mem_conn_cnt
+0x482a mem_mouse_uuid_list
+0x4ab4 mem_24g_paring_tx_power_param
+0x4abe mem_5db_tx_power_param
+0x4ac8 mem_mouse_tz
+0x4ac9 mem_last_txlch
+0x4aca mem_last_txlen
+0x4acc mem_last_txdata
+0x4ae0 mem_current_event
+0x4ae1 mem_ipc_lock_rx_data_bt
+0x4ae2 mem_ipc_lock_rx_data_c51
+0x4ae3 mem_ipc_lock_tx_data_bt
+0x4ae4 mem_ipc_lock_tx_data_c51
+0x4ae5 mem_ipc_2bt_fifo_head
+0x4bad mem_ipc_2bt_fifo_end
+0x4bad mem_ipc_2bt_read_index
+0x4baf mem_ipc_2bt_write_index
+0x4bb1 mem_ipc_2C51_fifo_head
+0x4c79 mem_ipc_2C51_fifo_end
+0x4c79 mem_ipc_2C51_read_index
+0x4c7b mem_ipc_2C51_write_index
+0x4c7d mem_c51_private_area
+0x4ce1 mem_ipc_tx_evt_buff
+0x4ce3 mem_ipc_tx_evt
+0x4ce4 mem_ipc_bt_timer
+0x4ce6 mem_ipc_rx_type
+0x4ce7 mem_rfcomm_tx_buff
+0x4ce7 mem_24g_tx_btclk
+0x4ceb mem_24g_interval
+0x4cec mem_24g_txcnt
+0x4cef mem_24g_txfail_cnt
+0x4cf0 mem_24g_attempt_cnt
+0x4cf1 mem_24g_attempt_flag
+0x4cf2 mem_24g_rxcnt
+0x4cf5 mem_24g_rxfail_cnt
+0x4cf8 mem_loss_rate
+0x4cfa mem_24g_retry
+0x4cfb mem_24g_pid
+0x4cfc mem_24g_datalen
+0x4cfd mem_24g_crc
+0x4cff mem_24g_rxbuf
+0x4d3f mem_24g_addr
+0x4d43 mem_24g_len
+0x4d45 mem_24g_txpayload
+0x4d4f mem_24g_txdata
+0x4d55 mem_24g_ch
+0x4d56 mem_24g_sifs
+0x4d57 mem_24g_state
+0x4d58 mem_24g_scremble
+0x4d68 mem_dongle_exit_flag
+0x4d69 mem_24g_current_ch_number
+0x4d6a mem_24g_ch_count_down
+0x4d6b mem_24g_ch_map1
+0x4d6f mem_24g_ch_map2
+0x4d73 mem_24g_ch_map3
+0x4d77 mem_24g_ch_map4
+0x4d7b mem_24g_interval_min
+0x4d7c mem_24g_interval_max
+0x4d7d mem_24g_ensure
+0x4d7e mem_24g_enter_hibernate
+0x4d86 mem_24g_enter_lpm_timer
+0x4d87 mem_led_cap_delay_timer
+0x4d87 mem_senser_id2
+0x4d88 mem_senser_id3
+0x4d89 mem_rpn_dlci
+0x4d8a mem_ipc_last_check_timer
+0x4d8e mem_att_send_handle
+0x4d90 mem_att_send_option
+0x4d91 mem_lell_cur_opcode
+0x4d92 mem_prepare_write_len
+0x4d93 mem_ipc_c51_timer
+0x4d93 mem_prepare_write_offest
+0x4d95 mem_le51_payload_len
+0x4d96 mem_le51_cmd
+0x4d97 mem_le51_tx_length
+0x4d98 mem_le51_txbuff_inuse
+0x4d99 mem_24g_pairing_sm
+0x4d9a mem_24g_addr_copy
+0x4d9e mem_ipc_bt_100ms_timer
+0x4d9f mem_ipc_c51_100ms_timer
+0x4da0 mem_adc_config_flag
+0x4da1 mem_adc_channel
+0x4da2 mem_adc_0v
+0x4da4 mem_adc_3v
+0x4da6 mem_adc_current_value
+0x4da8 mem_kb_map_c51
+0x4e46 mem_kb_ks_col
+0x4e5b mem_hibernate_flag
+0x4e5c mem_new_supervision_to
+0x4e5e mem_kb_wake_timer
+0x4e5f mem_kb_last_data
+0x4800 mem_shutter_send_data
+0x4804 mem_shutter_key_temp
+0x4805 mem_shutter_send_length
+0x4806 mem_shutter_clkn_bt_last
+0x480a mem_shutter_key
+0x480b mem_shutter_flag
+0x480c mem_shutter_cable_unplug_conut
+0x480d mem_shutter_hid_disconn_count
+0x480e mem_shutter_1key_send_sm
+0x480f mem_shutter_iphonekey_gpio
+0x4810 mem_shutter_androidkey_gpio
+0x4811 mem_shutter_key_number
+0x4812 mem_shutter_uuid_list
Index: patch/patch.dat
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/patch.dat	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/patch.dat	(working copy)
@@ -0,0 +1,65 @@
+mem_patch00:
+29   #mem_patch00
+04   #mem_patch01
+00   #mem_patch02
+00   #mem_patch03
+80   #mem_patch04
+09   #mem_patch05
+00   #mem_patch06
+00   #mem_patch07
+0c   #mem_patch08
+00   #mem_patch09
+11   #mem_patch0A
+00   #mem_patch0B
+00   #mem_patch0C
+00   #mem_patch0D
+00   #mem_patch0E
+00   #mem_patch0F
+00   #mem_patch10
+00   #mem_patch11
+35   #mem_patch12
+00   #mem_patch13
+00   #mem_patch14
+00   #mem_patch15
+4f   #mem_patch16
+02   #mem_patch17
+00   #mem_patch18
+00   #mem_patch19
+00   #mem_patch1A
+00   #mem_patch1B
+00   #mem_patch1C
+00   #mem_patch1D
+00   #mem_patch1E
+00   #mem_patch1F
+80   #mem_patch20
+00   #mem_patch21
+00   #mem_patch22
+09   #mem_patch23
+18   #mem_patch24
+00   #mem_patch25
+00   #mem_patch26
+c0   #mem_patch27
+00   #mem_patch28
+00   #mem_patch29
+00   #mem_patch2A
+00   #mem_patch2B
+00   #mem_patch2C
+48   #mem_patch2D
+00   #mem_patch2E
+00   #mem_patch2F
+80   #mem_patch30
+e0   #mem_patch31
+00   #mem_patch32
+90   #mem_patch33
+00   #mem_patch34
+00   #mem_patch35
+00   #mem_patch36
+00   #mem_patch37
+00   #mem_patch38
+a0   #mem_patch39
+01   #mem_patch3A
+00   #mem_patch3B
+4c   #mem_patch3C
+00   #mem_patch3D
+00   #mem_patch3E
+00   #mem_patch3F
Index: patch/ramcode.rom
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/ramcode.rom	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/ramcode.rom	(working copy)
@@ -0,0 +1,912 @@
+c5128017
+c000002e
+c001802b
+c002815c
+c005032b
+c013831b
+c014030a
+c0158310
+c02101a0
+c02181d9
+c02802ea
+c02a02f9
+c048021b
+c04901e1
+c04a01e7
+c04a8182
+c0580305
+c0588152
+c0590184
+c0598194
+c05b029b
+c05c8168
+20203bf1
+c003815a
+c00c0068
+c00d833c
+c011835b
+c01200a7
+c01f02ae
+c01f82b1
+c0438104
+c04682c3
+c04702cd
+c04782b9
+c04e0377
+c04f832f
+c066821e
+c0678055
+c068010b
+c07101bc
+c07181a4
+c0730032
+20203bf1
+204000ab
+20400070
+20203015
+6810813b
+60008b80
+70800608
+20203003
+6800807c
+203a0037
+204061d9
+6800807c
+247a0000
+68008055
+207a0000
+c0030046
+c008003c
+2020623e
+6800c748
+c1000000
+c0008044
+d8e0000a
+20407e53
+247a0000
+70474800
+2020629b
+20748000
+20200046
+68008177
+c281629b
+c2800049
+6800c25e
+203a62c7
+6800844d
+c4018000
+c4010000
+68020465
+d8400320
+98408400
+1c427e00
+98467c00
+24610000
+20206267
+da2047df
+20407f9f
+207a0000
+1fe22600
+2040005b
+20203ea5
+c10c0000
+c0036614
+c001005f
+20203e7d
+70429d00
+680147f4
+c283bf08
+2fec0001
+20408065
+20203f08
+68008450
+c1010000
+20203e7b
+680102cd
+203a4dfc
+680082cf
+c000806d
+20204dbb
+2040527a
+247a0000
+20204dc3
+6800c7dc
+203a0074
+6800c793
+207a0000
+20400163
+20740000
+1ff0fe00
+1fe20c00
+204000e3
+6000cce6
+c0008087
+1fe20400
+18c22200
+6800c040
+c3000084
+1a220c00
+c6848000
+18427e00
+c0018091
+20203bf1
+1a220c00
+d8a000f8
+202000db
+204000e3
+204000e3
+60008b7d
+2040008c
+20207c33
+204000e6
+18c20400
+18508400
+60094bad
+20600000
+204000e3
+1fe22200
+18c27e00
+600102b7
+1a20a201
+20404b2c
+18a0a5fe
+680142b7
+e0a10000
+580000a1
+e0a08000
+1a20f3ff
+680102b7
+1fe20c00
+204000dd
+1a420c00
+e8c10000
+60014e5f
+1fe0f202
+20407e45
+704e5e32
+20600000
+da400000
+2040527a
+247a0000
+2020524d
+680a4d8a
+1c427e00
+98467e00
+d8400640
+9846fc00
+20407efd
+1807fe00
+207a0000
+1c420400
+600a4d8a
+68094ce4
+18508400
+9840fe00
+1ff0fe00
+60014ce4
+1ff0fe00
+1fe17e03
+c1800000
+6800cda0
+c28000c2
+c28080c4
+c28100c6
+20600000
+708971bf
+202000ca
+708971af
+202000ca
+7089718f
+6800cda1
+60108973
+202000ca
+68108053
+79207e07
+60108053
+68108973
+1fe1fe30
+60108973
+70890674
+7089067c
+708972aa
+20001388
+68190150
+68108053
+793ffe07
+60108053
+18508400
+60094da6
+20600000
+204000e3
+1fe27200
+204000df
+2020008c
+204000e3
+e0a08000
+c20000df
+20600000
+204000e6
+e8c08000
+20600000
+58004bad
+98c67c00
+24628000
+d8c04ae5
+20600000
+df200003
+d8c04ce1
+18c22200
+68014c7b
+1ff0fe00
+1fe20a00
+1a220c00
+e8c08000
+e0a08000
+204000fa
+c20000f2
+18a27e00
+1ff0fe00
+60014c7b
+20600000
+58004c79
+98a67c00
+24628000
+d8a04bb1
+20600000
+58000010
+d8e00003
+20407e68
+9a40a400
+20600000
+da200000
+680a47ec
+1c422400
+1a427e00
+98467c00
+244100ff
+20207c09
+60088259
+6800cd9e
+1fe0fe01
+6000cd9e
+68008259
+207a0000
+1fe0ffff
+60008259
+20400130
+20400137
+2040012a
+20400118
+2020010f
+6800ce5e
+207a0000
+1fe0ffff
+6000ce5e
+c1808000
+704e5e32
+680147f4
+c4028000
+68014e5f
+207a0000
+2040527e
+247a0000
+68014e5f
+1fe22200
+20404b2c
+1a20f202
+d8c04e61
+20207e45
+6800cd87
+207a0000
+1fe0ffff
+6000cd87
+203a3fa4
+20203fa6
+6800c7f2
+207a0000
+1fe0ffff
+6000c7f2
+247a0000
+20403ebd
+20204b22
+6800cd86
+207a0000
+1fe0ffff
+6000cd86
+20600000
+1a627e00
+1fe17ef0
+c1280000
+20400144
+1a627e00
+207a0000
+6000cce3
+202000eb
+1a627e00
+c0058148
+c0010150
+20600000
+704e5e28
+5800000a
+60014e5f
+680142b7
+e0a10000
+580001a1
+e0a10000
+20600000
+704e5e00
+20600000
+70416e7f
+20403cf3
+6800ce5b
+207a0000
+704e5b00
+1c427e00
+60024d8a
+20600000
+20203bf1
+20203bf1
+20403392
+20403407
+20403024
+20203022
+68014c79
+68094c7b
+20200165
+68014bad
+68094baf
+98467c00
+2022e9b1
+2020320b
+6800c219
+247a0000
+70804206
+58000f0c
+20403da7
+58030d40
+20403bf3
+37d98200
+1e226000
+20403b36
+20001388
+20203d9d
+6800c219
+243a017a
+20403d91
+20007530
+20007530
+20007530
+20403b0a
+70804204
+6810896b
+1fe17ecf
+6010896b
+1fe1fe30
+6010896b
+20600000
+20400174
+20203aaf
+c6118000
+20403cab
+6801c210
+207a0000
+6800c131
+207a0000
+2040527e
+247a0000
+20403dca
+247a0000
+20403b36
+6800c7dc
+203a3d25
+6800c793
+207a0000
+20203d25
+20400163
+24740000
+20400160
+24740000
+700b7f01
+700b7e01
+204002b4
+68008b7f
+247a0000
+20400163
+24740000
+20203d2d
+20403e25
+20406dec
+204035d6
+20203480
+78547c00
+204061d9
+68008048
+207a0000
+c283df10
+c00101ac
+c00381b9
+20205ee0
+18007e11
+204061b5
+68008049
+1fe20400
+c00001b4
+c00701b4
+c00e01b4
+20600000
+e0a08000
+6800c702
+e0a08000
+5800000e
+20205fa6
+20406055
+70007264
+20600000
+6800807d
+c00181c8
+c0025c67
+c00381d6
+20205b92
+68008030
+c280ddb5
+680104e2
+1fe3fe00
+1fe67c0f
+24215db5
+20205da4
+680084df
+60008445
+c00c01d4
+c0098307
+c01981ce
+20205c58
+6800844d
+79207e00
+6000844d
+700b7d01
+20407c27
+20205c83
+20403f9e
+20205ccc
+680084df
+60008446
+20205cf3
+20403d61
+20403be2
+20213498
+20403204
+24343498
+20403812
+243a01a1
+20600000
+60088017
+1840a204
+20203a86
+60088017
+1840a200
+20203ab6
+204001e4
+58000500
+20403bf3
+204001ef
+6800cd99
+d8a046d8
+243a01fb
+20200202
+70890601
+7089003c
+708901e0
+70896d12
+2000000a
+70890201
+7089023d
+2000000a
+708903b7
+2000000a
+7089027d
+20600000
+6802cab4
+e0a28000
+e8c28000
+e0a28000
+708956c2
+708955d0
+20600000
+6802cabe
+e0a28000
+e8c28000
+e0a28000
+708956df
+2040020a
+708955df
+20600000
+20000004
+708955d1
+20000004
+708955d2
+20000004
+708955d4
+20000004
+20600000
+708955d4
+20000004
+708955d2
+20000004
+708955d1
+20000004
+708955d0
+708956c0
+20600000
+2030ba6f
+20400212
+20203a6f
+700b7e00
+70017706
+20403fa4
+58000291
+6001428e
+5800029a
+6001428a
+5800013c
+60014292
+580002b8
+60014290
+58000070
+6001428c
+58000294
+60014288
+58004ae5
+1ff0fe00
+60014bad
+60014baf
+20403e0b
+58004bb1
+1ff0fe00
+60014c79
+60014c7b
+6800ce5b
+c02d024c
+2035824a
+68014da2
+1ff0fe00
+60014da2
+68014da4
+1ff0fe00
+60014da4
+20400258
+680402a0
+243a0246
+68014ad4
+1ff0fe00
+203a0246
+60014da4
+704ce32f
+204000eb
+70828003
+20600000
+704ce330
+20200247
+1ce27e00
+203a02bb
+20405b63
+20404d99
+58000000
+60044040
+600147f4
+58000000
+60014ce4
+60014d93
+704ce333
+20200247
+2040688a
+580007e2
+da2002a0
+d840000c
+204068d3
+2040688d
+680402a0
+207a0000
+6800cda0
+c2800265
+c2808273
+c2810283
+20600000
+680902a4
+680102aa
+18422400
+1fe22200
+1ff0fe00
+60014da4
+1a227e00
+98462600
+1a63a600
+1a427e00
+9a667e00
+1ff0fe00
+60014da2
+20600000
+680902a2
+680102a8
+18422400
+1fe22200
+98462600
+1a6b2600
+1a427e00
+9a667e00
+1ff0fe00
+60014da2
+1a63a600
+1a227e00
+9a667e00
+1ff0fe00
+60014da4
+20600000
+680902a0
+680102a6
+18422400
+1fe22200
+98462600
+1a427e00
+9a667e00
+1ff0fe00
+60014da2
+1a6bfe00
+9a20fe00
+1ff0fe00
+60014da4
+20600000
+2040527c
+247a0000
+20200070
+78347c00
+68120138
+79347e1a
+6012004c
+20403db0
+7000a201
+20600000
+20400163
+24740000
+20400160
+24740000
+700b7f01
+700b7e01
+204002b4
+68008b7f
+247a0000
+20400163
+24740000
+20203d4f
+1a627e00
+20600000
+58000000
+600142a0
+600147f4
+6000c27f
+20203fa6
+70890f36
+70890b5f
+202053d4
+70890f2e
+70890bff
+202053d9
+68008b7e
+2000000a
+c08002b4
+20600000
+20600000
+700b7e03
+204002b4
+704e5b5a
+20403db8
+68120138
+793ffe0f
+6012004c
+20403db0
+d85fffff
+20203cda
+20407c20
+da2047e4
+20407f9f
+1fe20400
+20407c24
+18427e00
+207a0000
+c00082e1
+c00182e4
+20207c5a
+6800807c
+203a02d2
+204061d9
+6800807c
+243a7c8c
+68008b7d
+c584fc87
+c00202d7
+c01402dd
+20207c7b
+680147f4
+c30182da
+20207ca4
+58000000
+60020051
+20600000
+70007c37
+68014e5c
+60010051
+20600000
+20403eff
+70017706
+20207c97
+70017706
+6800c7dc
+c00002e8
+70017717
+70425e01
+20207ca2
+204032df
+2422b568
+68008047
+c301b571
+6800c165
+c009b562
+68014aca
+1fe67c14
+24213562
+60010091
+6800cac9
+60008090
+58004acc
+60010179
+20203562
+68010091
+60014aca
+1fe67c14
+2421358f
+98007200
+68008090
+6000cac9
+68010179
+98000c00
+d8a04acc
+20407e45
+2020358f
+20403b36
+20203cdc
+700b7d20
+20407c27
+2020030b
+600a0034
+70474801
+5800ffff
+60010032
+70007301
+20600000
+20403baa
+20400313
+20203267
+1c40c201
+20403a54
+18004803
+20403a42
+20403bae
+20403bb4
+20403bc5
+2020375c
+78547c00
+68010032
+d840ffff
+98467c00
+24628000
+68020034
+20380324
+9d067e00
+20200325
+9c467e00
+1fe67c04
+24610000
+18007e00
+60010032
+78347c00
+20600000
+600c02a0
+20407e53
+680c02a0
+2020307c
+2040527a
+247a0000
+20400333
+20206dfd
+6800c132
+c1008000
+6800c3cd
+207a0000
+1fe22200
+7043cd00
+1a227e00
+c0284ddc
+20600000
+e8c08000
+c005033f
+20204e14
+e8c08000
+1fe20e00
+e8c10000
+1fe22200
+1a627e00
+9a262600
+5800000b
+e0a08000
+18e27e00
+e0a08000
+e8c10000
+c001034d
+c0018354
+20203bf1
+58020008
+e0a30000
+58000200
+e0a20000
+18007e0c
+9a40a400
+20204e20
+5803000c
+e0a30000
+58000006
+e0a40000
+18007e10
+9a40a400
+20204e20
+204052c4
+18002400
+204052d0
+1fe20a00
+680102cd
+1fe22600
+680102cb
+98000c00
+20400365
+20205110
+e8c08000
+c0050368
+20205116
+e8c08000
+1fe20e00
+e8c10000
+1fe22200
+e8c10000
+600102a0
+1a627e00
+9a262600
+204052d0
+5800000b
+e0a08000
+18e27e00
+e0a08000
+680102a0
+2020034a
+680102cb
+1fe20c00
+e8c08000
+1fe1040f
+1ff1fe00
+c004cb18
+c003cb18
+c0050385
+c0028383
+c000cb05
+c0024b18
+20600000
+20400385
+20204b11
+58000003
+6000ccff
+58000002
+e0a08000
+1fe27200
+20407e45
+df200004
+d8c04cff
+204000ed
+704d8702
+20600000
Index: patch/rf.dat
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/rf.dat	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/rf.dat	(working copy)
@@ -0,0 +1,108 @@
+mem_lpm_config:8f 10 ce
+mem_lpm_xtalcnt:00 0a 0b ef 0f
+mem_lpm_hibernate_switch:00
+mem_gpio_wakeup_low:00 00 00 00 00 00 00 00
+mem_fcomp_mul:02
+mem_fcomp_div:24
+mem_iscan_window:12 00
+mem_iscan_interval:00 02
+mem_pscan_window:12 00
+mem_pscan_interval:00 02
+mem_inq_window:20 00
+mem_page_window:20 00
+mem_page_to:00 20
+mem_rx_window_init:80 03
+mem_rx_window_sniff:00 06
+mem_new_supervision_to:00 13
+
+mem_eeprom_base:30 3f
+mem_eeprom_block_size:20
+#pointers to tail space of mem_le_att_list
+mem_le_att_list+360:
+07 ff #2M_IF
+0a fb
+0b ff 
+
+#agc table
+1a fb
+1b fb
+1c fb
+1d f6
+1e f2
+1f ee
+20 ea
+21 e6
+22 e2
+23 de
+24 da
+25 d6
+26 d2
+27 ce
+28 ca
+29 c6
+2a c2
+2b bd
+2c b9
+2d b5
+2e b1
+2f ad
+30 a9
+31 80
+32 80
+33 80
+34 c0
+35 c1
+36 c2
+37 c3
+38 c4
+39 c5
+3a c6
+3b c7
+3c 06
+3d 07
+3e 46
+3f 85
+40 86
+41 87
+42 c6
+43 c7
+44 d6
+45 d7
+46 e6
+47 f5
+48 00
+49 f8
+4a 7f
+4e ec
+4f 5e
+
+# tx power
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
+#dpll
+68 e4
+69 00
+6a 00
+6b 30
+ff
+mem_rf_init_ptr:mem_le_att_list+360
+
+mem_le_att_list+468:
+mem_5db_tx_power_param:
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
+mem_24g_paring_tx_power_param:
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
Index: patch/sch.rom
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/sch.rom	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/sch.rom	(working copy)
@@ -0,0 +1,558 @@
+mem_patch00:
+29   #mem_patch00
+04   #mem_patch01
+00   #mem_patch02
+00   #mem_patch03
+80   #mem_patch04
+09   #mem_patch05
+00   #mem_patch06
+00   #mem_patch07
+0c   #mem_patch08
+00   #mem_patch09
+11   #mem_patch0A
+00   #mem_patch0B
+00   #mem_patch0C
+00   #mem_patch0D
+00   #mem_patch0E
+00   #mem_patch0F
+00   #mem_patch10
+00   #mem_patch11
+35   #mem_patch12
+00   #mem_patch13
+00   #mem_patch14
+00   #mem_patch15
+4f   #mem_patch16
+02   #mem_patch17
+00   #mem_patch18
+00   #mem_patch19
+00   #mem_patch1A
+00   #mem_patch1B
+00   #mem_patch1C
+00   #mem_patch1D
+00   #mem_patch1E
+00   #mem_patch1F
+80   #mem_patch20
+00   #mem_patch21
+00   #mem_patch22
+09   #mem_patch23
+18   #mem_patch24
+00   #mem_patch25
+00   #mem_patch26
+c0   #mem_patch27
+00   #mem_patch28
+00   #mem_patch29
+00   #mem_patch2A
+00   #mem_patch2B
+00   #mem_patch2C
+48   #mem_patch2D
+00   #mem_patch2E
+00   #mem_patch2F
+80   #mem_patch30
+e0   #mem_patch31
+00   #mem_patch32
+90   #mem_patch33
+00   #mem_patch34
+00   #mem_patch35
+00   #mem_patch36
+00   #mem_patch37
+00   #mem_patch38
+a0   #mem_patch39
+01   #mem_patch3A
+00   #mem_patch3B
+4c   #mem_patch3C
+00   #mem_patch3D
+00   #mem_patch3E
+00   #mem_patch3F
+
+
+mem_class: 40 25 00
+
+mem_lap:36 08 22 08 66 22    
+mem_local_name_length:
+'Bluetooth 3.0 Keyboard
+mem_sniff_param_interval:0e 00
+mem_sniff_param_attempt:01
+mem_sniff_param_timeout:01
+mem_unsniff2sniff_timer:0a
+mem_ssp_enable:00
+mem_ui_profile_supported:01
+
+mem_eir_enable:01
+
+mem_all_uuid_16bits:
+06
+03#Type: Complete list of 16-bit UUIDs
+1100 0001 0210 2411  0012  0100
+
+mem_all_uuid_128bits:00
+
+#mouse uuid
+mem_mouse_uuid_list:
+#uuids
+04 0011 0100 1002 1124
+
+#handle
+00010000
+
+#total length
+3601aa
+
+#attribute start, first 4 digit is attribute ID
+090000 0a 00010000
+090001 3503 191124
+090004 350d 3506 190100 090011 3503 190011
+090005 3503 191002
+090006 3509 09656e 09006a 090100
+090009 3508 3506 191124 090100
+09000d 350f 350d 3506 190100 090013 3503 190011
+
+#Service Name
+#090100 2517
+#'Apple Wireless Keyboard
+#41 70 70 6c 65 20 57 69 72 65 6c 65 73 73 20 4b 65 79 62 6f 61 72 64
+#Service Name
+090100 253d
+#'Broadcom Bluetooth Wireless  Keyboard                        
+4272 6f61 6463 6f6d 2042 6c75 6574 6f6f 7468 2057 6972 656c 6573 7320 204b 6579 626f 6172 6420 
+2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 20
+
+#Service Description
+090101 2508
+#'Keyboard
+4b6579626f617264
+
+#Provider Name
+#090102 250a
+#'Apple Inc.
+#41 70 70 6c 65 20 49 6e 63 2e
+#Provider Name
+090102 2510
+#'Broadcom Corp.  
+4272 6f61 6463 6f6d 2043 6f72 702e 2020
+
+090200 090100
+090201 090111
+090202 0840
+090203 0821
+090204 2801
+090205 2801
+090206 3599 3597 0822 2593
+
+# hid descriptor
+0501 # Usage Page(Generic Desktop)
+0906 # Usage(Keyboard)
+a101 # Collection(Application)
+8501 # Report ID(1)
+7501 # Report Size(1)
+9508 # Report Count(8)
+0507 # Usage Page(Keyboard/Keypad)
+19e0 # Usage Minimum(224)
+29e7 # Usage Maximum(231)
+1500 # Logical Minimum(0)
+2501 # Logical Maximum(1)
+8102 # Input(Data Variable Absolute) ; Modifier byte
+9501 # Report Count(1)
+7508 # Report Size(8)
+8103 # Input(Constant Variable Absolute) ; 
+9505 # Report Count(5)
+7501 # Report Size(1)
+0508 # Usage Page(LEDs)
+1901 # Usage Minimum(1)
+2905 # Usage Maximum(5)
+9102 # Output(Data Variable Absolute) ; LED report
+9501 # Report Count(1)
+7503 # Report Size(3)
+9103 # Output(Constant Variable Absolute) ; 
+9506 # Report Count(6)
+7508 # Report Size(8)
+1500 # Logical Minimum(0)
+26ff00 # Logical Maximum(255)
+0507 # Usage Page(Keyboard/Keypad)
+1900 # Usage Minimum(0)
+29ff # Usage Maximum(255)
+8100 # Input(Data Array) ; Key arrarys 6 bytes
+c0 # End Collection
+
+050c # Usage Page(Consumer)
+0901 # Usage(Control)
+a101 # Collection(Application)
+8502 # Report ID(2)
+1500 # Logical Minimum(0)
+2501 # Logical Maximum(1)
+7501 # Report Size(1)
+9516 # Report Count(22)
+0ab101 # Usage(433)
+0a2302 # Usage(AC Home)					#01 home
+0aae01 # Usage(virtual keyboard)                        #02
+0a8a01 # Usage(AL Email Reader)                      #03
+0940 # Usage(Menu)						#04 menu
+096f # Usage(Lignt Down)					#05
+0a2102 # Usage(AC Search) 					#06
+09b6 # Usage(Scan Previous Track) 			#07 previous music
+09cd # Usage(205)							#08 start music
+09b5 # Usage(Scan Next Track)				#09 next music
+09e2 # Usage(Mute)						#0a
+09ea # Usage(Volume Down)					#0b
+09e9 # Usage(Volume Up)					#0c
+0930 # Usage(Power)                                         #0d
+0a8301 # Usage(music)                                      #0e
+0a0503 # Usage(773)
+0a0703 # Usage(775)
+0a0803 # Usage(776)
+0a0103 # Usage(769)
+0a9e01 # Usage(AL Terminal Lock/Screensaver)	#13
+0a0a03 # Usage(778)
+#0a0b03 # Usage(779)
+0970 # Usage(Lignt Up)						#15
+8102 # Input(Data Variable Absolute)
+9501 # Report Count(1)
+7502 # Report Size(2)
+8103 # Input(Constant Variable Absolute)
+c0 # End Collection
+
+090207 3508 3506 090409 090100
+09020b 090100
+09020c 091f40
+09020d 2800
+09020e 2801
+09020f 090012
+090210 090000
+#attribute end
+
+#uuids for pnpInformation	
+03 1002 1200 0001
+
+#handle
+00010001
+
+#total length 90 bytes
+3600a1
+
+#attribute list
+090000 0a00010001
+090001 3503 191200
+090004 350d 3506 190100 090001 3503 190001
+090006 3509 09656e 09006a 090100
+090009 3508 3506 191200 090100
+090100 252f42726f6164636f6d20426c7565746f6f746820576972656c657373204b6579626f61726420506e5020536572766572
+090101 25084b6579626f617264
+090200 090103
+090201# VendorID
+090a5c
+090202#ProductID
+098502
+090203 090001
+090204 2801
+090205 090002
+
+#attribute end
+00
+
+mem_kb_map_c51:
+14 # 00 q
+2b # 01 tab
+04 # 02 a
+29 # 03 esc
+1d # 04 z
+00
+35 # 06 `
+1e # 07 1
+1a # 08 w
+39 # 09 caps
+16 # 0a s
+00
+1b # 0c x
+00
+3a # 0e f1
+1f # 0f 2
+08 # 10 e
+3c # 11 f3
+07 # 12 d
+3d # 13 f4
+06 # 14 c
+63 # 15 .
+3b # 16 f2
+20 # 17 3
+15 # 18 r
+17 # 19 t
+09 # 1a f
+0a # 1b g
+19 # 1c v
+05 # 1d b
+22 # 1e 5
+21 # 1f 4
+18 # 20 u
+1c # 21 y
+0d # 22 j
+0b # 23 h
+10 # 24 m
+11 # 25 n
+23 # 26 6
+24 # 27 7
+0c # 28 i
+30 # 29 ]
+0e # 2a k
+3f # 2b f6
+36 # 2c ,
+00
+2e # 2e =
+25 # 2f 8
+12 # 30 o
+40 # 31  f7
+0f  # 32 l
+00 # 33
+37 # 34 .
+00 # 35
+41 # 36 f8
+26 # 37 9
+00 # 38
+00 # 39
+00 # 3a
+2c # 3b space
+44 # 3c f11
+51 # 3d down
+4c # 3e delete
+00 # 3f
+00  # 40 
+81  # 41 lshift
+85 # 42 rshift
+00
+00 # 44 
+00
+00 # 46 
+00 # 47  
+00 #48	
+2a #49 bksp
+31 #4a \
+00 # 4b 
+28 # 4c enter
+00 # 4d 
+42 # 4e  f9
+43 #4f f10
+13  #50 p
+2f  # 51 [
+33 # 52 ;
+34 #53 '
+00 #54  
+38 #55 /
+2d #56 
+27 #57 0
+00 #58
+00 # 59 
+80 # 5a  lctrl
+83 #5b lwin
+00 # 5c  
+87 #5d rwin
+00 # 5e 
+45 # 5f  f12
+00 # 60 
+00 # 61 
+00 # 62 
+00 # 63 
+86 # 64 ralt
+00 # 65 
+7f# 66 fn 
+3e # 67  f5
+00 # 68
+82 # 69 lalt
+00 # 6a  
+00 # 6b  
+00
+00  #6d  
+00
+00 # 6f  
+00
+00
+00
+00
+00 # 74  
+00 # 75 
+00 # 76
+00 # 77  
+00 # 78
+00 # 79  
+00 # 7a
+00 # 7b
+00 # 7c
+4f # 7d right
+00 
+00
+00
+00
+00
+52 #83 up
+00
+50 # 85 left      
+#Auto reconnection after power on
+
+memui_uuid_table:mem_mouse_uuid_list
+#Auto reconnection after power on
+mem_device_option:43
+mem_ptt:0
+mem_features:
+ff
+ff
+8f
+f8	#fe--EDR  F8--BR
+83	#AFHclose 83
+9d
+59
+82
+
+#bluetootch param init
+mem_sp_flag:00
+mem_lpm_current_mult:00
+mem_master_sp_flag:00
+mem_le_ch_mapped:27
+
+mem_ui_button_gpio:ff
+mem_led_gpio:ff
+
+
+#2=mouse 4=dongle 6=ukey 7=ir
+mem_lpm_mode:01
+mem_lpm_mult:40
+mem_lpm_mult_timeout:03
+mem_lpm_overhead:08
+mem_lpm_interval:00 02
+mem_scan_mode:00
+
+mem_seqi:80
+
+
+mem_ipc_tx_evt_buff:02 01
+
+mem_kb_ks_col:
+08
+09
+0a
+0b
+0c
+0d
+0e
+11
+12
+13
+14
+15
+16
+17
+18
+19
+1a
+1b
+
+mem_adc_config_flag:01
+mem_adc_channel:30
+mem_adc_0v:9f 3e
+mem_adc_3v:cd 4d
+
+
+mem_lpm_config:8f 10 ce
+mem_lpm_xtalcnt:00 0a 0b ef 0f
+mem_lpm_hibernate_switch:00
+mem_gpio_wakeup_low:00 00 00 00 00 00 00 00
+mem_fcomp_mul:02
+mem_fcomp_div:24
+mem_iscan_window:12 00
+mem_iscan_interval:00 02
+mem_pscan_window:12 00
+mem_pscan_interval:00 02
+mem_inq_window:20 00
+mem_page_window:20 00
+mem_page_to:00 20
+mem_rx_window_init:80 03
+mem_rx_window_sniff:00 06
+mem_new_supervision_to:00 13
+
+mem_eeprom_base:30 3f
+mem_eeprom_block_size:20
+#pointers to tail space of mem_le_att_list
+mem_le_att_list+360:
+07 ff #2M_IF
+0a fb
+0b ff 
+
+#agc table
+1a fb
+1b fb
+1c fb
+1d f6
+1e f2
+1f ee
+20 ea
+21 e6
+22 e2
+23 de
+24 da
+25 d6
+26 d2
+27 ce
+28 ca
+29 c6
+2a c2
+2b bd
+2c b9
+2d b5
+2e b1
+2f ad
+30 a9
+31 80
+32 80
+33 80
+34 c0
+35 c1
+36 c2
+37 c3
+38 c4
+39 c5
+3a c6
+3b c7
+3c 06
+3d 07
+3e 46
+3f 85
+40 86
+41 87
+42 c6
+43 c7
+44 d6
+45 d7
+46 e6
+47 f5
+48 00
+49 f8
+4a 7f
+4e ec
+4f 5e
+
+# tx power
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
+#dpll
+68 e4
+69 00
+6a 00
+6b 30
+ff
+mem_rf_init_ptr:mem_le_att_list+360
+
+mem_le_att_list+468:
+mem_5db_tx_power_param:
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
+mem_24g_paring_tx_power_param:
+55 d0
+56 c0
+57 4c
+58 6c
+59 50
+
Index: patch/sched.rom
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/sched.rom	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/sched.rom	(working copy)
@@ -0,0 +1,692 @@
+
+47fc:1E
+47fa:90 01
+47f8:90 01
+414a:80 25 00
+429f:06
+4140:66 66 88 55 22 af
+4702:
+'RX-380BT
+4280:0c 00
+4282:01
+4284:00
+4747:0a
+47dc:00
+47f6:01
+
+4172:01
+
+475b:
+06
+03#Type: Complete list of 16-bit UUIDs
+1100 0001 0210 2411  0012  0100
+
+4771:00
+
+#mouse uuid
+482a:
+04 0011 0100 1002 1124
+00 01 00 00
+36 01 61
+09
+00
+00
+0a
+00
+01
+00
+09
+09
+00
+01
+35
+03
+19
+11
+24
+09
+00
+04
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+11
+35
+03
+19
+00
+11
+09
+00
+05
+35
+03
+19
+10
+02
+09
+00
+06
+35
+09
+09
+65
+6e
+09
+00
+6a
+09
+01
+00
+09
+00
+09
+35
+08
+35
+06
+19
+11
+24
+09
+01
+00
+09
+00
+0d
+35
+0f
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+13
+35
+03
+19
+00
+11
+09
+01
+00
+25
+16
+59 69 43 68 69 70#YiChip
+20 42 6c 75 65 74 6f 6f 74 68 20 4d 6f 75 73 65
+09
+01
+01
+25
+05
+4d
+6f
+75
+73
+65
+09
+01
+02
+25
+06
+59 69 43 68 69 70#YiChip
+09
+02
+00
+09
+01
+00
+09
+02
+01
+09
+01
+11
+09
+02
+02
+08
+80
+09
+02
+03
+08
+21
+09
+02
+04
+28
+01
+09
+02
+05
+28
+01
+09
+02
+06
+35
+81
+35
+7f
+08
+22
+25
+7b
+05
+01
+09
+02
+a1
+01
+85
+02
+09
+01
+a1
+00
+05
+09
+19
+01
+29
+08
+15
+00
+25
+01
+75
+01
+95
+08
+81
+02
+05
+01
+09
+30
+09
+31
+16
+01
+f8
+26
+ff
+07
+75
+0c
+95
+02
+81
+06
+09
+38
+15
+81
+25
+7f
+75
+08
+95
+01
+81
+06
+05
+0c
+0a
+38
+02
+75
+08
+95
+01
+81
+06
+c0
+c0
+05
+0c
+09
+01
+a1
+01
+85
+03
+75
+10
+95
+02
+15
+01
+26
+8c
+02
+19
+01
+2a
+8c
+02
+81
+60
+c0
+06
+00
+ff
+09
+01
+a1
+01
+85
+10
+75
+08
+95
+06
+15
+00
+26
+ff
+00
+09
+01
+81
+00
+09
+01
+91
+00
+c0
+09
+02
+07
+35
+08
+35
+06
+09
+04
+09
+09
+01
+00
+09
+02
+08
+28
+00
+09
+02
+09
+28
+01
+09
+02
+0a
+28
+01
+09
+02
+0b
+09
+01
+00
+09
+02
+0c
+09
+0c
+80
+09
+02
+0d
+28
+00
+09
+02
+0e
+28
+01
+
+04 1002 1200 0100 0001
+00 01 00 01
+36 00 5a
+09
+00
+00
+0a
+00
+01
+00
+01
+09
+00
+01
+35
+03
+19
+12
+00
+09
+00
+04
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+01
+35
+03
+19
+00
+01
+09
+00
+05
+35
+03
+19
+10
+02
+09
+00
+09
+35
+08
+35
+06
+19
+12
+00
+09
+01
+00
+09 02 00#SpecificationID
+09 01 03#DeviceID Spec Version:1.3
+
+09 02 01# VendorID
+09 0a 5c#Unknown See http://www.bluetooth.org/assigned-number.htm
+
+09 02 02#ProductID
+09 00 01#0x0001
+
+09 02 03#Version
+09 01 29#Product Version:1.2.9
+09
+02
+04
+28
+01
+09
+02
+05
+09
+00
+02
+00
+00
+
+01 00 01
+00 01 00 01
+36 00 5a
+09
+00
+00
+0a
+00
+01
+00
+01
+09
+00
+01
+35
+03
+19
+12
+00
+09
+00
+04
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+01
+35
+03
+19
+00
+01
+09
+00
+05
+35
+03
+19
+10
+02
+09
+00
+09
+35
+08
+35
+06
+19
+12
+00
+09
+01
+00
+09
+02
+00
+09
+01
+00
+09
+02
+01
+09
+05
+ac
+09
+02
+02
+09
+02
+39
+09
+02
+03
+09
+00
+44
+09
+02
+04
+28
+01
+09
+02
+05
+09
+00
+02
+
+03 1101 0003 0100 
+00 01 00 02
+36 00 2f
+09
+00
+00
+0a
+00
+01
+00
+02
+09
+00
+01
+35
+03
+19
+11
+01
+09
+00
+04
+35
+0c
+35
+03
+19
+01
+00
+35
+05
+19
+00
+03
+08
+01
+09
+01
+00
+25
+09
+53
+50
+50
+20
+73
+
+4759:2a 48
+#Auto reconnection after power on
+41fb:0
+4138:
+ff
+ff
+8f
+f8	#fe--EDR  F8--BR
+83	#AFHclose 83
+9d
+59
+82
+
+4012:35 # patch12_0,patch12_2,patch12_4,patch12_5
+4216:8f 10 ca
+4219:00 0a 0b ef 07
+41f8:00
+00a3:00 00 00 00 00 00 00 00
+415d:02
+415e:24
+414d:12 00
+414f:00 02
+4151:12 00
+4153:00 02
+415b:20 00
+4157:20 00
+4159:00 20
+415f:80 03
+4161:00 06
+
+
+429b:30 1f
+42aa:20
+
+#pointers to tail space of mem_le_att_list
+466c:
+07 ff #2M_IF
+0a fb
+0b ff 
+
+#agc table
+1a fb
+1b fb
+1c fb
+1d f6
+1e f2
+1f ee
+20 ea
+21 e6
+22 e2
+23 de
+24 da
+25 d6
+26 d2
+27 ce
+28 ca
+29 c6
+2a c2
+2b bd
+2c b9
+2d b5
+2e b1
+2f ad
+30 a9
+31 80
+32 80
+33 80
+34 c0
+35 c1
+36 c2
+37 c3
+38 c4
+39 c5
+3a c6
+3b c7
+3c 06
+3d 07
+3e 46
+3f 85
+40 86
+41 87
+42 c6
+43 c7
+44 d6
+45 d7
+46 e6
+47 f5
+48 00
+49 f8
+4a 7f
+4e ec
+4f 5e
+
+# tx power
+55 d0
+56 e0
+57 4c
+58 6c
+59 50
+
+#dpll
+68 e4
+69 00
+6a 00
+6b 30
+ff
+4163:6c 46
+
+
Index: patch/user.dat
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/user.dat	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/patch/user.dat	(working copy)
@@ -0,0 +1,385 @@
+
+
+mem_class: 40 25 00
+
+mem_lap:36 08 22 08 66 22    
+mem_local_name_length:
+'Bluetooth 3.0 Keyboard
+mem_sniff_param_interval:0e 00
+mem_sniff_param_attempt:01
+mem_sniff_param_timeout:01
+mem_unsniff2sniff_timer:0a
+mem_ssp_enable:00
+mem_ui_profile_supported:01
+
+mem_eir_enable:01
+
+mem_all_uuid_16bits:
+06
+03#Type: Complete list of 16-bit UUIDs
+1100 0001 0210 2411  0012  0100
+
+mem_all_uuid_128bits:00
+
+#mouse uuid
+mem_mouse_uuid_list:
+#uuids
+04 0011 0100 1002 1124
+
+#handle
+00010000
+
+#total length
+3601aa
+
+#attribute start, first 4 digit is attribute ID
+090000 0a 00010000
+090001 3503 191124
+090004 350d 3506 190100 090011 3503 190011
+090005 3503 191002
+090006 3509 09656e 09006a 090100
+090009 3508 3506 191124 090100
+09000d 350f 350d 3506 190100 090013 3503 190011
+
+#Service Name
+#090100 2517
+#'Apple Wireless Keyboard
+#41 70 70 6c 65 20 57 69 72 65 6c 65 73 73 20 4b 65 79 62 6f 61 72 64
+#Service Name
+090100 253d
+#'Broadcom Bluetooth Wireless  Keyboard                        
+4272 6f61 6463 6f6d 2042 6c75 6574 6f6f 7468 2057 6972 656c 6573 7320 204b 6579 626f 6172 6420 
+2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 20
+
+#Service Description
+090101 2508
+#'Keyboard
+4b6579626f617264
+
+#Provider Name
+#090102 250a
+#'Apple Inc.
+#41 70 70 6c 65 20 49 6e 63 2e
+#Provider Name
+090102 2510
+#'Broadcom Corp.  
+4272 6f61 6463 6f6d 2043 6f72 702e 2020
+
+090200 090100
+090201 090111
+090202 0840
+090203 0821
+090204 2801
+090205 2801
+090206 3599 3597 0822 2593
+
+# hid descriptor
+0501 # Usage Page(Generic Desktop)
+0906 # Usage(Keyboard)
+a101 # Collection(Application)
+8501 # Report ID(1)
+7501 # Report Size(1)
+9508 # Report Count(8)
+0507 # Usage Page(Keyboard/Keypad)
+19e0 # Usage Minimum(224)
+29e7 # Usage Maximum(231)
+1500 # Logical Minimum(0)
+2501 # Logical Maximum(1)
+8102 # Input(Data Variable Absolute) ; Modifier byte
+9501 # Report Count(1)
+7508 # Report Size(8)
+8103 # Input(Constant Variable Absolute) ; 
+9505 # Report Count(5)
+7501 # Report Size(1)
+0508 # Usage Page(LEDs)
+1901 # Usage Minimum(1)
+2905 # Usage Maximum(5)
+9102 # Output(Data Variable Absolute) ; LED report
+9501 # Report Count(1)
+7503 # Report Size(3)
+9103 # Output(Constant Variable Absolute) ; 
+9506 # Report Count(6)
+7508 # Report Size(8)
+1500 # Logical Minimum(0)
+26ff00 # Logical Maximum(255)
+0507 # Usage Page(Keyboard/Keypad)
+1900 # Usage Minimum(0)
+29ff # Usage Maximum(255)
+8100 # Input(Data Array) ; Key arrarys 6 bytes
+c0 # End Collection
+
+050c # Usage Page(Consumer)
+0901 # Usage(Control)
+a101 # Collection(Application)
+8502 # Report ID(2)
+1500 # Logical Minimum(0)
+2501 # Logical Maximum(1)
+7501 # Report Size(1)
+9516 # Report Count(22)
+0ab101 # Usage(433)
+0a2302 # Usage(AC Home)					#01 home
+0aae01 # Usage(virtual keyboard)                        #02
+0a8a01 # Usage(AL Email Reader)                      #03
+0940 # Usage(Menu)						#04 menu
+096f # Usage(Lignt Down)					#05
+0a2102 # Usage(AC Search) 					#06
+09b6 # Usage(Scan Previous Track) 			#07 previous music
+09cd # Usage(205)							#08 start music
+09b5 # Usage(Scan Next Track)				#09 next music
+09e2 # Usage(Mute)						#0a
+09ea # Usage(Volume Down)					#0b
+09e9 # Usage(Volume Up)					#0c
+0930 # Usage(Power)                                         #0d
+0a8301 # Usage(music)                                      #0e
+0a0503 # Usage(773)
+0a0703 # Usage(775)
+0a0803 # Usage(776)
+0a0103 # Usage(769)
+0a9e01 # Usage(AL Terminal Lock/Screensaver)	#13
+0a0a03 # Usage(778)
+#0a0b03 # Usage(779)
+0970 # Usage(Lignt Up)						#15
+8102 # Input(Data Variable Absolute)
+9501 # Report Count(1)
+7502 # Report Size(2)
+8103 # Input(Constant Variable Absolute)
+c0 # End Collection
+
+090207 3508 3506 090409 090100
+09020b 090100
+09020c 091f40
+09020d 2800
+09020e 2801
+09020f 090012
+090210 090000
+#attribute end
+
+#uuids for pnpInformation	
+03 1002 1200 0001
+
+#handle
+00010001
+
+#total length 90 bytes
+3600a1
+
+#attribute list
+090000 0a00010001
+090001 3503 191200
+090004 350d 3506 190100 090001 3503 190001
+090006 3509 09656e 09006a 090100
+090009 3508 3506 191200 090100
+090100 252f42726f6164636f6d20426c7565746f6f746820576972656c657373204b6579626f61726420506e5020536572766572
+090101 25084b6579626f617264
+090200 090103
+090201# VendorID
+090a5c
+090202#ProductID
+098502
+090203 090001
+090204 2801
+090205 090002
+
+#attribute end
+00
+
+mem_kb_map_c51:
+14 # 00 q
+2b # 01 tab
+04 # 02 a
+29 # 03 esc
+1d # 04 z
+00
+35 # 06 `
+1e # 07 1
+1a # 08 w
+39 # 09 caps
+16 # 0a s
+00
+1b # 0c x
+00
+3a # 0e f1
+1f # 0f 2
+08 # 10 e
+3c # 11 f3
+07 # 12 d
+3d # 13 f4
+06 # 14 c
+63 # 15 .
+3b # 16 f2
+20 # 17 3
+15 # 18 r
+17 # 19 t
+09 # 1a f
+0a # 1b g
+19 # 1c v
+05 # 1d b
+22 # 1e 5
+21 # 1f 4
+18 # 20 u
+1c # 21 y
+0d # 22 j
+0b # 23 h
+10 # 24 m
+11 # 25 n
+23 # 26 6
+24 # 27 7
+0c # 28 i
+30 # 29 ]
+0e # 2a k
+3f # 2b f6
+36 # 2c ,
+00
+2e # 2e =
+25 # 2f 8
+12 # 30 o
+40 # 31  f7
+0f  # 32 l
+00 # 33
+37 # 34 .
+00 # 35
+41 # 36 f8
+26 # 37 9
+00 # 38
+00 # 39
+00 # 3a
+2c # 3b space
+44 # 3c f11
+51 # 3d down
+4c # 3e delete
+00 # 3f
+00  # 40 
+81  # 41 lshift
+85 # 42 rshift
+00
+00 # 44 
+00
+00 # 46 
+00 # 47  
+00 #48	
+2a #49 bksp
+31 #4a \
+00 # 4b 
+28 # 4c enter
+00 # 4d 
+42 # 4e  f9
+43 #4f f10
+13  #50 p
+2f  # 51 [
+33 # 52 ;
+34 #53 '
+00 #54  
+38 #55 /
+2d #56 
+27 #57 0
+00 #58
+00 # 59 
+80 # 5a  lctrl
+83 #5b lwin
+00 # 5c  
+87 #5d rwin
+00 # 5e 
+45 # 5f  f12
+00 # 60 
+00 # 61 
+00 # 62 
+00 # 63 
+86 # 64 ralt
+00 # 65 
+7f# 66 fn 
+3e # 67  f5
+00 # 68
+82 # 69 lalt
+00 # 6a  
+00 # 6b  
+00
+00  #6d  
+00
+00 # 6f  
+00
+00
+00
+00
+00 # 74  
+00 # 75 
+00 # 76
+00 # 77  
+00 # 78
+00 # 79  
+00 # 7a
+00 # 7b
+00 # 7c
+4f # 7d right
+00 
+00
+00
+00
+00
+52 #83 up
+00
+50 # 85 left      
+#Auto reconnection after power on
+
+memui_uuid_table:mem_mouse_uuid_list
+#Auto reconnection after power on
+mem_device_option:43
+mem_ptt:0
+mem_features:
+ff
+ff
+8f
+f8	#fe--EDR  F8--BR
+83	#AFHclose 83
+9d
+59
+82
+
+#bluetootch param init
+mem_sp_flag:00
+mem_lpm_current_mult:00
+mem_master_sp_flag:00
+mem_le_ch_mapped:27
+
+mem_ui_button_gpio:ff
+mem_led_gpio:ff
+
+
+#2=mouse 4=dongle 6=ukey 7=ir
+mem_lpm_mode:01
+mem_lpm_mult:40
+mem_lpm_mult_timeout:03
+mem_lpm_overhead:08
+mem_lpm_interval:00 02
+mem_scan_mode:00
+
+mem_seqi:80
+
+
+mem_ipc_tx_evt_buff:02 01
+
+mem_kb_ks_col:
+08
+09
+0a
+0b
+0c
+0d
+0e
+11
+12
+13
+14
+15
+16
+17
+18
+19
+1a
+1b
+
+mem_adc_config_flag:01
+mem_adc_channel:30
+mem_adc_0v:9f 3e
+mem_adc_3v:cd 4d
+
+
Index: patch/utilities.obj
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: patch/utilities.obj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: ram.c
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/ram.c	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/ram.c	(working copy)
@@ -0,0 +1,10 @@
+
+extern void YC_SysMain(void);
+
+
+void main()
+{
+	YC_SysMain();
+	//while(1){
+	//}
+}
Index: spi.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/spi.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/spi.h	(working copy)
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2016, yichip Semiconductor(shenzhen office)
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Yichip Semiconductor.
+ */
+
+  /** @file
+ *
+ * spi support for application
+ */
+#ifndef _SPI_H
+#define _SPI_H
+#include "common.h"
+
+#define	SPI_TBUFF		mem_spid_tbuf
+#define	SPI_RBUFF		mem_spid_rbuf
+
+/**
+ * This function SPI Initialize.
+ * 
+ * @param cb the IPC control block.
+ * 
+ * @return none.
+*/
+void SPI_Initialize(void);
+
+/**
+ * This function SPI read sensor.
+ * 
+ * @param cb the IPC control block.
+ * 
+ * @return none.
+*/
+u8_t SPI_read_sensor(u8_t reg_num);
+
+
+/**
+ * This function SPI write sensor.
+ * 
+ * @param cb the IPC control block.
+ * 
+ * @return none.
+*/
+u8_t SPI_write_sensor(u8_t value, u8_t reg_num);
+
+#endif/*YC_SPI_H*/
+
Index: sys.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/sys.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/sys.h	(working copy)
@@ -0,0 +1,16 @@
+#ifndef _YC_SYSTEM_H_
+#define _YC_SYSTEM_H_
+#include "common.h"
+
+#define TASK_NULL 							(0)
+#define TASK_OBTAIN_MOUSE_KEY				(TASK_NULL + 1)
+#define TASK_OBTAIN_MOUSE_SENSOR			(TASK_NULL + 2)
+#define TASK_OBTAIN_ADC_DATA				(TASK_NULL + 3)
+#define TASK_OBTAIN_MOUSE_TWHEEL			(TASK_NULL + 4)
+#define TASK_OBTAIN_MOUSE_VDD_COMPARE	(TASK_NULL + 5)
+#define TASK_OBTAIN_TIMER_100MS			(TASK_NULL + 6)
+#define TASK_OBTAIN_0V_ADC_BASE			(TASK_NULL + 7)
+#define TASK_OBTAIN_3V_ADC_BASE			(TASK_NULL + 8)
+#define TASK_OBTAIN_IPC_EVENT			(TASK_NULL + 9)
+
+#endif
Index: sys.c
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/sys.c	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/sys.c	(working copy)
@@ -0,0 +1,1050 @@
+#include "sys.h"
+#include "Peripheral.h"
+#include "gpio.h"
+#include "ipc.h"
+#include "iic.h"
+#include "keyscan.h"
+#include "kbhid.h"
+#include "adc.h"
+	
+#define KB_MODE_24G  1
+#define KB_MODE_BT   2
+#define KB_MODE_NONE 0
+#define KB_MODE_DISC 3
+#define KB_MODE_PAGE 4
+#define KB_MODE_PINCODE 5
+#define KB_MODE_PINCODE_OK 6
+#define KB_MODE_BB_CONN	7
+
+#define KB_IOS_SYSTEM		1
+#define KB_WINDOWS_SYSTEM	2
+#define KB_ANDROID_SYSTEM	3
+
+#define KB_PC_KEYSEL_CAPSLOCK		0x02
+#define KB_PC_KEYSEL_NUM			0x01
+
+#define LED_INTERVAL 20
+#define LED_ON		1
+#define LED_OFF		0
+
+#define RPT1_LEN	9
+#define RPT2_LEN	5
+
+#define EEPROM_RECON_INFO_BASE	0x4E20
+#define EEPROM_RECON_ADDR	EEPROM_RECON_INFO_BASE
+#define EEPROM_LINK_KEY	(EEPROM_RECON_INFO_BASE+6)
+#define CURRENT_SYSTEM_FLAG	(EEPROM_LINK_KEY+16)
+#define FIRST_SYSTEM_FLAG (EEPROM_LINK_KEY+16)
+
+#define SLEEP_TIMER	300
+
+volatile u8_t xdata hidBuff[10] _at_ mem_mouse_x;
+volatile u8_t currentState  _at_  0x4fff;
+volatile u8_t delaytimer  _at_  0x4ffe;
+volatile u8_t nextMode _at_ 0x4ffd;
+volatile u16_t sleepTimer _at_ 0x4ffb;
+volatile u8_t lockLpm _at_ 0x4ffa;
+volatile u8_t mkeyFlag _at_ 0x4ff9;
+volatile u8_t btButtonStateCurrent _at_ 0x4fd3;
+volatile u8_t btButtonState _at_ 0x4fd4;
+volatile u8_t CurrentSystem	_at_ 0x4fd5;
+volatile u8_t lowPowerFlag _at_ 0x4fd7;
+volatile u16_t adcCurrent _at_ 0x4fd8;
+volatile u8_t releaseId _at_ 0x4fda;
+volatile u8_t ledRedTime _at_ 0x4fdb;
+volatile u8_t fnFlag _at_ 0x4fdc;
+volatile u8_t powerLed _at_	0x4fde;
+volatile u8_t tempd _at_ 0x4fdf;
+volatile u8_t xdata hidBuff1[10] _at_ 0x4fc0;
+volatile u8_t BConnTime _at_ 0x4fef;
+volatile u8_t LockNumFlag _at_ 0x4fee;
+volatile u8_t test_capslock_flag _at_ 0x4fed;
+volatile u8_t rester_add _at_ 0x4fec;
+volatile u8_t Flag _at_	0x4feb;
+
+LOCAL volatile u8_t xdata m_linkkey[16] _at_ mem_link_key ;
+LOCAL volatile u8_t xdata m_remote_addr[6] _at_ mem_plap;
+LOCAL volatile u8_t xdata m_reconn_addr[6] _at_ mem_hci_plap;
+LOCAL volatile u8_t xdata m_24g_addr[4] _at_ mem_24g_addr_copy;
+//LOCAL volatile u8_t xdata m_lpm_mode _at_ mem_lpm_mode;
+
+#define HID_REPORTID_1	0x01
+#define HID_REPORTID_2	0x02
+
+//sample key
+#define HID_KEY_FN	0x7f
+#define HID_KEY_F1	0x43
+#define HID_KEY_F2	0x44
+#define HID_LEFT_CRTL 0x01
+
+#define HID_KEY_ENTER	0x28
+#define HID_KEY_1		0x1e
+//mult key
+#define HID_MKEY_HOME		 0x01
+#define HID_MKEY_VIRKB		 0x02
+#define HID_MKEY_EMAILREADER 0x03
+#define HID_MKEY_MENU		 0x04
+#define HID_MKEY_LIGHTDOWN	 0x05
+#define HID_MKEY_ACSEARCHER  0x06
+#define HID_MKEY_PREMUSIC	 0x07
+#define HID_MKEY_STARTMUSIC  0x08
+#define HID_MKEY_NEXTMUSIC	 0x09
+#define HID_MKEY_MUTE		 0x0a
+#define HID_MKEY_VOLDOWN	 0x0b
+#define HID_MKEY_VOLUP		 0x0c
+#define HID_MKEY_POWER		 0x0d
+#define HID_MKEY_MUSIC		 0x0e
+#define HID_MKEY_SCREESAVE   0x13
+#define HID_MKEY_LIGHTUP	 0x15
+#define HID_MKEY_INTERNET	 0x11
+
+
+#define FILL_HID_MKEY(x)	hidBuff[0] = HID_REPORTID_2;\
+			hidBuff[((x)>>3) + 1] |= (1 << ((x)&7));
+			
+static void HW_init()
+{
+	KS_Initialize(); 
+	GPIO_SetOutput(LED1_GPIO, 1);
+	GPIO_SetOutput(LED2_GPIO, 1);
+	GPIO_SetOutput(LED4_GPIO, 1);
+	GPIO_SetInput(BT_BUTTON_GPIO, 0);
+}
+
+static void kbLongSleep()
+{
+	IPC_TxControlCmd(IPC_CMD_ENTER_HIBERNATE);
+}
+
+static void kbClearMem()
+{
+	currentState = 0;
+	delaytimer = 0;
+	nextMode = 0;
+	sleepTimer = 0;
+	lockLpm = 0;
+	mkeyFlag = 0;
+	btButtonStateCurrent = 0;
+	btButtonState = 0;
+	//CurrentSystem = 0;
+	lowPowerFlag = 0;
+	adcCurrent = 0;
+	releaseId = 0;
+	ledRedTime = 0;
+	powerLed = 0;
+	BConnTime = 0;
+	LockNumFlag = 0;
+}
+
+
+static void kb_evtcb(u8_t evt)
+{
+	switch (evt) {
+	case IPC_EVT_HIBERNATE_WAKE:
+		kbClearMem();
+		HW_init(); 
+		lockLpm = 0;
+		IIC_Read(EEPROM_RECON_INFO_BASE ,6 , m_reconn_addr);
+	    Delay1ms(10);
+	    IIC_Read(EEPROM_LINK_KEY, 16, m_linkkey);
+		currentState = KB_MODE_PAGE;
+		IPC_TxControlCmd(IPC_CMD_RECONNECT);
+		break;
+	case IPC_EVT_RESET:
+		kbClearMem();
+		HW_init(); 
+		powerLed = 6;
+		GPIO_Setout(LED2_GPIO, 0);
+		lockLpm = 0;
+		IIC_Read(FIRST_SYSTEM_FLAG, 1, &Flag);
+		if ((Flag != 1)&&(Flag != 2)&&(Flag != 3)) {
+			CurrentSystem = KB_ANDROID_SYSTEM;
+			fnFlag = 1;
+		}
+		else {
+			IIC_Read(CURRENT_SYSTEM_FLAG, 1, &CurrentSystem);
+			if (CurrentSystem == KB_WINDOWS_SYSTEM) {
+				fnFlag = 0;
+			}
+			else {
+				fnFlag = 1;
+			}
+		}
+		IIC_Read(EEPROM_RECON_INFO_BASE ,6 , m_reconn_addr);
+		Delay1ms(10);
+		IIC_Read(EEPROM_LINK_KEY, 16, m_linkkey);
+		currentState = KB_MODE_PAGE;
+		IPC_TxControlCmd(IPC_CMD_RECONNECT);
+		break;
+	case IPC_EVT_WAKEUP:
+		KS_Initialize();
+		break;
+	case IPC_EVT_BB_CONNECTED:
+//		BConnTime = 12;
+		/*if ((m_remote_addr[0] == 0xff )&& (m_remote_addr[1] == 0xff) && (m_remote_addr[2] == 0xff) &&(m_remote_addr[3] == 0xff) && (m_remote_addr[4] == 0xff) && (m_remote_addr[5] == 0xff)) {
+				Flag = 0;
+		}*/
+		delaytimer = 100;
+		IPC_TxControlCmd(IPC_CMD_STOP_DISCOVERY);
+		if (currentState == KB_MODE_PAGE){
+			nextMode = KB_MODE_NONE;
+		}else {
+			nextMode = KB_MODE_DISC;
+		}
+		currentState = KB_MODE_BB_CONN;
+		break;
+	case IPC_EVT_PINCODE_REQ:
+		ipcPinlen = 0;
+		currentState = KB_MODE_PINCODE;
+		nextMode = KB_MODE_DISC;
+		break;
+	case IPC_EVT_HID_CONNECTED:
+		currentState = KB_MODE_BT;
+		GPIO_Setout(LED4_GPIO, 1);
+		while((m_remote_addr[0] == 0x00 )&& (m_remote_addr[1] == 0x00) && (m_remote_addr[2] == 0x00) &&(m_remote_addr[3] == 0xff) && (m_remote_addr[4] == 0xff) && (m_remote_addr[5] == 0xff));
+		IPC_TxControlCmd(IPC_CMD_ENTER_SNIFF);
+		IIC_WriteBlock(EEPROM_RECON_ADDR, 6, m_remote_addr);
+		nextMode = KB_MODE_NONE;
+		break;
+	case IPC_EVT_LINKKEY_GENERATE:
+		IIC_WriteBlock(EEPROM_LINK_KEY, 16, (u8_t *)m_linkkey);
+		Delay1ms(10);
+		break;
+	case IPC_EVT_RECONN_FAILED:
+	case IPC_EVT_RECONN_PAGE_TIMEOUT:
+	case IPC_EVT_BB_DISCONNECTED: {	
+			tIPCREJREASON disReason = IPC_GetBBDIsconnectReason();
+			if (nextMode == KB_MODE_DISC) {
+				GPIO_Setout(LED1_GPIO, 1);
+				currentState = KB_MODE_DISC;
+				nextMode = KB_MODE_NONE;
+				sleepTimer = 0;
+				IPC_TxControlCmd(IPC_CMD_START_DISCOVERY);
+				break;
+			}
+			if (disReason == ACL_CONNECTION_ALREADY_EXISTS) {
+
+			}
+			kbLongSleep();
+		}
+		break;
+	}
+}
+
+static u8_t searchChar(u8_t x, u8_t *p, u8_t len)
+{
+	u8_t i;
+	for (i=0 ; i<len ; i++) {
+		if (p[i] == x ) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+static void ledBlink()	
+{
+	if (currentState == KB_MODE_DISC)
+		GPIO_FlipOutBit(LED4_GPIO);
+}
+
+static void lowPowerLed()
+{
+	if (lowPowerFlag == 1) {
+		GPIO_FlipOutBit(LED2_GPIO);
+	}
+}
+
+static void adcCheck()
+{
+	u16_t adc3v = 0;
+	u16_t adc0v = 0;
+	u16_t adctemp = 0;
+	adctemp = ADC_GetCurrentValue();
+	if (adctemp == adcCurrent) {
+		return ;
+	}
+	adcCurrent = adctemp;
+	adc0v = ADC_Get0vBase();
+	adc3v = ADC_Get3vBase();
+	if (adcCurrent < ((((adc3v -adc0v)/30)*22) + adc0v)) { 
+		//lowPowerFlag = 1;
+		if(adcCurrent < ((((adc3v -adc0v)/30)*18) + adc0v)) {
+			//lowPowerFlag = 2;
+			//GPIO_Setout(LED2_GPIO, 1);
+			//YC_Ice_break();
+			;
+		}
+	}
+	else {
+		lowPowerFlag = 0;
+	}
+}
+static void kbTimer500ms()
+{
+	u8_t sleepState = 0;
+	adcCheck();
+	ledBlink();
+	lowPowerLed();
+	sleepTimer++; 
+	/*if (rester_add != 0) {
+		rester_add--;
+		if (rester_add == 0) {
+			GPIO_Setout(LED1_GPIO, 0);
+		}
+	}*/
+	if (currentState == KB_MODE_BB_CONN) {
+		BConnTime--;
+		if (BConnTime == 0) {
+				IPC_TxControlCmd(IPC_CMD_DISCONNECT);
+		}
+	}
+	if (powerLed != 0) {
+		powerLed--;
+		if(powerLed == 0) {
+			GPIO_Setout(LED2_GPIO, 1);
+		}
+	}
+	switch (currentState) {
+	case KB_MODE_DISC:
+		sleepState = KB_MODE_BT;
+		if (sleepTimer == 360)
+			goto LONG_SLEEP;
+	case KB_MODE_BT:
+		sleepState = KB_MODE_BT;
+		if (sleepTimer == 3600) {
+			IPC_TxControlCmd(IPC_CMD_DISCONNECT);
+			GPIO_Setout(LED2_GPIO, 1);
+			nextMode = KB_MODE_NONE;
+			lockLpm = 1;
+		}
+		break;
+	}
+	return;
+	
+LONG_SLEEP:	
+	kbLongSleep();
+}
+
+static void kbTimer100ms()
+{
+	if (delaytimer!=0) {
+		delaytimer --;
+	}
+}
+
+static void kbHidcb(u8_t *p,u8_t len) {
+	//p[0] is hid type,always is 1(kb) now
+	u8_t temp = p[1];
+	delaytimer = 40;
+	if (len < 2) {
+		return;
+	}
+	/*if(temp&KB_PC_KEYSEL_CAPSLOCK) {	
+		GPIO_Setout(LED1_GPIO, 0);
+	}
+	else {
+		GPIO_Setout(LED1_GPIO, 1);
+	}*/
+	if(temp & KB_PC_KEYSEL_NUM) {
+		GPIO_Setout(LED1_GPIO, 0);
+		LockNumFlag = 1;
+	}
+	else {
+		GPIO_Setout(LED1_GPIO, 1);
+		LockNumFlag = 0;
+	}
+}
+
+static tIPCControlBlock cb = 
+{
+	kb_evtcb,
+	NULL,
+	kbTimer500ms,
+	kbTimer100ms,
+	NULL,
+	kbHidcb
+};
+
+static void kb_init()
+{
+	IPC_Initialize(&cb);
+}
+
+static void kb_clean_key()
+{
+	xmemclear(hidBuff1, RPT1_LEN);	
+	hidBuff1[0] =HID_REPORTID_2;
+	IPC_TxHidData(hidBuff1, RPT2_LEN);
+	xmemclear(hidBuff, RPT1_LEN);
+	releaseId = HID_REPORTID_2;
+}
+
+static void kb_motion()
+{
+	tKSEVENT *pEvt = NULL;
+	u8_t temp = 0;
+	u8_t tempc = 0;
+	u8_t pvtFn;
+	u8_t tempfn = fnFlag;
+	u8_t i=0;	
+	if (!IPC_IsTxBuffEmpty())
+		return;
+		pEvt = KS_GetCurrentEvt();
+	if (pEvt == NULL)
+		return;
+	xmemclear(hidBuff,4);
+//Lock num
+	if (LockNumFlag == 1) {
+		i = KS_BUFF_POLL_LEN-1;
+		while (i--) {
+			temp = pEvt->ksPool[i];
+			if (temp != 0) {
+				break;
+			}
+		}
+		if (temp != 0) {
+			switch(temp) {
+			case USB_USAGE_M:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_0;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_J:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_1;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_K:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_2;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_L:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_3;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_U:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_4;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_I:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_5;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_O:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_6;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_7:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_7;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_8:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_8;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_9:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] =  USB_USAGE_KP_9;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_0:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_ASTERISK;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_P:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_MINUS;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_SEMICOLON:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_PLUS;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			case USB_USAGE_SLASH:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_SLASH;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			 case USB_USAGE_STOP_AND_GREATER:
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_KP_DOT;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+			    break;
+			default:
+				if (releaseId == HID_REPORTID_2)
+				    goto REASE_REPORT2;
+		        if (releaseId == HID_REPORTID_1)
+		            goto REASE_REPORT1;
+				break;
+			}	
+		}
+	}
+
+//set fnFlag
+	if (pEvt->ksPool[0] == HID_KEY_FN) {
+		temp = pEvt->ksPool[1];
+		tempc = pEvt->ksPool[2];
+		tempfn = fnFlag==1? 0:1; 
+		if (temp != 0 && temp!=HID_KEY_FN) {
+			switch (temp) {
+			case USB_USAGE_F:
+				if (tempc!=0) {
+					switch (tempc) {
+					case USB_USAGE_DELETE:
+						m_remote_addr[0] = 0xff;
+						m_remote_addr[1] = 0xff;
+						m_remote_addr[2] = 0xff;
+						m_remote_addr[3] = 0xff;
+						m_remote_addr[4] = 0xff;
+						m_remote_addr[5] = 0xff;
+						IIC_WriteBlock(EEPROM_RECON_ADDR, 6, m_remote_addr);
+						HW_init(); 
+						powerLed = 6;
+						GPIO_Setout(LED2_GPIO, 0);
+						lockLpm = 0;
+						IIC_Read(EEPROM_RECON_INFO_BASE ,6 , m_reconn_addr);
+						Delay1ms(10);
+						IIC_Read(EEPROM_LINK_KEY, 16, m_linkkey);
+						currentState = KB_MODE_PAGE;
+						IPC_TxControlCmd(IPC_CMD_RECONNECT);
+						break;
+						default:
+					break;
+					}
+				}
+				else {
+					break;
+				}
+			case USB_USAGE_C:
+				IPC_TxControlCmd(IPC_CMD_DISCONNECT);
+				nextMode = KB_MODE_DISC;
+				break;
+			case USB_USAGE_Q:	
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_2;
+				IPC_TxHidData(hidBuff, RPT2_LEN);
+				CurrentSystem = KB_ANDROID_SYSTEM;
+				IIC_WriteBlock(CURRENT_SYSTEM_FLAG, 1, &CurrentSystem);
+				fnFlag = 1;
+				Flag = 3;
+				IIC_WriteBlock(FIRST_SYSTEM_FLAG, 1, &Flag);
+				return;
+			case USB_USAGE_W:
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_2;
+				IPC_TxHidData(hidBuff, RPT2_LEN);
+				CurrentSystem = KB_WINDOWS_SYSTEM;
+				IIC_WriteBlock(CURRENT_SYSTEM_FLAG, 1, &CurrentSystem);
+				fnFlag = 0;
+				Flag = 2;
+				IIC_WriteBlock(FIRST_SYSTEM_FLAG, 1, &Flag);
+				return;
+			case USB_USAGE_E:
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_2;
+				IPC_TxHidData(hidBuff, RPT2_LEN);
+				CurrentSystem = KB_IOS_SYSTEM;
+				IIC_WriteBlock(CURRENT_SYSTEM_FLAG, 1, &CurrentSystem);
+				fnFlag = 1;
+				Flag = 1;
+				IIC_WriteBlock(FIRST_SYSTEM_FLAG, 1, &Flag);
+				return;
+           	case USB_USAGE_DOWN_ARROW:
+				if (CurrentSystem == KB_WINDOWS_SYSTEM ||CurrentSystem == KB_ANDROID_SYSTEM ) {
+                	xmemclear(hidBuff, RPT1_LEN);
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[3] = USB_USAGE_PAGE_DOWN;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;
+			    	break;
+				}
+				if (CurrentSystem == KB_IOS_SYSTEM) {
+			    	xmemclear(hidBuff, RPT1_LEN);
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[3] = USB_USAGE_LEFT_GUI;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[4] = USB_USAGE_DOWN_ARROW;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;	
+			    	break;
+				}
+            case USB_USAGE_UP_ARROW:
+				if (CurrentSystem == KB_WINDOWS_SYSTEM ||CurrentSystem == KB_ANDROID_SYSTEM ) {
+                	xmemclear(hidBuff, RPT1_LEN);
+		        	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[3] = USB_USAGE_PAGE_UP;
+			   		IPC_TxHidData(hidBuff, RPT1_LEN);
+			   		releaseId = HID_REPORTID_1;
+			    	break;
+				}
+				if (CurrentSystem == KB_IOS_SYSTEM) {
+			    	xmemclear(hidBuff, RPT1_LEN);
+			   		hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[3] = USB_USAGE_LEFT_GUI;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			   		releaseId = HID_REPORTID_1;
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[4] = USB_USAGE_UP_ARROW;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			   		releaseId = HID_REPORTID_1;	
+			    	break;
+				}
+            case USB_USAGE_LEFT_ARROW:
+				if (CurrentSystem == KB_WINDOWS_SYSTEM ||CurrentSystem == KB_ANDROID_SYSTEM ) {
+                	xmemclear(hidBuff, RPT1_LEN);
+		       		hidBuff[0] = HID_REPORTID_1;
+		        	hidBuff[3] = USB_USAGE_HOME;
+		        	IPC_TxHidData(hidBuff, RPT1_LEN);
+		       		releaseId = HID_REPORTID_1;
+		        	break;
+				}
+				if (CurrentSystem == KB_IOS_SYSTEM) {
+			    	xmemclear(hidBuff, RPT1_LEN);
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[3] = USB_USAGE_LEFT_GUI;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[4] = USB_USAGE_LEFT_ARROW;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;	
+			    	break;
+				}
+            case USB_USAGE_RIGHT_ARROW:
+				if (CurrentSystem == KB_WINDOWS_SYSTEM ||CurrentSystem == KB_ANDROID_SYSTEM ) {
+                	xmemclear(hidBuff, RPT1_LEN);
+			    	hidBuff[0] = HID_REPORTID_1;
+		        	hidBuff[3] = USB_USAGE_END;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;
+		        	break;
+				}
+				if (CurrentSystem == KB_IOS_SYSTEM) {
+			    	xmemclear(hidBuff, RPT1_LEN);
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[3] = USB_USAGE_LEFT_GUI;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;
+			    	hidBuff[0] = HID_REPORTID_1;
+			    	hidBuff[4] = USB_USAGE_RIGHT_ARROW;
+			    	IPC_TxHidData(hidBuff, RPT1_LEN);
+			    	releaseId = HID_REPORTID_1;	
+			    	break;
+				}
+			case USB_USAGE_NUM_LOCK:
+				if (CurrentSystem == KB_IOS_SYSTEM || CurrentSystem == KB_ANDROID_SYSTEM ) {
+					kb_clean_key();
+					xmemclear(hidBuff, RPT1_LEN);
+					hidBuff[0] = HID_REPORTID_1;
+					hidBuff[3] = USB_USAGE_F11;
+					IPC_TxHidData(hidBuff, RPT1_LEN);
+					releaseId = HID_REPORTID_1;
+				}
+				break;
+		default:
+				//xmemclear(hidBuff, 9);
+				break;
+			}
+		}
+	}
+    
+//get last element
+    i = KS_BUFF_POLL_LEN-1;
+	while (i--) {
+		temp = pEvt->ksPool[i];
+		if (temp != 0) {
+			break;
+		}
+	}	
+    if (tempfn) {
+        switch (temp) {
+       	case HID_KEY_FN:
+			if (CurrentSystem == KB_IOS_SYSTEM || CurrentSystem == KB_ANDROID_SYSTEM) {
+				break;
+			}
+			if (CurrentSystem == KB_WINDOWS_SYSTEM) {
+				if (releaseId == HID_REPORTID_2)
+					goto REASE_REPORT2;
+				if (releaseId == HID_REPORTID_1)
+					goto REASE_REPORT1;
+				break;
+			}
+        case 0:
+            if (releaseId == HID_REPORTID_2)
+		 	     goto REASE_REPORT2;
+            if (releaseId == HID_REPORTID_1)
+                 goto REASE_REPORT1;
+            break;
+        case USB_USAGE_ESCAPE:
+			kb_clean_key();
+			FILL_HID_MKEY(HID_MKEY_MUSIC);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F1:
+	   		kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_STARTMUSIC);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F2:
+		  	kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_PREMUSIC);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F3:
+	   		kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_NEXTMUSIC);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F4:
+	   		kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_VOLUP);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+		case USB_USAGE_F5:
+	   		kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_VOLDOWN);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+        case USB_USAGE_F6:
+			kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_MUTE);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F7:
+	   		kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_HOME);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F8:
+	   		kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_ACSEARCHER);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F9:
+	   		kb_clean_key();
+	   		xmemclear(hidBuff, RPT1_LEN);
+            releaseId = HID_REPORTID_2;
+			FILL_HID_MKEY(HID_MKEY_LIGHTUP);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+       case USB_USAGE_F10:
+	   		kb_clean_key();
+			FILL_HID_MKEY(HID_MKEY_LIGHTDOWN);
+			IPC_TxHidData(hidBuff, RPT2_LEN);
+			xmemclear(hidBuff1, RPT1_LEN);	
+			hidBuff1[0] =HID_REPORTID_1;
+			IPC_TxHidData(hidBuff1, RPT1_LEN);
+			break;
+		case USB_USAGE_NUM_LOCK:
+			if (CurrentSystem == KB_IOS_SYSTEM || CurrentSystem == KB_ANDROID_SYSTEM) {
+				break;
+			}
+			if (CurrentSystem == KB_WINDOWS_SYSTEM ) {
+				kb_clean_key();
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+			    hidBuff[3] = USB_USAGE_F11;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+		    	break;
+			}
+		case USB_USAGE_F12:
+			if(CurrentSystem == KB_IOS_SYSTEM) {
+				xmemclear(hidBuff, RPT1_LEN);
+				hidBuff[0] = HID_REPORTID_1;
+				hidBuff[3] = USB_USAGE_LEFT_GUI;
+				Delay1ms(10);
+				hidBuff[4] = USB_USAGE_LEFT_SHIFT;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				Delay1ms(10);
+				hidBuff[5] = USB_USAGE_3;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				xmemclear(hidBuff, RPT1_LEN);
+				releaseId = HID_REPORTID_1;
+				IPC_TxHidData(hidBuff, RPT1_LEN);
+				break;
+			}
+			kb_clean_key();
+			xmemclear(hidBuff, RPT1_LEN);
+			hidBuff[0] = HID_REPORTID_1;
+		    hidBuff[3] = USB_USAGE_PRINT_SCREEN;
+			IPC_TxHidData(hidBuff, RPT1_LEN);
+			releaseId = HID_REPORTID_1;
+		    break;
+		default:
+			break;
+   		}   
+        if (releaseId == HID_REPORTID_2||releaseId == HID_REPORTID_1) {
+            return;
+        }
+        goto SEND_REPORT1;
+    }
+	else {
+        if (releaseId == HID_REPORTID_2)
+		    goto REASE_REPORT2;
+        if (releaseId == HID_REPORTID_1)
+            goto REASE_REPORT1;
+        goto SEND_REPORT1;
+	}
+    return;
+    
+SEND_REPORT1:
+    hidBuff[0] = HID_REPORTID_1;
+	hidBuff[1] = pEvt->standardSel;
+    hidBuff[2] = 0;
+	pvtFn = searchChar(HID_KEY_FN,  pEvt->ksPool, KS_BUFF_POLL_LEN );
+	if (pvtFn == 0) {
+		xmemcpy(&hidBuff[3], pEvt->ksPool + 1, KS_BUFF_POLL_LEN-1 );
+	    IPC_TxHidData(hidBuff, RPT1_LEN);
+	}
+	else if (pvtFn == -1) {
+		xmemcpy(&hidBuff[3], pEvt->ksPool, KS_BUFF_POLL_LEN);
+	    IPC_TxHidData(hidBuff, RPT1_LEN);	
+		return;
+    }
+	return;
+	
+REASE_REPORT2:
+	mkeyFlag = 0;
+	hidBuff[0] = HID_REPORTID_2;
+    releaseId = 0;
+	IPC_TxHidData(hidBuff, RPT2_LEN);
+	return;
+REASE_REPORT1:
+	mkeyFlag = 0;
+	hidBuff[0] = HID_REPORTID_1;
+	IPC_TxHidData(hidBuff, RPT1_LEN);
+	releaseId = 0;
+	return;
+	//Power_led_timer == 10;
+}
+
+void kb_bt_cub_button()
+{
+	tKSEVENT *pEvt = NULL;
+	u8_t temp = 0;
+	u8_t i = 0;
+	if (!IPC_IsTxBuffEmpty())
+		return;
+		pEvt = KS_GetCurrentEvt();
+	if (pEvt == NULL)
+		return;
+	xmemclear(hidBuff,4);
+//set fn
+	if (pEvt -> ksPool[0] == HID_KEY_FN) {
+		temp = pEvt->ksPool[1];
+		if (temp != HID_KEY_FN) {
+			switch (temp) {
+			case USB_USAGE_C:
+				if (currentState == KB_MODE_BB_CONN || currentState == KB_MODE_BT) {
+					IPC_TxControlCmd(IPC_CMD_DISCONNECT);
+					nextMode = KB_MODE_DISC;
+					break;
+				}
+				else if (currentState == KB_MODE_PAGE) {
+					IPC_TxControlCmd(IPC_CMD_BB_RECONN_CANCEL);
+					nextMode = KB_MODE_DISC;
+					break;
+				}
+				else if (currentState == KB_MODE_DISC) {
+					Delay1ms(250);
+					kbLongSleep();
+					break;
+				}
+				else if (currentState == KB_MODE_NONE){
+					currentState = KB_MODE_DISC;
+					IPC_TxControlCmd(IPC_CMD_START_DISCOVERY);
+					break;
+				}
+				else {
+					break;
+
+				}
+			}
+		}
+	}	
+}
+
+static void kbpairing()
+{
+	tKSEVENT *pEvt = NULL;
+	pEvt = KS_GetCurrentEvt();
+	if (pEvt == NULL)
+		return;
+	if (pEvt->ksPool[0] != 0) {
+		if (pEvt->ksPool[0] == HID_KEY_ENTER) {
+			IPC_TxControlCmd(IPC_CMD_SET_PIN_CODE);
+			currentState = KB_MODE_PINCODE_OK;
+		}
+		else if (pEvt->ksPool[0] == 0x27) {
+			if (ipcPinlen == 8) {
+				YC_Ice_break();
+			}
+			ipcPin[ipcPinlen ++] = 0x30;	//0
+		}
+		else {
+			ipcPin[ipcPinlen ++] = pEvt->ksPool[0]  - (HID_KEY_1 -1) + 0x30;
+		}
+	}
+}
+
+
+void YC_SysMain(void)
+{
+	kb_init();
+	while (1) {
+		IPC_DealSingleStep();
+		if (currentState == KB_MODE_BT) {
+			kb_motion();
+		}
+		else if (currentState == KB_MODE_PINCODE) {
+			kbpairing();
+		}
+		else {
+			kb_bt_cub_button();
+		}
+		//KS_GetCurrentEvt();
+		switch (current_task) {
+		case FIX_ENTER_HIBERNATE:
+			KS_Unistall();
+			GPIO_SetWakeup(BT_BUTTON_GPIO, 0);
+			GPIO_Setout(LED1_GPIO, 1);
+			GPIO_Setout(LED2_GPIO, 1);
+			GPIO_Setout(LED4_GPIO, 1);
+			//YC_Ice_break();
+			IPC_WaitLpm();	/*<wait enter lpm,do nothing*/
+			while (1);
+			break;
+			
+		case FIX_ENTER_LPM:
+			if (delaytimer|lockLpm) {
+				goto ABANDON_DISPATCH;
+			}
+			goto LPM_DISPATCH;
+
+LPM_DISPATCH:
+			KS_Unistall();
+			GPIO_SetWakeup(BT_BUTTON_GPIO, 0);
+			//YC_Ice_break();
+			IPC_WaitLpm();	/*<wait enter lpm,do nothing*/
+			break;
+ABANDON_DISPATCH:
+			IPC_AbandonLpm();
+			break;
+
+		}
+
+	}
+}
+
+
+
Index: type.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/type.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/type.h	(working copy)
@@ -0,0 +1,28 @@
+#ifndef _YC_DEFINE_H_
+#define _YC_DEFINE_H_
+
+#define PUBLIC 
+#define LOCAL static
+
+typedef unsigned char byte;
+typedef unsigned char xdata xbyte;
+typedef unsigned int uint;
+typedef unsigned char xdata * pxbyte;
+typedef unsigned char xdata * data pxdbyte;
+typedef unsigned   char    u8_t;
+typedef signed     char    s8_t;
+typedef unsigned   short   u16_t;
+typedef signed     short   s16_t;
+typedef unsigned   long    u32_t;
+typedef signed     long    s32_t;
+typedef unsigned char xdata xu8_t;
+typedef bit bool;
+
+#define true 1
+#define false 0
+#ifndef NULL
+#define NULL (0)
+#endif
+
+#endif
+
Index: uart.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/uart.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/uart.h	(working copy)
@@ -0,0 +1,56 @@
+#ifndef _UART_H_
+#define _UART_H_
+#include "type.h"
+ 
+#define  UART_BAUD_115200 0x00d0
+
+///**********************<buff define**************************/
+//please do not change here
+#define UART_RX_HEAD	0x1e00		/**< yc rx buff head */
+#define UART_RX_END		0x1eff		/**< yc rx buff end */
+
+#define UART_TX_HEAD	0x1f00		  /**< yc tx buff head */
+#define UART_TX_END		0x1fff		/**< yc tx buff end */
+///**************************<end ****************************/
+#define UART_SelectGpio() REG_GPIO_SELECT(1) |= BIT(2)
+
+#define UART_Enable() \
+			REG_UART_CLK_SEL &= 0xfe,\
+			REG_CLK_OFF(1) &= ~ BIT(7)				//turn on UART's clock
+			
+#define  UART_ControlOn() \
+			REG_UART_CTRL = 0x91
+
+#define UART_ControlOff() \
+			REG_UART_CTRL = 0x81
+
+#define UART_SetRxBuff(s,e)   REG_UART_RX_ADDR_S = ESWAP((u16_t)(s)),\
+								REG_UART_RX_ADDR_E =  ESWAP((u16_t)(e))
+								
+							
+#define UART_SetTxBuff(s,e)	REG_UART_TX_ADDR_S = ESWAP((u16_t)(s)),\
+								REG_UART_TX_ADDR_E =  ESWAP((u16_t)(e))
+									
+
+#define UART_SetBaudRate(b)		REG_UART_BAUD = ESWAP((u16_t)(b))
+
+
+#define UART_ReSet()	REG_UART_TX_PTRP_R = REG_UART_TX_ADDR_S,\
+							REG_UART_TX_PTR_W = REG_UART_TX_ADDR_S,\
+								REG_UART_RX_PTR_R = REG_UART_RX_ADDR_S
+
+#define UART_OP_MAXREAD	1		
+#define UART_OP_UNRELEASE (0x02)
+
+
+void UART_Initialize(void);
+
+u8_t UART_RecvData(u8_t *   pbuff, u8_t len);
+
+u8_t  UART_SendData(const u8_t*  pbuff, u8_t len);
+
+u16_t UART_GetRxCount();
+
+u8_t UART_RecvDataWithoutRelease(u8_t *   pbuff, u8_t len);
+
+#endif
\ No newline at end of file
Index: util/crc16.pl
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/crc16.pl	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/crc16.pl	(working copy)
@@ -0,0 +1,27 @@
+$debug = 0;
+$crc = 0xffff;
+$i = 0;
+$offset = 0xffff;
+$source_file = $ARGV[0];
+$offset = $ARGV[1];
+
+open(EEP,"$source_file") or die $!;
+
+while (<EEP>) {    
+	$c = hex();
+
+  if($i >= $offset){
+  	if($debug){printf "%02x\t", $c;}
+  	$crc  = ($crc >> 8) | ($crc << 8);
+		$crc ^= $c & 0xff;
+		$crc ^= ($crc & 0xff) >> 4;
+		$crc ^= $crc << 12;
+		$crc ^= ($crc & 0xff) << 5;
+		$crc &= 0xffff;
+  }
+  $i ++;
+  if($debug){printf "%02x\t", $crc;}
+  printf "%02x\n", $c;
+}
+
+printf "%02x\n%02x\n", (($crc >> 8) & 0xff),($crc & 0xff);
Index: util/eeprom2fulleeprom.pl
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/eeprom2fulleeprom.pl	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/eeprom2fulleeprom.pl	(working copy)
@@ -0,0 +1,18 @@
+
+
+
+$source_file = $ARGV[0];
+$eeprom_size = $ARGV[1];
+
+open(EEP,"$source_file") or die("cannot open files");
+for ($i = 1 ;$i<=$eeprom_size*128-2;$i++)
+{
+
+    while (<EEP>) { 
+        $c = hex();
+        printf "%02x\n", $c;
+        $i++;
+    }
+
+	printf "ff\n";
+}
Index: util/hex2mif.pl
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/hex2mif.pl	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/hex2mif.pl	(working copy)
@@ -0,0 +1,103 @@
+#!/usr/bin/perl
+# 2005 - David Grant.
+# Take an ihex input from STDIN, and write a .mif file to STDOUT
+# This script could probably be implemented with something like:
+#    $#!@_%^$@%$@%$_!^$@#^@%$#@_%$@^&!%$_!%!%&$*(#^#@%^) 
+# But I perfer the somewhat readable version.
+
+# Flow from within the Nios2 SDK Shell:
+# nios2-elf-as file.asm -o file.o
+# nios2-elf-objcopy file.o --target ihex file.hex
+# cat file.hex | perl hex2mif.pl > file.mif
+
+my @rom = ();
+my @ram = ();
+
+sub conv {
+	my ($in) = @_;
+	$out = substr($in,6,2).substr($in,4,2).substr($in,2,2).substr($in,0,2);
+	return hex $out;
+}
+
+sub writeromfile {
+	my (@buf) = @_;
+	my($x);
+
+	for($x=0; $x<@buf; $x++) {
+		printf ("%02x\n", $buf[$x]);
+	}
+}
+
+sub writebinfile {
+	my (@buf) = @_;
+	my($x);
+
+	for($x=0; $x<@buf; $x++) {
+		for($y=0;$y<8;$y++) {
+			printf ("%d", $buf[$x] & 1<<(7-$y) ? 1 : 0);
+		}
+		printf "\n" if(($x & 3) == 3);
+	}
+}
+
+sub writemiffile {
+	my (@buf) = @_;
+	my($x);
+	print  ("WIDTH=8;\n");
+	print ("DEPTH=".@buf.";\n");
+	print ("CONTENT BEGIN\n");
+	for($x=0; $x<@buf; $x++) {
+		printf ("\t%04x : %02x;\n", $x, $buf[$x]);
+	}
+	print ("END;\n");
+}
+
+if($ARGV[0] eq "ram" || $ARGV[0] eq "rammif")
+{
+	$org = 0x8000;
+	$limit = 0xffff;
+} elsif($ARGV[0] eq "rom" || $ARGV[0] eq "bin" || $ARGV[0] eq "mif" || $ARGV[0] eq "rommif" ) {
+	$org = 0;
+	$limit = 0x7fff;
+} else {
+	$org = 0;
+	$limit = 0xffffff;
+}
+
+
+$org = 0;
+$limit = 0x7fff;
+
+while (<STDIN>) {
+	$l = $_;
+	next if(!/\w/);
+	$count = (hex substr($l, 1, 2));
+	$addr = (hex substr($l, 3, 4));
+	$type = (hex substr($l, 7, 2));
+	last if $type eq 1;
+	if($type == 4) {
+		$org = -(hex substr($l, 9, 4))*0x10000;
+	}
+	if($addr >= $org && $addr <= $limit) 
+	{
+		$addr*=4 if($ARGV[0] eq "bin");
+		$addr -= $org;
+		for($x=0; $x<$count; $x++) {
+			$rom[$addr + $x] = (hex substr($l, 9+2*$x, 2)) ; 
+		}
+	}
+}
+
+if($ARGV[0] eq "rom" || $ARGV[0] eq "ram" || $ARGV[0] eq "mem")
+{
+	writeromfile(@rom);
+}
+elsif($ARGV[0] eq "bin")
+{
+	writebinfile(@rom);
+}
+else
+{
+	writemiffile(@rom);
+}
+
Index: util/transform_name2addr.pl
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/transform_name2addr.pl	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/util/transform_name2addr.pl	(working copy)
@@ -0,0 +1,103 @@
+$Sched_path=$ARGV[0];
+$Sched_test_path=$ARGV[1];
+$Memmap_path=$ARGV[2];
+open(Sched,$Sched_path)||die("Cannot open files\n");
+@sched=<Sched>;
+close(Sched);
+open(Sched_test,">$Sched_test_path");
+print Sched_test ("");
+close(Sched_test);
+open(Sched_test,">$Sched_test_path");
+open(Memmap,$Memmap_path)||die("Cannot open files\n");
+@memmap=<Memmap>;
+close(Memmap);
+$type_add=0;
+$type_exchange=0;
+foreach $sched(@sched)
+{
+	$sched_begin = $sched;
+	@Sched = split(/[#]+/, $sched);
+	$sched = @Sched[0];
+	@Sched[0] = "";
+	if($sched =~ /mem[\w]+/)
+	{
+		@memmap_name = split(/[\W]+/, $sched);
+		foreach $memmap_name(@memmap_name)
+		{
+			if($memmap_name =~ /mem[\w]+/)
+			{
+				$Memmap_name=$memmap_name;
+				$type_add = 0;
+				$type_exchange = 0;
+				if($sched =~ /$Memmap_name[+]/)
+				{
+					$type_add = 1;#ÐÞ¸ÄµÄÀàÐÍµÚÒ»ÖÖ£¬¼Ó
+					@ADD_Num=split(/[^0-9\+xa-fA-F]/,$sched);
+					foreach $ADD_Num(@ADD_Num)
+					{
+						if($ADD_Num =~ /\+/)
+						{
+							if($ADD_Num =~ /0x/)
+							{
+								@add_num = split(/\+0x/,$ADD_Num);
+								$add_num1 =@add_num[1];
+								$add_num_begin = "0x".$add_num1;
+								$add_num = hex($add_num1);
+							}
+							else
+							{
+								@add_num = split(/\+/,$ADD_Num);
+								$add_num1 =@add_num[1];
+								$add_num_begin = $add_num1;
+								$add_num = int($add_num1);
+							}
+						}#$add_numÊÇÆ¥Åä³öµÄÐèÒª¼ÓµÄÊýÖµ£¬×Ö·û´®ÐÎÊ½
+					}
+				}
+				if($sched =~ /[:] *\t*$Memmap_name/)
+				{
+					$type_exchange = 1;#ÐÞ¸ÄµÄÀàÐÍµÚ¶þÖÖ£¬¸ßµÍÎ»½»»»
+				}
+				foreach $memmap(@memmap)
+				{
+					if($memmap =~ /$Memmap_name/ && $memmap !~ /$Memmap_name[\w]+/)
+					{
+						@Memmap=split(/[ \t\n]/,$memmap);
+						$memmap_address=@Memmap[0];
+						$memmap_address =~ s/0x//;
+						if($type_add==1)
+						{
+							$memmap_address_D = hex($memmap_address);
+							$memmap_address_D = $memmap_address_D+$add_num;
+							$memmap_address_H = sprintf("%x", $memmap_address_D);
+							$memmap_address = $memmap_address_H;
+							$memmap_address_add_finish = $memmap_address;
+							$sched_begin =~ s/$Memmap_name\+$add_num_begin/$memmap_address/;
+						}
+						if($type_exchange==1)
+						{
+							$memmap_address_High = substr($memmap_address,0,2);
+							$memmap_address_Low = substr($memmap_address,2,2);
+							$memmap_address = $memmap_address_Low." ".$memmap_address_High;
+							if($type_add==0)
+							{
+								$sched_begin =~ s/$Memmap_name/$memmap_address/;
+							}
+							else
+							{
+								$sched_begin =~ s/$memmap_address_add_finish/$memmap_address/;
+							}
+						}
+					}
+				}
+				$sched_begin =~ s/$Memmap_name/$memmap_address/;
+			}
+		}
+		printf Sched_test ("%s",$sched_begin);
+	}
+	else
+	{
+		printf Sched_test ("%s",$sched_begin);
+	}	
+}
+close(Sched_test);
Index: utilities.h
===================================================================
--- /Branch/keyboard/C51SDK/TEST_Keyboard_project/utilities.h	(nonexistent)
+++ /Branch/keyboard/C51SDK/TEST_Keyboard_project/utilities.h	(working copy)
@@ -0,0 +1,21 @@
+#ifndef _YC_UTILITIES_H_
+#define _YC_UTILITIES_H_
+#include "common.h"
+
+
+/*==============Set a breakpoint function
+no input:
+no output
+====================*/
+void YC_Ice_break();
+
+void dmemcpy(u8_t *dest, u8_t* src, u16_t len) ;
+
+void xmemcpy(pxbyte dest, u8_t* src, u8_t len);
+
+void Delay1ms(u8_t Time);
+
+void YC_DelayNOP(u8_t num);
+
+void xmemclear(u8_t *dest, u16_t len);
+#endif
