Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop
This commit is contained in:
+1
-3
@@ -32,8 +32,6 @@ job1:
|
||||
- sshpass -p "$OAI_PASS" rsync -az -e "ssh -o StrictHostKeyChecking=no " --rsync-path="mkdir -p $NFS_TEST_RESULTS_DIR && rsync" $OPENAIR_DIR/cmake_targets/autotests/log $OAI_USER@localhost:$NFS_TEST_RESULTS_DIR
|
||||
- sshpass -p "$OAI_PASS" rsync -az -e "ssh -o StrictHostKeyChecking=no " --rsync-path="mkdir -p $EXTERNAL_SHARE_DIR && rsync" $OPENAIR_DIR/cmake_targets/autotests/log $OAI_USER@localhost:$EXTERNAL_SHARE_DIR
|
||||
- cat $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml
|
||||
- exce_log=`egrep -i 'warning|error|critical|exception' $NFS_TEST_RESULTS_DIR/log/python_autotest.log `
|
||||
- exce_log=`egrep -i 'warning|error|critical|exception' $OPENAIR_DIR/cmake_targets/autotests/log/python_autotest.log |cat `
|
||||
- if [ -n "$exce_log" ]; then echo -e "\e[31mThere are errors in $NFS_TEST_RESULTS_DIR/log/python_autotest.log. Please check the logs\e[0m" ; fi
|
||||
- exce_log=`egrep -i 'warning|error|critical|exception' $NFS_TEST_RESULTS_DIR/log/python_autotest_cleanup.log `
|
||||
- if [ -n "$exce_log" ]; then echo -e "\e[31mThere are errors in $NFS_TEST_RESULTS_DIR/log/python_autotest_cleanup.log. Please check the logs\e[0m" ; fi
|
||||
|
||||
|
||||
@@ -1518,7 +1518,7 @@ if (${RF_BOARD} STREQUAL "OAI_USRP")
|
||||
include_directories(${LIBBOOST_INCLUDE_DIR})
|
||||
endif (${RF_BOARD} STREQUAL "OAI_USRP")
|
||||
|
||||
pkg_search_module(OPENPGM openpgm-5.1)
|
||||
pkg_search_module(OPENPGM openpgm-5.1 openpgm-5.2)
|
||||
if(NOT ${OPENPGM_FOUND})
|
||||
message("PACKAGE openpgm-5.1 is required by binaries such as oaisim: will fail later if this target is built")
|
||||
else()
|
||||
@@ -1625,7 +1625,7 @@ add_executable(lte-softmodem
|
||||
${T_SOURCE}
|
||||
)
|
||||
|
||||
target_link_libraries (lte-softmodem
|
||||
target_link_libraries (lte-softmodem -ldl
|
||||
-Wl,--start-group
|
||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB}
|
||||
-Wl,--end-group )
|
||||
@@ -1652,8 +1652,8 @@ add_executable(lte-softmodem-nos1
|
||||
${OPENAIR_TARGETS}/SIMU/USER/init_lte.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
#${OPENAIR2_DIR}/RRC/NAS/nas_config.c # enable if you want rrc to mount ip interface
|
||||
#${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||
${HW_SOURCE}
|
||||
${TRANSPORT_SOURCE}
|
||||
@@ -1929,6 +1929,11 @@ foreach( d ${DirDefs} )
|
||||
list(APPEND itti_compiler_options "-I${d}")
|
||||
endforeach()
|
||||
|
||||
# castxml doesn't work with c11 (gcc 5 default)
|
||||
# force castxml and clang compilation with gnu89 standard
|
||||
# we can't use cXX standard as pthread_rwlock_t is gnu standard
|
||||
list(APPEND itti_compiler_options "-std=gnu89")
|
||||
|
||||
set (ITTI_H ${ITTI_DIR}/intertask_interface_types.h)
|
||||
add_custom_command (
|
||||
OUTPUT ${OPENAIR_BIN_DIR}/messages.xml
|
||||
|
||||
@@ -12,10 +12,12 @@ Obj.# Case# Test# Description
|
||||
01 01 11 Build lte-softmodem_noS1.EXMIMO.Rel10
|
||||
01 01 12 Build lte-softmodem_noS1.BLADERF.Rel10
|
||||
01 01 13 Build lte-softmodem_noS1.ETHERNET.Rel10
|
||||
01 01 14 Build lte-softmodem_noS1.LMSSDR.Rel10
|
||||
01 01 20 Build lte-softmodem.USRP.Rel10
|
||||
01 01 21 Build lte-softmodem.EXMIMO.Rel10
|
||||
01 01 22 Build lte-softmodem.BLADERF.Rel10
|
||||
01 01 23 Build lte-softmodem.ETHERNET.Rel10
|
||||
01 01 24 Build lte-softmodem.LMSSDR.Rel10
|
||||
|
||||
01 01 30 Build (dlsim.Rel10 + ulsim.Rel10 + pucchsim.Rel10 + prachsim.Rel10 + pdcchsim.Rel10 + pbchsim.Rel10 + mbmssim.Rel10
|
||||
secu_knas_encrypt_eia1.Rel10 secu_kenb.Rel10 aes128_ctr_encrypt.Rel10 aes128_ctr_decrypt.Rel10 secu_knas_encrypt_eea2.Rel10
|
||||
@@ -24,7 +26,7 @@ Obj.# Case# Test# Description
|
||||
01 01 40 Build RRH Gateway for USRP (Rel 10)
|
||||
01 01 41 Build RRH Gateway for EXMIMO (Rel 10)
|
||||
01 01 42 Build RRH Gateway for BLADERF (Rel 10)
|
||||
|
||||
01 01 43 Build RRH Gateway for LMSSDR (Rel 10)
|
||||
|
||||
|
||||
01 02 Run OAISIM-NOS1 Rel10 (TDD + 5MHz/10MHz/20MHz + TM 1,2), and check the operation
|
||||
@@ -98,18 +100,24 @@ Obj.# Case# Test# Description
|
||||
|
||||
|
||||
01 55 lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX, 2TX/2RX
|
||||
01 55 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
01 55 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
01 55 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
01 55 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
01 55 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
01 55 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
01 55 06 Band 7 FDD 5MHz UL Throughput for 300 sec for 2TX/2RX
|
||||
01 55 07 Band 7 FDD 10MHz UL Throughput for 300 sec for 2TX/2RX
|
||||
01 55 08 Band 7 FDD 20MHz UL Throughput for 300 sec for 2TX/2RX
|
||||
01 55 09 Band 7 FDD 5MHz DL Throughput for 300 sec for 2TX/2RX
|
||||
01 55 10 Band 7 FDD 10MHz DL Throughput for 300 sec for 2TX/2RX
|
||||
01 55 11 Band 7 FDD 20MHz DL Throughput for 300 sec for 2TX/2RX
|
||||
01 55 00 Band 7 FDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 55 01 Band 7 FDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 55 02 Band 7 FDD 20MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 55 03 Band 7 FDD 5MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 55 04 Band 7 FDD 10MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 55 05 Band 7 FDD 20MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 55 06 Band 7 FDD 5MHz UL Throughput (UDP) for 300 sec for 2TX/2RX
|
||||
01 55 07 Band 7 FDD 10MHz UL Throughput (UDP) for 300 sec for 2TX/2RX
|
||||
01 55 08 Band 7 FDD 20MHz UL Throughput (UDP) for 300 sec for 2TX/2RX
|
||||
01 55 09 Band 7 FDD 5MHz DL Throughput (UDP) for 300 sec for 2TX/2RX
|
||||
01 55 10 Band 7 FDD 10MHz DL Throughput (UDP) for 300 sec for 2TX/2RX
|
||||
01 55 11 Band 7 FDD 20MHz DL Throughput (UDP) for 300 sec for 2TX/2RX
|
||||
01 55 12 Band 7 FDD 5MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 55 13 Band 7 FDD 10MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 55 14 Band 7 FDD 20MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 55 15 Band 7 FDD 5MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 55 16 Band 7 FDD 10MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 55 17 Band 7 FDD 20MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
|
||||
01 56 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE
|
||||
01 56 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
@@ -128,12 +136,19 @@ Obj.# Case# Test# Description
|
||||
01 57 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
|
||||
01 58 lte-softmodem tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for `TX/1RX, 2TX/2RX
|
||||
01 58 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
01 58 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
01 58 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
01 58 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
01 58 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
01 58 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
01 58 00 Band 7 FDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 58 01 Band 7 FDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 58 02 Band 7 FDD 20MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 58 03 Band 7 FDD 5MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 58 04 Band 7 FDD 10MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 58 05 Band 7 FDD 20MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
01 58 06 Band 7 FDD 5MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 58 07 Band 7 FDD 10MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 58 08 Band 7 FDD 20MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 58 09 Band 7 FDD 5MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 58 10 Band 7 FDD 10MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
01 58 11 Band 7 FDD 20MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
|
||||
|
||||
01 59 lte-softmodem tests with USRP X310 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE
|
||||
|
||||
@@ -206,19 +221,25 @@ Obj.# Case# Test# Description
|
||||
01 85 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
|
||||
02 55 lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Sony Experia M4 COTS UE for TX/1RX
|
||||
02 55 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
02 55 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
02 55 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
|
||||
02 55 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
02 55 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
02 55 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
|
||||
02 55 00 Band 7 FDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
02 55 01 Band 7 FDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
02 55 02 Band 7 FDD 20MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
02 55 03 Band 7 FDD 5MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
02 55 04 Band 7 FDD 10MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
02 55 05 Band 7 FDD 20MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
|
||||
02 55 06 Band 7 FDD 5MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
02 55 07 Band 7 FDD 10MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
02 55 08 Band 7 FDD 20MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
02 55 09 Band 7 FDD 5MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
02 55 10 Band 7 FDD 10MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
02 55 11 Band 7 FDD 20MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
|
||||
|
||||
|
||||
01 64 lte-softmodem-noS1 tests
|
||||
|
||||
02 Functional test case
|
||||
|
||||
03 Non-Functional test case
|
||||
03 Autotests specific to OAI UE
|
||||
|
||||
04 Failure test case
|
||||
|
||||
@@ -228,6 +249,4 @@ Obj.# Case# Test# Description
|
||||
#TODO: Add test cases for 10,20 MHz
|
||||
#TODO: Add test cases for TDD/FDD
|
||||
#TODO: Test and compile seperately for Rel8/Rel10
|
||||
#TODO: Case03.py eMBMS test case
|
||||
|
||||
|
||||
#TODO: Case03.py eMBMS test case
|
||||
@@ -312,13 +312,13 @@ def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logd
|
||||
# \parm programList list of programs that must be terminated before execution of any test case
|
||||
# \param CleanUpAluLteBox program to terminate AlU Bell Labs LTE Box
|
||||
# \param ExmimoRfStop String to stop EXMIMO card (specified in test_case_list.xml)
|
||||
def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop):
|
||||
def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo):
|
||||
cmd = 'killall -9 -q -r ' + programList
|
||||
result = oai.send(cmd, True)
|
||||
print "Killing old programs..." + result
|
||||
programArray = programList.split()
|
||||
programListJoin = '|'.join(programArray)
|
||||
cmd = " ( date ;echo \"Starting cleaning old programs.. \" ; dmesg|tail ; echo \"Current disk space.. \" ; df -h )>& $HOME/.oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync"
|
||||
cmd = " ( date ;echo \"Starting cleaning old programs.. \" ; dmesg|tail ; echo \"Current disk space.. \" ; df -h )>& " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync"
|
||||
result=oai.send_recv(cmd)
|
||||
cmd = cleanupOldProgramsScript + ' ' + '\''+programListJoin+'\''
|
||||
#result = oai.send_recv(cmd)
|
||||
@@ -326,8 +326,14 @@ def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop):
|
||||
result = oai.send_expect_false(cmd, 'Match found', False)
|
||||
print "Looking for old programs..." + result
|
||||
res=oai.send_recv(CleanUpAluLteBox, True)
|
||||
cmd = "( " + ExmimoRfStop + " ) >> $HOME/.oai_test_setup_cleanup.log.`hostname` ; sync "
|
||||
cmd= " echo \"Starting EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync ";
|
||||
oai.send_recv(cmd)
|
||||
cmd = "( " + "cd " + logdirOAI5GRepo + " ; source oaienv ; " + ExmimoRfStop + " ) >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync "
|
||||
print "cleanoldprograms cmd = " + cmd
|
||||
res=oai.send_recv(cmd, False, timeout=600)
|
||||
cmd= " echo \"Stopping EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync ";
|
||||
oai.send_recv(cmd)
|
||||
|
||||
#res = oai.send_recv(ExmimoRfStop, False)
|
||||
cmd = " ( date ;echo \"Finished cleaning old programs.. \" ; dmesg | tail)>> $HOME/.oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync"
|
||||
res=oai.send_recv(cmd)
|
||||
@@ -775,7 +781,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
|
||||
task_eNB = task_eNB + 'array_exec_pid+=($!) \n'
|
||||
task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n'
|
||||
|
||||
task_eNB = task_eNB + ' (date; sudo rm -f ' + logfile_pcap_tmp_eNB + ' ; sudo -E tshark -i any -s 65535 -a duration:' + str(timeout_cmd-10)+ ' -w ' + logfile_pcap_tmp_eNB+ ' ; sudo -E chown ' + user + ' ' + logfile_pcap_tmp_eNB + ' ; zip -j -9 ' + logfile_pcap_zip_eNB + ' ' + logfile_pcap_tmp_eNB + ' ) > ' + logfile_tshark_eNB + ' 2>&1 & \n '
|
||||
task_eNB = task_eNB + ' (date; sudo rm -f ' + logfile_pcap_tmp_eNB + ' ; sudo -E tshark -i lo -s 65535 -a duration:' + str(timeout_cmd-10)+ ' -w ' + logfile_pcap_tmp_eNB+ ' ; sudo -E chown ' + user + ' ' + logfile_pcap_tmp_eNB + ' ; zip -j -9 ' + logfile_pcap_zip_eNB + ' ' + logfile_pcap_tmp_eNB + ' ) > ' + logfile_tshark_eNB + ' 2>&1 & \n '
|
||||
task_eNB = task_eNB + 'array_exec_pid+=($!) \n'
|
||||
task_eNB = task_eNB + 'echo eNB_tshark_exec PID = $! \n'
|
||||
#terminate the eNB test case after timeout_cmd seconds
|
||||
@@ -934,9 +940,9 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
|
||||
t.join()
|
||||
#Now we get the log files from remote machines on the local machine
|
||||
if RRHMachine != '':
|
||||
cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC, oai_RRH] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
|
||||
cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC, oai_RRH] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC, logdir_RRH], logdirOAI5GRepo)
|
||||
else:
|
||||
cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
|
||||
cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo)
|
||||
logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log'
|
||||
logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log'
|
||||
|
||||
@@ -999,7 +1005,21 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
|
||||
run_result_string = ' RUN_'+str(run) + ' = PASS'
|
||||
else:
|
||||
run_result_string = ' RUN_'+str(run) + ' = FAIL'
|
||||
|
||||
|
||||
#If there is assertion, we mark the test case as failure as most likely eNB crashed
|
||||
cmd = "grep -ilr \"assertion\" " + logdir_local_testcase + " | cat "
|
||||
cmd_out = subprocess.check_output ([cmd], shell=True)
|
||||
if len(cmd_out) !=0 :
|
||||
run_result=0
|
||||
run_result_string = ' RUN_'+str(run) + ' = FAIL(Assert)'
|
||||
|
||||
#If there is thread busy error, we mark the test case as failure as most likely eNB crashed
|
||||
cmd = "grep -ilr \"thread busy\" " + logdir_local_testcase + " | cat "
|
||||
cmd_out = subprocess.check_output ([cmd], shell=True)
|
||||
if len(cmd_out) !=0:
|
||||
run_result=0
|
||||
run_result_string = ' RUN_'+str(run) + ' = FAIL(Thread_Busy)'
|
||||
|
||||
run_result_string = run_result_string + tput_run_string
|
||||
|
||||
test_result=test_result & run_result
|
||||
@@ -1065,7 +1085,7 @@ def search_test_case_group(testcasename, testcasegroup, test_case_exclude):
|
||||
# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
|
||||
# \param ExmimoRfStop command to stop EXMIMO Card
|
||||
class oaiCleanOldProgramThread (threading.Thread):
|
||||
def __init__(self, threadID, threadname, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop):
|
||||
def __init__(self, threadID, threadname, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo):
|
||||
threading.Thread.__init__(self)
|
||||
self.threadID = threadID
|
||||
self.threadname = threadname
|
||||
@@ -1073,9 +1093,11 @@ class oaiCleanOldProgramThread (threading.Thread):
|
||||
self.CleanUpOldProgs = CleanUpOldProgs
|
||||
self.CleanUpAluLteBox = CleanUpAluLteBox
|
||||
self.ExmimoRfStop = ExmimoRfStop
|
||||
self.logdir = logdir
|
||||
self.logdirOAI5GRepo = logdirOAI5GRepo
|
||||
def run(self):
|
||||
try:
|
||||
cleanOldPrograms(self.oai, self.CleanUpOldProgs, self.CleanUpAluLteBox, self.ExmimoRfStop)
|
||||
cleanOldPrograms(self.oai, self.CleanUpOldProgs, self.CleanUpAluLteBox, self.ExmimoRfStop, self.logdir, self.logdirOAI5GRepo)
|
||||
except Exception, e:
|
||||
error=''
|
||||
error = error + ' In class oaiCleanOldProgramThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
|
||||
@@ -1090,15 +1112,20 @@ class oaiCleanOldProgramThread (threading.Thread):
|
||||
# \param CleanUpOldProgs list of programs which must be terminated before running a test case (specified in test_case_list.xml)
|
||||
# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
|
||||
# \param ExmimoRfStop command to stop EXMIMO Card
|
||||
def cleanOldProgramsAllMachines(oai_list, CleanOldProgs, CleanUpAluLteBox, ExmimoRfStop):
|
||||
def cleanOldProgramsAllMachines(oai_list, CleanOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir_list, logdirOAI5GRepo):
|
||||
threadId=0
|
||||
threadList=[]
|
||||
index=0
|
||||
if len(oai_list)!=len(logdir_list) :
|
||||
logdir_list=[logdir[0]]*len(oai_list)
|
||||
|
||||
for oai in oai_list:
|
||||
threadName="cleanup_thread_"+str(threadId)
|
||||
thread=oaiCleanOldProgramThread(threadId, threadName, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
|
||||
thread=oaiCleanOldProgramThread(threadId, threadName, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir_list[index],logdirOAI5GRepo)
|
||||
threadList.append(thread)
|
||||
thread.start()
|
||||
threadId = threadId + 1
|
||||
index = index+1
|
||||
for t in threadList:
|
||||
t.join()
|
||||
|
||||
@@ -1360,7 +1387,7 @@ if localshell == 0:
|
||||
print "Sudo permissions..." + result
|
||||
|
||||
print '\nCleaning Older running programs : ' + CleanUpOldProgs
|
||||
cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
|
||||
cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME', '/tmp')
|
||||
|
||||
#result = oai_list[index].send('mount ' + NFSResultsDir, True)
|
||||
#print "Mounting NFS Share " + NFSResultsDir + "..." + result
|
||||
@@ -1489,7 +1516,7 @@ if (out != '') :
|
||||
print "Exiting now..."
|
||||
sys.exit(1)
|
||||
|
||||
cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
|
||||
cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME' , logdirOAI5GRepo)
|
||||
if cleanUpRemoteMachines == True:
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -39,14 +39,26 @@ timeout=${args[0]}
|
||||
iface=${args[1]}
|
||||
iperf_args=(${args[@]:2})
|
||||
|
||||
ip_client=`echo "$iperf_args" | sed -ne 's/.*\-c[ ]*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p'`
|
||||
|
||||
#array=${1:-1}
|
||||
echo "args = ${args[@]}"
|
||||
echo "timeout = $timeout"
|
||||
echo "iface = $iface"
|
||||
echo "iperf_args = ${iperf_args[@]}"
|
||||
echo "ip_client = $ip_client"
|
||||
|
||||
sleep $timeout
|
||||
|
||||
echo " Waiting for IP Address..."
|
||||
while true; do var=`ifconfig $iface` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5
|
||||
|
||||
if [ -n "$ip_client" ]; then
|
||||
echo "Waiting for route to be setup before iperf makes connection..."
|
||||
var=`route -n | grep $ip_client`
|
||||
if ["$var" != "" ] ; then break; fi
|
||||
|
||||
fi
|
||||
sleep 5
|
||||
|
||||
iperf ${iperf_args[@]}
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
# brief OAI automated build tool that can be used to install, compile, run OAI.
|
||||
# author Navid Nikaein, Lionel GAUTHIER, Laurent Thomas
|
||||
|
||||
set -e
|
||||
|
||||
################################
|
||||
# include helper functions
|
||||
@@ -59,6 +60,7 @@ RUN_GROUP=0
|
||||
TEST_CASE_GROUP=""
|
||||
BUILD_DOXYGEN=0
|
||||
T_TRACER="False"
|
||||
DISABLE_HARDWARE_DEPENDENCY="False"
|
||||
trap handle_ctrl_c INT
|
||||
|
||||
function print_help() {
|
||||
@@ -131,6 +133,8 @@ Options
|
||||
Disables CPU Affinity between UHD/TX/RX Threads (Valid only when deadline scheduler is disabled). By defaulT, CPU Affinity is enabled when not using deadline scheduler. It is enabled only with >2 CPUs. For eNB, CPU_0-> Device library (UHD), CPU_1->TX Threads, CPU_2...CPU_MAX->Rx Threads. For UE, CPU_0->Device Library(UHD), CPU_1..CPU_MAX -> All the UE threads
|
||||
--T-tracer
|
||||
Enables the T tracer.
|
||||
--disable-hardware-dependency
|
||||
Disable HW dependency during installation
|
||||
Usage (first build):
|
||||
oaisim (eNB + UE): ./build_oai -I -g --oaisim -x --install-system-files
|
||||
Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB -x --install-system-files
|
||||
@@ -277,6 +281,10 @@ function main() {
|
||||
T_TRACER="True"
|
||||
echo_info "Enabling the T tracer"
|
||||
shift 1;;
|
||||
--disable-hardware-dependency)
|
||||
echo_info "Disabling hardware dependency for compiling software"
|
||||
DISABLE_HARDWARE_DEPENDENCY="True"
|
||||
shift 1;;
|
||||
-h | --help)
|
||||
print_help
|
||||
exit 1;;
|
||||
@@ -386,10 +394,16 @@ function main() {
|
||||
if [ "$HW" == "OAI_USRP" ] ; then
|
||||
echo_info "installing packages for USRP support"
|
||||
check_install_usrp_uhd_driver
|
||||
if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
|
||||
install_usrp_uhd_driver
|
||||
fi
|
||||
fi
|
||||
if [ "$HW" == "OAI_BLADERF" ] ; then
|
||||
echo_info "installing packages for BLADERF support"
|
||||
check_install_bladerf_driver
|
||||
if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
|
||||
flash_firmware_bladerf
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -67,7 +67,45 @@ echo_warning() { cecho "$*" $yellow ;}
|
||||
echo_success() { cecho "$*" $green ;}
|
||||
echo_info() { cecho "$*" $blue ;}
|
||||
|
||||
########################
|
||||
# distribution helpers #
|
||||
########################
|
||||
|
||||
# This function return a string to identify the distribution we are running
|
||||
# If we can't check the distribution, it returns "Unknown"
|
||||
# This function return always true as exit code by design
|
||||
# Examples:
|
||||
# Ubuntu16.04
|
||||
# Debian8.5
|
||||
get_distribution_release() {
|
||||
local distributor
|
||||
if distributor=$(lsb_release -si 2>/dev/null) ; then
|
||||
echo $distributor$(lsb_release -sr)
|
||||
else
|
||||
echo Unknown
|
||||
fi
|
||||
}
|
||||
|
||||
check_supported_distribution() {
|
||||
local distribution=$(get_distribution_release)
|
||||
case "$distribution" in
|
||||
"Ubuntu16.04") return 0 ;;
|
||||
"Ubuntu14.04") return 0 ;;
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
|
||||
##################
|
||||
# Error handlers #
|
||||
##################
|
||||
|
||||
handler_EXIT() {
|
||||
local exit_code=$?
|
||||
[ "$exit_code" -eq 0 ] || echo_error "build have failed"
|
||||
exit $exit_code
|
||||
}
|
||||
|
||||
trap handler_EXIT EXIT
|
||||
|
||||
###########################
|
||||
# Cleaners
|
||||
@@ -109,6 +147,7 @@ clean_all_files() {
|
||||
|
||||
compilations() {
|
||||
cd $OPENAIR_DIR/cmake_targets/$1/build
|
||||
set +e
|
||||
{
|
||||
rm -f $3
|
||||
if [ "$VERBOSE_COMPILE" == "1" ]; then
|
||||
@@ -118,12 +157,14 @@ compilations() {
|
||||
fi
|
||||
|
||||
} > $dlog/$2.$REL.txt 2>&1
|
||||
set -e
|
||||
echo_info "Log file for compilation has been written to: $dlog/$2.$REL.txt"
|
||||
if [ -s $3 ] ; then
|
||||
cp $3 $4
|
||||
echo_success "$2 compiled"
|
||||
else
|
||||
echo_error "$2 compilation failed"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -186,23 +227,36 @@ install_gnutls_from_source(){
|
||||
|
||||
check_install_usrp_uhd_driver(){
|
||||
#first we remove old installation
|
||||
$SUDO apt-get remove uhd libuhd-dev libuhd003 uhd-host -y
|
||||
$SUDO apt-get remove -y uhd || true
|
||||
$SUDO apt-get remove libuhd-dev libuhd003 uhd-host -y
|
||||
v=$(lsb_release -cs)
|
||||
$SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
|
||||
#The new USRP repository
|
||||
$SUDO add-apt-repository ppa:ettusresearch/uhd -y
|
||||
$SUDO apt-get update
|
||||
$SUDO apt-get -y install python python-tk libboost-all-dev libusb-1.0-0-dev
|
||||
$SUDO apt-get -y install libuhd-dev libuhd003 uhd-host
|
||||
$SUDO apt-get -y install libuhd-dev libuhd003
|
||||
}
|
||||
|
||||
install_usrp_uhd_driver() {
|
||||
# We move uhd-host apart because it depends on linux kernel version
|
||||
# On newer kernels, it fails to install
|
||||
$SUDO apt-get -y install uhd-host
|
||||
$SUDO uhd_images_downloader
|
||||
}
|
||||
|
||||
check_install_bladerf_driver(){
|
||||
$SUDO add-apt-repository -y ppa:bladerf/bladerf
|
||||
$SUDO apt-get update
|
||||
if [ "$(get_distribution_release)" == "Ubuntu14.04" ] ; then
|
||||
$SUDO add-apt-repository -y ppa:bladerf/bladerf
|
||||
$SUDO apt-get update
|
||||
fi
|
||||
$SUDO apt-get install -y bladerf libbladerf-dev
|
||||
$SUDO apt-get install -y bladerf-firmware-fx3
|
||||
$SUDO apt-get install -y bladerf-fpga-hostedx40
|
||||
$SUDO bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img
|
||||
}
|
||||
|
||||
flash_firmware_bladerf() {
|
||||
$SUDO bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img
|
||||
}
|
||||
|
||||
check_install_additional_tools (){
|
||||
@@ -228,12 +282,15 @@ check_install_additional_tools (){
|
||||
ctags \
|
||||
ntpdate \
|
||||
iperf3 \
|
||||
android-tools-adb
|
||||
android-tools-adb \
|
||||
wvdial \
|
||||
python-numpy \
|
||||
sshpass
|
||||
|
||||
$SUDO pip install paramiko
|
||||
$SUDO pip install pyroute2
|
||||
$SUDO rm -fr /opt/ssh
|
||||
$SUDO git clone https://gist.github.com/2190472.git /opt/ssh
|
||||
$SUDO GIT_SSL_NO_VERIFY=true git clone https://gist.github.com/2190472.git /opt/ssh
|
||||
|
||||
log_netiface=$OPENAIR_DIR/cmake_targets/log/netiface_install_log.txt
|
||||
echo_info "Installing Netinterfaces package. The logfile for installation is in $log_netiface"
|
||||
@@ -248,8 +305,26 @@ check_install_additional_tools (){
|
||||
}
|
||||
|
||||
check_install_oai_software() {
|
||||
local specific_packages=""
|
||||
if ! check_supported_distribution; then
|
||||
echo_error "Your distribution $(get_distribution_release) is not supported by oai !"
|
||||
exit 1
|
||||
fi
|
||||
$SUDO apt-get update
|
||||
$SUDO apt install -y software-properties-common
|
||||
case "$(get_distribution_release)" in
|
||||
"Ubuntu14.04")
|
||||
specific_packages="libtasn1-3-dev"
|
||||
# For iperf3
|
||||
$SUDO add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty-backports universe"
|
||||
$SUDO apt-get update
|
||||
;;
|
||||
"Ubuntu16.04")
|
||||
specific_packages="libtasn1-6-dev"
|
||||
;;
|
||||
esac
|
||||
$SUDO apt-get install -y \
|
||||
$specific_packages \
|
||||
autoconf \
|
||||
automake \
|
||||
bison \
|
||||
@@ -273,9 +348,9 @@ check_install_oai_software() {
|
||||
iptables-dev \
|
||||
libatlas-base-dev \
|
||||
libatlas-dev \
|
||||
libblas3gf \
|
||||
libblas-dev \
|
||||
libconfig8-dev \
|
||||
libffi-dev \
|
||||
libforms-bin \
|
||||
libforms-dev \
|
||||
libgcrypt11-dev \
|
||||
@@ -285,16 +360,16 @@ check_install_oai_software() {
|
||||
libidn11-dev \
|
||||
libmysqlclient-dev \
|
||||
liboctave-dev \
|
||||
libpgm-5.1 \
|
||||
libpgm-dev \
|
||||
libpython2.7-dev \
|
||||
libsctp1 \
|
||||
libsctp-dev \
|
||||
libssl-dev \
|
||||
libtasn1-3-dev \
|
||||
libtool \
|
||||
libusb-1.0-0-dev \
|
||||
libxml2 \
|
||||
libxml2-dev \
|
||||
libxslt1-dev \
|
||||
linux-headers-`uname -r` \
|
||||
mscgen \
|
||||
octave \
|
||||
@@ -307,11 +382,7 @@ check_install_oai_software() {
|
||||
xmlstarlet \
|
||||
python-pip \
|
||||
pydb \
|
||||
wvdial \
|
||||
python-numpy \
|
||||
sshpass \
|
||||
libxslt1-dev \
|
||||
android-tools-adb
|
||||
wget
|
||||
|
||||
$SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
|
||||
|
||||
@@ -337,6 +408,7 @@ install_asn1c_from_source(){
|
||||
./configure
|
||||
make -j`nproc`
|
||||
$SUDO make install
|
||||
cd -
|
||||
) > $asn1_install_log 2>&1
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,9 @@ function help()
|
||||
echo_error " -f, --rf-config-file filename RF specific configuration file"
|
||||
echo_error " -K, --itti-dump-file filename ITTI dump file containing all ITTI events occuring during EPC runtime.(can omit file name if last argument)"
|
||||
echo_error " -M, --target-dl-mcs mcs Downlink target MCS."
|
||||
echo_error " -m, --mscgen directory Generate mscgen output files in a directory"
|
||||
echo_error " -n, --T-no-wait don't wait for tracer, start immediately"
|
||||
echo_error " -p, --T-port port use given port"
|
||||
echo_error " -m, --mscgen directory Generate mscgen output files in a directory"
|
||||
echo_error " -s, --show-stdout Do not redirect stdout and stderr to file /tmp/lte_softmodem.stdout.txt."
|
||||
echo_error " -S, --enable-missed-slot Continue execution in case of missed slot."
|
||||
echo_error " -T, --target-ul-mcs mcs Uplink target MCS."
|
||||
@@ -188,7 +190,17 @@ function main()
|
||||
exe_arguments="$exe_arguments -m $2"
|
||||
shift 2;
|
||||
;;
|
||||
-V | --vcd)
|
||||
-n | --T-no-wait)
|
||||
echo "setting T tracer operation"
|
||||
exe_arguments="$exe_arguments --T_nowait"
|
||||
shift ;
|
||||
;;
|
||||
-p | --T-port)
|
||||
echo "setting T tracer port"
|
||||
exe_arguments="$exe_arguments --T_port $2"
|
||||
shift 2;
|
||||
;;
|
||||
-V | --vcd)
|
||||
echo "setting gtk-wave output"
|
||||
exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd"
|
||||
shift ;
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
*.o
|
||||
*.a
|
||||
T_IDs.h
|
||||
T_messages.txt.h
|
||||
genids
|
||||
tracer/enb
|
||||
tracer/extract_config
|
||||
tracer/record
|
||||
tracer/replay
|
||||
tracer/textlog
|
||||
tracer/vcd
|
||||
tracee/tracee
|
||||
+8
-34
@@ -1,5 +1,4 @@
|
||||
#include "T.h"
|
||||
#include "T_messages.txt.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
@@ -108,19 +107,17 @@ static void monitor_and_kill(int child1, int child2)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void T_init(int remote_port, int wait_for_tracer)
|
||||
void T_init(int remote_port, int wait_for_tracer, int dont_fork)
|
||||
{
|
||||
int socket_pair[2];
|
||||
int s;
|
||||
int T_shm_fd;
|
||||
unsigned char *buf;
|
||||
int len;
|
||||
int child1, child2;
|
||||
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair))
|
||||
{ perror("socketpair"); abort(); }
|
||||
|
||||
/* child1 runs the local tracer and child2 runs the tracee */
|
||||
/* child1 runs the local tracer and child2 (or main) runs the tracee */
|
||||
|
||||
child1 = fork(); if (child1 == -1) abort();
|
||||
if (child1 == 0) {
|
||||
@@ -130,10 +127,12 @@ void T_init(int remote_port, int wait_for_tracer)
|
||||
}
|
||||
close(socket_pair[0]);
|
||||
|
||||
child2 = fork(); if (child2 == -1) abort();
|
||||
if (child2 != 0) {
|
||||
close(socket_pair[1]);
|
||||
monitor_and_kill(child1, child2);
|
||||
if (dont_fork == 0) {
|
||||
child2 = fork(); if (child2 == -1) abort();
|
||||
if (child2 != 0) {
|
||||
close(socket_pair[1]);
|
||||
monitor_and_kill(child1, child2);
|
||||
}
|
||||
}
|
||||
|
||||
s = socket_pair[1];
|
||||
@@ -153,29 +152,4 @@ void T_init(int remote_port, int wait_for_tracer)
|
||||
close(T_shm_fd);
|
||||
|
||||
new_thread(T_receive_thread, NULL);
|
||||
|
||||
/* trace T_message.txt
|
||||
* Send several messages -1 with content followed by message -2.
|
||||
* We can't use the T macro directly, events -1 and -2 are special.
|
||||
*/
|
||||
buf = T_messages_txt;
|
||||
len = T_messages_txt_len;
|
||||
while (len) {
|
||||
int send_size = len;
|
||||
if (send_size > T_PAYLOAD_MAXSIZE - sizeof(int))
|
||||
send_size = T_PAYLOAD_MAXSIZE - sizeof(int);
|
||||
do {
|
||||
T_LOCAL_DATA
|
||||
T_HEADER(T_ID(-1));
|
||||
T_PUT_buffer(1, ((T_buffer){addr:(buf), length:(len)}));
|
||||
T_COMMIT();
|
||||
} while (0);
|
||||
buf += send_size;
|
||||
len -= send_size;
|
||||
}
|
||||
do {
|
||||
T_LOCAL_DATA
|
||||
T_HEADER(T_ID(-2));
|
||||
T_COMMIT();
|
||||
} while (0);
|
||||
}
|
||||
|
||||
+1
-1
@@ -562,7 +562,7 @@ extern T_cache_t *T_cache;
|
||||
|
||||
extern int *T_active;
|
||||
|
||||
void T_init(int remote_port, int wait_for_tracer);
|
||||
void T_init(int remote_port, int wait_for_tracer, int dont_fork);
|
||||
|
||||
#else /* T_TRACER */
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ ID = ENB_PHY_UL_CHANNEL_ESTIMATE
|
||||
ID = ENB_PHY_PUSCH_IQ
|
||||
DESC = eNodeB PUSCH received IQ data
|
||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
|
||||
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : buffer,pusch_comp
|
||||
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : int,N_RB_UL : int,symbols_per_tti : buffer,pusch_comp
|
||||
ID = ENB_PHY_PUCCH_1AB_IQ
|
||||
DESC = eNodeB PUCCH received IQ data
|
||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
|
||||
@@ -79,10 +79,18 @@ ID = ENB_MAC_UE_UL_PDU
|
||||
DESC = MAC uplink UE received PDU
|
||||
GROUP = ALL:MAC:ENB
|
||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu
|
||||
ID = ENB_MAC_UE_UL_PDU_WITH_DATA
|
||||
DESC = MAC uplink UE received PDU
|
||||
GROUP = ALL:MAC:ENB:HEAVY
|
||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu : buffer,data
|
||||
ID = ENB_MAC_UE_UL_SDU
|
||||
DESC = MAC uplink UE received SDU
|
||||
GROUP = ALL:MAC:ENB
|
||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,lcid : int,length
|
||||
ID = ENB_MAC_UE_UL_SDU_WITH_DATA
|
||||
DESC = MAC uplink UE received SDU
|
||||
GROUP = ALL:MAC:ENB:HEAVY
|
||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,lcid : int,length : buffer,data
|
||||
ID = ENB_MAC_UE_UL_CE
|
||||
DESC = MAC uplink UE received control element
|
||||
GROUP = ALL:MAC:ENB
|
||||
|
||||
@@ -11,10 +11,12 @@
|
||||
#include <inttypes.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "T.h"
|
||||
#include "T_messages.txt.h"
|
||||
#include "T_defs.h"
|
||||
#include "T_IDs.h"
|
||||
|
||||
static T_cache_t *T_cache;
|
||||
static T_cache_t *T_local_cache;
|
||||
static int T_busylist_head;
|
||||
|
||||
typedef struct databuf {
|
||||
@@ -85,6 +87,38 @@ static int get_connection(char *addr, int port)
|
||||
return t;
|
||||
}
|
||||
|
||||
static void forward(void *_forwarder, char *buf, int size);
|
||||
|
||||
void send_T_messages_txt(void *forwarder)
|
||||
{
|
||||
char buf[T_BUFFER_MAX];
|
||||
char *T_LOCAL_buf = buf;
|
||||
int T_LOCAL_size;
|
||||
unsigned char *src;
|
||||
int src_len;
|
||||
|
||||
/* trace T_message.txt
|
||||
* Send several messages -1 with content followed by message -2.
|
||||
*/
|
||||
src = T_messages_txt;
|
||||
src_len = T_messages_txt_len;
|
||||
while (src_len) {
|
||||
int send_size = src_len;
|
||||
if (send_size > T_PAYLOAD_MAXSIZE - sizeof(int))
|
||||
send_size = T_PAYLOAD_MAXSIZE - sizeof(int);
|
||||
/* TODO: be careful, we use internal T stuff, to rewrite? */
|
||||
T_LOCAL_size = 0;
|
||||
T_HEADER(T_ID(-1));
|
||||
T_PUT_buffer(1, ((T_buffer){addr:(src), length:(send_size)}));
|
||||
forward(forwarder, buf, T_LOCAL_size);
|
||||
src += send_size;
|
||||
src_len -= send_size;
|
||||
}
|
||||
T_LOCAL_size = 0;
|
||||
T_HEADER(T_ID(-2));
|
||||
forward(forwarder, buf, T_LOCAL_size);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
/* forward functions */
|
||||
/****************************************************************************/
|
||||
@@ -213,6 +247,7 @@ dead:
|
||||
|
||||
close(f->socket_remote);
|
||||
f->socket_remote = get_connection("0.0.0.0", f->remote_port);
|
||||
send_T_messages_txt(f);
|
||||
goto again;
|
||||
|
||||
return NULL;
|
||||
@@ -237,6 +272,7 @@ static void *forwarder(int port, int s)
|
||||
|
||||
f->remote_port = port;
|
||||
f->socket_remote = get_connection("0.0.0.0", port);
|
||||
send_T_messages_txt(f);
|
||||
|
||||
new_thread(data_sender, f);
|
||||
new_thread(forward_remote_messages, f);
|
||||
@@ -287,7 +323,7 @@ static void forward(void *_forwarder, char *buf, int size)
|
||||
|
||||
static void wait_message(void)
|
||||
{
|
||||
while (T_cache[T_busylist_head].busy == 0) usleep(1000);
|
||||
while (T_local_cache[T_busylist_head].busy == 0) usleep(1000);
|
||||
}
|
||||
|
||||
static void init_shm(void)
|
||||
@@ -297,17 +333,17 @@ static void init_shm(void)
|
||||
if (s == -1) { perror(T_SHM_FILENAME); abort(); }
|
||||
if (ftruncate(s, T_CACHE_SIZE * sizeof(T_cache_t)))
|
||||
{ perror(T_SHM_FILENAME); abort(); }
|
||||
T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
|
||||
PROT_READ | PROT_WRITE, MAP_SHARED, s, 0);
|
||||
if (T_cache == NULL)
|
||||
T_local_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
|
||||
PROT_READ | PROT_WRITE, MAP_SHARED, s, 0);
|
||||
if (T_local_cache == NULL)
|
||||
{ perror(T_SHM_FILENAME); abort(); }
|
||||
close(s);
|
||||
|
||||
/* let's garbage the memory to catch some potential problems
|
||||
* (think multiprocessor sync issues, barriers, etc.)
|
||||
*/
|
||||
memset(T_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t));
|
||||
for (i = 0; i < T_CACHE_SIZE; i++) T_cache[i].busy = 0;
|
||||
memset(T_local_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t));
|
||||
for (i = 0; i < T_CACHE_SIZE; i++) T_local_cache[i].busy = 0;
|
||||
}
|
||||
|
||||
void T_local_tracer_main(int remote_port, int wait_for_tracer,
|
||||
@@ -335,9 +371,9 @@ void T_local_tracer_main(int remote_port, int wait_for_tracer,
|
||||
while (1) {
|
||||
wait_message();
|
||||
__sync_synchronize();
|
||||
forward(f, T_cache[T_busylist_head].buffer,
|
||||
T_cache[T_busylist_head].length);
|
||||
T_cache[T_busylist_head].busy = 0;
|
||||
forward(f, T_local_cache[T_busylist_head].buffer,
|
||||
T_local_cache[T_busylist_head].length);
|
||||
T_local_cache[T_busylist_head].busy = 0;
|
||||
T_busylist_head++;
|
||||
T_busylist_head &= T_CACHE_SIZE - 1;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ CC=gcc
|
||||
CFLAGS=-Wall -g -pthread -DT_TRACER -I.
|
||||
|
||||
PROG=tracee
|
||||
OBJS=tracee.o ../T.o
|
||||
OBJS=tracee.o ../T.o ../local_tracer.o
|
||||
|
||||
$(PROG): $(OBJS)
|
||||
$(CC) $(CFLAGS) -o $(PROG) $(OBJS) -lrt
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
int main(void)
|
||||
{
|
||||
int frame = 0;
|
||||
T_connect_to_tracer("127.0.0.1", 2020);
|
||||
T_init(2021, 1, 0);
|
||||
while (1) {
|
||||
getchar();
|
||||
T(T_ENB_PHY_PUCCH_1AB_IQ, T_INT(0), T_INT(0), T_INT(frame), T_INT(0), T_INT(0), T_INT(0));
|
||||
|
||||
@@ -5,7 +5,16 @@ CFLAGS=-Wall -g -pthread -DT_TRACER -I.
|
||||
|
||||
LIBS=-lX11 -lm -lpng -lXft
|
||||
|
||||
all: textlog enb vcd
|
||||
all: record replay extract_config textlog enb vcd
|
||||
|
||||
record: utils.o record.o database.o config.o
|
||||
$(CC) $(CFLAGS) -o record $^ $(LIBS)
|
||||
|
||||
replay: utils.o replay.o
|
||||
$(CC) $(CFLAGS) -o replay $^ $(LIBS)
|
||||
|
||||
extract_config: extract_config.o
|
||||
$(CC) $(CFLAGS) -o extract_config $^ $(LIBS)
|
||||
|
||||
textlog: utils.o textlog.o database.o event.o handler.o config.o \
|
||||
event_selector.o view/view.a gui/gui.a logger/logger.a \
|
||||
@@ -40,8 +49,10 @@ filter/filter.a:
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -f *.o core tracer_remote textlog enb vcd
|
||||
rm -f *.o core tracer_remote textlog enb vcd record replay
|
||||
rm -f extract_config
|
||||
cd gui && make clean
|
||||
cd view && make clean
|
||||
cd logger && make clean
|
||||
cd filter && make clean
|
||||
cd hacks && make clean
|
||||
|
||||
+82
-10
@@ -33,9 +33,6 @@ typedef struct {
|
||||
pthread_mutex_t lock;
|
||||
} enb_data;
|
||||
|
||||
#define DEFAULT_REMOTE_IP "127.0.0.1"
|
||||
#define DEFAULT_REMOTE_PORT 2021
|
||||
|
||||
void is_on_changed(void *_d)
|
||||
{
|
||||
enb_data *d = _d;
|
||||
@@ -116,8 +113,11 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
|
||||
widget *text;
|
||||
view *textview;
|
||||
int i;
|
||||
widget *w;
|
||||
view *v;
|
||||
logger *l;
|
||||
|
||||
main_window = new_toplevel_window(g, 800, 600, "eNB tracer");
|
||||
main_window = new_toplevel_window(g, 1200, 900, "eNB tracer");
|
||||
top_container = new_container(g, VERTICAL);
|
||||
widget_add_child(g, main_window, top_container, -1);
|
||||
|
||||
@@ -135,12 +135,73 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
|
||||
*/
|
||||
framelog_set_skip(input_signal_log, 10);
|
||||
input_signal_view = new_view_xy(7680*10, 10,
|
||||
g, input_signal_plot, new_color(g, "#0c0c72"));
|
||||
g, input_signal_plot, new_color(g, "#0c0c72"), XY_LOOP_MODE);
|
||||
logger_add_view(input_signal_log, input_signal_view);
|
||||
|
||||
/* UE 0 PUSCH IQ data */
|
||||
w = new_xy_plot(g, 55, 55, "PUSCH IQ [UE 0]", 50);
|
||||
widget_add_child(g, line, w, -1);
|
||||
xy_plot_set_range(g, w, -1000, 1000, -1000, 1000);
|
||||
l = new_iqlog(h, database, "ENB_PHY_PUSCH_IQ", "nb_rb",
|
||||
"N_RB_UL", "symbols_per_tti", "pusch_comp");
|
||||
v = new_view_xy(100*12*14,10,g,w,new_color(g,"#000"),XY_FORCED_MODE);
|
||||
logger_add_view(l, v);
|
||||
logger_set_filter(l,
|
||||
filter_eq(
|
||||
filter_evarg(database, "ENB_PHY_PUSCH_IQ", "UE_ID"),
|
||||
filter_int(0)));
|
||||
|
||||
/* UE 0 estimated UL channel */
|
||||
w = new_xy_plot(g, 280, 55, "UL estimated channel [UE 0]", 50);
|
||||
widget_add_child(g, line, w, -1);
|
||||
xy_plot_set_range(g, w, 0, 512*10, -10, 80);
|
||||
l = new_framelog(h, database,
|
||||
"ENB_PHY_UL_CHANNEL_ESTIMATE", "subframe", "chest_t");
|
||||
//framelog_set_skip(input_signal_log, 10);
|
||||
framelog_set_update_only_at_sf9(l, 0);
|
||||
v = new_view_xy(512*10, 10, g, w, new_color(g, "#0c0c72"), XY_LOOP_MODE);
|
||||
logger_add_view(l, v);
|
||||
logger_set_filter(l,
|
||||
filter_eq(
|
||||
filter_evarg(database, "ENB_PHY_UL_CHANNEL_ESTIMATE", "UE_ID"),
|
||||
filter_int(0)));
|
||||
|
||||
/* UE 0 PUCCH energy */
|
||||
w = new_xy_plot(g, 128, 55, "PUCCH1 energy (SR) [UE 0]", 50);
|
||||
widget_add_child(g, line, w, -1);
|
||||
xy_plot_set_range(g, w, 0, 1024*10, -10, 80);
|
||||
l = new_ttilog(h, database,
|
||||
"ENB_PHY_PUCCH_1_ENERGY", "frame", "subframe", "threshold", 0);
|
||||
v = new_view_tti(10, g, w, new_color(g, "#ff0000"));
|
||||
logger_add_view(l, v);
|
||||
logger_set_filter(l,
|
||||
filter_eq(
|
||||
filter_evarg(database, "ENB_PHY_PUCCH_1_ENERGY", "UE_ID"),
|
||||
filter_int(0)));
|
||||
l = new_ttilog(h, database,
|
||||
"ENB_PHY_PUCCH_1_ENERGY", "frame", "subframe", "energy", 1);
|
||||
v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
|
||||
logger_add_view(l, v);
|
||||
logger_set_filter(l,
|
||||
filter_eq(
|
||||
filter_evarg(database, "ENB_PHY_PUCCH_1_ENERGY", "UE_ID"),
|
||||
filter_int(0)));
|
||||
|
||||
/* UE 0 PUCCH IQ data */
|
||||
w = new_xy_plot(g, 55, 55, "PUCCH IQ [UE 0]", 50);
|
||||
widget_add_child(g, line, w, -1);
|
||||
xy_plot_set_range(g, w, -100, 100, -100, 100);
|
||||
l = new_iqdotlog(h, database, "ENB_PHY_PUCCH_1AB_IQ", "I", "Q");
|
||||
v = new_view_xy(500, 10, g, w, new_color(g,"#000"), XY_LOOP_MODE);
|
||||
logger_add_view(l, v);
|
||||
logger_set_filter(l,
|
||||
filter_eq(
|
||||
filter_evarg(database, "ENB_PHY_PUCCH_1AB_IQ", "UE_ID"),
|
||||
filter_int(0)));
|
||||
|
||||
/* downlink/uplink UE DCIs */
|
||||
widget_add_child(g, top_container,
|
||||
new_label(g,"DL/UL TICK/DCI/ACK/NACK "), -1);
|
||||
new_label(g,"DL/UL TICK/DCI/ACK/NACK [all UEs]"), -1);
|
||||
line = new_container(g, HORIZONTAL);
|
||||
widget_add_child(g, top_container, line, -1);
|
||||
timeline_plot = new_timeline(g, 512, 8, 5);
|
||||
@@ -190,7 +251,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
|
||||
|
||||
/* harq processes' ticktime view */
|
||||
widget_add_child(g, top_container,
|
||||
new_label(g,"DL/UL HARQ (x8) "), -1);
|
||||
new_label(g,"DL/UL HARQ (x8) [UE 0]"), -1);
|
||||
line = new_container(g, HORIZONTAL);
|
||||
widget_add_child(g, top_container, line, -1);
|
||||
timeline_plot = new_timeline(g, 512, 2*8+2, 3);
|
||||
@@ -440,14 +501,16 @@ int main(int n, char **v)
|
||||
logger *textlog;
|
||||
char *name, *desc;
|
||||
database_get_generic_description(database, i, &name, &desc);
|
||||
if (strncmp(name, "LEGACY_", 7) != 0) continue;
|
||||
textlog = new_textlog(h, database, name, desc);
|
||||
logger_add_view(textlog, eg.legacy);
|
||||
if (!strncmp(name, "LEGACY_", 7)) {
|
||||
textlog = new_textlog(h, database, name, desc);
|
||||
logger_add_view(textlog, eg.legacy);
|
||||
}
|
||||
free(name);
|
||||
free(desc);
|
||||
}
|
||||
|
||||
on_off(database, "ENB_PHY_INPUT_SIGNAL", is_on, 1);
|
||||
on_off(database, "ENB_PHY_UL_CHANNEL_ESTIMATE", is_on, 1);
|
||||
on_off(database, "ENB_PHY_DL_TICK", is_on, 1);
|
||||
on_off(database, "ENB_PHY_DLSCH_UE_DCI", is_on, 1);
|
||||
on_off(database, "ENB_PHY_DLSCH_UE_ACK", is_on, 1);
|
||||
@@ -458,6 +521,9 @@ int main(int n, char **v)
|
||||
on_off(database, "ENB_PHY_ULSCH_UE_ACK", is_on, 1);
|
||||
on_off(database, "ENB_PHY_ULSCH_UE_NACK", is_on, 1);
|
||||
on_off(database, "ENB_MASTER_TICK", is_on, 1);
|
||||
on_off(database, "ENB_PHY_PUSCH_IQ", is_on, 1);
|
||||
on_off(database, "ENB_PHY_PUCCH_1_ENERGY", is_on, 1);
|
||||
on_off(database, "ENB_PHY_PUCCH_1AB_IQ", is_on, 1);
|
||||
|
||||
on_off(database, "LEGACY_RRC_INFO", is_on, 1);
|
||||
on_off(database, "LEGACY_RRC_ERROR", is_on, 1);
|
||||
@@ -477,7 +543,9 @@ int main(int n, char **v)
|
||||
view_add_log(eg.macview, "ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION",
|
||||
h, database, is_on);
|
||||
view_add_log(eg.macview, "ENB_MAC_UE_UL_PDU", h, database, is_on);
|
||||
view_add_log(eg.macview, "ENB_MAC_UE_UL_PDU_WITH_DATA", h, database, is_on);
|
||||
view_add_log(eg.macview, "ENB_MAC_UE_UL_SDU", h, database, is_on);
|
||||
view_add_log(eg.macview, "ENB_MAC_UE_UL_SDU_WITH_DATA", h, database, is_on);
|
||||
view_add_log(eg.macview, "ENB_MAC_UE_UL_CE", h, database, is_on);
|
||||
|
||||
view_add_log(eg.rlcview, "ENB_RLC_DL", h, database, is_on);
|
||||
@@ -545,6 +613,10 @@ int main(int n, char **v)
|
||||
view_add_log(eg.rrcview, "ENB_RRC_UNKNOW_MESSAGE",
|
||||
h, database, is_on);
|
||||
|
||||
/* deactivate those two by default, they are a bit heavy */
|
||||
on_off(database, "ENB_MAC_UE_UL_SDU_WITH_DATA", is_on, 0);
|
||||
on_off(database, "ENB_MAC_UE_UL_PDU_WITH_DATA", is_on, 0);
|
||||
|
||||
for (i = 0; i < on_off_n; i++)
|
||||
on_off(database, on_off_name[i], is_on, on_off_action[i]);
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "../T_defs.h"
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
printf(
|
||||
"options:\n"
|
||||
" -i <input file> this option is mandatory\n"
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#define ERR printf("ERROR: read file %s failed\n", input_filename)
|
||||
|
||||
int main(int n, char **v)
|
||||
{
|
||||
char *input_filename = NULL;
|
||||
int i;
|
||||
FILE *in;
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
||||
if (!strcmp(v[i], "-i"))
|
||||
{ if (i > n-2) usage(); input_filename = v[++i]; continue; }
|
||||
usage();
|
||||
}
|
||||
|
||||
if (input_filename == NULL) {
|
||||
printf("ERROR: provide an input file (-i)\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
in = fopen(input_filename, "r");
|
||||
if (in == NULL) { perror(input_filename); abort(); }
|
||||
|
||||
while (1) {
|
||||
int type;
|
||||
int32_t length;
|
||||
char v[T_BUFFER_MAX];
|
||||
int vpos = 0;
|
||||
|
||||
/* read event from file */
|
||||
if (fread(&length, 4, 1, in) != 1) break;
|
||||
memcpy(v+vpos, &length, 4);
|
||||
vpos += 4;
|
||||
#ifdef T_SEND_TIME
|
||||
if (length < sizeof(struct timespec)) { ERR; break; }
|
||||
if (fread(v+vpos, sizeof(struct timespec), 1, in) != 1) { ERR; break; }
|
||||
vpos += sizeof(struct timespec);
|
||||
length -= sizeof(struct timespec);
|
||||
#endif
|
||||
if (length < sizeof(int)) { ERR; break; }
|
||||
if (fread(&type, sizeof(int), 1, in) != 1) { ERR; break; }
|
||||
memcpy(v+vpos, &type, sizeof(int));
|
||||
vpos += sizeof(int);
|
||||
length -= sizeof(int);
|
||||
if (length) if (fread(v+vpos, length, 1, in) != 1) { ERR; break; }
|
||||
vpos += length;
|
||||
|
||||
if (type == -1) {
|
||||
if (length < sizeof(int)) { ERR; break; }
|
||||
length -= sizeof(int);
|
||||
if (fwrite(v+vpos-length, length, 1, stdout) != 1) { ERR; break; }
|
||||
}
|
||||
|
||||
/* TODO: parse all file? */
|
||||
if (type == -2) break;
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
CC=gcc
|
||||
CFLAGS=-Wall -g -pthread -DT_TRACER -I. -I..
|
||||
|
||||
LIBS=-lX11 -lm -lpng -lXft
|
||||
|
||||
all: dump_nack_signal
|
||||
|
||||
dump_nack_signal: ../utils.o ../database.o ../config.o ../event.o \
|
||||
dump_nack_signal.o
|
||||
$(CC) $(CFLAGS) -o dump_nack_signal $^ $(LIBS)
|
||||
|
||||
.PHONY: all
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -f *.o core dump_nack_signal
|
||||
@@ -0,0 +1,115 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "utils.h"
|
||||
#include "event.h"
|
||||
#include "database.h"
|
||||
#include "config.h"
|
||||
#include "../T_defs.h"
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
printf(
|
||||
"options:\n"
|
||||
" -d <database file> this option is mandatory\n"
|
||||
" -ip <host> connect to given IP address (default %s)\n"
|
||||
" -p <port> connect to given port (default %d)\n",
|
||||
DEFAULT_REMOTE_IP,
|
||||
DEFAULT_REMOTE_PORT
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int n, char **v)
|
||||
{
|
||||
char *database_filename = NULL;
|
||||
void *database;
|
||||
char *ip = DEFAULT_REMOTE_IP;
|
||||
int port = DEFAULT_REMOTE_PORT;
|
||||
int i;
|
||||
char t;
|
||||
int number_of_events;
|
||||
int socket;
|
||||
int *is_on;
|
||||
int ev_input, ev_nack;
|
||||
int ev_ack;
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
||||
if (!strcmp(v[i], "-d"))
|
||||
{ if (i > n-2) usage(); database_filename = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-p"))
|
||||
{ if (i > n-2) usage(); port = atoi(v[++i]); continue; }
|
||||
usage();
|
||||
}
|
||||
|
||||
if (database_filename == NULL) {
|
||||
printf("ERROR: provide a database file (-d)\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
database = parse_database(database_filename);
|
||||
|
||||
load_config_file(database_filename);
|
||||
|
||||
number_of_events = number_of_ids(database);
|
||||
is_on = calloc(number_of_events, sizeof(int));
|
||||
if (is_on == NULL) abort();
|
||||
|
||||
on_off(database, "ENB_PHY_INPUT_SIGNAL", is_on, 1);
|
||||
on_off(database, "ENB_PHY_ULSCH_UE_NACK", is_on, 1);
|
||||
on_off(database, "ENB_PHY_ULSCH_UE_ACK", is_on, 1);
|
||||
|
||||
ev_input = event_id_from_name(database, "ENB_PHY_INPUT_SIGNAL");
|
||||
ev_nack = event_id_from_name(database, "ENB_PHY_ULSCH_UE_NACK");
|
||||
ev_ack = event_id_from_name(database, "ENB_PHY_ULSCH_UE_ACK");
|
||||
|
||||
socket = connect_to(ip, port);
|
||||
|
||||
t = 1;
|
||||
if (socket_send(socket, &t, 1) == -1 ||
|
||||
socket_send(socket, &number_of_events, sizeof(int)) == -1 ||
|
||||
socket_send(socket, is_on, number_of_events * sizeof(int)) == -1)
|
||||
abort();
|
||||
|
||||
char dump[10][T_BUFFER_MAX];
|
||||
event dump_ev[10];
|
||||
FILE *z = fopen("/tmp/dd", "w"); if (z == NULL) abort();
|
||||
while (1) {
|
||||
char v[T_BUFFER_MAX];
|
||||
event e;
|
||||
e = get_event(socket, v, database);
|
||||
if (e.type == -1) break;
|
||||
if (e.type == ev_input) {
|
||||
int sf = e.e[2].i;
|
||||
memcpy(dump[sf], v, T_BUFFER_MAX);
|
||||
dump_ev[sf] = e;
|
||||
printf("input %d/%d\n", e.e[1].i, sf);
|
||||
if (fwrite(dump_ev[sf].e[4].b, dump_ev[sf].e[4].bsize, 1, z) != 1) abort();
|
||||
fflush(z);
|
||||
}
|
||||
if (e.type == ev_nack) {
|
||||
int sf = e.e[2].i;
|
||||
printf("nack %d/%d\n", e.e[1].i, sf);
|
||||
FILE *f = fopen("/tmp/dump.raw", "w"); if (f == NULL) abort();
|
||||
if (fwrite(dump[sf] + ((char *)dump_ev[sf].e[4].b - v),
|
||||
dump_ev[sf].e[4].bsize, 1, f) != 1) abort();
|
||||
if (fclose(f)) abort();
|
||||
printf("dumped... press enter (delta %d)\n", (int)((char *)dump_ev[sf].e[4].b - v));
|
||||
// getchar();
|
||||
}
|
||||
if (e.type == ev_ack) {
|
||||
int sf = e.e[2].i;
|
||||
printf("ack %d/%d\n", e.e[1].i, sf);
|
||||
FILE *f = fopen("/tmp/dump.raw", "w"); if (f == NULL) abort();
|
||||
if (fwrite(dump[sf] + ((char *)dump_ev[sf].e[4].b - v),
|
||||
dump_ev[sf].e[4].bsize, 1, f) != 1) abort();
|
||||
if (fclose(f)) abort();
|
||||
printf("dumped... press enter (delta %d)\n", (int)((char *)dump_ev[sf].e[4].b - v));
|
||||
// getchar();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
CC=gcc
|
||||
CFLAGS=-Wall -g -pthread -I..
|
||||
|
||||
OBJS=logger.o textlog.o framelog.o ttilog.o timelog.o ticklog.o
|
||||
OBJS=logger.o textlog.o framelog.o ttilog.o timelog.o ticklog.o iqlog.o \
|
||||
iqdotlog.o
|
||||
|
||||
logger.a: $(OBJS)
|
||||
ar cr logger.a $(OBJS)
|
||||
|
||||
@@ -21,6 +21,7 @@ struct framelog {
|
||||
*/
|
||||
int skip_current; /* internal data for the skip mechanism */
|
||||
int skip_on; /* internal data for the skip mechanism */
|
||||
int update_only_at_sf9;
|
||||
};
|
||||
|
||||
static void _event(void *p, event e)
|
||||
@@ -76,7 +77,7 @@ static void _event(void *p, event e)
|
||||
l->buffer[subframe * nsamples + i] = 10*log10(1.0+(float)(I*I+Q*Q));
|
||||
}
|
||||
|
||||
if (subframe == 9)
|
||||
if (l->update_only_at_sf9 == 0 || subframe == 9)
|
||||
for (i = 0; i < l->common.vsize; i++)
|
||||
l->common.v[i]->append(l->common.v[i], l->x, l->buffer, l->blength);
|
||||
}
|
||||
@@ -91,6 +92,8 @@ logger *new_framelog(event_handler *h, void *database,
|
||||
|
||||
ret = calloc(1, sizeof(struct framelog)); if (ret == NULL) abort();
|
||||
|
||||
ret->update_only_at_sf9 = 1;
|
||||
|
||||
ret->common.event_name = strdup(event_name);
|
||||
if (ret->common.event_name == NULL) abort();
|
||||
ret->database = database;
|
||||
@@ -144,3 +147,9 @@ void framelog_set_skip(logger *_this, int skip_delay)
|
||||
l->skip_current = 0;
|
||||
l->skip_on = 0;
|
||||
}
|
||||
|
||||
void framelog_set_update_only_at_sf9(logger *_this, int update_only_at_sf9)
|
||||
{
|
||||
struct framelog *l = _this;
|
||||
l->update_only_at_sf9 = update_only_at_sf9;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
#include "logger.h"
|
||||
#include "logger_defs.h"
|
||||
#include "handler.h"
|
||||
#include "database.h"
|
||||
#include "filter/filter.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct iqdotlog {
|
||||
struct logger common;
|
||||
void *database;
|
||||
int i_arg;
|
||||
int q_arg;
|
||||
};
|
||||
|
||||
static void _event(void *p, event e)
|
||||
{
|
||||
struct iqdotlog *l = p;
|
||||
int i;
|
||||
float I, Q;
|
||||
|
||||
if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
|
||||
return;
|
||||
|
||||
I = e.e[l->i_arg].i;
|
||||
Q = e.e[l->q_arg].i;
|
||||
|
||||
for (i = 0; i < l->common.vsize; i++)
|
||||
l->common.v[i]->append(l->common.v[i], &I, &Q, 1);
|
||||
}
|
||||
|
||||
logger *new_iqdotlog(event_handler *h, void *database,
|
||||
char *event_name, char *I, char *Q)
|
||||
{
|
||||
struct iqdotlog *ret;
|
||||
int event_id;
|
||||
database_event_format f;
|
||||
int i;
|
||||
|
||||
ret = calloc(1, sizeof(struct iqdotlog)); if (ret == NULL) abort();
|
||||
|
||||
ret->common.event_name = strdup(event_name);
|
||||
if (ret->common.event_name == NULL) abort();
|
||||
ret->database = database;
|
||||
|
||||
event_id = event_id_from_name(database, event_name);
|
||||
|
||||
ret->common.handler_id = register_handler_function(h,event_id,_event,ret);
|
||||
|
||||
f = get_format(database, event_id);
|
||||
|
||||
/* look for args */
|
||||
ret->i_arg = -1;
|
||||
ret->q_arg = -1;
|
||||
for (i = 0; i < f.count; i++) {
|
||||
if (!strcmp(f.name[i], I)) ret->i_arg = i;
|
||||
if (!strcmp(f.name[i], Q)) ret->q_arg = i;
|
||||
}
|
||||
if (ret->i_arg == -1) {
|
||||
printf("%s:%d: argument '%s' not found in event '%s'\n",
|
||||
__FILE__, __LINE__, I, event_name);
|
||||
abort();
|
||||
}
|
||||
if (ret->q_arg == -1) {
|
||||
printf("%s:%d: argument '%s' not found in event '%s'\n",
|
||||
__FILE__, __LINE__, Q, event_name);
|
||||
abort();
|
||||
}
|
||||
if (strcmp(f.type[ret->i_arg], "int") != 0) {
|
||||
printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
|
||||
__FILE__, __LINE__, I);
|
||||
abort();
|
||||
}
|
||||
if (strcmp(f.type[ret->q_arg], "int") != 0) {
|
||||
printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
|
||||
__FILE__, __LINE__, Q);
|
||||
abort();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
#include "logger.h"
|
||||
#include "logger_defs.h"
|
||||
#include "handler.h"
|
||||
#include "database.h"
|
||||
#include "filter/filter.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
struct iqlog {
|
||||
struct logger common;
|
||||
void *database;
|
||||
int nb_rb_arg;
|
||||
int N_RB_UL_arg;
|
||||
int symbols_per_tti_arg;
|
||||
int buffer_arg;
|
||||
float *i;
|
||||
float *q;
|
||||
int max_length;
|
||||
};
|
||||
|
||||
#if 0
|
||||
/* this function passes all received IQ samples to the views */
|
||||
static void _event(void *p, event e)
|
||||
{
|
||||
struct iqlog *l = p;
|
||||
int i;
|
||||
void *buffer;
|
||||
int bsize;
|
||||
int nsamples;
|
||||
|
||||
if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
|
||||
return;
|
||||
|
||||
buffer = e.e[l->buffer_arg].b;
|
||||
bsize = e.e[l->buffer_arg].bsize;
|
||||
|
||||
nsamples = bsize / (2*sizeof(int16_t));
|
||||
|
||||
if (nsamples > l->max_length) {
|
||||
l->i = realloc(l->i, nsamples * sizeof(float));
|
||||
if (l->i == NULL) abort();
|
||||
l->q = realloc(l->q, nsamples * sizeof(float));
|
||||
if (l->q == NULL) abort();
|
||||
l->max_length = nsamples;
|
||||
}
|
||||
|
||||
for (i = 0; i < nsamples; i++) {
|
||||
l->i[i] = ((int16_t *)buffer)[i*2];
|
||||
l->q[i] = ((int16_t *)buffer)[i*2+1];
|
||||
}
|
||||
|
||||
for (i = 0; i < l->common.vsize; i++)
|
||||
l->common.v[i]->append(l->common.v[i], l->i, l->q, nsamples);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void _event(void *p, event e)
|
||||
{
|
||||
struct iqlog *l = p;
|
||||
int i, j;
|
||||
void *buffer;
|
||||
int bsize;
|
||||
int nb_rb;
|
||||
int N_RB_UL;
|
||||
int symbols_per_tti;
|
||||
int max_nsamples;
|
||||
float *idst, *qdst;
|
||||
int count;
|
||||
|
||||
if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
|
||||
return;
|
||||
|
||||
nb_rb = e.e[l->nb_rb_arg].i;
|
||||
N_RB_UL = e.e[l->N_RB_UL_arg].i;
|
||||
symbols_per_tti = e.e[l->symbols_per_tti_arg].i;
|
||||
|
||||
buffer = e.e[l->buffer_arg].b;
|
||||
bsize = e.e[l->buffer_arg].bsize;
|
||||
|
||||
if (bsize != N_RB_UL * symbols_per_tti * 12 * 4) {
|
||||
printf("%s:%d:%s: bad buffer size\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
abort();
|
||||
}
|
||||
|
||||
max_nsamples = bsize / 4;
|
||||
|
||||
if (max_nsamples > l->max_length) {
|
||||
l->i = realloc(l->i, max_nsamples * sizeof(float));
|
||||
if (l->i == NULL) abort();
|
||||
l->q = realloc(l->q, max_nsamples * sizeof(float));
|
||||
if (l->q == NULL) abort();
|
||||
l->max_length = max_nsamples;
|
||||
}
|
||||
|
||||
idst = l->i;
|
||||
qdst = l->q;
|
||||
count = 0;
|
||||
for (i = 0; i < symbols_per_tti; i++)
|
||||
for (j = 0; j < 12 * nb_rb; j++) {
|
||||
*idst = ((int16_t *)buffer)[(i*N_RB_UL*12 + j) * 2];
|
||||
*qdst = ((int16_t *)buffer)[(i*N_RB_UL*12 + j) * 2 + 1];
|
||||
idst++;
|
||||
qdst++;
|
||||
count++;
|
||||
}
|
||||
|
||||
for (i = 0; i < l->common.vsize; i++)
|
||||
l->common.v[i]->append(l->common.v[i], l->i, l->q, count);
|
||||
}
|
||||
|
||||
logger *new_iqlog(event_handler *h, void *database,
|
||||
char *event_name, char *nb_rb, char *N_RB_UL, char *symbols_per_tti,
|
||||
char *buffer_varname)
|
||||
{
|
||||
struct iqlog *ret;
|
||||
int event_id;
|
||||
database_event_format f;
|
||||
int i;
|
||||
|
||||
ret = calloc(1, sizeof(struct iqlog)); if (ret == NULL) abort();
|
||||
|
||||
ret->common.event_name = strdup(event_name);
|
||||
if (ret->common.event_name == NULL) abort();
|
||||
ret->database = database;
|
||||
|
||||
event_id = event_id_from_name(database, event_name);
|
||||
|
||||
ret->common.handler_id = register_handler_function(h,event_id,_event,ret);
|
||||
|
||||
f = get_format(database, event_id);
|
||||
|
||||
/* look for args */
|
||||
ret->nb_rb_arg = -1;
|
||||
ret->N_RB_UL_arg = -1;
|
||||
ret->symbols_per_tti_arg = -1;
|
||||
ret->buffer_arg = -1;
|
||||
for (i = 0; i < f.count; i++) {
|
||||
if (!strcmp(f.name[i], nb_rb)) ret->nb_rb_arg = i;
|
||||
if (!strcmp(f.name[i], N_RB_UL)) ret->N_RB_UL_arg = i;
|
||||
if (!strcmp(f.name[i], symbols_per_tti)) ret->symbols_per_tti_arg = i;
|
||||
if (!strcmp(f.name[i], buffer_varname)) ret->buffer_arg = i;
|
||||
}
|
||||
if (ret->nb_rb_arg == -1) {
|
||||
printf("%s:%d: argument '%s' not found in event '%s'\n",
|
||||
__FILE__, __LINE__, nb_rb, event_name);
|
||||
abort();
|
||||
}
|
||||
if (ret->N_RB_UL_arg == -1) {
|
||||
printf("%s:%d: argument '%s' not found in event '%s'\n",
|
||||
__FILE__, __LINE__, N_RB_UL, event_name);
|
||||
abort();
|
||||
}
|
||||
if (ret->symbols_per_tti_arg == -1) {
|
||||
printf("%s:%d: argument '%s' not found in event '%s'\n",
|
||||
__FILE__, __LINE__, symbols_per_tti, event_name);
|
||||
abort();
|
||||
}
|
||||
if (ret->buffer_arg == -1) {
|
||||
printf("%s:%d: buffer argument '%s' not found in event '%s'\n",
|
||||
__FILE__, __LINE__, buffer_varname, event_name);
|
||||
abort();
|
||||
}
|
||||
if (strcmp(f.type[ret->nb_rb_arg], "int") != 0) {
|
||||
printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
|
||||
__FILE__, __LINE__, nb_rb);
|
||||
abort();
|
||||
}
|
||||
if (strcmp(f.type[ret->N_RB_UL_arg], "int") != 0) {
|
||||
printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
|
||||
__FILE__, __LINE__, N_RB_UL);
|
||||
abort();
|
||||
}
|
||||
if (strcmp(f.type[ret->symbols_per_tti_arg], "int") != 0) {
|
||||
printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
|
||||
__FILE__, __LINE__, symbols_per_tti);
|
||||
abort();
|
||||
}
|
||||
if (strcmp(f.type[ret->buffer_arg], "buffer") != 0) {
|
||||
printf("%s:%d: argument '%s' has wrong type (should be 'buffer')\n",
|
||||
__FILE__, __LINE__, buffer_varname);
|
||||
abort();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -13,8 +13,16 @@ logger *new_ttilog(void *event_handler, void *database,
|
||||
logger *new_timelog(void *event_handler, void *database, char *event_name);
|
||||
logger *new_ticklog(void *event_handler, void *database,
|
||||
char *event_name, char *frame_name, char *subframe_name);
|
||||
logger *new_iqlog(void *event_handler, void *database,
|
||||
char *event_name, char *nb_rb, char *N_RB_UL, char *symbols_per_tti,
|
||||
char *buffer_varname);
|
||||
logger *new_iqdotlog(void *event_handler, void *database,
|
||||
char *event_name, char *I, char *Q);
|
||||
|
||||
void framelog_set_skip(logger *_this, int skip_delay);
|
||||
void framelog_set_update_only_at_sf9(logger *_this, int update_only_at_sf9);
|
||||
|
||||
void textlog_dump_buffer(logger *_this, int dump_buffer);
|
||||
|
||||
#include "view/view.h"
|
||||
|
||||
|
||||
@@ -32,12 +32,13 @@ struct textlog {
|
||||
int fsize;
|
||||
/* local output buffer */
|
||||
OBUF o;
|
||||
int dump_buffer;
|
||||
};
|
||||
|
||||
static void _event(void *p, event e)
|
||||
{
|
||||
struct textlog *l = p;
|
||||
int i;
|
||||
int i, j;
|
||||
#ifdef T_SEND_TIME
|
||||
struct tm *t;
|
||||
char tt[64];
|
||||
@@ -65,6 +66,14 @@ static void _event(void *p, event e)
|
||||
case BUFFER:
|
||||
PUTS(&l->o, "{buffer size:");
|
||||
PUTI(&l->o, e.e[l->f[i].event_arg].bsize);
|
||||
if (l->dump_buffer) {
|
||||
PUTS(&l->o, " [");
|
||||
for (j = 0; j < e.e[l->f[i].event_arg].bsize; j++) {
|
||||
PUTX2(&l->o, ((unsigned char *)e.e[l->f[i].event_arg].b)[j]);
|
||||
PUTC(&l->o, ' ');
|
||||
}
|
||||
PUTS(&l->o, "]");
|
||||
}
|
||||
PUTS(&l->o, "}");
|
||||
break;
|
||||
}
|
||||
@@ -196,3 +205,13 @@ error:
|
||||
printf("%s:%d: bad format '%s'\n", __FILE__, __LINE__, format);
|
||||
abort();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
/* public functions */
|
||||
/****************************************************************************/
|
||||
|
||||
void textlog_dump_buffer(logger *_this, int dump_buffer)
|
||||
{
|
||||
struct textlog *l = _this;
|
||||
l->dump_buffer = dump_buffer;
|
||||
}
|
||||
|
||||
@@ -3,393 +3,590 @@
|
||||
*/
|
||||
unsigned char openair_logo_png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
|
||||
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x28,
|
||||
0x08, 0x06, 0x00, 0x00, 0x00, 0x08, 0x78, 0x5f, 0x43, 0x00, 0x00, 0x00,
|
||||
0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0,
|
||||
0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00,
|
||||
0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18,
|
||||
0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xe0, 0x05, 0x17,
|
||||
0x0e, 0x30, 0x2a, 0xd1, 0xdd, 0x83, 0x5b, 0x00, 0x00, 0x11, 0xc5, 0x49,
|
||||
0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0x9b, 0x79, 0x70, 0x94, 0xe7, 0x7d,
|
||||
0xc7, 0x3f, 0xcf, 0xf3, 0xbe, 0xbb, 0x2b, 0xed, 0xea, 0xbe, 0xef, 0x03,
|
||||
0x24, 0x10, 0x08, 0x8c, 0xb9, 0x31, 0x06, 0x73, 0xd4, 0xd8, 0x4e, 0x38,
|
||||
0x62, 0x63, 0x77, 0x92, 0x90, 0xcb, 0x9d, 0x34, 0x19, 0x27, 0xce, 0xa4,
|
||||
0xed, 0x8c, 0xd3, 0x78, 0xd2, 0x64, 0xd2, 0x36, 0x9d, 0x34, 0xa9, 0xdb,
|
||||
0xa6, 0x99, 0xb6, 0x49, 0x67, 0x82, 0xe3, 0x24, 0x76, 0x9a, 0x34, 0x76,
|
||||
0x5c, 0x1f, 0x18, 0x8f, 0x31, 0xc4, 0xc6, 0x06, 0xcc, 0x69, 0x21, 0xb0,
|
||||
0x05, 0x08, 0x1d, 0x80, 0x2e, 0x74, 0xae, 0xa4, 0xbd, 0xb4, 0xbb, 0xef,
|
||||
0xfb, 0x3c, 0xfd, 0x63, 0x57, 0x2b, 0xd6, 0x12, 0x58, 0x60, 0x32, 0x74,
|
||||
0xb0, 0x9f, 0x99, 0x1d, 0x69, 0x9f, 0xe7, 0xf9, 0x3d, 0xd7, 0xf7, 0x77,
|
||||
0x3f, 0xcf, 0x0a, 0xad, 0xb5, 0xe6, 0x43, 0x5a, 0x94, 0xd6, 0xf4, 0x07,
|
||||
0xc3, 0xf8, 0xa3, 0x51, 0x3a, 0x47, 0xfc, 0xf4, 0x05, 0x82, 0x0c, 0xf8,
|
||||
0x43, 0x98, 0x52, 0x50, 0xec, 0x49, 0xa5, 0x38, 0xdd, 0x4d, 0x71, 0xba,
|
||||
0x87, 0x34, 0x97, 0x93, 0x74, 0x97, 0x13, 0x21, 0xc4, 0x1f, 0x7d, 0x4d,
|
||||
0xe2, 0xc3, 0x0a, 0xc8, 0xde, 0xce, 0x3e, 0xde, 0xea, 0x1e, 0x60, 0x45,
|
||||
0x51, 0x2e, 0x45, 0x9e, 0x14, 0x72, 0x52, 0x9c, 0xa4, 0x3b, 0x1d, 0x38,
|
||||
0x0d, 0x03, 0x04, 0x44, 0x6d, 0x9b, 0x50, 0xc4, 0xc2, 0x1f, 0x8e, 0x30,
|
||||
0x1c, 0x0a, 0xd1, 0xed, 0x1d, 0xa1, 0x36, 0x3f, 0x97, 0x19, 0x05, 0xb9,
|
||||
0x1f, 0x01, 0x72, 0x3d, 0xcb, 0x68, 0x24, 0xca, 0x7f, 0x34, 0xb6, 0x30,
|
||||
0x37, 0x27, 0x83, 0x7b, 0x67, 0x96, 0x5e, 0x15, 0x6d, 0x63, 0x47, 0x0f,
|
||||
0x03, 0x23, 0x3e, 0x6e, 0x9f, 0x5d, 0x4d, 0x8a, 0xc3, 0xf1, 0x11, 0x20,
|
||||
0x1f, 0xb4, 0xbc, 0x7c, 0xbe, 0x97, 0x0e, 0x9f, 0x9f, 0x7b, 0x67, 0x94,
|
||||
0x51, 0xe0, 0x76, 0x5d, 0xd3, 0x18, 0xc1, 0x48, 0x84, 0x53, 0x1d, 0xdd,
|
||||
0xe4, 0x78, 0xdc, 0x54, 0x17, 0x15, 0x7c, 0x04, 0xc8, 0xb5, 0x96, 0x86,
|
||||
0xfe, 0x61, 0x0e, 0x5c, 0x1c, 0xe4, 0xe1, 0xf9, 0x33, 0xaf, 0xcb, 0x78,
|
||||
0xa7, 0x2e, 0x74, 0x91, 0x9b, 0x91, 0x46, 0x41, 0x56, 0xe6, 0x75, 0x5d,
|
||||
0xa7, 0xfc, 0x30, 0x80, 0xb1, 0xaf, 0x67, 0x90, 0x97, 0xcf, 0xf7, 0x4d,
|
||||
0x0b, 0x8c, 0xd1, 0x70, 0x04, 0x7f, 0x38, 0xfa, 0xbe, 0xfd, 0xe6, 0x54,
|
||||
0x94, 0xd2, 0x33, 0xe8, 0x65, 0x60, 0x78, 0xe4, 0xba, 0xae, 0xd5, 0xbc,
|
||||
0xd9, 0xc1, 0x08, 0x5a, 0x36, 0xfb, 0x7b, 0x86, 0xf8, 0xd6, 0x92, 0x59,
|
||||
0x97, 0xed, 0xd3, 0xe1, 0x0b, 0xf2, 0xf8, 0x89, 0xb3, 0x48, 0x65, 0x33,
|
||||
0x33, 0xc3, 0x83, 0x43, 0x08, 0x46, 0x82, 0x21, 0xd2, 0x1d, 0x06, 0x1b,
|
||||
0xea, 0x66, 0x90, 0xeb, 0x71, 0x4f, 0x49, 0xb7, 0x60, 0x66, 0x15, 0x0d,
|
||||
0x67, 0x5a, 0xc8, 0xf0, 0xb8, 0x71, 0x5e, 0x27, 0x9b, 0x72, 0xd3, 0xab,
|
||||
0xac, 0x7f, 0x6a, 0x38, 0xcb, 0xa6, 0xaa, 0x22, 0xe6, 0x66, 0xa7, 0x4f,
|
||||
0x6a, 0x3b, 0x37, 0x1a, 0x64, 0xe7, 0xb9, 0x6e, 0xb2, 0x9d, 0x0e, 0xb6,
|
||||
0xd6, 0x96, 0xe3, 0x32, 0x92, 0x15, 0x86, 0x65, 0x2b, 0x1a, 0x3b, 0xba,
|
||||
0x51, 0xb6, 0xa2, 0xb6, 0x28, 0x8f, 0xac, 0x29, 0x80, 0x09, 0x85, 0xc3,
|
||||
0xf4, 0x0d, 0x0e, 0x53, 0x59, 0x52, 0xf8, 0x91, 0x84, 0xbc, 0x5f, 0x79,
|
||||
0x77, 0xc8, 0x87, 0x37, 0x6c, 0x4d, 0x09, 0x46, 0x87, 0x2f, 0xc4, 0x4f,
|
||||
0xdf, 0x69, 0xe3, 0x6f, 0x97, 0xcd, 0x21, 0xd5, 0x34, 0xa6, 0x3e, 0x1c,
|
||||
0x43, 0xb2, 0xb8, 0xaa, 0x8c, 0xa8, 0x6d, 0xd3, 0xd8, 0x7a, 0x9e, 0xb9,
|
||||
0x95, 0xa5, 0xb8, 0x5d, 0xc9, 0xce, 0x40, 0xaa, 0xcb, 0xc5, 0xa8, 0xdf,
|
||||
0x8f, 0x52, 0xf9, 0x48, 0x79, 0x1d, 0x2c, 0x80, 0xbe, 0x89, 0xcb, 0x5f,
|
||||
0xee, 0x3b, 0xa9, 0xb5, 0x9a, 0x5c, 0xdf, 0x1f, 0x0a, 0xeb, 0x07, 0x77,
|
||||
0x1f, 0x9b, 0x54, 0xef, 0x1d, 0x0b, 0xeb, 0xd6, 0xa1, 0x11, 0x7d, 0xde,
|
||||
0x3b, 0xaa, 0xfd, 0xe1, 0x48, 0x52, 0x9b, 0xd2, 0x4a, 0xbf, 0x71, 0xfc,
|
||||
0x1d, 0x1d, 0x89, 0x46, 0x27, 0xd1, 0x05, 0x82, 0x21, 0x7d, 0xa6, 0xa5,
|
||||
0xed, 0xba, 0xac, 0xf9, 0xa6, 0x95, 0x90, 0xd1, 0x88, 0x45, 0x65, 0x7a,
|
||||
0x2a, 0x4c, 0x11, 0x5c, 0x3f, 0xdd, 0xd2, 0xc5, 0xbf, 0xae, 0x9a, 0x9f,
|
||||
0x54, 0xf7, 0xc3, 0xa3, 0xa7, 0x29, 0x48, 0x71, 0xb0, 0xa2, 0x30, 0x07,
|
||||
0x5b, 0xc0, 0xa1, 0xf6, 0x0e, 0xa4, 0xb2, 0x59, 0x3b, 0xa7, 0x36, 0xa6,
|
||||
0xdb, 0x11, 0xac, 0x9c, 0x3f, 0x87, 0xd3, 0xed, 0xe7, 0xa9, 0x9f, 0x59,
|
||||
0x9d, 0x44, 0xeb, 0x4e, 0x4d, 0x21, 0x1c, 0x8d, 0x60, 0xdb, 0x0a, 0xc3,
|
||||
0x90, 0xfc, 0x67, 0x63, 0x1b, 0xbf, 0x69, 0xef, 0x27, 0x64, 0xab, 0xd8,
|
||||
0xf4, 0xd2, 0x60, 0xd7, 0xc7, 0x17, 0x91, 0xe3, 0x8a, 0x1d, 0xf7, 0xe3,
|
||||
0xef, 0x9c, 0xe3, 0x17, 0x67, 0x7b, 0xc9, 0x4e, 0x75, 0xf1, 0xcd, 0x85,
|
||||
0xd5, 0xdc, 0x5e, 0x98, 0x79, 0xf3, 0xab, 0xac, 0xe1, 0x48, 0x74, 0x4a,
|
||||
0x55, 0x15, 0xb2, 0x6d, 0xbc, 0x91, 0x28, 0xd9, 0xae, 0x09, 0x23, 0xfc,
|
||||
0x58, 0x43, 0x33, 0x9b, 0x67, 0x94, 0x32, 0x37, 0x67, 0xa2, 0x7f, 0x6d,
|
||||
0x5e, 0x36, 0x43, 0xfe, 0x20, 0x0d, 0x2d, 0xed, 0x2c, 0xac, 0x89, 0x01,
|
||||
0x60, 0x48, 0x49, 0xa6, 0xc7, 0x43, 0x24, 0x1a, 0x9d, 0x64, 0xc4, 0x0b,
|
||||
0x72, 0x73, 0x09, 0x04, 0x83, 0x64, 0xa4, 0xa7, 0xd1, 0x36, 0x1a, 0xa4,
|
||||
0x69, 0x38, 0xcc, 0x33, 0x1b, 0xea, 0x09, 0x5a, 0x0a, 0x1b, 0xf0, 0x98,
|
||||
0x12, 0xb4, 0x66, 0xcb, 0x8b, 0x87, 0x79, 0x7b, 0x34, 0xc2, 0xf7, 0x97,
|
||||
0xd5, 0xd0, 0x33, 0xea, 0xe7, 0xae, 0x17, 0x8e, 0xf0, 0xe4, 0x5d, 0x8b,
|
||||
0xd8, 0x5a, 0x99, 0x73, 0x73, 0x03, 0x32, 0x12, 0x89, 0x92, 0xee, 0x9c,
|
||||
0xbc, 0xbd, 0x5f, 0x9e, 0xee, 0x60, 0x55, 0xf1, 0x44, 0xfa, 0xe3, 0xdf,
|
||||
0x1a, 0x5b, 0x59, 0x92, 0x9f, 0x93, 0x04, 0xc6, 0x78, 0xc9, 0x49, 0x73,
|
||||
0x13, 0xcc, 0x48, 0xa7, 0x7f, 0xc8, 0x4b, 0x7e, 0x4e, 0x36, 0x00, 0x69,
|
||||
0xee, 0x54, 0x02, 0x81, 0x20, 0xce, 0xf7, 0xc4, 0x1f, 0x99, 0xe9, 0xe9,
|
||||
0xf8, 0xfc, 0x7e, 0x74, 0x9a, 0x07, 0x7f, 0xd4, 0x26, 0xc3, 0x65, 0x72,
|
||||
0xbc, 0x6f, 0x04, 0xbf, 0xd2, 0x3c, 0x30, 0xa3, 0x18, 0x97, 0x21, 0x19,
|
||||
0x0c, 0x8e, 0x71, 0xc6, 0x1f, 0x66, 0x43, 0x65, 0x11, 0x9f, 0x9f, 0x55,
|
||||
0x0c, 0xc0, 0x17, 0xeb, 0x2b, 0x89, 0xe8, 0x0f, 0x41, 0x1c, 0xd2, 0x13,
|
||||
0x1c, 0x23, 0x63, 0x0a, 0x57, 0xf4, 0xe5, 0x0b, 0xbd, 0xdc, 0x56, 0x18,
|
||||
0xe3, 0x46, 0x0d, 0x1c, 0xe9, 0x1f, 0x66, 0x5d, 0x59, 0x5e, 0xcc, 0xab,
|
||||
0xd2, 0x9a, 0xed, 0xa7, 0x3a, 0xd9, 0x7e, 0xaa, 0x13, 0x3b, 0xee, 0x7c,
|
||||
0x96, 0x15, 0xe4, 0xd1, 0x76, 0xa1, 0x73, 0xc2, 0x88, 0xa7, 0xb8, 0x18,
|
||||
0x1e, 0xf5, 0x4d, 0x0e, 0xe8, 0x0c, 0x09, 0x08, 0x34, 0x10, 0x88, 0x5a,
|
||||
0x78, 0x43, 0x21, 0x5e, 0xec, 0x18, 0x62, 0x5f, 0xe7, 0x20, 0x8b, 0x9f,
|
||||
0x39, 0xc0, 0x6f, 0xdb, 0x07, 0x70, 0x4a, 0x81, 0x00, 0x0c, 0x21, 0xe8,
|
||||
0x1d, 0xf1, 0xb1, 0xf8, 0x99, 0xb7, 0xd8, 0xb8, 0xf3, 0x18, 0x47, 0x07,
|
||||
0xfc, 0x37, 0x3f, 0x20, 0x1e, 0xc3, 0x24, 0xcb, 0x35, 0x19, 0x90, 0xd9,
|
||||
0x59, 0x69, 0x38, 0xa4, 0x48, 0xe4, 0xb5, 0xee, 0xad, 0x2e, 0x4e, 0xb4,
|
||||
0xf5, 0x06, 0x23, 0xbc, 0x70, 0xae, 0x8f, 0x1d, 0xe7, 0xfb, 0x39, 0xed,
|
||||
0x0d, 0x24, 0xea, 0x73, 0x33, 0x33, 0x12, 0xff, 0x3b, 0x4c, 0x13, 0xa7,
|
||||
0x39, 0x59, 0xf2, 0xa4, 0x90, 0x38, 0x1c, 0x26, 0x42, 0x08, 0xfe, 0xe2,
|
||||
0xd6, 0x99, 0xfc, 0x6e, 0xc3, 0xad, 0xbc, 0xb6, 0x65, 0x09, 0xbb, 0x3e,
|
||||
0xb1, 0x8c, 0xfb, 0xcb, 0xb3, 0xf8, 0x61, 0xc3, 0xb9, 0x84, 0x37, 0x27,
|
||||
0x80, 0x5c, 0x4f, 0x2a, 0xdf, 0x5e, 0x3c, 0x83, 0x40, 0x34, 0xca, 0xf6,
|
||||
0xa6, 0xee, 0x9b, 0xdf, 0x86, 0xdc, 0x5e, 0x9c, 0x33, 0x75, 0x5c, 0x72,
|
||||
0x5b, 0xfd, 0x84, 0x9a, 0x71, 0x3a, 0xf8, 0xd3, 0x99, 0x25, 0x89, 0xef,
|
||||
0xa5, 0x1e, 0x17, 0x2f, 0x7c, 0x6c, 0xd1, 0x24, 0x9a, 0x9a, 0xea, 0xca,
|
||||
0x89, 0x83, 0x97, 0x92, 0xd2, 0x92, 0xa2, 0xc9, 0x2e, 0xb2, 0x69, 0x90,
|
||||
0x95, 0x99, 0x81, 0xd2, 0x9a, 0x1d, 0x6d, 0x17, 0x39, 0xe8, 0x0d, 0xb1,
|
||||
0xa1, 0x2c, 0x17, 0x8d, 0x26, 0x60, 0xd9, 0xb8, 0x1d, 0x4e, 0x24, 0x60,
|
||||
0x4a, 0xc1, 0xc5, 0xe0, 0x18, 0xd2, 0x30, 0x59, 0x5d, 0x94, 0x85, 0x29,
|
||||
0x48, 0x30, 0xc8, 0xa4, 0xc0, 0x30, 0x14, 0x0a, 0xd2, 0xd1, 0xd1, 0x85,
|
||||
0xdf, 0xef, 0xc7, 0x30, 0x0c, 0x72, 0x73, 0x73, 0x28, 0x2b, 0x2b, 0x9b,
|
||||
0x34, 0x79, 0x67, 0x67, 0x27, 0x7d, 0x7d, 0x7d, 0xc9, 0x11, 0xa6, 0x10,
|
||||
0xa4, 0xa5, 0xa5, 0x51, 0x56, 0x56, 0x4e, 0x6a, 0x6a, 0xca, 0x24, 0x9a,
|
||||
0xf6, 0xf6, 0x76, 0xbc, 0x5e, 0xef, 0x94, 0x87, 0xa4, 0x94, 0xa2, 0xb8,
|
||||
0xb8, 0x98, 0xd2, 0xd2, 0x58, 0xf6, 0xb5, 0xbf, 0xbf, 0x9f, 0x8e, 0x8e,
|
||||
0x0e, 0x4a, 0x4b, 0x4b, 0x29, 0x2c, 0x2c, 0xbc, 0xd4, 0x45, 0xa7, 0xb9,
|
||||
0xb9, 0x99, 0x40, 0x20, 0x80, 0xd3, 0xe9, 0xa4, 0xbe, 0xbe, 0xfe, 0xaa,
|
||||
0xee, 0x28, 0x0e, 0x5c, 0x1c, 0xe6, 0xf8, 0xa0, 0x8f, 0x95, 0x85, 0x59,
|
||||
0xdc, 0x9a, 0x37, 0xd9, 0x66, 0x74, 0x07, 0xc2, 0x3c, 0xdd, 0x7a, 0x11,
|
||||
0x29, 0x04, 0x1b, 0xca, 0x73, 0xa9, 0xcb, 0xf2, 0x4c, 0xd0, 0x0d, 0x8c,
|
||||
0xa2, 0x92, 0x24, 0x42, 0x50, 0x90, 0xe2, 0x64, 0x79, 0x61, 0x26, 0xe5,
|
||||
0x69, 0xc9, 0xfb, 0x7d, 0x77, 0x60, 0x84, 0x47, 0xde, 0x3a, 0xc3, 0xbb,
|
||||
0xc3, 0x21, 0x9c, 0x02, 0x8a, 0xd3, 0xdd, 0xfc, 0xe4, 0x8e, 0x7a, 0xe6,
|
||||
0x67, 0xbb, 0xd9, 0xd1, 0xda, 0xc3, 0x3f, 0x34, 0xb4, 0x33, 0x10, 0xb6,
|
||||
0x89, 0xda, 0x36, 0x17, 0x02, 0x63, 0x6c, 0xa8, 0x28, 0x61, 0xd7, 0xc6,
|
||||
0x5b, 0x92, 0x25, 0xe4, 0xb5, 0xd7, 0x5e, 0xa7, 0xb1, 0xb1, 0x71, 0xd2,
|
||||
0x22, 0x0d, 0xc3, 0x60, 0xf3, 0xe6, 0x4d, 0x54, 0x55, 0x55, 0x01, 0xd0,
|
||||
0xd2, 0xd2, 0xca, 0x73, 0xcf, 0x3d, 0x87, 0x69, 0x5e, 0x5e, 0xb8, 0xe6,
|
||||
0xcd, 0x9b, 0xc7, 0x9d, 0x77, 0xfe, 0x49, 0xe2, 0xfb, 0xd1, 0xa3, 0x47,
|
||||
0xd9, 0xbb, 0xf7, 0x0d, 0x0c, 0x63, 0xea, 0x00, 0xcc, 0xb6, 0x6d, 0x56,
|
||||
0xac, 0x58, 0x4e, 0x69, 0x69, 0x29, 0xd1, 0x68, 0x94, 0x27, 0x9e, 0xf8,
|
||||
0x05, 0x4e, 0xa7, 0x13, 0x87, 0xc3, 0xc1, 0xb6, 0x6d, 0x9f, 0x26, 0x3b,
|
||||
0x3b, 0x3b, 0x01, 0xdc, 0xf1, 0xe3, 0x8d, 0xf4, 0xf4, 0xf4, 0x90, 0x99,
|
||||
0x99, 0x49, 0x7d, 0x7d, 0xfd, 0xb4, 0xc1, 0xd8, 0xdb, 0x33, 0xc4, 0xdd,
|
||||
0x3b, 0x8e, 0xe1, 0x36, 0x0d, 0xa2, 0x4a, 0x73, 0xf4, 0xfe, 0x15, 0xcc,
|
||||
0x8e, 0x1f, 0xf8, 0x78, 0x39, 0xef, 0x0f, 0xf1, 0xe8, 0xa1, 0xb3, 0xb8,
|
||||
0x0c, 0x41, 0x5e, 0x8a, 0x83, 0xba, 0x2c, 0x0f, 0xbb, 0x3b, 0x07, 0xf9,
|
||||
0xe4, 0xee, 0x46, 0xa6, 0xca, 0x67, 0x8c, 0xb3, 0xc2, 0x7d, 0xd5, 0x85,
|
||||
0x6c, 0x5f, 0x3b, 0xb1, 0x96, 0xfa, 0xbc, 0x4c, 0x76, 0x6e, 0x5e, 0xc6,
|
||||
0x38, 0xaf, 0x0b, 0x21, 0x12, 0x7d, 0x37, 0xcd, 0x2c, 0x66, 0xe3, 0x8c,
|
||||
0x62, 0x34, 0xfa, 0x92, 0x71, 0x26, 0x98, 0xca, 0xb4, 0x6d, 0x9b, 0x17,
|
||||
0x5e, 0x78, 0x91, 0xd6, 0xd6, 0x56, 0x84, 0x10, 0x54, 0x54, 0x94, 0x53,
|
||||
0x54, 0x54, 0x44, 0x24, 0x12, 0xa5, 0xad, 0xad, 0x8d, 0x40, 0x20, 0xc0,
|
||||
0xef, 0x7f, 0xff, 0x2c, 0x5b, 0xb7, 0xde, 0x47, 0x75, 0x75, 0x35, 0x3e,
|
||||
0x9f, 0x0f, 0x21, 0x04, 0x4a, 0x29, 0x66, 0xcc, 0x98, 0x41, 0x41, 0x41,
|
||||
0x01, 0x5a, 0x2b, 0x6c, 0x5b, 0xd1, 0xd3, 0xd3, 0x43, 0x57, 0x57, 0x17,
|
||||
0x8d, 0x8d, 0x8d, 0x8c, 0x8e, 0xfa, 0xb8, 0xf7, 0xde, 0x2d, 0x48, 0x29,
|
||||
0xf1, 0x7a, 0x87, 0x13, 0x34, 0x75, 0x75, 0x75, 0x64, 0x65, 0x65, 0x72,
|
||||
0x69, 0xc6, 0x46, 0x29, 0x4d, 0x69, 0x69, 0x4c, 0x12, 0xfd, 0x7e, 0x7f,
|
||||
0xa2, 0x2d, 0x1c, 0x0e, 0xb3, 0x67, 0xcf, 0x6b, 0x3c, 0xf0, 0xc0, 0xd6,
|
||||
0x0f, 0xac, 0xc2, 0xbe, 0xf6, 0xe6, 0x69, 0x52, 0xe2, 0xa9, 0x11, 0x01,
|
||||
0xfc, 0xd5, 0xfe, 0x33, 0xec, 0xdc, 0x98, 0xac, 0x9e, 0xf4, 0x7b, 0xfe,
|
||||
0x02, 0x0c, 0x86, 0xa3, 0x68, 0x1d, 0x33, 0xf8, 0x6b, 0x8b, 0x73, 0x58,
|
||||
0x51, 0x98, 0x89, 0xa5, 0x35, 0x96, 0xd2, 0x9c, 0x1c, 0xf2, 0xb1, 0xab,
|
||||
0x63, 0x90, 0xff, 0x6e, 0xe9, 0xe1, 0x1d, 0xaf, 0x8f, 0x5d, 0x1b, 0x97,
|
||||
0x90, 0x11, 0xf7, 0xec, 0x44, 0x1c, 0x88, 0x29, 0xf3, 0x55, 0x22, 0x19,
|
||||
0x84, 0x24, 0xd5, 0x37, 0x3a, 0x3a, 0x4a, 0x47, 0x47, 0x07, 0x86, 0x61,
|
||||
0x24, 0x38, 0x7b, 0x7c, 0xa0, 0x45, 0x8b, 0x16, 0xf2, 0xd4, 0x53, 0xbf,
|
||||
0x46, 0x6b, 0xcd, 0xab, 0xaf, 0xee, 0xe6, 0xcb, 0x5f, 0xfe, 0x52, 0xa2,
|
||||
0x4d, 0x29, 0x45, 0x4d, 0xcd, 0x4c, 0xe6, 0xcd, 0x9b, 0x97, 0xc4, 0xe9,
|
||||
0x3b, 0x77, 0xbe, 0x4c, 0x6b, 0x6b, 0x2b, 0xed, 0xed, 0xed, 0x84, 0xc3,
|
||||
0x61, 0x52, 0x53, 0x53, 0x13, 0x34, 0xb6, 0x6d, 0x53, 0x5f, 0x3f, 0x97,
|
||||
0xca, 0xca, 0xca, 0xcb, 0x27, 0xd7, 0x2e, 0xd9, 0x84, 0x94, 0x92, 0xf3,
|
||||
0xe7, 0xcf, 0x71, 0xe2, 0xc4, 0x49, 0x6e, 0xb9, 0x65, 0xfe, 0x35, 0x83,
|
||||
0xb1, 0xb7, 0xdb, 0xcb, 0x05, 0x7f, 0x08, 0x43, 0x08, 0x6c, 0xad, 0x31,
|
||||
0xa5, 0xe0, 0x8d, 0x8b, 0x5e, 0xce, 0x8e, 0x04, 0xa9, 0xcd, 0x74, 0x5f,
|
||||
0x39, 0xd9, 0x17, 0x3f, 0x38, 0x4b, 0x69, 0xee, 0x2c, 0xcb, 0xe1, 0xeb,
|
||||
0xf3, 0x93, 0xd7, 0xfe, 0x9d, 0xc3, 0x67, 0xf9, 0xf1, 0xc9, 0x0b, 0x9c,
|
||||
0x1d, 0x0e, 0x72, 0xa0, 0x77, 0x98, 0x7b, 0xca, 0xf3, 0x3e, 0x58, 0xfa,
|
||||
0x5d, 0x29, 0x85, 0x6d, 0xdb, 0x00, 0x14, 0x16, 0x16, 0x24, 0x1d, 0x48,
|
||||
0x76, 0x76, 0x36, 0x5a, 0x6b, 0x84, 0x10, 0x04, 0x83, 0xc1, 0xe9, 0xa4,
|
||||
0x61, 0x88, 0x46, 0x63, 0xa9, 0xeb, 0x71, 0x8f, 0x63, 0x2a, 0xee, 0xb8,
|
||||
0x9a, 0x62, 0x18, 0x06, 0xfb, 0xf7, 0xef, 0x23, 0x18, 0x0c, 0x5d, 0x5b,
|
||||
0x6a, 0x08, 0x78, 0xaa, 0xb9, 0x1b, 0x43, 0x08, 0x94, 0xd6, 0x3c, 0xb2,
|
||||
0xa0, 0x8a, 0x90, 0x65, 0xe3, 0x90, 0x82, 0xff, 0x6a, 0xba, 0xf0, 0x81,
|
||||
0x25, 0x2f, 0x60, 0xd9, 0x89, 0x7d, 0xa5, 0x1a, 0x1f, 0xdc, 0x69, 0x35,
|
||||
0x93, 0x8d, 0xab, 0x9e, 0x16, 0xe7, 0x4e, 0x78, 0x16, 0x31, 0xf2, 0xa1,
|
||||
0xa1, 0x21, 0x4e, 0x9d, 0x3a, 0x4d, 0x53, 0x53, 0x13, 0x81, 0x40, 0x80,
|
||||
0x68, 0x34, 0xca, 0xaa, 0x55, 0xb7, 0x93, 0x92, 0x92, 0x32, 0x69, 0x0c,
|
||||
0x9f, 0x2f, 0xc0, 0xe8, 0xe8, 0x08, 0x4a, 0x69, 0xb4, 0x56, 0x64, 0x66,
|
||||
0x66, 0x5d, 0x36, 0x29, 0xe7, 0x74, 0x3a, 0xb1, 0x2c, 0x8b, 0xb1, 0xb1,
|
||||
0x30, 0x47, 0x8e, 0x1c, 0x61, 0xcd, 0x9a, 0x3b, 0xae, 0xfe, 0xc0, 0xa2,
|
||||
0x36, 0x7b, 0xba, 0x06, 0x01, 0x58, 0x55, 0x9c, 0xcd, 0xb7, 0x17, 0xcd,
|
||||
0xe4, 0x7f, 0xdb, 0xfb, 0x38, 0xe7, 0x0b, 0xf1, 0x87, 0xae, 0x21, 0x7c,
|
||||
0x51, 0x8b, 0x74, 0xc7, 0xd5, 0x3b, 0x9b, 0xaf, 0x74, 0x0c, 0xf0, 0xfd,
|
||||
0xb7, 0xdb, 0x38, 0x39, 0xe4, 0xc7, 0xd2, 0x9a, 0xf5, 0x45, 0x39, 0xac,
|
||||
0x29, 0xc9, 0xb9, 0x71, 0xd9, 0x5e, 0xd3, 0x34, 0xd9, 0xbd, 0x7b, 0x0f,
|
||||
0xcf, 0x3f, 0xff, 0x02, 0x5a, 0x6b, 0xa4, 0x94, 0x78, 0x3c, 0x1e, 0x0a,
|
||||
0x0b, 0x0b, 0x58, 0xb1, 0xe2, 0x36, 0xaa, 0xab, 0xab, 0xa6, 0xa4, 0x79,
|
||||
0xe9, 0xa5, 0x9d, 0xd8, 0xb6, 0x8d, 0x10, 0x82, 0x50, 0x28, 0xc4, 0x37,
|
||||
0xbe, 0xf1, 0x08, 0x69, 0x69, 0x9e, 0x29, 0xe7, 0x28, 0x2c, 0x2c, 0xc4,
|
||||
0xb2, 0xa2, 0xf4, 0xf4, 0x5c, 0xe4, 0xd0, 0xa1, 0x43, 0xd4, 0xd6, 0xd6,
|
||||
0x5c, 0x75, 0x46, 0xf5, 0x77, 0x2d, 0x17, 0xe9, 0x0e, 0x86, 0xf1, 0x98,
|
||||
0x06, 0x5b, 0xab, 0x0b, 0x11, 0x02, 0x3e, 0x5b, 0x5b, 0xc2, 0x3f, 0xbc,
|
||||
0xdd, 0xca, 0x69, 0x6f, 0x90, 0xe3, 0x03, 0x3e, 0x56, 0x17, 0x67, 0x4f,
|
||||
0xef, 0xae, 0x02, 0xc1, 0x33, 0x6d, 0xbd, 0x3c, 0xfc, 0x66, 0x13, 0xde,
|
||||
0xb0, 0x85, 0x43, 0x0a, 0x72, 0x53, 0x1c, 0x7c, 0x69, 0x4e, 0x19, 0x3f,
|
||||
0x5c, 0x31, 0xeb, 0xc6, 0xa7, 0xdf, 0x23, 0x91, 0x08, 0x85, 0x85, 0x05,
|
||||
0x14, 0x17, 0x17, 0x53, 0x55, 0x55, 0x4d, 0x7e, 0x7e, 0x1e, 0x59, 0x59,
|
||||
0x97, 0xe7, 0x78, 0xa5, 0x14, 0x95, 0x95, 0xe5, 0xa4, 0xa6, 0xba, 0x01,
|
||||
0x4d, 0x24, 0x12, 0xc1, 0x71, 0x05, 0xee, 0x34, 0x4d, 0x93, 0x75, 0xeb,
|
||||
0xd6, 0xf2, 0xb3, 0x9f, 0x6d, 0xc7, 0xe5, 0x72, 0xb1, 0x63, 0xc7, 0x0e,
|
||||
0xdc, 0x6e, 0xcf, 0x55, 0xad, 0xf1, 0x9b, 0x87, 0x9a, 0x71, 0x9b, 0x06,
|
||||
0x52, 0x08, 0xb6, 0xd5, 0xc6, 0x82, 0xc0, 0xad, 0x33, 0x0a, 0x78, 0xac,
|
||||
0xb1, 0x1d, 0x5b, 0x6b, 0xfe, 0xe6, 0xf0, 0x59, 0xde, 0xf8, 0xc4, 0xb2,
|
||||
0x69, 0x8d, 0xe5, 0x34, 0x04, 0x0f, 0xbd, 0xd1, 0x84, 0xad, 0x35, 0x45,
|
||||
0x6e, 0x27, 0xdf, 0x5b, 0x5a, 0xcb, 0x1d, 0x25, 0xd9, 0x54, 0xa7, 0xa7,
|
||||
0x5e, 0xb7, 0xf8, 0xc9, 0xbc, 0x56, 0xfd, 0x6e, 0x59, 0x16, 0x9b, 0x36,
|
||||
0x6d, 0xa4, 0xae, 0xae, 0x6e, 0xda, 0x34, 0xb6, 0x6d, 0xb3, 0x72, 0xe5,
|
||||
0x4a, 0xca, 0xcb, 0xcb, 0xa7, 0x7b, 0x35, 0x40, 0x4e, 0x4e, 0x0e, 0xb7,
|
||||
0xdf, 0xbe, 0x92, 0xc3, 0x87, 0x8f, 0x10, 0x0c, 0x86, 0x08, 0x04, 0x82,
|
||||
0xd3, 0x8e, 0x3d, 0x9e, 0x38, 0xdd, 0xc5, 0x98, 0xad, 0x30, 0xa5, 0xc0,
|
||||
0xed, 0x30, 0x78, 0x68, 0x6f, 0x13, 0x11, 0x15, 0xfb, 0x6e, 0x6b, 0x8d,
|
||||
0x21, 0x04, 0x07, 0xfb, 0x46, 0x38, 0xd2, 0x37, 0xc2, 0xd2, 0x82, 0xf7,
|
||||
0xbf, 0x1b, 0xb7, 0x94, 0xe6, 0xcf, 0xea, 0x4a, 0xf8, 0x59, 0x53, 0x17,
|
||||
0xde, 0x70, 0x94, 0x53, 0x5e, 0x3f, 0x5f, 0x98, 0x5d, 0x72, 0x5d, 0x03,
|
||||
0xda, 0xf7, 0x95, 0xff, 0xf1, 0xcd, 0x4f, 0x75, 0xb1, 0x68, 0x59, 0xd6,
|
||||
0x55, 0x4f, 0xa8, 0x94, 0xba, 0x6a, 0x9a, 0x65, 0xcb, 0x96, 0x91, 0x99,
|
||||
0x99, 0x79, 0x59, 0x5b, 0x36, 0xa5, 0xf4, 0x2a, 0xc5, 0x6f, 0x5b, 0x2f,
|
||||
0xe2, 0x90, 0x02, 0x4b, 0x69, 0x2e, 0x8c, 0x86, 0xf8, 0xe5, 0xe9, 0x4e,
|
||||
0x7e, 0xd3, 0xdc, 0xcd, 0x93, 0xa7, 0xbb, 0xe8, 0x0f, 0x45, 0xb0, 0xb5,
|
||||
0xc6, 0x63, 0x1a, 0x7c, 0xbf, 0xa1, 0x6d, 0x7a, 0x0c, 0xa5, 0x35, 0x8f,
|
||||
0xad, 0x98, 0xcd, 0x9a, 0x92, 0x6c, 0x94, 0x86, 0x1f, 0x9f, 0xbc, 0xc0,
|
||||
0xd7, 0xf6, 0x9d, 0xba, 0xae, 0x80, 0x98, 0x2e, 0x97, 0x0b, 0xb7, 0xdb,
|
||||
0x4d, 0x28, 0x14, 0x62, 0xff, 0xfe, 0xfd, 0x54, 0x54, 0x54, 0x90, 0x91,
|
||||
0x91, 0x81, 0x52, 0x8a, 0x86, 0x86, 0x06, 0x94, 0x52, 0x28, 0xa5, 0xa8,
|
||||
0xad, 0xad, 0xbd, 0x2e, 0x13, 0xda, 0xb6, 0x9d, 0x18, 0x33, 0x89, 0x33,
|
||||
0xa4, 0xbc, 0xa2, 0x71, 0x5f, 0xbe, 0x7c, 0x39, 0xbb, 0x76, 0xed, 0x9a,
|
||||
0xb6, 0x0d, 0xe9, 0x0a, 0x84, 0x69, 0x18, 0x18, 0x45, 0x03, 0x1f, 0xab,
|
||||
0xc8, 0xe3, 0x89, 0x75, 0xf3, 0xb0, 0x2f, 0xe1, 0x29, 0xa7, 0x14, 0xdc,
|
||||
0xf3, 0xd2, 0x31, 0x1a, 0x07, 0x7d, 0x34, 0x0e, 0xf8, 0xe8, 0x0c, 0x8c,
|
||||
0x31, 0x5d, 0x05, 0xf1, 0xfc, 0x3d, 0x0b, 0xb9, 0xfb, 0xa5, 0x63, 0x1c,
|
||||
0xee, 0x1d, 0xe1, 0xc9, 0xe6, 0x6e, 0x66, 0x65, 0x7a, 0xf8, 0xfa, 0xfc,
|
||||
0x8a, 0xeb, 0x03, 0x48, 0x5a, 0x5a, 0x1a, 0x6b, 0xd6, 0xac, 0x61, 0xd7,
|
||||
0xae, 0x5d, 0x04, 0x83, 0x21, 0xb6, 0x6f, 0x7f, 0x9c, 0x9c, 0x9c, 0x1c,
|
||||
0xa2, 0xd1, 0x28, 0x3e, 0x5f, 0x2c, 0xab, 0x59, 0x5a, 0x5a, 0xc2, 0x86,
|
||||
0x0d, 0x77, 0x5e, 0xf3, 0x24, 0x4a, 0x29, 0xb4, 0xd6, 0x98, 0xa6, 0xc9,
|
||||
0x9e, 0x3d, 0x7f, 0x98, 0x14, 0xe5, 0xdb, 0xb6, 0xcd, 0xad, 0xb7, 0x2e,
|
||||
0x60, 0xc9, 0x92, 0x25, 0x57, 0x88, 0xfe, 0xeb, 0x69, 0x69, 0x69, 0xa5,
|
||||
0xa5, 0xe5, 0x2c, 0xa6, 0x69, 0xbe, 0xaf, 0xa4, 0xfd, 0xe2, 0x74, 0x17,
|
||||
0xc1, 0xa8, 0x4d, 0x8a, 0x69, 0xf0, 0x99, 0xda, 0x62, 0x3c, 0x53, 0x5c,
|
||||
0xd3, 0x7e, 0xb1, 0xae, 0x94, 0xaf, 0xef, 0x3b, 0x4d, 0xdf, 0x58, 0x84,
|
||||
0xd7, 0xbb, 0xbc, 0xcc, 0xca, 0x72, 0x27, 0x45, 0xe0, 0x57, 0x04, 0xe5,
|
||||
0xee, 0x85, 0xdc, 0xb3, 0xf3, 0x18, 0x6f, 0xf7, 0x8f, 0xf2, 0xd7, 0x07,
|
||||
0xcf, 0x20, 0x05, 0x7c, 0x6d, 0x5e, 0xc5, 0xf5, 0x51, 0x59, 0x75, 0x75,
|
||||
0xb3, 0xf9, 0xea, 0x57, 0x1f, 0x62, 0xe9, 0xd2, 0x25, 0xa4, 0xa4, 0xa4,
|
||||
0x30, 0x32, 0x32, 0x42, 0x30, 0x18, 0xa4, 0x20, 0xbf, 0x80, 0xcd, 0x9b,
|
||||
0x37, 0xb3, 0x6d, 0xdb, 0xb6, 0x84, 0x0b, 0xab, 0xb5, 0x4e, 0xfa, 0x4c,
|
||||
0xa7, 0xac, 0x5e, 0xbd, 0x8a, 0xf4, 0xf4, 0x74, 0xb4, 0xd6, 0xf8, 0xfd,
|
||||
0x7e, 0x86, 0x87, 0x87, 0x27, 0x7d, 0xc6, 0x42, 0xa1, 0xf8, 0xf8, 0x5c,
|
||||
0x76, 0xfc, 0x4d, 0x9b, 0x3e, 0x4e, 0x41, 0x41, 0x21, 0x4a, 0x69, 0xe6,
|
||||
0xce, 0x9d, 0x73, 0x45, 0xf5, 0xf5, 0x83, 0x86, 0x76, 0x4c, 0x29, 0x71,
|
||||
0x9b, 0x92, 0x75, 0xa5, 0x53, 0xbb, 0xa3, 0xab, 0x8b, 0xb3, 0xc9, 0x70,
|
||||
0x9a, 0x18, 0x42, 0xf2, 0xdd, 0xa3, 0x2d, 0xa4, 0x1a, 0x12, 0xa5, 0x35,
|
||||
0x4a, 0x5f, 0x1a, 0xb5, 0x6b, 0xb4, 0x26, 0xa9, 0x0e, 0x20, 0xc5, 0x94,
|
||||
0xbc, 0xbe, 0x65, 0x29, 0x15, 0x69, 0x29, 0xb8, 0xa4, 0xc1, 0x77, 0x8e,
|
||||
0xb4, 0xf0, 0x54, 0x73, 0xf7, 0x07, 0x06, 0x44, 0x04, 0x7c, 0x83, 0xda,
|
||||
0xb6, 0x2d, 0x94, 0xb6, 0x30, 0xe2, 0x1b, 0x0c, 0xf8, 0x7d, 0x18, 0x12,
|
||||
0x4c, 0xd3, 0x41, 0x24, 0x12, 0xc6, 0xb2, 0x22, 0x68, 0xad, 0xd0, 0x4a,
|
||||
0x13, 0xb5, 0xa2, 0xd8, 0xd1, 0x28, 0x5a, 0xdb, 0x48, 0x19, 0x7b, 0x07,
|
||||
0x8b, 0x56, 0x09, 0x29, 0x40, 0xab, 0x58, 0xdf, 0xd8, 0xc9, 0xc6, 0x0f,
|
||||
0x55, 0xe3, 0x30, 0x4d, 0x82, 0xa1, 0x20, 0xca, 0xb6, 0xe3, 0xdb, 0x14,
|
||||
0xb1, 0xbf, 0xf1, 0x76, 0x29, 0x24, 0x86, 0x61, 0xa0, 0xb4, 0xc6, 0x8a,
|
||||
0x07, 0x97, 0x42, 0x08, 0x4c, 0xc3, 0x84, 0xf1, 0xb4, 0x9e, 0x10, 0x18,
|
||||
0x86, 0x41, 0x34, 0x12, 0xa1, 0x7c, 0xc6, 0x2d, 0xe4, 0x16, 0x4f, 0xed,
|
||||
0x6a, 0xaa, 0x78, 0xaa, 0xc3, 0x52, 0x0a, 0x43, 0x88, 0x49, 0xaf, 0x49,
|
||||
0xde, 0x6b, 0x17, 0xb4, 0x86, 0x90, 0xad, 0x48, 0x77, 0x18, 0x58, 0xf1,
|
||||
0x58, 0xcc, 0x8c, 0x67, 0x60, 0xc7, 0x01, 0xba, 0xb4, 0x6e, 0x2a, 0x63,
|
||||
0xaf, 0xb4, 0x66, 0xcc, 0x56, 0x89, 0xd4, 0xc9, 0x35, 0xab, 0x2c, 0xad,
|
||||
0x35, 0x1a, 0x85, 0x56, 0x8a, 0xa8, 0x6d, 0x61, 0x2b, 0x1b, 0x69, 0x08,
|
||||
0x94, 0x6d, 0x13, 0x0a, 0x85, 0xd0, 0xda, 0x46, 0x29, 0x3b, 0x01, 0x88,
|
||||
0x40, 0x23, 0x24, 0x08, 0x25, 0x50, 0xda, 0x42, 0xdb, 0x3a, 0x0e, 0x88,
|
||||
0x1d, 0xe7, 0x6a, 0x95, 0x00, 0x05, 0x0d, 0x4a, 0x2b, 0x34, 0x60, 0x45,
|
||||
0x42, 0x71, 0x90, 0x6c, 0x40, 0xa1, 0x11, 0x08, 0x4d, 0xec, 0xb0, 0x75,
|
||||
0x6c, 0xe3, 0xb6, 0x15, 0x0b, 0xad, 0xa5, 0x14, 0x38, 0xa4, 0x40, 0x6b,
|
||||
0x8d, 0x1d, 0x89, 0xa0, 0xb1, 0x27, 0x0e, 0x30, 0xae, 0x54, 0x0c, 0xe3,
|
||||
0xf2, 0xef, 0xa0, 0x9a, 0x87, 0x03, 0xbc, 0xd5, 0x3b, 0xcc, 0x67, 0x67,
|
||||
0x95, 0xd0, 0x19, 0x18, 0x23, 0x64, 0xd9, 0xcc, 0xcd, 0x4e, 0xa3, 0x71,
|
||||
0xd0, 0xc7, 0x81, 0x8b, 0xc3, 0x6c, 0xae, 0xcc, 0xe7, 0xc5, 0xf3, 0xfd,
|
||||
0x49, 0xa0, 0x6c, 0xab, 0x2d, 0xe6, 0xed, 0x81, 0x00, 0x07, 0x2e, 0x0e,
|
||||
0x23, 0x85, 0x60, 0xcc, 0xb2, 0x79, 0x78, 0x5e, 0x05, 0xbe, 0xa8, 0xcd,
|
||||
0x33, 0xad, 0x17, 0xb1, 0xb5, 0xa6, 0x30, 0xd5, 0xc5, 0x03, 0x33, 0x63,
|
||||
0xd9, 0x67, 0x5f, 0xd4, 0xe2, 0xe9, 0xd6, 0x5e, 0xc6, 0xec, 0x18, 0xf3,
|
||||
0x95, 0xa7, 0xa7, 0xb0, 0xa5, 0xb2, 0x00, 0x0d, 0x3c, 0x7f, 0xae, 0x97,
|
||||
0x8d, 0x15, 0x05, 0x49, 0x69, 0xf5, 0x86, 0x81, 0x51, 0x8e, 0xf4, 0x8d,
|
||||
0xf0, 0xa9, 0xda, 0x62, 0x32, 0xe2, 0xae, 0xfe, 0xab, 0x9d, 0x83, 0x34,
|
||||
0x0f, 0x07, 0x10, 0x42, 0xa0, 0xd1, 0x3c, 0x5c, 0x5f, 0x81, 0xe9, 0x49,
|
||||
0xff, 0xe3, 0xbe, 0xe6, 0xbe, 0x96, 0xf2, 0x64, 0xdb, 0x20, 0x0f, 0xbe,
|
||||
0xf6, 0x2e, 0xa6, 0x10, 0x68, 0x31, 0x2e, 0x4d, 0xc9, 0xf9, 0x10, 0xeb,
|
||||
0x74, 0x2b, 0xa8, 0xe6, 0x09, 0xce, 0x32, 0x24, 0xed, 0x9f, 0x59, 0x4d,
|
||||
0x99, 0x27, 0x85, 0xc3, 0x7d, 0x23, 0x7c, 0xfb, 0x48, 0x0b, 0x0f, 0xd6,
|
||||
0x95, 0x72, 0xf7, 0x8e, 0xa3, 0x8c, 0x46, 0x2d, 0x5a, 0x3e, 0x7d, 0x07,
|
||||
0x7b, 0xbb, 0x87, 0x78, 0xe4, 0x60, 0x33, 0x1b, 0x2b, 0xf2, 0x69, 0x19,
|
||||
0x09, 0xf2, 0x6a, 0xd7, 0x20, 0x29, 0x52, 0xb2, 0xb2, 0x28, 0x0b, 0xa7,
|
||||
0x94, 0x2c, 0x7f, 0xf6, 0x20, 0xf7, 0x56, 0x15, 0x52, 0xea, 0x71, 0x11,
|
||||
0xb0, 0x6c, 0x94, 0xd6, 0xfc, 0xf3, 0xf1, 0x73, 0xfc, 0xaa, 0xb9, 0x8b,
|
||||
0xcf, 0xcf, 0x2a, 0xe1, 0xad, 0xde, 0x61, 0xbe, 0x79, 0xf0, 0x0c, 0x87,
|
||||
0xef, 0xbf, 0x8d, 0x57, 0x3a, 0x06, 0x78, 0xf4, 0x50, 0x33, 0x5f, 0x98,
|
||||
0x55, 0x42, 0x44, 0xa9, 0xc4, 0x0a, 0xf7, 0xf5, 0x78, 0xb9, 0x6f, 0xc7,
|
||||
0x31, 0xd6, 0x57, 0x14, 0xb0, 0x67, 0x4b, 0xcc, 0x26, 0x3e, 0xb4, 0xb7,
|
||||
0x89, 0xc6, 0x21, 0x1f, 0x8b, 0xf3, 0x33, 0xf8, 0xd6, 0xaf, 0xdf, 0xe4,
|
||||
0xdf, 0x57, 0xd5, 0xf1, 0xc9, 0x9a, 0x62, 0xee, 0x7a, 0xee, 0x30, 0x0f,
|
||||
0xcc, 0x2a, 0xa1, 0xd4, 0xe3, 0xfa, 0xff, 0x73, 0x41, 0x35, 0xd4, 0x77,
|
||||
0x1e, 0xad, 0xed, 0x84, 0x29, 0x95, 0x02, 0x22, 0xfd, 0x7d, 0x3c, 0x98,
|
||||
0x37, 0xc6, 0x54, 0x1a, 0x42, 0x03, 0xa6, 0xe1, 0x20, 0x33, 0xaf, 0x2a,
|
||||
0x26, 0x85, 0xf1, 0x92, 0xe3, 0x72, 0x90, 0xeb, 0x72, 0xc6, 0xf2, 0x5f,
|
||||
0x42, 0xc4, 0x32, 0xbb, 0x1a, 0xdc, 0xa6, 0x41, 0x87, 0x7f, 0x8c, 0xfb,
|
||||
0x77, 0x35, 0xf0, 0xe9, 0x9a, 0x12, 0x52, 0x0d, 0x49, 0x45, 0x7a, 0x0a,
|
||||
0xff, 0xb2, 0x72, 0x36, 0x5f, 0x79, 0xa3, 0x89, 0x2c, 0x97, 0x83, 0x7f,
|
||||
0x5c, 0x1e, 0xf3, 0x20, 0x53, 0x0d, 0x83, 0x47, 0x17, 0x56, 0xb3, 0x38,
|
||||
0x7f, 0xe2, 0x86, 0xd0, 0x90, 0x82, 0xca, 0xf4, 0x54, 0x7e, 0xb0, 0x62,
|
||||
0x16, 0x27, 0x87, 0x7c, 0x2c, 0x79, 0xe6, 0x20, 0x61, 0x5b, 0x21, 0x04,
|
||||
0xcc, 0xca, 0xf4, 0xf0, 0xd8, 0x6d, 0xb3, 0xdf, 0x93, 0x55, 0x3e, 0xc5,
|
||||
0xdd, 0xd5, 0x85, 0x1c, 0xea, 0x1b, 0xe1, 0xc4, 0xa0, 0x8f, 0x5b, 0x72,
|
||||
0xd3, 0x79, 0xb6, 0xbd, 0x97, 0x03, 0x5b, 0x97, 0x53, 0x93, 0xe1, 0xe6,
|
||||
0xbb, 0x8b, 0x67, 0x22, 0x85, 0xc0, 0x56, 0x1a, 0xa7, 0xcb, 0x9c, 0x34,
|
||||
0xdf, 0x0d, 0x05, 0x44, 0x6b, 0xcd, 0xbb, 0x47, 0x77, 0x20, 0x44, 0xb2,
|
||||
0x8e, 0x5f, 0xec, 0x30, 0x58, 0x96, 0x26, 0x2e, 0xe3, 0xb1, 0xd9, 0x94,
|
||||
0x54, 0x2d, 0x20, 0xbf, 0xb6, 0x66, 0x7a, 0x1e, 0x1e, 0xf0, 0xb9, 0x59,
|
||||
0x25, 0xfc, 0xbe, 0xbd, 0x37, 0x61, 0x23, 0x2f, 0x05, 0x57, 0x5d, 0xe2,
|
||||
0x38, 0x08, 0x01, 0x9f, 0xd9, 0x73, 0x82, 0x2c, 0xa7, 0xc9, 0xcf, 0xd7,
|
||||
0xcd, 0x63, 0x6e, 0x76, 0x5a, 0xa2, 0x6d, 0xdb, 0xee, 0x13, 0x1c, 0xe8,
|
||||
0x1d, 0xe6, 0xb7, 0x1b, 0x16, 0x50, 0xe2, 0x71, 0x21, 0x85, 0xa0, 0xc9,
|
||||
0xeb, 0x67, 0xc1, 0xd3, 0x07, 0xf8, 0xca, 0xdc, 0x72, 0x1e, 0xaa, 0x2f,
|
||||
0xe7, 0xad, 0xde, 0x61, 0xce, 0xf9, 0x43, 0x3c, 0xbe, 0xb6, 0x9e, 0x4f,
|
||||
0xed, 0x3e, 0xc1, 0x13, 0x67, 0xba, 0xf8, 0xd1, 0xca, 0x3a, 0x10, 0x24,
|
||||
0xe6, 0xce, 0x4f, 0x8d, 0x31, 0x4d, 0xc4, 0x56, 0x58, 0x4a, 0xf3, 0xd9,
|
||||
0x3d, 0x27, 0xc8, 0x74, 0x99, 0x3c, 0x7b, 0xd7, 0x42, 0x4a, 0x3c, 0xae,
|
||||
0x1b, 0x0d, 0x88, 0xcd, 0x82, 0xdb, 0x92, 0xef, 0x3a, 0x1c, 0x52, 0xf2,
|
||||
0xc0, 0x2b, 0xc7, 0x71, 0x3b, 0x8c, 0xcb, 0x82, 0x98, 0xda, 0x66, 0xe2,
|
||||
0xe8, 0x7a, 0xe7, 0x12, 0x23, 0xae, 0xb9, 0xaf, 0xba, 0x90, 0x4f, 0x54,
|
||||
0x4d, 0xfd, 0xf3, 0x80, 0x5b, 0xf3, 0x32, 0x58, 0x5a, 0x90, 0xc9, 0xc3,
|
||||
0x6f, 0x9e, 0x22, 0xd5, 0x94, 0x57, 0x58, 0x0f, 0xfc, 0x74, 0xf5, 0x5c,
|
||||
0xee, 0x28, 0xc9, 0x9e, 0x04, 0xde, 0x2d, 0x39, 0x69, 0x1c, 0xeb, 0x1f,
|
||||
0x65, 0x6d, 0x49, 0x76, 0x62, 0xce, 0x9a, 0x4c, 0x37, 0x87, 0xb7, 0xae,
|
||||
0x20, 0x1a, 0x77, 0xc1, 0x7f, 0x7e, 0xaa, 0x0b, 0x0d, 0xfc, 0xf9, 0xde,
|
||||
0x26, 0xc6, 0x6c, 0xc5, 0x73, 0xe7, 0xfa, 0xf8, 0xd1, 0xca, 0x3a, 0x2c,
|
||||
0xa5, 0x13, 0xf6, 0x64, 0x77, 0xe7, 0x20, 0x11, 0x5b, 0x71, 0x77, 0x79,
|
||||
0x1e, 0x86, 0x10, 0xfc, 0xe4, 0x3d, 0xf3, 0xdd, 0x50, 0x40, 0x84, 0x30,
|
||||
0x48, 0xcf, 0x2a, 0x4c, 0xca, 0x0a, 0x9c, 0x1c, 0xf0, 0xf1, 0x87, 0x61,
|
||||
0x41, 0x86, 0xf3, 0xf2, 0x07, 0x27, 0x7c, 0x01, 0x60, 0xe2, 0x11, 0x42,
|
||||
0x54, 0x29, 0x3e, 0x57, 0x5b, 0x9a, 0xc4, 0xe9, 0x46, 0xec, 0x16, 0x28,
|
||||
0xa6, 0x02, 0x6d, 0xc5, 0x57, 0xeb, 0x2b, 0xf9, 0xd5, 0x99, 0x6e, 0xda,
|
||||
0x46, 0x43, 0x97, 0x5c, 0xc3, 0xc6, 0xae, 0x62, 0xc7, 0x4b, 0x9a, 0xc3,
|
||||
0xe0, 0xa9, 0xb3, 0x3d, 0xbc, 0xde, 0x3d, 0x44, 0xd0, 0xb2, 0xf9, 0xde,
|
||||
0xb2, 0xda, 0x78, 0x1f, 0x78, 0x74, 0xd1, 0x0c, 0x0e, 0xf4, 0x8d, 0x70,
|
||||
0xff, 0x2b, 0xc7, 0x79, 0xe9, 0xe3, 0x8b, 0x11, 0x62, 0xc2, 0xeb, 0x72,
|
||||
0x48, 0x89, 0x37, 0x1c, 0x65, 0x77, 0xd7, 0x20, 0x2f, 0xde, 0xb3, 0x88,
|
||||
0x35, 0x71, 0xd0, 0x2a, 0x9e, 0xdc, 0xcb, 0xce, 0xf3, 0xfd, 0x7c, 0x69,
|
||||
0x4e, 0x19, 0x5b, 0x5e, 0x6e, 0x60, 0x7d, 0x49, 0x0e, 0xff, 0xd3, 0x76,
|
||||
0x91, 0xbf, 0x5b, 0x52, 0x83, 0x21, 0x63, 0xde, 0xdf, 0x53, 0x67, 0xbb,
|
||||
0x79, 0xbd, 0x7b, 0x08, 0x0d, 0xfc, 0xfd, 0xd2, 0x9a, 0x1b, 0xfb, 0xd8,
|
||||
0xba, 0xfb, 0x5c, 0x23, 0xde, 0x81, 0x8e, 0xa4, 0x2b, 0xd1, 0xa1, 0x31,
|
||||
0x8b, 0x36, 0x5f, 0x68, 0x12, 0x87, 0x26, 0x24, 0xc8, 0x99, 0xca, 0xac,
|
||||
0x05, 0xeb, 0x93, 0x62, 0x14, 0xad, 0xa1, 0x3e, 0x27, 0x2d, 0xe1, 0xde,
|
||||
0xf6, 0x06, 0xc3, 0xb4, 0xfb, 0xc6, 0x58, 0x51, 0x98, 0xc9, 0x91, 0xbe,
|
||||
0x11, 0x8a, 0xdd, 0x2e, 0xca, 0xd2, 0x52, 0xe8, 0xf0, 0x8f, 0xe1, 0x8b,
|
||||
0x5a, 0x09, 0x55, 0xd4, 0x3c, 0x1c, 0xc0, 0x90, 0x82, 0x99, 0x19, 0xb1,
|
||||
0x80, 0xf0, 0xdd, 0x21, 0x3f, 0xfd, 0xa1, 0x08, 0x3a, 0x0e, 0xf2, 0xfa,
|
||||
0xd2, 0x5c, 0x3a, 0xfc, 0x63, 0x78, 0xc3, 0x51, 0x16, 0xe5, 0x67, 0x60,
|
||||
0x6b, 0xcd, 0xde, 0x6e, 0x2f, 0x4b, 0xf2, 0x33, 0x18, 0xb3, 0x15, 0x9d,
|
||||
0xfe, 0x31, 0x16, 0xc5, 0xf5, 0x7f, 0xd0, 0xb2, 0x39, 0xd8, 0x3b, 0xc2,
|
||||
0xfa, 0x4b, 0x62, 0x9e, 0x53, 0xde, 0x00, 0xa0, 0x99, 0x93, 0x9d, 0xc6,
|
||||
0x89, 0x41, 0x1f, 0xde, 0x70, 0x94, 0xaa, 0x74, 0x37, 0x95, 0xe9, 0xb1,
|
||||
0x98, 0xee, 0x68, 0xff, 0x28, 0xfe, 0xa8, 0x15, 0x8b, 0xbd, 0x80, 0xf5,
|
||||
0xa5, 0x39, 0x37, 0x0e, 0x10, 0xad, 0x15, 0x67, 0x4f, 0xbc, 0xc6, 0x88,
|
||||
0x37, 0x39, 0x98, 0x0a, 0x59, 0x2a, 0xe9, 0xbe, 0x39, 0x39, 0x6e, 0xd6,
|
||||
0xe4, 0xe4, 0x55, 0x50, 0x33, 0x7f, 0xed, 0x15, 0x52, 0xe4, 0xd3, 0xa8,
|
||||
0x13, 0x53, 0xd5, 0x8b, 0x2b, 0x46, 0xe9, 0xd3, 0x1b, 0xe3, 0x72, 0xf7,
|
||||
0x8d, 0x5c, 0x79, 0xbd, 0x22, 0x6e, 0xd0, 0xc4, 0x0d, 0xfe, 0x39, 0x82,
|
||||
0x6d, 0x45, 0x92, 0x0e, 0x5f, 0x69, 0x58, 0xb7, 0xe3, 0x18, 0x41, 0xdb,
|
||||
0xc6, 0x10, 0x32, 0xa1, 0x52, 0x0c, 0x29, 0xd1, 0x42, 0x60, 0x0a, 0x81,
|
||||
0x34, 0x0d, 0x4c, 0xd3, 0x81, 0x94, 0x02, 0xa7, 0x90, 0x08, 0xa1, 0x71,
|
||||
0x08, 0x89, 0x29, 0x63, 0xed, 0xa6, 0x10, 0x98, 0x52, 0x20, 0xa5, 0xc0,
|
||||
0x10, 0x02, 0x87, 0x20, 0x51, 0x6f, 0x88, 0x98, 0xd7, 0x64, 0x08, 0x19,
|
||||
0x7b, 0x7e, 0x13, 0x57, 0x6d, 0x26, 0x02, 0x43, 0x82, 0x21, 0x0d, 0x0c,
|
||||
0x21, 0x30, 0x0c, 0x30, 0x90, 0x31, 0x3a, 0x34, 0x86, 0x90, 0x13, 0xb4,
|
||||
0xd2, 0x48, 0x3c, 0xe7, 0x31, 0x20, 0x56, 0x2f, 0x04, 0x32, 0x3e, 0xe6,
|
||||
0xf8, 0xbc, 0x32, 0x51, 0x1f, 0x03, 0x25, 0x36, 0xbf, 0x8e, 0xed, 0x47,
|
||||
0xc4, 0xd6, 0x27, 0x11, 0xf1, 0xf5, 0x80, 0x88, 0xc7, 0x5f, 0x37, 0xd4,
|
||||
0x86, 0x18, 0xa6, 0x33, 0xe9, 0x7b, 0xfb, 0x68, 0x88, 0x8e, 0x90, 0xcd,
|
||||
0x98, 0x52, 0x18, 0x09, 0x30, 0xc0, 0x90, 0x1a, 0x25, 0xc1, 0x29, 0x80,
|
||||
0xa8, 0x85, 0x29, 0x15, 0xd2, 0x90, 0x38, 0xa5, 0xc0, 0x14, 0xe0, 0x94,
|
||||
0x32, 0x01, 0x84, 0x63, 0x1c, 0x10, 0xc3, 0xc0, 0x21, 0x62, 0x34, 0x86,
|
||||
0x90, 0x38, 0x25, 0x48, 0x62, 0x6d, 0x46, 0xbc, 0xdf, 0xa5, 0x60, 0x99,
|
||||
0x02, 0x4c, 0x43, 0xc7, 0x0e, 0x4e, 0x09, 0x0c, 0x14, 0x26, 0xe3, 0x6d,
|
||||
0xb1, 0x88, 0xdf, 0x21, 0x05, 0x52, 0xc6, 0x40, 0x70, 0x48, 0x89, 0x8c,
|
||||
0x03, 0x62, 0x0a, 0x81, 0x21, 0x63, 0xb4, 0x52, 0x49, 0x0c, 0x19, 0x4b,
|
||||
0xed, 0x1b, 0x82, 0x58, 0x7f, 0x40, 0x09, 0x1d, 0x03, 0x4c, 0x80, 0x8a,
|
||||
0x83, 0x65, 0xa0, 0xd1, 0x0a, 0xb4, 0x88, 0x8d, 0xa3, 0x15, 0xfc, 0x1f,
|
||||
0xd7, 0xc0, 0x3b, 0xab, 0xdb, 0x65, 0xb1, 0x8a, 0x00, 0x00, 0x00, 0x00,
|
||||
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
|
||||
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x3c,
|
||||
0x08, 0x06, 0x00, 0x00, 0x00, 0xcf, 0x2e, 0x90, 0x87, 0x00, 0x00, 0x1b,
|
||||
0x39, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9d, 0x79, 0x70, 0x1c,
|
||||
0xd7, 0x7d, 0xe7, 0x3f, 0xaf, 0xbb, 0xa7, 0xe7, 0x02, 0x06, 0xf7, 0x8d,
|
||||
0xc1, 0xc5, 0x03, 0xa0, 0x48, 0x91, 0x94, 0x64, 0x52, 0x24, 0xbd, 0x96,
|
||||
0xe4, 0x48, 0xb2, 0x9d, 0xc4, 0x76, 0x7c, 0xc5, 0x89, 0x53, 0x59, 0xef,
|
||||
0x3a, 0xeb, 0x72, 0xe2, 0xdd, 0x8a, 0x1d, 0xa7, 0xca, 0xf6, 0x3a, 0x5b,
|
||||
0x59, 0x67, 0xbd, 0xde, 0x4d, 0x7c, 0x24, 0xf6, 0x7a, 0x53, 0x71, 0xec,
|
||||
0x8a, 0x6d, 0xc5, 0x67, 0x39, 0x4e, 0x36, 0x76, 0x2c, 0x7b, 0x23, 0x5b,
|
||||
0xca, 0xea, 0xb0, 0x49, 0x49, 0x94, 0x28, 0x92, 0x00, 0x49, 0x00, 0x84,
|
||||
0x00, 0x10, 0x04, 0x06, 0xc7, 0x00, 0x83, 0x01, 0xe6, 0x9e, 0x3e, 0xde,
|
||||
0xfe, 0xd1, 0x3d, 0x03, 0x0c, 0x0e, 0x12, 0xa4, 0x48, 0x29, 0x06, 0xe7,
|
||||
0x57, 0x35, 0x85, 0x41, 0x1f, 0xaf, 0x5f, 0xf7, 0x7c, 0xdf, 0xef, 0x7d,
|
||||
0x7f, 0xdf, 0xf7, 0x7b, 0xaf, 0x85, 0x94, 0x52, 0x52, 0xb6, 0x57, 0xd4,
|
||||
0x6c, 0x29, 0xb1, 0xa5, 0x64, 0x21, 0x93, 0x67, 0x60, 0x3e, 0xc6, 0xd8,
|
||||
0x62, 0x82, 0x68, 0x32, 0x4d, 0xce, 0x30, 0x51, 0x05, 0x28, 0x42, 0xa0,
|
||||
0x09, 0x08, 0xa8, 0x2a, 0x0d, 0x41, 0x3f, 0xed, 0x55, 0x15, 0x74, 0xd5,
|
||||
0x84, 0x68, 0xae, 0x0c, 0xa2, 0x28, 0x0a, 0x8a, 0x10, 0xe5, 0x87, 0xe8,
|
||||
0x9a, 0x28, 0x03, 0xfa, 0x95, 0xb3, 0xbc, 0x65, 0xb3, 0x98, 0xcd, 0xf3,
|
||||
0xdc, 0x6c, 0x8c, 0xa7, 0x23, 0x73, 0xa8, 0xc0, 0xa1, 0x96, 0x3a, 0xf6,
|
||||
0xd4, 0x55, 0x13, 0xae, 0x0c, 0xe2, 0x51, 0x95, 0x75, 0xe7, 0x2c, 0xa4,
|
||||
0xb3, 0x4c, 0xc5, 0x97, 0x19, 0x5b, 0x88, 0xb3, 0x9c, 0xc9, 0xd0, 0x53,
|
||||
0x57, 0xcd, 0xee, 0xc6, 0x7a, 0xaa, 0xfc, 0x3e, 0x74, 0x4d, 0x2d, 0x03,
|
||||
0xba, 0x0c, 0xe8, 0x97, 0xdf, 0xa4, 0x84, 0xf1, 0x44, 0x8a, 0x67, 0x67,
|
||||
0x16, 0x38, 0x13, 0x8d, 0x73, 0x47, 0x43, 0x35, 0x6f, 0xe8, 0x6a, 0xa1,
|
||||
0x52, 0xf7, 0x5c, 0x5b, 0x39, 0xc0, 0xf0, 0x4c, 0x94, 0x91, 0xb9, 0x05,
|
||||
0xaa, 0xfd, 0x3e, 0xba, 0xeb, 0x6b, 0x68, 0xaa, 0xaa, 0x44, 0x55, 0x94,
|
||||
0x32, 0xa0, 0xcb, 0xf6, 0xf2, 0x58, 0xda, 0xb4, 0x78, 0xec, 0xf2, 0x2c,
|
||||
0xfd, 0xd1, 0x25, 0x76, 0xd7, 0x54, 0xf0, 0xe6, 0x9e, 0x36, 0x74, 0xf5,
|
||||
0xa5, 0x03, 0x70, 0x2c, 0xba, 0xc0, 0x78, 0x74, 0x91, 0xda, 0x80, 0x8f,
|
||||
0xee, 0xc6, 0x3a, 0x42, 0x01, 0x7f, 0x19, 0xd0, 0x65, 0xbb, 0xb9, 0x36,
|
||||
0x9f, 0xcd, 0xf1, 0xd0, 0xf9, 0x4b, 0x04, 0x34, 0x85, 0x37, 0x76, 0xb5,
|
||||
0xd2, 0x11, 0x0a, 0xdc, 0xd0, 0xf2, 0x4d, 0xcb, 0x66, 0x28, 0x32, 0xc3,
|
||||
0x72, 0x3a, 0x43, 0x47, 0x7d, 0x2d, 0x6d, 0x75, 0x35, 0x65, 0x40, 0x97,
|
||||
0xed, 0xe6, 0xd8, 0x5c, 0x26, 0xc7, 0x9f, 0x3d, 0x3f, 0xc4, 0x6b, 0x5a,
|
||||
0xea, 0xf8, 0xe5, 0xae, 0x66, 0x7c, 0xea, 0xcd, 0xe3, 0xbb, 0xb3, 0xf1,
|
||||
0x65, 0xc6, 0x67, 0xe6, 0x68, 0xa8, 0x0e, 0xd1, 0xd3, 0xdc, 0x78, 0x4b,
|
||||
0x3d, 0x67, 0xad, 0x0c, 0xb5, 0x9b, 0x6f, 0xcb, 0x79, 0x93, 0x0f, 0xff,
|
||||
0x7c, 0x80, 0xff, 0x70, 0x5b, 0x27, 0xf7, 0xb4, 0xd6, 0xdf, 0xf4, 0xeb,
|
||||
0x35, 0x55, 0x87, 0xf0, 0xeb, 0x1e, 0x86, 0x27, 0x23, 0x28, 0x40, 0xd7,
|
||||
0x2d, 0x04, 0x6a, 0xa5, 0x0c, 0xb7, 0x9b, 0x6f, 0xbf, 0xf7, 0xf8, 0x69,
|
||||
0xde, 0xfb, 0x32, 0x81, 0xb9, 0x60, 0xa1, 0x80, 0x9f, 0xdd, 0xed, 0xad,
|
||||
0x2c, 0x2c, 0x25, 0x88, 0x2e, 0x2e, 0x95, 0x3d, 0x74, 0xd9, 0x6e, 0x8c,
|
||||
0x7d, 0xe4, 0xc4, 0x79, 0xde, 0xdc, 0xdd, 0xcc, 0x6b, 0xb6, 0x08, 0x66,
|
||||
0x09, 0x0c, 0x44, 0x17, 0x39, 0x35, 0xb3, 0x40, 0x64, 0x29, 0x41, 0xce,
|
||||
0x30, 0xd0, 0x84, 0x20, 0xe4, 0x51, 0x69, 0xab, 0x0c, 0xb2, 0xb3, 0xbe,
|
||||
0x86, 0x3d, 0x8d, 0x75, 0x5b, 0x92, 0xe8, 0x42, 0x01, 0x3f, 0x1d, 0x8d,
|
||||
0xf5, 0x44, 0xe6, 0x17, 0xa8, 0xf0, 0xfb, 0xf0, 0xfb, 0xbc, 0x65, 0x0e,
|
||||
0x5d, 0xb6, 0xeb, 0xb7, 0x47, 0x2e, 0xcf, 0xf1, 0xe8, 0xe5, 0x39, 0x3e,
|
||||
0x75, 0x74, 0xef, 0x55, 0x07, 0x3f, 0xf2, 0x96, 0xcd, 0x4f, 0x26, 0x66,
|
||||
0xf8, 0xd1, 0xe8, 0x14, 0xbd, 0x55, 0x15, 0xdc, 0x1b, 0x6e, 0x62, 0x57,
|
||||
0x75, 0x25, 0x15, 0x5e, 0x4f, 0x31, 0xe0, 0x9b, 0x49, 0xa4, 0x18, 0x5b,
|
||||
0x58, 0x64, 0x2c, 0xba, 0x40, 0x67, 0x4d, 0x15, 0x77, 0x75, 0xb6, 0x51,
|
||||
0xb1, 0x05, 0x90, 0x8e, 0x5c, 0x9e, 0x42, 0x55, 0x14, 0xba, 0x5a, 0x9b,
|
||||
0x11, 0xdb, 0x7c, 0x10, 0xa6, 0x0c, 0xe8, 0x9b, 0x64, 0x69, 0xd3, 0xe2,
|
||||
0xfd, 0x4f, 0x9c, 0xe6, 0x13, 0x87, 0x6f, 0xa3, 0xb3, 0xd2, 0x7f, 0x45,
|
||||
0x8f, 0x3c, 0x18, 0x5b, 0xe6, 0xaf, 0xcf, 0x8e, 0xd2, 0x57, 0x53, 0xc1,
|
||||
0xef, 0xec, 0xeb, 0xc1, 0xbb, 0x05, 0x19, 0x6f, 0x78, 0x26, 0xca, 0xc5,
|
||||
0x99, 0x39, 0x7a, 0x9b, 0x1b, 0xe8, 0x6e, 0xac, 0xbf, 0xa2, 0xf6, 0x9c,
|
||||
0x37, 0x0c, 0x86, 0xc7, 0x2f, 0x13, 0x6e, 0x69, 0xa2, 0xaa, 0x22, 0x58,
|
||||
0x06, 0x74, 0xd9, 0xae, 0xdd, 0xbe, 0x74, 0x7e, 0x1c, 0x9f, 0xaa, 0xf0,
|
||||
0xae, 0x5d, 0xed, 0xe8, 0x9b, 0x80, 0x4d, 0x02, 0x8f, 0x4c, 0xcc, 0xf2,
|
||||
0xf0, 0x58, 0x84, 0x0f, 0x1c, 0xd8, 0xc9, 0xee, 0xea, 0xca, 0x6b, 0xba,
|
||||
0x46, 0xd6, 0x30, 0x38, 0x3d, 0x36, 0x41, 0x85, 0xd7, 0x4b, 0x6f, 0x5b,
|
||||
0x0b, 0x9e, 0x2b, 0xd0, 0x90, 0xcb, 0x33, 0x73, 0x98, 0xa6, 0x49, 0x47,
|
||||
0x6b, 0xf3, 0xb6, 0x1e, 0x78, 0x29, 0x07, 0x85, 0x37, 0xc1, 0xe2, 0x39,
|
||||
0x83, 0x17, 0x97, 0x52, 0x1c, 0x6e, 0xac, 0xdd, 0x14, 0xcc, 0x00, 0x3f,
|
||||
0x1a, 0x9f, 0xe1, 0xf1, 0xc9, 0x28, 0x1f, 0x3f, 0xbc, 0xf7, 0x9a, 0xc1,
|
||||
0x0c, 0xe0, 0xf3, 0x78, 0x38, 0xb4, 0xb3, 0x1b, 0xcb, 0xb2, 0x18, 0x9d,
|
||||
0x9e, 0xc1, 0xbe, 0x82, 0x6f, 0x6a, 0x6b, 0x6a, 0x20, 0x91, 0x48, 0x92,
|
||||
0xcf, 0xe7, 0xcb, 0x41, 0x61, 0xd9, 0xae, 0xcd, 0x1e, 0x8f, 0xcc, 0xd3,
|
||||
0x1d, 0x0a, 0xd2, 0x51, 0xe1, 0xdb, 0xf4, 0x98, 0x53, 0xd1, 0x38, 0x3f,
|
||||
0x9f, 0x89, 0xf1, 0xbb, 0xfb, 0x7a, 0x68, 0xf0, 0xeb, 0xeb, 0xf6, 0x4f,
|
||||
0x25, 0xd3, 0x9c, 0x9f, 0x8f, 0x93, 0xc9, 0xe5, 0xf1, 0x08, 0x08, 0x79,
|
||||
0x34, 0xc2, 0x55, 0x95, 0x74, 0xd4, 0x56, 0x95, 0x1c, 0xa7, 0x2a, 0x0a,
|
||||
0x7b, 0xbb, 0xc2, 0x9c, 0xb9, 0x38, 0x46, 0x34, 0x16, 0xa7, 0x69, 0x93,
|
||||
0xc1, 0x14, 0x45, 0x08, 0x42, 0x15, 0x41, 0x96, 0x96, 0x13, 0xf8, 0xbc,
|
||||
0xde, 0x6d, 0xcb, 0xa5, 0xcb, 0x1e, 0xfa, 0x26, 0xd8, 0xd8, 0x72, 0x9a,
|
||||
0xd6, 0xa0, 0x8f, 0xa0, 0x67, 0x63, 0x7f, 0x91, 0x34, 0x4c, 0x1e, 0x9b,
|
||||
0x9c, 0xe7, 0x35, 0x2d, 0x75, 0x74, 0xaf, 0x19, 0x2d, 0x34, 0xa5, 0xcd,
|
||||
0x57, 0xcf, 0x8d, 0xf1, 0xbd, 0xe1, 0x09, 0xa4, 0x94, 0xb4, 0x54, 0x06,
|
||||
0x68, 0xad, 0x0c, 0x12, 0xd4, 0x3d, 0x4c, 0x2c, 0x2e, 0xf1, 0xd8, 0xb9,
|
||||
0x61, 0xe2, 0xa9, 0x74, 0xa9, 0x57, 0x52, 0x14, 0xf6, 0x74, 0xb6, 0x73,
|
||||
0x69, 0x7a, 0x1a, 0xd3, 0xb2, 0x36, 0xad, 0x57, 0x4b, 0x63, 0x03, 0xd1,
|
||||
0x58, 0xac, 0xec, 0xa1, 0xcb, 0xb6, 0x75, 0x9b, 0x4e, 0x67, 0xb1, 0x91,
|
||||
0x74, 0x54, 0x6c, 0x1e, 0x08, 0x3e, 0x1f, 0x8d, 0x93, 0xb7, 0x6d, 0x5e,
|
||||
0xd3, 0x5a, 0x57, 0xb2, 0xdd, 0x92, 0x92, 0x3f, 0x3a, 0x71, 0x9e, 0xfd,
|
||||
0x35, 0x95, 0xfc, 0x56, 0x5f, 0x17, 0x35, 0x3e, 0x1d, 0x8f, 0x4b, 0x59,
|
||||
0x24, 0x90, 0xce, 0xe7, 0x59, 0x4c, 0xa4, 0x39, 0x3d, 0x76, 0x89, 0xbd,
|
||||
0xe1, 0x36, 0x1a, 0xaa, 0x42, 0xc5, 0x73, 0x03, 0x3e, 0x2f, 0x75, 0x55,
|
||||
0x55, 0x4c, 0x47, 0xe7, 0x09, 0x37, 0x37, 0x6d, 0x78, 0x5d, 0xaf, 0x57,
|
||||
0xc7, 0x34, 0x4d, 0x4c, 0xd3, 0xc4, 0xe3, 0xf1, 0x6c, 0xcb, 0xe7, 0x5f,
|
||||
0xf6, 0xd0, 0x37, 0xd8, 0x22, 0xa9, 0x2c, 0x42, 0x08, 0xda, 0x82, 0x1b,
|
||||
0xd3, 0x8d, 0xbc, 0x6d, 0x33, 0xba, 0x9c, 0xa6, 0xb3, 0x32, 0x40, 0xe5,
|
||||
0x1a, 0x0f, 0xfe, 0x99, 0x17, 0x2e, 0xb2, 0xb3, 0x2a, 0xc8, 0x6f, 0xef,
|
||||
0xe9, 0xa4, 0x31, 0xe0, 0x2b, 0x82, 0x19, 0x40, 0x00, 0x41, 0x5d, 0xa7,
|
||||
0xbd, 0xae, 0x9a, 0x03, 0x5d, 0x1d, 0x8c, 0x4c, 0x46, 0xc8, 0xe6, 0x72,
|
||||
0x25, 0xe7, 0x77, 0xb5, 0xb6, 0x10, 0x99, 0x9e, 0xbd, 0x62, 0xfd, 0x2a,
|
||||
0x83, 0x15, 0x24, 0xd7, 0x78, 0xf8, 0x32, 0xa0, 0xcb, 0xb6, 0xa9, 0x45,
|
||||
0xb3, 0x79, 0x04, 0xd0, 0xe0, 0xdf, 0x58, 0x1f, 0x8e, 0x66, 0xf2, 0xcc,
|
||||
0x67, 0xf3, 0x1c, 0xac, 0x0f, 0x95, 0x6c, 0x7f, 0x71, 0x39, 0xc5, 0xf3,
|
||||
0xf3, 0x71, 0xde, 0xb7, 0xb7, 0xfb, 0xaa, 0xd7, 0xa8, 0x0e, 0x06, 0xe8,
|
||||
0x6a, 0x6c, 0x60, 0x6c, 0x72, 0xba, 0x94, 0x4f, 0xab, 0x0a, 0x7e, 0x9f,
|
||||
0x97, 0x74, 0x3a, 0xb3, 0x39, 0xa0, 0x2b, 0x2a, 0x48, 0x95, 0x01, 0x5d,
|
||||
0xb6, 0xad, 0x5a, 0xc6, 0xb4, 0x10, 0x08, 0x36, 0x0b, 0xb9, 0x96, 0xf2,
|
||||
0x06, 0xcb, 0x79, 0x83, 0x1d, 0xa1, 0x52, 0x3d, 0xf8, 0x6b, 0x83, 0x13,
|
||||
0xfc, 0xde, 0x6d, 0xa5, 0x60, 0xb6, 0x25, 0x0c, 0xc4, 0x92, 0x3c, 0x17,
|
||||
0x5d, 0x26, 0x63, 0xae, 0x70, 0x63, 0xe1, 0x06, 0x78, 0x8a, 0x22, 0xc8,
|
||||
0xe5, 0x4a, 0x55, 0x8b, 0x9a, 0xaa, 0x10, 0x4b, 0x89, 0xe4, 0xa6, 0xf5,
|
||||
0xf3, 0xfb, 0x74, 0xb2, 0xd9, 0x6c, 0x19, 0xd0, 0x65, 0xdb, 0x9a, 0x49,
|
||||
0x40, 0x53, 0x36, 0x57, 0x10, 0x72, 0x96, 0x4d, 0xde, 0x96, 0xf8, 0xd7,
|
||||
0x68, 0xc6, 0xcf, 0xcd, 0x2d, 0xad, 0xe3, 0xd4, 0xdf, 0xba, 0x18, 0xe1,
|
||||
0xfe, 0x1f, 0x9e, 0xe4, 0xd0, 0xdf, 0x9f, 0xe0, 0xe3, 0x27, 0x5f, 0xc4,
|
||||
0x5c, 0x25, 0xcb, 0xe9, 0x9a, 0x86, 0x5f, 0xd7, 0x49, 0x67, 0x33, 0x6b,
|
||||
0x00, 0xeb, 0x23, 0x97, 0xdb, 0x1c, 0xb0, 0xba, 0x47, 0xbf, 0x62, 0xe0,
|
||||
0x58, 0x0e, 0x0a, 0xcb, 0x56, 0x62, 0xdd, 0x95, 0x01, 0x6a, 0xbd, 0xfa,
|
||||
0xa6, 0xfb, 0xeb, 0x7c, 0x3a, 0x87, 0x1b, 0xab, 0xd7, 0x6d, 0x7f, 0xa0,
|
||||
0xbd, 0xbe, 0x44, 0xb3, 0x36, 0x6d, 0x89, 0x47, 0x11, 0xbc, 0xb3, 0xa7,
|
||||
0xd9, 0x99, 0x00, 0x20, 0xdc, 0xd6, 0x22, 0x56, 0xe8, 0x45, 0xa8, 0x22,
|
||||
0x88, 0xb6, 0xa6, 0x61, 0x04, 0x02, 0x3e, 0xa4, 0xb4, 0x37, 0xff, 0xc1,
|
||||
0x35, 0x8d, 0xaa, 0x50, 0x68, 0xdb, 0x3e, 0xff, 0xf2, 0x48, 0xe1, 0x4d,
|
||||
0xf4, 0xd4, 0xe2, 0x26, 0x1c, 0x5b, 0xb6, 0x9b, 0xe4, 0xa1, 0x33, 0x99,
|
||||
0x0c, 0x86, 0x61, 0xa0, 0xaa, 0x1a, 0xc1, 0xe0, 0xd6, 0x66, 0x5e, 0x24,
|
||||
0x93, 0x49, 0x6c, 0x7b, 0xbd, 0xf7, 0x10, 0x42, 0xe0, 0xf5, 0x7a, 0xd1,
|
||||
0x75, 0x7d, 0x4b, 0xe5, 0x64, 0xb3, 0x39, 0xf2, 0xf9, 0xdc, 0xd5, 0x5b,
|
||||
0xeb, 0x26, 0xe5, 0x3a, 0x41, 0x93, 0x24, 0x10, 0x08, 0x6c, 0xa9, 0xae,
|
||||
0x42, 0x08, 0x82, 0x41, 0x67, 0x86, 0xf5, 0x96, 0x3d, 0xc5, 0x26, 0xdb,
|
||||
0x17, 0xb2, 0x06, 0x12, 0x49, 0xbd, 0x4f, 0xbf, 0xe2, 0xb1, 0xb6, 0x94,
|
||||
0x2c, 0xe6, 0x4c, 0x52, 0xa6, 0x85, 0x00, 0x6c, 0xa0, 0x3d, 0xe0, 0x45,
|
||||
0x5d, 0x43, 0x67, 0x16, 0x73, 0x06, 0x09, 0xc3, 0x5a, 0x57, 0x86, 0x10,
|
||||
0x10, 0xd4, 0x54, 0x6a, 0xbc, 0x9e, 0x32, 0xa0, 0xaf, 0xf4, 0x23, 0x5f,
|
||||
0xb8, 0x30, 0xc8, 0xcc, 0xcc, 0x0c, 0x99, 0x4c, 0x06, 0xcb, 0xb2, 0x50,
|
||||
0x14, 0x05, 0x9f, 0xcf, 0x4b, 0x7d, 0x7d, 0x3d, 0x3b, 0x77, 0xee, 0xa4,
|
||||
0xa9, 0x69, 0xbd, 0x06, 0x1a, 0x8b, 0xc5, 0x78, 0xf6, 0xd9, 0x93, 0x2c,
|
||||
0x2d, 0xc5, 0xb1, 0x6d, 0xb9, 0x21, 0xf0, 0x34, 0x4d, 0x25, 0x18, 0x0c,
|
||||
0xd2, 0xd6, 0xd6, 0xc6, 0xee, 0xdd, 0xbb, 0xf1, 0xf9, 0xd6, 0xcb, 0x5e,
|
||||
0xb6, 0x6d, 0x73, 0xe2, 0xc4, 0xd3, 0x44, 0x22, 0x11, 0x4c, 0xd3, 0xbc,
|
||||
0xfa, 0xcd, 0x69, 0x2a, 0xfb, 0xf7, 0xdf, 0x4e, 0x6f, 0x6f, 0x1f, 0x00,
|
||||
0xf9, 0x7c, 0x9e, 0xe7, 0x9f, 0x7f, 0x9e, 0xcb, 0x97, 0x27, 0x91, 0x52,
|
||||
0xd2, 0xd1, 0x11, 0xe6, 0xe8, 0xd1, 0xa3, 0xeb, 0xce, 0xb3, 0x2c, 0x8b,
|
||||
0xc7, 0x1e, 0x7b, 0xac, 0xa8, 0x16, 0xf8, 0x7c, 0x3e, 0x1e, 0x78, 0xe0,
|
||||
0x01, 0x2a, 0x2b, 0x2b, 0xae, 0x3f, 0x58, 0xb4, 0x2c, 0x3e, 0xf1, 0xdc,
|
||||
0x28, 0xa7, 0xa2, 0xcb, 0x48, 0xe0, 0x50, 0x63, 0x88, 0xdf, 0xdf, 0xd7,
|
||||
0x41, 0x73, 0x60, 0x63, 0x35, 0x24, 0x69, 0x58, 0xfc, 0xd5, 0xb9, 0xcb,
|
||||
0xfc, 0x74, 0x72, 0x1e, 0x5d, 0x51, 0x48, 0x9b, 0x16, 0xdf, 0x7f, 0xc3,
|
||||
0x1d, 0x34, 0xba, 0xa3, 0x8a, 0x0b, 0x59, 0x83, 0xff, 0xd5, 0x7f, 0x89,
|
||||
0x67, 0xe7, 0x96, 0x30, 0x37, 0x78, 0xa6, 0x08, 0xf0, 0x2a, 0x0a, 0xf5,
|
||||
0x3e, 0x0f, 0x77, 0x36, 0x84, 0x78, 0x7b, 0x77, 0x13, 0xed, 0x57, 0x18,
|
||||
0xb9, 0xbc, 0xe5, 0x00, 0x7d, 0xf2, 0xe4, 0x49, 0xfa, 0xfb, 0x07, 0x48,
|
||||
0xa7, 0xd3, 0xe4, 0xf3, 0x79, 0x6c, 0xdb, 0x46, 0x4a, 0x89, 0x10, 0x02,
|
||||
0x45, 0x51, 0xb8, 0x74, 0x69, 0x82, 0xc1, 0xc1, 0x21, 0xba, 0xba, 0x3a,
|
||||
0x39, 0x7a, 0xf4, 0x68, 0x89, 0xf7, 0x7b, 0xea, 0xa9, 0xa7, 0x18, 0x1b,
|
||||
0x1b, 0x2f, 0x7a, 0xbc, 0xc2, 0xb9, 0x25, 0xd1, 0xa9, 0xa2, 0xa0, 0x28,
|
||||
0x0a, 0x63, 0x63, 0xe3, 0x9c, 0x3d, 0xdb, 0xcf, 0x81, 0x03, 0x07, 0xb8,
|
||||
0xfd, 0xf6, 0x7d, 0x25, 0xc7, 0x0c, 0x0e, 0x0e, 0xf1, 0xc2, 0x0b, 0x2f,
|
||||
0x14, 0xf3, 0x11, 0xa4, 0x94, 0x1b, 0x7a, 0xfc, 0x82, 0x79, 0x3c, 0x1e,
|
||||
0xba, 0xbb, 0x57, 0x94, 0x83, 0x8b, 0x17, 0x47, 0x38, 0x7d, 0xfa, 0x0c,
|
||||
0x99, 0x8c, 0x03, 0xd4, 0x68, 0x34, 0x8a, 0x10, 0x0a, 0x47, 0x8e, 0xdc,
|
||||
0x5d, 0x4a, 0x01, 0xa4, 0x64, 0x76, 0x76, 0x8e, 0x64, 0x32, 0xe9, 0xf2,
|
||||
0xd2, 0x00, 0x96, 0x65, 0xbe, 0xa4, 0x07, 0xfd, 0x27, 0x27, 0x5f, 0xe4,
|
||||
0xcb, 0x17, 0x26, 0x8b, 0xe0, 0x7b, 0x66, 0x2e, 0x8e, 0x2a, 0x04, 0x1f,
|
||||
0x39, 0xd8, 0x4d, 0x85, 0x67, 0x7d, 0x52, 0x91, 0x29, 0x25, 0x23, 0xcb,
|
||||
0x69, 0x9e, 0x9e, 0x5d, 0xc2, 0xa7, 0x2a, 0x24, 0x0d, 0x93, 0x9c, 0x7b,
|
||||
0xaf, 0xa6, 0x2d, 0x79, 0x78, 0x22, 0xca, 0x5f, 0x9c, 0x1d, 0x47, 0x20,
|
||||
0x50, 0x04, 0x18, 0xb6, 0x5c, 0x97, 0xcb, 0xa1, 0x08, 0x81, 0x47, 0x11,
|
||||
0x3c, 0x3a, 0xb9, 0xc0, 0xd7, 0x06, 0xa7, 0x78, 0xf7, 0xee, 0x56, 0x3e,
|
||||
0xb4, 0xbf, 0x73, 0x5b, 0xa7, 0x90, 0x6e, 0x09, 0xd0, 0x8f, 0x3c, 0xf2,
|
||||
0x08, 0x83, 0x83, 0x43, 0x25, 0xe0, 0x69, 0x6c, 0x6c, 0xa4, 0xae, 0xae,
|
||||
0x96, 0x44, 0x22, 0x49, 0x24, 0x12, 0xc1, 0xb2, 0x2c, 0x12, 0x89, 0x04,
|
||||
0xfd, 0xfd, 0x03, 0x2c, 0x2f, 0x2f, 0x73, 0xff, 0xfd, 0xf7, 0x13, 0x72,
|
||||
0x83, 0x8f, 0xe5, 0xe5, 0x44, 0x09, 0x68, 0x9b, 0x9b, 0x9b, 0xa9, 0xac,
|
||||
0xac, 0x2c, 0x82, 0xda, 0x34, 0x4d, 0x22, 0x91, 0x08, 0xa9, 0x54, 0x8a,
|
||||
0x7c, 0x3e, 0x4f, 0x34, 0x1a, 0xe5, 0xc9, 0x27, 0x9f, 0x24, 0x99, 0x4c,
|
||||
0x94, 0x78, 0xd0, 0x64, 0x32, 0x51, 0xec, 0x15, 0x84, 0x10, 0x84, 0x42,
|
||||
0x21, 0x5a, 0x5a, 0x5a, 0x36, 0x05, 0xb5, 0xa2, 0xa8, 0xd4, 0xd6, 0xd6,
|
||||
0xad, 0xa2, 0x49, 0xe9, 0xe2, 0xf9, 0x85, 0xeb, 0xf6, 0xf7, 0xf7, 0xd3,
|
||||
0xd3, 0xd3, 0x4d, 0x63, 0x63, 0xe3, 0x86, 0x0d, 0xac, 0xf0, 0xfd, 0xa5,
|
||||
0xb0, 0xdc, 0xc5, 0x9c, 0xc1, 0x57, 0x07, 0xa7, 0x9c, 0x46, 0xe6, 0x52,
|
||||
0x06, 0x53, 0x4a, 0xbe, 0x75, 0x71, 0x9a, 0x77, 0xed, 0x6a, 0x61, 0x4f,
|
||||
0xf5, 0xc6, 0x29, 0x9d, 0xaa, 0x70, 0x14, 0x13, 0x4d, 0x11, 0x25, 0x19,
|
||||
0x72, 0xb6, 0x94, 0x2c, 0x64, 0x0d, 0x72, 0x96, 0x4d, 0xa5, 0x47, 0xc3,
|
||||
0xb0, 0x25, 0xf7, 0xb6, 0xd6, 0xd0, 0x12, 0x58, 0xf1, 0xc0, 0xa6, 0x65,
|
||||
0x73, 0x21, 0x9e, 0xe2, 0xdc, 0x62, 0x92, 0x94, 0x69, 0x91, 0x4e, 0x64,
|
||||
0xf9, 0xe4, 0xa9, 0x51, 0x2e, 0x25, 0x33, 0x7c, 0xfe, 0xd8, 0x1e, 0xb6,
|
||||
0x2b, 0xa6, 0xaf, 0x0a, 0xe8, 0xd1, 0xd1, 0x31, 0xce, 0x9d, 0x3b, 0x5f,
|
||||
0xfc, 0x71, 0x43, 0xa1, 0x10, 0xf7, 0xdd, 0x77, 0x1f, 0x3b, 0x76, 0xf4,
|
||||
0x14, 0x8f, 0x89, 0xc7, 0xe3, 0x3c, 0xfc, 0xf0, 0x8f, 0x5c, 0x8f, 0x27,
|
||||
0x18, 0x1d, 0x1d, 0xa3, 0xa9, 0x69, 0x80, 0x63, 0xc7, 0x8e, 0x6d, 0xe8,
|
||||
0x35, 0x5f, 0xf5, 0xaa, 0xbb, 0xe8, 0xe9, 0xe9, 0x29, 0x02, 0x5a, 0x08,
|
||||
0x81, 0x94, 0x92, 0x53, 0xa7, 0x4e, 0xf1, 0xe4, 0x93, 0x4f, 0x21, 0x84,
|
||||
0x20, 0x9f, 0xcf, 0x33, 0x38, 0x38, 0x44, 0x38, 0x1c, 0xa6, 0xbd, 0xbd,
|
||||
0x7d, 0x43, 0x9a, 0x12, 0x0e, 0x87, 0x79, 0xe0, 0x81, 0xfb, 0xb9, 0x52,
|
||||
0x5c, 0x7b, 0x35, 0x6f, 0x94, 0x4a, 0xa5, 0x38, 0x7e, 0xfc, 0x04, 0x6f,
|
||||
0x79, 0xcb, 0xaf, 0xdd, 0xb4, 0x87, 0xfc, 0xe5, 0x0b, 0x97, 0xc9, 0xdb,
|
||||
0x36, 0xea, 0xaa, 0xba, 0x68, 0x42, 0x30, 0x91, 0xcc, 0xf0, 0xff, 0x26,
|
||||
0x63, 0xec, 0x0c, 0x05, 0x8a, 0x40, 0xbf, 0xa6, 0x88, 0xde, 0x6d, 0x64,
|
||||
0x29, 0xd3, 0xe2, 0x03, 0xfb, 0x3a, 0x79, 0x43, 0xb8, 0xbe, 0x84, 0x72,
|
||||
0x58, 0xb6, 0xe4, 0x87, 0x97, 0xa2, 0x7c, 0xec, 0x99, 0x61, 0xa6, 0xd3,
|
||||
0x39, 0x54, 0x04, 0x5f, 0x3a, 0x3f, 0xc9, 0x6f, 0xec, 0x68, 0xe1, 0x58,
|
||||
0x73, 0xf5, 0xb6, 0x04, 0xf4, 0x55, 0xa3, 0x9c, 0xb1, 0xb1, 0xb1, 0x22,
|
||||
0x28, 0x54, 0x55, 0x65, 0xef, 0xde, 0xbd, 0x25, 0x60, 0x06, 0xa8, 0xae,
|
||||
0xae, 0xe6, 0x4d, 0x6f, 0x7a, 0x23, 0x86, 0x61, 0x14, 0xbb, 0xec, 0x85,
|
||||
0x85, 0x18, 0xe9, 0x74, 0xfa, 0x8a, 0x21, 0x93, 0x10, 0xa2, 0x58, 0xb6,
|
||||
0x10, 0x82, 0xbb, 0xee, 0xba, 0x8b, 0xee, 0xee, 0xee, 0xa2, 0xc7, 0x4d,
|
||||
0xa5, 0x52, 0x2c, 0x2d, 0x2d, 0x5d, 0x01, 0xac, 0x94, 0x94, 0xb3, 0xd1,
|
||||
0x67, 0x2b, 0x36, 0x3d, 0x1d, 0xa1, 0xbf, 0xbf, 0xff, 0xa6, 0x3d, 0xe4,
|
||||
0xaf, 0x5c, 0x88, 0x14, 0xc1, 0x2c, 0xa0, 0xf8, 0xdd, 0xa7, 0xaa, 0x7c,
|
||||
0x63, 0x38, 0x42, 0x3c, 0x67, 0xbc, 0x74, 0xb9, 0x4a, 0xac, 0xf9, 0xe0,
|
||||
0x78, 0xf7, 0xb7, 0x76, 0x37, 0xf2, 0xef, 0x7a, 0xdb, 0x30, 0x5c, 0xaa,
|
||||
0xa3, 0x08, 0xc1, 0x89, 0xd9, 0xf8, 0xb6, 0xa5, 0x1c, 0x57, 0x05, 0xf4,
|
||||
0xea, 0xe0, 0x4b, 0x55, 0x55, 0xbc, 0xde, 0x8d, 0x83, 0x98, 0xd5, 0x9c,
|
||||
0x59, 0x08, 0xb1, 0x21, 0x4f, 0xbe, 0x9a, 0xe5, 0xf3, 0x79, 0x72, 0xab,
|
||||
0xf2, 0x13, 0x3c, 0x1e, 0xcf, 0x86, 0xc1, 0xe1, 0x8d, 0xb6, 0x74, 0x3a,
|
||||
0xcb, 0xc0, 0xc0, 0xb9, 0x2b, 0x36, 0x9e, 0xeb, 0xb5, 0x6f, 0x0d, 0x47,
|
||||
0x58, 0x5c, 0x05, 0xd8, 0x9e, 0x90, 0x9f, 0xd7, 0x87, 0xeb, 0xc9, 0x59,
|
||||
0x36, 0x1e, 0x45, 0xf0, 0x6c, 0x74, 0x89, 0x53, 0xf3, 0x4e, 0xa0, 0x78,
|
||||
0x33, 0x2c, 0x6f, 0xdb, 0xc4, 0xdc, 0xe1, 0xf8, 0x02, 0x5d, 0x69, 0x0d,
|
||||
0x7a, 0x6f, 0x5d, 0x40, 0x6f, 0xac, 0x9a, 0x6e, 0xb0, 0xf5, 0x1a, 0xc0,
|
||||
0xbb, 0x5a, 0xfe, 0x2a, 0x70, 0xef, 0xa9, 0xa9, 0x08, 0x8f, 0x3e, 0xfa,
|
||||
0x18, 0x93, 0x93, 0x93, 0x2e, 0x05, 0x81, 0x8e, 0x8e, 0x30, 0x6d, 0x6d,
|
||||
0x6d, 0xd7, 0x21, 0x8e, 0x6d, 0xcd, 0x54, 0x55, 0x45, 0x4a, 0x89, 0xaa,
|
||||
0x2a, 0xcc, 0xcc, 0xcc, 0x14, 0xbd, 0xf4, 0x8d, 0x0c, 0x9a, 0x1e, 0x1a,
|
||||
0x8e, 0x14, 0x83, 0x35, 0x9f, 0xaa, 0xf0, 0x3b, 0x7b, 0xda, 0x79, 0x77,
|
||||
0x6f, 0x2b, 0xba, 0xaa, 0x20, 0x01, 0xbf, 0xa6, 0xf0, 0x57, 0xe7, 0x2e,
|
||||
0x63, 0xd9, 0xf2, 0x86, 0x03, 0x79, 0x30, 0x9e, 0xe2, 0xd3, 0x2f, 0x8c,
|
||||
0xf3, 0xed, 0x91, 0x19, 0x3c, 0x8a, 0x42, 0xce, 0xb2, 0xd9, 0x5d, 0x15,
|
||||
0x2c, 0xa5, 0x26, 0x65, 0x1d, 0xfa, 0xa5, 0x99, 0x6d, 0xdb, 0xcc, 0xcd,
|
||||
0xcd, 0x22, 0xa5, 0x4d, 0x22, 0x91, 0x64, 0x69, 0x69, 0x89, 0x68, 0x34,
|
||||
0xca, 0xd4, 0xd4, 0x14, 0xd9, 0x6c, 0xd6, 0x95, 0xf0, 0x34, 0x76, 0xef,
|
||||
0xde, 0xcd, 0xe1, 0xc3, 0x87, 0x37, 0xf5, 0xd0, 0x52, 0x4a, 0xe6, 0xe6,
|
||||
0xe6, 0x38, 0x75, 0xea, 0x14, 0xe6, 0xaa, 0x3c, 0x07, 0xcb, 0xb2, 0xb8,
|
||||
0xfb, 0xee, 0xc3, 0x57, 0xd5, 0x8c, 0xa5, 0x94, 0xb4, 0xb4, 0x34, 0x13,
|
||||
0x8b, 0x2d, 0x92, 0x4a, 0xa5, 0x90, 0x52, 0x72, 0xe1, 0xc2, 0x05, 0x3a,
|
||||
0x3b, 0xbb, 0x68, 0x6b, 0x6b, 0xbd, 0x21, 0xf7, 0xfa, 0x78, 0x64, 0x91,
|
||||
0xe1, 0x78, 0xba, 0xe8, 0x02, 0xea, 0x7d, 0x3a, 0xbf, 0xb5, 0xb3, 0x85,
|
||||
0xe5, 0xbc, 0xc9, 0xd1, 0xa6, 0x2a, 0x9e, 0x88, 0x2c, 0xe2, 0x55, 0x15,
|
||||
0x1e, 0x9d, 0x5c, 0x60, 0x28, 0x9e, 0x62, 0x6f, 0xed, 0xf5, 0xcb, 0x82,
|
||||
0x85, 0x6b, 0x8c, 0x2d, 0x67, 0xe8, 0x8f, 0x25, 0x79, 0x2e, 0xba, 0xc4,
|
||||
0x4f, 0x27, 0xe7, 0x39, 0x3d, 0x9f, 0x40, 0x53, 0x14, 0x0c, 0xdb, 0x66,
|
||||
0x5f, 0x4d, 0x05, 0x9f, 0x3d, 0xd6, 0xbb, 0xad, 0xb5, 0xe9, 0x97, 0x1d,
|
||||
0xd0, 0xa6, 0x69, 0x72, 0xea, 0xd4, 0x0b, 0x58, 0x96, 0x45, 0x3a, 0x9d,
|
||||
0x29, 0x91, 0xc3, 0x6a, 0x6a, 0x6a, 0x08, 0x87, 0xc3, 0xf4, 0xf4, 0xf4,
|
||||
0xd0, 0xd3, 0xd3, 0x85, 0xae, 0x7b, 0xaf, 0x08, 0xc8, 0x48, 0x24, 0xc2,
|
||||
0xc4, 0xc4, 0x44, 0xc9, 0xf6, 0x5c, 0x2e, 0xc7, 0xa1, 0x43, 0xaf, 0xda,
|
||||
0xd2, 0x20, 0x48, 0x5d, 0x5d, 0x1d, 0x7d, 0x7d, 0x7d, 0xfc, 0xf8, 0xc7,
|
||||
0xff, 0x8c, 0xae, 0x7b, 0x88, 0xc7, 0x97, 0x39, 0x73, 0xe6, 0x34, 0x35,
|
||||
0x35, 0xd5, 0x37, 0x44, 0x05, 0xf8, 0xe6, 0x70, 0x84, 0x94, 0xdb, 0xd8,
|
||||
0x14, 0x01, 0xaf, 0x0b, 0xd7, 0x51, 0xa5, 0x6b, 0x54, 0xe9, 0x1a, 0xf7,
|
||||
0xb5, 0xd6, 0x72, 0x7c, 0x26, 0x5e, 0xec, 0x67, 0xbe, 0x30, 0x70, 0x89,
|
||||
0x2f, 0xdd, 0xb3, 0xf7, 0xba, 0xd1, 0xec, 0x57, 0x55, 0xbe, 0x37, 0x3a,
|
||||
0xcb, 0xdf, 0x0e, 0x4d, 0xf1, 0xc2, 0x7c, 0x82, 0x68, 0x26, 0x8f, 0x22,
|
||||
0xc0, 0x92, 0x50, 0xeb, 0xd1, 0x78, 0x73, 0x57, 0x03, 0xef, 0xdd, 0xd3,
|
||||
0xce, 0x5d, 0x0d, 0xdb, 0x77, 0xd8, 0xfb, 0x15, 0x01, 0xb4, 0x94, 0x92,
|
||||
0x44, 0xc2, 0x91, 0xdf, 0xfc, 0x7e, 0x3f, 0x75, 0x75, 0xcd, 0x34, 0x36,
|
||||
0x36, 0xd2, 0xda, 0xda, 0x4a, 0x5d, 0x5d, 0x2d, 0xd5, 0xd5, 0xd5, 0xf8,
|
||||
0xfd, 0x5b, 0x5b, 0x68, 0x50, 0xd7, 0x75, 0x02, 0x81, 0x40, 0x09, 0xdd,
|
||||
0xf1, 0x5e, 0xc3, 0xf4, 0x22, 0x29, 0xa1, 0xaf, 0xaf, 0x97, 0xa1, 0xa1,
|
||||
0x61, 0x46, 0x47, 0x47, 0xf1, 0x78, 0x3c, 0x5c, 0xbc, 0x38, 0x42, 0x38,
|
||||
0x1c, 0xc6, 0xb2, 0xec, 0x97, 0x74, 0x9f, 0xe7, 0x16, 0x93, 0xbc, 0x30,
|
||||
0xbf, 0x8c, 0x69, 0xdb, 0xae, 0x1e, 0xac, 0xf0, 0xc1, 0xdb, 0x3b, 0x8a,
|
||||
0xfb, 0x1f, 0x6c, 0xaf, 0xe3, 0xef, 0x47, 0x67, 0x19, 0x8a, 0xa7, 0xf0,
|
||||
0xa8, 0x0a, 0x3f, 0x18, 0x9b, 0xe3, 0x13, 0x87, 0x76, 0xd2, 0xe4, 0xbf,
|
||||
0x76, 0x7e, 0xab, 0x08, 0x88, 0x65, 0xf3, 0xfc, 0xd9, 0xa9, 0x51, 0x86,
|
||||
0x97, 0xd2, 0xa8, 0x02, 0xaa, 0x75, 0x8d, 0xdb, 0xeb, 0x2a, 0xb9, 0xbf,
|
||||
0xad, 0x96, 0x63, 0xcd, 0xd5, 0xdc, 0x59, 0x1f, 0x22, 0xa4, 0x6f, 0xff,
|
||||
0xd4, 0x9d, 0x97, 0xfd, 0x0e, 0x35, 0x4d, 0xe3, 0xc0, 0x81, 0x03, 0xec,
|
||||
0xda, 0xb5, 0x93, 0x40, 0x20, 0x80, 0xc7, 0xe3, 0x41, 0xd7, 0xf5, 0x4d,
|
||||
0x83, 0xcd, 0x2b, 0xc9, 0x71, 0x3b, 0x76, 0xec, 0xe0, 0xde, 0x7b, 0xef,
|
||||
0x21, 0x9f, 0x37, 0x4a, 0x1a, 0xcc, 0xb5, 0x0c, 0x51, 0x6b, 0x9a, 0x87,
|
||||
0xc3, 0x87, 0x0f, 0x31, 0x3d, 0x3d, 0x5d, 0x54, 0x69, 0x9e, 0x7d, 0xf6,
|
||||
0xe4, 0x4b, 0x4e, 0xb1, 0xfc, 0xfe, 0xd8, 0x1c, 0x97, 0x93, 0x59, 0x14,
|
||||
0x21, 0x90, 0xc0, 0x1d, 0xf5, 0x95, 0xa8, 0x42, 0x61, 0x7c, 0x39, 0x83,
|
||||
0x10, 0x82, 0x1a, 0xaf, 0x87, 0x9e, 0x90, 0x9f, 0xa1, 0x78, 0x0a, 0x01,
|
||||
0xa4, 0x4d, 0x9b, 0xaf, 0x5c, 0x98, 0xe2, 0x8f, 0xee, 0xec, 0xb9, 0x2e,
|
||||
0xba, 0x51, 0xa1, 0x6b, 0xa8, 0xae, 0x66, 0x2d, 0x70, 0x66, 0xbf, 0xd4,
|
||||
0x78, 0x3d, 0x7c, 0xf0, 0xf6, 0x4e, 0x82, 0x9e, 0x5b, 0x67, 0xdd, 0xe8,
|
||||
0x97, 0x1d, 0xd0, 0xaa, 0xaa, 0xd2, 0xd1, 0xd1, 0xb1, 0xa1, 0xb6, 0x7c,
|
||||
0xad, 0x80, 0xf6, 0x7a, 0xbd, 0x04, 0x83, 0x41, 0x82, 0x2f, 0x71, 0xa9,
|
||||
0x89, 0x96, 0x96, 0x16, 0x0e, 0x1e, 0x3c, 0xc8, 0xf1, 0xe3, 0xc7, 0xd1,
|
||||
0x75, 0x9d, 0x54, 0x2a, 0xf5, 0x92, 0xca, 0x8b, 0xa4, 0x72, 0x1c, 0x9f,
|
||||
0x89, 0x93, 0xb5, 0xec, 0x22, 0xc0, 0x9e, 0x8f, 0x2e, 0xf3, 0xea, 0xef,
|
||||
0x3f, 0x53, 0xe4, 0xba, 0x02, 0xc8, 0x98, 0x2b, 0xda, 0xb4, 0xa6, 0x08,
|
||||
0x1e, 0x1a, 0x8a, 0xf0, 0xb1, 0x3b, 0x7a, 0xae, 0x99, 0xee, 0x48, 0x40,
|
||||
0x41, 0xf0, 0xe5, 0x7b, 0xf6, 0xf2, 0x2b, 0xff, 0xf7, 0x79, 0xb2, 0xa6,
|
||||
0x8d, 0x04, 0x9e, 0x9a, 0x8e, 0xf1, 0xdf, 0x4f, 0xbd, 0xc8, 0x9f, 0x1e,
|
||||
0xde, 0xcd, 0xad, 0xb2, 0xc8, 0xff, 0x0d, 0xcb, 0x87, 0xbe, 0x16, 0x85,
|
||||
0xee, 0xc6, 0xa9, 0x08, 0x37, 0x46, 0x19, 0xd0, 0x34, 0x8d, 0xbe, 0xbe,
|
||||
0x5e, 0xda, 0xda, 0xda, 0xaf, 0x38, 0x94, 0xbe, 0x55, 0x7b, 0x72, 0x7a,
|
||||
0x91, 0xb3, 0xb1, 0x44, 0xc9, 0x6a, 0x49, 0x86, 0x2d, 0x59, 0xca, 0x9b,
|
||||
0x2c, 0xbb, 0x9f, 0xa5, 0xbc, 0x49, 0x7e, 0xcd, 0xb5, 0xe2, 0x79, 0x83,
|
||||
0x6f, 0x5e, 0x8c, 0x5c, 0x5f, 0x6c, 0x22, 0x6d, 0x0e, 0xd6, 0x57, 0xf2,
|
||||
0x0f, 0xaf, 0xbb, 0xa3, 0xd8, 0x48, 0xf2, 0xb6, 0xe4, 0x6f, 0x2e, 0x4c,
|
||||
0xf1, 0x99, 0x33, 0x63, 0xd8, 0xdc, 0x1a, 0x49, 0x95, 0x57, 0xf5, 0xd0,
|
||||
0x85, 0x21, 0x6a, 0x21, 0x04, 0x86, 0x61, 0x10, 0x8d, 0xce, 0x17, 0xff,
|
||||
0x5f, 0xad, 0x5c, 0x8c, 0x8f, 0x5f, 0x2a, 0x76, 0xf5, 0x52, 0x4a, 0xbc,
|
||||
0x5e, 0x2f, 0x9a, 0x76, 0xb3, 0xa3, 0xe9, 0x1b, 0xe7, 0x76, 0xea, 0xeb,
|
||||
0xeb, 0xd9, 0xb7, 0x6f, 0x2f, 0xb1, 0xd8, 0x02, 0xa6, 0x69, 0x5e, 0x77,
|
||||
0xa3, 0x4b, 0x1a, 0x16, 0x8f, 0x47, 0x62, 0xcc, 0x67, 0xf2, 0xf8, 0x35,
|
||||
0x15, 0x4b, 0x4a, 0x1e, 0x6c, 0xaf, 0x2b, 0xc9, 0xae, 0x5b, 0xe1, 0xbe,
|
||||
0x82, 0xc9, 0x54, 0x96, 0x67, 0x66, 0xe3, 0x18, 0xb6, 0xc4, 0xb4, 0x25,
|
||||
0x5f, 0x1d, 0x9c, 0xe2, 0xdf, 0xee, 0x6e, 0xbd, 0xee, 0x3b, 0x3b, 0xda,
|
||||
0x54, 0xc5, 0xdf, 0xbd, 0x6e, 0x3f, 0xbf, 0xf9, 0xd3, 0x7e, 0x72, 0x96,
|
||||
0x8d, 0x29, 0x25, 0x9f, 0x3a, 0x3d, 0x46, 0xad, 0xd7, 0xc3, 0x7b, 0xfa,
|
||||
0xda, 0x4a, 0x46, 0x2b, 0x6f, 0x49, 0x40, 0xef, 0xdb, 0xb7, 0x97, 0xb3,
|
||||
0x67, 0xcf, 0x92, 0x4e, 0xa7, 0x11, 0x42, 0x30, 0x38, 0x38, 0x88, 0x65,
|
||||
0x99, 0xec, 0xdf, 0xbf, 0x9f, 0x60, 0x30, 0x88, 0x61, 0x18, 0x0c, 0x0f,
|
||||
0x5f, 0xe4, 0xe4, 0xc9, 0x93, 0x68, 0x9a, 0x86, 0x94, 0x4e, 0x5a, 0x66,
|
||||
0x57, 0x57, 0x07, 0x5e, 0xaf, 0x7e, 0x43, 0x2b, 0xbb, 0xba, 0x17, 0x90,
|
||||
0x52, 0x92, 0xcb, 0xe5, 0xdc, 0xfc, 0x0f, 0x63, 0x93, 0x9e, 0x00, 0x7c,
|
||||
0x3e, 0x3f, 0xbe, 0x2d, 0x2e, 0x52, 0xb8, 0x67, 0x4f, 0x1f, 0x13, 0x13,
|
||||
0x97, 0x18, 0x19, 0x79, 0xf1, 0xba, 0x7b, 0x83, 0x33, 0x0b, 0x09, 0x9e,
|
||||
0x9c, 0x5e, 0x44, 0x57, 0x15, 0x2c, 0x29, 0x69, 0xf0, 0xeb, 0x7c, 0xf7,
|
||||
0xc1, 0x83, 0xa8, 0x9b, 0xe0, 0x28, 0x65, 0x98, 0x1c, 0xfb, 0xfe, 0xb3,
|
||||
0x5c, 0x4e, 0x3a, 0x9c, 0x7d, 0x2c, 0x91, 0xe1, 0x89, 0x48, 0x8c, 0x43,
|
||||
0x8d, 0x55, 0xd7, 0xfd, 0x9c, 0x5e, 0xdb, 0x5a, 0xc7, 0x57, 0xee, 0xdb,
|
||||
0xcb, 0xef, 0x3e, 0x71, 0x9e, 0xa4, 0x69, 0x62, 0xda, 0xf0, 0xb1, 0x67,
|
||||
0x2e, 0x12, 0xf2, 0x68, 0xbc, 0x7d, 0x47, 0xd3, 0xb6, 0x06, 0xf5, 0x55,
|
||||
0x01, 0x1d, 0x0a, 0x85, 0x78, 0xfd, 0xeb, 0x5f, 0xcf, 0x53, 0x4f, 0x3d,
|
||||
0xc5, 0xc2, 0xc2, 0x02, 0x86, 0x61, 0x30, 0x30, 0x70, 0x8e, 0xfe, 0xfe,
|
||||
0x01, 0x74, 0x5d, 0x77, 0xc1, 0x24, 0xd1, 0x34, 0xa7, 0xa8, 0xaa, 0xaa,
|
||||
0x2a, 0x0e, 0x1e, 0x3c, 0x58, 0x4c, 0xd9, 0xbc, 0xa1, 0xfc, 0x48, 0x51,
|
||||
0x8a, 0x8a, 0x86, 0x94, 0x92, 0x8b, 0x17, 0x2f, 0x32, 0x32, 0x32, 0x72,
|
||||
0x45, 0x2a, 0x71, 0xe4, 0xc8, 0x11, 0xee, 0xbc, 0xf3, 0x8e, 0x2d, 0xab,
|
||||
0x26, 0x07, 0x0f, 0x1e, 0x64, 0x76, 0x76, 0x96, 0x44, 0x22, 0x59, 0xcc,
|
||||
0x31, 0xb1, 0x6d, 0x7b, 0x4b, 0x81, 0xa6, 0x61, 0x4b, 0x7e, 0x3e, 0xb3,
|
||||
0xc8, 0xc8, 0x52, 0x8a, 0x0a, 0x8f, 0x46, 0xd2, 0xb0, 0x78, 0xff, 0x6d,
|
||||
0x61, 0xc4, 0x15, 0x52, 0xf8, 0x83, 0x1e, 0x8d, 0xfb, 0xdb, 0xeb, 0xf8,
|
||||
0xfa, 0xd0, 0x14, 0xb6, 0x74, 0x3c, 0xfc, 0xb7, 0x2f, 0xce, 0x70, 0xb8,
|
||||
0xa9, 0x7a, 0xeb, 0x0d, 0x6a, 0x83, 0x5d, 0x6f, 0xec, 0x6c, 0xe0, 0xcf,
|
||||
0x8f, 0xf5, 0xf2, 0xd1, 0xa7, 0x87, 0x89, 0xe5, 0x9c, 0x44, 0xa6, 0x0f,
|
||||
0x1e, 0x1f, 0x44, 0x57, 0x15, 0xde, 0xd2, 0xdd, 0x78, 0xeb, 0x02, 0x1a,
|
||||
0xa0, 0xbb, 0xbb, 0x8b, 0xea, 0xea, 0x2a, 0xfa, 0xfb, 0x07, 0x88, 0x44,
|
||||
0xa6, 0x88, 0xc5, 0x16, 0x8b, 0x69, 0xa4, 0x42, 0x08, 0x7c, 0x3e, 0x3f,
|
||||
0x35, 0x35, 0xd5, 0x34, 0x37, 0xb7, 0xd0, 0xdb, 0xbb, 0x8b, 0x70, 0xb8,
|
||||
0xa3, 0xf4, 0x87, 0x36, 0x8c, 0xa2, 0x82, 0xa0, 0x28, 0xca, 0x75, 0xf3,
|
||||
0xd4, 0xf6, 0xf6, 0x36, 0xea, 0xeb, 0xeb, 0x99, 0x9d, 0x9d, 0x75, 0x65,
|
||||
0x35, 0x79, 0x55, 0x6e, 0xbc, 0x5a, 0xe7, 0xb6, 0x2c, 0xab, 0xa4, 0x2e,
|
||||
0xd6, 0x06, 0x73, 0xeb, 0xc2, 0xe1, 0x30, 0x77, 0xde, 0x79, 0x27, 0x27,
|
||||
0x4f, 0x3e, 0xc7, 0xf2, 0xf2, 0x32, 0xba, 0xae, 0x13, 0x0e, 0xb7, 0x13,
|
||||
0xdc, 0x42, 0xe4, 0x39, 0xba, 0x9c, 0xe6, 0xeb, 0xc3, 0x11, 0x0c, 0xdb,
|
||||
0x59, 0xe4, 0xbc, 0xd6, 0xe7, 0xe1, 0x6d, 0xdd, 0x4d, 0x57, 0x5d, 0x79,
|
||||
0xf4, 0xfd, 0xb7, 0x85, 0x79, 0x68, 0x70, 0x8a, 0xa4, 0x61, 0x61, 0x23,
|
||||
0x79, 0x7c, 0x3a, 0xc6, 0xf1, 0x99, 0x45, 0x6c, 0x09, 0x19, 0xc3, 0xc2,
|
||||
0xb2, 0x25, 0xa6, 0x61, 0xad, 0x34, 0x66, 0x9c, 0x91, 0x40, 0xc3, 0x30,
|
||||
0x49, 0x01, 0xd2, 0x34, 0x37, 0xcc, 0x89, 0x7e, 0xe7, 0x8e, 0x26, 0xd2,
|
||||
0xa6, 0xc5, 0xc7, 0x9f, 0x1b, 0x61, 0x3a, 0x95, 0x23, 0x69, 0x58, 0xbc,
|
||||
0xf7, 0x89, 0x01, 0x32, 0xd6, 0x1e, 0xde, 0xb5, 0xb3, 0x65, 0x5b, 0x02,
|
||||
0xfa, 0x9a, 0xa7, 0x60, 0x2d, 0x2e, 0x2e, 0xb2, 0xb0, 0x10, 0x23, 0x95,
|
||||
0x4a, 0x61, 0x9a, 0x26, 0xaa, 0xaa, 0x12, 0x08, 0xf8, 0xa9, 0xae, 0xae,
|
||||
0xa6, 0xa1, 0xa1, 0x61, 0x43, 0xee, 0x79, 0xee, 0xdc, 0xb9, 0xa2, 0x0c,
|
||||
0xa6, 0xaa, 0x2a, 0x5d, 0x5d, 0xdd, 0x54, 0x57, 0x5f, 0x5f, 0x97, 0x3a,
|
||||
0x3b, 0x3b, 0xc7, 0xdc, 0xdc, 0x2c, 0xb9, 0x5c, 0xfe, 0xaa, 0x91, 0xbb,
|
||||
0xa2, 0x28, 0xb4, 0xb6, 0xb6, 0x16, 0x27, 0x1d, 0xcc, 0xcc, 0xcc, 0x12,
|
||||
0x89, 0x44, 0x90, 0xd2, 0x46, 0x4a, 0x68, 0x6c, 0x6c, 0xa0, 0xa3, 0xa3,
|
||||
0x63, 0x03, 0x6a, 0x23, 0x19, 0x1f, 0x1f, 0x67, 0x71, 0x31, 0x8e, 0xdf,
|
||||
0xef, 0x27, 0x1c, 0x6e, 0xa7, 0xa2, 0xe2, 0xea, 0xa3, 0x78, 0xd3, 0xe9,
|
||||
0x1c, 0xdf, 0x1d, 0x99, 0x41, 0x15, 0x02, 0x4b, 0x4a, 0xc2, 0x15, 0x3e,
|
||||
0xde, 0xd4, 0xd9, 0xb0, 0xa5, 0x97, 0x02, 0x7d, 0x75, 0x70, 0xca, 0x19,
|
||||
0x84, 0x91, 0xe0, 0xd5, 0x14, 0xee, 0xaa, 0x0f, 0xb1, 0x98, 0x33, 0xe8,
|
||||
0x8f, 0x25, 0xd1, 0x14, 0x41, 0xde, 0x92, 0xbc, 0xef, 0xb6, 0x36, 0x2a,
|
||||
0x3d, 0x1a, 0x96, 0x94, 0x9c, 0x9a, 0x4f, 0xf0, 0x64, 0x64, 0x11, 0x5d,
|
||||
0x15, 0xe4, 0x2c, 0x9b, 0xb7, 0xf7, 0x34, 0xd1, 0xbd, 0xc1, 0x2a, 0xa7,
|
||||
0x39, 0xcb, 0xe6, 0x27, 0x93, 0x0b, 0xbc, 0xb8, 0x94, 0x46, 0x55, 0x04,
|
||||
0x86, 0x2d, 0x69, 0x09, 0x78, 0xf9, 0xcd, 0x1d, 0xcd, 0xdb, 0x52, 0xf9,
|
||||
0x28, 0xcf, 0x29, 0xbc, 0x45, 0x6d, 0xbb, 0xce, 0x63, 0xd4, 0xa4, 0x94,
|
||||
0x48, 0xdb, 0xe9, 0xce, 0x9c, 0x8f, 0xe5, 0x7c, 0x6c, 0x1b, 0xdb, 0xb6,
|
||||
0xb1, 0x6d, 0x0b, 0x5b, 0x5a, 0xce, 0x31, 0xb6, 0x8d, 0x94, 0x56, 0x31,
|
||||
0x93, 0x6e, 0xe5, 0xff, 0x95, 0x73, 0xb1, 0x6d, 0xd7, 0x03, 0x4a, 0x90,
|
||||
0x12, 0xcb, 0x2d, 0x1b, 0xf7, 0x63, 0xe3, 0x78, 0x47, 0x6c, 0x1b, 0x89,
|
||||
0x5b, 0x8e, 0x74, 0x45, 0x25, 0xf7, 0xbb, 0xfb, 0x4f, 0xf1, 0x3c, 0x49,
|
||||
0xe9, 0xdf, 0xd5, 0x11, 0x62, 0xc1, 0xdb, 0xba, 0xcd, 0x13, 0xe7, 0x10,
|
||||
0x59, 0x42, 0x2e, 0xe5, 0x3a, 0x9e, 0x59, 0xd8, 0x2e, 0x41, 0x8a, 0xab,
|
||||
0x52, 0x97, 0x86, 0x96, 0x9d, 0xb4, 0x76, 0xed, 0xdf, 0x5e, 0x9e, 0x6c,
|
||||
0x7b, 0x73, 0x68, 0xe9, 0xac, 0x6a, 0x82, 0x0b, 0xc6, 0x02, 0x90, 0xdd,
|
||||
0x8f, 0x65, 0x99, 0xd8, 0xb6, 0x05, 0xb6, 0x03, 0x76, 0xcb, 0xb2, 0x8a,
|
||||
0xc7, 0x49, 0xdb, 0xc2, 0xb2, 0x6d, 0x27, 0xa3, 0x4c, 0x9a, 0xee, 0x36,
|
||||
0xdb, 0x05, 0xa6, 0xc4, 0xb2, 0x2c, 0x6c, 0xf7, 0x3b, 0xd2, 0xc6, 0x76,
|
||||
0x01, 0x28, 0x0b, 0x80, 0xb6, 0x25, 0x12, 0xcb, 0x01, 0x65, 0x11, 0xd0,
|
||||
0x2e, 0xf8, 0x65, 0xa1, 0x4e, 0xab, 0x00, 0x6d, 0xaf, 0x06, 0xb4, 0x74,
|
||||
0xcb, 0x76, 0x21, 0xb9, 0x16, 0xd0, 0x72, 0x15, 0x70, 0xc1, 0x01, 0xaf,
|
||||
0x90, 0x28, 0xc2, 0x49, 0x8e, 0x97, 0xd8, 0x20, 0x15, 0x9c, 0x29, 0xa8,
|
||||
0x9b, 0xfc, 0xf0, 0x42, 0xe0, 0xf7, 0x55, 0x94, 0x5d, 0xfa, 0x2f, 0x0a,
|
||||
0xa0, 0x05, 0x80, 0xa2, 0x82, 0x90, 0x08, 0xa9, 0x22, 0x50, 0x91, 0xd2,
|
||||
0x46, 0x2d, 0x78, 0x4e, 0x59, 0xf0, 0xc6, 0x2e, 0xd8, 0x5c, 0xcf, 0x69,
|
||||
0xbb, 0x00, 0xa5, 0xe0, 0xd9, 0x0b, 0x5e, 0xd4, 0x05, 0x5a, 0x31, 0x80,
|
||||
0xb1, 0x6d, 0x24, 0x8e, 0x37, 0x2f, 0x82, 0xb2, 0xe0, 0x8d, 0x5d, 0xb8,
|
||||
0x39, 0x13, 0x67, 0x65, 0x11, 0xa4, 0x05, 0x1e, 0x5b, 0x68, 0x6c, 0x05,
|
||||
0xb0, 0xaf, 0xfc, 0x5f, 0x00, 0xb1, 0x5c, 0x9f, 0xb6, 0x5a, 0x2c, 0x77,
|
||||
0x7d, 0x07, 0xab, 0x20, 0x98, 0xcb, 0xe4, 0x38, 0xb3, 0xb0, 0x8c, 0x61,
|
||||
0x3b, 0xc7, 0x49, 0xdb, 0x76, 0x07, 0x38, 0xe4, 0x26, 0x9e, 0x4c, 0x30,
|
||||
0xb1, 0xac, 0xe2, 0xcd, 0xcd, 0xb3, 0xba, 0x64, 0xe9, 0xd6, 0xf1, 0x4d,
|
||||
0x9d, 0x0d, 0x28, 0xc2, 0xe1, 0xb1, 0xdf, 0x18, 0x9e, 0xe6, 0x27, 0x93,
|
||||
0x0b, 0x7c, 0xe4, 0x60, 0x17, 0xaf, 0x6a, 0x08, 0xf1, 0x27, 0x27, 0x47,
|
||||
0x98, 0xcd, 0xe4, 0xf9, 0xf3, 0x63, 0x7d, 0x04, 0x34, 0x85, 0x68, 0x26,
|
||||
0xcf, 0xdb, 0x1e, 0x39, 0xcd, 0x3b, 0x76, 0x34, 0x73, 0xb4, 0xa9, 0x8a,
|
||||
0xcf, 0x9d, 0xbd, 0xc4, 0x72, 0xde, 0x2a, 0xe1, 0xb2, 0x3e, 0x55, 0xe1,
|
||||
0xdf, 0xf7, 0xb6, 0xd2, 0x12, 0xd0, 0xf9, 0xd3, 0x17, 0xc6, 0xc8, 0x98,
|
||||
0x76, 0x31, 0xa8, 0x34, 0xa5, 0xe4, 0x53, 0x77, 0xef, 0x62, 0x6f, 0x6d,
|
||||
0x05, 0xdf, 0x1e, 0x99, 0xe6, 0xdb, 0xc3, 0xd3, 0xee, 0xd4, 0x2c, 0x49,
|
||||
0xbd, 0x57, 0xe7, 0x1d, 0x3b, 0x9a, 0xf8, 0x95, 0x8e, 0x7a, 0x14, 0x21,
|
||||
0x58, 0xc8, 0x19, 0x7c, 0xf4, 0xe9, 0x61, 0xa6, 0x92, 0xb9, 0xe2, 0xc2,
|
||||
0x37, 0x59, 0xcb, 0xe6, 0xbd, 0x7d, 0x6d, 0xfc, 0xfa, 0x0e, 0x27, 0x50,
|
||||
0x9d, 0x4e, 0xe7, 0xf8, 0xf0, 0x89, 0x21, 0x76, 0x54, 0x05, 0xf8, 0xc3,
|
||||
0xfd, 0x5d, 0x54, 0xad, 0xca, 0xf5, 0x58, 0xca, 0x9b, 0x7c, 0xf9, 0xc2,
|
||||
0x24, 0x27, 0x66, 0xe2, 0x78, 0x55, 0x85, 0x5f, 0xed, 0xac, 0xe7, 0x6d,
|
||||
0xdd, 0x4d, 0x04, 0xdc, 0x75, 0x40, 0x3e, 0xf9, 0xfc, 0x28, 0xcf, 0xcc,
|
||||
0xad, 0xe4, 0x8f, 0x9b, 0xb6, 0xe4, 0xf6, 0xba, 0x0a, 0x3e, 0x7c, 0xa0,
|
||||
0x6b, 0xc3, 0xe5, 0x81, 0x5f, 0x3e, 0x0f, 0x2d, 0x9c, 0x85, 0xab, 0x56,
|
||||
0x1e, 0xea, 0xf6, 0x1e, 0xf7, 0x7f, 0x64, 0x68, 0x9a, 0xff, 0x7c, 0x69,
|
||||
0x98, 0x94, 0x61, 0xad, 0xe9, 0x7f, 0xc5, 0xa6, 0xe2, 0xb7, 0x1c, 0xbf,
|
||||
0xb8, 0x81, 0x44, 0x67, 0x73, 0x77, 0x63, 0x35, 0xbf, 0xdc, 0x51, 0x8f,
|
||||
0x2e, 0x04, 0xb6, 0x84, 0xb1, 0x44, 0x9a, 0x13, 0x33, 0x8b, 0x2c, 0xe5,
|
||||
0xdb, 0x99, 0x4c, 0x65, 0xf9, 0xe1, 0x44, 0x94, 0xb3, 0x0b, 0x09, 0x42,
|
||||
0xba, 0xc6, 0xa7, 0x8e, 0xec, 0x26, 0x67, 0xdb, 0xfc, 0x2c, 0xb2, 0xc0,
|
||||
0xde, 0xda, 0x0a, 0xde, 0xd4, 0xd9, 0xc0, 0xbe, 0xda, 0x0a, 0x32, 0xa6,
|
||||
0xcd, 0xd7, 0x86, 0x26, 0xc9, 0x9a, 0x92, 0xff, 0xb4, 0x2f, 0x8c, 0xa6,
|
||||
0x08, 0x2a, 0x75, 0x8d, 0xc7, 0xa6, 0x62, 0x3c, 0x7c, 0x29, 0xca, 0xaf,
|
||||
0xef, 0x68, 0xa6, 0xbb, 0xd2, 0x8f, 0x2d, 0x9d, 0xe4, 0xfc, 0x0a, 0x8f,
|
||||
0x4a, 0x22, 0x6f, 0xf1, 0x37, 0x17, 0xa6, 0x98, 0x48, 0x64, 0x78, 0x63,
|
||||
0x67, 0x23, 0x75, 0x3e, 0x0f, 0x27, 0x66, 0xe3, 0xbc, 0xe3, 0x27, 0xa7,
|
||||
0x79, 0x4f, 0x6f, 0x1b, 0x5f, 0xbc, 0xe7, 0x36, 0x86, 0x16, 0x53, 0x7c,
|
||||
0xe5, 0xfc, 0x24, 0xf7, 0xb6, 0xd6, 0xf2, 0x4b, 0xed, 0xb5, 0xe4, 0x2d,
|
||||
0x49, 0xde, 0xb6, 0x69, 0x0a, 0x78, 0x01, 0x27, 0x68, 0xfd, 0xdf, 0xfd,
|
||||
0x13, 0x7c, 0x67, 0x64, 0x86, 0x06, 0x9f, 0xce, 0x8e, 0xca, 0x00, 0xef,
|
||||
0xee, 0x75, 0xd2, 0x66, 0xa7, 0x52, 0x39, 0xee, 0xfb, 0xa7, 0x67, 0x49,
|
||||
0x1a, 0x16, 0x6f, 0xef, 0x69, 0x22, 0x65, 0x58, 0xfc, 0xfe, 0xcf, 0x06,
|
||||
0xf9, 0x97, 0xa9, 0x45, 0x3e, 0x77, 0xac, 0x17, 0x01, 0x3c, 0x34, 0x34,
|
||||
0x45, 0xce, 0xb6, 0x79, 0x4f, 0x6f, 0x5b, 0xb1, 0x6e, 0x5d, 0x21, 0xff,
|
||||
0x86, 0xef, 0x27, 0xff, 0x57, 0x27, 0xdb, 0xfd, 0xa2, 0x99, 0x69, 0x64,
|
||||
0x37, 0x1c, 0x8a, 0xf7, 0x78, 0x54, 0x2e, 0xc5, 0x62, 0x34, 0xa8, 0x16,
|
||||
0x35, 0x8a, 0xdc, 0x92, 0xce, 0xab, 0x6a, 0xba, 0xa3, 0x41, 0xaf, 0xd9,
|
||||
0x9d, 0xb1, 0x6c, 0xde, 0xd8, 0x59, 0x5f, 0x32, 0x48, 0xe1, 0xcc, 0xc0,
|
||||
0x76, 0x72, 0x37, 0x04, 0x02, 0x4d, 0x08, 0x82, 0x9a, 0xca, 0x5f, 0x0e,
|
||||
0x4c, 0xf0, 0xf6, 0x9e, 0x26, 0xe7, 0x5d, 0x2b, 0xae, 0x02, 0xd2, 0x13,
|
||||
0xf2, 0xf3, 0x5f, 0xdc, 0x44, 0xa4, 0x1f, 0x8c, 0xcf, 0xb2, 0x80, 0xc1,
|
||||
0x27, 0x0e, 0xed, 0x04, 0x1c, 0x56, 0xf5, 0xb3, 0xe9, 0x45, 0x02, 0x9a,
|
||||
0xca, 0x7f, 0xdc, 0x1b, 0xe6, 0xe8, 0x1a, 0x4d, 0x3a, 0x96, 0x33, 0x50,
|
||||
0x04, 0x74, 0x87, 0xfc, 0xfc, 0xf1, 0x5d, 0x3d, 0x34, 0xfa, 0x75, 0xb2,
|
||||
0x96, 0xc5, 0xc1, 0xef, 0x9d, 0xe0, 0xef, 0x46, 0x67, 0xf8, 0xe2, 0x3d,
|
||||
0xb7, 0xa1, 0x08, 0x50, 0x14, 0xc1, 0x2f, 0xb5, 0xd7, 0xf2, 0x5f, 0xef,
|
||||
0xda, 0xb1, 0x5e, 0xad, 0xca, 0x59, 0x7c, 0x63, 0x38, 0x42, 0x53, 0x40,
|
||||
0x07, 0x09, 0x8f, 0x47, 0x62, 0xbc, 0xa5, 0xbb, 0x91, 0x90, 0xae, 0xf1,
|
||||
0x0f, 0xa3, 0x33, 0xcc, 0x67, 0x0c, 0x3e, 0x7e, 0x68, 0x07, 0x7f, 0x70,
|
||||
0x7b, 0x27, 0x00, 0xbf, 0x36, 0x36, 0xc7, 0x40, 0x2c, 0x49, 0x3c, 0x67,
|
||||
0x50, 0xeb, 0xf3, 0xa0, 0x2a, 0x82, 0x06, 0x5d, 0x2f, 0xd6, 0xf9, 0x17,
|
||||
0x4a, 0x87, 0xfe, 0x85, 0x8a, 0xde, 0x6d, 0x8b, 0xd1, 0x0b, 0xc7, 0x37,
|
||||
0x5c, 0x0e, 0x4b, 0x13, 0x82, 0xc3, 0x46, 0x8a, 0xbe, 0x26, 0x73, 0x4b,
|
||||
0x51, 0x91, 0xb4, 0x6d, 0xba, 0xfa, 0x8e, 0xe1, 0xf3, 0x57, 0xb2, 0x96,
|
||||
0xc8, 0xd8, 0x52, 0xd2, 0x53, 0x19, 0xb8, 0xe2, 0xa8, 0x9b, 0x2d, 0x9d,
|
||||
0xa4, 0xfe, 0xa4, 0x61, 0xf1, 0xa1, 0xe3, 0x43, 0x3c, 0xf4, 0xda, 0x7d,
|
||||
0x20, 0xd6, 0x2f, 0xe4, 0xb8, 0x8a, 0x69, 0xb9, 0xd4, 0xc2, 0x46, 0x08,
|
||||
0xa7, 0x1b, 0xff, 0x97, 0xa9, 0x18, 0x0b, 0x59, 0x83, 0x06, 0x9f, 0xce,
|
||||
0xa1, 0xc6, 0x2a, 0x56, 0xcf, 0xa5, 0x95, 0x12, 0x46, 0x97, 0x33, 0x9c,
|
||||
0x5d, 0x48, 0xf0, 0xb7, 0xc3, 0x11, 0x2c, 0x29, 0xf9, 0x90, 0x0b, 0xc0,
|
||||
0xc2, 0x0d, 0x5e, 0x58, 0x4c, 0xf2, 0x93, 0xcb, 0x0b, 0xa8, 0x02, 0xee,
|
||||
0x6e, 0xaa, 0x2e, 0x2e, 0x99, 0xf0, 0xbd, 0x17, 0x67, 0x58, 0x32, 0x4c,
|
||||
0xde, 0xb7, 0xa7, 0x1d, 0x4d, 0x11, 0x7c, 0x73, 0x78, 0x9a, 0xd3, 0x0b,
|
||||
0x09, 0xee, 0x69, 0xa9, 0x71, 0xe7, 0x63, 0x3a, 0x0b, 0xd5, 0x14, 0xec,
|
||||
0x2d, 0xdd, 0x8d, 0xc5, 0x01, 0x99, 0x78, 0xde, 0x40, 0xe0, 0x8c, 0x72,
|
||||
0xfe, 0x78, 0xc2, 0x49, 0x85, 0xe8, 0xad, 0x0e, 0xb2, 0xb3, 0x2a, 0x50,
|
||||
0x06, 0xf4, 0x8d, 0xb6, 0xe4, 0x52, 0x94, 0x68, 0x64, 0x78, 0xc3, 0xc1,
|
||||
0x1b, 0x55, 0x11, 0xb4, 0x69, 0x2a, 0x1d, 0x5b, 0x0c, 0xf1, 0x15, 0x8f,
|
||||
0xce, 0xde, 0xf0, 0xf5, 0xcf, 0x5e, 0xb1, 0xa4, 0xa4, 0xaf, 0x26, 0xc8,
|
||||
0x81, 0xda, 0x4a, 0xfe, 0xa2, 0x7f, 0x9c, 0xcf, 0x9e, 0x19, 0xdb, 0xd2,
|
||||
0x1b, 0xae, 0x0a, 0xde, 0xde, 0xb0, 0x6d, 0xfe, 0x69, 0x7c, 0x8e, 0x47,
|
||||
0x27, 0x63, 0x1c, 0x6d, 0xaa, 0xe2, 0xae, 0x86, 0x50, 0x91, 0x4f, 0x0b,
|
||||
0x04, 0x59, 0xcb, 0xe2, 0x4b, 0xe7, 0x2f, 0xf3, 0xdd, 0x91, 0x19, 0x1e,
|
||||
0x6c, 0xaf, 0xe5, 0x93, 0x87, 0x77, 0xf1, 0x1b, 0x3b, 0x9a, 0x4b, 0x9a,
|
||||
0xde, 0xe9, 0xf9, 0x04, 0x9f, 0xc9, 0x8e, 0xd3, 0xec, 0xd7, 0xd9, 0x55,
|
||||
0x1d, 0xa4, 0xc2, 0xa3, 0x62, 0x4b, 0xc9, 0x17, 0xcf, 0x5d, 0xa6, 0xc9,
|
||||
0xaf, 0xf3, 0x9e, 0xde, 0x36, 0xce, 0x2f, 0xa6, 0xf8, 0xc2, 0xd9, 0x09,
|
||||
0x9e, 0x9c, 0x5e, 0x74, 0x00, 0x7d, 0xc5, 0x3e, 0xab, 0x70, 0x75, 0x88,
|
||||
0x1b, 0x16, 0x9f, 0x3f, 0x7b, 0x09, 0x5d, 0x11, 0xfc, 0xf6, 0xee, 0x96,
|
||||
0x32, 0xa0, 0x6f, 0x86, 0x29, 0x9a, 0x87, 0x8e, 0x5d, 0x87, 0xd7, 0xfd,
|
||||
0x1c, 0xaa, 0x10, 0x8c, 0x2f, 0x67, 0x78, 0x6c, 0x2e, 0x4e, 0xc6, 0xdc,
|
||||
0xca, 0x48, 0xa5, 0xc4, 0xa3, 0xfb, 0x39, 0x75, 0x71, 0x7a, 0x5d, 0xe0,
|
||||
0xe9, 0x70, 0x59, 0x8d, 0x5f, 0xed, 0x68, 0xc0, 0xaf, 0x5d, 0x19, 0xa0,
|
||||
0x59, 0xd3, 0xe6, 0xc3, 0x07, 0xbb, 0x78, 0x7c, 0x3a, 0xc6, 0x77, 0x47,
|
||||
0x66, 0xdc, 0x00, 0x4d, 0x6c, 0xe1, 0xea, 0x12, 0xaf, 0xaa, 0xf0, 0xe1,
|
||||
0x83, 0xdd, 0xbc, 0xb6, 0xad, 0x16, 0x4d, 0x88, 0x75, 0xab, 0x9a, 0x6a,
|
||||
0x8a, 0xa0, 0x39, 0xe0, 0x25, 0xa4, 0xab, 0x54, 0x79, 0x3d, 0xbc, 0xb5,
|
||||
0xbb, 0x69, 0x1d, 0x85, 0x7a, 0x5d, 0xb8, 0x9e, 0xff, 0x76, 0x68, 0x27,
|
||||
0x59, 0xd3, 0x2a, 0x26, 0x48, 0xfd, 0xf3, 0xe5, 0x79, 0x2e, 0x2e, 0xa7,
|
||||
0x50, 0x85, 0xe0, 0x8f, 0x4f, 0x8e, 0x30, 0x97, 0xc9, 0xa3, 0x2a, 0xf0,
|
||||
0x7f, 0x46, 0x67, 0x79, 0x6f, 0x5f, 0x5b, 0x51, 0x48, 0xd2, 0x57, 0x5d,
|
||||
0x6f, 0x31, 0x67, 0x30, 0x9b, 0xc9, 0xd3, 0x59, 0xe1, 0x2b, 0xae, 0x1b,
|
||||
0xd9, 0xe8, 0xd3, 0xf9, 0xce, 0x83, 0xfb, 0xb1, 0x6c, 0x49, 0xe5, 0xbf,
|
||||
0x92, 0xc9, 0x03, 0xdb, 0x0e, 0xd0, 0x81, 0x8a, 0x5a, 0x02, 0x15, 0x35,
|
||||
0x1b, 0xc8, 0x6f, 0x0a, 0x8f, 0x0e, 0x4d, 0xf2, 0x95, 0x98, 0xbd, 0xe1,
|
||||
0x5a, 0x70, 0x9b, 0x68, 0x76, 0x88, 0x99, 0xe1, 0x75, 0x9b, 0x73, 0xb6,
|
||||
0xe4, 0xbe, 0x96, 0x1a, 0x1e, 0x6c, 0xaf, 0xc3, 0x7f, 0x95, 0x0c, 0x5c,
|
||||
0x89, 0x24, 0xa4, 0x6b, 0x7c, 0xe6, 0x48, 0x2f, 0x0f, 0x3e, 0xfc, 0x1c,
|
||||
0xae, 0x10, 0x79, 0xd5, 0x4b, 0xdb, 0xae, 0x14, 0x69, 0xd9, 0x12, 0xd3,
|
||||
0x92, 0xa4, 0x6d, 0x8b, 0x78, 0xce, 0xa0, 0x39, 0xe0, 0x75, 0x01, 0x25,
|
||||
0xd1, 0x14, 0xc1, 0x7b, 0xfa, 0xda, 0x68, 0xf2, 0x7b, 0xf8, 0x1f, 0xa7,
|
||||
0xc6, 0x78, 0xdf, 0x13, 0x03, 0x7c, 0xed, 0xb5, 0xfb, 0x4a, 0x56, 0xa7,
|
||||
0x0e, 0x79, 0x34, 0xaa, 0x75, 0x0d, 0x56, 0x01, 0xee, 0xf3, 0x67, 0x2f,
|
||||
0xe1, 0x11, 0x0a, 0xff, 0xf3, 0xee, 0x5d, 0x04, 0x35, 0x15, 0x8f, 0x2a,
|
||||
0x78, 0x32, 0xb2, 0xc8, 0xd7, 0x87, 0x23, 0xfc, 0x7c, 0x26, 0x4e, 0x77,
|
||||
0xa5, 0x9f, 0xac, 0x69, 0xf3, 0x8f, 0x63, 0x73, 0x1c, 0x6e, 0xac, 0x22,
|
||||
0x9a, 0xc9, 0xf3, 0xd9, 0x33, 0xe3, 0x78, 0x55, 0x85, 0x4f, 0x1f, 0xd9,
|
||||
0x4d, 0x83, 0x4f, 0xc7, 0x96, 0x12, 0x1b, 0x30, 0x2c, 0x1b, 0xd3, 0x96,
|
||||
0x44, 0x33, 0x79, 0x74, 0x45, 0x50, 0xef, 0xd7, 0xd1, 0x5e, 0xc1, 0x21,
|
||||
0xc8, 0x6d, 0x07, 0x68, 0x67, 0xe8, 0x7d, 0xe3, 0x07, 0x3a, 0xb0, 0x64,
|
||||
0x30, 0x91, 0x95, 0x88, 0x2d, 0xa5, 0x81, 0x0b, 0x2c, 0x33, 0xbf, 0x61,
|
||||
0xc7, 0x9b, 0x31, 0x2c, 0xfa, 0x6a, 0x2a, 0xd6, 0xd0, 0x07, 0x49, 0xce,
|
||||
0xb2, 0x49, 0x18, 0x4e, 0x5e, 0x85, 0x44, 0x92, 0x34, 0x4c, 0x74, 0x45,
|
||||
0x60, 0x4a, 0xc9, 0xe1, 0xa6, 0x2a, 0x3e, 0x7a, 0xb0, 0x9b, 0x8f, 0x9f,
|
||||
0x1c, 0xa1, 0x4a, 0x2f, 0x55, 0x92, 0x12, 0x86, 0xc5, 0xf2, 0x2a, 0xd5,
|
||||
0x45, 0x13, 0x0a, 0x35, 0xba, 0xc6, 0x72, 0xde, 0xe4, 0x03, 0x3f, 0xbf,
|
||||
0x80, 0x5f, 0x53, 0x91, 0xd2, 0x91, 0xed, 0xbe, 0xf7, 0xe0, 0x01, 0xf6,
|
||||
0xd6, 0x56, 0x90, 0x32, 0x2c, 0x6c, 0xe9, 0x78, 0xd1, 0x3f, 0xd8, 0xdf,
|
||||
0x45, 0xc2, 0xb0, 0xf8, 0xf4, 0xe9, 0x31, 0x52, 0xa6, 0xcd, 0x77, 0xee,
|
||||
0xbf, 0x1d, 0x4b, 0x82, 0x9d, 0x37, 0xc9, 0xac, 0xc9, 0x57, 0xf9, 0xd9,
|
||||
0x74, 0x9c, 0x9f, 0xcd, 0xc4, 0x39, 0xd2, 0x54, 0xc5, 0xfb, 0xf7, 0x86,
|
||||
0x8b, 0x23, 0x86, 0xbd, 0xd5, 0x41, 0x1e, 0x8f, 0xc4, 0xf8, 0xec, 0x99,
|
||||
0x71, 0x7e, 0xf0, 0x86, 0x3b, 0xf8, 0xc2, 0xbf, 0xe9, 0xe3, 0x73, 0x67,
|
||||
0x2f, 0xf1, 0xe0, 0xc3, 0xcf, 0x23, 0x90, 0x74, 0x55, 0x06, 0xf8, 0xd8,
|
||||
0x1d, 0xdd, 0x74, 0x87, 0x02, 0x58, 0x52, 0x12, 0xd0, 0x54, 0x06, 0xe3,
|
||||
0x29, 0x8e, 0xfc, 0xe3, 0x33, 0x6e, 0xdd, 0x6c, 0x8e, 0x34, 0x55, 0xf3,
|
||||
0x85, 0x57, 0xef, 0xa1, 0xed, 0x15, 0x5c, 0x26, 0x61, 0x5b, 0x0d, 0x7d,
|
||||
0x1b, 0xb9, 0x34, 0x83, 0xa7, 0x7f, 0x8a, 0x61, 0xe4, 0x36, 0x80, 0xa7,
|
||||
0xb3, 0x60, 0xa2, 0x61, 0x6d, 0xed, 0x76, 0x2d, 0xcb, 0xe0, 0xc0, 0xd1,
|
||||
0xb7, 0xa2, 0x7b, 0x03, 0xeb, 0x21, 0x2d, 0x1d, 0xbd, 0x78, 0x75, 0x8e,
|
||||
0x86, 0x94, 0x30, 0x9f, 0xcd, 0xb3, 0x64, 0x98, 0xb4, 0x04, 0xbc, 0xe8,
|
||||
0x8a, 0xc2, 0xe5, 0x54, 0x16, 0x55, 0x40, 0x47, 0x85, 0x1f, 0x81, 0x93,
|
||||
0x57, 0x31, 0x9f, 0xcd, 0x53, 0xeb, 0xf5, 0x94, 0x2c, 0x78, 0x3e, 0xba,
|
||||
0x9c, 0xc6, 0x92, 0xb0, 0x6b, 0x15, 0x07, 0xcd, 0x59, 0x36, 0xb3, 0x99,
|
||||
0x3c, 0x69, 0xd3, 0x2a, 0xe1, 0xb4, 0x1d, 0x15, 0x3e, 0x7c, 0xaa, 0xc2,
|
||||
0xe5, 0x54, 0x0e, 0xa4, 0xa4, 0x35, 0xe8, 0xc3, 0xe3, 0xe6, 0x68, 0x5c,
|
||||
0x4a, 0x66, 0x90, 0x12, 0xc2, 0x15, 0x3e, 0x24, 0x92, 0xf1, 0xe5, 0x2c,
|
||||
0xf5, 0x3e, 0x4f, 0x89, 0x2e, 0xbc, 0x98, 0x33, 0x89, 0x66, 0x72, 0x54,
|
||||
0x7b, 0x3d, 0xc5, 0x85, 0x1f, 0x0b, 0x7c, 0x3f, 0x92, 0xca, 0x91, 0xb5,
|
||||
0x6c, 0x7a, 0x42, 0x4e, 0x4e, 0x48, 0xc6, 0xb4, 0x89, 0x65, 0x0d, 0x84,
|
||||
0x70, 0x82, 0x5b, 0xaf, 0x2a, 0x8a, 0x1c, 0x7e, 0x29, 0xef, 0x50, 0x90,
|
||||
0xe2, 0x18, 0x16, 0x10, 0xd0, 0x54, 0x5a, 0x02, 0xde, 0xeb, 0x5a, 0x05,
|
||||
0xaa, 0x0c, 0xe8, 0x0d, 0x2c, 0x3e, 0x3f, 0xc9, 0xc8, 0xc0, 0xe3, 0x98,
|
||||
0xe6, 0x4b, 0x7b, 0xb9, 0xa4, 0x94, 0x12, 0xdd, 0x17, 0xe0, 0x8e, 0x57,
|
||||
0xbf, 0x13, 0x45, 0xb9, 0x75, 0xe6, 0xe3, 0x6d, 0x07, 0xdb, 0x56, 0x94,
|
||||
0x43, 0x4a, 0x9b, 0xea, 0xfa, 0xf5, 0xd3, 0xa8, 0x14, 0xe1, 0x78, 0xa6,
|
||||
0xcb, 0xc9, 0x2c, 0xa6, 0xb4, 0x29, 0xcc, 0x3c, 0xdb, 0xc8, 0x91, 0x08,
|
||||
0xb7, 0x9c, 0x8a, 0x8a, 0x46, 0x06, 0xe2, 0x69, 0x07, 0xd0, 0xee, 0x71,
|
||||
0x85, 0xa5, 0x80, 0x0b, 0x4b, 0x6d, 0x81, 0x33, 0x97, 0xaf, 0x70, 0xa2,
|
||||
0x10, 0x2b, 0x0a, 0xc0, 0xea, 0x0f, 0xab, 0x06, 0xae, 0x04, 0x94, 0x7c,
|
||||
0x5f, 0x5d, 0x0f, 0xb1, 0xaa, 0x0e, 0x45, 0x35, 0xdb, 0x2d, 0x44, 0x48,
|
||||
0x4a, 0x46, 0x14, 0x57, 0xbf, 0x1f, 0x6b, 0x75, 0x7d, 0xc4, 0x6a, 0x1d,
|
||||
0xa2, 0xa8, 0x89, 0xcb, 0x75, 0x72, 0x61, 0x09, 0x31, 0x13, 0x2b, 0xeb,
|
||||
0xe4, 0xad, 0x79, 0x51, 0x80, 0xbb, 0x6f, 0x4d, 0xf9, 0x6b, 0xee, 0xb3,
|
||||
0x74, 0xbb, 0x13, 0x80, 0xab, 0xaf, 0x90, 0x93, 0xbe, 0x65, 0xb2, 0xed,
|
||||
0xbe, 0x31, 0x3a, 0xcf, 0x1f, 0x3e, 0x3d, 0xe4, 0x4e, 0x4c, 0x55, 0x50,
|
||||
0x14, 0x81, 0x22, 0x24, 0x42, 0x28, 0xce, 0xff, 0x6a, 0x01, 0x1c, 0xce,
|
||||
0xf2, 0xb4, 0x8a, 0x3b, 0xc4, 0x2e, 0x14, 0x05, 0x55, 0x38, 0x92, 0x9f,
|
||||
0x47, 0x38, 0x83, 0x25, 0x9a, 0x70, 0x5e, 0x76, 0xa9, 0x00, 0x9a, 0x2a,
|
||||
0x50, 0x11, 0xa8, 0x8a, 0x40, 0x15, 0x02, 0x45, 0x71, 0xff, 0x17, 0x8e,
|
||||
0xee, 0xad, 0xb9, 0x6a, 0x84, 0x42, 0x61, 0xbf, 0x33, 0xe0, 0x51, 0xf8,
|
||||
0xd1, 0x3d, 0x38, 0xe5, 0x29, 0xee, 0x39, 0xce, 0x79, 0x0a, 0x8a, 0x70,
|
||||
0xae, 0xab, 0x28, 0xee, 0x39, 0x28, 0xc5, 0xe3, 0x34, 0x57, 0x82, 0x54,
|
||||
0x85, 0x13, 0x0d, 0xa8, 0x8a, 0x5b, 0x67, 0xa1, 0xa0, 0xba, 0xf5, 0x2a,
|
||||
0x94, 0xaf, 0xe0, 0xdc, 0xa7, 0xe2, 0x96, 0x2b, 0x84, 0x40, 0xc5, 0x99,
|
||||
0xfe, 0xa5, 0x28, 0x8a, 0xbb, 0xcf, 0xa1, 0x12, 0xc5, 0xed, 0x25, 0xe7,
|
||||
0x89, 0x62, 0xdd, 0x9c, 0x67, 0xb6, 0x7a, 0xbf, 0xf3, 0x5d, 0x75, 0x1b,
|
||||
0x84, 0xc0, 0x99, 0x9a, 0x57, 0xed, 0x55, 0xf1, 0xbf, 0x42, 0x88, 0xbe,
|
||||
0x65, 0xde, 0xb1, 0x12, 0x4d, 0xa5, 0xd0, 0xb1, 0xa9, 0xf6, 0xa9, 0x28,
|
||||
0x45, 0xe0, 0xca, 0xe2, 0x8f, 0x24, 0x5c, 0x37, 0x59, 0xf8, 0x91, 0x84,
|
||||
0x50, 0x50, 0x84, 0x86, 0x28, 0x00, 0xc7, 0x95, 0xcd, 0x34, 0x1c, 0xa0,
|
||||
0x3a, 0xa0, 0x2c, 0x00, 0xc7, 0x05, 0x84, 0xb2, 0x02, 0x8c, 0x02, 0xa0,
|
||||
0x34, 0x17, 0xec, 0x05, 0x90, 0x09, 0x51, 0x0a, 0x68, 0x8d, 0x15, 0xe0,
|
||||
0x15, 0x00, 0xad, 0x0a, 0x65, 0x05, 0x38, 0x62, 0x05, 0xd0, 0xaa, 0xc0,
|
||||
0x69, 0x2c, 0x6e, 0x59, 0x0e, 0xd8, 0x24, 0xaa, 0xa2, 0x38, 0xe5, 0x0a,
|
||||
0x05, 0xd5, 0x9d, 0x65, 0xae, 0xad, 0x05, 0x26, 0x4e, 0xb9, 0xc2, 0x6d,
|
||||
0x04, 0x4e, 0x1d, 0x14, 0x04, 0xee, 0x33, 0x58, 0x7d, 0xef, 0xac, 0xa9,
|
||||
0x2f, 0xab, 0xea, 0xe2, 0xd6, 0x5f, 0xb8, 0x3d, 0x8b, 0xe2, 0x96, 0x27,
|
||||
0xdc, 0x80, 0xdc, 0xe3, 0x36, 0xfc, 0x32, 0xe5, 0xb8, 0xa9, 0x54, 0x04,
|
||||
0x5e, 0xd3, 0x5c, 0x43, 0xbd, 0x4f, 0xc7, 0xa3, 0xac, 0xbc, 0x74, 0xad,
|
||||
0xd8, 0x9d, 0x17, 0x29, 0x81, 0x58, 0x4f, 0x0b, 0x44, 0xa1, 0x4b, 0x2f,
|
||||
0x00, 0x64, 0xe5, 0x78, 0x51, 0xf4, 0x4c, 0xab, 0xbe, 0xbb, 0x5d, 0xb4,
|
||||
0xd3, 0x68, 0xa4, 0xbb, 0xbf, 0x00, 0x14, 0x56, 0x28, 0x8b, 0x0b, 0x46,
|
||||
0xb1, 0x9a, 0xa2, 0x14, 0xc0, 0x21, 0x56, 0x68, 0x43, 0xf1, 0x3a, 0x52,
|
||||
0x94, 0xac, 0x2c, 0xaa, 0xac, 0x12, 0xe7, 0x4a, 0xeb, 0xe1, 0x1c, 0xa0,
|
||||
0xac, 0xa1, 0x3d, 0x45, 0x3a, 0x24, 0x56, 0x28, 0x4d, 0x09, 0x0d, 0xda,
|
||||
0x80, 0xba, 0x6c, 0xb8, 0x7f, 0x15, 0xdd, 0x28, 0x38, 0x00, 0x0a, 0xb4,
|
||||
0xa6, 0xd0, 0x90, 0x5f, 0xc1, 0x74, 0x8e, 0x72, 0x82, 0x7f, 0xd9, 0xb6,
|
||||
0x95, 0x95, 0xdf, 0x53, 0x58, 0xb6, 0x6d, 0x65, 0xff, 0x1f, 0x15, 0xa9,
|
||||
0x64, 0x27, 0x80, 0x33, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
|
||||
};
|
||||
unsigned int openair_logo_png_len = 4664;
|
||||
unsigned int openair_logo_png_len = 7026;
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.9 KiB |
@@ -0,0 +1,162 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "database.h"
|
||||
#include "utils.h"
|
||||
#include "../T_defs.h"
|
||||
#include "config.h"
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
printf(
|
||||
"options:\n"
|
||||
" -d <database file> this option is mandatory\n"
|
||||
" -o <output file> this option is mandatory\n"
|
||||
" -on <GROUP or ID> turn log ON for given GROUP or ID\n"
|
||||
" -off <GROUP or ID> turn log OFF for given GROUP or ID\n"
|
||||
" -ON turn all logs ON\n"
|
||||
" -OFF turn all logs OFF\n"
|
||||
" note: you may pass several -on/-off/-ON/-OFF,\n"
|
||||
" they will be processed in order\n"
|
||||
" by default, all is off\n"
|
||||
" -ip <host> connect to given IP address (default %s)\n"
|
||||
" -p <port> connect to given port (default %d)\n",
|
||||
DEFAULT_REMOTE_IP,
|
||||
DEFAULT_REMOTE_PORT
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
volatile int run = 1;
|
||||
|
||||
static int socket = -1;
|
||||
|
||||
void force_stop(int x)
|
||||
{
|
||||
printf("\ngently quit...\n");
|
||||
close(socket);
|
||||
socket = -1;
|
||||
run = 0;
|
||||
}
|
||||
|
||||
int main(int n, char **v)
|
||||
{
|
||||
char *database_filename = NULL;
|
||||
char *output_filename = NULL;
|
||||
FILE *out;
|
||||
void *database;
|
||||
char *ip = DEFAULT_REMOTE_IP;
|
||||
int port = DEFAULT_REMOTE_PORT;
|
||||
char **on_off_name;
|
||||
int *on_off_action;
|
||||
int on_off_n = 0;
|
||||
int *is_on;
|
||||
int number_of_events;
|
||||
int i;
|
||||
char mt;
|
||||
|
||||
/* write on a socket fails if the other end is closed and we get SIGPIPE */
|
||||
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
|
||||
|
||||
on_off_name = malloc(n * sizeof(char *)); if (on_off_name == NULL) abort();
|
||||
on_off_action = malloc(n * sizeof(int)); if (on_off_action == NULL) abort();
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
||||
if (!strcmp(v[i], "-d"))
|
||||
{ if (i > n-2) usage(); database_filename = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-o"))
|
||||
{ if (i > n-2) usage(); output_filename = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-p"))
|
||||
{ if (i > n-2) usage(); port = atoi(v[++i]); continue; }
|
||||
if (!strcmp(v[i], "-on")) { if (i > n-2) usage();
|
||||
on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=1; continue; }
|
||||
if (!strcmp(v[i], "-off")) { if (i > n-2) usage();
|
||||
on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=0; continue; }
|
||||
if (!strcmp(v[i], "-ON"))
|
||||
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; }
|
||||
if (!strcmp(v[i], "-OFF"))
|
||||
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; }
|
||||
usage();
|
||||
}
|
||||
|
||||
if (database_filename == NULL) {
|
||||
printf("ERROR: provide a database file (-d)\n");
|
||||
exit(1);
|
||||
}
|
||||
if (output_filename == NULL) {
|
||||
printf("ERROR: provide an output file (-o)\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
database = parse_database(database_filename);
|
||||
|
||||
load_config_file(database_filename);
|
||||
|
||||
number_of_events = number_of_ids(database);
|
||||
is_on = calloc(number_of_events, sizeof(int));
|
||||
if (is_on == NULL) abort();
|
||||
|
||||
for (i = 0; i < on_off_n; i++)
|
||||
on_off(database, on_off_name[i], is_on, on_off_action[i]);
|
||||
|
||||
socket = connect_to(ip, port);
|
||||
|
||||
/* activate selected traces */
|
||||
mt = 1;
|
||||
if (socket_send(socket, &mt, 1) == -1 ||
|
||||
socket_send(socket, &number_of_events, sizeof(int)) == -1 ||
|
||||
socket_send(socket, is_on, number_of_events * sizeof(int)) == -1)
|
||||
abort();
|
||||
|
||||
out = fopen(output_filename, "w");
|
||||
if (out == NULL) {
|
||||
perror(output_filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* exit on ctrl+c and ctrl+z */
|
||||
if (signal(SIGQUIT, force_stop) == SIG_ERR) abort();
|
||||
if (signal(SIGINT, force_stop) == SIG_ERR) abort();
|
||||
if (signal(SIGTSTP, force_stop) == SIG_ERR) abort();
|
||||
|
||||
/* read messages */
|
||||
while (run) {
|
||||
int type;
|
||||
int32_t length;
|
||||
char v[T_BUFFER_MAX];
|
||||
int vpos = 0;
|
||||
|
||||
if (fullread(socket, &length, 4) == -1) goto read_error;
|
||||
memcpy(v+vpos, &length, 4);
|
||||
vpos += 4;
|
||||
#ifdef T_SEND_TIME
|
||||
if (fullread(socket,v+vpos,sizeof(struct timespec))==-1) goto read_error;
|
||||
vpos += sizeof(struct timespec);
|
||||
length -= sizeof(struct timespec);
|
||||
#endif
|
||||
if (fullread(socket, &type, sizeof(int)) == -1) goto read_error;
|
||||
memcpy(v+vpos, &type, sizeof(int));
|
||||
vpos += sizeof(int);
|
||||
length -= sizeof(int);
|
||||
if (fullread(socket, v+vpos, length) == -1) goto read_error;
|
||||
vpos += length;
|
||||
|
||||
if (type == -1) append_received_config_chunk(v+vpos-length, length);
|
||||
if (type == -2) verify_config();
|
||||
|
||||
if (fwrite(v, vpos, 1, out) != 1) {
|
||||
printf("error saving data to file %s\n", output_filename);
|
||||
fclose(out);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
read_error:
|
||||
fclose(out);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <pthread.h>
|
||||
#include "utils.h"
|
||||
#include "../T_defs.h"
|
||||
|
||||
#define DEFAULT_REMOTE_PORT 2021
|
||||
|
||||
/* replay.c does not know anything about events - it just has the array
|
||||
* is_on that grows each time replay.c sees a type that does not fit in
|
||||
* there (the idea is to isolate replay.c as maximum by not using unneeded
|
||||
* information)
|
||||
*/
|
||||
int *is_on;
|
||||
int is_on_size;
|
||||
|
||||
/* this lock is used to protect access to is_on/is_on_size */
|
||||
pthread_mutex_t biglock = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
void set_is_on_size(int size)
|
||||
{
|
||||
is_on = realloc(is_on, size * sizeof(int)); if (is_on == NULL) abort();
|
||||
memset(is_on + is_on_size, 0, (size - is_on_size) * sizeof(int));
|
||||
is_on_size = size;
|
||||
}
|
||||
|
||||
void lock(void)
|
||||
{
|
||||
if (pthread_mutex_lock(&biglock)) abort();
|
||||
}
|
||||
|
||||
void unlock(void)
|
||||
{
|
||||
if (pthread_mutex_unlock(&biglock)) abort();
|
||||
}
|
||||
|
||||
#define QUIT(x) do { printf("%s\n", x); exit(1); } while(0)
|
||||
|
||||
void get_message(int s)
|
||||
{
|
||||
char t;
|
||||
int l;
|
||||
int id;
|
||||
int on;
|
||||
|
||||
if (read(s, &t, 1) != 1) QUIT("get_message fails");
|
||||
lock();
|
||||
switch (t) {
|
||||
case 0:
|
||||
/* toggle all those IDs */
|
||||
if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
|
||||
while (l) {
|
||||
if (read(s, &id, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
|
||||
if (id > is_on_size - 1) set_is_on_size(id + 1);
|
||||
is_on[id] = 1 - is_on[id];
|
||||
l--;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
/* set IDs as given */
|
||||
/* optimize? */
|
||||
if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
|
||||
if (l > is_on_size) set_is_on_size(l);
|
||||
id = 0;
|
||||
while (l) {
|
||||
if (read(s, &on, sizeof(int)) != sizeof(int))
|
||||
QUIT("get_message fails");
|
||||
is_on[id] = on;
|
||||
id++;
|
||||
l--;
|
||||
}
|
||||
break;
|
||||
case 2: break; /* do nothing, this message is to wait for local tracer */
|
||||
default: abort();
|
||||
}
|
||||
unlock();
|
||||
}
|
||||
|
||||
void *get_message_thread(void *_socket)
|
||||
{
|
||||
int socket = *(int *)_socket;
|
||||
|
||||
while (1) get_message(socket);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
printf(
|
||||
"options:\n"
|
||||
" -i <input file> this option is mandatory\n"
|
||||
" -p <port> wait connection on given port (default %d)\n"
|
||||
" -w user must press a key after each sent event\n",
|
||||
DEFAULT_REMOTE_PORT
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#define ERR printf("ERROR: read file %s failed\n", input_filename)
|
||||
|
||||
int main(int n, char **v)
|
||||
{
|
||||
int port = DEFAULT_REMOTE_PORT;
|
||||
char *input_filename = NULL;
|
||||
int i;
|
||||
int socket;
|
||||
FILE *in;
|
||||
int do_send;
|
||||
int do_wait = 0;
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
||||
if (!strcmp(v[i], "-i"))
|
||||
{ if (i > n-2) usage(); input_filename = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-p"))
|
||||
{ if (i > n-2) usage(); port = atoi(v[++i]); continue; }
|
||||
if (!strcmp(v[i], "-w")) { do_wait = 1; continue; }
|
||||
usage();
|
||||
}
|
||||
|
||||
if (input_filename == NULL) {
|
||||
printf("ERROR: provide an input file (-i)\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
in = fopen(input_filename, "r");
|
||||
if (in == NULL) { perror(input_filename); abort(); }
|
||||
|
||||
socket = get_connection("0.0.0.0", port);
|
||||
|
||||
/* get first message to activate selected traces */
|
||||
get_message(socket);
|
||||
|
||||
new_thread(get_message_thread, &socket);
|
||||
|
||||
while (1) {
|
||||
int type;
|
||||
int32_t length;
|
||||
char v[T_BUFFER_MAX];
|
||||
int vpos = 0;
|
||||
|
||||
/* read event from file */
|
||||
if (fread(&length, 4, 1, in) != 1) break;
|
||||
memcpy(v+vpos, &length, 4);
|
||||
vpos += 4;
|
||||
#ifdef T_SEND_TIME
|
||||
if (length < sizeof(struct timespec)) { ERR; break; }
|
||||
if (fread(v+vpos, sizeof(struct timespec), 1, in) != 1) { ERR; break; }
|
||||
vpos += sizeof(struct timespec);
|
||||
length -= sizeof(struct timespec);
|
||||
#endif
|
||||
if (length < sizeof(int)) { ERR; break; }
|
||||
if (fread(&type, sizeof(int), 1, in) != 1) { ERR; break; }
|
||||
memcpy(v+vpos, &type, sizeof(int));
|
||||
vpos += sizeof(int);
|
||||
length -= sizeof(int);
|
||||
if (length) if (fread(v+vpos, length, 1, in) != 1) { ERR; break; }
|
||||
vpos += length;
|
||||
|
||||
/* only send if configured to do so */
|
||||
lock();
|
||||
if (type < 0) do_send = 1;
|
||||
else {
|
||||
if (type > is_on_size - 1) set_is_on_size(type+1);
|
||||
do_send = is_on[type];
|
||||
}
|
||||
unlock();
|
||||
|
||||
if (do_send)
|
||||
if (socket_send(socket, v, vpos) != 0)
|
||||
{ printf("ERROR: socket writing failed\n"); abort(); }
|
||||
|
||||
if (do_send && do_wait) getchar();
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
close(socket);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -14,9 +14,6 @@
|
||||
#include "event_selector.h"
|
||||
#include "config.h"
|
||||
|
||||
#define DEFAULT_REMOTE_IP "127.0.0.1"
|
||||
#define DEFAULT_REMOTE_PORT 2021
|
||||
|
||||
typedef struct {
|
||||
int socket;
|
||||
int *is_on;
|
||||
@@ -55,6 +52,7 @@ void usage(void)
|
||||
" note: you may pass several -on/-off/-ON/-OFF,\n"
|
||||
" they will be processed in order\n"
|
||||
" by default, all is off\n"
|
||||
" -full also dump buffers' content\n"
|
||||
" -ip <host> connect to given IP address (default %s)\n"
|
||||
" -p <port> connect to given port (default %d)\n"
|
||||
" -x GUI output\n"
|
||||
@@ -93,6 +91,7 @@ int main(int n, char **v)
|
||||
view *out;
|
||||
int gui_active = 1;
|
||||
textlog_data textlog_data;
|
||||
int full = 0;
|
||||
|
||||
/* write on a socket fails if the other end is closed and we get SIGPIPE */
|
||||
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
|
||||
@@ -118,6 +117,7 @@ int main(int n, char **v)
|
||||
if (!strcmp(v[i], "-x")) { gui_mode = 1; continue; }
|
||||
if (!strcmp(v[i], "-debug-gui")) { gui_logd = 1; continue; }
|
||||
if (!strcmp(v[i], "-no-gui")) { gui_active = 0; continue; }
|
||||
if (!strcmp(v[i], "-full")) { full = 1; continue; }
|
||||
usage();
|
||||
}
|
||||
|
||||
@@ -162,6 +162,7 @@ int main(int n, char **v)
|
||||
// "ENB_PHY_UL_CHANNEL_ESTIMATE",
|
||||
// "ev: {} eNB_id [eNB_ID] frame [frame] subframe [subframe]");
|
||||
logger_add_view(textlog, out);
|
||||
if (full) textlog_dump_buffer(textlog, 1);
|
||||
free(name);
|
||||
free(desc);
|
||||
}
|
||||
|
||||
@@ -190,6 +190,13 @@ void PUTI(OBUF *o, int i)
|
||||
PUTS(o, s);
|
||||
}
|
||||
|
||||
void PUTX2(OBUF *o, int i)
|
||||
{
|
||||
char s[64];
|
||||
sprintf(s, "%2.2x", i);
|
||||
PUTS(o, s);
|
||||
}
|
||||
|
||||
void PUTUL(OBUF *o, unsigned long l)
|
||||
{
|
||||
char s[128];
|
||||
|
||||
@@ -20,6 +20,9 @@ list *list_append(list *l, void *data);
|
||||
/* socket */
|
||||
/****************************************************************************/
|
||||
|
||||
#define DEFAULT_REMOTE_IP "127.0.0.1"
|
||||
#define DEFAULT_REMOTE_PORT 2021
|
||||
|
||||
/* socket_send: return 0 if okay, -1 on error */
|
||||
int socket_send(int socket, void *buffer, int size);
|
||||
int get_connection(char *addr, int port);
|
||||
@@ -41,6 +44,7 @@ void PUTC(OBUF *o, char c);
|
||||
void PUTS(OBUF *o, char *s);
|
||||
void PUTS_CLEAN(OBUF *o, char *s);
|
||||
void PUTI(OBUF *o, int i);
|
||||
void PUTX2(OBUF *o, int i);
|
||||
void PUTUL(OBUF *o, unsigned long i);
|
||||
|
||||
#endif /* _UTILS_H_ */
|
||||
|
||||
@@ -40,9 +40,6 @@ no_connection:
|
||||
if (pthread_mutex_unlock(&d->lock)) abort();
|
||||
}
|
||||
|
||||
#define DEFAULT_REMOTE_IP "127.0.0.1"
|
||||
#define DEFAULT_REMOTE_PORT 2021
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
printf(
|
||||
|
||||
@@ -11,10 +11,12 @@ typedef struct view {
|
||||
void (*set)(struct view *this, char *name, ...);
|
||||
} view;
|
||||
|
||||
enum xy_mode { XY_LOOP_MODE, XY_FORCED_MODE };
|
||||
|
||||
view *new_view_stdout(void);
|
||||
view *new_view_textlist(int maxsize, float refresh_rate, gui *g, widget *w);
|
||||
view *new_view_xy(int length, float refresh_rate, gui *g, widget *w,
|
||||
int color);
|
||||
int color, enum xy_mode mode);
|
||||
view *new_view_tti(float refresh_rate, gui *g, widget *w,
|
||||
int color);
|
||||
view *new_view_time(int number_of_seconds, float refresh_rate,
|
||||
|
||||
@@ -14,6 +14,7 @@ struct xy {
|
||||
float refresh_rate;
|
||||
pthread_mutex_t lock;
|
||||
int length;
|
||||
int max_length; /* used in XY_FORCED_MODE */
|
||||
float *x;
|
||||
float *y;
|
||||
int insert_point;
|
||||
@@ -39,7 +40,7 @@ static void clear(view *this)
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
static void append(view *_this, float *x, float *y, int length)
|
||||
static void append_loop(view *_this, float *x, float *y, int length)
|
||||
{
|
||||
struct xy *this = (struct xy *)_this;
|
||||
int i;
|
||||
@@ -61,6 +62,25 @@ static void append(view *_this, float *x, float *y, int length)
|
||||
if (pthread_mutex_unlock(&this->lock)) abort();
|
||||
}
|
||||
|
||||
static void append_forced(view *_this, float *x, float *y, int length)
|
||||
{
|
||||
struct xy *this = (struct xy *)_this;
|
||||
|
||||
if (length > this->max_length) {
|
||||
printf("%s:%d:%s: bad length (%d), max allowed is %d\n",
|
||||
__FILE__, __LINE__, __FUNCTION__, length, this->max_length);
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pthread_mutex_lock(&this->lock)) abort();
|
||||
|
||||
memcpy(this->x, x, length * sizeof(float));
|
||||
memcpy(this->y, y, length * sizeof(float));
|
||||
this->length = length;
|
||||
|
||||
if (pthread_mutex_unlock(&this->lock)) abort();
|
||||
}
|
||||
|
||||
static void set(view *_this, char *name, ...)
|
||||
{
|
||||
struct xy *this = (struct xy *)_this;
|
||||
@@ -89,24 +109,35 @@ static void set(view *_this, char *name, ...)
|
||||
}
|
||||
|
||||
view *new_view_xy(int length, float refresh_rate, gui *g, widget *w,
|
||||
int color)
|
||||
int color, enum xy_mode mode)
|
||||
{
|
||||
struct xy *ret = calloc(1, sizeof(struct xy));
|
||||
if (ret == NULL) abort();
|
||||
|
||||
ret->common.clear = clear;
|
||||
ret->common.append = (void (*)(view *, ...))append;
|
||||
ret->common.set = set;
|
||||
|
||||
switch (mode) {
|
||||
case XY_LOOP_MODE:
|
||||
ret->common.append = (void (*)(view *, ...))append_loop;
|
||||
ret->common.set = set;
|
||||
ret->length = length;
|
||||
ret->insert_point = 0;
|
||||
break;
|
||||
case XY_FORCED_MODE:
|
||||
ret->common.append = (void (*)(view *, ...))append_forced;
|
||||
ret->common.set = NULL;
|
||||
ret->length = 0;
|
||||
ret->max_length = length;
|
||||
break;
|
||||
}
|
||||
|
||||
ret->refresh_rate = refresh_rate;
|
||||
ret->g = g;
|
||||
ret->w = w;
|
||||
ret->plot = xy_plot_new_plot(g, w, color);
|
||||
|
||||
ret->length = length;
|
||||
ret->x = calloc(length, sizeof(float)); if (ret->x == NULL) abort();
|
||||
ret->y = calloc(length, sizeof(float)); if (ret->y == NULL) abort();
|
||||
ret->insert_point = 0;
|
||||
|
||||
if (pthread_mutex_init(&ret->lock, NULL)) abort();
|
||||
|
||||
|
||||
@@ -1126,12 +1126,8 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
|
||||
dlsch[0]->harq_ids[subframe] = harq_pid;
|
||||
|
||||
if (dlsch0_harq->round == 0) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch[0], harq_pid);
|
||||
if (dlsch0_harq->round == 0)
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@@ -1265,9 +1261,6 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
|
||||
|
||||
if (dlsch0_harq->round == 0) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch[0], harq_pid);
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
// printf("Setting DLSCH process %d to ACTIVE\n",harq_pid);
|
||||
// MCS and TBS don't change across HARQ rounds
|
||||
@@ -1635,19 +1628,11 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
}
|
||||
|
||||
// reset HARQ process if this is the first transmission
|
||||
if (dlsch0_harq->round == 0) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch0, harq_pid);
|
||||
if (dlsch0_harq->round == 0)
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
}
|
||||
|
||||
if (dlsch1_harq->round == 0) {
|
||||
/* necessary test? */
|
||||
if (dlsch1_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch1, harq_pid);
|
||||
if (dlsch1_harq->round == 0)
|
||||
dlsch1_harq->status = ACTIVE;
|
||||
}
|
||||
|
||||
dlsch0->rnti = rnti;
|
||||
dlsch1->rnti = rnti;
|
||||
@@ -2022,19 +2007,11 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
}
|
||||
|
||||
// reset HARQ process if this is the first transmission
|
||||
if ((dlsch0->active==1) && (dlsch0_harq->round == 0)) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch0, harq_pid);
|
||||
if ((dlsch0->active==1) && (dlsch0_harq->round == 0))
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
}
|
||||
|
||||
if ((dlsch1->active==1) && (dlsch1_harq->round == 0)) {
|
||||
/* necessary test? */
|
||||
if (dlsch1_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch1, harq_pid);
|
||||
if ((dlsch1->active==1) && (dlsch1_harq->round == 0))
|
||||
dlsch1_harq->status = ACTIVE;
|
||||
}
|
||||
|
||||
dlsch0->rnti = rnti;
|
||||
dlsch1->rnti = rnti;
|
||||
@@ -2174,23 +2151,16 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
// check if either TB is disabled (see 36-213 V8.6 p. 26)
|
||||
|
||||
|
||||
if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0)) {
|
||||
LOG_W(PHY, "what to do with respect to remove_harq_pid_from_freelist?\n");
|
||||
if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0))
|
||||
dlsch0_harq->status = DISABLED;
|
||||
}
|
||||
|
||||
if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0)) {
|
||||
LOG_W(PHY, "what to do with respect to remove_harq_pid_from_freelist?\n");
|
||||
if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0))
|
||||
dlsch1_harq->status = DISABLED;
|
||||
}
|
||||
|
||||
dlsch0_harq->Nl = 1;
|
||||
|
||||
|
||||
if (dlsch0_harq->round == 0) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch0, harq_pid);
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
// printf("Setting DLSCH process %d to ACTIVE\n",harq_pid);
|
||||
}
|
||||
@@ -2355,17 +2325,11 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
|
||||
|
||||
if ((dlsch0_harq->round == 0) && (dlsch0->active == 1) ) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch0, harq_pid);
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
dlsch0_harq->mcs = mcs1;
|
||||
}
|
||||
|
||||
if ((dlsch1_harq->round == 0) && (dlsch1->active == 1) ) {
|
||||
/* necessary test? */
|
||||
if (dlsch1_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch1, harq_pid);
|
||||
dlsch1_harq->status = ACTIVE;
|
||||
dlsch1_harq->mcs = mcs2;
|
||||
}
|
||||
@@ -2529,9 +2493,6 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
|
||||
|
||||
if (dlsch0_harq->round == 0) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch0, harq_pid);
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
// printf("Setting DLSCH process %d to ACTIVE\n",harq_pid);
|
||||
}
|
||||
@@ -2661,9 +2622,6 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
|
||||
// dlsch0_harq->Ndi = ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->ndi;
|
||||
if (dlsch0_harq->round == 0) {
|
||||
/* necessary test? */
|
||||
if (dlsch0_harq->status == SCH_IDLE)
|
||||
remove_harq_pid_from_freelist(dlsch0, harq_pid);
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
// printf("Setting DLSCH process %d to ACTIVE\n",harq_pid);
|
||||
}
|
||||
@@ -6431,6 +6389,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
if (ulsch->harq_processes[harq_pid]->first_tx==1) {
|
||||
// ulsch->harq_processes[harq_pid]->Ndi = 1;
|
||||
ulsch->harq_processes[harq_pid]->first_tx=0;
|
||||
ulsch->harq_processes[harq_pid]->DCINdi= ndi;
|
||||
ulsch->harq_processes[harq_pid]->round = 0;
|
||||
} else {
|
||||
if (ulsch->harq_processes[harq_pid]->DCINdi!=ndi) { // new SDU opportunity
|
||||
|
||||
@@ -258,13 +258,6 @@ typedef struct {
|
||||
uint8_t error_threshold;
|
||||
/// Pointers to 8 HARQ processes for the DLSCH
|
||||
LTE_DL_eNB_HARQ_t *harq_processes[8];
|
||||
/// circular list of free harq PIDs (the oldest come first)
|
||||
/// (10 is arbitrary value, must be > to max number of DL HARQ processes in LTE)
|
||||
int harq_pid_freelist[10];
|
||||
/// the head position of the free list (if list is free then head=tail)
|
||||
int head_freelist;
|
||||
/// the tail position of the free list
|
||||
int tail_freelist;
|
||||
/// Number of soft channel bits
|
||||
uint32_t G;
|
||||
/// Codebook index for this dlsch (0,1,2,3)
|
||||
|
||||
@@ -156,9 +156,6 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_
|
||||
for (i=0; i<10; i++)
|
||||
dlsch->harq_ids[i] = Mdlharq;
|
||||
|
||||
dlsch->head_freelist = 0;
|
||||
dlsch->tail_freelist = 0;
|
||||
|
||||
for (i=0; i<Mdlharq; i++) {
|
||||
dlsch->harq_processes[i] = (LTE_DL_eNB_HARQ_t *)malloc16(sizeof(LTE_DL_eNB_HARQ_t));
|
||||
LOG_T(PHY, "Required mem size %d (bw scaling %d), dlsch->harq_processes[%d] %p\n",
|
||||
@@ -199,8 +196,6 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_
|
||||
msg("Can't get harq_p %d\n",i);
|
||||
exit_flag=3;
|
||||
}
|
||||
|
||||
put_harq_pid_in_freelist(dlsch, i);
|
||||
}
|
||||
|
||||
if (exit_flag==0) {
|
||||
|
||||
@@ -1842,6 +1842,7 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
|
||||
|
||||
T(T_ENB_PHY_PUSCH_IQ, T_INT(eNB_id), T_INT(UE_id), T_INT(phy_vars_eNB->proc[sched_subframe].frame_rx),
|
||||
T_INT(subframe), T_INT(ulsch[UE_id]->harq_processes[harq_pid]->nb_rb),
|
||||
T_INT(frame_parms->N_RB_UL), T_INT(frame_parms->symbols_per_tti),
|
||||
T_BUFFER(eNB_pusch_vars->rxdataF_comp[eNB_id][0],
|
||||
2 * /* ulsch[UE_id]->harq_processes[harq_pid]->nb_rb */ frame_parms->N_RB_UL *12*frame_parms->symbols_per_tti*2));
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
|
||||
unsigned int rx_offset;
|
||||
|
||||
void (*dft)(int16_t *,int16_t *, int);
|
||||
int tmp_dft_in[2048]; // This is for misalignment issues for 6 and 15 PRBs
|
||||
int tmp_dft_in[2048] __attribute__ ((aligned (32))); // This is for misalignment issues for 6 and 15 PRBs
|
||||
|
||||
switch (frame_parms->ofdm_symbol_size) {
|
||||
case 128:
|
||||
|
||||
@@ -400,9 +400,6 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui
|
||||
uint16_t get_Np(uint8_t N_RB_DL,uint8_t nCCE,uint8_t plus1);
|
||||
|
||||
|
||||
void put_harq_pid_in_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid);
|
||||
void remove_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid);
|
||||
|
||||
int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
|
||||
int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
|
||||
int mac_phy_remove_ue(module_id_t Mod_idP,rnti_t rnti);
|
||||
|
||||
@@ -155,10 +155,10 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(50,10,3);
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi = subframe / 5;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = subframe % 5;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_10MHz_TDD_1_6_t));
|
||||
}
|
||||
@@ -233,10 +233,10 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(25,10,3);
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5;
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
|
||||
//((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
//((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5;
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
|
||||
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rah = 0;
|
||||
|
||||
@@ -266,10 +266,10 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(25,10,3);
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->dai = 0;
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->harq_pid = subframe % 5;
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
|
||||
//((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
//((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi = subframe / 5;
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rv = 0;
|
||||
((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rah = 0;
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
|
||||
@@ -304,10 +304,10 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(50,10,3);
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5;
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
|
||||
//((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
//((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5;
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0;
|
||||
((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rah = 0;
|
||||
|
||||
@@ -338,10 +338,10 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(50,10,3);
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->dai = 0;
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->harq_pid = subframe % 5;
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
|
||||
//((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
//((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi = subframe / 5;
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rv = 0;
|
||||
((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rah = 0;
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t));
|
||||
@@ -375,10 +375,10 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(100,10,3);
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5;
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
|
||||
//((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
//((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5;
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rv = 0;
|
||||
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rah = 0;
|
||||
|
||||
@@ -409,10 +409,10 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(100,10,3);
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->dai = 0;
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->harq_pid = subframe % 5;
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
|
||||
//((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
//((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi = subframe / 5;
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rv = 0;
|
||||
((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rah = 0;
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_20MHz_TDD_t));
|
||||
@@ -451,13 +451,13 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tpmi = 0;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv1 = 0;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi1 = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi1 = subframe / 5;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs1 = openair_daq_vars.target_ue_dl_mcs;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv2 = 0;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi2 = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi2 = subframe / 5;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs2 = openair_daq_vars.target_ue_dl_mcs;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tb_swap = 0;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->harq_pid = subframe % 5;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->TPC = 0;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rballoc = openair_daq_vars.ue_dl_rb_alloc;
|
||||
((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rah = 0;
|
||||
@@ -473,13 +473,13 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
DLSCH_alloc_pdu1E.tpmi = 5; //5=use feedback
|
||||
DLSCH_alloc_pdu1E.rv = 0;
|
||||
DLSCH_alloc_pdu1E.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
DLSCH_alloc_pdu1E.ndi = subframe / 5;
|
||||
//DLSCH_alloc_pdu1E.mcs = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]];
|
||||
//DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28);
|
||||
DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs;
|
||||
//DLSCH_alloc_pdu1E.mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
|
||||
phy_vars_eNB->eNB_UE_stats[0].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
|
||||
DLSCH_alloc_pdu1E.harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
DLSCH_alloc_pdu1E.harq_pid = subframe % 5;
|
||||
DLSCH_alloc_pdu1E.dai = 0;
|
||||
DLSCH_alloc_pdu1E.TPC = 0;
|
||||
DLSCH_alloc_pdu1E.rballoc = openair_daq_vars.ue_dl_rb_alloc;
|
||||
|
||||
@@ -133,30 +133,6 @@ uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t sched_su
|
||||
return(0);
|
||||
}
|
||||
|
||||
void put_harq_pid_in_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid)
|
||||
{
|
||||
DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->tail_freelist] = harq_pid;
|
||||
DLSCH_ptr->tail_freelist = (DLSCH_ptr->tail_freelist + 1) % 10;
|
||||
}
|
||||
|
||||
void remove_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid)
|
||||
{
|
||||
if (DLSCH_ptr->head_freelist == DLSCH_ptr->tail_freelist) {
|
||||
LOG_E(PHY, "%s:%d: you cannot read this!\n", __FILE__, __LINE__);
|
||||
abort();
|
||||
}
|
||||
/* basic check, in case several threads deal with the free list at the same time
|
||||
* in normal situations it should not happen, that's also why we don't use any
|
||||
* locking mechanism to protect the free list
|
||||
* to be refined in case things don't work properly
|
||||
*/
|
||||
if (harq_pid != DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]) {
|
||||
LOG_E(PHY, "%s:%d: critical error, get in touch with the authors\n", __FILE__, __LINE__);
|
||||
abort();
|
||||
}
|
||||
DLSCH_ptr->head_freelist = (DLSCH_ptr->head_freelist + 1) % 10;
|
||||
}
|
||||
|
||||
int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB)
|
||||
{
|
||||
uint8_t i;
|
||||
@@ -221,12 +197,6 @@ int mac_phy_remove_ue(module_id_t Mod_idP,rnti_t rntiP) {
|
||||
memset(&phy_vars_eNB->eNB_UE_stats[i],0,sizeof(LTE_eNB_UE_stats));
|
||||
// mac_exit_wrapper("Removing UE");
|
||||
|
||||
/* clear the harq pid freelist */
|
||||
phy_vars_eNB->dlsch_eNB[i][0]->head_freelist = 0;
|
||||
phy_vars_eNB->dlsch_eNB[i][0]->tail_freelist = 0;
|
||||
for (j = 0; j < 8; j++)
|
||||
put_harq_pid_in_freelist(phy_vars_eNB->dlsch_eNB[i][0], j);
|
||||
|
||||
return(i);
|
||||
}
|
||||
}
|
||||
@@ -258,9 +228,8 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16
|
||||
LTE_eNB_DLSCH_t *DLSCH_ptr;
|
||||
LTE_eNB_ULSCH_t *ULSCH_ptr;
|
||||
uint8_t ulsch_subframe,ulsch_frame;
|
||||
uint8_t i;
|
||||
int i;
|
||||
int8_t UE_id = find_ue(rnti,PHY_vars_eNB_g[Mod_id][CC_id]);
|
||||
int sf1=(10*frame)+subframe,sf2,sfdiff,sfdiff_max=7;
|
||||
|
||||
if (UE_id==-1) {
|
||||
LOG_D(PHY,"Cannot find UE with rnti %x (Mod_id %d, CC_id %d)\n",rnti, Mod_id, CC_id);
|
||||
@@ -271,40 +240,19 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16
|
||||
if (ul_flag == 0) {// this is a DL request
|
||||
DLSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->dlsch_eNB[(uint32_t)UE_id][0];
|
||||
|
||||
// set to no available process first
|
||||
*harq_pid = -1;
|
||||
/* let's go synchronous for the moment - maybe we can change at some point */
|
||||
i = (frame * 10 + subframe) % 8;
|
||||
|
||||
for (i=0; i<DLSCH_ptr->Mdlharq; i++) {
|
||||
if (DLSCH_ptr->harq_processes[i]!=NULL) {
|
||||
if (DLSCH_ptr->harq_processes[i]->status == ACTIVE) {
|
||||
sf2 = (DLSCH_ptr->harq_processes[i]->frame*10) + DLSCH_ptr->harq_processes[i]->subframe;
|
||||
if (sf2<=sf1)
|
||||
sfdiff = sf1-sf2;
|
||||
else // this happens when wrapping around 1024 frame barrier
|
||||
sfdiff = 10240 + sf1-sf2;
|
||||
LOG_D(PHY,"process %d is active, round %d (waiting %d)\n",i,DLSCH_ptr->harq_processes[i]->round,sfdiff);
|
||||
|
||||
if (sfdiff>sfdiff_max) { // this is an active process that is waiting longer than the others (and longer than 7 ms)
|
||||
sfdiff_max = sfdiff;
|
||||
*harq_pid = i;
|
||||
*round = DLSCH_ptr->harq_processes[i]->round;
|
||||
}
|
||||
}
|
||||
} else { // a process is not defined
|
||||
LOG_E(PHY,"[eNB %d] DLSCH process %d for rnti %x (UE_id %d) not allocated\n",Mod_id,i,rnti,UE_id);
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
|
||||
/* if no active harq pid, get the oldest in the freelist, if any */
|
||||
if (*harq_pid == 255 && DLSCH_ptr->head_freelist != DLSCH_ptr->tail_freelist) {
|
||||
*harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
|
||||
if (DLSCH_ptr->harq_processes[i]->status == ACTIVE) {
|
||||
*harq_pid = i;
|
||||
*round = DLSCH_ptr->harq_processes[i]->round;
|
||||
} else if (DLSCH_ptr->harq_processes[i]->status == SCH_IDLE) {
|
||||
*harq_pid = i;
|
||||
*round = 0;
|
||||
LOG_D(PHY,"process %d is first free process\n", *harq_pid);
|
||||
} else {
|
||||
printf("%s:%d: bad state for harq process - PLEASE REPORT!!\n", __FILE__, __LINE__);
|
||||
abort();
|
||||
}
|
||||
|
||||
LOG_D(PHY,"get_ue_active_harq_pid DL => Frame %d, Subframe %d : harq_pid %d\n",
|
||||
frame,subframe,*harq_pid);
|
||||
} else { // This is a UL request
|
||||
|
||||
ULSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->ulsch_eNB[(uint32_t)UE_id];
|
||||
@@ -1906,7 +1854,6 @@ void process_HARQ_feedback(uint8_t UE_id,
|
||||
dlsch_harq_proc->round = 0;
|
||||
ue_stats->dlsch_l2_errors[dl_harq_pid[m]]++;
|
||||
dlsch_harq_proc->status = SCH_IDLE;
|
||||
put_harq_pid_in_freelist(dlsch, dl_harq_pid[m]);
|
||||
dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq;
|
||||
}
|
||||
} else {
|
||||
@@ -1923,7 +1870,6 @@ void process_HARQ_feedback(uint8_t UE_id,
|
||||
// Received ACK so set round to 0 and set dlsch_harq_pid IDLE
|
||||
dlsch_harq_proc->round = 0;
|
||||
dlsch_harq_proc->status = SCH_IDLE;
|
||||
put_harq_pid_in_freelist(dlsch, dl_harq_pid[m]);
|
||||
dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq;
|
||||
|
||||
ue_stats->total_TBS = ue_stats->total_TBS +
|
||||
@@ -2345,9 +2291,6 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_
|
||||
phy_vars_eNB->eNB_UE_stats[UE_id].sr_received++;
|
||||
|
||||
if (phy_vars_eNB->first_sr[UE_id] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
|
||||
/* is this test necessary? */
|
||||
if (phy_vars_eNB->dlsch_eNB[UE_id][0]->harq_processes[0]->status != SCH_IDLE)
|
||||
put_harq_pid_in_freelist(phy_vars_eNB->dlsch_eNB[UE_id][0], 0);
|
||||
phy_vars_eNB->first_sr[UE_id] = 0;
|
||||
phy_vars_eNB->dlsch_eNB[UE_id][0]->harq_processes[0]->round=0;
|
||||
phy_vars_eNB->dlsch_eNB[UE_id][0]->harq_processes[0]->status=SCH_IDLE;
|
||||
|
||||
@@ -298,6 +298,12 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
|
||||
int UE_id = find_UE_id(mod_idP,rntiP);
|
||||
int pCC_id = UE_PCCID(mod_idP,UE_id);
|
||||
|
||||
if (UE_id == -1) {
|
||||
LOG_W(MAC,"rrc_mac_remove_ue: UE %x not found\n", rntiP);
|
||||
mac_phy_remove_ue(mod_idP,rntiP);
|
||||
return 0;
|
||||
}
|
||||
|
||||
LOG_I(MAC,"Removing UE %d from Primary CC_id %d (rnti %x)\n",UE_id,pCC_id, rntiP);
|
||||
dump_ue_list(UE_list,0);
|
||||
|
||||
@@ -320,7 +326,6 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
|
||||
for (i=UE_list->head; i>=0; i=UE_list->next[i]) {
|
||||
if (i == UE_id) {
|
||||
// link prev to next in Active list
|
||||
//if (prev==UE_list->head)
|
||||
if (i==UE_list->head) {
|
||||
UE_list->head = UE_list->next[i];
|
||||
} else {
|
||||
@@ -345,7 +350,7 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
|
||||
for (i=UE_list->head_ul; i>=0; i=UE_list->next_ul[i]) {
|
||||
if (i == UE_id) {
|
||||
// link prev to next in Active list
|
||||
if (prev==UE_list->head_ul) {
|
||||
if (i==UE_list->head_ul) {
|
||||
UE_list->head_ul = UE_list->next_ul[i];
|
||||
} else {
|
||||
UE_list->next_ul[prev] = UE_list->next_ul[i];
|
||||
|
||||
@@ -130,6 +130,8 @@ void rx_sdu(
|
||||
|
||||
T(T_ENB_MAC_UE_UL_PDU, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(rntiP), T_INT(frameP), T_INT(subframeP),
|
||||
T_INT(harq_pidP), T_INT(sdu_lenP), T_INT(num_ce), T_INT(num_sdu));
|
||||
T(T_ENB_MAC_UE_UL_PDU_WITH_DATA, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(rntiP), T_INT(frameP), T_INT(subframeP),
|
||||
T_INT(harq_pidP), T_INT(sdu_lenP), T_INT(num_ce), T_INT(num_sdu), T_BUFFER(sduP, sdu_lenP));
|
||||
|
||||
eNB->eNB_stats[CC_idP].ulsch_bytes_rx=sdu_lenP;
|
||||
eNB->eNB_stats[CC_idP].total_ulsch_bytes_rx+=sdu_lenP;
|
||||
@@ -313,6 +315,8 @@ void rx_sdu(
|
||||
|
||||
T(T_ENB_MAC_UE_UL_SDU, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(rntiP), T_INT(frameP), T_INT(subframeP),
|
||||
T_INT(rx_lcids[i]), T_INT(rx_lengths[i]));
|
||||
T(T_ENB_MAC_UE_UL_SDU_WITH_DATA, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(rntiP), T_INT(frameP), T_INT(subframeP),
|
||||
T_INT(rx_lcids[i]), T_INT(rx_lengths[i]), T_BUFFER(payload_ptr, rx_lengths[i]));
|
||||
|
||||
switch (rx_lcids[i]) {
|
||||
case CCCH :
|
||||
|
||||
@@ -103,7 +103,7 @@ rlc_am_get_buffer_occupancy_in_bytes (
|
||||
}
|
||||
|
||||
#endif
|
||||
return rlc_pP->status_buffer_occupancy + rlc_pP->retransmission_buffer_occupancy + rlc_pP->sdu_buffer_occupancy + max_li_overhead + header_overhead;
|
||||
return rlc_pP->status_buffer_occupancy + rlc_pP->retrans_num_bytes_to_retransmit + rlc_pP->sdu_buffer_occupancy + max_li_overhead + header_overhead;
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
void
|
||||
|
||||
@@ -719,12 +719,12 @@ mac_eNB_get_rrc_status(
|
||||
}
|
||||
}
|
||||
|
||||
void mac_eNB_rrc_ul_failure(const module_id_t Mod_instP,
|
||||
const int CC_idP,
|
||||
void mac_eNB_rrc_ul_failure(const module_id_t Mod_instP,
|
||||
const int CC_idP,
|
||||
const frame_t frameP,
|
||||
const sub_frame_t subframeP,
|
||||
const rnti_t rntiP) {
|
||||
|
||||
const rnti_t rntiP)
|
||||
{
|
||||
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
||||
ue_context_p = rrc_eNB_get_ue_context(
|
||||
&eNB_rrc_inst[Mod_instP],
|
||||
@@ -735,34 +735,30 @@ void mac_eNB_rrc_ul_failure(const module_id_t Mod_instP,
|
||||
ue_context_p->ue_context.ul_failure_timer=1;
|
||||
}
|
||||
else {
|
||||
LOG_W(RRC,"Frame %d, Subframe %d: UE %x unknown \n",frameP,subframeP,rntiP);
|
||||
rrc_mac_remove_ue(Mod_instP,rntiP);
|
||||
LOG_W(RRC,"Frame %d, Subframe %d: UL failure: UE %x unknown \n",frameP,subframeP,rntiP);
|
||||
}
|
||||
|
||||
rrc_mac_remove_ue(Mod_instP,rntiP);
|
||||
}
|
||||
|
||||
void mac_eNB_rrc_ul_in_sync(const module_id_t Mod_instP,
|
||||
const int CC_idP,
|
||||
const frame_t frameP,
|
||||
const sub_frame_t subframeP,
|
||||
const rnti_t rntiP) {
|
||||
|
||||
const rnti_t rntiP)
|
||||
{
|
||||
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
||||
ue_context_p = rrc_eNB_get_ue_context(
|
||||
&eNB_rrc_inst[Mod_instP],
|
||||
rntiP);
|
||||
|
||||
|
||||
|
||||
if (ue_context_p != NULL) {
|
||||
LOG_I(RRC,"Frame %d, Subframe %d: UE %x to UL in synch\n",rntiP);
|
||||
ue_context_p->ue_context.ul_failure_timer=0;
|
||||
LOG_I(RRC,"Frame %d, Subframe %d: UE %x to UL in synch\n",
|
||||
frameP, subframeP, rntiP);
|
||||
ue_context_p->ue_context.ul_failure_timer = 0;
|
||||
} else {
|
||||
LOG_E(RRC,"Frame %d, Subframe %d: UE %x unknown \n",
|
||||
frameP, subframeP, rntiP);
|
||||
}
|
||||
else {
|
||||
LOG_E(RRC,"Frame %d, Subframe %d: UE %x unknown \n",rntiP);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
int
|
||||
|
||||
@@ -3795,14 +3795,29 @@ rrc_eNB_decode_ccch(
|
||||
//#warning "TODO: stmsi_exist: remove UE from MAC/PHY (how?)"
|
||||
LOG_I(RRC," S-TMSI exists, ue_context_p %p\n",ue_context_p);
|
||||
stmsi_received=1;
|
||||
/* replace rnti in the context */
|
||||
/* for that, remove the context from the RB tree */
|
||||
RB_REMOVE(rrc_ue_tree_s, &eNB_rrc_inst[ctxt_pP->module_id].rrc_ue_head, ue_context_p);
|
||||
/* and insert again, after changing rnti everywhere it has to be changed */
|
||||
ue_context_p->ue_id_rnti = ctxt_pP->rnti;
|
||||
ue_context_p->ue_context.rnti = ctxt_pP->rnti;
|
||||
RB_INSERT(rrc_ue_tree_s, &eNB_rrc_inst[ctxt_pP->module_id].rrc_ue_head, ue_context_p);
|
||||
/* reset timers */
|
||||
ue_context_p->ue_context.ul_failure_timer = 0;
|
||||
ue_context_p->ue_context.ue_release_timer = 0;
|
||||
// AssertFatal(0 == 1, "TODO: remove UE from MAC/PHY (how?)");
|
||||
// ue_context_p = NULL;
|
||||
} else {
|
||||
ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, NOT_A_RANDOM_UE_IDENTITY);
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.presence = TRUE;
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code = mme_code;
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi = m_tmsi;
|
||||
if (ue_context_p == NULL)
|
||||
LOG_E(RRC, "%s:%d:%s: rrc_eNB_get_next_free_ue_context returned NULL\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
if (ue_context_p != NULL) {
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.presence = TRUE;
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code = mme_code;
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi = m_tmsi;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
MSC_LOG_RX_MESSAGE(
|
||||
|
||||
@@ -377,6 +377,8 @@ extern int ouput_vcd;
|
||||
|
||||
#if T_TRACER
|
||||
|
||||
#include "T.h"
|
||||
|
||||
#define VCD_SIGNAL_DUMPER_INIT(x) /* nothing */
|
||||
#define VCD_SIGNAL_DUMPER_CLOSE() /* nothing */
|
||||
#define VCD_SIGNAL_DUMPER_CREATE_HEADER() /* nothing */
|
||||
|
||||
+52
-89
@@ -137,27 +137,15 @@ typedef guint8 gboolean;
|
||||
|
||||
//static unsigned char g_PDUBuffer[1600];
|
||||
//static unsigned int g_PDUOffset;
|
||||
#ifdef JUMBO_FRAME
|
||||
static unsigned char g_frameBuffer[9000];
|
||||
#else
|
||||
static unsigned char g_frameBuffer[1600];
|
||||
#endif
|
||||
//static unsigned char g_fileBuffer[1600];
|
||||
static unsigned int g_frameOffset;
|
||||
|
||||
|
||||
char in_ip[40];
|
||||
char in_path[100];
|
||||
static uint16_t in_port;
|
||||
FILE *file_fd = NULL;
|
||||
|
||||
trace_mode_t opt_type = OPT_NONE;
|
||||
static radio_type_t radio_type;
|
||||
static unsigned int subframesSinceCaptureStart;
|
||||
// double timing_perf[250];
|
||||
// clock_t timing_in[250];
|
||||
// clock_t timing_out[250];
|
||||
int test=0;
|
||||
int init_value=0;
|
||||
|
||||
static int g_socksd = -1;/* UDP socket used for sending frames */
|
||||
static struct sockaddr_in g_serv_addr;
|
||||
@@ -277,66 +265,73 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
guint8 oob_event, guint8 oob_event_value,
|
||||
uint8_t *pdu_buffer, unsigned int pdu_buffer_size)
|
||||
{
|
||||
#ifdef JUMBO_FRAME
|
||||
static unsigned char frameBuffer[9000];
|
||||
#else
|
||||
static unsigned char frameBuffer[1600];
|
||||
#endif
|
||||
static unsigned int frameOffset;
|
||||
|
||||
ssize_t bytesSent;
|
||||
g_frameOffset = 0;
|
||||
frameOffset = 0;
|
||||
uint16_t tmp16;
|
||||
|
||||
/********************************************************************/
|
||||
/* Fixed start to each frame (allowing heuristic dissector to work) */
|
||||
/* Not NULL terminated */
|
||||
memset(g_frameBuffer+g_frameOffset, 0, sizeof(mac_lte_info)+pdu_buffer_size + 8);
|
||||
memset(frameBuffer+frameOffset, 0, sizeof(mac_lte_info)+pdu_buffer_size + 8);
|
||||
|
||||
memcpy(g_frameBuffer+g_frameOffset, MAC_LTE_START_STRING,
|
||||
memcpy(frameBuffer+frameOffset, MAC_LTE_START_STRING,
|
||||
strlen(MAC_LTE_START_STRING));
|
||||
g_frameOffset += strlen(MAC_LTE_START_STRING);
|
||||
frameOffset += strlen(MAC_LTE_START_STRING);
|
||||
|
||||
/******************************************************************************/
|
||||
/* Now write out fixed fields (the mandatory elements of struct mac_lte_info) */
|
||||
g_frameBuffer[g_frameOffset++] = radioType;
|
||||
g_frameBuffer[g_frameOffset++] = direction;
|
||||
g_frameBuffer[g_frameOffset++] = rntiType;
|
||||
frameBuffer[frameOffset++] = radioType;
|
||||
frameBuffer[frameOffset++] = direction;
|
||||
frameBuffer[frameOffset++] = rntiType;
|
||||
|
||||
/*************************************/
|
||||
/* Now optional fields */
|
||||
|
||||
/* RNTI */
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_RNTI_TAG;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_RNTI_TAG;
|
||||
tmp16 = htons(rnti);
|
||||
memcpy(g_frameBuffer+g_frameOffset, &tmp16, 2);
|
||||
g_frameOffset += 2;
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
|
||||
/* UEId */
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_UEID_TAG;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_UEID_TAG;
|
||||
tmp16 = htons(ueid);
|
||||
memcpy(g_frameBuffer+g_frameOffset, &tmp16, 2);
|
||||
g_frameOffset += 2;
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
|
||||
/* Subframe number */
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_SUBFRAME_TAG;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_SUBFRAME_TAG;
|
||||
tmp16 = htons(subframeNumber); // frame counter : this will give an expert info as wireshark expects SF and not F
|
||||
memcpy(g_frameBuffer+g_frameOffset, &tmp16, 2);
|
||||
g_frameOffset += 2;
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_CRC_STATUS_TAG;
|
||||
g_frameBuffer[g_frameOffset++] = crcStatus;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_CRC_STATUS_TAG;
|
||||
frameBuffer[frameOffset++] = crcStatus;
|
||||
|
||||
#ifdef WIRESHARK_DEV
|
||||
g_frameOffset += 2;
|
||||
frameOffset += 2;
|
||||
tmp16 = htons(subframeNumber); // subframe
|
||||
memcpy(g_frameBuffer+g_frameOffset, &tmp16, 2);
|
||||
g_frameOffset += 2;
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
#endif
|
||||
|
||||
/***********************************************************/
|
||||
/* For these optional fields, no need to encode if value is default */
|
||||
if (!isPredefinedData) {
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_PREDEFINED_DATA_TAG;
|
||||
g_frameBuffer[g_frameOffset++] = isPredefinedData;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_PREDEFINED_DATA_TAG;
|
||||
frameBuffer[frameOffset++] = isPredefinedData;
|
||||
}
|
||||
|
||||
if (retx != 0) {
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_RETX_TAG;
|
||||
g_frameBuffer[g_frameOffset++] = retx;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_RETX_TAG;
|
||||
frameBuffer[frameOffset++] = retx;
|
||||
}
|
||||
|
||||
#ifdef WIRESHARK_DEV
|
||||
@@ -347,19 +342,19 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
switch (oob_event) {
|
||||
case ltemac_send_preamble :
|
||||
LOG_D(OPT,"oob event %d %d\n",ltemac_send_preamble );
|
||||
//g_frameBuffer[g_frameOffset++]=0;
|
||||
//g_frameBuffer[g_frameOffset++]=0;
|
||||
//g_frameBuffer[g_frameOffset++]=0;
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_OOB_EVENT_TAG;
|
||||
g_frameBuffer[g_frameOffset++]=ltemac_send_preamble;
|
||||
g_frameBuffer[g_frameOffset++]=rnti; // is the preamble
|
||||
g_frameBuffer[g_frameOffset++]=oob_event_value;
|
||||
//frameBuffer[frameOffset++]=0;
|
||||
//frameBuffer[frameOffset++]=0;
|
||||
//frameBuffer[frameOffset++]=0;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_OOB_EVENT_TAG;
|
||||
frameBuffer[frameOffset++]=ltemac_send_preamble;
|
||||
frameBuffer[frameOffset++]=rnti; // is the preamble
|
||||
frameBuffer[frameOffset++]=oob_event_value;
|
||||
break;
|
||||
|
||||
case ltemac_send_sr:
|
||||
g_frameBuffer[g_frameOffset++]=ltemac_send_sr;
|
||||
g_frameOffset+=2;
|
||||
g_frameBuffer[g_frameOffset++]=oob_event_value;
|
||||
frameBuffer[frameOffset++]=ltemac_send_sr;
|
||||
frameOffset+=2;
|
||||
frameBuffer[frameOffset++]=oob_event_value;
|
||||
break;
|
||||
|
||||
case ltemac_sr_failure:
|
||||
@@ -372,23 +367,23 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
#endif
|
||||
/***************************************/
|
||||
/* Now write the MAC PDU */
|
||||
g_frameBuffer[g_frameOffset++] = MAC_LTE_PAYLOAD_TAG;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_PAYLOAD_TAG;
|
||||
|
||||
/* Append actual PDU */
|
||||
//memcpy(g_frameBuffer+g_frameOffset, g_PDUBuffer, g_PDUOffset);
|
||||
//g_frameOffset += g_PDUOffset;
|
||||
//memcpy(frameBuffer+frameOffset, g_PDUBuffer, g_PDUOffset);
|
||||
//frameOffset += g_PDUOffset;
|
||||
if (pdu_buffer != NULL) {
|
||||
memcpy(g_frameBuffer+g_frameOffset, (void*)pdu_buffer, pdu_buffer_size);
|
||||
g_frameOffset += pdu_buffer_size;
|
||||
memcpy(frameBuffer+frameOffset, (void*)pdu_buffer, pdu_buffer_size);
|
||||
frameOffset += pdu_buffer_size;
|
||||
}
|
||||
|
||||
/* Send out the data over the UDP socket */
|
||||
bytesSent = sendto(g_socksd, g_frameBuffer, g_frameOffset, 0,
|
||||
bytesSent = sendto(g_socksd, frameBuffer, frameOffset, 0,
|
||||
(const struct sockaddr *)&g_serv_addr, sizeof(g_serv_addr));
|
||||
|
||||
if (bytesSent != g_frameOffset) {
|
||||
if (bytesSent != frameOffset) {
|
||||
LOG_W(OPT, "sendto() failed (not a thread-safe func)- expected %d bytes, got %d (errno=%d)\n",
|
||||
g_frameOffset, bytesSent, errno);
|
||||
frameOffset, bytesSent, errno);
|
||||
//exit(1);
|
||||
}
|
||||
}
|
||||
@@ -509,6 +504,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
|
||||
/*---------------------------------------------------*/
|
||||
int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p)
|
||||
{
|
||||
uint16_t in_port;
|
||||
subframesSinceCaptureStart = 0;
|
||||
|
||||
if (path != NULL) {
|
||||
@@ -612,37 +608,4 @@ void terminate_opt(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
/*
|
||||
double *timing_analyzer(int index, int direction ){
|
||||
//
|
||||
int i;
|
||||
if (direction==0)// in
|
||||
{
|
||||
timing_in[index]=clock();
|
||||
//if(timing_out[index+100]>timing_in[index+100]);
|
||||
//timing_perf[index+100] +=(double)((double)(timing_out[index+100]-timing_in[index+100])/(double)CLOCKS_PER_SEC);
|
||||
}
|
||||
else
|
||||
{
|
||||
timing_out[index]=clock();
|
||||
if(index==5)timing_perf[index]=0;
|
||||
timing_perf[index] +=(double)((double)(timing_out[index]-timing_in[index])/(((double)CLOCKS_PER_SEC)/1000000));
|
||||
|
||||
//LOG_I(OPT,"timing_analyser index %d =%f\n",index,timing_perf[index]);
|
||||
init_value++;
|
||||
if(init_value==500)
|
||||
{
|
||||
for(i=0;i<6;i++)
|
||||
{
|
||||
LOG_I(OPT,"timing_analyser index %d =%f\n",i,timing_perf[i]);
|
||||
}
|
||||
init_value=0;
|
||||
}
|
||||
|
||||
return(&timing_perf[0]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
@@ -14,14 +14,15 @@ typedef struct
|
||||
int16_t q;
|
||||
} complex16_t;
|
||||
|
||||
typedef struct
|
||||
class SamplesPacket
|
||||
{
|
||||
public:
|
||||
uint64_t timestamp; //timestamp of the packet
|
||||
uint16_t first; //index of first unused sample in samples[]
|
||||
uint16_t last; //end index of samples
|
||||
static const uint16_t samplesCount = 1024; //maximum number of samples in packet
|
||||
complex16_t samples[samplesCount]; //must be power of two
|
||||
} SamplesPacket;
|
||||
};
|
||||
|
||||
complex16_t operator &=(complex16_t & other1, const complex16_t & other) // copy assignment
|
||||
{
|
||||
@@ -30,4 +31,4 @@ complex16_t operator &=(complex16_t & other1, const complex16_t & other) // copy
|
||||
return other1;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -490,6 +490,7 @@ void help (void) {
|
||||
#if T_TRACER
|
||||
printf(" --T_port [port] use given port\n");
|
||||
printf(" --T_nowait don't wait for tracer, start immediately\n");
|
||||
printf(" --T_dont_fork to ease debugging with gdb\n");
|
||||
#endif
|
||||
printf(RESET);
|
||||
fflush(stdout);
|
||||
@@ -2332,6 +2333,7 @@ static void get_options (int argc, char **argv)
|
||||
#if T_TRACER
|
||||
LONG_OPTION_T_PORT,
|
||||
LONG_OPTION_T_NOWAIT,
|
||||
LONG_OPTION_T_DONT_FORK,
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -2355,6 +2357,7 @@ static void get_options (int argc, char **argv)
|
||||
#if T_TRACER
|
||||
{"T_port", required_argument, 0, LONG_OPTION_T_PORT},
|
||||
{"T_nowait", no_argument, 0, LONG_OPTION_T_NOWAIT},
|
||||
{"T_dont_fork", no_argument, 0, LONG_OPTION_T_DONT_FORK},
|
||||
#endif
|
||||
|
||||
{NULL, 0, NULL, 0}
|
||||
@@ -2457,6 +2460,12 @@ static void get_options (int argc, char **argv)
|
||||
T_wait = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case LONG_OPTION_T_DONT_FORK: {
|
||||
extern int T_dont_fork;
|
||||
T_dont_fork = 1;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
case 'A':
|
||||
@@ -2822,6 +2831,7 @@ static void get_options (int argc, char **argv)
|
||||
#if T_TRACER
|
||||
int T_wait = 1; /* by default we wait for the tracer */
|
||||
int T_port = 2021; /* default port to listen to to wait for the tracer */
|
||||
int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */
|
||||
#endif
|
||||
|
||||
int main( int argc, char **argv )
|
||||
@@ -2894,7 +2904,7 @@ int main( int argc, char **argv )
|
||||
openair0_cfg[0].configFilename = rf_config_file;
|
||||
|
||||
#if T_TRACER
|
||||
T_init(T_port, T_wait);
|
||||
T_init(T_port, T_wait, T_dont_fork);
|
||||
#endif
|
||||
|
||||
// initialize the log (see log.h for details)
|
||||
|
||||
@@ -250,6 +250,7 @@ help (void)
|
||||
#if T_TRACER
|
||||
printf ("--T_port [port] use given port\n");
|
||||
printf ("--T_nowait don't wait for tracer, start immediately\n");
|
||||
printf ("--T_dont_fork to ease debugging with gdb\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1258,6 +1259,7 @@ l2l1_task (void *args_p)
|
||||
#if T_TRACER
|
||||
int T_wait = 1; /* by default we wait for the tracer */
|
||||
int T_port = 2021; /* default port to listen to to wait for the tracer */
|
||||
int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------*/
|
||||
@@ -1294,7 +1296,7 @@ main (int argc, char **argv)
|
||||
get_simulation_options (argc, argv); //Command-line options
|
||||
|
||||
#if T_TRACER
|
||||
T_init(T_port, T_wait);
|
||||
T_init(T_port, T_wait, T_dont_fork);
|
||||
#endif
|
||||
|
||||
// Initialize VCD LOG module
|
||||
|
||||
@@ -216,6 +216,7 @@ void get_simulation_options(int argc, char *argv[])
|
||||
#if T_TRACER
|
||||
LONG_OPTION_T_PORT,
|
||||
LONG_OPTION_T_NOWAIT,
|
||||
LONG_OPTION_T_DONT_FORK,
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -254,6 +255,7 @@ void get_simulation_options(int argc, char *argv[])
|
||||
#if T_TRACER
|
||||
{"T_port", required_argument, 0, LONG_OPTION_T_PORT},
|
||||
{"T_nowait", no_argument, 0, LONG_OPTION_T_NOWAIT},
|
||||
{"T_dont_fork", no_argument, 0, LONG_OPTION_T_DONT_FORK},
|
||||
#endif
|
||||
|
||||
{NULL, 0, NULL, 0}
|
||||
@@ -436,6 +438,12 @@ void get_simulation_options(int argc, char *argv[])
|
||||
T_wait = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case LONG_OPTION_T_DONT_FORK: {
|
||||
extern int T_dont_fork;
|
||||
T_dont_fork = 1;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
case 'a':
|
||||
|
||||
+46
-40
@@ -49,15 +49,16 @@ NUM_eNB=1
|
||||
NUM_TRIALS=3
|
||||
|
||||
PRB=[25,50,100]
|
||||
MCS=[0,4,9,10,13,16,17,22,27]
|
||||
MCS=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]
|
||||
#MCS=[0,4,9,10,13,16,17,22,27]
|
||||
#PRB=[100]
|
||||
#MCS=[16]
|
||||
ANT_TX=1 # 2
|
||||
ANT_TX=2 # 2
|
||||
ANT_RX=2 # 2
|
||||
CHANNEL=["N"]
|
||||
#CHANNEL=["C","E","F","G","H","I","L","M"] # A,B,C,D,E,F,
|
||||
TX_MODE=2 # 2,
|
||||
MIN_SNR=0
|
||||
MIN_SNR=10
|
||||
MAX_SNR=40
|
||||
PERF=75
|
||||
OPT="-L"
|
||||
@@ -69,9 +70,9 @@ FRAME=2000
|
||||
def execute(oai, user, pw, host,logfile,logdir,debug,cpu):
|
||||
|
||||
case = '10'
|
||||
oai.send('cd $OPENAIR1_DIR;')
|
||||
oai.send('cd SIMULATION/LTE_PHY;')
|
||||
|
||||
oai.send('cd $OPENAIR_TARGETS;')
|
||||
oai.send('cd bin;')
|
||||
oai.send('cp ./ulsim.Rel10 ./ulsim.Rel10.'+host)
|
||||
try:
|
||||
log.start()
|
||||
test = '300'
|
||||
@@ -80,13 +81,13 @@ def execute(oai, user, pw, host,logfile,logdir,debug,cpu):
|
||||
diag = 'ulsim is not running normally (Segmentation fault / Exiting / FATAL), debugging might be needed'
|
||||
trace = logdir + '/log_' + host + case + test + '_1.txt;'
|
||||
tee = ' 2>&1 | tee ' + trace
|
||||
oai.send_expect_false('./ulsim.rel8.'+ host + ' ' + conf + tee, 'Segmentation fault', 30)
|
||||
oai.send_expect_false('./ulsim.Rel10.'+ host + ' ' + conf + tee, 'Segmentation fault', 30)
|
||||
trace = logdir + '/log_' + host + case + test + '_2.txt;'
|
||||
tee = ' 2>&1 | tee ' + trace
|
||||
oai.send_expect_false('./ulsim.rel8.'+ host + ' ' + conf + tee, 'Exiting', 30)
|
||||
oai.send_expect_false('./ulsim.Rel10.'+ host + ' ' + conf + tee, 'Exiting', 30)
|
||||
trace = logdir + '/log_' + host + case + test + '_3.txt;'
|
||||
tee = ' 2>&1 | tee ' + trace
|
||||
oai.send_expect_false('./ulsim.rel8.'+ host + ' ' + conf + tee, 'FATAL', 30)
|
||||
oai.send_expect_false('./ulsim.Rel10.'+ host + ' ' + conf + tee, 'FATAL', 30)
|
||||
|
||||
except log.err, e:
|
||||
log.fail(case, test, name, conf, e.value, diag, logfile,trace)
|
||||
@@ -100,42 +101,47 @@ def execute(oai, user, pw, host,logfile,logdir,debug,cpu):
|
||||
diag = 'no diagnostic is available, check the log file'
|
||||
for i in range(len(PRB)):
|
||||
for o in range(len(CHANNEL)):
|
||||
MIN_SNR=0
|
||||
MIN_SNR=10
|
||||
for j in range(len(MCS)):
|
||||
for m in range (1,ANT_RX):
|
||||
for p in range(1,TX_MODE):
|
||||
for q in range(MIN_SNR,MAX_SNR):
|
||||
#if if PRB[i] :
|
||||
for r in range(5,PRB[i]):
|
||||
for q in range(MIN_SNR,MAX_SNR):
|
||||
|
||||
|
||||
if r ==7 or r ==11 or r ==14 or r == 17 or r==19 or r == 21 or r == 23 or r == 26 or r == 28 :
|
||||
continue
|
||||
|
||||
conf = '-B' + str(PRB[i]) + ' -m'+str(MCS[j]) + ' -y'+str(m) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -e.1 -P -n'+str(FRAME)+' -O'+str(PERF)+' '+ OPT
|
||||
trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(MCS[j])+ '_antrx' + str(m) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log'
|
||||
tee = ' 2>&1 | tee ' + trace
|
||||
if cpu > -1 :
|
||||
cmd = 'taskset -c ' + str(cpu) + ' ./ulsim.rel8.'+ host + ' ' + conf + tee
|
||||
else :
|
||||
cmd = './ulsim.rel8.'+ host + ' ' + conf + tee
|
||||
|
||||
if debug :
|
||||
print cmd
|
||||
|
||||
# match = oai.send_expect_re(cmd, 'passed', 0, 1000)
|
||||
match =1
|
||||
if match :
|
||||
log.ok(case, str(test), name, conf, '', logfile)
|
||||
MIN_SNR = q - 1 # just to speed up the test
|
||||
test+=1
|
||||
break # found the smallest snr
|
||||
else :
|
||||
if q == MAX_SNR -1 :
|
||||
log.skip(case,str(test), name, conf,'','',logfile)
|
||||
conf = '-B' + str(PRB[i]) + ' -r'+str(r) + ' -m'+str(MCS[j]) + ' -y'+str(m) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -e.1 -P -n'+str(FRAME)+' -O'+str(PERF)+' '+ OPT
|
||||
trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+ '_rb'+str(r)+'_mcs'+ str(MCS[j])+ '_antrx' + str(m) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log'
|
||||
tee = ' 2>&1 | tee ' + trace
|
||||
if cpu > -1 :
|
||||
cmd = 'taskset -c ' + str(cpu) + ' ./ulsim.Rel10.'+ host + ' ' + conf + tee
|
||||
else :
|
||||
cmd = './ulsim.Rel10.'+ host + ' ' + conf + tee
|
||||
|
||||
if debug :
|
||||
print cmd
|
||||
|
||||
match = oai.send_expect_re(cmd, 'passed', 0, 1000)
|
||||
#match =1
|
||||
if match :
|
||||
|
||||
log.ok(case, str(test), name, conf, '', logfile)
|
||||
MIN_SNR = q - 1 # just to speed up the test
|
||||
test+=1
|
||||
break
|
||||
try:
|
||||
if os.path.isfile(trace) :
|
||||
os.remove(trace)
|
||||
except OSError, e: ## if failed, report it back to the user ##
|
||||
print ("Error: %s - %s." % (e.filename,e.strerror))
|
||||
|
||||
break # found the smallest snr
|
||||
else :
|
||||
if q == MAX_SNR -1 :
|
||||
log.skip(case,str(test), name, conf,'','',logfile)
|
||||
test+=1
|
||||
break
|
||||
try:
|
||||
if os.path.isfile(trace) :
|
||||
os.remove(trace)
|
||||
except OSError, e: ## if failed, report it back to the user ##
|
||||
print ("Error: %s - %s." % (e.filename,e.strerror))
|
||||
|
||||
|
||||
|
||||
except log.err, e:
|
||||
|
||||
Reference in New Issue
Block a user