diff --git a/AbstractTrajectorySimulatorBase.py b/AbstractTrajectorySimulatorBase.py index 22b38e4..23fcfc6 100644 --- a/AbstractTrajectorySimulatorBase.py +++ b/AbstractTrajectorySimulatorBase.py @@ -28,11 +28,14 @@ from ModeS import ModeS class AbstractTrajectorySimulatorBase(threading.Thread,abc.ABC): - def __init__(self,mutex,broadcast_thread,aircraftinfos): + def __init__(self,mutex,broadcast_thread,aircraftinfos,waypoints_file=0,logfile=0,duration=None): super().__init__() self._mutex = mutex self._broadcast_thread = broadcast_thread self._aircraftinfos = aircraftinfos + self._waypoints_file = waypoints_file + self._logfile = logfile + self._duration = duration self._modeSencoder = ModeS(df=17,icao=self._aircraftinfos.icao,ca=self._aircraftinfos.capability) diff --git a/FixedTrajectorySimulator.py b/FixedTrajectorySimulator.py index 1c0f5f0..336fd52 100644 --- a/FixedTrajectorySimulator.py +++ b/FixedTrajectorySimulator.py @@ -1,4 +1,4 @@ -""" simplest implementation of a trajectory simulation where the simulated +""" Simplest implementation of a trajectory simulation where the simulated aircraft is steady at the provided position mutex protection occurs when calling replace_message @@ -13,15 +13,40 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ - +from datetime import datetime +import random +import string from AbstractTrajectorySimulatorBase import AbstractTrajectorySimulatorBase +LAT_LON_SQUARE = 1.0000 + class FixedTrajectorySimulator(AbstractTrajectorySimulatorBase): - def __init__(self,mutex,broadcast_thread,aircrafinfos): - super().__init__(mutex,broadcast_thread,aircrafinfos) + def __init__(self,mutex,broadcast_thread,aircraftinfos,waypoints_file,logfile): + super().__init__(mutex,broadcast_thread,aircraftinfos,waypoints_file,logfile) + + def refresh_delay(self): + return 0.5 - def refresh_delay(self): - return 0.05 + def update_aircraftinfos(self): + chars = string.ascii_uppercase + string.digits + self._icao = '0x'+''.join(random.sample(string.digits,6)) + self._aircraftinfos.callsign = ''.join(random.sample(chars, 8)) + self._aircraftinfos.lat_deg += random.uniform(-LAT_LON_SQUARE,LAT_LON_SQUARE) + self._aircraftinfos.lon_deg += random.uniform(-1.0000,1.0000) + self._aircraftinfos.alt_msl_m += random.uniform(-self._aircraftinfos.alt_msl_m,self._aircraftinfos.alt_msl_m) + self._aircraftinfos.speed_mps += random.uniform(-self._aircraftinfos.speed_mps,self._aircraftinfos.speed_mps) + self._aircraftinfos.track_angle_deg += random.uniform(0,360) + + # Track angle 0-360 wrapping + if self._aircraftinfos.track_angle_deg < 0: + self._aircraftinfos.track_angle_deg += 360 + elif self._aircraftinfos.track_angle_deg > 360: + self._aircraftinfos.track_angle_deg -= 360 - def update_aircraftinfos(self): - pass + print("[!] FIXED TRAJECTORY\t\tICAO: "+self._icao+"\t\tCallsign: "+self._aircraftinfos.callsign) + print(" [:] Lat: "+str(self._aircraftinfos.lat_deg)+" | Lon: "+str(self._aircraftinfos.lon_deg)+" | Alt: "+str(self._aircraftinfos.alt_msl_m)+" | Spd: "+str(self._aircraftinfos.speed_mps)+" | Trk Angle: "+str(self._aircraftinfos.track_angle_deg)) + + # Write to logfile -> CSV format: DATETIME,CALLSIGN,LAT,LONG,ALT,SPD,TRKANGLE + with open(self._logfile,"a") as fLog: + now=str(datetime.now()) + fLog.write("\n"+now+","+self._aircraftinfos.callsign+","+str(self._aircraftinfos.lat_deg)+","+str(self._aircraftinfos.lon_deg)+","+str(self._aircraftinfos.alt_msl_m)+","+str(self._aircraftinfos.speed_mps)+","+str(self._aircraftinfos.track_angle_deg)) diff --git a/FlightPathSimulator.py b/FlightPathSimulator.py new file mode 100644 index 0000000..999a31c --- /dev/null +++ b/FlightPathSimulator.py @@ -0,0 +1,123 @@ +""" Dynamically generates a randomized conical flight path from initial values + +------------------------------------------------------- +mutex protection occurs when calling replace_message +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along with +this program. If not, see . +""" + +import random +import datetime, math +from math import asin, atan2, cos, degrees, radians, sin +from AbstractTrajectorySimulatorBase import AbstractTrajectorySimulatorBase + +REFRESH_RATE = 5 + +def get_point_at_distance(lat1, lon1, d, bearing, R=6371): + """ + lat: initial latitude, in degrees + lon: initial longitude, in degrees + d: target distance from initial, in km + bearing: (true) heading in degrees + R: optional radius of sphere, defaults to mean radius of earth in km + Returns new lat/lon coordinate {d}km from initial, in degrees + """ + lat1 = radians(lat1) + lon1 = radians(lon1) + a = radians(bearing) + lat2 = asin(sin(lat1) * cos(d/R) + cos(lat1) * sin(d/R) * cos(a)) + lon2 = lon1 + atan2( + sin(a) * sin(d/R) * cos(lat1), + cos(d/R) - sin(lat1) * sin(lat2) + ) + return (degrees(lat2), degrees(lon2)) + +class FlightPathSimulator(AbstractTrajectorySimulatorBase): + def __init__(self,mutex,broadcast_thread,aircraftinfos,waypoints_file,logfile,duration): + super().__init__(mutex,broadcast_thread,aircraftinfos,waypoints_file,logfile,duration) + self._starttime = datetime.datetime.now(datetime.timezone.utc) + self._icao = str(aircraftinfos.icao) + self._lat0 = aircraftinfos.lat_deg + self._lon0 = aircraftinfos.lon_deg + + self._alt_m = aircraftinfos.alt_msl_m + self._speed_mps = aircraftinfos.speed_mps + self._duration = duration + self._generate = True + self.counter = 0 + + def refresh_delay(self): + return REFRESH_RATE + + def update_aircraftinfos(self): + dist_spd = ((self._speed_mps * 1.852)/3600)*REFRESH_RATE + + ##### PRE-GENERATION PROTOTYPE CODE ##### + """ + if self._generate: + dist_spd = ((self._speed_mps * 1.852)/3600) + genLat = self._aircraftinfos.lat_deg + genLon = self._aircraftinfos.lon_deg + genAlt = self._aircraftinfos.alt_msl_m + genSpd = self._aircraftinfos.speed_mps + genTrk = self._aircraftinfos.track_angle_deg + flightPath = [] + + # Pre-generate flight path strings to list + for i from 1 to self._duration: + dataFrame = self._aircraftinfos.callsign+','+(str)genLat+','+(str)genLon+','+(str)genAlt+','+(str)genSpd+','+(str)genTrk + flightPath.append(dataFrame) + # Calculate new Lat/Lon based on Speed+Track Angle + genLat, genLon = get_point_at_distance(genLat, genLon, dist_spd, genTrk) + # Randomized trajectory cone + genAlt += random.uniform(-5,5) + genSpd += random.uniform(-10,10) + genTrk+= random.uniform(-3,3) + + # Write generated flight path to temp file + with open('spoof.csv','a') as spoof: + for frame in flightPath: + spoof.write(frame) + + # temp file spoof.csv format: "<0:callsign>,<1:lat>,<2:lon>,<3:alt>,<4:speed>,<5:track angle>" + self._generate = False + else: + with open('spoof.csv', 'r') as spoof: + for self._counter in spoof: + posi = line.split(',') + self._aircraftinfos.lat_deg = posi[1] + self._aircraftinfos.lon_deg = posi[2] + self._aircraftinfos.alt_msl_m = posi[3] + self._aircraftinfos.speed_mps = posi[4] + self._aircraftinfos.track_angle_deg = posi[5] + + """ + + + self._aircraftinfos.lat_deg, self._aircraftinfos.lon_deg = get_point_at_distance(self._aircraftinfos.lat_deg, self._aircraftinfos.lon_deg, dist_spd, self._aircraftinfos.track_angle_deg) + + # Randomized trajectory cone + self._aircraftinfos.speed_mps += random.uniform(-10,10) + self._aircraftinfos.track_angle_deg += random.uniform(-3,3) + self._aircraftinfos.alt_msl_m += random.uniform(-5,5) + + # Track Angle 0-360 wrapping + if self._aircraftinfos.track_angle_deg < 0: + self._aircraftinfos.track_angle_deg += 360 + elif self._aircraftinfos.track_angle_deg > 360: + self._aircraftinfos.track_angle_deg -= 360 + + print("[!] FLIGHT SIM\t\tICAO: "+self._icao+"\t\tCallsign: "+self._aircraftinfos.callsign) + print(" [:] Lat: "+str(self._aircraftinfos.lat_deg)+" | Lon: "+str(self._aircraftinfos.lon_deg)+" | Alt: "+str(self._aircraftinfos.alt_msl_m)+" | Spd: "+str(self._aircraftinfos.speed_mps)+" | Trk Angle: "+str(self._aircraftinfos.track_angle_deg)) + + #Write to logfile -> CSV format: DATETIME,CALLSIGN,LAT,LONG,ALT,SPD,TRKANGLE + with open(self._logfile,"a") as fLog: + now=str(datetime.datetime.now()) + fLog.write("\n"+now+","+self._aircraftinfos.callsign+","+str(self._aircraftinfos.lat_deg)+","+str(self._aircraftinfos.lon_deg)+","+str(self._aircraftinfos.alt_msl_m)+","+str(self._aircraftinfos.speed_mps)+","+str(self._aircraftinfos.track_angle_deg)) diff --git a/HackRfBroadcastThread.py b/HackRfBroadcastThread.py index 4b91414..dc8e31c 100644 --- a/HackRfBroadcastThread.py +++ b/HackRfBroadcastThread.py @@ -65,7 +65,6 @@ def __init__(self,airborne_position_refresh_period = 150000): self._messages_feed_threads = {} - # Initialize pyHackRF library result = HackRF.initialize() if (result != LibHackRfReturnCode.HACKRF_SUCCESS): @@ -74,42 +73,48 @@ def __init__(self,airborne_position_refresh_period = 150000): # Initialize HackRF instance (could pass board serial or index if specific board is needed) self._hackrf_broadcaster = HackRF() - # Do requiered settings - # so far hard-coded e.g. gain and disabled amp are specific to hardware test setup - # with hackrf feeding a flight aware dongle through cable + attenuators (-50dB) + # HackRF Transmit Settings result = self._hackrf_broadcaster.open() if (result != LibHackRfReturnCode.HACKRF_SUCCESS): print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) - + self._hackrf_broadcaster.setCrystalPPM(0) + + result = self._hackrf_broadcaster.setAmplifierMode(LibHackRfHwMode.HW_MODE_ON) # LNA Amplifier ON or OFF + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + result = self._hackrf_broadcaster.setLNAGain(14) # LNA Amplifier Gain (default 14) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + result = self._hackrf_broadcaster.setAntennaPowerMode(LibHackRfHwMode.HW_MODE_ON) # Antenna Power Mode ON or OFF + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + # 2MHz sample rate to meet ADS-B spec of 0.5µs PPM symbol result = self._hackrf_broadcaster.setSampleRate(2000000) if (result != LibHackRfReturnCode.HACKRF_SUCCESS): print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) - + result = self._hackrf_broadcaster.setBasebandFilterBandwidth(HackRF.computeBaseBandFilterBw(2000000)) if (result != LibHackRfReturnCode.HACKRF_SUCCESS): print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) - - #result = self.hackrf_broadcaster.setFrequency(868000000) # free frequency for over the air brodcast tests - result = self._hackrf_broadcaster.setFrequency(1090000000) # do not use 1090MHz for actual over the air broadcasting - # only if you use wire feed (you'll need attenuators in that case) + + #result = self.hackrf_broadcaster.setFrequency(868000000) # 868MHz = Free frequency for over the air broadcast tests + result = self._hackrf_broadcaster.setFrequency(1090000000) # Actual 1090MHz frequency setting if (result != LibHackRfReturnCode.HACKRF_SUCCESS): print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) - - result = self._hackrf_broadcaster.setTXVGAGain(4) # week gain (used for wire feed + attenuators) + + result = self._hackrf_broadcaster.setTXVGAGain(47) # TX VGA Gain (4 for wire feed + attenuators, 47 for wireless) if (result != LibHackRfReturnCode.HACKRF_SUCCESS): print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) - result = self._hackrf_broadcaster.setAmplifierMode(LibHackRfHwMode.HW_MODE_OFF) - if (result != LibHackRfReturnCode.HACKRF_SUCCESS): - print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + self._hackrf_broadcaster.printBoardInfos() # Print HackRF Board Instance Info self._tx_context = hackrf_tx_context() self._do_stop = False - # do hackRF lib and instance cleanup at object destruction time + # HackRF lib and instance cleanup at object destruction time def __del__(self): result = self._hackrf_broadcaster.close() if (result != LibHackRfReturnCode.HACKRF_SUCCESS): @@ -129,9 +134,13 @@ def getMutex(self): #@Timed def replace_message(self,type,frame_even,frame_odd = []): + # 1090ES Frame IQ modulating frame_IQ = self._lowlevelencoder.frame_1090es_ppm_modulate_IQ(frame_even, frame_odd) - # this will usually be called from another thread, so mutex lock mecanism is used during update + #with open('temp.iq','wb') as iq: + # iq.write(frame_IQ) + + # this will usually be called from another thread, so mutex lock mechanism is used during update self._mutex.acquire() calling_thread = threading.current_thread() @@ -161,7 +170,7 @@ def broadcast_data(self,data): self._tx_context.buffer_length = length self._tx_context.buffer = (c_ubyte*self._tx_context.buffer_length).from_buffer_copy(data) - # TODO : need to evaluate if mutex protection is requiered during full broadcast or + # TODO : need to evaluate if mutex protection is required during full broadcast or # could be reduced to buffer filling (probably can be reduced) # reduced version is when next line mutex.release() is uncommented and # mutex release at the end of this method is commented @@ -169,16 +178,15 @@ def broadcast_data(self,data): self._mutex.release() result = self._hackrf_broadcaster.startTX(hackrfTXCB,self._tx_context) - if (result != LibHackRfReturnCode.HACKRF_SUCCESS): - print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) - + print("[!] startTXError:",result, ",", HackRF.getHackRfErrorCodeName(result)) + while self._hackrf_broadcaster.isStreaming(): time.sleep(sleep_time) result = self._hackrf_broadcaster.stopTX() if (result != LibHackRfReturnCode.HACKRF_SUCCESS): - print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + print("[!] stopTXError:",result, ",", HackRF.getHackRfErrorCodeName(result)) #self._mutex.release() @@ -186,6 +194,7 @@ def run(self): while not self._do_stop: #self._mutex.acquire() + now = datetime.datetime.now(datetime.timezone.utc) plane_messages = bytearray() sleep_time = 10.0 @@ -198,9 +207,9 @@ def run(self): else: remaining = -float('inf') sleep_time = 0.0 - # Time throttling : messages are broadcasted only at provided time intervall - # TODO : implement UTC syncing mecanism (requiered that the actual host clock is UTC synced) ? - # which may be implemented to some accuracy level with ntp or GPS + PPS mecanisms ? in Python ? + # Time throttling: messages are broadcasted only at provided time interval + # TODO : Implement UTC syncing mechanism (requires that the actual host clock is UTC synced) ? + # which may be implemented to some accuracy level with ntp or GPS + PPS mechanisms in Python ? if (v[0] != None and len(v[0]) > 0) and remaining <= 0.0: plane_messages.extend(v[0]) v[1] = now @@ -208,8 +217,7 @@ def run(self): remaining = math.fmod(remaining,v2_sec) if remaining < sleep_time: sleep_time = remaining - - + #print("sleep_time1",sleep_time) bc_length = len(plane_messages) if (bc_length > 0): @@ -231,4 +239,4 @@ def run(self): #self._mutex.release() # upon exit, reset _do_stop flag in case there is a new start - self._do_stop = False \ No newline at end of file + self._do_stop = False diff --git a/HackRfBroadcastThread_control.py b/HackRfBroadcastThread_control.py new file mode 100644 index 0000000..90cd004 --- /dev/null +++ b/HackRfBroadcastThread_control.py @@ -0,0 +1,234 @@ +""" This class holds the aircraft states from the ADS-B point of view + +It is refreshed by the simulation thread (or sensor feed thread) and will +be used to provide broadcasted informations + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along with +this program. If not, see . +""" + +# +# This class overrides threading.Thread and provides service to broacast +# ADS-B message though a HackRF device +# message updates are performed from a separate thread which will +# update/push messages thanks to the replace_message method +# thread loop will pump and broacast updated message (soft realtime) +# +# mutex protection mecanism is implemented in +# replace_message() which is call from other thread +# broadcast_one_message() which is called from this thread +# in order to prevent concurrent access to broadcasted data buffers + +import time, datetime, math +import threading + +from CustomDecorators import * +from ADSBLowLevelEncoder import ADSBLowLevelEncoder +from pyhackrf import * +from ctypes import * + +class hackrf_tx_context(Structure): + _fields_ = [("buffer", POINTER(c_ubyte)), + ("last_tx_pos", c_int), + ("buffer_length", c_int) ] + +def hackrfTXCB(hackrf_transfer): + user_tx_context = cast(hackrf_transfer.contents.tx_ctx, POINTER(hackrf_tx_context)) + tx_buffer_length = hackrf_transfer.contents.valid_length + left = user_tx_context.contents.buffer_length - user_tx_context.contents.last_tx_pos + addr_dest = addressof(hackrf_transfer.contents.buffer.contents) + addr_src = addressof(user_tx_context.contents.buffer.contents) + + if (left > tx_buffer_length): + memmove(addr_dest,addr_src,tx_buffer_length) + user_tx_context.contents.last_tx_pos += tx_buffer_length + return 0 + else: + memmove(addr_dest,addr_src,left) + memset(addr_dest+left,0,tx_buffer_length-left) + return -1 + +@Singleton +class HackRfBroadcastThread(threading.Thread): + def __init__(self,airborne_position_refresh_period = 150000): + super().__init__() + self._mutex = threading.Lock() + + self._lowlevelencoder = ADSBLowLevelEncoder() + + self._messages_feed_threads = {} + + + # Initialize pyHackRF library + result = HackRF.initialize() + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + # Initialize HackRF instance (could pass board serial or index if specific board is needed) + self._hackrf_broadcaster = HackRF() + + # Do requiered settings + # so far hard-coded e.g. gain and disabled amp are specific to hardware test setup + # with hackrf feeding a flight aware dongle through cable + attenuators (-50dB) + result = self._hackrf_broadcaster.open() + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + self._hackrf_broadcaster.setCrystalPPM(0) + + result = self._hackrf_broadcaster.setSampleRate(2000000) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + result = self._hackrf_broadcaster.setBasebandFilterBandwidth(HackRF.computeBaseBandFilterBw(2000000)) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + #result = self.hackrf_broadcaster.setFrequency(868000000) # free frequency for over the air brodcast tests + result = self._hackrf_broadcaster.setFrequency(1090000000) # do not use 1090MHz for actual over the air broadcasting + # only if you use wire feed (you'll need attenuators in that case) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + result = self._hackrf_broadcaster.setAmplifierMode(LibHackRfHwMode.HW_MODE_ON) # LNA Amplifier ON or OFF + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + result = self._hackrf_broadcaster.setTXVGAGain(47) # week gain (used for wire feed + attenuators) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + self._tx_context = hackrf_tx_context() + + self._do_stop = False + + # do hackRF lib and instance cleanup at object destruction time + def __del__(self): + result = self._hackrf_broadcaster.close() + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + result = HackRF.deinitialize() + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + def stop(self): + self._do_stop = True + + def getMutex(self): + return self._mutex + + # updates the next data to be broadcaster for a given message type + #@Timed + def replace_message(self,type,frame_even,frame_odd = []): + + frame_IQ = self._lowlevelencoder.frame_1090es_ppm_modulate_IQ(frame_even, frame_odd) + + # this will usually be called from another thread, so mutex lock mecanism is used during update + + self._mutex.acquire() + calling_thread = threading.current_thread() + if calling_thread in self._messages_feed_threads: + self._messages_feed_threads[calling_thread][type][0] = frame_IQ + self._mutex.release() + + def register_track_simulation_thread(self,feeder_thread): + if feeder_thread in self._messages_feed_threads: + print(feeder_thread,"already registred as a feeder") + else: + self._messages_feed_threads[feeder_thread] = {} + + # key : "name of message" value : ["data to be broadcasted", datetime of last broadcast, delay_between 2 messages of this type] + self._messages_feed_threads[feeder_thread]["identification"] = [None, None, feeder_thread.identitification_message_period_us] + self._messages_feed_threads[feeder_thread]["register_6116"] = [None, None, feeder_thread.squawk_message_period_us] + self._messages_feed_threads[feeder_thread]["airborne_position"] = [None, None, feeder_thread.position_message_period_us] + self._messages_feed_threads[feeder_thread]["surface_position"] = [None, None, feeder_thread.position_message_period_us] + self._messages_feed_threads[feeder_thread]["airborne_velocity"] = [None, None, feeder_thread.velocity_message_period_us] + + def broadcast_data(self,data): + length = len(data) + if length != 0: + sleep_time = length*0.50e-6*(1.0+1e-6*self._hackrf_broadcaster.getCrystalPPM()) + self._tx_context.last_tx_pos = 0 + self._mutex.acquire() + self._tx_context.buffer_length = length + self._tx_context.buffer = (c_ubyte*self._tx_context.buffer_length).from_buffer_copy(data) + + # TODO : need to evaluate if mutex protection is requiered during full broadcast or + # could be reduced to buffer filling (probably can be reduced) + # reduced version is when next line mutex.release() is uncommented and + # mutex release at the end of this method is commented + + self._mutex.release() + + result = self._hackrf_broadcaster.startTX(hackrfTXCB,self._tx_context) + + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + while self._hackrf_broadcaster.isStreaming(): + time.sleep(sleep_time) + + result = self._hackrf_broadcaster.stopTX() + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + print("Error :",result, ",", HackRF.getHackRfErrorCodeName(result)) + + #self._mutex.release() + + def run(self): + + while not self._do_stop: + #self._mutex.acquire() + now = datetime.datetime.now(datetime.timezone.utc) + plane_messages = bytearray() + sleep_time = 10.0 + for thread_broadcast_schedule in self._messages_feed_threads.values(): + for v in thread_broadcast_schedule.values(): + #now = datetime.datetime.now(datetime.timezone.utc) + v2_sec = v[2]*1e-6 + if v[1] != None: + remaining = v2_sec - (now - v[1]).total_seconds() + else: + remaining = -float('inf') + sleep_time = 0.0 + # Time throttling : messages are broadcasted only at provided time intervall + # TODO : implement UTC syncing mecanism (requiered that the actual host clock is UTC synced) ? + # which may be implemented to some accuracy level with ntp or GPS + PPS mecanisms ? in Python ? + if (v[0] != None and len(v[0]) > 0) and remaining <= 0.0: + plane_messages.extend(v[0]) + v[1] = now + elif remaining > 0.0: + remaining = math.fmod(remaining,v2_sec) + if remaining < sleep_time: + sleep_time = remaining + + + #print("sleep_time1",sleep_time) + bc_length = len(plane_messages) + if (bc_length > 0): + self.broadcast_data(plane_messages) + + elasped = (datetime.datetime.now(datetime.timezone.utc) - now).total_seconds() + sleep_time -= elasped + + if sleep_time < 0.0: + sleep_time = 0.0 + elif sleep_time < 0.5: + sleep_time *= 0.1 + else: + sleep_time = 0.5 + + time.sleep(0.1*sleep_time) + else: + time.sleep(0.000001) + #self._mutex.release() + + # upon exit, reset _do_stop flag in case there is a new start + self._do_stop = False diff --git a/PseudoCircleTrajectorySimulator.py b/PseudoCircleTrajectorySimulator.py deleted file mode 100644 index 695c019..0000000 --- a/PseudoCircleTrajectorySimulator.py +++ /dev/null @@ -1,48 +0,0 @@ -""" simplest implementation of a trajectory simulation where the simulated -aircraft is flying a pseudo circle around center position at max load factor - -mutex protection occurs when calling replace_message - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along with -this program. If not, see . -""" - -import datetime, math -from AbstractTrajectorySimulatorBase import AbstractTrajectorySimulatorBase - -class PseudoCircleTrajectorySimulator(AbstractTrajectorySimulatorBase): - def __init__(self,mutex,broadcast_thread,aircrafinfos): - super().__init__(mutex,broadcast_thread,aircrafinfos) - - self._lat0 = aircrafinfos.lat_deg - self._lon0 = aircrafinfos.lon_deg - - def refresh_delay(self): - return 0.02 - - def update_aircraftinfos(self): - turn_rate = self.getTurnRate() - R = self.getTurnRadius() - Rlat = (R/6371000.0)*(180.0/math.pi) - ta = self._aircraftinfos.track_angle_deg - (turn_rate*self.refresh_delay())*(180.0/math.pi) - ta = math.fmod(ta,360.0) - self._aircraftinfos.track_angle_deg = ta # intermediate value and single assignment needed at time because of - # setter and change detection mecanism in AircraftInfo (somehox shitty) - # TODO : implement better mecanism - self._aircraftinfos.lat_deg = self._lat0 - Rlat*math.sin(self._aircraftinfos.track_angle_deg*math.pi/180.0) - self._aircraftinfos.lon_deg = self._lon0 + Rlat/math.cos(self._aircraftinfos.lat_deg*math.pi/180.0)*math.cos(self._aircraftinfos.track_angle_deg*math.pi/180.0) - #self._lasttime = now - - def getTurnRate(self): - tr = (9.81/self._aircraftinfos.speed_mps)*math.sqrt(self._aircraftinfos.maxloadfactor**2.0 - 1.0) - return tr - - def getTurnRadius(self): - return self._aircraftinfos.speed_mps/self.getTurnRate() diff --git a/README.md b/README.md index e01fe8a..c503b62 100755 --- a/README.md +++ b/README.md @@ -1,146 +1,105 @@ -# realtime ADS-B out +# ADS-B Track Player ## Foreword -This project is inspired and reuse several parts of several other ADS-B / mode S projects amongst which: +This project is a highly modified fork of: -- https://github.com/lyusupov/ADSB-Out -- https://github.com/nzkarit/ADSB-Out and https://github.com/pynstrom/adsb-out -- https://github.com/bistromath/gr-air-modes -- https://github.com/junzis/pyModeS +https://github.com/Matioupi/realtime-adsb-out (forked on 25 Apr 2023): -All those repositories are published under GNU General Public License v3.0. This is also the license chosen for this repository. -Please let me know if you have issues or require more explicit citations about reused source code. - -I wrote a short article (in french) about how (and why) I used this repository to spoof data on Flightradar24 on the 11th of March 2022: -https://www.linkedin.com/pulse/comment-et-pourquoi-jai-tromp%25C3%25A9-flightradar24-mathieu-peyr%25C3%25A9ga/?trackingId=%2BGNCsBDoBSYuF8W3JPNclw%3D%3D - -## Project goals - -The initial project goals are oriented towards: - -- completing the set of broadcastable messages that have already been implemented "adsb-out" in referenced projects. -- fixing bugs / adding features in existing code. -- producing a software architecture that better suit my understanding/habits. -- beeing able to live feed HackRF through a libhackrf python wrapper layer, rather than generating an IQ sample files that would later be hackrf_transfer'd. - -## HackRF python wrapper - -HackRF python wrapper `pyhackrf.py` is included in this repository and was also proposed to be merged into hackRF main repository: https://github.com/greatscottgadgets/hackrf/pull/1058 but this has not been accepted. I'll try to keep maintaining it if API of libhackrf change and may think to build a proper independant Python package. -This repo only uses TX feature of the python wrapper, but RX is also possible (see examples in https://github.com/Matioupi/hackrf/tree/python_wrapper/host/python) - -## Software architecture - -The workflow is divided between 3 execution threads: +It is thus important to read the README of that project. -- main thread wich performs all initializations and control user inputs (mainly start / stop simulation for now) -- hackrf broadcasting thread which pump encoded messages and send them over the air with a predefined schedule -- trajectory simulation thread which feed brodcasting thread with encoded messages matching a real time simulated trajectory +As such, it draws inspiration and some code from all repositories referenced in that original project: + https://github.com/lyusupov/ADSB-Out + https://github.com/nzkarit/ADSB-Out and https://github.com/pynstrom/adsb-out + https://github.com/bistromath/gr-air-modes + https://github.com/junzis/pyModeS -The message encoding is splitted into mode S "frame encoding" and "low level encoding" which handles PPM modulation and conversion to hackRF IQ sample format. -Software source code structure tries to reflect those 2 different layers. - -So far only "simple" simulated trajectories are available, but one can easily extend/fork behaviour to e.g. have a flight informations coming from a flight simulator (X-plane would be pretty well suited for that purpose through it's UDP aircraft state broadcast facility) or use actual sensors to feed live data. - -## Usage and RF broadcast disclaimer - -Usage can be demonstrated together with `dump1090-mutability` or `dump1090-fa` and associated webservers or text message views. +All referenced repositories are published under GNU General Public License v3.0. This is also the license chosen for this repository. +Please let me know if you have issues or require more explicit citations about reused source code. -Repository source code is tuned for a 1090 MHz brodcast with **direct wire feed** to a receiver SDR dongle (no over the air broadcast). -The hardware setup I'm using is pictured below. Please note the RF attenuators (-20dB and -30dB). -The extra 1090MHz filter is probably not requiered as the flight aware dongle already features 1090 MHz filtering. -My HackRF is fitted with a 0.5 ppm TCXO +## Software Architecture -![test setup image](./images/test-setup.jpg "test setup") +As per the project 'realtime-adsb-out', the workflow is divided between 3 execution threads: -The default hackrf settings in repo are : -- 1090 MHz -- LNA amplificator disabled -- TX gain 4dB -- Sample rate needs to be 2MHz as this matches the ADS-B specification where PPM symbols last for 0.5 µs. +- Main thread which performs all initializations and control user inputs (mainly start / stop simulation for now) +- HackRF broadcasting thread which pumps encoded messages and sends them over the air with a predefined schedule +- Trajectory simulation thread which feeds the broadcasting thread with encoded messages matching a real time simulated trajectory -Actual ADS-B brodcast frequency is 1090MHz which in most if not all places is a reserved band. -Some critical **flight safety feature** do rely on actual ADS-B broadcasts. -Unless you have special authorisations, **you should NEVER broadcast over the air at this frequency**. +The message encoding is split into Mode S "frame encoding" and "low level encoding" which handles PPM modulation and conversion to HackRF IQ sample format. The source code structure tries to reflect these two layers. -If you can't use a wired RF feeding between hackRF and your SDR receiver for your test setup, you can easily modify source code in order to use a "fake" free frequency (e.g. 868MHz) and setup dump1090 accordingly to match this "fake" frequency by adding switch `--freq 868000000` to your usual `dump1090` command line. Increasing TX gain may be needed in that use case. +## Modifications from 'realtime-adsb-out' -By the way, I believe that the fact that one with 200$ hardware would actually be able to broadcast at 1090MHz and produce some fake ADS-B aircraft tracks highlights a serious weakness in ADS-B design. -Those forged broadcasts may be used to spoof ATC, trigger TCAS or other malicious behaviours. +- Waypoint trajectory simulation is implemented +- Circle and Random trajectory simulations have been removed +- Increased verbosity +- HackRF configured for wireless RF transmission (Default: 1090MHz) +[NOTE: It is illegal in most jurisdictions to transmit at 1090MHz!] -## Command line examples +## Command Line Examples -#### *Command line switches can be displayed with* +#### *Command line switches (accessed with '-h')* ``` -mathieu@devbox:~/Dev/matioupi/realtime-adsb-out$ ./realtime-adsb-out.py -h -Usage: ./realtime-adsb-out.py [options] - --h | --help Display help message. ---scenario Scenario mode with a provided scenario filepath ---icao Callsign in hex, Default:0x508035 ---callsign Callsign (8 chars max), Default:DEADBEEF ---squawk 4-digits 4096 code squawk, Default:7000 ---trajectorytype Type of simulated trajectory amongst : - fixed : steady aircraft - circle : pseudo circular flight - random : random positions inside circle area - waypoints : fly long flight path - Default:fixed ---lat Latitude for the plane in decimal degrees, Default:50.44994 ---long Longitude for the place in decimal degrees. Default:30.5211 ---altitude Altitude in decimal feet, Default:1500.0 ---speed Airspeed in decimal kph, Default:300.0 ---vspeed Vertical speed en ft/min, positive up, Default:0 ---maxloadfactor Specify the max load factor for aircraft simulation. Default:1.45 ---trackangle Track angle in decimal degrees. Default:0 ---timesync 0/1, 0 indicates time not synchronous with UTC, Default:0 ---capability Capability, Default:5 ---typecode ADS-B message type, Default:11 ---sstatus Surveillance status, Default:0 ---nicsupplementb NIC supplement-B, Default:0 ---surface Aircraft located on ground, Default:False ---waypoints Waypoints file for waypoints trajectory ---posrate position frame broadcast period in µs, Default: 150000 +six3oo@computer:~/adsb-track-player$ ./adsb-track-player.py -h +Usage: ./adsb-track-player.py [options] + +-h | --help Display help message +--scenario Scenario mode, argument is scenario JSON filepath + waypoints : Include waypoints.txt file in script directory +--icao Callsign in hex, default: 0x508035 +--callsign Callsign (8 chars max), Default: DEADBEEF +--squawk 4-digit 4096 code squawk, Default: 7000 +--trajectorytype Types of simulated trajectories: + fixed : fixed broadcast + flightsim : dynamically generated flight path + Default: fixed +--lat Latitude for the plane in decimal degrees, Default: 50.44994 +--long Longitude for the plane in decimal degrees. Default: 30.5211 +--altitude Altitude in decimal feet, Default: 1500.0 +--speed Airspeed in decimal kph, Default: 300.0 +--vspeed Vertical speed en ft/min, positive UP, Default: 0 +--maxloadfactor Specify the max load factor for aircraft simulation, Default: 1.45 +--trackangle Track angle in decimal degrees, Default: 0 +--timesync 0/1, 0 indicates time not synchronous with UTC, Default: 0 +--capability Capability, Default: 5 +--typecode ADS-B message type, Default: 11 +--sstatus Surveillance status, Default: 0 +--nicsupplementb NIC supplement-B, Default: 0 +--surface Aircraft located on ground, Default: False +--posrate Position frame broadcast period in µs, Default: 150000 +--numac Number of aircraft to simulate, Default: 1 + ``` -#### *Single plane scenarii can be achieved with command line switches* +#### *Single plane scenarios* -`./realtime-adsb-out.py --callsign 'FCKPUTIN' --alt 4500 --speed 600 --trajectorytype circle --maxloadfactor 1.03` +`./adsb-track-player.py --callsign 'TEST' --alt 4500 --speed 600 --trajectorytype fixed --maxloadfactor 1.03` -will generate a pseudo circular trajectory, flown at 4500 ft, 600 km/h and a load factor of 1.03. +will generate a fixed trajectory, flown at 4500 ft, 600 km/h and a load factor of 1.03. -![circle mode example image](./images/adsb-out-circle.png "circle mode example") +#### *Flight path track generation with multiple planes* -`./realtime-adsb-out.py --callsign 'FCKPUTIN' --alt 4500 --trajectorytype random` +`./adsb-track-player.py --numac 20 --trajectorytype flightsim` -will generate a random trajectory in a ~30s at specified (here default) speed around center lat / lon (default here too). -track angle is randomized, speed is randomized, altitude is randomized. The default position frame broadcast period can be lowered in order to -produce a large numer of tracks in a given area +will generate 20 trajectories starting from the default ADS-B frame, slowly fuzzing out in the same general direction. -![random mode example image](./images/adsb-out-random.png "random mode example") +Current fuzzing settings are 5 seconds between transmits, and a randomized modifier is applied as follows with each transmit: ++/- 10 km/h for speed ++/- 5 feet for altitude ++/- 3 degrees for track angle -#### *More complex scenarii with multiple planes can be achieved through json configuration files* +#### *JSON scenarios with multiple planes* -`./realtime-adsb-out.py --scenario ./examples/scenario3.json` +`./adsb-track-player.py --scenario scenario.json` ![4 planes scenario example](./images/adsb-out-scenario3.png "4 planes scenario example") The maximum number of planes that can be simulated has not been evaluated yet. It will depends on the refresh rate of each message type, etc. Tests have been performed on a laptop computer, but with not too many tracks, it should be possible to run on lighter platforms such as Raspberry Pi. -## Reference documentation - -All reference documentation from the repositories mentionned in the foreword. - -[https://mode-s.org/](https://mode-s.org/) - -*ICAO Annex 10, Aeronautical Telecommunications, Volume IV - Surveillance Radar and Collision Avoidance Systems* which at time of writing can be retrieved here: -- english version https://www.bazl.admin.ch/bazl/en/home/specialists/regulations-and-guidelines/legislation-and-directives/anhaenge-zur-konvention-der-internationalen-zivilluftfahrtorgani.html -- french version https://www.bazl.admin.ch/bazl/fr/home/experts/reglementation-et-informations-de-base/bases-legales-et-directives/annexes-a-la-convention-de-l-organisation-internationale-de-l-av.html +## Reference Documentation -*ICAO doc 9871 edition 1* which can be retrieved here (There is an edition 2 of this document but all seems to be behing paywalls): -- [ICAO doc 9871 edition 1](http://www.aviationchief.com/uploads/9/2/0/9/92098238/icao_doc_9871_-_technical_provisions_for_mode_s_-_advanced_edition_1.pdf) +All reference documentation from the repositories mentioned in the foreword. Ghost in the Air(Traffic): On insecurity of ADS-B protocol and practical attacks on ADS-B devices (Andrei Costin, Aurélien Francillon): [publication PDF hosted at eurocom.fr](https://www.s3.eurecom.fr/docs/bh12us_costin.pdf) diff --git a/RandomTrajectorySimulator.py b/RandomTrajectorySimulator.py deleted file mode 100644 index c3427d0..0000000 --- a/RandomTrajectorySimulator.py +++ /dev/null @@ -1,45 +0,0 @@ -""" simplest implementation of a trajectory simulation where the simulated -aircraft is randomly distributed inside a circle - -mutex protection occurs when calling replace_message - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along with -this program. If not, see . -""" - -import random -import datetime, math -from AbstractTrajectorySimulatorBase import AbstractTrajectorySimulatorBase - -class RandomTrajectorySimulator(AbstractTrajectorySimulatorBase): - def __init__(self,mutex,broadcast_thread,aircrafinfos): - super().__init__(mutex,broadcast_thread,aircrafinfos) - self._starttime = datetime.datetime.now(datetime.timezone.utc) - - self._lat0 = aircrafinfos.lat_deg - self._lon0 = aircrafinfos.lon_deg - - self._max_alt_m = aircrafinfos.alt_msl_m - self._max_speed_mps = aircrafinfos.speed_mps - - def refresh_delay(self): - return 0.005 - - def update_aircraftinfos(self): - - d0 = self._max_speed_mps * 30.0 - Rlat = (d0/6371000.0)*(180.0/math.pi) - Rlon = Rlat/math.cos(self._lat0*math.pi/180.0) - self._aircraftinfos.track_angle_deg = random.uniform(0,360.0) - self._aircraftinfos.lat_deg = self._lat0 - random.uniform(-Rlat,Rlat) - self._aircraftinfos.lon_deg = self._lon0 + random.uniform(-Rlon,Rlon) - - self._aircraftinfos.alt_msl_m = random.uniform(1.0,self._max_alt_m) - self._aircraftinfos.speed_mps = random.uniform(0.0,self._max_speed_mps) diff --git a/WaypointsTrajectorySimulator.py b/WaypointsTrajectorySimulator.py index 03d2caf..89ffd39 100644 --- a/WaypointsTrajectorySimulator.py +++ b/WaypointsTrajectorySimulator.py @@ -1,4 +1,4 @@ -""" implementation of a trajectory simulation where the simulated aircraft +""" Implementation of a trajectory simulation where the simulated aircraft is following a preplanned trajectory mutex protection occurs when calling replace_message @@ -14,19 +14,32 @@ this program. If not, see . """ +import datetime import time from AbstractTrajectorySimulatorBase import AbstractTrajectorySimulatorBase class WaypointsTrajectorySimulator(AbstractTrajectorySimulatorBase): - def __init__(self,mutex,broadcast_thread,aircrafts_info,waypoints_file): - super().__init__(mutex,broadcast_thread) - - - def refresh_delay(self): - return 0.005 - - - # TODO : implement waypoint simulation... - #def update_aircraftinfos(self): - # pass \ No newline at end of file + def __init__(self,mutex,broadcast_thread,aircraftinfos,waypoints_file,logfile): + super().__init__(mutex,broadcast_thread,aircraftinfos,waypoints_file,logfile) + self._starttime = datetime.datetime.now(datetime.timezone.utc) + self._lat0 = aircraftinfos.lat_deg + self._lon0 = aircraftinfos.lon_deg + self._logfile = logfile + self._icao = str(aircraftinfos.icao) + + def refresh_delay(self): + return 0.005 + + def update_aircraftinfos(self): + with open(self._waypoints_file, 'r') as wp: + # waypoints CSV format: "<0:callsign>,<1:lat>,<2:lon>,<3:alt>,<4:speed>,<5:track angle>,<6:iterate time>" + for line in wp: + posi = line.split(',') + print("[!] WAYPOINTS TRAJECTORYt\tICAO: "+self._icao+"\t\tCallsign: "+self._aircraftinfos.callsign) + print(" [:] Lat: "+posi[1]+" | Lon: "+posi[2]+" | Alt: "+posi[3]+" | Spd: "+posi[4]+" | Trk Angle: "+posi[5]+" | ValidTime: "+posi[6]) + + # Write to logfile -> CSV format: DATETIME,CALLSIGN,LAT,LONG,ALT,SPD,TRKANGLE + with open(self._logfile,"a") as fLog: + now=str(datetime.now()) + fLog.write("\n"+now+","+self._aircraftinfos.callsign+","+str(self._aircraftinfos.lat_deg)+","+str(self._aircraftinfos.lon_deg)+","+str(self._aircraftinfos.alt_msl_m)+","+str(self._aircraftinfos.speed_mps)+","+str(self._aircraftinfos.track_angle_deg)) diff --git a/realtime-adsb-out.py b/adsb-track-player.py similarity index 55% rename from realtime-adsb-out.py rename to adsb-track-player.py index 708df6e..182fef6 100755 --- a/realtime-adsb-out.py +++ b/adsb-track-player.py @@ -15,78 +15,84 @@ """ import sys, time, math, os +from os.path import exists import threading, json import traceback from AircraftInfos import AircraftInfos from FixedTrajectorySimulator import FixedTrajectorySimulator -from PseudoCircleTrajectorySimulator import PseudoCircleTrajectorySimulator -from RandomTrajectorySimulator import RandomTrajectorySimulator from WaypointsTrajectorySimulator import WaypointsTrajectorySimulator +from FlightPathSimulator import FlightPathSimulator from HackRfBroadcastThread import HackRfBroadcastThread from getopt import getopt, GetoptError def usage(msg=False): if msg:print(msg) - print("Usage: %s [options]\n" % sys.argv[0]) - print("-h | --help Display help message.") - print("--scenario Scenario mode with a provided scenario filepath") - print("--icao Callsign in hex, Default:0x508035") - print("--callsign Callsign (8 chars max), Default:DEADBEEF") - print("--squawk 4-digits 4096 code squawk, Default:7000") - print("--trajectorytype Type of simulated trajectory amongst :") - print(" fixed : steady aircraft") - print(" circle : pseudo circular flight") - print(" random : random positions inside circle area") - print(" waypoints : fly long flight path") - print(" Default:fixed") - print("--lat Latitude for the plane in decimal degrees, Default:50.44994") - print("--long Longitude for the place in decimal degrees. Default:30.5211") - print("--altitude Altitude in decimal feet, Default:1500.0") - print("--speed Airspeed in decimal kph, Default:300.0") - print("--vspeed Vertical speed en ft/min, positive up, Default:0") - print("--maxloadfactor Specify the max load factor for aircraft simulation. Default:1.45") - print("--trackangle Track angle in decimal degrees. Default:0") - print("--timesync 0/1, 0 indicates time not synchronous with UTC, Default:0") - print("--capability Capability, Default:5") - print("--typecode ADS-B message type, Default:11") - print("--sstatus Surveillance status, Default:0") - print("--nicsupplementb NIC supplement-B, Default:0") - print("--surface Aircraft located on ground, Default:False") - print("--waypoints Waypoints file for waypoints trajectory") - print("--posrate position frame broadcast period in µs, Default: 150000") + print("[h] Usage: %s [options]\n" % sys.argv[0]) + print("-h | --help Display help message") + print("--scenario Scenario mode, argument is scenario JSON filepath") + print(" waypoints : Include waypoints file(s) in script directory") + print("--icao Callsign in hex, default: 0x508035") + print("--callsign Callsign (8 chars max), Default: DEADBEEF") + print("--squawk 4-digit 4096 code squawk, Default: 7000") + print("--trajectorytype Types of simulated trajectories:") + print(" fixed : fixed broadcast") + print(" flightsim : dynamically generated flight path") + print("--numac Number of aircraft to simulate, Default: 1") + print("--duration Duration to simulate aircrafts in seconds, Default: 60") + print(" Default: fixed") + print("--lat Latitude for the plane in decimal degrees, Default: 1.3521") + print("--long Longitude for the plane in decimal degrees. Default: 103.8198") + print("--altitude Altitude in decimal feet, Default: 16500.0") + print("--speed Airspeed in decimal kph, Default: 500.0") + print("--vspeed Vertical speed en ft/min, positive UP, Default: 0") + print("--maxloadfactor Specify the max load factor for aircraft simulation, Default: 1.45") + print("--trackangle Track angle in decimal degrees, Default: 0") + print("--timesync 0/1, 0 indicates time not synchronous with UTC, Default: 0") + print("--capability Capability, Default: 5") + print("--typecode ADS-B message type, Default: 11") + print("--sstatus Surveillance status, Default: 0") + print("--nicsupplementb NIC supplement-B, Default: 0") + print("--surface Aircraft located on ground, Default: False") + print("--posrate Position frame broadcast period in µs, Default: 150000") print("") #print("see usage.md for additionnal information") sys.exit(2) -def getTrackSimulationThread(trajectory_type,brodcast_thread,aircraftinfos,waypoints_file = None): - +############ TRACK SIMULATION GENERATION FUNCTION ############ +def getTrackSimulationThread(trajectory_type,broadcast_thread,aircraftinfos,waypoints_file,logfile,duration): if trajectory_type == 'fixed': - return FixedTrajectorySimulator(brodcast_thread.getMutex(),brodcast_thread,aircraftinfos) - elif trajectory_type == 'circle': - return PseudoCircleTrajectorySimulator(brodcast_thread.getMutex(),brodcast_thread,aircraftinfos) - elif trajectory_type == 'random': - return RandomTrajectorySimulator(brodcast_thread.getMutex(),brodcast_thread,aircraftinfos) + return FixedTrajectorySimulator(broadcast_thread.getMutex(),broadcast_thread,aircraftinfos,waypoints_file,logfile) elif trajectory_type == 'waypoints': - print("WaypointsTrajectorySimulator not implemented yet") - exit(-1) - return WaypointsTrajectorySimulator(brodcast_thread.getMutex(),brodcast_thread,aircraftinfos,waypoints_file) + return WaypointsTrajectorySimulator(broadcast_thread.getMutex(),broadcast_thread,aircraftinfos,waypoints_file,logfile) + elif trajectory_type == 'flightsim': + return FlightPathSimulator(broadcast_thread.getMutex(),broadcast_thread,aircraftinfos,waypoints_file,logfile,duration=120) else: return None +############ MAIN FUNCTION ############ def main(): + # Log file check + logfile = '/home/anton/adsb-track-player/logfile.csv' + if os.path.exists(logfile): + if os.path.isfile(logfile): + print("[*] logfile.csv found") + else: + print("[!] logfile.csv not found, creating...") + with open(logfile,"w") as fLog: + fLog.write("DATETIME,CALLSIGN,LAT,LONG,ALT,SPD,TRKANGLE") + # Default values icao_aa = '0x508035' callsign = 'DEADBEEF' squawk = '7000' - - alt_ft = 1500.0 - lat_deg = 50.44994 - lon_deg = 30.5211 - speed_kph = 300.0 + alt_ft = 16500.0 + lat_deg = 1.3521 + lon_deg = 103.8198 + speed_kph = 500.0 vspeed_ftpmin = 0.0 maxloadfactor = 1.45 track_angle_deg = 0.0 @@ -100,10 +106,13 @@ def main(): waypoints_file = None posrate = 150000 scenariofile = None + waypoints_file = None + numac=1 + duration=None try: (opts, args) = getopt(sys.argv[1:], 'h', \ ['help','scenario=','icao=','callsign=','squawk=','trajectorytype=','lat=','long=','altitude=','speed=','vspeed=','maxloadfactor=','trackangle=', - 'timesync=','capability=','typecode=','sstatus=','nicsupplementb=','surface','posrate=' + 'timesync=','capability=','typecode=','sstatus=','nicsupplementb=','surface','posrate=','numac=' ]) except GetoptError as err: usage("%s\n" % err) @@ -119,13 +128,10 @@ def main(): elif opt in ('--lat'):lat_deg = float(arg) elif opt in ('--long'):lon_deg = float(arg) elif opt in ('--altitude'):alt_ft = float(arg) - elif opt in ('--speed'):speed_kph = float(arg) elif opt in ('--vspeed'):vspeed_ftpmin = float(arg) elif opt in ('--maxloadfactor'):maxloadfactor = float(arg) - elif opt in ('--trackangle'):track_angle_deg = float(arg) - elif opt in ('--timesync'):timesync = int(arg) elif opt in ('--capability'):capability = int(arg) elif opt in ('--typecode'):type_code = int(arg) @@ -133,60 +139,69 @@ def main(): elif opt in ('--nicsupplementb'):nicsup = int(arg) elif opt in ('--surface'):on_surface = True elif opt in ('--posrate'):posrate = int(arg) + elif opt in ('--numac'):numac = int(arg) + elif opt in ('--duration'):duration = int(arg) else:usage("Unknown option %s\n" % opt) - + print ("\n==== ADS-B Track Player v0.4 | by six3oo | core by Matioupi ====\n") + + # Functional code track_simulators = [] broadcast_thread = HackRfBroadcastThread(posrate) # posrate would usally be used with random mode to generate load of tracks + # Scenario file presence check if scenariofile == None: - print("Going to run in single plane from command line mode") + print("[*] CLI mode") aircraftinfos = AircraftInfos(icao_aa,callsign,squawk, \ lat_deg,lon_deg,alt_ft,speed_kph,vspeed_ftpmin,maxloadfactor,track_angle_deg, \ timesync,capability,type_code,surveillance_status,nicsup,on_surface) - - track_simulation = getTrackSimulationThread(trajectory_type,broadcast_thread,aircraftinfos,waypoints_file) - - track_simulators.append(track_simulation) + # Multiple aircraft option + if numac>1: + print("[!] Generating "+str(numac)+" fuzzing aircraft") + for i in range(numac): + # TRACK SIMULATION CREATION + track_simulation = getTrackSimulationThread(trajectory_type,broadcast_thread,aircraftinfos,waypoints_file,logfile,duration) + track_simulators.append(track_simulation) + + # Scenario file parsing else: - print("Going to run in json scenario mode from file "+os.path.abspath(scenariofile)) + print("[*] JSON Scenario mode: "+os.path.abspath(scenariofile)) with open(scenariofile,'r') as json_file: scenario = json.load(json_file) - + + if exists("waypoints.csv"): + waypoints_file = "waypoints.csv" + print("[!] Waypoints file detected: " +os.path.abspath(waypoints_file)) + for plane in scenario.values(): plane_info = AircraftInfos.from_json(plane["filename"]) - - if "waypoints_file" in plane: - waypoints_file = plane["waypoints_file"] - - track_simulation = getTrackSimulationThread(plane["trajectory_type"],broadcast_thread,plane_info,waypoints_file) - + # TRACK SIMULATION CREATION + track_simulation = getTrackSimulationThread(plane["trajectory_type"],broadcast_thread,plane_info,waypoints_file,logfile,duration) track_simulators.append(track_simulation) - print("scenario contains tracks simulation instructions for "+str(len(track_simulators))+" planes:") + print("[*] Scenario contains track simulations for "+str(len(track_simulators))+" plane(s):") for tsim in track_simulators: - print("callsign: "+tsim.aircraftinfos.callsign.ljust(9,' ')+"MSL altitude: "+"{:7.1f}".format(tsim.aircraftinfos.alt_msl_ft)+" ft") - + print(" [:] Callsign: "+tsim.aircraftinfos.callsign.ljust(9,' ')+"MSL altitude: "+"{:7.1f}".format(tsim.aircraftinfos.alt_msl_ft)+" ft\t| Thread: "+str(tsim)) + for tsim in track_simulators: broadcast_thread.register_track_simulation_thread(tsim) - while(val:=input("Type \'s + Enter\' to start the adsb-out simulation, and type \'s + Enter\' again to stop it:\n") != 's'): + while(val:=input("[*] Type \'s + Enter\' to start ADS-B transmission, and type \'s + Enter\' again to stop: ") != 's'): time.sleep(0.05) - # start all threads + # START all threads for tsim in track_simulators: tsim.start() broadcast_thread.start() - - # user input loop. Todo : implement other commands ? (in that case don't forget to check if mutex protection is needed) + # user input loop. Todo : implement other commands? (in that case don't forget to check if mutex protection is needed) while(val:=input("") != 's'): time.sleep(0.05) - # stop all threads + # STOP all threads for tsim in track_simulators: tsim.stop() - + broadcast_thread.stop() # wait for all threads to terminate @@ -194,7 +209,7 @@ def main(): tsim.join() broadcast_thread.join() - print("reatime-adsb-out simulation is finished") + print("==== ADS-B transmission ended ====") if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/examples/scenario.json b/examples/scenario.json index 33ce0c6..1d3e879 100644 --- a/examples/scenario.json +++ b/examples/scenario.json @@ -2,6 +2,17 @@ "plane1": { "filename":"./examples/MRYIA.json", - "trajectory_type":"circle" + "trajectory_type":"waypoints", + "waypoints_file":"./examples/waypoints.txt" + }, + "plane2": + { + "filename":"./examples/AN-IL78MP.json", + "trajectory_type":"fixed" + }, + "plane3": + { + "filename":"./examples/A400M-110.json", + "trajectory_type":"flightsim" } } diff --git a/examples/scenario4.json b/examples/scenario4.json new file mode 100644 index 0000000..031ea29 --- /dev/null +++ b/examples/scenario4.json @@ -0,0 +1,7 @@ +{ + "plane1": + { + "filename":"./examples/MRYIA.json", + "trajectory_type":"fixed" + } +} diff --git a/feed1090/json_process.py b/feed1090/json_process.py new file mode 100644 index 0000000..5fd0c69 --- /dev/null +++ b/feed1090/json_process.py @@ -0,0 +1,6 @@ +import pandas as pd + +lf = open('test_isaac.json','r+') +data = lf.readlines() +for i in data: + print(i) diff --git a/feed1090/log1090backup_4aug23/2023-08-04_1090ES.json b/feed1090/log1090backup_4aug23/2023-08-04_1090ES.json new file mode 100644 index 0000000..e801a69 --- /dev/null +++ b/feed1090/log1090backup_4aug23/2023-08-04_1090ES.json @@ -0,0 +1,22 @@ +"1":{"time":"14-52-55","target":"TTTT","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0},"3":{"time":"14-52-59","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"5":{"time":"14-53-04","target":"TTTT","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0},"7":{"time":"14-53-09","target":"TTTT","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0},"9":{"time":"14-53-14","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"11":{"time":"14-53-20","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"13":{"time":"14-53-25","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"14":{"time":"14-53-25","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"16":{"time":"14-53-30","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"17":{"time":"14-53-30","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"19":{"time":"14-53-35","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"20":{"time":"14-53-35","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"22":{"time":"14-53-41","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"23":{"time":"14-53-41","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"25":{"time":"14-53-46","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"26":{"time":"14-53-46","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"28":{"time":"14-53-51","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"29":{"time":"14-53-51","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"31":{"time":"14-53-56","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"32":{"time":"14-53-56","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"34":{"time":"14-54-02","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"35":{"time":"14-54-02","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"37":{"time":"14-54-07","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"38":{"time":"14-54-07","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"40":{"time":"14-54-12","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0}, +"41":{"time":"14-54-12","target":"TTTT","latitude":2.000015,"longitude":1.999977,"altitude":36000,"heading":0,"speed":0},"43":{"time":"14-54-17","target":"PPPP","latitude":1.999977,"longitude":1.999985,"altitude":36000,"heading":0,"speed":0},"1":{"time":"15-09-24","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"2":{"time":"15-09-24","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"4":{"time":"15-09-30","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"5":{"time":"15-09-30","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"7":{"time":"15-09-35","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"8":{"time":"15-09-35","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"10":{"time":"15-09-40","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"11":{"time":"15-09-40","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"13":{"time":"15-09-45","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"14":{"time":"15-09-45","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"16":{"time":"15-09-51","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"17":{"time":"15-09-51","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"19":{"time":"15-09-56","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"20":{"time":"15-09-56","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"22":{"time":"15-10-01","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"23":{"time":"15-10-01","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"25":{"time":"15-10-06","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"26":{"time":"15-10-06","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"28":{"time":"15-10-12","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"29":{"time":"15-10-12","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"31":{"time":"15-10-17","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0}, +"32":{"time":"15-10-17","target":"TEST1234","latitude":6.0,"longitude":5.999978,"altitude":38500,"heading":0,"speed":0},"34":{"time":"15-10-22","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"36":{"time":"15-10-28","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"38":{"time":"15-10-33","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"40":{"time":"15-10-38","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"42":{"time":"15-10-43","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"44":{"time":"15-10-48","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"46":{"time":"15-10-54","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"48":{"time":"15-10-59","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"50":{"time":"15-11-04","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"52":{"time":"15-11-09","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"54":{"time":"15-11-15","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"56":{"time":"15-11-20","target":"BANG","latitude":9.999985,"longitude":9.999979,"altitude":40000,"heading":0,"speed":0},"1":{"time":"15-21-59","target":"UFO1","latitude":1.396637,"longitude":103.844403,"altitude":1000,"heading":256,"speed":77},"3":{"time":"15-22-05","target":"UFO2","latitude":1.396102,"longitude":103.842395,"altitude":1025,"heading":256,"speed":77},"5":{"time":"15-22-10","target":"UFO3","latitude":1.395447,"longitude":103.840167,"altitude":1050,"heading":256,"speed":77},"7":{"time":"15-22-15","target":"N5748E","latitude":1.394897,"longitude":103.838491,"altitude":1125,"heading":250,"speed":82},"9":{"time":"15-22-20","target":"N5748E","latitude":1.394119,"longitude":103.836442,"altitude":1200,"heading":250,"speed":82},"11":{"time":"15-22-26","target":"N5748E","latitude":1.393495,"longitude":103.834913,"altitude":1275,"heading":250,"speed":82},"13":{"time":"15-22-31","target":"N5748E","latitude":1.392843,"longitude":103.833302,"altitude":1325,"heading":250,"speed":82},"15":{"time":"15-22-36","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1350,"heading":241,"speed":72},"17":{"time":"15-22-41","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1350,"heading":241,"speed":72},"19":{"time":"15-22-47","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1350,"heading":241,"speed":72},"21":{"time":"15-22-52","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1350,"heading":241,"speed":72},"23":{"time":"15-22-57","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1350,"heading":241,"speed":72},"25":{"time":"15-23-02","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1350,"heading":241,"speed":72},"27":{"time":"15-23-08","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1350,"heading":241,"speed":72},"29":{"time":"15-23-13","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1600,"heading":241,"speed":72},"31":{"time":"15-23-18","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"33":{"time":"15-23-23","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"35":{"time":"15-23-29","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"37":{"time":"15-23-34","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"39":{"time":"15-23-39","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"41":{"time":"15-23-44","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"43":{"time":"15-23-50","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"45":{"time":"15-23-55","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"47":{"time":"15-24-00","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"49":{"time":"15-24-05","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"51":{"time":"15-24-10","target":"N5748E","latitude":1.392517,"longitude":103.832625,"altitude":1650,"heading":241,"speed":72},"1":{"time":"15-58-12","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"3":{"time":"15-58-17","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"5":{"time":"15-58-23","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"7":{"time":"15-58-28","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"9":{"time":"15-58-33","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"11":{"time":"15-58-38","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"13":{"time":"15-58-44","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"15":{"time":"15-58-49","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"17":{"time":"15-58-54","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"19":{"time":"15-58-59","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"21":{"time":"15-59-05","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"23":{"time":"15-59-10","target":"POORS","latitude":12.000003,"longitude":6.999978,"altitude":31750,"heading":0,"speed":0},"1":{"time":"16-02-45","target":"UFO4","latitude":1.396545,"longitude":103.837327,"altitude":1350,"heading":31,"speed":102},"3":{"time":"16-02-50","target":"UFO5","latitude":1.397452,"longitude":103.837896,"altitude":1350,"heading":31,"speed":103},"5":{"time":"16-02-55","target":"UFO6","latitude":1.399872,"longitude":103.839317,"altitude":1375,"heading":31,"speed":100},"7":{"time":"16-03-00","target":"UFO7","latitude":1.402084,"longitude":103.840632,"altitude":1425,"heading":30,"speed":95},"9":{"time":"16-03-06","target":"UFO8","latitude":1.402084,"longitude":103.840632,"altitude":1450,"heading":30,"speed":92},"11":{"time":"16-03-11","target":"UFO9","latitude":1.406576,"longitude":103.8432,"altitude":1425,"heading":29,"speed":93},"13":{"time":"16-03-16","target":"UFO10","latitude":1.406576,"longitude":103.8432,"altitude":1400,"heading":29,"speed":95},"15":{"time":"16-03-21","target":"UFO11","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"17":{"time":"16-03-27","target":"UFO12","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"19":{"time":"16-03-32","target":"UFO13","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"21":{"time":"16-03-37","target":"UFO14","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"23":{"time":"16-03-42","target":"UFO15","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"25":{"time":"16-03-48","target":"UFO16","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"27":{"time":"16-03-53","target":"UFO17","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"29":{"time":"16-03-58","target":"UFO18","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"31":{"time":"16-04-03","target":"UFO19","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"33":{"time":"16-04-09","target":"UFO20","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"35":{"time":"16-04-14","target":"UFO21","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"37":{"time":"16-04-19","target":"UFO22","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96},"39":{"time":"16-04-24","target":"UFO23","latitude":1.410021,"longitude":103.845141,"altitude":1375,"heading":30,"speed":96}, \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/2023-08-04_ufo b/feed1090/log1090backup_4aug23/2023-08-04_ufo new file mode 100644 index 0000000..cabf43b --- /dev/null +++ b/feed1090/log1090backup_4aug23/2023-08-04_ufo @@ -0,0 +1 @@ +24 \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/dump1090_data.json b/feed1090/log1090backup_4aug23/dump1090_data.json new file mode 100644 index 0000000..3538f92 --- /dev/null +++ b/feed1090/log1090backup_4aug23/dump1090_data.json @@ -0,0 +1,3 @@ +[ +{"hex":"000000", "flight":"TEST1234", "lat":1.999977, "lon":5.000011, "altitude":36000, "track":0, "speed":0} +] diff --git a/feed1090/log1090backup_4aug23/json_test.py b/feed1090/log1090backup_4aug23/json_test.py new file mode 100644 index 0000000..3e45606 --- /dev/null +++ b/feed1090/log1090backup_4aug23/json_test.py @@ -0,0 +1,4 @@ +import pandas as pd +#with open('2023-08-03_1090ES.json','r') as f: +plane_df=pd.read_json('2023-08-03_1090ES.json') +plane_df.head() \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-39-06_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-39-06_1090ES new file mode 100644 index 0000000..263aa61 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-39-06_1090ES @@ -0,0 +1 @@ +[{'hex': '50031d', 'flight': 'T7PTL ', 'lat': 1.382675, 'lon': 103.84538, 'altitude': 750, 'track': 34, 'speed': 140}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-51-10_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-51-10_1090ES new file mode 100644 index 0000000..d611f28 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-51-10_1090ES @@ -0,0 +1 @@ +[{'hex': 'ab2a89', 'flight': '', 'lat': 1.542508, 'lon': 103.881841, 'altitude': 5075, 'track': 3, 'speed': 285}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-51-42_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-51-42_1090ES new file mode 100644 index 0000000..d611f28 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-51-42_1090ES @@ -0,0 +1 @@ +[{'hex': 'ab2a89', 'flight': '', 'lat': 1.542508, 'lon': 103.881841, 'altitude': 5075, 'track': 3, 'speed': 285}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-53-47_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-53-47_1090ES new file mode 100644 index 0000000..52614c2 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-53-47_1090ES @@ -0,0 +1 @@ +[{'hex': '3c4594', 'flight': '', 'lat': 1.653168, 'lon': 103.962832, 'altitude': 14250, 'track': 334, 'speed': 337}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-54-19_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-54-19_1090ES new file mode 100644 index 0000000..52614c2 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 10-54-19_1090ES @@ -0,0 +1 @@ +[{'hex': '3c4594', 'flight': '', 'lat': 1.653168, 'lon': 103.962832, 'altitude': 14250, 'track': 334, 'speed': 337}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-06-29_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-06-29_1090ES new file mode 100644 index 0000000..425c903 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-06-29_1090ES @@ -0,0 +1 @@ +[{'hex': '88596a', 'flight': '', 'lat': 1.653349, 'lon': 103.952873, 'altitude': 13275, 'track': 339, 'speed': 333}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-07-00_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-07-00_1090ES new file mode 100644 index 0000000..e74f72a --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-07-00_1090ES @@ -0,0 +1 @@ +[{'hex': '88596a', 'flight': '', 'lat': 1.653349, 'lon': 103.952873, 'altitude': 13650, 'track': 339, 'speed': 337}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-07-32_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-07-32_1090ES new file mode 100644 index 0000000..e74f72a --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-07-32_1090ES @@ -0,0 +1 @@ +[{'hex': '88596a', 'flight': '', 'lat': 1.653349, 'lon': 103.952873, 'altitude': 13650, 'track': 339, 'speed': 337}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-12-15_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-12-15_1090ES new file mode 100644 index 0000000..edad4da --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-12-15_1090ES @@ -0,0 +1 @@ +[{'hex': '7504b5', 'flight': '', 'lat': 1.588036, 'lon': 103.910538, 'altitude': 14050, 'track': 319, 'speed': 354}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-12-46_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-12-46_1090ES new file mode 100644 index 0000000..edad4da --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-12-46_1090ES @@ -0,0 +1 @@ +[{'hex': '7504b5', 'flight': '', 'lat': 1.588036, 'lon': 103.910538, 'altitude': 14050, 'track': 319, 'speed': 354}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-13-49_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-13-49_1090ES new file mode 100644 index 0000000..cb0bc79 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-13-49_1090ES @@ -0,0 +1 @@ +[{'hex': '76d1c6', 'flight': 'TGW174 ', 'lat': 1.634125, 'lon': 103.961295, 'altitude': 15625, 'track': 338, 'speed': 305}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-14-20_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-14-20_1090ES new file mode 100644 index 0000000..ef4e0c7 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-14-20_1090ES @@ -0,0 +1 @@ +[{'hex': '76d1c6', 'flight': 'TGW174 ', 'lat': 1.644737, 'lon': 103.957041, 'altitude': 15700, 'track': 338, 'speed': 305}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-21-41_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-21-41_1090ES new file mode 100644 index 0000000..340b2df --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-21-41_1090ES @@ -0,0 +1 @@ +[{'hex': '8013ed', 'flight': '', 'lat': 1.57132, 'lon': 103.892491, 'altitude': 13250, 'track': 320, 'speed': 379}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-22-12_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-22-12_1090ES new file mode 100644 index 0000000..340b2df --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 11-22-12_1090ES @@ -0,0 +1 @@ +[{'hex': '8013ed', 'flight': '', 'lat': 1.57132, 'lon': 103.892491, 'altitude': 13250, 'track': 320, 'speed': 379}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 15-30-28_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 15-30-28_1090ES new file mode 100644 index 0000000..63733c1 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 15-30-28_1090ES @@ -0,0 +1 @@ +[{'hex': '135232', 'flight': 'TEST1234', 'lat': 8.000015, 'lon': 9.999979, 'altitude': 36000, 'track': 0, 'speed': 0}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 15-31-00_1090ES b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 15-31-00_1090ES new file mode 100644 index 0000000..63733c1 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/2023-07-26 15-31-00_1090ES @@ -0,0 +1 @@ +[{'hex': '135232', 'flight': 'TEST1234', 'lat': 8.000015, 'lon': 9.999979, 'altitude': 36000, 'track': 0, 'speed': 0}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/live1090.json b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/live1090.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live logs/2023-07-26_1090ES_Log/live1090.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/live1090.json b/feed1090/log1090backup_4aug23/live1090.json new file mode 100644 index 0000000..7063515 --- /dev/null +++ b/feed1090/log1090backup_4aug23/live1090.json @@ -0,0 +1 @@ +[{'hex': '442006', 'flight': 'EEE ', 'lat': 3.999985, 'lon': 5.999978, 'altitude': 37000, 'track': 0, 'speed': 0}] \ No newline at end of file diff --git a/feed1090/log1090backup_4aug23/log1090.py b/feed1090/log1090backup_4aug23/log1090.py new file mode 100755 index 0000000..e8c231f --- /dev/null +++ b/feed1090/log1090backup_4aug23/log1090.py @@ -0,0 +1,100 @@ +import json +import requests +import time +import sys, select, os + +DUMP1090_ENDPOINT = 'http://localhost:8080/data.json' +UFO_DATE = time.strftime('%Y-%m-%d_ufo') +JSON_FILE = time.strftime('%Y-%m-%d_1090ES.json') + +def ufoPersist(): + if not os.path.exists(UFO_DATE): + with open(UFO_DATE,'w') as ufof1: + ufof1.write('1') + with open(UFO_DATE,'r') as ufof2: + ufo = ufof2.read() + return int(ufo) + +def liveThread(): + global DUMP1090_ENDPOINT + ### LIVE FILE UPDATE ### + # Load the flight data from dump1090 endpoint + response = requests.get(DUMP1090_ENDPOINT) + data = response.json() + + # Time string generation + #timeString = time.strftime("{'date': '%Y-%m-%d %H-%M-%S'}]) + + # (Over)write live file + #with open('live1090.json','w') as liveFile: + #liveFile.write(str(data)) + #print('Overwrite live1090: '+timeString+str(data)) + #liveFile.close() + return data + +def logThread(data, ufo, index): + global JSON_FILE, UFO_DATE + ### LOG DIR/FILE GENERATION ### + # Skip logging if blank + ds=str(data) + if ds == '[]': + print('Blank log, skipping...') + return 0 + + # Write string generation + ds=ds[1:-1] + print(ds) + dsArray = ds.split() + + ### WRITE ARRAY OPERATIONS ### + wc = 0 + for word in dsArray: + if word == "{'hex':": + lineWriter = time.strftime('\n"'+str(index)+'":'+'{"time":"%H-%M-%S",') + index+=1 + del dsArray[wc] + dsArray[wc]=lineWriter + # UFO handling + if word == "'flight':": + if dsArray[wc+1] == "'',": + dsArray[wc+1] = "'UFO"+str(ufo)+"'," + ufo += 1 + wc+=1 + dsArray.append(',') + ds=''.join(dsArray) + ds=ds.strip() + ds=ds.replace("'",'"') + ds=ds.replace("flight","target") + ds=ds.replace("track","heading") + ds=ds.replace("lat","latitude") + ds=ds.replace("lon","longitude") + print(ds) + # Return to default pwd + os.chdir('/home/pi/log1090') + # Write log file + logFile = open(JSON_FILE,'a') + logFile.write(ds) + print('Write to log file: '+JSON_FILE) + logFile.close() + # Save UFO counter for persistence + with open(UFO_DATE,'w') as ufof1: + ufof1.write(str(ufo)) + return index + +### MAIN LOOP ### +def main(): + i=0 + index=1 + while True: + i+=1 + # Main thread refresh = 1 second + time.sleep(1) + os.chdir('/home/pi/log1090') + ufo = ufoPersist() + data = liveThread() + # i%N, log interval will be N seconds + if i%5==0 or i==1: + index=logThread(data, ufo, index) + index+=1 + +main() diff --git a/feed1090/log1090backup_4aug23/master1090.py b/feed1090/log1090backup_4aug23/master1090.py new file mode 100755 index 0000000..2e0b673 --- /dev/null +++ b/feed1090/log1090backup_4aug23/master1090.py @@ -0,0 +1,45 @@ +import subprocess +from time import sleep +import log1090 +import threading +import sys, select, os + +### Launch dump1090 ### +def dump(): + print('Launching dump1090 --net --interactive...') + subprocess.call(['lxterminal', '-e', '/home/pi/dump1090/dump1090 --net --interactive']) + + +### log1090 loop ### +def log(): + print('Launching log1090...') + #subprocess.call(['lxterminal', '-e', 'python /home/pi/log1090/log1090.py']) + print('Starting Log1090, press Enter to exit...') + i=0 + p = select.poll() + p.register(sys.stdin, 1) + while True: + print('Poll counter: '+str(i)) + i+=1 + #if sys.stdin in select.select([sys.stdin], [], [], 0)[0]: + # print('Enter detected, exiting...') + # break + # Main thread refresh = 0.5 seconds + sleep(0.5) + data = log1090.liveThread() + # i%N, log interval will be N/2 seconds (DEFAULT N=60, 30 seconds) + if i%60==0 or i==1: + log1090.logThread(data) + + +def main(): + D = threading.Thread(target=dump) + L = threading.Thread(target=log) + D.start() + sleep(10) + L.start() + +main() + + + diff --git a/feed1090/log1090backup_4aug23/subprocess b/feed1090/log1090backup_4aug23/subprocess new file mode 100644 index 0000000..e69de29 diff --git a/feed1090/para_kill.py b/feed1090/para_kill.py new file mode 100644 index 0000000..dabe2b9 --- /dev/null +++ b/feed1090/para_kill.py @@ -0,0 +1,79 @@ + +import paramiko +import time +from icecream import ic +from subprocess import Popen, PIPE +from threading import Thread + +def dump_kill(): + pi_ip = '100.81.91.96' + pi_user = "pi" + pi_password = "raspberry" + time.sleep(1) + + try: + pi_client = paramiko.client.SSHClient() + pi_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pi_client.connect(pi_ip, username=pi_user, password=pi_password, timeout=5) + + try: + ic('Killing dump1090...') + dump1090_kill = "ps -aux | grep ./dump1090/dump1090 | awk '{print $2}' | xargs kill -9" + _stdin, _stdout,_stderr = pi_client.exec_command(dump1090_kill) + time.sleep(2) + + ic('Killing all SSH stream data...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + ic('Complete.') + except Exception as e: + print(e) + except Exception as e: + print(e) + +def log_kill(): + pi_ip = '100.81.91.96' + pi_user = "pi" + pi_password = "raspberry" + time.sleep(1) + + try: + pi_client = paramiko.client.SSHClient() + pi_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pi_client.connect(pi_ip, username=pi_user, password=pi_password, timeout=5) + + try: + ic('Killing log1090...') + log1090_kill = "ps -aux | grep log1090.py | awk '{print $2}' | xargs kill -9" + _stdin, _stdout,_stderr = pi_client.exec_command(log1090_kill) + time.sleep(2) + ic('Killing all SSH stream data...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + + except Exception as e: + print(e) + except Exception as e: + print(e) + +def main(): + ic('Killing file sync loop...') + kill_read = "ps -aux | grep para_start.py | awk '{print $2}' | xargs kill -9" + Popen(kill_read, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + ic('Killing file read SSH 1/3...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + ic('Killing file read SSH 2/3...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + ic('Killing file read SSH 3/3...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + #D = Thread(target=dump_kill) + L = Thread(target=log_kill) + #D.start() + #time.sleep(6) + #ic('Re-SSHing to pi...') + L.start() + +main() diff --git a/feed1090/para_start.py b/feed1090/para_start.py new file mode 100644 index 0000000..f541c8f --- /dev/null +++ b/feed1090/para_start.py @@ -0,0 +1,139 @@ +import paramiko +import time +from icecream import ic +from subprocess import Popen, PIPE +import select +import os +import pandas as pd +#sshpass must be installed on host + +pi_ip = '100.81.91.96' +pi_user = "pi" +pi_password = "raspberry" +local_user = os.getenv("USERNAME") +dateString = time.strftime('%d-%m-%Y') + +""" +def dump_start(): + global pi_ip, pi_user, pi_password + + try: + pi_client = paramiko.client.SSHClient() + pi_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pi_client.connect(pi_ip, username=pi_user, password=pi_password, timeout=5) + + try: + ic('Launching dump1090...') + dump1090_launch = 'nice -n -20 ./dump1090/dump1090 --net &' + _stdin, _stdout,_stderr = pi_client.exec_command(dump1090_launch) + time.sleep(5) + + ic('Killing all SSH stream data...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + time.sleep(1) + except Exception as e: + ic('ds1') + ic(e) + except Exception as e: + ic('ds2') + ic(e) +""" + +def fPrepend(filename, insert): + with open(filename,'r') as f: + save = f.read() + with open(filename,'w') as f: + f.write(insert) + f.write(save) + +def fix_log(): + global dateString, local_user + try: + fileName=f'''/home/{local_user}/ais/ais/static/adsb/{dateString}/feed1090.json''' + with open(fileName,'r') as f: + if not f.read(1)=='{': + fPrepend(fileName,'{') + with open(fileName,'a') as f: + f.seek(f.seek(0, os.SEEK_END) - 2) + f.truncate() + f.write('}}') + except Exception as e: + ic('flog') + ic(e) + +def log_start(): + global pi_ip, pi_user, pi_password + + try: + pi_client = paramiko.client.SSHClient() + pi_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pi_client.connect(pi_ip, username=pi_user, password=pi_password, timeout=5) + + try: + ic('Launching log1090...') + log1090_launch = 'python ./log1090/log1090.py &' + _stdin, _stdout,_stderr = pi_client.exec_command(log1090_launch) + time.sleep(3) + + ic('Killing all SSH stream data...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + time.sleep(1) + except Exception as e: + ic('ls1') + ic(e) + except Exception as e: + ic('ls2') + ic(e) + +def log_sync(): + global pi_ip, pi_user, pi_password, local_user, dateString + try: + dirPath=f'''/home/{local_user}/ais/ais/static/adsb/{dateString}''' + filePath=f'''/home/{local_user}/ais/ais/static/adsb/{dateString}/feed1090.json''' + # Local log directory creation + if not os.path.isdir(dirPath): + ic('Creating local log directory...') + mkdirStr = f'''mkdir -p /home/{local_user}/ais/ais/static/adsb/{dateString}''' + Popen(mkdirStr, shell=True, stdout=PIPE, stderr=PIPE, text=True) + time.sleep(2) + # scp file to host + logPullString = time.strftime('%Y-%m-%d_1090ES.json') + copyFile = f'''sshpass -p {pi_password} scp {pi_user}@{pi_ip}:/home/pi/log1090/{logPullString} /home/{local_user}/ais/ais/static/adsb/{dateString}/feed1090.json''' + Popen(copyFile, shell=True, stdout=PIPE, stderr=PIPE, text=True) + # JSON format fixing + #time.sleep(4) + #if os.path.isfile(filePath): + # fix_log() + SyncedAt = time.strftime('[%H-%M-%S] '+dateString) + ic(SyncedAt) + except Exception as e: + ic('log') + ic(e) + +""" +import pandas as pd +import time +from time import sleep + +def json_reader(): + local_user = 'anton' + dateString = time.strftime('%d-%m-%Y') + filePath = f'''/home/{local_user}/ais/ais/static/adsb/{dateString}/feed1090.json''' + try: + df=pd.read_json() + except Exception as e: + df=pd.read_json(filePath) + print(time.strftime('Timestamp: %H-%M-%S')) + print(df) +""" +def main(): + log_start() + time.sleep(5) + ic('Starting file sync loop...') + while True: + log_sync() + time.sleep(8) + +main() diff --git a/feed1090/para_start_test.py b/feed1090/para_start_test.py new file mode 100644 index 0000000..d13fccc --- /dev/null +++ b/feed1090/para_start_test.py @@ -0,0 +1,94 @@ +import paramiko +import time +from icecream import ic +from subprocess import Popen, PIPE +from threading import Thread +import select + +pi_ip = '100.81.91.96' +pi_user = "pi" +pi_password = "raspberry" +local_user = 'anton' +dateString = time.strftime('%d-%m-%Y') + +def dump_start(): + global pi_ip, pi_user, pi_password + + try: + pi_client = paramiko.client.SSHClient() + pi_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pi_client.connect(pi_ip, username=pi_user, password=pi_password, timeout=5) + + try: + ic('Launching dump1090...') + dump1090_launch = "./dump1090/dump1090 --net" + _stdin, _stdout,_stderr = pi_client.exec_command(dump1090_launch) + time.sleep(5) + + ic('Killing all SSH stream data...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + + except Exception as e: + print(e) + except Exception as e: + print(e) + +def log_start(): + global pi_ip, pi_user, pi_password + + try: + pi_client = paramiko.client.SSHClient() + pi_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pi_client.connect(pi_ip, username=pi_user, password=pi_password, timeout=5) + + try: + ic('Launching log1090...') + log1090_launch = "python ./log1090/log1090.py" + _stdin, _stdout,_stderr = pi_client.exec_command(log1090_launch) + time.sleep(2) + + ic('Killing all SSH stream data...') + kill_ssh_tail = "ps -aux | grep ConnectTimeout=5 | awk '{print $2}' | xargs kill -9" + Popen(kill_ssh_tail, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + time.sleep(1) + + except Exception as e: + print(e) + except Exception as e: + print(e) + +def log_sync(): + global pi_ip, pi_user, pi_password, dateString + # before trying to to append, scp file over first + try: + copyFile = f'''sshpass -p {pi_password} scp {pi_user}@{pi_ip}:/home/pi/log1090/{dateString} /home/{local_user}/adsb-track-player/feed1090/{dateString}/feed1090.json''' + Popen(copyFile, shell=True, stdout=PIPE, stderr=PIPE, text=True) + syncUpdate = time.strftime('[%H-%M-%S] '+dateString+' synced') + ic(syncUpdate) + except Exception as e: + ic(e) + +def fix_log(dateString): + filePath=f'''/home/{local_user}/adsb-track-player/feed1090/{dateString}/feed1090.json''' + with open(filePath,'a') as jf: + jf.write('}') + +def main(): + global dateString + D = Thread(target=dump_start) + L = Thread(target=log_start) + D.start() + time.sleep(7) + ic('Re-SSHing to pi...') + L.start() + time.sleep(7) + ic('Starting file sync loop...') + while True: + log_sync() + time.sleep(3) + fix_log() + time.sleep(7) + + +main() diff --git a/feed1090/read_loop.py b/feed1090/read_loop.py new file mode 100644 index 0000000..3a4a4c7 --- /dev/null +++ b/feed1090/read_loop.py @@ -0,0 +1,24 @@ +import pandas as pd +import time +from time import sleep + +def json_reader(): + local_user = 'anton' + dateString = time.strftime('%d-%m-%Y') + filePath = f'''test_isaac.json''' + try: + sleep(2) + df=pd.read_json(filePath) + print(time.strftime('Timestamp: %H-%M-%S')) + print('[*] NORMAL DATA') + return True, df + except Exception as e: + print(time.strftime('Timestamp: %H-%M-%S')) + print('[!]INVALID JSON') + return False, None + + +while True: + df=json_reader() + if df[0]: + print(df[1]) diff --git a/logfile.csv b/logfile.csv new file mode 100644 index 0000000..ec3057d --- /dev/null +++ b/logfile.csv @@ -0,0 +1,1568 @@ +DATETIME,CALLSIGN,LAT,LONG,ALT,SPD,TRKANGLE +2023-08-01 18:03:41.670185,E2Z9L3FP,2.2250189954880697,103.72276796562527,4694.1796281796305,217.78731650772335,125.47427046182028 +2023-08-01 18:03:41.671740,NA7EKU9X,1.4385011228122226,104.38361049197542,3306.4708971398995,405.6953610425475,180.44340067026195 +2023-08-01 18:03:42.172464,6PMIXHJT,2.2677437330715,104.84560408563699,2694.1366089144854,359.4753160419444,210.63984109480393 +2023-08-01 18:03:42.174610,D15OF96T,1.724659324322683,105.81474208172459,1055.5191185225003,599.4058721493504,41.27387920943647 +2023-08-01 18:03:56.965684,2GJBK8PT,1.9214821925250234,103.76353618839198,11335.8270674902,12.099121680764194,293.0292823399805 +2023-08-01 18:03:56.966473,2GJBK8PT,1.9214821925250234,103.76353618839198,11335.8270674902,12.099121680764194,293.0292823399805 +2023-08-01 18:03:57.467993,2TNVZ8JM,1.2467377034617653,103.05102929284256,4955.199967707479,17.88656007302129,176.62125285499246 +2023-08-01 18:03:57.468806,HLRX3NPK,0.6804146084747968,103.52994303425679,8828.164423656934,20.12146540948352,258.3589789712566 +2023-08-01 18:03:57.970159,EJZBQ71O,0.24647883393958914,104.05672763291646,4204.129479192469,8.990196750825964,184.5581462755024 +2023-08-01 18:03:57.970850,CDJL3VE6,-0.4927976303667321,103.29358415968916,5006.133151096409,11.657749646061887,258.5734014415692 +2023-08-01 18:04:11.079338,DZW6S1K4,0.559824538510832,104.71108734298456,7757.179966228161,64.251415380456,58.36972961937709 +2023-08-01 18:04:11.080218,1GPS563E,-0.2805992953708949,103.98327915145427,10828.980903715214,31.834834123448147,95.27461172245391 +2023-08-01 18:06:55.046846,DEADBEEF,1.3553128541939843,103.8198,5031.487911870176,128.9310005984801,1.1314576628700488 +2023-08-01 18:10:49.400399,T21VIOM8,1.3419280184455076,104.09608632883912,5189.502751306865,27.243636280530637,302.8658981017185 +2023-08-01 18:10:49.903471,MZG2HW93,2.022378661671204,103.84722736012581,2118.5415728525113,1.651484184356164,40.84967319675968 +2023-08-01 18:10:50.405555,B2O810YX,2.7963969056298947,104.75357709937718,1231.1238432275873,1.3511260291577727,246.30264477692123 +2023-08-01 18:10:50.907684,0KDNAMVB,2.1043797869961143,104.99217794312096,745.0590097298715,1.0145522138130494,112.83363326925547 +2023-08-01 18:10:51.409855,38TMRSFO,2.717887329154606,105.34957998724953,1180.735858577367,0.8388805595359587,247.53592633721775 +2023-08-01 18:10:51.912081,5JKO8IZD,2.667319488202967,105.79727436397505,2038.1273666955979,1.3425335733234998,319.61014213688304 +2023-08-01 18:10:52.414229,KZH8NPDJ,3.1932160432688885,106.52015403721899,1903.3429936241844,1.7310861042729142,299.09378266630597 +2023-08-01 18:10:52.916354,CO2WEF1T,3.7628022656031157,107.18697889494887,103.47626652853228,1.2746291546056958,26.214454073410366 +2023-08-01 18:10:53.418492,VMX78KGA,3.6622640980493495,107.21985992036832,69.7042487213801,2.301263988147344,144.30362685638013 +2023-08-01 18:10:53.920580,A65NPTQZ,3.014431157958835,106.61197787154521,108.25181931735143,1.0163736634953486,47.50077902930468 +2023-08-01 18:10:54.422673,LPKGAOF1,3.9356095296692817,105.86878918772433,177.80510597551543,0.6928090679173848,160.36858330598338 +2023-08-01 18:10:54.899658,3M59U21Y,4.058294043114238,105.73262649843198,263.1740217535309,0.5602062398049488,259.25414701065847 +2023-08-01 18:10:55.401769,1KPTA637,4.580074809322968,105.13822807558869,458.2178375961549,0.8257876798824039,286.38453704990405 +2023-08-01 18:10:55.903987,ZIMSQW72,5.475434305289265,105.8740207753721,102.32740060814075,0.39616866607673096,198.71949221256136 +2023-08-01 18:10:56.406133,Q8MX4WP5,6.100998587143507,105.89779052271777,140.2795857844479,0.6857507464972259,95.51256822522481 +2023-08-01 18:10:56.908215,8347LSY2,6.131282534876139,106.84870089027835,145.25454190506326,0.7005382024434051,119.60427360754727 +2023-08-01 18:10:57.410565,7HLVN12Z,5.5258811992724,107.62054348037417,266.0858089885631,1.1195202581897268,315.4916985188715 +2023-08-01 18:10:57.912599,BOGKZYHW,4.904943838278558,107.95247108928555,402.9373447358816,0.7182889712272609,52.51556719432091 +2023-08-01 18:10:58.414733,1TX0SPL6,5.447116388221441,108.36073400265694,284.0379157274154,0.8660214586553542,82.70537382070245 +2023-08-01 18:10:58.916780,6SDKA9FQ,5.558855691479572,109.05008048112754,248.4992661856476,0.8797238600821624,21.715855228103806 +2023-08-01 18:10:59.419218,A5IJ6HCS,4.9088583136480946,109.7079603264894,26.84005767443412,1.0817108535446676,191.54593833285756 +2023-08-01 18:10:59.921598,96FCXQAB,4.936828216609626,110.08076008091263,35.80495030683661,0.5333993309739354,259.87146958214237 +2023-08-01 18:11:00.424027,I2GF30HY,4.850306414583998,109.69024316685442,47.02025698439452,0.9965706290811461,149.25885736324176 +2023-08-01 18:11:00.901021,S21J0DXE,5.064343040583304,108.94141561598171,39.7235359405451,1.1383189367428357,341.4323467621493 +2023-08-01 18:11:01.403313,N34L7QFV,5.290286120401765,109.24307992055749,62.269165011399636,1.8396034786135356,338.41275813046013 +2023-08-01 18:11:01.905676,56YWEV0I,4.3996027696097215,109.30961801445734,72.66298756100899,1.6765288460627725,296.24106654075797 +2023-08-01 18:11:02.408081,7PB2EGVQ,4.05722271855239,108.83530877595102,40.31749378383141,1.496543092911467,144.66029690401808 +2023-08-01 18:11:02.910408,2WHIMFJ6,4.552022378098599,108.06568175738116,36.64634924759153,1.350518743338877,274.15348077439444 +2023-08-01 18:11:03.412506,4J32CPAS,4.172819207923975,107.0674557087857,42.38849658373259,0.3623666465560893,329.15452488884165 +2023-08-01 18:11:03.914932,I8RQANMK,4.191560985626375,107.42107674944279,67.12080637813065,0.5945340461748252,250.0538102083633 +2023-08-01 18:11:04.416885,OZEMQ67J,4.911066647807208,107.60812219034801,10.154098687381627,0.3794688060013612,285.6568369392734 +2023-08-01 18:11:04.919187,Z0YBEA4J,5.780641830744597,108.51760997153352,19.466230482806406,0.7580753589842854,248.68880740280952 +2023-08-01 18:11:05.421540,ZY0OQTIP,5.118620796896918,108.08576527473959,35.92062533888129,1.1821555923579858,185.22984525464722 +2023-08-01 18:13:20.046711,EQYDFOMS,0.6690575278790614,102.90532590369143,66.08403934239959,159.27034886802366,275.78506662700306 +2023-08-01 18:13:20.549146,8DFP10G6,-0.3248959468856274,103.46754339469328,27.15362674907552,29.582121336173373,89.94817466621481 +2023-08-01 18:13:21.051229,X3HDA0IK,0.454868665062397,104.36132125721403,13.754346094366216,44.99234599562532,186.65523291401706 +2023-08-01 18:13:21.553242,7L6N3ZGA,-0.23502205890882344,104.24643612266779,16.65862003137148,44.23484242401174,20.520591196267787 +2023-08-01 18:13:22.055314,I6SDP1R5,-0.09658018116999534,105.03679572749495,6.386979361807846,33.16665257146826,325.7335772823415 +2023-08-01 18:13:22.557331,VGCHWE05,-0.8459282912433623,105.71189780926528,11.229631882428468,42.52683467554496,52.950242130579 +2023-08-01 18:13:23.058860,027UBRQA,-0.861391665089617,106.63801337864483,5.010926653239945,64.24029609881272,288.48981773262017 +2023-08-01 18:13:23.560506,J5O3PVNL,-1.2156865697502668,105.94307071819614,0.3715559284749945,12.519595581061196,88.96196437857822 +2023-08-01 18:13:24.062634,93SCKB1L,-1.4742423688630295,105.90819256007232,0.56001946823566,4.543215156350548,202.26059425153105 +2023-08-01 18:13:24.564291,9YW51INT,-0.9037829780369637,106.75698716200877,1.1002862624061334,0.7812434863426736,333.7859000167982 +2023-08-01 18:13:25.065903,MDCIJL9U,-1.6604302586009956,107.48481688855539,0.964634974340706,0.23853310852708132,326.9614606307757 +2023-08-01 18:13:25.567915,F09UBZN8,-1.6158399964110668,106.56006975927366,0.2236832622256021,0.47179867810373505,177.0123467391952 +2023-08-01 18:13:26.070072,J6425BZO,-2.3403283250058458,107.01532213529703,0.2054790423373524,0.04098662790194246,330.4688614264254 +2023-08-01 18:13:26.547013,IBL1VNS0,-2.197160587059649,107.13696607112087,0.18780399864276665,0.028088220635715942,248.196829765257 +2023-08-01 18:13:27.049186,XO09L852,-2.571269449393549,106.25883990592516,0.1433664611526793,0.03024110007337488,20.79801232906391 +2023-08-01 18:13:27.551158,V8YK5HBR,-2.6524019540690116,107.04738380224488,0.015058098259803837,0.02798655243333743,136.36949496510732 +2023-08-01 18:13:28.053269,U6CNYK1T,-3.381588129611269,106.48335654139488,0.02387671486663154,0.05298877664809545,260.2279876095295 +2023-08-01 18:13:28.555425,A9FK2LR3,-4.379833969496382,106.23957847326956,0.03306500290380813,0.0851348700744897,328.8922227286612 +2023-08-01 18:13:29.057630,0SZJFWNR,-4.275098613116646,106.48167615156487,0.027422455254572906,0.03097530736016374,93.27222576896321 +2023-08-01 18:13:29.559631,25LIPFZ9,-4.167269498095963,107.05740976371736,0.024675718468103267,0.039416897885873894,207.56665174867572 +2023-08-01 18:13:30.061663,57I318XJ,-3.657872563221038,107.48669049168049,0.0033771423042140945,0.02670447274397847,344.336000350611 +2023-08-01 18:13:30.563670,VP9NAJB3,-4.120910547455232,106.56179388562573,0.005208493726139044,0.0084168476244765,76.23684836295087 +2023-08-01 18:13:31.065875,4OVIWHBS,-3.991555840925311,107.3414424631775,0.0005773834320528604,0.0031395002044303563,46.79929172591761 +2023-08-01 18:13:31.567924,J85IN0VL,-4.052095809684332,107.97110602726222,0.0009749904147747539,0.0018399346332097733,144.06881641847082 +2023-08-01 18:13:32.069983,OIF9BDSK,-4.293146103185171,108.80937492816146,0.0013411882576799517,0.003495158002507407,192.41435123170447 +2023-08-01 18:13:32.546926,5VAGL7R2,-3.5631396965477937,108.26906974653848,0.0007354005430915751,0.0024261948122353636,296.93013565850265 +2023-08-01 18:13:33.049130,A4DQM1O7,-4.423339042670466,108.78545680808028,0.0010932018575622842,0.001867483802941938,210.93616368301923 +2023-08-01 18:13:33.551225,2FJOWUKX,-4.629776611997498,109.48472874021822,0.0010327639256305506,0.0020544195754879655,175.87623456446772 +2023-08-01 18:13:34.053176,LBNR4VZH,-4.618806916807247,109.99688028161899,0.0004749816759709051,0.0032140428100855714,321.95173439160055 +2023-08-01 18:13:34.554830,0DMXLN15,-5.334820386788261,109.25294889530278,0.00034961197849707487,0.002297993780574785,180.5086523379348 +2023-08-01 18:13:35.056319,58GZ1V73,-4.860551012899265,108.35519990429367,0.00017150322755236496,0.0032747417932945857,342.0460364945012 +2023-08-01 18:13:35.557849,ENXV3QYZ,-5.031575331094391,107.69029577884129,0.0001468042211147638,0.00570139754200468,158.3800481443676 +2023-08-01 18:13:36.059766,JIN6L5BM,-4.235454656860271,106.78381036447999,0.00027258145590487433,0.010854751650964493,53.81952686601028 +2023-08-01 18:13:36.561461,XQ5DBYF9,-3.940877571582835,106.26729516193824,0.0005206518672047621,0.015807677635312975,109.02916658542637 +2023-08-01 18:13:37.063690,1VEJWYAL,-4.584052090904317,106.94923952098335,0.0003889298016969573,0.0012719303241170918,315.97414120474645 +2023-08-01 18:13:37.565949,GWN43VS6,-4.070834577584093,107.74404038562646,0.0007401424354262064,0.0023874101600133276,317.46243000397226 +2023-08-01 18:13:38.068072,ZJ0BYK86,-4.71311868820129,107.71835112505683,0.0013395955259408328,0.0009315048691062847,167.29002488582455 +2023-08-01 18:13:38.570121,Z5IXL7EO,-5.151951485614189,107.76367378260039,0.0005360424726557824,1.885947282401657e-05,26.77883118906675 +2023-08-01 18:13:39.047191,9ZQDPXVF,-5.893924117189045,108.53814939429215,0.0006209750263711013,3.062115273124318e-05,327.8978587646264 +2023-08-01 18:13:39.549412,35L64UE7,-6.052021660897385,107.84269609441307,8.367268308490648e-05,1.5217914447924447e-05,184.46394447170098 +2023-08-01 18:13:40.051579,RPLDXQWU,-5.063418709621864,108.75250952062119,0.00016122279960988266,9.561140808576517e-06,205.41152786314055 +2023-08-01 18:13:40.553598,S71IQRT8,-5.869315817588508,109.11797479331689,0.0002795339373074808,1.5709473114934055e-05,279.12600210157143 +2023-08-01 18:13:41.055677,IWZB4JTO,-6.6268372412178715,109.6904391176494,7.4234323963566756e-06,4.84160977661267e-06,285.0281017719648 +2023-08-01 18:13:41.557751,17IFRO6C,-6.709528535814822,109.57706619183917,5.353727826394457e-06,2.7866340916056474e-06,164.25639070666273 +2023-08-01 18:13:42.059839,B9G6QI3W,-6.769481920850494,109.89202988520569,1.6415282396880037e-06,3.3387295137201242e-06,183.01696376566267 +2023-08-01 18:13:42.561944,DZLC392U,-6.320950618105673,110.10963798948534,2.3767011740275327e-06,3.071867470169047e-06,267.76480668880265 +2023-08-01 18:13:43.063936,Q8UTNX5F,-7.313172181940672,109.2704493447072,1.9040121294601686e-07,1.2821153445445394e-09,340.6118868734094 +2023-08-01 18:13:43.565899,FGWVJ21H,-7.017434837172709,108.65870577281719,2.67272954357708e-08,1.8798907383210134e-09,294.123871393082 +2023-08-01 18:13:44.068200,RABXYU8L,-7.856549717440329,109.2748775418209,2.5820414158268158e-08,2.2103984909939942e-09,178.48059202638672 +2023-08-01 18:13:44.570395,OMGEDY6K,-7.658779984433809,109.73942738874584,4.188832098647163e-08,4.449586039763592e-10,263.02140172450885 +2023-08-01 18:13:45.047458,73J425VM,-7.159887806402393,110.24498000983378,3.504639784433756e-09,8.030899053843356e-10,9.416173505720849 +2023-08-01 18:13:45.549557,LG8RIPU4,-7.44453858224692,110.91406182330223,6.112218155788803e-09,4.599015145242206e-10,266.4016541849971 +2023-08-01 18:13:46.051757,W3ZJRPB1,-7.964841438172023,110.06378789097587,8.497458718290226e-09,3.419762710742689e-10,286.2930652891217 +2023-08-01 18:13:46.553961,PN65LJ1H,-8.472873722558955,109.35264389883525,3.2265973890620985e-10,5.641162510917579e-10,228.24103561414745 +2023-08-01 18:13:47.056125,Q6VGK2SH,-8.736771462100855,110.20408870297503,2.454920739808456e-10,4.9845204692560365e-12,15.406191889662978 +2023-08-01 18:13:47.558224,W8Y7C19D,-8.560461512300407,110.17702067183188,4.2439525324166715e-10,7.876576029915923e-12,107.7618224776773 +2023-08-01 18:13:48.060363,GYJVRUWH,-9.308779539349626,109.86028646449364,4.867483254945405e-10,4.931241141341615e-12,62.606814223903086 +2023-08-01 18:13:48.562445,UND591BX,-9.294135879408548,110.07452997374986,3.8038220598642e-10,9.779748926647881e-12,70.68777555788472 +2023-08-01 18:13:49.064625,X4UODEKL,-9.678310106627812,110.91983698847179,2.7020956614433993e-10,1.897160699414759e-11,178.52115786333883 +2023-08-01 18:13:49.566715,M8UBK6VS,-9.780758461368311,111.64665546147016,1.9123547862475472e-10,1.8872844668750783e-11,203.76896430301665 +2023-08-01 18:13:50.068711,SOTEAL38,-9.85281784084009,112.18087987526155,9.536932493458675e-11,2.3963323715484892e-11,34.139808769606645 +2023-08-01 18:13:50.570761,1EBVQZC0,-10.47973166768349,112.57710815630554,1.7111964494234566e-10,7.735183019970517e-12,31.70041344978341 +2023-08-01 18:13:51.047738,LCOBE0DX,-9.716209235219495,112.004176490438,1.389893436698699e-10,1.5352656284963835e-12,224.51585928612303 +2023-08-01 18:13:51.549874,USFYQV73,-9.64233021356749,111.2877690302129,1.5217618071174518e-10,1.6107766494766057e-12,37.08525288619967 +2023-08-01 18:13:52.052097,IA6LK120,-10.611607115011548,110.56618416014345,2.2565940957155912e-10,4.160213443163726e-13,137.02140724710523 +2023-08-01 18:13:52.554187,7CFS50U4,-9.690608670386608,110.12138308026283,1.9662344205267507e-10,2.2915750707316207e-13,352.5498320525875 +2023-08-01 18:13:53.056335,Y582X7DC,-8.910698466255571,110.55350292714996,1.9937793114282854e-10,2.676456852721736e-13,29.35600290531096 +2023-08-01 18:13:53.558529,JMXSHL1R,-9.579804846430664,111.26397754144618,3.346448092641614e-10,1.9481594389081157e-13,227.42603412200026 +2023-08-01 18:13:54.060723,6EMKW108,-8.621398271899828,110.69895197883703,6.660393717950468e-10,3.4130301074470865e-13,255.62896193965855 +2023-08-01 18:13:54.562802,CEUY0T3P,-8.005289635475393,111.00195157045887,1.2006181402702175e-09,1.1686868199618243e-13,154.15548317426487 +2023-08-01 18:13:55.064978,PEA6T47J,-8.917559220995374,111.52060246265411,1.4275315075671812e-09,1.4376638475901333e-13,196.14407247514515 +2023-08-01 18:13:55.566871,LEVYHWBJ,-8.200703118874776,112.21303510132206,1.303634886402922e-09,1.635953904561187e-13,338.1341960453177 +2023-08-01 18:13:56.068742,CAS594JG,-8.952849821192045,111.37006668046149,1.8916910734316106e-09,3.02484178270341e-13,328.3891948827908 +2023-08-01 18:13:56.570904,0RL3MCA6,-9.133517853755103,112.30644629244195,2.798193437498422e-09,5.982952100374339e-13,332.4327539674791 +2023-08-01 18:13:57.048004,21Z596RM,-9.496569612735508,112.29076479549586,5.113515275702739e-10,9.54102310111109e-13,85.66826302555495 +2023-08-01 18:13:57.550082,XAMJ71SK,-8.974217103132695,111.64768301364904,2.0709481259737212e-10,4.486935457141337e-13,50.56044841686344 +2023-08-01 18:13:58.051979,672BPHUW,-9.358956636583908,112.28562515566082,2.3603631032788266e-10,4.0914042672300626e-13,57.59922122485654 +2023-08-01 18:13:58.554147,WGTNDE1L,-10.069532303311973,112.50856173188046,3.438142018091741e-10,7.916869750648357e-13,98.62897057033993 +2023-08-01 18:13:59.056314,6CS3VBHI,-10.808463671491621,112.8067582524545,6.086473225786179e-10,5.273556644670958e-13,219.47896405294173 +2023-08-01 18:13:59.558445,7A3SG2T9,-10.04462909777282,113.1939453541384,6.886713433504598e-10,9.841090249102024e-13,323.83283654959297 +2023-08-01 18:14:00.060438,ARXT251V,-10.100081452835028,112.43879158646462,1.0388750320403988e-09,1.4428584863853086e-12,242.97603687665492 +2023-08-01 18:14:00.562539,U32OTX46,-9.864283460379873,112.16611984545266,2.032800312854216e-09,1.9021464145906803e-12,223.94048862904037 +2023-08-01 18:14:01.064631,MPV0ESFD,-10.63797258557176,112.49420307934625,2.6520478209221463e-09,2.666357046462457e-12,59.99205397580829 +2023-08-01 18:14:01.566725,KWYVIE5G,-10.989256657531225,112.81152332269467,5.17772752323772e-10,3.5265230460396474e-12,60.78826219966147 +2023-08-01 18:14:02.068858,B6QUIFAN,-10.768881090395682,112.5851423168413,3.597499562032389e-10,5.30048804829803e-12,229.96244210038415 +2023-08-01 18:14:02.570924,3CK5EVX2,-10.373445025576405,113.15758167638877,2.3895921488270402e-11,1.577803302044588e-12,279.0340718845983 +2023-08-01 18:14:03.047933,UC5OPWJ7,-11.11305749019979,112.72604141777899,1.1075904661943695e-11,1.2524357334430753e-12,39.82970165316533 +2023-08-01 18:14:03.550025,K7VBJW0T,-10.95921108419819,113.26066266188258,9.351037109541982e-12,4.509290739237783e-13,274.5484402338117 +2023-08-01 18:14:04.052084,EVQWOX13,-10.17355690120914,112.87924008404434,1.5398127432886424e-11,8.915752106939639e-14,67.13588356724915 +2023-08-01 18:14:04.554177,TP06G5BI,-10.404637581781003,113.01488812878652,1.934069305809917e-11,8.680185270057207e-14,181.91333186575085 +2023-08-01 18:14:05.055995,QAX1W3MV,-10.28166160799043,112.40293810915938,1.4035827178727172e-11,3.2430948039311072e-15,47.11145655476389 +2023-08-01 18:14:05.557869,ZO32M91H,-11.017697108639089,112.22491996652809,1.8380325667212967e-11,1.3261064994995573e-15,129.24903762929256 +2023-08-01 18:14:06.059418,NMLI05Z4,-11.809722607212237,112.03118610876567,2.8464173586122517e-11,5.183591434688454e-16,296.54712881433886 +2023-08-01 18:14:06.561135,DHTV92NY,-10.966904891073083,112.9986966195729,5.0768297648330615e-11,4.121604460623105e-16,345.9530689152131 +2023-08-01 18:14:07.062753,JRC5L46B,-11.740816170380679,112.81584027970042,1.335475570056835e-11,4.918165071612034e-16,287.70701283631706 +2023-08-01 18:14:07.564867,85HQOF29,-11.415203712099421,113.74060954557443,4.353962474463834e-12,7.935724527069188e-16,155.38810248844925 +2023-08-01 18:14:08.066846,CLODV7AW,-11.216447282832505,113.8704197011961,8.304376450519404e-12,1.4746023705793944e-15,233.2753246038452 +2023-08-01 18:14:08.568338,20HEB9P1,-11.456255903204598,113.86036752678615,7.594216460587887e-12,2.2259800282552684e-15,37.504664138159455 +2023-08-01 18:14:09.070114,A1DRSC76,-11.729815135722694,114.54202963111487,4.283054701040356e-12,4.39164027977176e-15,147.64077737403278 +2023-08-01 18:14:09.546844,QN45CAKM,-12.536014611566843,114.52645225971723,3.5691656348990515e-12,7.364504641408066e-15,246.84323947366846 +2023-08-01 18:14:10.048863,2CUI5786,-12.193998225296404,114.40726943987144,6.133634728385708e-12,1.9936358215799777e-15,107.30089994349999 +2023-08-01 18:14:10.550845,6HB5NXY3,-12.884870350804801,114.30176252852006,1.169996447085345e-11,2.503069751198298e-15,244.1132671485783 +2023-08-01 18:14:11.052952,49C0I37J,-11.986041501560992,113.3708987668438,9.561533468162243e-12,4.4690629070081215e-15,34.18210003748993 +2023-08-01 18:14:11.555041,Y69ED30T,-12.560145285825637,114.31177350172628,1.3199774480512847e-11,7.183050366613537e-15,350.50575628697374 +2023-08-01 18:14:12.057167,F0HEW91D,-12.537622009995031,113.7378059367775,1.725364371552036e-11,4.627028350424729e-15,145.26926886438127 +2023-08-01 18:14:12.559228,0ITRO4L3,-12.839232786234273,113.11547721214964,1.8025047453612023e-11,2.781340009581261e-15,152.36059818409396 +2023-08-01 18:14:13.061341,WYB1X63G,-12.697554326747788,113.66472228210176,3.048718263732984e-11,2.64105694774529e-15,225.58228162572675 +2023-08-01 18:14:13.563487,84W9ECQ2,-12.884079039398582,112.6727711199104,3.08538628322624e-11,1.2331730842107586e-16,350.1422785384137 +2023-08-01 18:14:14.065570,DSQAUO3C,-13.156283548468732,112.0879745145389,4.1937491302789165e-11,1.0473920907812642e-16,162.5562239383106 +2023-08-01 18:14:14.567610,G3VFPNZI,-12.432921675152771,111.5886093068213,7.6347270311816e-11,3.395811543206816e-17,149.8214488276783 +2023-08-01 18:14:15.069641,4JOHIQ5V,-12.812137430912182,110.59840047732611,2.3658282058382552e-11,4.259949684758833e-17,281.1818213520937 +2023-08-01 18:14:15.546419,FIVOU2WH,-12.985133012236645,111.03894903044313,3.305065500877411e-11,8.171063396491455e-17,296.28968693405926 +2023-08-01 18:14:16.048438,86PIET0V,-12.598061326393976,111.95724048889896,6.013154159274553e-12,6.143810664990415e-17,274.23032403715297 +2023-08-01 18:14:16.550447,J4NDXUT9,-12.976774514171789,112.21759486541386,3.807088626509098e-12,1.1222774763100955e-16,15.446193414797563 +2023-08-01 18:14:17.052645,OQ1US40V,-13.647077504851271,112.36190770931532,3.3472918741706996e-13,1.7852685420812157e-16,36.53458271800218 +2023-08-01 18:14:17.554766,09D51XJE,-13.448970340603058,111.36226502175121,4.952102775546094e-13,3.397103112466973e-16,230.9362391897744 +2023-08-01 18:14:18.056942,AIBE2LDJ,-12.509200157296942,111.61059009267198,2.1556021693825117e-13,4.607649397769064e-16,221.7857642033399 +2023-08-01 18:14:18.558933,W0AFRGPX,-12.967177753490642,112.4457578406163,2.657077888068288e-13,7.030425883096171e-16,166.74002122706838 +2023-08-01 18:14:19.061158,E4QXFUY9,-13.614314520358905,111.67496602039215,6.775260544266693e-14,3.410019319647606e-16,104.36700880869807 +2023-08-01 18:14:19.563300,RM8X1Y4I,-13.642401129896236,112.35665172814751,2.217502549869375e-14,3.353762474096539e-16,39.025080725080954 +2023-08-01 18:14:20.065434,BHU5R9I1,-13.852449919704288,112.7359344119738,5.102357571956159e-15,3.031378661257052e-16,351.7295807449556 +2023-08-01 18:14:20.567459,LG218F4V,-14.285560330295594,113.25761786010183,6.526849809560546e-15,3.9683244191779125e-16,54.89535636752839 +2023-08-01 18:14:21.069635,SOKQE6IU,-14.69775190257132,112.43148658321165,9.024563803869466e-15,1.7246119509236854e-17,344.49944708404325 +2023-08-01 18:14:21.546716,JN3YHF6L,-15.34120132688482,113.12907176176152,1.573268305058458e-14,4.08922602461586e-18,189.63488413243033 +2023-08-01 18:14:22.048839,MCQSWZ5P,-14.700352089549302,113.75715420229278,2.0819157032580634e-14,2.6148592427172073e-18,246.394223576366 +2023-08-01 18:14:22.550911,VG14QZUC,-15.370526952737471,114.6048708979293,1.4885365225376518e-14,5.075565729534026e-18,175.63076316164825 +2023-08-01 18:14:23.053058,NOQH763J,-16.268837331879226,114.92274885223924,1.1320588275417464e-14,1.175163465499021e-18,161.08247970504203 +2023-08-01 18:14:23.555182,9CUBONT7,-15.411714914158784,114.71810168042315,1.0011309289829755e-14,1.4110555284799503e-18,209.34750998112636 +2023-08-01 18:14:24.057364,5RFQ976Z,-16.012016148111094,113.84690777444659,1.9538059989098473e-14,1.9218384047234935e-19,322.78335809216316 +2023-08-01 18:14:24.559675,ZXTEVY4W,-16.65625303812292,114.56230761401504,2.7391834417304202e-14,1.6287557376748727e-19,224.60176347303673 +2023-08-01 18:14:25.061844,XM9SUH54,-16.824284735952773,113.94002533709367,5.1404802357757004e-14,1.1257634287260877e-19,250.44407489163657 +2023-08-01 18:14:25.564029,2AGN5MI8,-16.717110046732518,114.29436978333523,6.564607344229869e-14,1.8989372638373553e-19,356.94647503964995 +2023-08-01 18:14:26.066229,0TI1YN2C,-15.914044495956574,113.383032217895,8.010326707991528e-14,3.323785315018474e-19,348.5950020459413 +2023-08-01 18:14:26.568419,9C65YFM1,-15.086530403597859,113.06208873759645,3.837465227091685e-14,6.104739528660779e-19,349.9367270697403 +2023-08-01 18:14:27.070613,2QIVPCR1,-15.612895632316095,113.90474722595582,5.819704863456069e-14,7.651156967630887e-19,67.63224326341935 +2023-08-01 18:14:27.547687,OT6SI7KG,-15.001872198748867,114.12348231830002,8.378464740650815e-14,9.14458626488859e-19,55.3263998249962 +2023-08-01 18:14:28.049808,NBP4Q103,-15.075080751291313,114.69514533547508,1.596043224174605e-13,9.868739309299298e-19,5.886130401668197 +2023-08-01 18:14:28.551988,NBFM7KQU,-14.084696338084457,114.1360261963056,2.1497864066059783e-13,6.635848010842708e-19,54.25906585268803 +2023-08-01 18:14:29.054210,UGYI762S,-13.499025562378687,114.78515639310814,3.6956643599680454e-13,6.624749062937857e-19,149.40129645355586 +2023-08-01 18:14:29.555916,YIEBKFU3,-12.903164122658602,115.1932044330648,3.948603825424286e-13,1.0050038022309082e-18,170.99538631086946 +2023-08-01 18:14:30.057818,IPV4H3XK,-13.621188799028912,114.82403997600899,6.555673286730731e-13,1.1676187407707114e-18,123.60004606278369 +2023-08-01 18:14:30.559650,BNAOYEG2,-13.127837140995616,115.39947321054453,1.2553539783924769e-12,2.1127009013389995e-18,351.4948553703297 +2023-08-01 18:14:31.061777,VRMJKPXZ,-13.017998905771247,114.7679687220032,1.8540106671494623e-12,1.2649683389492705e-18,247.70111803992995 +2023-08-01 18:14:31.563821,UF3CZTRK,-13.885665634193236,115.71034113048614,2.1343334558887798e-13,1.4159720061131122e-18,40.174712550635945 +2023-08-01 18:14:32.065979,C68B3DO4,-13.275243195315165,116.28254786755092,3.853098164530604e-13,2.0567529718843174e-18,342.47741555825877 +2023-08-01 18:14:32.567987,RO24NIXZ,-13.26941913971803,115.29162867041654,5.557789699318889e-13,1.9340806922353745e-20,34.883256544285075 +2023-08-01 18:14:33.069851,LY0GZ74C,-12.89923304679523,114.58818998151149,5.282781888250371e-13,2.1270548568507245e-20,313.3094014709906 +2023-08-01 18:14:33.546795,379VHLMD,-12.8161063646176,114.67641075583899,9.441521560774735e-13,3.159297665746393e-20,153.18022414774373 +2023-08-01 18:14:34.048975,S3WTQAVD,-13.546801171926033,115.24023129670834,1.252744932676595e-12,4.018073904420555e-20,163.57645592137715 +2023-08-01 18:14:34.551156,6V1SCX09,-12.613775057149597,115.5049523030701,7.01072216086746e-14,4.4623240853291506e-20,139.3578391717645 +2023-08-01 18:14:35.053337,O2JA1P5G,-13.03588446265986,116.290749577691,8.925429855883161e-14,7.845027097321192e-20,357.4628243703372 +2023-08-01 18:14:35.555525,WPMDBV0A,-13.130535412151078,116.56188393017102,1.7128807061677177e-13,3.8528428344208355e-20,141.78018176146747 +2023-08-01 18:14:36.057625,CPWEKO9A,-13.614979585535295,116.22458409027885,1.9905391199979777e-13,3.148322243887957e-20,98.74757339643207 +2023-08-01 18:14:36.559696,SU63H4GV,-14.252193286749689,116.63762046414558,3.7742265198150125e-13,1.0159194336291814e-20,328.23447429217754 +2023-08-01 18:14:37.061754,7C2R1VFA,-13.625990243540672,115.96820201667428,3.481079092341088e-13,5.475930255009548e-21,184.57113047605685 +2023-08-01 18:14:37.563956,6Q7YVS5M,-13.691257877880734,115.04778572189421,4.373971707837726e-13,7.098311474492182e-21,109.62413610173041 +2023-08-01 18:14:38.066092,FGXYOVHI,-12.730512737672802,114.23596067218216,2.6370063600499766e-13,3.03054278801837e-21,174.36617151851124 +2023-08-01 18:14:38.568124,7RBHPVM0,-12.175216304666726,114.40701218028865,3.7288023427848175e-13,1.5812342957044584e-21,194.0566055781166 +2023-08-01 18:14:39.070208,8G6S1M3Q,-12.302072013772055,114.57995419291404,3.655143231369634e-13,2.3787562214206653e-21,128.19307962259847 +2023-08-01 18:14:39.547372,PNO5VZF4,-12.84705412600944,115.47093572346157,5.23741401644439e-13,7.079683922109396e-22,91.47928366326374 +2023-08-01 18:14:40.049313,BCSFWUDG,-13.292637556696267,116.31522924700526,2.3399049215790267e-13,4.0120051421168174e-22,341.8055402897445 +2023-08-01 18:14:40.551118,69DEB0XF,-14.171466124734227,116.50319322242802,1.3928808692284547e-13,3.7926758750331737e-22,72.6013203239641 +2023-08-01 18:14:41.053225,7HYA3F5Z,-15.077513962847716,116.41259291161249,1.8307615743466015e-13,1.4347272436632803e-22,284.79399619933326 +2023-08-01 18:14:41.555373,J5YE6AOX,-15.563186388431482,116.27342961798192,3.661691154135902e-14,6.978249558294765e-23,129.23198682421446 +2023-08-01 18:14:42.057487,M8HLR6IO,-15.712837014887043,115.78991254759434,2.3848558379421334e-14,7.56400329068588e-23,87.19861655427599 +2023-08-01 18:14:42.559517,Q07W4DUI,-16.033045434486308,115.85988955309787,4.299044115321418e-14,9.188383530542381e-23,192.24468228399917 +2023-08-01 18:14:43.061534,HK4FXAC7,-15.384454599325826,115.80827538768446,7.312016228557714e-14,7.482671408847255e-23,284.0320495297446 +2023-08-01 18:14:43.563646,VOW8XDPT,-14.837115066465529,116.31595277783289,2.8831523972088554e-15,1.3642174336347425e-22,129.9408096300259 +2023-08-01 18:14:44.065800,PQZYLN95,-13.944428901398794,115.98500809249798,5.557367706972633e-15,1.2414812501287964e-22,203.7946784050515 +2023-08-01 18:14:44.567867,7V29SW80,-12.995035914832993,115.31523770349209,7.748175640271151e-15,1.026742722044786e-22,264.7027320498433 +2023-08-01 18:14:45.070095,XTFKH5ZG,-12.226312047579144,114.65274721867682,1.3612740732084466e-14,1.7816537921058908e-22,151.07762775297618 +2023-08-01 18:14:45.547167,51HCBTQ0,-12.552231930271715,115.54679137062116,1.6380576064833807e-14,2.5316839635556773e-22,172.046416783681 +2023-08-01 18:14:46.049316,C6JMZ8NE,-13.512151902049823,114.54817148123381,1.5979548084566124e-14,4.972678751706705e-22,325.02232745507575 +2023-08-01 18:14:46.551433,XT8KWL02,-13.272374037165447,115.3559902154328,1.4316958629842962e-15,7.863152742396046e-22,319.6922977467956 +2023-08-01 18:14:47.053594,6QZY7XFO,-12.272535001298085,114.6992186636615,1.0458755411924707e-15,9.928619485357966e-22,110.24663336335186 +2023-08-01 18:14:47.555832,S3QNF580,-12.615321165505874,115.1828207304001,1.2620542138534306e-16,8.618217549823818e-22,274.0816452931506 +2023-08-01 18:14:48.057951,XU0YSDBP,-12.975193698325324,114.67095658883748,4.205161871448884e-17,1.5235122757178819e-21,222.49230257180716 +2023-08-01 18:14:48.560063,A1NGUWSI,-13.377181274034575,113.76378116996689,3.306317637052214e-17,1.2470812412544175e-21,281.3685818743387 +2023-08-01 18:14:49.062159,8LWTXKD9,-14.176799915652683,114.59132124664434,1.7895023941817727e-17,6.624276479842807e-22,351.98075892077753 +2023-08-01 18:14:49.564201,ZYFS2Q0D,-14.933886506139505,114.95680031942234,3.3600636874216294e-17,1.1746873270062797e-21,228.7840573121664 +2023-08-01 18:14:50.066323,E94WSJUP,-15.262458725705542,114.06600361283203,5.4710717342443313e-17,2.0831649763479325e-21,317.1254360679451 +2023-08-01 18:14:50.568329,0UQIOC82,-15.259859930529036,114.60502301101415,3.3219253692002705e-17,3.414611296489726e-21,289.11615168041465 +2023-08-01 18:14:51.070479,B8ULWOHM,-14.780924087530366,114.46183260934218,2.6465936526012776e-17,6.5841496609107435e-21,222.46654436983158 +2023-08-01 18:14:51.547501,8G1DM0S6,-14.01981148524081,113.50247114131247,4.950311564259243e-17,8.631194202450263e-21,205.9778166622043 +2023-08-01 18:14:52.049645,Z1TUK3O4,-14.648942903345635,112.82961182361122,6.679544212382656e-17,8.664543858450705e-21,350.176042846512 +2023-08-01 18:14:52.551819,3HA8KT7G,-14.018651575870049,111.89197495007117,1.0198588676905356e-16,8.820919162044858e-21,159.19588067565928 +2023-08-01 18:14:53.053891,V1FATL69,-13.248632185689639,111.27533049533143,9.073878983555065e-17,9.349095460916248e-21,86.03215412627947 +2023-08-01 18:14:53.555956,GR3WLJ2A,-12.781889686991255,112.2748023484209,8.50646335113765e-17,1.4884863774297695e-20,4.5063543158921675 +2023-08-02 11:34:19.530637,1M2YVKG9,0.9523982474872874,103.13366004124043,5450.0956045171715,60.251849312285515,128.06003658414005 +2023-08-02 11:34:20.032689,RDME98SX,1.6579584779377932,103.87207099990252,7152.019033076542,34.05286240849466,198.90375450631166 +2023-08-02 11:34:20.534276,U8M5ZJ16,0.8996891272682286,102.88023668180283,14185.545388381683,21.065204380729018,220.76589135447128 +2023-08-02 11:34:21.036371,VSL71EPG,1.2899117897702241,103.87129815418116,9927.110476544147,28.823617934262124,170.8037231959628 +2023-08-02 11:34:21.538543,TMGXCI32,1.0664336503007386,103.10213978236307,13336.135601779688,29.63045890800509,350.9805328311031 +2023-08-02 11:34:22.040556,GBCH6XKM,0.11674703006362508,102.37045145162732,19312.919631582936,34.75000593140035,222.74784069999646 +2023-08-02 11:34:22.542774,BN37XD9M,0.8211663288739726,101.50192964909344,26777.35947650147,51.91452293355682,244.55533846579195 +2023-08-02 11:34:23.044939,U325G8TS,0.27406792738385954,101.16352981975135,32294.68699600797,56.447394061721226,290.22980866901145 +2023-08-02 11:34:23.547126,I9MXVBZ8,0.3225610600002564,101.45492612066113,28966.90812555822,58.71582411835771,162.60808118748764 +2023-08-02 11:34:24.048999,VI8N2FKM,0.5574844875398477,102.20111982411743,23516.2045371436,106.32144094133983,346.9712966750926 +2023-08-02 11:34:24.550723,BVS1KHT2,0.8849685506765428,102.74086248898521,6342.35135192543,80.65479430874824,289.6731732656792 +2023-08-02 11:34:25.052443,LRM48IPS,1.5691146601377783,101.77746588931792,7213.843852812341,56.92648051730266,2.1095156619894624 +2023-08-02 11:34:25.554270,NETDMO4W,1.8773711885035291,102.59226455032253,1830.9487065834637,82.76579494609055,344.1664041997715 +2023-08-02 11:34:26.030836,0O5DASIC,1.0466061317343587,103.44662307413778,3638.460892742387,4.464438632848072,260.30861948933784 +2023-08-02 11:34:26.532884,J7M6LA4F,1.5466902303857204,103.80528528260997,4718.449396255298,4.3819044513370375,142.1527161299523 +2023-08-02 11:34:27.034996,XG7ID2BA,1.0929262063911,103.62317287251201,9087.360942718356,0.92024033049058,222.26629227543927 +2023-08-02 11:34:27.537168,SR7VXM6T,1.7193548901121352,103.31537217887575,16969.1275179231,1.3661065616008428,307.6333517227256 +2023-08-02 11:34:28.039384,SA2BPC9O,0.7849128471345799,103.69971744925914,9577.619015773162,2.1575708180602615,92.97737983986099 +2023-08-02 11:34:28.541532,K2GH74X6,1.261822542677145,103.13396803079482,6831.396058020943,3.961145953041235,261.44634629332063 +2023-08-02 11:34:29.043582,BYRDT3JA,2.247704215554798,102.6302466111928,3723.676562645654,3.0775691627669395,92.39371664709267 +2023-08-02 11:34:29.545769,PANB9IEX,2.0197984295807094,101.64127680276029,3614.0192938500104,1.4194637755937705,358.0776130153584 +2023-08-02 11:34:30.047904,CTLM1QIV,2.6572687479113615,100.70319249754716,3661.4387315931476,1.5019881645064719,326.3921169639691 +2023-08-02 11:34:30.549987,O0VYIR6S,1.8895026930680516,101.31458692913331,1184.6370572374358,0.9086575704765832,164.3836000180952 +2023-08-02 11:34:31.052091,AW6IF3CH,2.5295298830824975,102.05254206853029,532.1131049525574,0.833106069940669,313.20732340210895 +2023-08-02 11:34:31.554169,BW2FR9CO,2.858478448876003,101.59414229193743,943.0561868176331,0.3699668544392122,138.13223791977208 +2023-08-02 11:34:32.031278,FVB0ZGN6,3.7422846671519268,101.41240815720515,934.6238162641333,0.32127524307851607,344.771859036543 +2023-08-02 11:34:48.864243,UZJR3V7X,2.05972527410721,103.80037111438789,951.100714258554,218.33877915143918,184.96803592461518 +2023-08-02 11:34:49.366782,A8YLGDZC,1.3546210150368196,102.89488328532926,1178.2993504990554,74.8697430153479,218.7048197788984 +2023-08-02 11:34:49.868960,NUK78IAM,1.6582310137979948,102.17321942604367,1478.764577379503,127.62743098174847,295.0994753350998 +2023-08-02 11:34:50.371142,4EKPD8JA,2.077394789321466,101.52772817469193,573.6029330977037,33.00542244790502,229.99183456374885 +2023-08-02 11:34:50.873218,GSCK5HZB,1.0939377415701592,101.93545932555784,212.29191927855868,1.0810759795032823,208.578173226201 +2023-08-02 11:34:51.375355,Q5IPZFU2,1.6039170278564374,101.35220707062747,228.4385752257,2.1051222137968897,330.1453709045417 +2023-08-02 11:35:24.452327,4LO8395I,1.9309103887311716,103.71801691005665,8483.733509145228,209.4617491641281,77.04356140522243 +2023-08-02 11:35:24.954496,1MVY8CZ6,1.5654402957793976,104.6133588329313,3917.632448865681,332.04473290436164,79.9865337040142 +2023-08-02 11:35:25.456488,1R79BQDX,1.3920095984944474,103.67103692276038,1421.5709869510792,592.220280693769,249.34677691249163 +2023-08-02 11:35:25.958443,KET4YZP3,1.6034230208976037,104.60293808735533,2120.5169910743525,391.0776054875564,68.80753689811996 +2023-08-02 11:35:39.986190,W5M2HQSU,1.3347670811756502,104.36134725392402,1386.947542639391,247.05602959293364,119.53066438707509 +2023-08-02 11:35:40.489269,C1MBLNVD,1.7655274899037043,103.7550612667077,118.84240977530658,427.8309330388413,246.5178589923727 +2023-08-02 11:35:40.991406,X4K621WE,2.382982406340571,102.83011473839014,144.95376618105468,418.5122418852167,250.35329677114836 +2023-08-02 11:35:41.493451,894LY1MD,3.101851864851176,102.2407370105587,38.221723478202506,21.03559701948336,211.5219720235117 +2023-08-02 11:35:41.995554,3CH1M4KZ,2.472930714148239,102.5937696877734,33.73361143540015,20.818109872430046,272.226339040375 +2023-08-02 11:35:42.497703,YTRZW9UF,1.6722013877488835,103.54716793752104,16.53775271557271,9.599748570870357,131.73833092927578 +2023-08-02 11:35:42.999862,E96FPMXW,1.255613807866418,104.43094910041418,20.995396064221133,13.641801247722835,154.209178817677 +2023-08-02 11:35:43.502025,TVFR61QK,1.2890373407670368,103.58153240840272,41.210317204232105,16.508254492440948,309.1963292705529 +2023-08-02 11:35:44.004016,LD36PTU5,1.0556966507478944,102.67354372609924,59.35361525238032,5.02755115350258,281.78143105396225 +2023-08-02 11:36:01.707900,UW3RF05M,0.3564925185471781,103.29881697748165,1032.3003420564328,131.8341147321367,319.8727362000475 +2023-08-02 11:36:02.210557,PYX2Q1HJ,1.1891683449328567,103.9515046680292,1249.8271188649708,169.50471569464597,344.80367708279584 +2023-08-02 11:36:02.712699,7AZOS2KL,1.2846182880775745,103.18148368734519,2454.785870940364,220.14359716532843,328.7934735123848 +2023-08-02 11:36:03.214632,76H49FTD,2.106649712623941,103.57745626300873,2762.8713869792737,343.59882805379306,212.99046751281992 +2023-08-02 11:36:03.716687,NOBSP42Z,1.1288546415137761,103.0998699433878,5004.450566199399,611.7736144435884,30.768022945137602 +2023-08-02 11:36:04.218714,SGJ6AVXR,0.3054926724569782,103.9988790867211,1353.0095082023327,408.50758768123865,148.04599252021166 +2023-08-02 11:36:04.720705,MIG4QRYF,-0.47175823780756687,103.19473847298569,875.9434728182905,528.779936122434,306.8234836989916 +2023-08-02 11:36:05.222759,5VDMUWGX,0.4406084738931386,102.31482564132858,903.6000917024487,1025.030237702186,96.33641475556641 +2023-08-02 11:36:05.724828,A8ETSH90,1.4294680880366029,102.27432737095491,582.7740584878891,458.4530606031209,252.49131420201468 +2023-08-02 11:36:06.226842,IX1AP56G,1.7323187256133505,102.04441413374943,605.8928657147848,324.9147935378026,152.30619750644075 +2023-08-02 11:36:06.728946,3D8CKJQS,1.5792443396301823,101.89498603734518,201.05128487135386,369.5963202916026,290.23697983819545 +2023-08-02 11:36:07.205887,UYVAE57Z,1.3324184430602133,101.05941316534064,330.5827413710508,237.38106306664702,35.71647240748746 +2023-08-02 11:36:20.199053,GX0H85ZN,2.0380860017683884,104.68790571182458,2511.128127450904,40.625080290999094,124.73090633453937 +2023-08-02 11:36:20.702132,O8QD12PE,1.5537914133347723,103.72130799555009,2441.7170298762508,58.1498552129934,63.566270653530296 +2023-08-02 11:36:21.204242,P3OIY0T2,1.7132818519997366,103.5748205635738,3349.6304087330304,14.303372809405673,317.06286110788426 +2023-08-02 11:36:21.706404,GYJLP75I,0.7401694956688476,104.32847212837112,5270.871076440372,17.359528156857607,314.1352537677842 +2023-08-02 11:36:22.208527,YSILU096,0.1789217301620447,103.97149544044234,2270.288874802661,23.535179188848712,267.2482010503534 +2023-08-02 11:36:22.710655,HA4N1DU7,0.45288705618690495,103.46864937739343,1653.5142116746513,22.402188706864344,155.54953479520316 +2023-08-02 11:45:33.578045,COIWZYQJ,2.189534051029752,103.92865144568835,435.9500680552428,262.6335318439691,190.99577664774975 +2023-08-02 11:45:34.080456,Y3695FCW,1.7351083208393085,103.64446533320559,392.82631599161095,439.2203745088758,197.89564881627155 +2023-08-02 11:45:34.582048,D93E7YLV,1.050776354697582,104.16740438282106,239.3881739598908,574.375549829722,141.4401406896016 +2023-08-02 11:45:35.084206,HLS1D9M0,1.3939944877516979,104.02920822934996,457.25614018023634,76.36290845448434,113.62785480943518 +2023-08-02 11:45:35.586433,A7UGXBW8,1.9404468394641126,104.3036393639024,659.817027842468,37.19299200361563,131.57543367360157 +2023-08-02 11:45:36.088608,AC0BMS23,1.1676812067068991,104.93527517062726,817.366795266083,17.12720085849997,187.61062360373174 +2023-08-02 11:45:36.590740,PF402RDM,0.7554094500335633,105.30113859693256,790.6350283509373,17.328858995142447,10.50616660961714 +2023-08-02 11:45:37.092875,X6EP5CQ4,1.089540464070414,106.15800809197448,1325.5575850485423,31.13850610236882,167.22846147814926 +2023-08-02 11:45:37.595013,6X19H83Y,1.2965828232992216,106.08298944717042,652.8648410914451,35.154239438119454,150.90924863100105 +2023-08-02 11:45:38.097047,G4TDJWXP,0.9078480721796343,106.41513264145215,566.1173722614976,60.29714830750311,88.56062969321613 +2023-08-02 11:45:38.599128,DW5AEFJC,1.3461362211657824,106.46112239830313,788.8188720281391,89.77806148602266,303.22573563976107 +2023-08-02 11:45:39.101119,2HS9M4E7,1.255775017906249,107.34597766622763,995.4548843060069,154.95158272051992,327.53929467560397 +2023-08-02 11:45:39.578158,G152Q0Y8,1.1437569749565906,106.66560001359268,520.2112595644988,278.5849246849541,147.9689755378198 +2023-08-02 11:45:40.080270,PHF8VSN7,0.5864267672031938,106.92242389600456,416.6559866918267,254.86672431972207,300.8714554557778 +2023-08-02 11:45:40.582285,UZ93EFTI,1.1673772589951275,107.210985690172,268.9708629785396,234.53887037912654,246.58704224327357 +2023-08-02 11:45:41.084105,XQTJO8GL,0.17275608039753654,107.83624617302273,354.53092805008595,114.38675444791198,45.97899900037339 +2023-08-02 11:45:41.585989,3GV5LSDF,-0.14032083379413685,107.85032184253247,300.61131477996054,5.021344875943839,252.15320927046977 +2023-08-02 11:45:42.087953,P243GHXR,-0.28067266024486504,107.90549681872382,314.4317629256324,1.6309190440221402,25.318895966156788 +2023-08-02 11:45:42.590021,QHNDBLY5,-0.8732507674698877,108.09834861708282,241.97878660786031,1.2549209543383506,334.80199990052404 +2023-08-02 11:45:45.236114,4WDJ9OKQ,1.1793361125873383,104.02734926499608,1514.4929427060306,206.5113502251249,30.007012376061873 +2023-08-02 11:45:45.739175,K1IXV2OM,0.4358087424835,103.62784699455065,2620.239835007076,224.99207965598623,133.39821789080418 +2023-08-02 11:45:46.241302,6DSVQW4Y,-0.08888120971486768,103.14812943869568,2773.893473589186,273.64545265489585,310.040044757533 +2023-08-02 11:45:46.743267,WFHI7UQ1,0.2744036346047811,102.73116161127442,5048.394301300845,378.41119732480803,85.19904013032226 +2023-08-02 11:45:47.245304,25VW9AY3,-0.47358320775105534,103.63387471657356,1198.3866650202108,575.4377267329946,195.14658203109258 +2023-08-02 11:45:47.747418,8EFYP60H,0.18453578091182776,103.45955774569195,582.2077952668427,1037.4053642645858,12.649969791419835 +2023-08-02 11:45:48.249472,TNZX2YRK,0.1464086902757471,102.62850826075328,11.658961298362101,2057.310347831269,65.41384691452696 +2023-08-02 11:45:48.751632,BCR0S2HV,-0.21173669712902954,102.68213996811419,20.95539769556174,3285.4911195569166,223.03589570558648 +2023-08-02 11:46:14.152267,B3PVA6JH,0.8785366689888596,103.47842424051906,3611.396038961101,141.92366118567398,228.25005716334522 +2023-08-02 11:46:14.654406,04NASQLH,1.268777957262688,103.01542179487456,452.02488708288183,157.37359716077736,196.65242431093156 +2023-08-02 11:46:15.156496,EOQCM3HZ,0.9948864523364023,103.04253231832317,366.40351216613107,217.56792361279665,299.40915865345164 +2023-08-02 11:46:15.658649,8JU0CNW2,0.013732132253641893,103.24965003354676,74.84694971053574,358.4618948930494,225.7649301540756 +2023-08-02 11:46:16.160655,7PHA8JV2,-0.7140107973634211,102.3720682435079,84.05708587268337,232.14947644950988,303.805513590645 +2023-08-02 11:46:16.662825,9EJQTVLP,-0.3729156868429955,103.22673527572323,106.3410577313909,340.90389519509006,221.46468662603752 +2023-08-02 11:46:17.164948,7MDOHXCQ,0.10737916248404433,103.54309830502037,150.1925408283114,621.5194970375444,233.61805523640675 +2023-08-02 11:46:17.667139,IPQC7OKG,0.9654961648106817,102.6659064301561,237.40984102260444,758.4194060315066,126.52436614033286 +2023-08-02 11:46:20.388212,6HE28XRB,1.771755617043089,104.129007518536,253.83185500158652,134.41094430439534,97.95118230062344 +2023-08-02 11:46:20.890339,P9T4EFK5,2.4248457075305376,103.61465557485843,418.1361298282776,116.92719974633529,335.688629784291 +2023-08-02 11:46:21.392439,AUEM0LHC,2.468322753063191,102.97357184924348,548.8402956585546,141.73730859359245,99.89787396852569 +2023-08-02 11:46:21.894513,FYRP5LAQ,3.137381758322966,103.8510293160533,575.2169731617099,145.53964899192212,105.11680501041492 +2023-08-02 11:46:38.242370,WRBTQ3PY,0.9334250531635309,104.25107427350066,4471.070939488759,16.315205028301975,108.79215732063109 +2023-08-02 11:46:38.744579,1HAJMS87,1.0501323998924286,105.13673408920566,1049.6405344004734,31.27594695191688,86.65825523884831 +2023-08-02 11:46:39.246651,H63ORJB1,0.9105260887854942,104.91831205234104,1987.3348657787913,11.109551848775421,286.8620662338401 +2023-08-02 11:46:39.748766,2DN54XLA,0.6828400046981138,103.98374934180106,162.04513230289785,18.55128805227482,79.7463410910184 +2023-08-02 11:46:40.250884,9KI2UJZG,1.5741522365817286,103.93810020049094,149.87412932118391,20.05573815181486,64.6297309252277 +2023-08-02 11:46:40.753097,TMN86HAD,2.251809138830439,104.00973759168242,113.80553575755462,0.8681960845338601,231.697228100786 +2023-08-02 11:46:41.255162,4X6GMNAW,1.725524066685984,104.45718280262845,81.27155768072647,1.622300815304409,16.123276070021973 +2023-08-02 11:46:41.757214,EK9AC6G3,1.4991712688273735,103.62228783782376,102.32732536622177,3.241882180737812,240.23458776832948 +2023-08-02 11:46:42.259341,JPSKN856,2.377950663782019,104.41364269618059,164.44711796300933,5.199534792679293,263.784736889841 +2023-08-02 11:46:42.761377,VOXPDUCT,2.7225594408181784,104.84234357367208,279.7557187727134,1.65823992892867,257.8151448875208 +2023-08-02 11:46:43.263505,OZ92FRAK,1.9548900853500273,104.11027192216655,478.50440865182,1.7140857576560573,103.76924436792422 +2023-08-02 11:46:43.765733,XPHOJ46A,2.685415476233314,103.52792792329188,923.9464464926159,2.0331079133059315,260.9094241425348 +2023-08-02 11:46:44.242854,2309MDZS,2.475594162867747,104.43244784998869,84.85519224327811,0.24369245238199833,207.56623746124342 +2023-08-02 11:46:44.744938,6NDVQ3TA,1.6826154133664362,104.23486346140864,94.95676324255638,0.11273802247113149,309.89125432225455 +2023-08-02 11:46:45.247031,9GSJOFUA,1.0957518430276632,104.9469157836463,91.61821708779657,0.2050794221665647,229.4360848231895 +2023-08-02 11:46:45.749085,YQBTZOXN,0.5998059868529035,104.619607459843,97.78930071593338,0.017683158303330754,8.793930778541721 +2023-08-02 11:46:46.251072,2ZVOGDEP,-0.0689725470253999,103.87226862245974,140.97177605370604,0.010394206826100255,253.57229495569112 +2023-08-02 11:46:46.753247,RTSXV9YD,0.2655016144598168,103.01594366889168,208.48655963082837,0.012698635787964822,281.97901106628365 +2023-08-02 11:46:47.255389,DHEWFSBR,1.0987228009671621,102.7566207211764,140.3679164765346,0.021391617360758897,331.59020580715486 +2023-08-02 11:46:47.757500,7L4ZN6Q3,0.19802747011886512,103.6799355405598,95.63724034245189,0.018222496769090626,50.4307598503554 +2023-08-02 11:46:48.259621,C3SGT5WY,-0.14192730362230233,104.01781306628375,77.96915609454558,0.007646722981081662,94.7344411717745 +2023-08-02 11:46:48.761806,BW0CNMAU,-0.30278972612437083,103.07998477406609,49.02261199680597,0.003045212847741433,25.580659838995757 +2023-08-02 11:46:49.263983,4WR90LMN,0.42270959142980913,103.79280310120272,60.464998327665214,0.005714266929842762,102.72061110048709 +2023-08-02 11:47:00.907443,XG213CLW,1.0684580044370746,104.38508288243739,940.6311619996472,202.33946318864793,52.59253072444145 +2023-08-02 11:47:01.409675,LWY4OM13,1.0111537091424663,105.06015296313782,1091.9770222658608,29.01781789172682,23.725697153378462 +2023-08-02 11:47:01.911762,U4GYXQEA,0.914585375501684,104.24304651416253,1397.965366603934,22.514950821004703,235.53603245502447 +2023-08-02 11:47:02.413928,21ZXEF0G,0.9228846349986648,104.00877167737288,8.928956005652026,36.80064975318778,326.6145112109476 +2023-08-02 11:47:02.916084,KPWSJYQI,1.1145259383724786,104.92915402329828,9.631164516997044,15.606319761692802,12.482851330168444 +2023-08-02 11:47:03.418098,9ROVXWYT,0.36955990755075163,104.60589823344739,12.98870580956019,30.63639249466316,96.93574982992027 +2023-08-02 11:47:03.920139,68BDKYX4,0.2822614385608755,105.01308390554625,6.985275968395997,1.8678329902030413,20.467329404778525 +2023-08-02 11:47:04.422209,HYUI68RM,0.956642616651296,105.85706930343784,12.65295483136881,1.5034753657248727,342.9385488013229 +2023-08-02 11:47:04.924247,0NTFROW3,0.09329323740000572,106.64780358146953,12.764678978933377,0.5916806310522025,198.02408420660618 +2023-08-02 11:47:05.426117,FR7BKXCD,-0.14296831951542477,107.1920074053766,21.828284537353337,0.030860416683131664,241.22506533403092 +2023-08-02 11:47:05.928153,4LXKD7OU,-0.7166003296781565,107.25959066240678,24.289600741474295,0.03349567120365813,39.40465919934229 +2023-08-02 11:47:06.430191,CTZHINW5,-0.941919541509449,107.15457784164586,6.1887355665861925,0.016813266852452186,165.94880247703406 +2023-08-02 11:47:06.907144,QEHVSDKP,-0.6769165991467638,106.51092149586776,3.718616230963957,0.030706286972991513,168.21760524161618 +2023-08-02 11:47:07.409169,IHSGVK9B,-0.6090148816027574,106.61220508059841,6.4985753051216,0.008596599039905166,9.585759308983143 +2023-08-02 11:47:07.911262,NEHC8OPU,-0.018419302120933123,106.51758179899738,5.216757146119443,0.0032407406124051004,191.12036700136287 +2023-08-02 11:47:08.413392,3HQRAIK9,0.4652434583901641,107.09182363228416,5.816353748623804,0.005406616815185047,158.94433643549246 +2023-08-02 11:47:08.915458,G7FZLXNA,1.2707537540683815,107.14157417777938,9.710629408142621,0.0003236368877366476,217.69730843868663 +2023-08-02 11:47:09.417612,LAXZTHJD,0.8075439571343495,106.35026140443178,3.095710854129706,0.0006408404374567283,38.08613810169783 +2023-08-02 11:47:09.919700,HC3EKS2G,0.08428036753673696,107.25694932770585,4.779247902010276,0.0009097735779533023,245.43120661546732 +2023-08-02 11:47:10.421773,8LGVFSNX,-0.4591674384936886,106.59578602369866,5.524927038266316,0.001648968184203615,92.15699075149689 +2023-08-02 11:47:10.923860,NEIQOSWJ,-0.7443174354634849,105.88422488446142,4.822219923332032,0.0028605318659050936,279.4664178955562 +2023-08-02 11:47:11.425981,OM1ZHGXU,-0.14310783053049847,104.96921535318263,8.985016402533699,0.002706981388674052,58.92706645666976 +2023-08-02 11:47:11.928089,EHI6QB5T,0.1997607942696975,105.78145161981006,8.734751163512268,0.002804539134259937,62.989482657384045 +2023-08-02 11:47:12.430168,FGPQ30YZ,-0.3181700179215172,106.602850060514,16.715314360203504,9.996502859066113e-05,74.65417312928697 +2023-08-02 11:47:12.932189,IGQ50VY4,-0.3078557781003446,106.93670397303464,8.008616446400518,0.00016051072902370067,269.0037800946304 +2023-08-02 11:47:13.409239,ZPUBKG1H,-1.0473810360181752,107.02772332135775,2.6844766392063626,0.0002512625513542297,10.123986432195352 +2023-08-02 11:47:13.911329,08CHJFVK,-0.773494525457503,107.85585609819209,0.745337519212619,0.00043808751071886643,126.32774509212427 +2023-08-02 11:47:14.413359,36812WXM,-0.9900049038060628,107.76217432670568,0.020290019194790232,0.0005527427024097723,340.9538455357332 +2023-08-02 11:47:14.915532,VI465SZG,-1.697263830292269,107.15463861641182,0.005997831377218132,3.8788918950486014e-05,249.89325060437636 +2023-08-02 11:47:15.417652,CHBY7KWE,-2.293793901383859,107.63081065312682,0.006877322057226386,1.91628721270662e-05,332.4123638257537 +2023-08-02 11:47:15.919740,K8A9I2HE,-2.241733356768875,107.48221415214654,0.012176855000197736,1.3245290607756698e-05,207.77861958588028 +2023-08-02 11:47:16.421829,MB7OJAHK,-3.041899858259156,106.99470884497818,0.017967182003386907,5.558255605726792e-06,268.37066906246963 +2023-08-02 11:47:16.923901,R5TJY78G,-2.7299369389345327,107.7424869556556,0.02586476164235405,1.0915834016909853e-05,180.6813513753034 +2023-08-02 11:47:17.425969,8ZYI4C5K,-2.9713609749437486,107.75952277677192,0.04477103905363189,1.0001450929218153e-05,155.48715678704605 +2023-08-02 11:47:17.928055,BNHW1SQK,-2.2789583231782418,107.66447856054491,0.07898190499558112,1.3971840434049854e-05,68.01386036540077 +2023-08-02 11:47:18.430085,7LP9O2Q6,-2.6177463887257275,106.80702985242277,0.1212018921952932,1.7962267479105232e-05,142.91641243060602 +2023-08-02 11:55:50.504389,7NT4FPH1,0.9749950332515209,104.61389557373185,5472.471676077667,115.28670897691434,226.71725483304888 +2023-08-02 11:55:51.007805,KTC0UV36,1.6552569256779301,104.6535948061598,8836.562522223758,30.6618563886947,163.40983916306266 +2023-08-02 11:55:51.510045,HL42N59S,2.4251747078492834,104.79413088907386,152.04493243035904,40.158457635812766,352.1278676265488 +2023-08-02 11:55:52.012300,CKSU3IQM,1.9247937696642055,105.20117153008655,82.42187546956278,55.61728850575987,207.76624465056352 +2023-08-02 11:56:12.319146,93NS7UIZ,1.2517557809711364,103.68146084461651,9452.000092958655,101.36054923146058,121.71531066397992 +2023-08-02 11:56:12.822409,829ECHYS,1.4772579554920566,103.10338844721363,16451.54727557961,95.51811534910293,38.73944203352812 +2023-08-02 11:56:13.324699,FWR2ZQPK,1.4859274236278441,103.97765379059211,23444.944179368267,188.92556465529057,107.48873968560457 +2023-08-02 11:56:13.826840,LY89S3OC,1.086371403876043,104.69871354025236,365.83336041466464,213.70716695764105,255.132294131395 +2023-08-02 11:56:14.328519,C8M7SOA5,1.795247860819947,105.12499562454596,550.589501554867,199.38416595705988,221.68413266839002 +2023-08-02 11:56:14.830226,QGEV12XU,1.474181250706683,105.48758711903639,338.3741079883782,197.48213335745083,298.0890817243059 +2023-08-02 11:56:15.332404,XJ471HPF,1.2901776119058017,105.19350138516116,256.28627733806854,361.4747036356434,1.7092359093029472 +2023-08-02 11:56:15.834609,CAPIZXKS,0.8162249351904451,104.51952922015572,33.3262742776935,469.72111568496524,289.30597016175085 +2023-08-02 11:56:21.526371,12G5JXTR,1.0704043196803457,104.80944178620112,7521.8694737396545,212.62096162341365,204.03664689734265 +2023-08-02 11:56:22.029729,I7DH3B92,0.14509068395371028,104.89521938061489,9.534549931697256,26.867865072283195,33.09763492828654 +2023-08-02 11:56:22.532035,EIAS963V,-0.26468098869825885,104.04225386686183,8.670713918840768,18.942684907289227,309.2459970207728 +2023-08-02 11:56:23.033800,H4WFN1B9,-0.14613249829857677,104.43267647713665,0.6731357424357336,9.914516148094116,290.2231770414227 +2023-08-02 11:56:23.535832,P16BDK7I,0.18401088098620777,104.64267545716845,0.9501868508739725,18.962798776864304,275.76299386759047 +2023-08-02 11:58:01.108235,4TZ8EXLF,0.8494156414939047,104.50261847557485,7344.373521209788,34.25920195367462,282.653295997006 +2023-08-02 11:58:01.610723,X0YLZOSP,-0.12013759359820542,105.33733490917001,11266.91737525547,61.67731638347634,57.92585546368991 +2023-08-02 11:58:04.450020,P2NR1IXB,0.4477029367348315,104.42022137175249,8742.24043533005,219.7914990464657,207.00736570048812 +2023-08-02 11:58:04.953309,MHCYVEAO,-0.5248723818507395,105.08247395580688,12442.76562566802,239.53324134902405,124.90525727544673 +2023-08-02 11:58:05.455747,A5VITRL6,-1.4302713960306461,104.27024967439736,10561.125926564908,326.42515310376757,29.83472699422191 +2023-08-02 11:58:28.302704,UGH3JSZQ,1.1654467718540027,103.39699168467158,10016.363349283925,62.01733851300992,151.49964052212164 +2023-08-02 11:58:28.805428,RS9EQVTU,1.3850923086109657,104.23058906878752,2576.3670649221995,117.2326877117104,217.43740017216885 +2023-08-02 11:58:29.307667,FVMZRP5W,1.6437348643119387,103.46774855609756,1943.4715030102882,225.0954422684136,112.45534087324461 +2023-08-02 11:58:40.469492,UCLYHXGW,0.41018535225990505,102.99977744083189,1339.727260358516,58.51799566932573,334.4247255783281 +2023-08-02 11:58:40.972457,KIDTYL3R,1.0962336310453955,102.1699857385219,1510.3584281922585,31.44787446493779,247.42992540082946 +2023-08-02 11:58:41.474599,YOAP2U3D,0.6329425209418891,102.73902910420215,1971.1357900410273,50.790771853571,309.5841804931094 +2023-08-02 11:58:41.976685,5Q7DO0Z2,0.8910377490122026,102.34078867043269,1924.002199806957,92.91427631877715,102.27039566088047 +2023-08-02 11:58:42.478657,T6S0YW7I,0.047825825016251544,102.80139207906599,1877.4245105984203,181.43604065712802,201.05645370031772 +2023-08-02 11:58:42.980813,LMGH7865,0.9379173636684415,102.05306109385033,2777.985459867226,334.8139755342166,37.338800961204925 +2023-08-02 11:58:43.482765,MACQ0ER8,1.0445082037774465,102.62681743856959,1498.0494669825532,379.9405899891958,164.0272446332442 +2023-08-02 11:58:43.984685,XR3JK8N5,1.9773609095021414,102.17542913035554,1187.2580651998437,89.96152258396876,136.14809110158086 +2023-08-02 11:58:50.203673,LD74RJ1M,0.9380777986980837,104.53110486306544,7593.704154790347,210.48305570242442,139.82468698015364 +2023-08-02 11:58:50.706077,A1UQGD6X,1.6707710270188545,104.75735529196758,13527.0524398158,47.95610510613966,62.54531155145776 +2023-08-02 11:58:51.208215,3GC86T07,1.2944454153953364,105.13607783084116,24009.826635060177,6.233128479029979,146.23813341670498 +2023-08-02 11:58:51.710367,5HVO7SW3,1.7973075853274105,105.47802525077802,29325.205391264662,3.5816760612610112,81.13967000152661 +2023-08-02 11:58:52.212272,Z5W7FQU6,1.2313414715930346,104.86241866310665,48224.599474623894,0.8735657499300147,234.42443829954908 +2023-08-02 12:01:25.432251,ZWA2R1J7,0.906526075043969,103.17299378049432,1768.8414370527712,175.82496216617403,182.6157251979444 +2023-08-02 12:01:25.934751,3UMFX92A,1.8436410446387033,103.59563537255625,2405.9045547389583,39.536195645170665,21.749979046973863 +2023-08-02 12:01:26.437000,6OQW59YZ,1.9245744458457428,103.59153111853954,1961.6448643871345,34.89899435104318,133.55361657443365 +2023-08-02 12:01:26.939137,XDRIQAW1,1.7917159456136327,104.10399657376159,2040.2969982568886,46.8971909923643,252.60591755470503 +2023-08-02 12:01:27.441283,YCZV21AK,2.033884164137014,103.53519480082895,3257.050247956517,69.66737282837528,218.9436603021369 +2023-08-02 12:01:27.943465,GWZ71L0I,1.885402036731607,103.1030609417406,4577.373367057944,51.0765669161044,282.9973800765501 +2023-08-02 12:01:28.445565,3V1KTAQ6,1.4058184707691845,103.53610223352683,149.0532633870398,76.26396180694394,334.68242087005194 +2023-08-02 12:01:28.947651,2WR398CB,1.264914542365858,102.85227489616483,128.49257105060258,35.54589570314239,153.25134526149895 +2023-08-02 12:01:29.449739,JQX13L5H,0.6990450894108537,101.92438044216978,97.98482514404621,41.39291570399096,207.46538548630065 +2023-08-02 12:01:29.951820,IBR7SDZU,0.3559783288698779,101.70313332265928,111.13380426124154,42.05586481279865,187.76019997562855 +2023-08-02 12:01:30.453978,N8KTPJH7,-0.24116511480029157,100.79162040140372,53.26775937821541,77.26682507588045,299.8649716003378 +2023-08-02 12:01:30.930825,CHL8RPE7,-0.06962159705565196,100.4323065426364,41.96445556482126,50.57181518264248,215.5582018760099 +2023-08-02 12:01:31.432863,AO6HV5T8,-0.480779500328089,99.49259792782267,63.28050369366691,33.2627974530426,85.20450078689407 +2023-08-02 12:01:31.934683,EWQ5U48Z,-0.7887371341268588,100.25902370919344,64.22164885305887,25.635362836901194,293.03874224236995 +2023-08-02 12:01:32.436609,2LRSKY6F,-1.696671258764405,100.34080162483673,80.90713003271412,48.3687134101666,70.89905552503666 +2023-08-02 12:01:32.938631,6JNRHMBG,-0.9788400010531328,99.58843704196633,75.05889909384923,72.26956077825243,129.3494892479289 +2023-08-02 12:01:33.440342,MZ0IBJ82,-0.6782086674473831,98.71490309513374,82.23290879750725,116.98548719604807,210.05325529161348 +2023-08-02 12:01:33.942400,JK3RCB5Y,-1.3519036983031105,97.91728790703215,116.19729325577748,225.8308296042013,197.78211686910254 +2023-08-02 12:01:34.444378,B24S0GRO,-1.2154760297413711,98.8164458531594,52.974655617669896,370.01001298066484,221.29918347249432 +2023-08-02 12:01:34.946517,RWOZQUSA,-1.4677706871421612,98.8796186722846,96.58757422822114,465.86420704563307,221.98853623864508 +2023-08-02 12:01:35.448591,QAM3L748,-1.8383853904699547,98.74716081587684,25.927806581888433,87.42795967877129,109.27659940694292 +2023-08-02 12:01:35.950578,HSZOT0WP,-0.9380709663054185,98.64271790491826,15.416576777686448,138.25766937316087,325.40749110205564 +2023-08-02 12:01:36.452573,H3KZ7B2Y,-1.5580262672786391,98.49089600006599,24.56824136238975,268.61303036752145,59.58788643496683 +2023-08-02 12:01:36.954543,ZVT8PY67,-2.1048689766467423,98.1369891140811,43.06905484611301,22.50653779689577,195.1763174368587 +2023-08-02 12:01:37.431587,H13EPS5O,-2.5062847050254335,97.77397129767988,57.98975443369486,17.5196478385024,172.19529606311653 +2023-08-02 12:01:37.933681,VIF37X8S,-1.8960418475050047,98.45557484336783,58.89503673623084,17.270243455556102,221.87156071969213 +2023-08-02 12:01:38.435732,Z01QFCKA,-1.2238816736904699,98.44860085779723,51.20301439564659,32.04918162883934,223.15371827170992 +2023-08-02 12:01:38.937795,I0WM5SAV,-1.079929734720591,97.7340614169293,46.15407031567734,9.738234851195877,55.13585630927696 +2023-08-02 12:01:39.439942,GVK6DIAT,-0.24018938300413528,98.62027858925694,70.9867000648027,15.665406706814442,116.87024078697814 +2023-08-02 12:01:39.941946,AEKDWXH0,-0.19679871967683682,97.7712074179842,118.73259023350097,16.179958968522584,254.28850674102733 +2023-08-02 12:01:40.443841,GW5OKA7B,0.12195804926914855,98.70785266048156,75.35373591352659,21.48117450149628,29.54670656046892 +2023-08-02 12:01:40.945990,H9DF2OQ5,-0.032323598440198165,99.21407384150876,88.97272400798076,28.89053068096665,82.09039061963497 +2023-08-02 12:01:41.448038,FNW9YO64,-0.38526030042784765,99.58427070648578,86.60490575349918,26.811442424493478,292.9627565804939 +2023-08-02 12:01:41.950153,6MRI0YUC,0.5236684371126488,100.0374434211395,55.27734150378572,11.847129958606855,219.32757386974185 +2023-08-02 12:01:42.452089,HQ3ED5A8,0.0817473754607132,100.43460501019995,66.23526023258674,21.608129258281192,264.05778464338573 +2023-08-02 12:01:42.954155,DAECTXLR,0.3611752793077341,100.28496006511885,23.29505329976805,16.890342003580905,31.375348466488617 +2023-08-02 12:01:45.818244,49S1VBH7,1.4079299174781434,104.14886451923176,9202.850450370599,108.69995210177522,177.2216362706162 +2023-08-02 12:01:46.320497,NSHPO7VF,0.96626141889535,104.00008405847893,14765.429812205764,69.4656128761917,357.3919259665777 +2023-08-02 12:01:46.822669,J9GTDEUY,1.8394280051203022,104.4182501029899,11194.067597340112,138.4010556086551,53.94627924844201 +2023-08-02 12:01:47.324801,NAKD42TU,1.5172004774353727,104.93349046247857,1654.9279246316928,243.5566796998519,232.2617307272068 +2023-08-02 12:01:47.826842,1Y5HODPI,1.358688120495376,104.17988343024672,2499.029288361751,90.30932542470353,223.29079772571265 +2023-08-02 12:01:48.328895,NK7F236S,2.358183531375561,104.83021748231906,4412.442499590906,66.50999224907925,101.2251279785142 +2023-08-02 12:01:48.831039,B1FQ8MJ7,2.0500928235720295,104.73481218170056,611.724385502499,11.261643831996516,170.6411262529324 +2023-08-02 12:01:49.333263,0CWGEB1M,1.6181986638352879,104.23739845508393,871.6045862685763,22.40226085108454,136.36808476076783 +2023-08-02 12:01:49.835408,HL0TF38R,1.4702118098063184,105.15246990753845,591.7309663413323,33.622774999432224,142.28209562259664 +2023-08-02 12:01:50.337289,E06Z7YPM,0.8750442514436303,104.42665037552797,904.099462309407,22.15407738219008,329.391683038991 +2023-08-02 12:01:50.839242,AV18JQ2S,0.47733293501110685,104.50702512725685,314.82130544878237,23.264164980277954,349.1633375652959 +2023-08-02 12:01:51.316113,HLN9PJGT,0.5443472957622768,104.57088498903549,378.61598682149224,45.84681883311012,293.0222441711783 +2023-08-02 12:01:51.818133,5TVXLYQ2,1.3782880072333283,105.4474834086773,371.6668286557855,45.45113583867221,48.81398181119556 +2023-08-02 12:01:52.320181,2WLG0I8O,0.996121371276691,106.44575592858531,659.5829288863073,5.9713783487621654,335.81487594373993 +2023-08-02 12:01:52.822136,0OVG5RC8,1.6017361872350895,106.67633238263384,1172.2142501881838,1.4989155394009588,203.58207628468745 +2023-08-02 12:01:53.324095,7503NLFU,2.4815495764031787,106.35598658005667,326.46586971441,2.5497053011302535,279.9003369619136 +2023-08-02 12:01:53.826138,2IEBY6JR,2.6556886435443925,106.59759640051357,376.9785456807627,0.7838979538184714,248.94396377260432 +2023-08-02 12:01:54.328294,DY93XBT6,3.086768404895655,105.8610967524801,7.709444234815578,0.4095268613108477,231.68289738376257 +2023-08-02 12:01:54.829957,V172RUGC,2.168729438334528,105.7229735283318,11.622176596631162,0.460583949032358,96.8729534012532 +2023-08-02 12:01:55.331668,GXTAB8RC,1.4335470473409675,105.03549707497328,16.76211173381155,0.5432174145695519,292.0309106570195 +2023-08-02 12:01:55.833588,NS053GIZ,0.6351673286534276,105.24358589869249,13.569555384587325,0.47962580006586036,240.80419425156015 +2023-08-02 12:01:56.335734,TVBOQ90U,-0.11377069611912694,105.0250849618839,12.035330360194935,0.6258666405038296,7.506710595870743 +2023-08-02 12:01:56.837843,G3R7YCDN,-0.5679547819799935,104.77914844065056,17.082133215428886,0.693854365583545,322.60039447049405 +2023-08-02 12:01:57.339956,87PCAYM2,-1.035375307479556,105.60429230588935,32.95715971139909,1.1534033016598084,52.68032059055912 +2023-08-02 12:01:57.816979,8UXW30DN,-1.2083884416381376,106.13016233595003,45.549658188579706,2.168463117433112,341.5442019284155 +2023-08-02 12:01:58.318840,S5RGAFQT,-1.6751087833464393,106.05525507519079,56.46343158150936,3.349842365928938,111.6649187662731 +2023-08-02 12:01:58.820588,VXM3B1TJ,-1.736523703268661,105.15734591312918,22.786707635000134,3.6913395670802345,186.90915122730541 +2023-08-02 12:02:25.060307,PV5LA2NS,0.874918701618489,104.7654405983974,7109.220397230558,176.26892435004447,184.28639865276938 +2023-08-02 12:02:25.563423,U32W8V1P,1.8012136549372786,104.90354363890535,2867.0525029663513,322.6915603179393,327.0686865524993 +2023-08-02 12:02:26.065594,6VZGNP9B,2.7236542923860485,104.37635669220673,3850.4293185511947,396.4817189586004,18.857763067991527 +2023-08-02 12:02:29.571949,FMCOPJIH,1.5307243215423336,102.84766312610225,8129.7867299862655,86.51001858039868,280.9604725840433 +2023-08-02 12:02:30.074169,KYVM5Q3G,2.3794559057618168,102.65914352746431,5558.772435018413,163.5041134269147,65.9839867346945 +2023-08-02 12:02:30.576291,3I7XCJ2B,1.5041189328531113,103.54171408755747,766.0840233289528,21.899901838895204,99.44175066758852 +2023-08-02 12:02:31.078318,J34A02OV,0.541156132760171,103.53686507821268,1448.0447533088127,15.178915000083418,46.312077629534826 +2023-08-02 12:02:31.580487,3ARTYJI8,0.8661725752986917,103.39008793042856,2272.870005144703,2.209199333952652,12.159629136475303 +2023-08-02 12:02:32.082715,S6NVWLOD,1.6838275774248381,103.77768215486007,1851.2697245460465,0.7896132260217921,253.14319734951442 +2023-08-02 12:02:32.584926,DREWCQUH,2.56836607472934,103.74549553901836,2323.0792947482746,1.1628212502192332,136.48673381847436 +2023-08-02 12:02:33.087083,Q98PDXSV,3.4949414836610715,103.25092028271155,4578.557752430669,1.074487351328775,9.696815255057572 +2023-08-02 12:02:33.588997,FPGJB015,3.809268364241331,102.31277687021505,1600.1493657180972,1.5954976232332478,270.9594368788763 +2023-08-02 12:02:34.091139,DSX2IK41,3.7322967971382868,102.80945979949767,659.0477713077972,2.6626257129611655,223.09994059467226 +2023-08-02 12:02:34.593354,0L9WUH1G,3.3270094519169127,102.89483431891675,814.763239734698,4.096418168495234,320.79758541082754 +2023-08-02 12:02:35.095576,1KU5ECOY,4.1830513869130455,103.05993868740009,1256.999236341683,0.9322936079204256,321.1217991177369 +2023-08-02 12:02:35.572671,F7NAPXDJ,3.2171260143447524,102.39766878813563,2211.543741309954,1.8458868665457622,194.0192555095465 +2023-08-02 12:02:36.074794,6WSFHK0D,2.78863451638596,102.43967904943366,56.54981422525134,1.0462064826227753,254.2793078157934 +2023-08-02 12:02:36.576940,CXPETOWQ,2.942031426021857,102.19719109635527,87.19022373968978,1.331298840510114,303.54420083928557 +2023-08-02 12:02:37.078903,KJXI34EG,2.9687089672964975,101.23356092494593,7.114944674466358,0.8167867003657043,11.39886984495024 +2023-08-02 12:02:37.580814,KXUCYM2D,3.887613657924355,101.44149244370396,13.123818438718457,0.08712295889215826,228.50145702483093 +2023-08-02 12:02:38.083016,U7S1O89K,2.9925374293383364,101.16577588095859,16.262899704408465,0.1138770811017098,345.829144511448 +2023-08-02 12:02:38.584954,3FVYHUSJ,3.198804827333388,102.08618654085943,17.991261642006368,0.22347218364053179,150.3613870124035 +2023-08-02 12:02:39.087117,J7DQHMGZ,4.087102004340589,102.19152482994208,28.02451556499737,0.2844048339883925,353.42789362956836 +2023-08-02 12:02:39.589186,K2WPE8GZ,4.293445915087014,101.82549510487351,38.78111906894335,0.10972229843471806,103.16006898713454 +2023-08-02 12:02:40.091172,J8YWARZK,4.698966359353122,102.35026287048848,45.13777984980821,0.07436655684658584,326.8811209372782 +2023-08-02 12:02:40.593295,O37AFRXW,5.285884248482244,102.71473410029549,87.94770572296109,0.115350898221356,219.37677357432221 +2023-08-02 12:02:41.095209,GMJANRQV,4.737399892359981,102.36699414396223,5.827402659329735,0.22980890088767533,221.2131167474326 +2023-08-02 12:03:07.232077,QY2WPG0M,1.1231961854084782,104.19033402704491,9858.229928006984,95.80944561531899,225.0633033607728 +2023-08-02 12:03:07.734663,T0OZ6K4P,1.3791291073686005,104.66593691239194,11545.284289864197,109.041321497205,236.00921266238626 +2023-08-02 12:03:08.236731,VWXFD9SB,0.5730099831993647,105.52671746223308,12857.19766814543,150.72157777413116,126.54363774143167 +2023-08-02 12:03:08.738805,Z7O0QJXP,0.7917154925190466,105.92209257095308,13659.383557082121,254.2583637346472,35.978931326629265 +2023-08-02 12:03:09.241124,5NOL2MHW,1.3164633139210384,105.38828241281388,2684.0316283374723,52.52870900238233,171.23216423169967 +2023-08-02 12:03:09.743383,2U3ZJGDX,1.4189957210060353,105.5267427005195,3060.660770119609,52.722515003085455,229.50545208412782 +2023-08-02 12:03:10.245576,QR5HW0X1,1.3959996031980657,105.27153537624257,724.4381177465939,4.890947433074949,119.21312898455415 +2023-08-02 12:03:10.747823,I0FMNCTB,0.7200569940807724,105.44588910857645,1316.4713814125528,1.4298302701271224,65.7794897894284 +2023-08-02 12:03:11.249976,GHIX8SUN,0.5889671274077442,105.3146431813531,98.56250846868352,0.2984279414326725,137.76256022827732 +2023-08-02 12:03:11.752151,O65MXQ8T,0.23003799789915025,106.06931050873607,130.66312760060052,0.21755860409670036,271.3369833490476 +2023-08-02 12:03:12.254188,FMLUA639,-0.12449809629675945,105.81142139096927,56.4176936407149,0.11992737272007235,37.25170819339502 +2023-08-02 12:03:12.756299,F6ZRP2TD,0.7347943616606905,105.09443943944967,7.188174580001899,0.15139147413712206,10.287367548086593 +2023-08-02 12:03:13.233389,6DEZJ9WB,-0.2120720442861237,105.98633385923796,6.196555120873926,0.2106135516956378,216.54290424592915 +2023-08-02 12:09:02.076332,60MA9KP3,0.4955849048314387,104.15359335486262,9402.974705863131,125.51861235565903,77.9347639994982 +2023-08-02 12:09:02.579577,IT57OK6F,0.1509955707773032,104.05691434044671,13533.465398987664,225.73559153334986,112.40945650450509 +2023-08-02 12:09:03.081896,92BQEZNC,1.1450734105389537,104.99584411509416,11070.086577879632,323.63901228802115,11.206229357076154 +2023-08-02 12:09:03.583994,XCN4GEJI,0.874883146629797,104.12220351052676,9437.841516119815,445.09023592390105,122.91452372109016 +2023-08-02 12:09:04.086041,9IWSH1Q6,0.07216384247502616,104.22328439414882,14090.882062824501,514.8256455700265,216.0902541123703 +2023-08-02 12:09:04.588149,CLWB26TP,0.6112998684186353,104.11050798424549,20579.47693629592,24.2525059395133,341.8912555190634 +2023-08-02 12:14:13.046429,UBJPHMN8,0.9525429984988425,104.16852262604836,4208.001863641907,81.82217469530613,139.46562296463608 +2023-08-02 12:14:13.549226,OG0N48IL,0.8224592781825053,103.51245348190669,3778.1532834833124,36.8937109093686,36.37042874213455 +2023-08-02 12:14:14.051461,YXA5ES3R,0.685563717612973,102.71528262349388,3094.8510914219605,18.415191723608626,314.0612779826594 +2023-08-02 12:14:52.715857,YTOSXPFE,0.7259129292175726,103.25661523970312,9057.109260696663,66.15952431892842,188.4947716340679 +2023-08-02 12:14:53.219132,GD1UW5TF,1.4739466288282574,104.19654672643831,1967.0529773909511,14.176323675712126,74.25365441336248 +2023-08-02 12:14:53.721437,IC5ANOX0,1.3569325551755238,104.14684809327416,2142.1104533397033,20.031468011409853,107.22808884331137 +2023-08-02 12:14:54.223637,DZEWJP7U,0.5153002750049618,104.00644057892299,26.283951765524307,33.602785506104176,165.29204035632935 +2023-08-02 12:14:54.725809,QZYW690P,0.921532802049565,103.41217214579609,29.604849780330238,43.01021363116584,173.235571123407 +2023-08-02 12:14:55.228007,47PAV6QT,1.7192443091413097,103.94661982892448,5.267436475643329,77.23782823939275,48.15889567473482 +2023-08-02 12:14:55.729978,IMGSO0JC,2.7096073628522674,104.7392645517528,8.132105788505058,113.21981754160356,12.136865746061176 +2023-08-02 12:14:56.231723,GC15V3FT,3.4939864727551737,105.2148404710979,11.645315821368948,51.29478770057006,171.3956544928517 +2023-08-02 12:14:56.733391,J34PLSMC,3.134588888242054,104.34621146007694,3.3075990691144614,27.047342426826017,303.86509327571434 +2023-08-02 12:14:57.235314,6RO3EIAZ,3.2247250994688943,104.37756524688778,4.391816696304246,19.513887809699636,23.665669578028314 +2023-08-02 12:14:57.737319,OZG03KWC,3.9552607595114004,103.68187893445777,2.6646342004210704,11.618470280937888,332.75023869673663 +2023-08-02 13:39:14.179798,YJBD6QWG,2.238419584469166,103.48136317865382,6942.759568839964,167.37680293085802,231.06072568556658 +2023-08-02 13:39:14.682882,IYPZKW8N,2.4296928673561062,104.38305115020749,11802.416926340056,31.139011213145608,119.39508294843756 +2023-08-02 13:39:15.185049,U5PKZ31H,2.9302338053122585,104.5784764732037,16926.214267572053,21.393747636635737,129.97886626013388 +2023-08-02 13:39:15.687438,RSDFZU3W,3.665520017935491,104.61982866089994,1681.3772540979444,15.414854534437888,310.48185447062014 +2023-08-02 13:39:16.189776,OMV9GBXA,3.7006563808450754,104.03944999525618,3087.814308707742,19.94874269849541,198.67352426915932 +2023-08-02 13:39:16.691917,TDFBWEMO,3.17535480036845,104.2940173880717,2176.0162715013917,26.687469729642487,272.54883295194463 +2023-08-02 13:39:17.194211,HRJO6MPA,2.309433526650305,104.88343308519488,669.4569551261752,41.41506180955115,221.26153917518377 +2023-08-02 13:39:17.696454,0A3B5F2R,2.2560791622832,104.57757365180467,1136.4081960506085,62.303687603085194,205.15319793239382 +2023-08-02 13:39:18.198824,TUZ7X2G0,2.8205462898456366,103.62798808728404,2008.546411768063,3.2089149968728634,89.18490129479528 +2023-08-02 13:39:18.701052,YC2AEL15,3.4245804400567073,104.03377485957668,3705.736565897582,1.898228213002038,32.86899288379408 +2023-08-02 13:39:19.202667,2578R0PL,3.4110608028560003,104.15866582984594,2136.733203071739,2.704424028469329,274.8690746844609 +2023-08-02 13:39:19.679553,49HBQMY8,2.448488105345115,103.87159172004857,2383.0589579005564,4.148198456141708,111.79230172147834 +2023-08-02 13:39:20.181325,CSMZTP79,2.1973631392157014,103.60802534288183,3740.4134977469607,1.78511355372062,33.893283697324875 +2023-08-02 13:39:20.683207,B6TJ5LYS,2.196495171730701,104.50954769798746,6448.377603511999,0.5402178281432968,94.53226483903308 +2023-08-02 13:39:21.184917,M96HBUT3,2.7689984269558607,103.72851545311795,3314.78536713254,1.0094123531898727,242.97529629169864 +2023-08-02 13:39:21.686994,4RWZ2FNA,2.6377223395320772,103.02821734807402,5183.833993754334,1.7046101513213048,250.04785919448747 +2023-08-02 13:39:22.188915,826MPGUK,2.835535211185607,103.09441209686854,9572.821274097554,0.716055598591813,226.92063988029724 +2023-08-02 13:39:22.691095,3Q8XK4AJ,1.9491227483800795,104.04927183407052,9320.013863397227,0.6376125067832317,114.33752848692848 +2023-08-02 13:39:23.193306,PH60QRGI,1.5542294708250786,103.22284229916372,3650.6771172525314,1.0596659964951303,331.3032399868722 +2023-08-02 13:39:23.695510,8EMIJXZF,1.7713416812444278,103.31051695277189,2588.1466193885967,1.6952886266004445,62.59671789759284 +2023-08-02 13:39:24.197397,OUPRD8SK,2.0585129802223943,102.49209520332487,4653.969270828213,2.9715479826550864,302.4394748819508 +2023-08-02 13:39:24.699673,8D6ZA321,1.8242572609431331,102.28602652436766,1618.366502534836,1.823908797175276,103.2762336645311 +2023-08-02 13:39:25.201991,3J50BV7Q,1.8370515414560107,101.46545838833786,3017.1439798214838,1.6053603818610889,31.34545686619225 +2023-08-02 13:39:25.679242,FL8A593S,1.8348929752551668,101.80045770959735,1912.7107243406513,0.5196379759676657,159.63079553083384 +2023-08-02 13:39:26.181534,8Z7D5NOR,0.957417246366159,100.99097534537142,381.22578613947326,1.0113271081618225,33.98924822743311 +2023-08-02 13:39:26.683685,V1H2Z7PU,1.7714784206446577,100.9577301892086,321.19422537280366,0.8310050508610834,49.45718720537592 +2023-08-02 13:39:27.185883,5NFX12WM,2.3071012858295283,101.04727106258454,389.94812829498795,1.1391308296852571,183.4633906619909 +2023-08-02 13:39:27.687893,WGSX8Q9U,2.2458908024761115,100.67539142171206,519.2550060499456,0.18667753349443805,311.8151819087034 +2023-08-02 13:39:28.190179,B1YLFEV4,2.2048228954886095,100.0324902398753,769.1584997863979,0.1201027856199121,240.0429170178527 +2023-08-02 13:39:28.692228,7GSKD2H8,1.885645966533735,100.1502273132073,961.0701286099936,0.18675340376520616,11.037433975062584 +2023-08-02 13:39:29.194248,6BQYS0I2,0.9990254651763457,100.19959402597108,1578.4246202349998,0.00953153749259622,137.0900504019075 +2023-08-02 13:39:29.696428,61KVRAOL,1.3924771482810716,100.9584299105227,2818.4472941709296,0.014293371135747666,287.9824311322693 +2023-08-02 13:39:30.198726,M1Z6SIQD,0.9412340910185701,100.63754189585063,4055.8499162928783,0.0036438605405338265,71.42652158918514 +2023-08-02 13:39:30.700997,KIEDAUL3,0.6318543175937024,100.43953084387383,4889.901089746767,0.005403302751597955,178.6011485401623 +2023-08-02 13:39:31.203212,US5YWFGR,0.9599150489245345,100.9534026099247,1140.2809257988965,0.00526885198528645,121.70456780881148 +2023-08-02 13:39:31.680318,61U5O7YZ,0.44961592281257423,101.01225096570232,457.2655605783708,0.008469710727882364,81.70773244469746 +2023-08-02 13:39:32.182450,74DQCH3E,-0.3361401127384316,101.60328146436147,754.4249808816866,0.005724751308516807,8.36940750314534 +2023-08-02 13:39:32.684527,O1GV0K2D,0.21821380811723534,101.85814891752348,433.1239000589016,0.009742001371143135,47.05693982310162 +2023-08-02 13:39:33.186691,PRT2J6AG,-0.6992275053554855,102.1941143615801,521.7210980171519,0.005443543897799229,215.70226740652808 +2023-08-02 13:39:33.688786,FXSVJ9W3,-0.9378387214657369,102.11469135585615,888.9137125753695,0.010555118408868804,277.79453302398423 +2023-08-02 13:39:34.190995,YPJOZNRU,-0.5079926744565584,101.29894134082534,544.9587933756316,0.0185693929875138,197.86468994904612 +2023-08-02 13:39:34.693201,DMO9JW78,-1.493394511074772,100.95554246218911,74.41420004009075,0.021691284794191697,97.40252007845368 +2023-08-02 13:39:35.195454,GARVZ805,-0.6938949044985232,101.40621042415846,7.970342006194798,0.009041696984617993,32.210244248436254 +2023-08-02 13:39:35.697811,ZW612EGQ,-0.0010762694562311825,100.78193317552974,7.678002092368294,0.006125027787415265,31.547673670838037 +2023-08-02 13:39:36.200123,LDS8UK2O,-0.7301438870923935,100.57152379290974,1.6232159555529808,0.011096194939088335,26.001384348665624 +2023-08-02 13:39:36.702393,0XY7S6PJ,-1.4613102813821919,99.62138399664374,2.2614575119972815,0.012523052888123977,341.0628162120827 +2023-08-02 13:40:32.338938,6QJK1VOS,1.6297274625637261,104.64877981713077,229.9145313843892,29.132549875107927,200.53739783011977 +2023-08-02 13:40:32.841821,PSG36U4O,1.0616079176893485,104.23749054225628,366.9226125529013,58.09531672884964,212.85995177827994 +2023-08-02 13:40:33.344209,I72NBSE9,1.345832781945071,104.11242727996363,513.8476160972515,75.9741203956081,168.26449509968438 +2023-08-02 13:40:33.846550,1KMATGVF,1.3762816874430082,105.05788206789049,438.16414277980624,89.49874869960877,179.88723547099107 +2023-08-02 13:40:34.348895,8YTHRMSF,1.147810320261705,104.82596024774945,621.6253406319582,46.14906148109804,100.52557966010687 +2023-08-02 13:40:34.851057,YDFAQN60,0.15726146199131708,103.99711840646562,968.5309305009625,39.657664399753244,340.53361075655613 +2023-08-02 13:40:35.353359,UO5CRDSN,-0.4993293503422629,104.43114790287811,1359.2296491565596,54.318484330105235,108.45953132996584 +2023-08-02 13:40:35.855702,18RSKY7L,0.4760780175421355,105.31273179059933,2324.028396417727,71.60774893930582,315.1628495873754 +2023-08-02 13:40:36.358097,RYU7P5CA,0.8696733777023746,105.01335790548026,675.1701980676794,34.38587452513735,148.70348125436715 +2023-08-02 13:40:36.860369,2LEV0KJ3,1.497241808515711,104.92101716435803,819.3031177377671,27.61861063376305,83.8994020371473 +2023-08-02 13:40:37.337589,CQVM4XLB,2.4322105084013135,104.44153956571282,1388.5005017513342,11.137417455702536,42.77364327870987 +2023-08-02 13:40:37.839782,HUI5CVZ9,1.4477116225712923,104.14924411680056,466.4741603327659,11.54919775686048,243.6703157875087 +2023-08-02 13:40:38.341698,M5E94J1Z,1.7279335869105095,103.60176577763552,92.30516752083281,17.084707592839692,149.81714111857048 +2023-08-02 13:40:38.843945,HRQDMP1C,0.7839932089577506,103.06987484271399,22.979602526607593,24.1317149600526,143.36396860683425 +2023-08-02 13:40:39.346039,6DHNVY0Q,1.2435846894090488,103.2304630252431,33.54090914962899,14.691314716179036,179.71388559224772 +2023-08-02 13:40:39.848361,FPT2MVWU,1.515471585908192,102.3358179888696,40.16294092726172,28.61595261304487,237.32246593366298 +2023-08-02 13:40:40.350590,WJQZBRXO,1.9066227174078347,101.35563650113737,19.67892037040184,28.820502658999306,26.335428467636177 +2023-08-02 13:40:40.852754,POCXSG6V,1.3321577541027896,101.25854581854055,4.750079446055079,54.13769608072574,264.2838850477035 +2023-08-02 13:40:41.355104,9R7OBV4H,1.4314701556144975,100.61686894637248,0.6561179031797959,18.886915796206516,230.82356698436195 +2023-08-02 13:40:41.857409,M5GJN86A,2.2255891861445543,100.33513553191295,1.1170880503502867,11.072573701240222,10.270813740611743 +2023-08-02 13:40:42.359782,ZFVYUQRE,2.7468629073198656,100.06855757443657,0.42747079898183693,4.499633467113764,92.7607211272179 +2023-08-02 13:40:42.862098,NB5O3EMV,1.908332479214832,99.97027859977513,0.3785647328336886,5.5926448888913285,301.2650253746584 +2023-08-02 13:40:43.339242,JVNERKHU,1.5708769975565033,99.92806746891378,0.12774230218102517,7.172189092392746,141.40485948221033 +2023-08-02 13:40:50.133673,NW69FQPH,0.8602988714526068,104.06090735730514,9149.119425134302,93.7268589179286,180.5461120907053 +2023-08-02 13:40:50.635900,NBUFAEVR,1.7866923459831086,103.546373230336,1813.4841201585177,136.57392593316823,106.59056177617856 +2023-08-02 13:40:51.138158,TZBEN7WP,1.1298455126111335,104.11135852096375,1514.6888395742233,208.82635282714813,13.068624007578876 +2023-08-02 13:40:51.640321,P7BQVMKR,1.4446855942178247,104.54816420481033,1023.693160005949,166.30261260491065,96.69410269439514 +2023-08-02 13:40:52.142634,XW97DOYH,1.2059856146758916,104.43962668856392,1208.6331882247039,279.7351827116111,12.579547389498089 +2023-08-02 13:40:52.644851,NATSYF6Q,1.2134782167671907,103.54627360598478,1049.581684537093,8.446879194132975,268.43524759592066 +2023-08-02 13:40:53.147141,SD9AJCVT,1.9527953205453574,103.45486067072433,329.18812404345067,14.519624262505397,123.85643485264137 +2023-08-02 13:40:53.649453,0NHT1PI7,1.7780912436905565,102.89931067250573,203.35332810600394,23.5781695357407,313.51272699574747 +2023-08-02 13:40:54.151755,JX4V7EGT,1.601186416609571,102.21724756312997,255.99761976804638,9.723265893258693,13.985189702363016 +2023-08-02 13:40:54.654059,PMHBRXS1,1.753563823759803,103.04859344246887,151.49220996984343,18.14013489924555,338.1348680264993 +2023-08-02 13:40:55.156130,G9PEUNFS,2.557192252943821,103.49210954795812,129.41487755010516,24.714785384246472,108.09984696694687 +2023-08-02 13:40:55.633010,OW3RFM71,3.413464036265753,103.62149240455233,46.656962404683185,14.85913897663766,9.418287235689945 +2023-08-02 13:43:34.903078,JB5KOCPE,1.2069982897108495,103.59639589576217,3791.0529926329127,263.4804070771034,280.4654314830628 +2023-08-02 13:43:35.407277,4N0MJWD8,1.8036718775127105,102.634162653769,607.1315180577631,222.56601454065256,307.88474783461726 +2023-08-02 13:43:35.910274,PCVL465B,0.819320865876765,102.04879429443352,95.38725840007965,15.152916719529827,201.08417166400386 +2023-08-02 13:43:36.412854,U4FVLOCZ,0.11900710429917716,102.30483689452215,142.9721218477267,1.5706776951667276,197.8231676902301 +2023-08-02 13:43:40.966011,U6HRVFL5,1.7386576337911719,104.54764752695907,5083.2148231154,216.5881469265607,272.91468769991974 +2023-08-02 13:43:41.470563,1WDOE0N3,2.1859299977962436,104.85137828718338,5609.61152926067,77.9118094045374,124.67893853867349 +2023-08-02 13:43:41.974595,WVRFGABO,1.5553185928852826,105.60766845945827,8236.056583303085,98.74484166362609,249.34619050941578 +2023-08-02 13:43:42.478756,N7D60FY2,2.0082849828079365,106.26194517225828,2164.477447777321,37.89960325986134,359.87367166252176 +2023-08-02 13:43:42.982521,4OIF56JA,1.817141022230231,107.17291844658779,1860.309044612979,56.505403232518034,5.813033460736506 +2023-08-02 13:43:43.486358,QC9X62LG,2.5057781181537138,107.94564965223424,3717.8666031185517,5.738500202316544,260.6455030873552 +2023-08-02 13:43:43.965047,TNHU9PWY,1.893464860728396,108.3740127242196,5119.828487583318,9.686092690938114,256.1238427854264 +2023-08-02 13:43:44.469381,AREDZ2HY,2.6350799688789346,108.03712443252613,153.78753326729657,6.400460237174705,313.0843402308832 +2023-08-02 13:43:44.973633,C6P532JF,3.2041511025335403,108.23219800665416,143.2213163196841,4.421991367461549,96.292546123595 +2023-08-02 13:43:45.477888,WOZAY72B,2.6350673791248314,107.49369693001341,202.8795401280776,6.386921628809543,155.86305262573802 +2023-08-02 13:43:45.982264,SYX1RZVQ,2.0275763751032034,107.30580298308362,188.81670448383218,12.562259783496154,310.1161179777059 +2023-08-02 13:43:46.486475,LH2OP0TA,2.21727685362689,106.64915499557146,287.95820163771515,25.013101389194233,148.75700124886532 +2023-08-02 13:43:46.965694,AP50L3B2,2.6743424321584586,106.67568824068621,61.52790036085415,19.3030662213849,115.82657310241075 +2023-08-02 13:43:57.557068,7WD5ZM4V,2.1037180990241353,103.90573077742651,4183.80685068752,58.76826595690366,140.95174431496886 +2023-08-02 13:43:58.061797,50GCTNDF,2.3229987701191623,103.95274618753096,6873.3296426004,114.56819424353311,227.85966893285314 +2023-08-02 13:43:58.566352,1745GD2T,1.5667057146630536,103.81619409237746,11253.394219511365,96.20515197527129,291.57949958335206 +2023-08-02 13:43:59.070311,T8BALK7S,2.175431177189962,103.20947915813288,21082.48392462787,60.82191483589065,52.14160544253929 +2023-08-02 13:43:59.574572,HVGFERX0,2.049594463862275,102.90052410177015,1949.4287478058905,98.23469077957289,359.67287419157975 +2023-08-02 13:44:00.079064,PLTFWO2R,2.9743452811078406,102.6277733748711,1761.0592011998372,118.96613651729356,240.92306580826425 +2023-08-02 13:44:00.558035,3JZ5YNBE,2.556987705205624,103.31297884303099,3005.7041724748296,224.99100844917498,243.4467371373845 +2023-08-02 13:44:01.062119,3YEWPHTN,3.430250385144664,104.28452463730102,1602.3416354229018,53.735663940318176,10.400399818341725 +2023-08-02 13:44:01.566494,MW9NYJRZ,3.6354802693145345,104.89731952282766,2608.7400436046173,40.95413149207891,42.73396586003615 +2023-08-02 13:44:02.070424,45HKNRL6,3.835493356260633,104.39368445476839,1628.9475004489582,65.51473268240056,1.1098585977388211 +2023-08-02 13:44:40.463689,G0TXJ1PY,0.6361830586459616,104.81632879217061,1082.045047013371,117.55100160800598,253.48189796142083 +2023-08-02 13:44:40.968309,EPU6KWF7,0.7506374786557317,105.36251680985278,109.97360205059874,47.114062999752576,43.26665631513674 +2023-08-02 13:44:41.472465,YGFUN8CP,1.5566946046008068,106.23060500423892,1.7618132155931931,76.20753101165222,153.31167333875317 +2023-08-02 13:44:41.976452,MQ8BUS67,2.4613348284004477,107.21116100650612,1.3625510796328113,141.23717738895672,296.32604409204066 +2023-08-02 13:44:42.480550,CBAE0KFX,3.144175328333227,108.11790654114414,2.2665988674431476,187.8665026619995,19.334963029260393 +2023-08-02 13:44:42.984663,IZW2SJO8,3.520683408516116,108.01640627302415,4.285254293879003,62.346983412174396,255.32617555517288 +2023-08-02 13:44:43.463616,HL7DVCOT,2.5287104372288782,108.24542012576961,3.7369610554712915,121.49509174521944,23.018122237125056 +2023-08-02 13:44:43.967724,YUL3Z5Q2,1.734229619148311,108.87935143705914,3.7239799652487275,152.98366754623842,276.4534865592975 +2023-08-02 13:44:46.683100,JHI7YURM,1.3862102769024853,103.96719853326174,4837.49190765027,77.20311644381414,305.9719609960284 +2023-08-02 13:44:47.187849,ZE1GDOBI,1.8854961288754688,104.21533121649053,7159.751188688472,85.09635393742279,258.826351615156 +2023-08-02 13:44:47.691689,W48F3LYT,2.073204459805435,103.48278163120331,8391.053444911377,48.65182332696786,144.27042065592343 +2023-08-02 13:44:48.196238,HPTRAZD1,2.281034289143884,102.65615942087916,1395.493593124169,64.7005480369072,50.95804384687102 +2023-08-02 13:44:48.700029,ZSLFT2X9,2.875622245155116,103.25995328477671,1730.8807644613153,57.54900447007833,117.0529807649245 +2023-08-02 13:45:08.518118,WBTV4Z31,1.676200135691566,103.54659805304517,1057.181690313837,232.41660587259398,281.37923766468276 +2023-08-02 13:45:09.022019,LA4DJVG8,1.994014874367955,104.43607444158206,43.4371688985259,429.8818654396164,260.95705928422126 +2023-08-02 13:45:09.525200,LIUXZ6C2,1.3134842202291959,104.7060795927793,63.49957095847272,434.9044909313264,69.69572755542782 +2023-08-02 13:45:25.237582,UDBM7L15,0.5687098731058926,103.12695893535643,8008.160225621159,213.99360451766208,115.65395076765188 +2023-08-02 13:45:52.119648,6VEZROSL,1.6135000839756504,102.97955654694721,8524.284069129757,20.822918579677875,251.8479922586543 +2023-08-02 13:46:12.173556,Z4AJNDRY,1.9480270195668912,104.0429323480713,5227.648137208026,275.65901889546046,342.1246441822645 +2023-08-02 13:46:22.319191,UAVTNF3D,2.174837058760973,103.5552569607122,8744.662405613024,71.18161843283603,268.946129598988 +2023-08-02 13:46:34.094698,3CJ9LH6X,0.42474684108158245,103.17958104987332,8166.728814816307,50.11588148393761,215.9065286277091 +2023-08-02 13:46:34.599160,KPUW8B5Y,1.0314200156679538,102.24989163169893,169.4055246011112,78.90580949288182,310.0713800564355 +2023-08-02 13:46:35.103238,358NEATP,1.369190157962281,101.6587975473823,297.31267703906826,139.66370527095637,318.00930534385367 +2023-08-02 13:46:35.607124,MO2ZAUD1,1.7148194094689664,102.04089717655057,543.040042919732,227.16695896052747,195.7218519803099 +2023-08-02 13:46:36.110627,9RSHUBV1,2.5092894887006416,102.02694032488294,648.6123184161422,193.9287849682742,228.52913597199307 +2023-08-02 13:46:36.614191,ZFAPX16Q,2.633682544154538,101.24563136252429,99.88307988555619,300.15824232576426,331.8879191314826 +2023-08-02 13:46:37.118074,T528AV07,3.2826226006745935,100.40293259475098,63.90887003279852,451.70312035627495,114.41858164476048 +2023-08-02 13:46:37.597184,ZGHMEWLY,3.9708142728910767,101.11044281699165,17.49209706833078,326.20232047369836,238.30176534163934 +2023-08-02 13:46:38.101239,WEN4XKOT,3.009351459575442,102.01748558429907,1.6487141704094395,617.270941032986,118.77449461273989 +2023-08-02 13:46:38.604953,NWVG9CT8,2.474943724072763,102.6795407865525,1.9222870628226443,248.72909902941313,167.66114545744026 +2023-08-02 13:46:39.109157,EYQ7U09S,2.674224933716267,103.58894606729542,3.2474522448829943,461.2736754836328,90.87977397188843 +2023-08-02 13:47:01.782474,14S3ZRMK,0.8420220860255738,104.62575316880547,2382.1952209433643,266.64909783298936,316.369967525308 +2023-08-02 13:47:02.286989,S1BTV6AL,1.808611456775166,104.1115264003035,4025.1535065337384,101.80842584230228,114.20828275851267 +2023-08-02 13:47:02.790559,DOABW78K,1.7576819804451755,103.94523871767517,4396.415605129472,198.14251820640266,73.46381318493258 +2023-08-02 13:47:03.293648,3WVD7YJM,2.4440854128179526,103.96275486225163,6073.950670735869,304.72069224912775,9.7735609364492 +2023-08-02 13:47:13.875402,5VIBRYPK,1.1161342771263667,103.71506811493435,7681.165446815004,211.06907670988917,169.1463915895956 +2023-08-02 13:47:14.377715,5V6CAURI,0.9439167892641678,104.0444407945405,1400.646041283263,138.99371765086696,117.43483421588985 +2023-08-02 13:47:14.880096,E43ORB0Z,0.5486218333426651,104.16687198663197,2560.7986971926507,158.2273518323616,304.22575966204676 +2023-08-02 13:47:23.063753,43DAP58U,2.0897327942796458,103.94457989211108,3482.1785661037316,48.72958683746526,299.59541726618255 +2023-08-02 13:47:23.566992,AQT0KFZD,2.12407438969747,104.88989019039491,5459.338862353478,94.33859503606739,100.71082729991127 +2023-08-02 13:47:24.069058,4B8V9K6T,2.8690027274466674,104.2936932798622,5996.712807680942,44.86498879192816,113.36769772046344 +2023-08-02 13:47:24.571112,RPKYJ4FE,2.920350081500019,104.54569721648463,4128.1203585107005,41.87857069482637,52.65294786045797 +2023-08-02 13:47:34.401043,9LTKVFDI,0.8523069456993111,103.43585941932251,7264.542472067766,189.4464406198038,331.4313388799628 +2023-08-02 13:47:34.904396,3L7HWTPQ,1.3331663639055626,103.97747964455716,3259.1496951785375,224.75151314688938,319.0075147867851 +2023-08-02 13:47:35.406632,6PKMGQTD,2.3018671377729816,103.62162211106975,3368.304699462384,415.3830878856996,0.1067471133702611 +2023-08-02 13:47:35.908835,SMKTBO3I,2.4456438372496776,104.45436096013428,4433.507146375216,209.26877399259715,327.1735067155617 +2023-08-02 13:48:08.700546,LGFDCUTK,1.1896110345003312,104.80517610302688,4111.196523779818,102.98035113086227,85.13689075323543 +2023-08-02 13:48:09.203817,IJYVA4TO,1.0693898015026868,104.45295043448569,575.1755423058353,148.48683000933653,158.67383838056872 +2023-08-02 13:48:09.706215,CAMTS6JX,0.14704951468701188,104.69284944409041,1049.6609102397942,43.18219210298723,292.960427499497 +2023-08-02 13:48:10.208392,UFK6HR0G,-0.004366237590559763,104.67045155046485,711.4795387723542,35.91133106537763,102.11826855840337 +2023-08-02 13:48:10.710623,6VPL2RM1,0.850096235073067,104.44011483060918,835.8192724422169,53.27326492082436,259.71113831639354 +2023-08-02 13:48:11.212891,XL6AJ5NE,1.6258013409354657,104.30625234698341,1117.6458168059803,73.11777815040661,76.04611118675871 +2023-08-02 13:48:11.715200,NZMKR7TC,1.3850146330149706,103.86710842134228,112.54894023947077,40.22165817814451,214.52258991784686 +2023-08-02 13:48:12.217472,YXH6FUCM,1.9376233345099108,103.4783471942704,16.900350391038813,57.00938928870998,84.60837122957503 +2023-08-02 13:48:14.704182,6VGL1CXS,1.6913470795856642,103.20791138494356,2395.4349803844375,245.731812021993,265.9098238430454 +2023-08-02 13:48:15.206590,IMVOB5GW,2.521855648158944,103.20481522204626,2997.290999855877,148.89184973917367,205.07926980614138 +2023-08-02 13:48:15.708910,74VKD31P,2.609788254917655,104.02342081276849,5954.993368515439,216.1492436395662,72.42806436664046 +2023-08-02 13:48:16.211194,2S06IWXE,2.5530126744539863,104.76539344994995,3615.4116824844623,120.77174552562637,75.0000332837841 +2023-08-02 13:48:16.713443,F74ESMOV,2.0985651209104925,105.71207403972221,6141.575283126233,31.476516707549266,173.7687839911424 +2023-08-02 13:48:17.215473,BD54Y0PT,2.7181396921465586,106.20700902848002,6052.210289669208,15.80358936709476,337.49526022389625 +2023-08-02 13:48:17.717732,EVHB4WM6,2.8267643831266014,106.56282874065636,12037.982632968047,9.979114358306168,152.84907972256667 +2023-08-02 13:48:18.219852,1SNFBMIA,3.7099954023323987,107.23333257048105,7864.262300368196,13.129565414445198,315.4941059809901 +2023-08-02 13:48:18.722027,43LNSGWM,2.879831878472072,107.30808285067233,10717.618966761744,5.2692511678640965,218.80456063578185 +2023-08-02 13:48:19.224011,AJMLIZTX,2.889725624551783,107.14416358301045,15882.836991140275,4.682507587396043,37.442847951068416 +2023-08-02 13:48:19.726344,1QACIS9U,2.4809694826638937,108.06213435681872,26111.613096053614,1.4526395135462158,295.13618436777807 +2023-08-02 13:48:20.228558,5QYF4ANK,2.6246845075950884,108.14605188969982,48397.924807562384,2.0570418760879865,327.33652520736916 +2023-08-02 13:48:34.040272,JAGTYHBM,0.6503947618245696,103.27428326127126,3545.281933684983,153.95295369570442,80.84161477971317 +2023-08-02 13:48:34.543531,6EUGZ8F4,0.9927843667010232,103.95622994850763,543.3048757834481,257.2839175388986,4.267950742241283 +2023-08-02 13:48:35.045750,GPBTV3KU,1.3059577805635616,103.87686075765109,369.29083563398734,100.7042843561531,330.94944300488726 +2023-08-02 13:49:11.000246,2TQ1MWZ4,1.5310152149277056,104.32390427094106,5700.635476496772,170.31840767705188,34.18246562270067 +2023-08-02 13:49:11.502500,EWRJL4T6,2.003881494219408,103.93527932169116,5958.849873818606,49.960742462777745,337.40578692673995 +2023-08-02 13:49:12.004619,ASZVX3N2,2.0688431176781172,103.85974004570913,7752.565321341293,79.71504451106102,224.2594326458102 +2023-08-02 13:49:12.506670,8J7GYCWA,1.7402808475220861,104.01014995909081,13023.933706252079,82.55644938623071,261.534205090672 +2023-08-02 13:49:13.008783,B1FDYV7E,1.3867087035118433,103.73082693508194,9853.657811288607,87.69435455401221,288.34659176841694 +2023-08-02 13:49:13.510948,GRMTBZP7,0.6137404158998336,103.95264776831253,6636.162315454761,71.784652833168,162.85022649818632 +2023-08-02 13:49:14.012963,VAWRC8LG,0.3433479984347916,104.81513837255113,298.9847871395514,23.857533691637123,308.0856778600993 +2023-08-02 13:49:14.515032,X0O1JHFK,1.3407024151785787,104.05119104640562,221.33773574530125,40.48650269139564,76.0632789073835 +2023-08-02 13:49:15.016904,IG1OPAJM,0.4554484300724295,103.55127835427979,384.01033297246215,58.22120219592701,7.082886884882441 +2023-08-02 13:49:15.519081,OSBE3ZUC,0.003220376717852247,103.16346864429569,127.85892524159158,19.882697925899556,291.82909415744587 +2023-08-02 13:49:16.021378,ZSB0FYEN,-0.7279499440004962,102.32532695268871,39.63607502862229,26.183893570418864,16.98511961831997 +2023-08-02 13:49:16.523630,5U8PI09S,-0.4863639967041198,103.08191015754213,57.35662063071939,10.275669091051869,200.77331545709956 +2023-08-02 13:49:17.000680,6B2JLW5H,-0.803391077411066,102.6061194500636,81.34155071755458,18.362020989171096,241.70138225388496 +2023-08-02 13:49:17.502895,QOZ2JE7B,-1.673779925093208,103.1986873048903,35.62286522150984,29.240527402490656,28.603952185403614 +2023-08-02 14:21:58.247475,S63DJANG,0.4924431354366907,103.04930647754647,8391.391232708545,39.65588756833961,96.754226962162 +2023-08-02 14:21:58.749945,M6LJPCT4,1.0460849049666041,102.51643157909275,15387.83187636428,78.92484185152337,154.6118718708198 +2023-08-02 14:21:59.252128,BTFCWUS5,0.9056605828047091,103.0055361839461,8406.402232192582,78.57954085922603,253.84192664473417 +2023-08-02 14:21:59.754281,SOIDHM4L,0.005091189115043582,103.12057577345328,11275.879069133844,21.525123311720506,304.674423254995 +2023-08-02 14:22:00.256195,CEMFHZ42,0.3297635801983665,103.80856701449606,666.4862611095141,27.605505073759385,98.82605051792535 +2023-08-02 14:22:00.758287,4U3HJAPL,0.48071093599874115,103.9196222659165,1322.2881718147958,19.613066312091597,229.2800642068461 +2023-08-02 14:22:01.260476,C7AX2NWD,1.1375666048983455,103.21581899311329,1093.4503789419482,13.636856566802587,177.90176214768076 +2023-08-02 14:22:01.761994,UQ9EKYJ4,0.5996302805816967,103.20772724730611,939.0740234225691,2.0654153033961133,190.4992218469976 +2023-08-02 14:22:03.703330,QWOX0YR8,0.5009174280025095,104.24112153015811,1754.6565543255392,181.2827392329152,24.476739844092947 +2023-08-02 14:22:04.206167,D5M0JC81,1.4947546201367354,103.51393076536766,3159.706414503997,228.38623025363307,41.706765068207915 +2023-08-02 14:22:04.707950,8NBAFO0W,1.0434932121479195,103.6704490756502,1917.8278502301953,46.68604313790985,194.34643682409228 +2023-08-02 14:22:05.209795,MLRC2ED8,1.7125506191832371,103.79458389646493,1896.3725764804174,22.413263813442853,117.85112758701376 +2023-08-02 14:22:10.269927,E4UCD6HN,1.663352543091341,103.42849596146593,8864.024856459613,12.047569173198113,326.65065376497904 +2023-08-02 14:22:10.772211,I8Z0G9DT,1.6129289797865303,104.03276110313902,16082.774818372793,3.9208967248899906,79.64601164074156 +2023-08-02 14:22:11.274283,MGLOD9QU,1.4649693868975096,104.49485159369567,20126.626651679,3.7977152598380846,297.02587165183326 +2023-08-02 14:22:11.776429,5T3ENVU1,2.252977082613291,103.73059528499485,12613.30210993288,7.1342630471962565,35.95288041540431 +2023-08-02 14:22:12.278606,F9BUJ4NO,2.80717793460895,103.01028514344188,9505.238754414191,8.515214179911794,91.61231676790189 +2023-08-02 14:57:34.391345,0I9L8Y65,1.201219496691201,103.7205644053208,1833.5630380686434,147.1554202853344,332.27147138056205 +2023-08-02 14:57:34.897105,40CDWAZ5,1.3919453308127034,102.76209639631301,295.2107274003988,16.880959814988387,84.5425039481425 +2023-08-02 14:57:35.400510,Z342HQI0,0.9282904823473379,102.31939709519165,67.76574215187429,30.67883276900228,21.023168234189995 +2023-08-02 14:57:45.422724,NAM2F60L,2.17147948480906,103.12782150152618,7648.55151107502,125.18895741147935,130.40532691515347 +2023-08-02 14:57:45.925221,J1QC8PVY,1.8816461239590654,103.42213748463435,11670.94247496166,37.085814087079584,105.91348869862651 +2023-08-02 14:57:46.427515,4FLK3V0N,1.9580823880726281,102.75560136581456,21548.884574334825,11.20135584802658,265.94212528873663 +2023-08-02 14:57:46.929783,5UIFP4MD,2.670511565323741,102.51114299356273,30387.117855603945,3.5398251984448184,333.0208969225854 +2023-08-02 14:57:47.432002,FCHL4P1M,3.597350660675758,101.64982010523798,158.1883221355638,3.4523886752311106,29.793686546874824 +2023-08-02 14:57:47.934218,XDK53MGN,3.9975953295773463,101.42173062704741,33.70765334550441,2.7635814547999553,121.84969552047313 +2023-08-02 14:57:48.436514,LIX3PHV8,4.394616096732001,100.93107078300105,16.803064252945305,4.458312001478792,217.12347509146633 +2023-08-02 14:58:44.674375,OLCHF92N,2.3089638506994214,104.63149312257025,6966.140341328988,275.57484164312876,38.78087624949686 +2023-08-02 14:58:45.177669,USLYDRZ3,2.350406311937717,104.41393332239568,11646.338474246402,354.51041241351686,35.12072132410265 +2023-08-02 14:58:45.679894,CQUTZGDB,2.0782439576813587,103.85487559312946,22350.25863292125,635.4282892244678,277.2224117253877 +2023-08-02 14:58:46.182118,VNCFR3ST,2.099101728363144,103.1158757976811,12327.554453218478,129.82348196628288,252.85005786515467 +2023-08-02 14:58:46.684423,UWITX8K9,1.5513932525700842,102.31220068724184,18350.45464907165,112.1130439211657,176.703462341045 +2023-08-02 14:59:13.209041,0K6ZMQGB,1.696262129831172,103.12514661184,5539.285847495722,78.00855486255954,143.80309970883587 +2023-08-02 14:59:13.712173,KQC15L8J,2.3349763696126846,102.4362044977543,800.704575191301,69.85847981828114,352.0023115835161 +2023-08-02 14:59:14.214354,WUQ4VIFS,1.614996312905037,103.24815899678232,1284.0499265287551,12.952761697987349,5.302769828162127 +2023-08-02 14:59:14.716467,96JPTR3A,1.1269245368032876,104.05628879530421,990.3911459536495,19.954377383778947,85.40644328183163 +2023-08-02 14:59:16.847046,ENXQH213,1.3614613706577066,104.4529739042053,5358.426527333534,177.61798509590758,266.92149611735175 +2023-08-02 14:59:17.350329,R3FBZ60K,0.4025383497513122,104.59512234459243,1788.1647265277425,171.94607770238233,15.04263790214128 +2023-08-02 14:59:17.852686,6P4UDLW7,0.8916111945723353,104.17974429980794,3535.979996435535,7.960671291056855,318.54053041327955 +2023-08-02 14:59:52.326398,U8W5KS0J,1.4221503081437574,103.48247759983204,2481.970519566025,58.393924457165326,246.642687541039 +2023-08-02 14:59:52.829358,2UB3P7RF,0.554954808583922,104.07913764285448,4135.17415110551,39.097990303494,104.53779225676624 +2023-08-02 14:59:53.331494,DKJZV27O,0.6565623100471332,103.229022692173,7344.222735192604,58.839929455429235,347.6300534316264 +2023-08-02 14:59:53.833643,YW8GO7NM,-0.25805912914447293,102.77752926071857,3743.6987477914336,62.4479840862124,220.12677516300982 +2023-08-02 14:59:55.908912,E2B9PTN8,0.8223098873273682,103.20650289010806,7044.528117794101,37.04259526943082,157.88479190393159 +2023-08-02 14:59:56.411410,4YP9V0W1,0.11676397361386548,103.18200668103367,4163.214930664257,42.285839455103,334.79469848818917 +2023-08-02 14:59:56.913651,32T8X9WH,0.24534387304709826,103.4732153540419,4438.303213301147,26.235087615229173,39.68356803008487 +2023-08-02 14:59:57.415908,5T1CZDQA,0.6539384268502406,103.81454667649514,5296.220298963215,21.02144212258348,243.96007676530715 +2023-08-02 15:00:15.616815,7Z2IY06T,1.3463431641764123,103.62213586245083,3524.6420953130582,85.51492573590866,179.5742884492715 +2023-08-02 15:00:16.119327,PZJ846TN,2.19782767869354,104.00760992701257,2515.6497384149407,170.70613977833642,71.30461222575377 +2023-08-02 15:00:16.621429,A5HDU7QP,1.2650688596869637,103.73507508456144,4624.373286060124,173.99896367632644,279.5958717164698 +2023-08-02 15:18:33.536173,J5PEWBSI,0.8487190947252277,103.42115244716007,422.6811345655715,9.328475557014116,182.1419189774642 +2023-08-02 15:18:34.039476,3X2YJKI8,0.8497181714907862,104.14980013353528,389.63689025635296,13.201325385412952,155.21982400168417 +2023-08-02 15:18:34.541907,MCYJ75EZ,0.10643715022419808,103.52937004006472,83.00704776989289,20.34661617766171,185.5343663012658 +2023-08-02 15:18:35.044085,2YS0XVF3,-0.15191588907958753,102.58384524823532,126.06621500376393,13.079498223512187,241.39844973290687 +2023-08-02 15:18:36.747764,Q28I4E5G,2.0031205230072597,104.0472610469552,1086.9455447370437,76.60801712180297,200.37516314688062 +2023-08-02 15:18:37.250182,7E3OF5D1,2.960115269535674,104.32099671206602,125.85108142009449,131.59391688459536,254.32613273654957 +2023-08-02 15:18:37.752578,3C8T1OMG,3.2750280283094737,105.0736417134964,243.40080389184018,237.34504448946745,211.01955172765383 +2023-08-02 15:18:51.826562,5VOW4B0H,0.9780065052504965,104.25326103802077,9277.925489421978,152.58228454965712,268.178252482607 +2023-08-02 15:18:52.329756,NHMEC2W3,1.2756376622788537,104.80422198893704,395.373681168634,65.87455384242007,188.00971750501049 +2023-08-02 15:18:52.831996,OIY4FPDE,0.6550170628345577,104.33247462808654,129.72609882825162,124.01116143235278,113.1193724225837 +2023-08-02 15:18:53.334209,E8A4BPOL,-0.23297293769584626,104.25483586658889,56.72870606461075,126.05222228369169,41.031529469421 +2023-08-02 15:18:53.836400,7YVWJ86F,0.07930461892382179,105.08465582757968,102.53818349551734,241.65579887975244,256.19743007662873 +2023-08-02 15:18:54.338610,9Q6YFX3G,0.38348831971259867,105.92620199388703,201.72576207651866,278.7762887659255,303.7089838080693 +2023-08-02 15:18:54.840805,ZWOTRAX9,0.25433665509398673,105.43382496227234,197.13631450675993,113.45563365243007,304.0935095933892 +2023-08-02 15:18:55.343105,NQFSWUZR,-0.33482151500033974,104.59303329837049,217.1653797894344,212.23592246429223,231.39106713334695 +2023-08-02 15:18:55.845391,M9NR0DYC,-1.0119044666019894,104.57458072253917,254.00558309692113,84.47436072286753,282.3689870630669 +2023-08-02 15:18:56.347697,8Y1H90KM,-0.21627673228438216,104.7273850236912,349.58517550600993,57.538908318541296,206.61050614207034 +2023-08-02 15:18:56.850046,XZGO7DCW,-0.15012972789974155,105.47532517949733,388.6006883802276,25.766485471030823,212.36062828892807 +2023-08-02 15:18:57.327309,Z645G1EM,-0.6501657502182299,105.47755730341653,660.9409440064537,32.06729614908091,286.4310735795072 +2023-08-02 15:18:57.829680,TO8E1756,-1.5589948690371467,105.28456932846105,649.4624356158877,15.786349098758478,193.91979157742264 +2023-08-02 15:18:58.332002,5IWKUVPT,-1.3795483414800553,104.95708003868545,37.62118273285205,28.95617791600547,282.69523139204495 +2023-08-02 15:18:58.834373,3KP9SWVX,-1.189699710351443,104.35283065144361,49.66470392352781,52.80445196710433,313.6234189445016 +2023-08-02 15:18:59.336699,ZN67XBS2,-1.5455077149294572,103.37536300769521,72.20402417460518,78.31448337804854,144.07514271999923 +2023-08-02 15:18:59.839052,1WHXCFQV,-1.5242915373296033,103.91896808458989,40.54919617907833,59.19365145954465,17.397769162981263 +2023-08-02 15:19:00.341388,2NIOSW6P,-2.226607765209522,104.69109045819975,41.99634124836202,54.665231503070174,344.27710955763285 +2023-08-02 15:19:00.843806,OF3R65HJ,-1.5087748914704044,103.8282259555623,63.736404903713506,14.195897527893152,269.3895435531974 +2023-08-02 15:19:01.346141,TGLMFZI4,-1.442226994197156,103.05924476919493,113.780022642097,24.49215631592719,40.165104077289016 +2023-08-02 15:19:01.848488,K3ZDRLPY,-1.3564257015150252,103.41277084520925,85.41539910361789,33.643386806523374,120.13572415636246 +2023-08-02 15:19:02.325718,PVQDYLSU,-1.6602016650117533,103.3962463633278,99.49979475300701,51.985953346998386,291.5297382006572 +2023-08-02 15:19:02.828093,M307NVPZ,-1.3715233278277186,103.12223549753062,70.394193791607,41.57357229110688,213.45547312267536 +2023-08-02 15:19:03.330390,0GECVHL9,-1.5587511899698412,103.55398544782626,78.70973728260873,32.1477329627032,325.2576280223561 +2023-08-02 15:19:03.832688,GQ4R213T,-2.034573206500392,103.61362315210387,39.07044472327804,27.959128812293084,13.95087164387894 +2023-08-02 15:19:04.334798,GUJYAITV,-1.2403048460075525,103.38923895275727,47.759549634453045,6.670084494987034,133.23792585924252 +2023-08-02 15:19:04.837017,PRBQIGTO,-1.789870598832421,102.82424370065728,53.72763436261798,9.469091048579068,168.83884343663306 +2023-08-02 15:19:05.339320,UCIAKXB7,-1.8346702114594875,101.9226406509973,63.78375645840372,11.79522185506989,218.73269738430778 +2023-08-02 15:19:05.841659,EJMRKP60,-0.977153378771612,102.89177631402667,97.75564174403631,10.819726321578525,56.483942324223676 +2023-08-02 15:19:06.343856,0YQ9MR1K,-1.514224985006436,102.77110903246844,138.61347975606108,13.201497722550119,215.98997743150503 +2023-08-02 15:19:06.845840,FSRNIZGQ,-0.9506139099190007,103.01974420531512,204.37462155996903,23.507226118469003,316.13465082515637 +2023-08-02 15:19:07.347891,LW9346IY,-0.897853879949907,103.74807323137595,233.93555251447148,45.13870225275697,203.14619566023134 +2023-08-02 15:19:07.850242,AZDFV5GY,-1.576893217962061,104.10723783482439,278.2739975236144,67.80671219183908,311.9558924356151 +2023-08-02 15:19:08.327536,M24FJSPN,-1.2261967816742152,104.37845492612871,335.69360971188445,66.30331493700442,99.07843391753778 +2023-08-02 15:19:08.829887,FNUR2V7Z,-1.6947566291467406,103.65970549490865,324.5804980938277,49.892231350211574,342.50797910113533 +2023-08-02 15:19:09.332156,07DXJEG2,-0.7355140108674116,104.21841200363457,280.41987513177787,24.692257828324003,270.45366106551626 +2023-08-02 15:19:09.834515,ZB84KYSG,-0.09041716653207743,104.16633589862737,137.96557100488894,2.6037142920412997,254.93002646784237 +2023-08-02 15:19:10.336824,N8R5LSYI,-0.1592495168574255,104.37843986213576,149.13057190103092,1.1066258783006362,8.765994129704609 +2023-08-02 15:19:10.839229,PFK4JRY7,-0.698944769261769,104.24739729397893,249.69072576411915,1.1993068092463208,87.00126586137 +2023-08-02 15:19:11.341318,Q34DZJC1,-0.1560389106391391,103.66678058509308,207.5392742116135,0.27339768230461803,90.12910328575462 +2023-08-02 15:19:11.843124,NV60BQ8K,0.42248881348956724,104.13211889829726,181.44534980585732,0.16724869122358882,104.46834065686033 +2023-08-02 15:19:12.344742,BENOK7AJ,1.2825308924078684,103.6884371924391,111.35013560656611,0.32368108698369397,3.4499852210469157 +2023-08-02 15:19:12.846847,BUPY27GK,1.5293870286731217,104.1887994926127,198.00828080699333,0.5105532233734044,153.90027641521266 +2023-08-02 15:19:13.348432,6SNYTMU5,1.8239331246771784,104.0325771110309,275.9354762408818,0.7973427597556975,153.63250064808472 +2023-08-02 15:19:13.850177,YG4C2ZWU,2.453131265724845,103.22165647352341,549.5548567536935,0.7977560916795655,298.78459630471394 +2023-08-02 15:19:14.326978,D7RMNUW3,2.2948659330210486,103.22300775407535,273.9220777962483,0.47400875689994115,296.29158101100177 +2023-08-02 15:19:14.828581,W6MYQO49,2.1186364404375393,102.6153148861407,440.3588724712754,0.6621266490939642,155.96923755194814 +2023-08-02 15:19:15.330593,2AECHG93,1.935893351283052,102.72979578105033,309.62751317008747,0.45765101267186215,345.29268925299345 +2023-08-02 15:19:15.832165,NMFSDIZT,1.7596594012783469,102.22354749749658,76.47555757096353,0.8230426114973669,306.70520625361837 +2023-08-02 15:19:16.333725,58FEQ1KN,2.607264304346865,102.17723235303141,141.85747579145843,0.12923940142413604,162.91801633610476 +2023-08-02 15:19:16.835307,FVD03H8S,2.0726445813925007,101.93633712044135,196.8617088176027,0.22071456380643387,79.33314979581132 +2023-08-02 15:19:17.336909,6TZX91IF,1.1510496624931204,102.60221917796595,144.9829547242503,0.03376278501903124,227.52535265372165 +2023-08-02 15:19:17.838466,PWCQ27XS,1.4422703729940636,101.65537858259722,203.91078925215953,0.04663688688514801,290.1567629367756 +2023-08-02 15:19:18.340248,SOIAVNEH,2.0462422812107963,100.76951695105677,51.93021498615286,0.0875122263037604,250.20021942390918 +2023-08-02 15:19:18.841782,4ZSHY3I0,2.374551566148052,101.67368845407104,98.22892809565865,0.09969453436917645,206.1230228005486 +2023-08-02 15:19:19.343431,TK76Q3XB,2.474266398794193,101.39266674936204,20.114277357332696,0.019458018096904284,20.53966129382661 +2023-08-02 15:19:19.844996,614QSKOL,1.5695863656783877,100.68696941333552,27.7894412435022,0.020151516779865333,148.75667562946774 +2023-08-02 15:19:20.347030,EY8HPNMV,2.1129417265469552,100.97379815692915,23.238132624445573,0.012774131653046854,144.28819835261106 +2023-08-02 15:19:20.848613,VD7O6PCM,2.214394635071172,100.1098354629752,3.5735642983781055,0.020302142248518736,121.32679639636297 +2023-08-02 15:19:21.325592,7NZU5TH2,3.19450396802959,99.44178921951158,7.122346999100674,0.02945229385966565,37.175986084739066 +2023-08-02 15:19:21.827184,0T7DLSPU,2.9184168865809728,99.20004903511568,12.051171174195714,0.037535152320646775,71.16130131010625 +2023-08-02 15:19:22.329416,ADO6NQ1S,2.7248828120752213,99.27068807301977,13.034765246923115,0.06872834007062303,265.4586616027918 +2023-08-02 15:19:22.831679,RK942N0I,1.7500040186728865,99.91102529185366,5.786229115529091,0.01076282497436943,283.7399343922268 +2023-08-02 15:19:23.333846,C8EK5PFB,0.9624728602957082,100.48069116684705,3.0653074012597727,0.004672734869261596,331.15876387739524 +2023-08-02 15:19:23.836118,SOU09I53,1.8877012175218097,101.0662822766865,1.2449859146997497,0.005158209691353323,166.8188948468054 +2023-08-02 15:19:25.669980,MKHZYNXS,1.1823954335464923,103.8286594739916,8296.646910861728,206.52338829367255,239.11671192483152 +2023-08-02 15:19:26.172513,JL8IAGPK,2.0757634163742056,103.12518383362664,12132.6916787617,256.38729989170037,49.11841847689186 +2023-08-02 15:19:26.674976,1GU5KOSD,1.5006575959562294,103.15088943546279,24228.581644156802,132.3868958168873,273.11546755219973 +2023-08-02 15:19:27.177384,26UIJSLT,2.2880761630609685,103.02117859818576,27365.561377093945,164.99133320507747,112.1520996580665 +2023-08-02 15:19:27.679781,6ENSJVTG,2.3774054925626604,103.73991783133049,5458.2393392270715,163.7563776144177,229.8513429631435 +2023-08-02 15:19:28.182116,XBPTAM2S,1.545230427338318,103.849165973147,9157.069867404998,98.23221740537821,100.36369210733142 +2023-08-02 15:19:28.684514,D62K074H,0.953490913701647,103.95444644429807,2240.8533163768125,135.90819558734862,208.2566733765837 +2023-08-02 15:19:37.510032,24WKSNA5,0.6139843598799661,103.88013452970371,7321.559033728017,127.13343804812534,177.53628963334708 +2023-08-02 15:19:38.012771,70KWPV9H,-0.09082568851647599,103.54019318332642,11008.144694834391,41.32842738737364,126.6412936376961 +2023-08-02 15:19:38.515075,UGQAX6SP,-0.272995166505829,102.75093240266244,11444.25767940541,13.228101755991592,337.9465071661975 +2023-08-02 15:19:39.017396,SH5XBFNC,-0.23287116617198977,101.86722153520658,13224.505825688171,26.27409950028493,120.66569308445025 +2023-08-02 15:19:49.958870,7ENYL5CR,0.8720911256759751,103.73983805286403,2510.275540425496,277.0123630958252,3.0656724058195595 +2023-08-02 15:19:50.462125,RVP5F6KW,0.44286639281323614,104.54095146542764,2865.4678735208345,285.05664510962947,60.82807165022349 +2023-08-02 15:19:50.964251,7S2K91IG,0.4950517182485159,104.25150552713625,3992.608191920112,25.912275572214128,174.1918089925171 +2023-08-02 15:19:51.466109,EWS8YDVK,0.45724033526857055,103.98125951116742,2809.15921115993,24.812813861035565,95.49458650542635 +2023-08-02 15:19:51.968507,G7UP4NIM,1.0291530250771195,103.4606936798395,3351.3486915919716,38.73494632019942,101.03726030279795 +2023-08-02 15:19:52.470898,2DQ9G8TZ,1.1479415968352757,103.43294071444448,5386.072217997133,48.35962063906844,299.2776549368976 +2023-08-02 15:19:52.973116,31SVZD04,0.9764928289693653,103.86956436753954,9426.859867179142,96.17738236229773,227.39430557742082 +2023-08-02 15:19:53.475422,QBRSCUTM,1.208979050842893,103.56032318360161,10343.471596937752,133.81407577583713,163.26676144912676 +2023-08-02 15:19:53.977793,TLXR91SN,1.0566029373786894,103.06567552860598,5888.625941987683,54.299956682143474,351.1892083308201 +2023-08-02 15:19:54.480149,KZPH51JE,0.8022203451386754,103.6764577960446,1904.8485871137682,13.857379836175468,253.80563952093405 +2023-08-02 15:19:54.982509,ZYCW7IPN,1.5584875283379942,103.63590398568974,147.74981001768083,5.081240251801782,226.3279158434908 +2023-08-02 15:19:55.459611,REDHCPTJ,2.079103266817677,104.28980850100133,122.60534313225757,3.4998646066783983,98.92920969816078 +2023-08-02 15:19:55.962004,BCUYS8XR,1.1999062826501692,104.49044894025202,226.28904731543918,0.8524142050221104,146.8893057721736 +2023-08-02 15:19:56.464340,0UAL1OSN,1.8055358405057673,103.8534009536481,102.5853970862483,0.45611825489614094,255.7098279560636 +2023-08-02 15:19:56.966647,VJB79XME,1.7607077879802249,103.00512212394716,84.54597727239252,0.6337214960458248,181.61027657204875 +2023-08-02 15:19:57.468827,4OM6VZ5W,0.9765221231863166,103.29043611906006,54.95599283732911,0.2849759078761513,66.26432603663625 +2023-08-02 15:19:57.971120,DO6WPHRM,1.4640666605951196,103.89552407570673,84.77426460789017,0.2065628824774883,189.92754080432627 +2023-08-02 15:19:58.473408,J0TBDVZL,0.6931859694604523,103.38994673047405,33.19336813286006,0.1632775745576377,214.97102594929748 +2023-08-02 15:19:58.975632,J284PRCA,0.1150647272246268,103.18069209602568,2.6410780744664955,0.08486917994583261,28.40993066104869 +2023-08-02 15:19:59.477971,EQ49COWJ,-0.7719889903625459,102.67035220977,0.060209575356183986,0.07102246458273721,89.2287558478435 +2023-08-02 15:19:59.980244,B5EAD7UZ,-0.4924164813521328,102.80983856693156,0.005476714911495088,0.04171943576146407,167.63223986596137 +2023-08-02 15:20:00.482569,GBP2E60Y,-0.8358575558042951,103.61414217753057,0.005686394152727216,0.05924726755731366,63.59607942475725 +2023-08-02 15:20:00.959650,NQAESBPM,-1.68136254793505,102.88547195890538,0.0005588092361921608,0.06201162200911302,196.19619024091045 +2023-08-02 15:20:01.461996,Z4SAG0BR,-2.0882681858950165,103.13847797373798,0.0005479683151587405,0.04769496777993533,110.78328267281108 +2023-08-02 15:20:01.964228,FAZ7UBLY,-1.9928486341216636,103.43101270727232,0.00010991976010560068,0.05178819187077947,191.50520895858028 +2023-08-02 15:20:02.466403,SBK5RA2U,-1.5854908403582957,103.20239530551889,0.00015274838192367261,0.09135089731828823,233.71692812324406 +2023-08-02 15:20:02.968595,LZ43WJ80,-1.0462537880402127,103.69202662115082,0.00022637668438834081,0.023908702319993314,233.2441212984619 +2023-08-02 15:20:03.470918,U1IQPS6F,-0.8372538463445169,103.22546231584676,0.0004378906316469845,0.03858857888442715,299.0621452552569 +2023-08-02 15:20:03.973005,Z9NI63SH,-1.7052685531666343,104.12619131230758,0.0006151676266864,0.06950122787496096,122.15600074623887 +2023-08-02 15:20:04.475128,GMTOWEQR,-2.5364660120440616,105.08015535532007,0.0006281042941234485,0.06849344574011615,61.19524659366243 +2023-08-02 15:20:04.977168,XS73WTD8,-3.4014004335429604,105.78310271648536,0.0005917036726407442,0.024788538725549418,229.94515379102273 +2023-08-02 15:20:05.479140,ARGYTCMX,-4.269758316478539,105.081901609038,0.0003637584610036073,0.024656341958287586,134.00261297804843 +2023-08-02 15:20:05.980774,74QLXR1J,-3.4218331619176583,104.67605494395322,0.00014817809991547886,0.048386519885554403,157.4528281014338 +2023-08-02 15:20:06.482438,8URQCSHG,-2.989326649007322,104.75010337395561,8.173752321633593e-05,0.06399100048042224,274.6363932595353 +2023-08-02 15:20:06.959656,Z95MY6FL,-2.2431649793888058,104.97195799638904,3.559695181502679e-05,0.08671042478047096,105.9512969041266 +2023-08-02 15:20:07.461983,83SL5RCJ,-2.7827353062384352,104.03759872657517,5.69149778620955e-05,0.03572300902787936,17.160848294226014 +2023-08-02 15:20:07.964254,VF49XCGY,-3.647954661317761,103.78960696124761,6.72024063585264e-05,0.01588749712069707,279.2687081313271 +2023-08-02 15:20:08.466729,O948LC6F,-2.798371494261296,104.0258232862863,2.766716730174529e-05,0.0018228055470762838,190.57854243305633 +2023-08-02 15:20:08.968977,AUV3QKDW,-3.4855452010107433,103.78506859752336,1.348159641189945e-05,0.0005287146416545346,333.41321560207155 +2023-08-02 15:20:09.471231,J3KEQ4CI,-2.958524073144363,103.0637828576138,5.096261976029347e-06,0.0009836603864643524,38.06893114474872 +2023-08-02 15:20:09.973564,7AU54HSF,-3.6469670727054035,103.2785074595917,7.424438022358314e-06,0.0010467839235971913,320.7332193113968 +2023-08-02 15:20:10.475915,XQGYR3WM,-3.099574915787979,104.220867997317,1.4243968834807541e-05,0.0019600857229927445,107.14300081363331 +2023-08-04 16:31:35.271780,BOW6VER9,0.6902199644110212,104.11159374524486,9173.01578160522,272.59495114500714,84.03694907966751 +2023-08-04 16:31:35.774340,75OKS9WU,-0.250695488766828,105.04306974111877,4308.070415859648,7.0019386734222735,176.45745384809072 +2023-08-04 16:31:36.276454,V6ANE7PD,-0.5527173152498777,104.30428671911875,2701.7944210290816,5.449314437589424,208.37913015528875 +2023-08-04 16:31:36.778621,5ETORNFQ,-0.09768092991524768,105.16586428159849,4554.060061884847,4.26051841332416,246.2302533735089 +2023-08-04 16:31:37.280824,TZ8Q15K3,0.6602713607266348,104.36998896755749,213.03928213707968,5.598630759908132,265.67349057431744 +2023-08-04 16:31:37.783077,HWZRG805,0.18646031423339116,104.01031319628436,311.7780660768312,3.958465990016695,21.820513791965823 +2023-08-04 16:31:38.285346,EWH7I3OT,-0.004455795237409355,104.11893159254802,464.16043947921327,3.1387318779758293,9.075393656571805 +2023-08-04 16:32:46.845719,Z4GT3QL1,1.2079775864769664,104.43820004558286,2198.7951930306394,34.04498174874854,194.78032744432235 +2023-08-04 16:32:47.348233,TS0K1BUD,0.3121416741028853,104.51928140103267,2100.2490200519483,12.146663513042032,349.24183093807244 +2023-08-04 16:32:47.850634,AS09HWJQ,-0.5809736704279569,104.22231343769857,1860.1178176665512,16.5223602296507,307.02997399781293 +2023-08-04 16:32:48.352980,XKJAPNHZ,-0.23852880063545845,104.56126673545221,3705.876613239036,17.782513571121406,68.3285884666384 +2023-08-04 16:32:48.855335,T41DGQZX,0.6157062035609064,104.64936264041853,562.1456752951103,4.223006704919037,219.06977484147382 +2023-08-04 16:33:21.647981,NR7IPL4U,0.37206440401132523,103.41819924127756,9501.712793295525,56.05734631510418,58.625141623102294 +2023-08-04 16:33:22.150308,07EW4APK,1.3173465039532462,102.70816083044052,14167.861020402428,33.27311642223497,165.55451171917892 +2023-08-04 16:33:22.652570,0DL2MWXG,0.46149149254743027,103.65349075944508,24164.73061173391,20.732751834301787,347.4710762471875 +2023-08-04 16:33:23.154864,VPK6ZACW,0.9472557271698769,103.55272359467801,46108.02014379444,33.43032691900261,281.0388202833998 +2023-08-04 16:33:23.657112,3VZLECAW,1.0685586155013982,103.22309960177482,32395.233845150113,7.574717528373014,260.9736315332675 +2023-08-04 16:33:24.159374,2CW3BZX1,1.4163128458330998,103.82467728089824,29826.81381528212,6.775606434366785,251.93456146571998 +2023-08-04 16:33:24.661723,ZIGD0K8F,0.6337467671369426,102.9994174547362,8206.413747118437,4.657465250745774,227.5789602608594 +2023-08-04 16:33:25.164063,1KZY3LDI,-0.04631207455942632,103.62766378192659,11808.660325245915,9.018496552990328,22.930724766164076 +2023-08-04 16:33:25.666440,QT12IX7O,0.6691933460888748,102.84281256306453,20430.147920531035,11.7539123741652,65.68472131111122 +2023-08-04 16:33:26.168672,53Y2968W,0.3631656592838677,102.2054409895526,1486.675971598008,15.9747144411655,230.89490161099778 +2023-08-04 16:33:28.169084,EW03S8RC,0.9911570379941999,104.66771001446875,7833.8915333735795,23.126016668808134,46.25920268013905 +2023-08-04 16:33:28.675577,30JZ9MR7,0.34348286884399815,105.62077398208878,13874.190341215053,0.14459097522660969,274.83418959286917 +2023-08-07 10:54:50.905603,UV19K6WN,2.0491785428043405,103.52046781881157,2212.7737409428523,69.19202201148354,64.08104741523717 +2023-08-07 10:54:51.408818,5UA2VRMS,2.814065180093099,102.90142293177769,2645.2541230955653,53.35086175206122,4.486300655338653 +2023-08-07 11:06:56.087804,4NCMRS8Z,0.6012662781213045,104.14626124300818,1747.1706312674605,74.71765606316538,267.95486320149394 +2023-08-07 11:06:56.590957,FKDBQH7W,1.1193392998204172,103.53412571511308,3487.3951991791587,111.65548819815206,48.43029494196571 +2023-08-07 11:08:58.552657,CHD95GZL,1.5410718760977193,104.53381615487392,2077.3900230165086,51.23662284667846,93.14362436064208 +2023-08-07 11:08:59.055881,AWEO8UT5,1.11939073428533,104.43292171758189,2589.5610500345792,10.414977469077584,93.87952942303532 +2023-08-07 11:08:59.558146,AR4NDSZ5,1.1866823983852188,103.99285642225396,2879.7260806352365,4.213933774479759,175.06278958207076 +2023-08-07 11:09:01.028418,IGYWNVKJ,1.813502304611318,104.22102586265686,6788.023126214931,235.96495496927562,199.6319160885713 +2023-08-07 11:09:01.531731,QW32DTB7,1.9648443220088823,103.85969543842918,5394.458959832362,303.21073301968363,49.434582184720625 +2023-08-07 11:09:02.033857,R30GPJCX,2.4026704078083236,104.1787969970416,4500.5344432574475,369.59271405297375,351.86749604832016 +2023-08-07 11:12:08.444635,HL4W3CM2,1.3521,103.8198,1139.1999999999998,260.8888888888889,113.0 +2023-08-07 11:12:08.946550,MQAYU09O,1.3521,103.8198,681.1999999999998,271.8888888888889,8.0 +2023-08-07 11:12:09.448102,IJ0L1CYD,1.3521,103.8198,150.19999999999982,49.888888888888914,88.0 +2023-08-07 11:13:40.815309,J6LQK3FC,2.200363741873999,103.48448353659191,8623.008422474395,172.83294972185897,326.1500044990125 +2023-08-07 11:13:41.317989,XM75UHYR,3.0880216206565443,102.81704123603252,5972.648097016285,48.38889710657992,109.9527956738142 +2023-08-07 11:13:41.820271,29MFSG05,3.40471804089689,102.34145963740336,737.5019739685304,55.23783659909539,167.13122944656337 +2023-08-07 11:13:42.322556,6BMCE8IW,3.5292646431227466,102.17043018528392,717.102742060011,86.12874197356544,38.13489907586688 +2023-08-07 11:13:42.824891,1L7HXOJ8,3.9721599579990925,101.211774398596,771.9542384202307,106.13204530205608,64.02288683335229 +2023-08-07 11:13:43.327172,HSYVUEIP,3.739953842560384,102.07935714475444,1162.393272378177,182.78954368635547,88.99220067292009 +2023-08-07 11:13:43.829474,UG12CZ9D,4.37529501011714,102.37429611740319,182.42908259426417,154.4414604054198,12.968164039753105 +2023-08-07 11:13:44.331873,VLDB0743,3.614569589088079,103.03468717003094,23.195405409780477,140.0826498106268,335.1665938088575 +2023-08-07 11:13:44.834211,5FN7Y1JV,3.4437366474135906,103.47242161556012,9.007221293624529,88.36449614271432,330.42635770521326 +2023-08-07 11:13:45.336552,Q1UPHWTO,3.6088902391100666,103.3811807677419,1.1636240580940935,51.68931117730492,146.71749231591662 +2023-08-07 11:13:45.813808,9EGTHYXM,2.8996517055146978,104.00042537675363,0.10632236002589446,6.356526691463067,86.26096432888608 +2023-08-07 11:13:46.316121,GI59R6BU,2.621549992745146,103.92362110988246,0.187585450729401,4.365827577396224,65.74027303763017 +2023-08-07 11:13:46.818438,FZCG5SBM,1.8252774974537342,103.77914138167229,0.24371959992675604,3.819034074467985,307.63687417998943 +2023-08-07 11:13:47.320785,4XEALBMU,1.4651265280079873,103.93589613265118,0.3500887345824728,6.916836626822082,310.35376329717513 +2023-08-07 11:13:47.823068,JO9MYN3B,0.9528009355998301,103.10791345012113,0.3579548827299007,2.978793644801434,260.8182227475704 +2023-08-07 11:13:48.325344,E10OZ57Y,1.8170519111040908,103.61087952865056,0.14641919413556267,4.921225226146646,209.39745162735255 +2023-08-07 11:13:48.827698,AYKJ9HBU,2.383461214420082,103.29094455665772,0.27814885906811854,6.420358815809537,84.11855609062712 +2023-08-07 11:13:49.330049,SQLAIPMT,2.3051107630092376,103.58657082120207,0.01108629035198061,11.23279835239487,187.0247373282665 +2023-08-07 11:13:49.832397,0D1EQ4ZT,2.4947149972236184,102.88378204583091,0.013622969426553824,5.156326607131362,152.98767625692813 +2023-08-07 11:13:50.334778,EKM459SJ,2.0395279970194724,101.91748431079955,0.01400051533180704,8.822793091692613,8.508083856959274 +2023-08-07 11:13:50.837168,92OS043L,1.7977666088652449,101.6576331514823,0.009184322475123588,13.067784707049187,180.19501913144865 +2023-08-07 11:13:51.314377,WXSLHQOA,1.288486830687802,100.74277633254782,0.01751986153377263,23.535881300599932,23.844523016092694 +2023-08-07 11:17:26.130957,0WVRAF4H,1.3176546184931608,103.79113890603752,2934.3331000753183,59.98588131111306,9.220044795853397 +2023-08-07 11:17:26.634044,TZ4YS2CP,1.4208649280948336,102.79332013531655,2047.9942338592696,6.478346334091171,203.64931751412436 +2023-08-07 11:17:27.136369,M8UC5P32,0.6562540055632826,103.36775239767127,1224.3219484263432,2.9492044246735305,261.1396449749925 +2023-08-07 11:17:36.232507,SICJ1EZA,2.1796669922516667,104.81058876094978,444.495228843467,203.78211952070515,272.8724363372641 +2023-08-07 11:17:36.738001,538WOI1M,2.818966510628326,104.92471193646719,364.5908023196773,200.27443605409664,258.33001780059294 +2023-08-07 11:17:37.240203,AGS8CTDY,2.4797449883989664,104.40058253404501,641.3019378614698,59.23211609345478,67.64160625792204 +2023-08-07 11:17:37.742470,XSB8NLFW,2.2348671287991126,103.66412817533397,482.87233450717434,5.799548611138,41.821476546487816 +2023-08-07 11:17:38.244731,5IQTCX73,2.1048343254820994,103.64312702372231,685.1330982789206,9.44748526007213,251.35484024969307 +2023-08-07 11:17:38.746999,PC1VEYBR,2.938534739900838,103.60021382547154,959.2551861835062,17.324980267491526,85.16845377707062 +2023-08-07 11:17:39.249295,FQJM87GX,3.5297616598919896,103.22681864069018,189.54274557333213,24.882509076337413,300.8515510082325 +2023-08-07 11:17:39.751664,7B4JNRX3,3.9611621293992334,103.6192217158575,145.08020170235588,27.42145030870069,337.6015463864647 +2023-08-07 11:17:40.253987,TVNS8IPK,3.3251740398611678,103.06759381685868,11.701665030340735,18.941067104180807,342.58278408762556 +2023-08-07 11:17:40.756346,KQ9AJTBF,2.7521348371774286,103.3847144886879,6.447264941002986,4.861419994926964,114.56450876231736 +2023-08-07 11:17:41.233517,JK3FV7O2,2.827292013314217,102.50784774341454,6.218208314597949,8.343781646708171,228.068214441019 +2023-08-07 11:17:41.735800,ETBWS0K1,2.2330632449294257,103.08738714151242,11.47773806655437,2.8053743411290473,273.86738257012564 +2023-08-07 11:17:42.238056,IZD9BRQ1,3.181617800903337,103.21361683518383,16.016100377815196,0.6992635254771677,317.26681249376554 +2023-08-07 11:17:42.740299,5JDFHA7Z,4.068057113859431,102.26601122755831,2.4093039262054443,0.8963058887370572,43.70822742767632 +2023-08-07 11:17:43.242540,UR72ZHQL,3.7812514337639165,102.59192675888316,4.600335944855853,0.16600834168324674,348.31216488776624 +2023-08-07 11:17:43.744763,DMKUN2I8,3.6919467634813437,102.76060524218138,0.7879417807326692,0.17027891753114396,209.92012948949912 +2023-08-07 11:17:44.247084,PCQ7UR2E,3.887862595279267,102.75580394793006,0.8177324322103405,0.023653879775824255,135.7955964597162 +2023-08-07 11:17:44.749391,ZCNRKGJ6,4.355536503396657,102.48056765864732,1.247587835415091,0.04442767974333637,62.54484292412883 +2023-08-07 11:17:45.251723,791RLEWY,5.350060920425047,102.49156047238829,0.6007911986779461,0.02604555737813916,345.94863578948 +2023-08-07 11:17:45.754054,73JNU6MB,4.735534787842727,102.01478539194933,0.7822757959278018,0.044623036273588504,180.96868492203657 +2023-08-07 11:17:46.256382,63UWTKPD,5.334583006479669,102.84806868078351,0.6752716701255105,0.010327753133706943,21.530117853181196 +2023-08-07 11:17:46.743245,9TMI3YQS,4.571169532874709,102.45345545608048,1.0221584173073481,0.01744773002569094,309.35547794065263 +2023-08-07 11:17:47.245470,2SV46LJP,4.022557268381585,102.30716099400767,2.0134673417112,0.0016703178316966848,139.71225638421993 +2023-08-07 11:17:47.747717,MCZFBAYV,3.388297889397939,102.42634438730919,0.8349574948817173,0.0012407934201601333,6.058400575399105 +2023-08-07 11:17:48.249958,APVFZMKJ,2.6415644818293407,103.16037808824903,1.1028177582882042,0.0020297096011673435,0.39605232595494044 +2023-08-07 11:17:48.752216,NCM5TULP,2.421190468948068,102.2144293746889,1.5167021167970067,0.0035229583967661413,39.473163679443374 +2023-08-07 11:17:49.254476,INWF6G5T,2.7195099182349307,101.55225289084616,3.0071881039938115,0.004037818196071433,345.3482198599094 +2023-08-07 11:17:49.731651,K3IYESXW,2.5847353825005417,102.47739182644303,1.174558774168525,0.0021969425648676873,209.5708364738864 +2023-08-07 11:17:50.233897,8IULRQMC,2.6467855119208394,102.53060496131783,1.4848266219779345,0.0021953217117546956,285.65038174667643 +2023-08-07 11:17:50.736142,FR2D0GVC,3.5987286041831488,101.8801150739188,0.6260310086269938,0.00288070296523094,119.9674077626068 +2023-08-07 11:17:51.238403,FY798NCT,3.2411274464195294,100.9364960202004,1.1635322347916095,0.00015941151321039902,220.15514439131238 +2023-08-07 11:17:51.740664,9VSD8041,3.658171687906631,101.54843257606365,1.8462593997280115,0.00020797472774606104,305.59868282489856 +2023-08-07 11:17:52.242911,D816GKZ2,3.472724880567342,100.68109255221215,2.1241210902719914,0.00013292368536417683,56.31267144221823 +2023-08-07 11:17:52.745121,P4JVRM6U,3.5457194694777683,100.43143454713095,0.7509424952280577,3.917664162961891e-05,31.33630431120514 +2023-08-07 11:17:53.247380,5NJGODLP,4.260868035061867,99.66259131916188,0.3316354266999509,3.7143814045114906e-05,40.78297884961148 +2023-08-07 11:17:53.749623,AULR6QZW,4.2464897113585955,99.32580139094556,0.2682462380345517,6.428050691454108e-05,278.9708091808796 +2023-08-07 11:17:54.251883,TB1E0UXC,5.066106368616113,100.16961100101597,0.2734789551718411,5.5462420645802856e-05,164.145258492572 +2023-08-07 11:17:54.754173,ABVD5XTK,5.299552484319734,101.16895541286063,0.5274418872554343,3.104014410254012e-05,203.13159855573537 +2023-08-07 11:17:55.231372,C7E1WX8Y,4.6560714298570725,102.03397259446429,0.369010310556326,1.2476556557574608e-05,58.54848651790246 +2023-08-07 11:17:55.733632,W89OIABM,5.181140350414671,102.02399779159113,0.5111770742433864,1.401101176540695e-05,146.70357654589424 +2023-08-07 11:17:56.235911,XWA6MR5I,5.263860325506919,102.79758205858211,0.9363447231194992,6.630916913294061e-06,32.67184039502433 +2023-08-07 11:17:56.738168,7QK23OE8,5.497930097094759,102.55347493227755,1.79761613698284,7.394293391701742e-06,144.67700884728288 +2023-08-07 11:17:57.240380,8I9LZK7B,4.6480119328736915,101.67047342728581,1.070122680953378,1.3874220433297471e-05,154.92135857062337 +2023-08-07 11:17:57.742619,9I47MV52,4.832475850134538,101.6217491082952,0.926364134002938,1.576475856967703e-05,212.95483216728655 +2023-08-07 11:17:58.244935,OV5E6YS8,5.040729740443229,100.70385978213884,0.8670820777721048,2.9093337883568994e-05,129.6105265843056 +2023-08-07 11:17:58.747154,8CDZ3BI2,4.5261541491877235,100.33874265682715,0.4065408374225817,5.5159810893451824e-05,347.229399224648 +2023-08-07 11:17:59.249416,C0G3OMJL,5.432298431882937,101.0361154353447,0.48587460325387627,0.00010503279695514814,19.62347178465302 +2023-08-07 11:17:59.751631,1IR90FET,5.918478817327094,100.9513894576563,0.4350753062375253,1.157654914072394e-05,101.89440627089917 +2023-08-07 11:18:00.253991,3M6PFAH8,5.491709386240076,101.10252671639381,0.772036662958622,1.4455259104871952e-05,113.19886077323177 +2023-08-07 11:18:00.756298,P0VBNWE8,6.137151954552506,101.19851435137497,0.8903960120776492,2.1285304793164872e-07,182.2063034722047 +2023-08-07 11:18:01.233466,F69TZPMH,6.630682646505829,100.81631167325519,1.1669761078034424,9.134191865679447e-08,320.481549972888 +2023-08-07 11:18:01.735656,AQBXTHUK,7.382220802122178,100.88334863225383,0.7749096356755719,1.7741825406369794e-07,283.823584397001 +2023-08-07 11:18:02.237918,SVHM2RLY,6.866899658494091,101.3998140983618,1.2993636144030143,1.5510796124562148e-07,134.37750378468212 +2023-08-07 11:18:02.740173,HLDNAG4Y,6.251770434079205,100.739829606973,2.309817311050851,4.737223050990655e-08,294.59486557619454 +2023-08-07 11:18:03.242342,EMYH3J5A,5.290310195085674,100.8772134745051,0.5003167915000741,5.94893821960827e-08,292.46771122474865 +2023-08-07 11:18:03.744620,Q91GI7T3,5.7919163819296235,100.44937286417709,0.707534633388191,6.104802376821212e-08,74.30788998898743 +2023-08-07 11:18:04.246804,MZ12L6U4,6.6289224790786605,101.07059226476557,0.23218602001594502,3.662785546959333e-08,97.59857824303205 +2023-08-07 11:18:04.749049,52R6UXZF,7.464812091370448,100.13580987012847,0.272325689380771,1.9031410428234095e-08,14.590336179374617 +2023-08-07 11:18:05.251239,JXTYMWLC,6.688690478341014,100.26325129435105,0.37607375707904744,1.1881740232448644e-08,32.85881187482682 +2023-08-07 11:18:05.753390,TD1JQXA0,6.669861920840069,99.35060762892265,0.5777023434926419,2.145685812316193e-08,74.40112071911653 +2023-08-07 11:18:06.255650,G6HONUV3,6.485482114094952,98.48307399105387,0.4107442899185332,3.4896690816244086e-08,270.1714354942 +2023-08-07 11:18:06.732801,WZQSF38L,6.19482383692919,97.76681671756427,0.30216946371744,1.2446945573366731e-08,135.82671013653487 +2023-08-07 11:18:07.234912,UNXVMYZ2,5.493350081006857,97.69003694268908,0.4726230588704462,2.0674522951578308e-08,36.405152896146205 +2023-08-07 11:18:07.737130,U5V3QY8L,5.385629368534823,97.01890648961206,0.7048993161889948,3.878941323480005e-08,241.49810614071097 +2023-08-07 11:18:08.239376,BF6WVJS2,5.469480799128486,96.07918609362139,0.826747212762879,2.5526144557551274e-08,153.65412078859094 +2023-08-07 11:18:08.741584,IZ34V2K5,5.403911463456865,95.71603559374984,0.8743086192928343,2.480552993648189e-08,279.44574829282044 +2023-08-07 11:18:09.243786,5O1RMDQK,5.315184972953635,95.18119725228023,0.7174814254387261,3.7444789918758127e-08,100.20045820200738 +2023-08-07 11:18:09.746035,I81LYHFU,5.963374021229176,94.19375118419116,0.9723242737576208,3.827707010919018e-08,208.96564699653788 +2023-08-07 11:18:10.248181,6QFXZCA7,5.150004329480163,94.53159653863199,0.6252059165447758,1.3084783653287549e-08,86.20207737717192 +2023-08-07 11:18:10.750355,9TN5YP0A,5.473767905488227,95.16708747098244,1.2289575598939826,1.2344950765864086e-08,49.56283983485042 +2023-08-07 11:18:11.252561,W29D4ZGY,5.38415961287191,95.91323453177907,1.7692493506655576,1.1152704671927261e-08,264.8942213160487 +2023-08-07 11:18:11.754813,GP2LW5DK,4.403992197711688,95.98393422207441,1.727415804811819,1.3658803892131061e-08,355.61687596828597 +2023-08-07 11:18:12.231947,KQ0XP25M,4.277035506458413,95.5001791675586,2.5253378675965146,1.6254782200303465e-08,239.63445192282097 +2023-08-07 11:18:12.734183,6HJ2QXPO,5.153862147690652,95.27144486722038,3.484310220690143,4.357693585150397e-09,62.11518023083397 +2023-08-07 11:18:13.236451,Z6FU32YB,5.44351907787541,95.98779642501393,5.7226099830589705,4.606271691766271e-09,97.50853841256537 +2023-08-07 11:18:13.738641,68SLW9ED,4.593763152184978,95.05886839860106,0.2664034831014517,7.685174109521775e-10,105.28930369218462 +2023-08-07 11:18:14.240827,VATZCBNF,4.387282068477248,95.21088147443088,0.08423980009732315,1.0974741639245262e-09,291.51399300704895 +2023-08-07 11:18:14.742994,BPXWKI0V,5.316649544227039,95.06070257183107,0.1342270193331031,1.0946741250450753e-09,334.9752790758013 +2023-08-07 11:18:15.245149,LCN9Y138,5.635978948508664,94.33099968685376,0.2307363642595062,1.8457166501451107e-09,18.889209214206403 +2023-08-07 11:18:15.747406,MNLZVD9U,5.608336930741408,94.84168671102455,0.29246764529781843,1.0400913001356056e-09,303.33021737633806 +2023-08-07 11:18:16.249593,XUPH80NO,5.866502287864239,95.74372730390212,0.47121810546071086,1.718455789197735e-10,68.73752759850231 +2023-08-07 11:18:16.751746,7D0SWKIG,5.643247717911022,95.71412119587897,0.8527130481566325,1.6406044488632242e-10,208.32684927602477 +2023-08-07 11:18:17.253959,YDIPE2R3,6.28281870967314,96.5118705455215,0.8557882023823429,1.4857392309707156e-10,219.72602913697168 +2023-08-07 11:18:17.756129,6ALY93D0,7.199830140359286,96.53031624659168,1.4258344179098652,2.0923529565210773e-10,327.00370102301883 +2023-08-07 11:18:18.233288,QMJKXLT2,7.128954353754704,97.38600909572001,2.0026191874502755,5.879870230345662e-11,100.10987372612215 +2023-08-07 11:18:18.735364,VEGD34RM,7.646086495661898,96.41337047033058,1.5473116524918349,4.8338016797996456e-11,320.9194812731576 +2023-08-07 11:18:19.237483,B0H9IWR3,7.972092319654005,96.43353339446412,2.138600406975541,6.795394292798319e-12,193.26502530970345 +2023-08-07 11:18:19.739661,9F38DBR2,8.660556278961064,95.95565641226095,4.043965081325104,6.3402132445516484e-12,233.17094707000325 +2023-08-07 11:18:20.241916,9YRTJL7A,8.046629228097506,96.16411056317057,6.080171249603284,7.148986434351242e-12,51.48822586144274 +2023-08-07 11:18:20.744136,XTN8ZMIP,8.003898867720054,95.69365331437874,10.658273797971324,6.912211908198038e-12,285.9913101337904 +2023-08-07 11:18:21.246370,X6ZH1ST3,8.331052308933305,96.12355947721699,18.005046055323017,5.563185875602351e-12,334.1253801299665 +2023-08-07 11:18:21.748590,DL2VN41W,7.587723268458623,95.14364628359857,11.502648305491928,1.0190284363191124e-11,148.1829601078889 +2023-08-07 11:18:22.250792,VC9U6E2X,7.711640802562786,94.7342178995655,8.128110931431495,3.4557214299139874e-12,214.0408117093474 +2023-08-07 11:18:22.753000,W6ZSCIBH,7.3399173432162375,95.14688321850838,1.6786053712892528,5.0944386343952865e-12,262.317196547016 +2023-08-07 11:18:23.255178,4RT6OCIK,8.012520770004382,94.5031755720956,1.7035711892507261,5.102310833864846e-12,93.36622485574605 +2023-08-07 11:18:23.732285,Y6V8UMNB,7.2548048605939055,95.370760865248,1.1857947935015964,7.327584127086814e-12,93.84684525878247 +2023-08-07 11:18:24.234515,RBK9XEVZ,7.00833676886877,94.39511642949999,0.6251533183098446,6.652167201288664e-12,327.091369341841 +2023-08-07 11:18:24.736779,1VYF9JZM,6.507930231983718,93.92916547033379,1.0916234528582993,4.665133601811524e-12,68.00057125934154 +2023-08-07 11:18:25.239018,9AJCDQV8,7.35767887079392,93.05403609294937,1.8608071099672292,3.8860919242769245e-12,315.0390172791914 +2023-08-07 11:18:25.741223,U2HPRTCX,6.4338810590818625,92.53323482202465,1.0473930148412327,5.3019857655443705e-12,341.1710367257622 +2023-08-07 11:18:26.243452,EZNG89AD,6.081229099637389,93.48226409479214,1.4236513552237182,9.142891498209646e-12,20.709232587740416 +2023-08-07 11:18:26.745562,MWE2K1T9,5.160313184146828,93.62716588502747,0.39345600673547,8.301406843076664e-12,152.63304962533147 +2023-08-07 11:18:27.247624,TUYAELX3,5.138512481085208,93.6656002524709,0.5261632430661662,6.704156202447662e-12,146.8269866105079 +2023-08-07 11:18:27.749783,IX4DZL6U,5.740770085230532,94.57191651448457,0.14673569314330215,9.701491397440929e-12,105.83886592960033 +2023-08-07 11:18:28.252048,UWV1HBAK,6.3147408947091535,95.41237280357082,0.15615860819087962,1.660398292837698e-11,240.59823589248634 +2023-08-07 11:18:28.754163,YJG7B6SM,5.708091612639642,95.76554229262533,0.15968601563974158,2.553647645304863e-11,248.93469146614297 +2023-08-07 11:18:29.256275,JBRVYE5I,6.151508055040246,96.15739337797366,0.16119209079305974,1.3729114935569633e-11,325.834268916868 +2023-08-07 11:20:10.162807,3L98QRE2,1.8916869966471075,103.71055091261586,1594.0179157262373,40.837025349607984,318.1282648168087 +2023-08-07 11:20:10.665162,0FHEGQXS,1.3256246987569733,102.96984888645328,2786.171687204867,59.34359199988441,86.6494186854602 +2023-08-07 11:20:11.167227,6CJ1R0KA,1.086520062885689,101.97808578478225,2561.177115305169,62.998505695707586,181.1354865187327 +2023-08-07 11:20:11.669417,TX9Y1QR6,0.921543254129841,101.52092998486778,2132.532814894363,76.88036720545557,133.40918724457777 +2023-08-07 11:20:12.171636,9Q2A5XU0,0.2970721090390145,100.79506127363844,683.6299567264425,94.4937526139157,14.415813146895573 +2023-08-07 11:20:12.673875,XH7AKDT8,0.16456340114577483,100.72638989346058,972.0875492053906,118.08685496519972,227.94387773200953 +2023-08-07 11:20:13.176127,S1KI2R8W,-0.11135699046112779,100.15592222357603,35.25512295352746,72.19405972276363,256.8874831249845 +2023-08-07 11:20:13.678495,VIXK6FHN,0.5154379630434172,99.43884393417106,31.178584326532253,16.05312931363806,219.17301824661365 +2023-08-07 11:20:14.180757,LPJ6RHNY,-0.1671297899280213,99.07667299823618,34.119775645542546,22.822604239452232,310.4693075088462 +2023-08-07 11:20:14.683021,538XLSWZ,0.34358183278354315,99.8965776322984,63.06397387509466,15.534907378739904,195.38971396903423 +2023-08-07 11:20:15.185229,MKJUC163,0.2762836270023088,100.26541371306466,116.64532209978323,7.97402368628224,316.87225418318883 +2023-08-07 11:20:15.662321,MTXED8HZ,0.9206391759873005,101.09921542826811,24.71559720551852,14.304309259823691,327.3619963933424 +2023-08-07 11:20:16.164555,1JPE9BRH,0.42866208990923815,101.69889729128263,5.604641352912946,18.95259883808543,81.73459276855067 +2023-08-07 11:20:16.666811,OCKY8UNR,0.6648915617061326,102.62812945018189,6.900238862281777,21.302056024418103,261.0666783198094 +2023-08-07 11:20:17.168947,S5GDXMH6,-0.2544037865246884,102.49469376908687,11.52840608913494,38.243266573111356,55.26862159463201 +2023-08-07 11:20:17.671047,OTQ2IU64,-0.5556240736310141,101.71305233370826,14.342847438041947,56.912163185058965,147.83929137063532 +2023-08-07 11:20:18.173187,O2PGVA1M,-1.1495035910657838,101.26305514032546,6.407807345293944,23.91517583228365,338.5757888183085 +2023-08-07 11:20:18.675367,L043B1WA,-0.33098970181577725,102.08783462050476,12.458117039546577,25.049676596901115,187.04580080115932 +2023-08-07 11:20:19.177544,9VJMK58H,-1.0284339612024287,101.51725154996141,3.3876365132930797,23.26663346090306,287.0165283429232 +2023-08-07 11:20:19.679618,XT78FOG1,-1.5811883637459532,101.0116676177443,2.000377531195622,39.097979960682856,147.1098977263224 +2023-08-07 11:20:20.181862,FH867C0M,-2.455787587591913,101.46154287504677,3.4956510025631222,12.940924950277093,92.57150515936405 +2023-08-07 11:20:20.684014,4STJKUR0,-3.325761159659165,102.37640834620697,6.706321535424336,20.15260621530444,103.73186538839259 +2023-08-07 11:20:21.161157,X71C4TRY,-2.5942237517405884,101.41846214758384,8.615475800547433,7.89305810454864,199.2504817966073 +2023-08-07 11:20:21.663321,OS1RAF2B,-2.9847090566666425,101.7415175540428,11.87449256666056,11.486735451594049,206.30718901962362 +2023-08-07 11:20:22.165527,UGIFLZAJ,-2.356038445537025,100.88425241352407,22.546981188719972,13.028674169865623,30.0794080283913 +2023-08-07 11:20:22.667677,2HWL7K5I,-3.104409949356297,101.25376464679384,25.782903023268414,9.383880572294464,237.66211595401967 +2023-08-07 11:20:23.169814,TH1EIKWU,-2.3005577539085387,101.97982996261105,2.852224862281492,11.704371920272218,233.9596151509645 +2023-08-07 11:20:23.671960,PGTM7X92,-1.8679346505602135,101.6682756376658,1.488694519502058,8.987147038751065,6.299483669781921 +2023-08-07 11:20:24.174145,5DRXNVYS,-2.834644496652381,102.44815185645348,1.388742282359412,5.987438438846622,278.1960747791763 +2023-08-07 11:20:24.676329,9MDWHKZO,-2.4117957224229447,103.11497170734269,2.3574613406930363,8.208458621731776,209.34095126536636 +2023-08-07 11:20:25.178485,J9WVZMB8,-3.1932340811366897,103.19298657912933,3.0032068031129944,9.55552884979586,199.58893073820082 +2023-08-07 11:20:25.680581,BEXIPYWT,-3.2290874403543,103.05932465331881,1.7407191279424186,14.896183976843174,135.80872240177536 +2023-08-07 11:20:26.182859,NOJCXAP8,-2.5192265561041314,103.45157436728616,1.427744594044382,17.305687878460997,279.5803829167354 +2023-08-07 11:20:26.685027,PQBC5G98,-1.6613044805425716,103.96025927055705,0.4984809408262505,29.84990865929332,187.97400363091492 +2023-08-07 11:20:27.162168,XKUSZVO1,-1.1070077106118579,104.89911484200947,0.5867149275293048,9.876504829222927,148.93464465354953 +2023-08-07 11:20:27.664304,NFV2JTUX,-0.35927812295867567,105.03130305998079,0.4584309859517975,1.6338822053852802,86.69907555631232 +2023-08-07 11:20:28.166504,GR4LFUE7,0.3475911976755184,104.5426587597708,0.7119933648293619,1.1010190903297903,120.19027365815703 +2023-08-07 11:20:28.668620,3S78G0W1,1.1826574787061768,104.89653099429407,0.9581908606371748,0.06811038454883445,259.9518085195389 +2023-08-07 11:20:29.170729,0ZKVGJQT,0.35441162309071794,104.34518983863776,1.3498509655701552,0.021022240612483874,65.10515668244636 +2023-08-07 11:20:29.672901,ZO8KNPU3,1.1114446370007713,104.37986309232389,0.6564442347837322,0.024063078483674713,3.0339402531657242 +2023-08-07 11:20:30.175029,TNK5XGP2,1.4124861844767629,105.04078221701667,0.37005682969952003,0.028362087632381256,59.78138587699514 +2023-08-07 11:20:30.677100,VS0U9J26,1.731796037966734,105.37801631173927,0.13449136185215163,0.05103185824031609,212.7528113770097 +2023-08-07 11:20:31.179307,K6VZ4DW5,1.4081817404376835,104.49977017549703,0.24705055673828497,0.09340168474313552,236.32801324729374 +2023-08-07 11:20:31.681509,93O0HF8V,1.8983738989317505,103.9587524124789,0.2674177879533482,0.1445031137856223,28.402776909272006 +2023-08-07 11:20:32.183623,KT4W165F,1.186928768539778,103.94289064558332,0.4106003122188135,0.06206569291309877,211.88840322325706 +2023-08-07 11:20:32.685772,6EJZ340F,0.6636839816385749,102.99810095026405,0.5519199661037059,0.12072731535546169,250.80936586550075 +2023-08-07 11:20:33.162879,EUJHGY2A,0.33112925623346,102.16070543711666,0.13322159559271235,0.23150459970638768,5.193914285121252 +2023-08-07 11:20:33.664979,G1CNOBYR,-0.11675553794364157,102.11525182982314,0.07957750484689584,0.11911781349711181,318.07205544287524 +2023-08-07 11:20:34.167212,G9UVYPCO,0.03621126314645484,102.87541572465562,0.0389907707763953,0.05573755860721702,132.33087949827154 +2023-08-07 11:20:34.669319,6WG9Q0Z1,0.2522828386244791,102.23807442739447,0.04860635677968268,0.02690416546894471,53.62887277773319 +2023-08-07 11:20:35.171447,S1YA32ET,-0.3690254268762463,102.61597278959516,0.09681206030996409,0.03536431878679369,268.67050627647967 +2023-08-07 11:20:35.673627,6O8AKX5U,-1.1068866493226803,102.3812567767927,0.04341591918074583,0.04597890657304636,82.03569233341238 +2023-08-07 11:20:36.175765,V2OP64KU,-1.7549896888522318,102.15453616208534,0.07297584333320972,0.05212919165879933,129.20433817196556 +2023-08-07 11:20:36.677875,H893CUI7,-1.7822779255086783,101.93732948288388,0.12931768369432994,0.06317543407956766,149.7010401716602 +2023-08-07 11:20:37.180048,OQ2X8YH7,-2.6365225768290452,101.11830161903143,0.07603934891739687,0.10193829569421932,331.30250595178643 +2023-08-07 11:20:37.682297,O0VGW7EM,-2.6085124781310816,100.91942920554791,0.10474902376306738,0.0927281933391471,315.8663827830326 +2023-08-07 11:20:38.184528,0P8RDSB7,-2.3564135663513386,101.43893038830177,0.11463068740331792,0.15616497929903647,341.6114527270721 +2023-08-07 11:20:38.661679,C3JVBYDE,-2.4684981389188665,101.13110851603138,0.016392884993157997,0.007670163002207631,20.397478284870544 +2023-08-07 11:20:39.163872,EM8IO1CL,-2.1220343372684276,100.960158961795,0.004924154137392826,0.008710952243463577,107.41106714093208 +2023-08-07 11:20:39.666070,NGL1OYE7,-1.3286863868750374,100.6645088863849,0.008973703876747754,0.003211694030385597,24.944460559507263 +2023-08-07 11:20:40.168222,LRGSOB5F,-2.2005176847582035,100.92134368619422,0.003269066113572348,0.001412340390519303,169.9284021507598 +2023-08-07 11:20:40.670448,0DBYH8LG,-1.802045776723439,100.08369634756654,0.00583423666082738,0.001095011382657523,36.51649703910107 +2023-08-07 11:20:41.172556,ORDNZBFJ,-1.5175254984062643,99.428809199032,0.004006420826851977,0.0007737757471158862,112.54774221978684 +2023-08-07 11:20:41.674632,V5P0UDTM,-1.767388515026504,98.58797715355787,0.002356362334438097,0.0014775930243709275,188.83722026064405 +2023-08-07 11:20:42.176848,3ZUJAM56,-1.8828753642252563,98.51591420026328,0.00034028392505913285,0.0023830977271329583,208.7097830448614 +2023-08-07 11:20:42.679042,2UMBPZHX,-2.6700908814329427,99.45831115208628,6.386160189257735e-07,0.0002026448341333688,174.2791013726528 +2023-08-07 11:20:43.181242,OZU4MJIC,-1.7566259765044663,98.8787113161608,9.884660380760714e-07,0.00014607906727814654,3.936083778403372 +2023-08-07 11:20:43.683401,BY6JGZM8,-2.5708984347432544,98.43659322934414,1.3238514116284357e-06,5.923000474367373e-05,177.1527494197337 +2023-08-07 11:20:44.185632,UYJH9SEC,-2.1963591553840143,97.79115678033675,2.54349462803767e-06,4.8304413617843674e-05,281.5318836287439 +2023-08-07 11:20:44.662690,XH95GPN7,-1.7571139111696226,97.71524106153444,2.362425309070611e-06,2.58785596273731e-05,20.916185547149837 +2023-08-07 11:20:45.164847,YLK02VC6,-2.0861999759027317,97.3413433219359,1.0674801376294268e-06,4.401691471573786e-05,296.26758967493487 +2023-08-07 11:20:45.667079,4EC5O162,-2.7700071408209084,97.4952828486077,1.5167154539166318e-06,3.549319869020762e-05,90.65710735423255 +2023-08-07 11:20:46.169269,0Z5EDM7X,-2.4380202302252085,97.54121796083473,2.8158810468491125e-06,5.009385986536877e-06,353.29448583557024 +2023-08-07 11:20:46.671520,RWXJ7QH6,-1.6958055640776322,98.5274286057878,4.83386310453929e-06,6.657395129646094e-06,63.82720243083418 +2023-08-07 11:20:47.173757,KQ5W1JH2,-1.6447845306318538,97.851503881041,7.045671115661678e-06,5.5278300607803435e-06,280.92464847756526 +2023-08-07 11:20:47.675995,GDS6IV0J,-1.7793644489680265,98.23428847763533,5.717434482471845e-06,8.937774785939764e-07,194.94651888475914 +2023-08-07 11:20:48.178283,QSW6F9J1,-1.8943565485490625,98.65442605855364,4.067625144754213e-06,1.1679017438268822e-06,312.6137670294637 +2023-08-07 11:20:48.680523,BWQEI9SY,-1.8473720080486553,98.37651666293124,3.844353680366898e-06,1.0564792991495233e-06,122.26622961564703 +2023-08-07 11:20:49.182784,C5BGPVE7,-1.0623909082002343,98.67297048856155,5.926199537558963e-06,1.1629911280184068e-07,0.4603939058135893 +2023-08-07 11:20:49.685005,M6482S37,-1.7051857440806313,98.3961850135858,7.227339651501503e-06,8.980891178860499e-08,111.57763799555886 +2023-08-07 11:20:50.162266,AHZ9238G,-2.5566894667113425,98.60751606848254,1.27518107391319e-06,1.5604821603684745e-07,311.24772266788494 +2023-08-07 11:20:50.664532,CNOD0RBU,-2.369899892936285,98.37979404246812,2.4359462475122034e-06,1.9586040579497022e-08,237.02812520520558 +2023-08-07 11:20:51.166758,MVKUIH5F,-3.325814022763555,98.08937186395997,8.502611276493518e-07,1.4037678227091867e-08,264.686031271697 +2023-08-07 11:20:51.669044,LXOAM0FN,-2.789162474922856,98.93529109677706,1.2955664832098287e-06,2.0572875384016027e-08,117.33292686645837 +2023-08-07 11:20:52.171323,9I4A71XY,-2.30560169207356,99.01081101503804,1.3233544588798354e-06,4.617499916731025e-09,225.23954686576673 +2023-08-07 11:20:52.673583,IAJ43CU5,-2.5499245124963847,99.15468564984913,9.385269668347375e-07,2.3323310216064016e-09,188.78656382019335 +2023-08-07 11:20:53.175844,30ITCM2Y,-2.222616377504816,99.05309011106695,4.6633301948459614e-07,1.2659849623062405e-09,43.833947125114264 +2023-08-07 11:20:53.678033,9A4Q538J,-1.8582604022539018,99.91165327453187,3.450533146689934e-07,9.051277769960752e-10,64.72441786766949 +2023-08-07 11:20:54.180303,JO5169KX,-1.1363789503230044,99.25005722934758,2.1355732637282576e-07,1.7429981825023755e-09,296.49028884635595 +2023-08-07 11:20:54.682545,ZF0J9KUB,-0.39810859749685923,99.06450577227267,1.9553929791920913e-07,2.3698523095782423e-09,104.69820425278397 +2023-08-07 11:20:55.184872,6PHK1RTX,-0.8954217829478985,98.95634868191618,3.144553531550494e-07,2.617649832922754e-09,147.37326216959144 +2023-08-07 11:20:55.661970,BRYF175J,-1.246713339854777,98.9993286056709,2.398013164515791e-07,4.081415760105896e-10,184.9128931434226 +2023-08-07 11:20:56.164208,236RYKC4,-0.26182629815847447,98.13716669529207,2.1717389954659286e-07,3.577146558579479e-10,160.79444167642873 +2023-08-07 11:20:56.666430,V5MU17JP,-0.12242251935015935,98.51454391196503,1.8971169351894175e-07,6.580445701749582e-10,107.28699105785455 +2023-08-07 11:20:57.168553,L9VYUN3O,-0.9135609061237309,97.84007953043648,1.300114636883619e-07,1.1296524378700586e-09,352.4762742894104 +2023-08-07 11:20:57.670736,WY4R3Q6X,-1.2991824111637689,97.0067004538594,1.8047746340330388e-07,7.895522699184289e-10,299.1269529734943 +2023-08-07 11:20:58.173027,NXTIM3L0,-1.154399698810311,96.87892884772161,2.3314959547657627e-08,1.0391120126362503e-09,86.79530673811803 +2023-08-07 11:20:58.675226,24A3V76P,-2.043665206009069,97.25590921987016,3.810300078416656e-08,4.8478733162415e-10,110.76096893734733 +2023-08-07 11:20:59.177454,4QIJFLE8,-1.3656506240343487,98.10551859601085,4.146830118756459e-08,3.332721129386537e-10,249.5035686205557 +2023-08-07 11:20:59.679616,WPKAMLZR,-0.636991078093079,98.54954328962422,8.214564358362312e-08,1.0824487905704352e-10,329.2809824218687 +2023-08-07 11:21:00.181852,7CUWJ2Q1,-1.3597263104471033,98.99382239656958,2.0581425943635927e-08,2.849924061585262e-11,353.45223593775233 +2023-08-07 11:21:00.683678,4MUWZN78,-1.2360732100877114,99.49675870812324,1.203564301138823e-09,2.8290344378997023e-11,82.41277439227298 +2023-08-07 11:21:01.185481,G8MRNPXJ,-0.966532576899571,100.3453904457994,2.2656956104237628e-10,1.944735050702677e-12,177.6535801355568 +2023-08-07 11:21:01.662001,MPSVDXZ8,-1.2917476852175998,100.91562459351988,2.4585091298585494e-10,1.566378735382413e-12,324.9026836155582 +2023-08-07 11:21:02.163712,5370Y26W,-0.6269037817642795,100.56052783467901,4.703839223441481e-10,2.6383704575861878e-12,144.76283146751155 +2023-08-07 11:21:02.665270,8X24ITEN,-1.3735303075530567,100.86836068288414,5.687834969825278e-10,2.0751034342388015e-12,66.18172031488086 +2023-08-07 11:21:03.167194,YWZ2HP3U,-1.107754311327624,100.41944841900167,2.4002387284398295e-10,7.273915981570011e-13,297.3632008490291 +2023-08-07 11:21:03.668847,ANTX75L4,-1.0153486390204207,100.03958940121046,2.434853219870989e-10,1.0347647062761202e-12,316.6529258283162 +2023-08-07 11:21:04.170376,9AO5HF1X,-2.013547627207238,100.1565882847103,8.489350213950129e-11,1.839839284606066e-12,325.0304323034737 +2023-08-07 11:21:04.671904,U6XISCYP,-2.4199909270156166,99.21727364130834,8.204027360825383e-11,2.9394355894528237e-12,4.634731813260032 +2023-08-07 11:21:05.173413,6R7MGBFV,-2.51510801252999,100.034587964186,2.5556556339110727e-11,1.27765265260799e-12,85.86834364387505 +2023-08-07 11:21:05.675125,AV38BJ56,-2.5210587569761174,100.58495966415995,2.600541081435198e-11,2.4972489523849474e-12,293.6197780443031 +2023-08-07 11:21:06.177343,OHEA1J39,-1.637838118826773,100.79091476444286,2.5213070788089392e-11,6.572845817188941e-13,154.20424857133594 +2023-08-07 11:21:06.678961,3QT4YAU8,-0.6911081153363419,101.49144417738842,4.4129970064594575e-11,1.2171315861048018e-12,225.21139145132182 +2023-08-07 11:21:07.180978,2LGQIP83,-1.6309461481654728,101.35654180841051,4.3661280691157394e-11,9.114364640686707e-13,203.26230756368966 +2023-08-07 11:21:07.683188,8KMC3XHB,-2.491820042447862,101.27324431912521,2.2616020639140098e-11,1.031540083825492e-12,3.7093753384981483 +2023-08-07 11:21:08.185355,RFT8M3ZN,-2.528701838371494,102.13648602994421,8.176987134539922e-14,1.0769766086849602e-12,329.223915810698 +2023-08-07 11:21:08.662444,L3E4XBT5,-1.9445842156280038,101.37475539265847,1.451435622554274e-13,2.4728161291265494e-13,186.3893566612105 +2023-08-07 11:21:09.164697,I49NRTE3,-2.4668634816330983,101.5176366293438,1.9911573869932785e-14,2.6302294822211155e-13,292.56553314284594 +2023-08-07 11:21:09.666940,VJUAY98R,-2.8280676087965633,101.47310344975898,3.6627988492690645e-14,2.666496450803412e-13,183.73250065449076 +2023-08-07 11:21:10.169083,T5PVK7WN,-2.383060254447349,100.53359462342739,2.2873885790798132e-14,2.1892585812857e-13,217.8726631038289 +2023-08-07 11:21:10.671339,NMHFKALC,-1.883912115329519,100.14026898537551,1.2963465289533051e-14,2.0244096587142785e-13,119.21219651331728 +2023-08-07 11:21:11.173588,MVOAFHT3,-2.365510889403045,99.20255229386498,2.3021964177244707e-14,1.613276419391189e-13,259.80647951645875 +2023-08-07 11:21:11.675762,2UXJMF83,-1.9689500873597567,99.20292750496404,2.729345099240501e-14,2.9181672323865595e-13,330.68684287506676 +2023-08-07 11:21:12.178013,MGNWSFHP,-1.2009199926845697,99.41282013205762,3.6094190909139156e-14,3.6460077072052155e-13,124.87779932407989 +2023-08-07 11:21:12.680190,QIV16GC4,-0.9697172013874327,99.1824787054942,1.999317060718376e-14,5.707512934702087e-13,260.1342971833633 +2023-08-07 11:21:13.182421,XW6J2IUV,0.0164304447904291,99.21362582444279,1.1312937996367812e-16,8.491973098102002e-13,85.12248709504036 +2023-08-07 11:21:13.684549,ZIGQ2SR5,0.308267643680713,98.94952867734757,1.2363744451771651e-16,1.6875550930892516e-12,334.1521951976466 +2023-08-07 11:21:14.161624,S3G9X2CM,-0.3658023194796487,99.13674069215905,1.0746739952312591e-16,2.2072318364468362e-12,276.315585955467 +2023-08-07 11:21:14.663784,C234A1SQ,0.014845160817240632,98.24655139257786,1.632380296194844e-16,1.085020147125117e-12,331.5472675631591 +2023-08-07 11:21:23.956420,50JZHKV9,0.8017283770870691,104.40806162405727,8020.413472974577,151.70885125794206,123.91244043876077 +2023-08-07 11:21:24.459604,K2E38WLA,0.39300058240590996,104.10040384836921,7094.737619180933,148.0402381684786,107.21466696821562 +2023-08-07 11:21:24.961758,YPU7IQB5,-0.48279116535576727,105.0195312943839,1185.0352802169546,163.82715616559923,330.7756975598437 +2023-08-07 11:22:10.657110,W9RC3JHF,1.121972128468813,103.85930048653684,7701.8782394307955,267.4003135397906,348.93777326823187 +2023-08-07 11:22:11.160259,GFJ46DEL,0.9809942332955117,103.6764718937511,14545.227723132864,471.50635929534707,170.35570832966516 +2023-08-07 11:22:11.662492,MAHKQ2LP,0.5096708027407493,103.82108937879231,17202.867764008388,74.62071797325899,277.75956560719584 +2023-08-07 11:22:12.164708,GPCXMN5V,-0.04373497663952697,103.7839809142468,21025.542389120707,130.05851970609768,269.3476061123698 +2023-08-07 11:22:12.666952,YKBWC3LI,0.038198636639403816,103.96268251552348,30909.30961727731,13.894294712617636,25.349991984480823 +2023-08-07 11:22:13.169127,VNSK1LRD,-0.8128868542708445,104.92859082925546,34117.909186551966,8.21100281388942,234.48507656679323 +2023-08-07 11:22:13.671285,JMRNGX7Y,-1.3053178462163904,104.59550306556953,64172.39741572045,0.5103458123955944,289.662573204586 +2023-08-07 11:22:14.173472,6O18MFCN,-1.2133244647917936,103.87477635785712,112868.52632991492,0.014923882891629214,314.67982651004166 +2023-08-07 11:22:14.675725,ZW5RGELF,-2.0663916237785873,103.95382937945689,12982.166065862752,0.0013039624402630678,58.88647945971002 +2023-08-07 11:23:16.417949,OI2BY6L3,0.6831988054523903,103.10020056852598,7119.323858762506,169.584783384614,25.32445378810193 +2023-08-07 11:23:16.920293,R4AL8CHT,-0.2663172368789697,103.6935376704354,12148.237518622336,284.02555001578446,154.3494923747939 +2023-08-07 11:23:17.422622,H4DI59AY,-0.2516829550392441,103.2073431366843,19325.710780150996,541.1176774135809,186.2936350282892 +2023-08-07 11:23:17.924928,EWJA9ZSC,-0.629297964716723,102.26304582309224,7303.00224157812,618.0976050856399,71.43102565900938 +2023-08-07 11:23:18.427245,7OKZPWY9,-0.7563078918369306,102.33733349594425,5854.667414349557,630.9728445533148,344.0621266396012 +2023-08-07 11:23:18.929377,VHI52EP0,-1.0952796984726638,101.94764378876694,1600.7554137049938,606.4680249382131,209.39264132929827 +2023-08-07 11:23:19.431442,6N72TIKS,-1.2784767236556935,102.22844955467515,322.4720324632269,638.0924762194637,51.368021121496554 +2023-08-07 11:23:19.933645,7LXC4OZ0,-1.2292190564433212,101.53701364982385,5.715858831224523,401.3837220876645,13.003306201229009 +2023-08-07 11:23:20.435927,VYBCN245,-0.3412492425974014,102.39144716692311,4.641308550219615,718.7945189107179,222.48586455171343 +2023-08-07 11:23:20.938073,JAKHSB6P,-1.2866961282424907,102.86564292685779,4.51249133394066,1251.7965390513211,228.56246845104334 +2023-08-07 11:23:21.440232,LBQ780XW,-1.6186107483533962,102.91646921168164,1.1384711218323535,1680.896050176515,104.45987151178213 +2023-08-07 11:23:21.917300,YZL2E9X1,-1.3726609998698134,102.37600013154892,2.198101119327441,101.19535082831408,75.06453892401635 +2023-08-07 11:23:22.419502,89E3XWVN,-0.7768073699970861,102.42174319269628,3.533344702589075,149.95920935498344,346.2409892191012 +2023-08-07 11:23:22.921633,Q0HB8K4J,-0.5937326243691534,102.37755229643517,0.3320500501125401,295.44614237835333,183.75136712277913 +2023-08-07 11:23:23.423831,LDKJHM9N,-0.3009876067109729,103.34781638771396,0.040485109087230575,306.4105126566632,85.23816650262137 +2023-08-07 11:23:23.926075,4PG3AQXE,-0.6019394040870356,103.09370014651714,0.008900254708262813,609.0983911166076,252.83543864720866 +2023-08-07 11:23:24.428262,SC7YBHXF,-0.6104728912030182,102.65033409702744,0.006948466416260426,849.5905947841567,170.2215142404358 +2023-08-07 11:23:24.930435,DK9S8LAF,0.07335178067483872,102.59595140368316,0.005695621233809878,222.9422990295094,65.77404335454247 +2023-08-07 11:23:25.432736,QUYOK20M,0.7367272852926066,102.3256787785864,0.00026214291882855484,305.186109686962,43.73852728041021 +2023-08-07 11:23:25.934960,CIVQ8FUZ,1.6040495452767856,101.94271720296844,0.0005057591342922128,38.288961392696706,196.4835014466877 +2023-08-07 11:23:26.437234,JCHKAP3R,0.9246014130223192,101.22242028285558,0.0008912350097046228,39.577340603769784,318.2594051323987 +2023-08-07 11:23:26.939507,DKX246WN,0.8092250559565035,101.66826158961851,0.0013398932538423456,41.43606325005098,359.37118493468495 +2023-08-07 11:23:27.416641,KXRLB4DJ,1.1000925928157288,102.57362946223913,0.001010489890282322,34.946403309032654,310.0247690225218 +2023-08-07 11:23:27.918804,HOBP4QZ2,0.20534243741311098,102.60461379421469,0.0008772096555534873,61.01427929577029,206.24350960422555 +2023-08-07 11:23:28.421136,KLXEP3B0,0.6489805314277315,103.51681688830425,0.0009491615803520437,54.800203810440266,15.36531422978453 +2023-08-07 11:23:28.923361,P6GF50B4,-0.168501220570348,103.0565175004205,0.0004413594936330213,47.07582055433336,258.0172083399795 +2023-08-07 11:23:29.425620,SM3I2ZVJ,0.4860806842749157,102.47205442349845,0.0007671371038388032,32.92780275606377,4.058309555267897 +2023-08-07 11:23:29.927852,UXSTWEYR,-0.4182694420445965,103.32076607305216,0.00072270443273305,24.12569416142501,191.1418631091636 +2023-08-07 11:23:30.430095,ZXDOF3P5,-0.06920649855761751,104.25920012991581,0.0007445396487165638,3.3903548119287947,129.01474857914627 +2023-08-07 11:23:30.932276,LW9SUPG8,0.3543429002468286,103.48257842138402,0.0012646664377180246,5.388091343552294,110.94421335976347 +2023-08-07 11:23:31.434534,4BU0DL6P,1.1889947444567857,103.27415981316031,0.0003700262357505936,5.817808890088487,219.0383791827681 +2023-08-07 11:23:31.936803,YMT3IJNH,1.1056181666591025,103.59323605976556,0.000651778744184651,11.317880282402816,256.3898264962802 +2023-08-07 11:23:32.439074,7DV1XF3W,1.8843970914492305,104.02409003665548,0.00032494815130331914,15.318768182513042,348.0015525814578 +2023-08-07 11:23:32.916169,GHJEU1D7,2.4569511466713716,104.40254979351951,0.0005220732164649868,29.70943018435514,16.32209436703465 +2023-08-07 11:23:33.418360,1DA8NXYE,2.5835224709421736,103.67822761431975,0.00019195727258173635,55.24303294505171,96.58424010641441 +2023-08-07 11:23:33.920533,UO1JHYK5,2.656591662221451,103.7911603909181,0.00018919819767017977,68.47812670517847,304.7481101518061 +2023-08-07 11:23:34.422773,QE4Z9SRK,1.935675430035101,103.327999750234,0.0002043299107466493,24.337523926812636,190.86858715298115 +2023-08-07 11:23:34.924939,G3DIHXNC,1.638956036561839,103.70246185094922,0.00037199485597027215,30.38047285591014,151.9001589064082 +2023-08-07 11:23:35.427178,YTHDZB4C,1.1983546910102494,103.54671796640858,1.7113070749807295e-05,42.92471637725153,44.68874484404819 +2023-08-07 11:23:35.929340,741MNIUR,1.0643334186655524,103.8787052580902,3.107752321271006e-05,47.583646262602706,252.98838502061062 +2023-08-07 11:23:36.431581,VX7AIG54,0.3759455916423209,104.57477142503993,2.3810988801961155e-05,43.544046545342006,79.97395773659969 +2023-08-07 11:23:36.933743,8RX5PGNV,-0.27577231806547253,105.22219585575675,3.7686399233333016e-05,83.03508730067036,13.553516166060376 +2023-08-07 11:23:37.436034,7Z639U1M,-0.16309054366783937,104.44964133614837,3.265822927778116e-05,36.03548004674374,41.03329457315552 +2023-08-07 11:23:37.938324,CBNWMZDA,-0.3348402865017892,104.84786192481427,4.614465081866935e-05,63.49033017712968,60.748872884848 +2023-08-07 11:23:38.440563,RYCI2HMA,0.24563342565253854,103.98503798493975,4.0407927113381456e-05,106.95915180447699,292.057714767761 +2023-08-07 11:23:38.917694,H0Z6PV51,0.7890889887856714,104.48943139668434,4.694462416988533e-05,149.25973294640303,302.732434959113 +2023-08-07 11:23:39.419956,FSCIUOM6,0.6008223667551118,103.98109567399702,1.158337122436625e-05,145.46860832243394,137.08060292351195 +2023-08-07 11:23:39.922198,M5X6TJLD,1.101736595577509,103.62927766721388,9.64434733042909e-06,48.52769512789803,233.64136548340846 +2023-08-07 11:23:40.424369,DWR842H6,0.2940338456163578,104.30245705783977,1.1222795477111128e-06,61.83497378882688,106.85163516122668 +2023-08-07 11:23:40.926518,X1R4ZTAO,-0.1285746426906882,103.7253532049883,9.943732632122055e-07,100.54996558364924,98.95850149143865 +2023-08-07 11:23:41.428751,O1Q4VCRB,-0.05773495101594417,103.45899019139702,7.264927228370073e-08,46.39896460065677,55.82633286629863 +2023-08-07 11:23:41.930903,HLJ7MX5K,-0.048493063785965074,103.98665821286102,1.495146558841844e-08,76.09718130905327,102.50998743056337 +2023-08-07 11:23:42.433130,F9SKTP35,-0.3536957128111897,104.98018892658489,2.0683310827863503e-08,43.956397969645046,274.63604065556285 +2023-08-07 11:23:42.935423,UOL4JIH1,-0.17300071477003254,104.75436791497278,1.4203917509236171e-08,76.35312648252889,30.46845929118024 +2023-08-07 11:23:43.437694,MW9Y6O1R,-0.5531501790540259,104.94715330945583,1.327887487643246e-09,93.17764874517184,60.29223334398387 +2023-08-07 11:23:43.939938,C5FA3XPI,-0.4104134949439846,104.88464180766204,5.374168643841372e-10,152.3477578813245,290.0490862264373 +2023-08-07 11:23:44.417122,CZ6WH8IV,0.3618879754628912,105.00887754539589,3.509204293982797e-10,233.3117320179634,348.9697490704055 +2023-08-07 11:23:44.919353,9HG0DW2Z,1.0872699322544472,104.6599812523132,3.6889681934396025e-10,289.69356280857716,336.12529538106855 +2023-08-07 11:23:45.421592,KSO8JBZR,1.164775381416472,105.05331528181382,4.3673136381127253e-10,148.6328013813231,86.05479882264325 +2023-08-07 11:23:45.923722,2E97HX0O,1.9889860424507457,104.6322920398085,4.770256008912145e-11,81.7936029140826,227.1970667198953 +2023-08-07 11:23:46.425892,CM9AHXEG,1.0504629535778798,104.08422181333643,5.256487906731053e-11,17.117902886288874,73.35119158753156 +2023-08-07 11:23:46.928115,ZPD87CAS,0.4527215494859038,104.17091820329306,8.840530054907045e-11,18.0139741077098,64.80295063528763 +2023-08-07 11:23:47.430372,VS0E56PD,0.6263896803735016,103.97882860073017,8.425291492082426e-11,21.41234080498392,22.497239265814756 +2023-08-07 11:23:47.932525,PZ3W6LKX,1.3126896265429921,103.49742709535366,1.551676952422436e-10,32.640030630732156,200.95855604337328 +2023-08-07 11:23:48.434706,BGVUX0ON,1.2501809391732872,103.16986428276498,1.348331428471414e-10,26.62183562228548,348.9486559618905 +2023-08-07 11:24:19.174866,1B5SAXLG,0.6440148150353486,104.51871361394988,8490.417429036797,253.27727131570617,232.78771386116057 +2023-08-07 11:24:19.677615,L7HN1XCK,1.4807518896747087,103.96621676546852,14761.560823921958,477.32100167295033,286.0719221469265 +2023-08-07 11:24:20.179839,J7QKG84B,1.610705109066352,103.80429713275217,2989.571048893855,452.43733161925195,111.87446291385362 +2023-08-07 11:24:20.682026,9WXF63LY,2.2261785157712817,104.111440362181,5274.4884926085615,584.3251343555293,48.82660332554411 +2023-08-07 11:24:21.184247,5OYBRWJL,1.8977197656885918,103.99308781285848,1924.9369884422463,452.15020780835846,318.28984063157844 +2023-08-07 11:24:21.686488,WG65F2ZQ,2.267113303158143,103.42628233432589,3171.070777353863,366.04295049541577,210.9085890786331 +2023-08-07 11:24:22.188675,MFVRT948,2.9159485313298994,104.35259232329544,1284.414808421605,258.319276108467,287.2661565946256 +2023-08-07 11:24:22.690932,OCR43N6E,2.295117267614282,103.71194420387403,1345.8812380035695,468.0113417393991,119.22393276199386 +2023-08-07 11:24:28.791607,719VXO4P,0.5489362540760516,103.15698366991411,9195.828624480417,74.7175842738024,102.28026395626772 +2023-08-07 11:24:29.294811,DUI06ER7,0.3629307327598519,103.70696699417535,6392.808864171764,133.28144193084825,244.07709542945202 +2023-08-07 11:24:29.797025,3UH78E6C,-0.3757311039722868,103.88263114940617,2884.2924115850724,18.476435273482537,310.34722181978134 +2023-08-07 11:24:30.299222,LKRMVU70,-0.3763620008123496,103.16730379657331,863.691902227504,19.224508926267347,117.63106809316707 +2023-08-07 11:24:30.801377,G56049RD,-0.48927913853178073,103.22152335686047,558.13669448055,35.448441379019364,58.111707255724866 +2023-08-07 11:24:31.303547,2F6SJQ41,-0.22000662250498104,103.32540953920481,247.2622814293286,62.894519430471235,205.12895634023926 +2023-08-07 11:24:31.805756,T52QUSPR,-0.04907851028778287,103.15955129839759,9.811843357286051,77.94187959069355,331.479485601283 +2023-08-07 11:24:32.307922,G2Z5J8P6,-0.7765784196613204,102.36793759214758,8.158870380836367,81.5107431603022,202.61891040800663 +2023-08-07 11:24:32.810098,T7MDWU9V,-1.1699642055120674,102.10208248198461,15.419406902335,94.3453702608803,146.5149901840187 +2023-08-07 11:24:33.312332,PRLY9B4A,-0.8780284730101158,101.49770915959557,22.004747812594484,120.83525537591561,224.14210098009673 +2023-08-07 11:24:33.814486,FOS8PZ75,-0.5744013062249884,102.20736632587224,1.693630532171582,109.75080552258999,1.5398719021783336 +2023-08-07 11:24:34.291560,D8M6GZOL,0.323573145746169,102.61446439739257,1.6046156200835913,101.1959014498892,142.85105252862195 +2023-08-07 11:24:34.793820,T1JL7MCE,0.27972181027255383,101.73956458975071,1.0276501142752257,17.201100971730867,67.79115176213651 +2023-08-07 11:24:35.296046,P5HIKRSE,1.238080234029776,102.19635016662176,1.358870087054518,20.767784216335404,208.63835957705336 +2023-08-07 11:24:35.798181,C2IS3OXY,0.8483742086735286,103.06263672707357,2.348685139898178,18.9697902525337,330.15302006803137 +2023-08-07 11:24:36.300377,SQCAILBK,0.2568212240556156,102.27338360764155,3.4711275772216448,15.15331848723907,252.19299527877672 +2023-08-07 11:24:36.802556,8GCI1E4V,0.17211790541227967,101.88734899087468,2.2167708305327793,6.155529620160028,338.73764803699953 +2023-08-07 11:24:37.304693,4YUK5CO1,1.127739705564845,102.03827279502167,3.7758985440328345,5.149813662040694,147.8089437388124 +2023-08-07 11:24:37.807006,GV48J71M,1.4280148677812936,101.1901973705164,6.685534444613498,2.8711600788528124,46.68725449262945 +2023-08-07 11:24:38.309100,TS2U9F6E,1.7634223173831889,100.44477906836676,12.428280252572886,2.871872354093057,199.31732780831783 +2023-08-07 11:24:38.811363,AF3VLSEC,1.3698038830178894,100.11141275880618,6.992616967829076,2.156634143049269,104.78985615513216 +2023-08-07 11:24:39.313531,7T093ILO,1.1917231890525533,100.08528772613441,5.884932032991961,3.4289142115546483,151.53143925424573 +2023-08-07 11:24:39.790596,4DEX6P8A,1.2896567195663242,99.1603171101435,10.472900461739782,1.5080796912686723,192.4028669122646 +2023-08-07 11:24:40.292819,JZPMGD4R,1.4176332029847554,100.13386488635223,3.380702442907287,1.300848956865058,41.253959019985075 +2023-08-07 11:24:40.795088,XB86HG0C,1.0729900454069186,100.54597661786521,6.323528081389569,1.4112410095510526,333.67556886610475 +2023-08-07 11:24:41.297272,34VOPAKL,1.5332298642189577,101.3050493509705,10.643195525722907,1.8810365228140529,288.9011807212853 +2023-08-07 11:24:41.799514,XQ31U09M,1.1483520393924762,100.9483048625962,19.10560748971654,1.1812995231669878,350.3448098745881 +2023-08-07 11:24:42.301710,DX7WQGBL,0.3879869099198956,100.14966248066176,36.46219463162931,0.8367078692479694,152.87944771228342 +2023-08-07 11:24:42.803872,VBY4S0DU,-0.5454676506432896,100.40416390204123,24.664623141482515,0.5943732515521851,217.12798103444385 +2023-08-07 11:24:43.306048,XL19CN5O,0.18641868002372064,100.95270429835165,23.90812774318198,0.6062585204121812,84.0179223491375 +2023-08-07 11:24:43.808195,JWYU27CQ,0.841565834488927,100.60605488595161,42.252495690034614,0.7371737566626627,14.305353221848407 +2023-08-07 11:24:44.310435,3FBNEO4U,0.9430542173846961,100.5804396182923,10.017576499402011,1.1141354475292073,92.16634509453664 +2023-08-07 11:24:44.812651,7BFPUQH0,1.8280865575396334,101.4775850329421,9.17819654544236,1.8318934737273136,336.34476182755054 +2023-08-07 11:24:45.314876,N8BHUC4I,2.1269543734262975,101.96402985002206,5.120234167158306,3.573788219056908,246.3963348949601 +2023-08-07 11:24:45.791962,OME1YH07,1.722282521265822,102.27813161513713,7.143914479318377,1.7671446418697574,38.74410394064461 +2023-08-07 11:24:46.294161,FTCPUAML,1.133195813420111,102.38758802467636,10.579672589145963,0.6172424678160842,117.62421441484241 +2023-08-07 11:24:46.796418,BIL6FYQ9,2.0465517783095724,102.5952630941557,4.02020584456345,0.2524951980345592,121.66628631279023 +2023-08-07 11:24:47.298679,YPV7ZO19,1.0921097013158296,103.1086842839782,0.7676477766187677,0.008302835219187482,34.215161739892324 +2023-08-07 11:24:47.800898,Z450Q87E,2.0625449014448654,103.62894102360703,0.9274152050305208,0.012374945962767295,218.89775520593145 +2023-08-07 11:24:48.303157,SDQAE3JV,1.5762462683648628,103.93256995454061,1.4605220556856682,0.0187552699804323,226.41935279018026 +2023-08-07 11:24:48.805385,GRWC1BI6,2.1233388288781407,104.22567442200283,0.7952672528971421,0.028782343035598526,76.69344258001479 +2023-08-07 11:24:49.307585,ZFOU7JXG,1.8609202880268039,104.18784731717011,0.8170770425720034,0.0028340535255771473,145.54977339726884 +2023-08-07 11:24:49.809799,Q0V13OP8,2.3394520809234636,105.15344508690215,0.8218089177836617,0.0048239936168704926,153.05635356220367 +2023-08-07 11:24:50.311983,S61QLOHF,3.203414175145042,104.91446286549836,0.8046261412554488,0.009478937037067101,307.7557436207349 +2023-08-07 11:24:50.814171,IMHRLAV4,2.799850342019176,105.57394150999022,1.214312774921999,0.018948448734660395,25.077876841144985 +2023-08-07 11:24:51.291197,X642DV9R,2.371047507650618,104.99843933840066,1.164122591206681,0.01089155906256909,125.22868362155629 +2023-08-07 11:24:51.793348,SFEYWDPR,1.9741296117935,104.94237528855292,1.45586957654782,0.01399980080759642,255.6182845810791 +2023-08-07 11:24:52.295513,LI9FC5B2,1.8871913012867751,104.9838388196081,0.9302932247267722,0.008349449320916002,162.05308418490404 +2023-08-07 11:24:52.797672,8SGT51VU,2.520131252073347,104.11722407536517,0.2381437919661359,0.012516214472988181,219.17404923463152 +2023-08-07 11:24:55.546468,8KE7BRMI,0.760243702082263,104.61164642139518,3936.614803771002,136.15774312666213,15.90152289422873 +2023-08-07 11:24:56.048910,8KFTOQ4G,1.440007429113668,104.53019120798943,4285.33475677141,131.0245299500469,233.00745541652694 +2023-08-07 11:24:56.551205,72H8TIRV,1.0370572827186437,103.95253295307052,8502.616299157284,229.0290384360712,243.10813326188847 +2023-08-07 11:25:24.691407,XDHI9S65,2.0018809191270277,103.60599721144301,5797.221839892398,71.65773045106145,36.602670074785834 +2023-08-07 11:25:25.193917,4IRT0MBY,1.634391210355493,104.03661605049462,5877.184902758916,12.446038611103674,117.71789460729232 +2023-08-07 11:25:25.696058,D0AN69LO,1.7490919023252094,103.16795039968312,4733.631243935801,23.17179170518802,130.52768526627239 +2023-08-07 11:25:26.198134,PFIGRYJ8,1.290067481917901,102.55790746645106,3289.9225746301295,30.282419703239825,164.19976917094158 +2023-08-07 11:25:26.700218,KS1ZTFQN,1.632759229609391,102.01199061308856,2157.9962137915436,42.144320290849535,144.19708699135322 +2023-08-07 11:25:27.202128,7NLFW13Q,2.225106179175154,101.5388065486105,1410.6486814796594,26.51761037854207,325.3281562560205 +2023-08-07 11:25:27.704158,34Q7IJZ9,3.030826508463253,100.59356511399497,801.8053918965886,44.338075652332165,302.98760254522426 +2023-08-07 11:25:28.206329,476EYT0Q,3.4305885271673042,99.99233962651135,275.8238738499515,47.48197467053403,12.465488896591353 +2023-08-07 11:25:28.708412,3FZ1GXO8,4.4035994278874,99.88645158595406,439.8341709818157,9.043603848004246,329.1113177842453 +2023-08-07 11:25:29.210509,KYR2XJ7V,3.950935529739577,100.27716766658466,341.32645904959054,11.22077555781365,195.75083909225805 +2023-08-07 11:25:29.712595,VYK0PQ2G,4.34146760901023,99.44678593818239,485.5882874925198,13.08229805301195,249.47768833101085 +2023-08-07 11:25:30.189624,3PD2QKIF,4.8115197801876715,98.6533173194788,502.88582548135616,22.100273621573766,43.67824052543233 +2023-08-07 11:25:30.691797,O0Y54B9D,5.247211118406404,98.68439974379991,297.82156316053454,3.3607536330235703,293.46793603786415 +2023-08-07 11:25:31.193914,DASE9HY0,6.009716650980021,99.40764583615336,241.63980772345965,3.2774930869159764,43.426533862926306 +2023-08-07 11:25:31.696043,LI1CX342,6.109535444333293,100.27299224472085,335.5003189097681,4.621014298964087,114.45529589260484 +2023-08-07 11:25:32.198143,IT5Q1GW0,5.362228030971816,100.03846340170975,462.59370761757583,3.875407325850816,238.8540249249392 +2023-08-07 11:25:32.700263,6DIJBW71,5.038516537602694,100.76800496523828,191.3989247339611,2.1728382989146913,256.3080113248655 +2023-08-07 11:25:33.202391,6TCARJFP,5.264296253460474,100.23121391569958,354.05981630286516,4.249263392076901,245.22920617893305 +2023-08-07 11:25:33.704433,6DUF5O10,4.916845173810744,100.23813319106253,198.08121691201382,6.604094351212185,153.5790952122186 +2023-08-07 11:25:34.206636,WN2490YQ,5.53797443307119,100.97683734805297,20.463291134453954,9.675214646768627,295.2234264377856 +2023-08-07 11:25:34.708805,V2IAKPJY,5.309669810654603,100.30032854306268,26.32046110027957,12.25330596743059,203.87095348581556 +2023-08-07 11:25:35.211016,Y52CHVO8,5.8656240992882775,99.3998484674646,3.111503260415315,0.8546662500041009,338.2158164657807 +2023-08-07 11:25:35.713118,9O7NCR6K,6.52981519511031,99.16062362757764,2.644982407707872,0.9630846931414644,317.44172188297034 +2023-08-07 11:25:36.190111,8BDWHYNF,5.72441659070522,98.26734512352634,2.8820941660187733,1.7788068768984437,161.98966017109433 +2023-08-07 11:25:36.692298,4PUR3XQL,6.186640712421697,97.84336531853334,2.1263112747747037,1.4571683487517424,48.01646541666628 +2023-08-07 11:25:37.194247,WKVTA4PS,5.440648254597683,97.92455663024496,2.481849922705129,0.25520269072147794,345.8663718638547 +2023-08-07 11:25:37.696234,B4KSELG5,6.291266307788861,98.21238961984815,0.15618680633923443,0.5050107465787769,27.669891677383475 +2023-08-07 11:25:38.198511,DEA2FT5M,5.445556164380631,98.68207090228057,0.29042316020894915,0.21592694372274257,7.263573818860095 +2023-08-07 11:25:38.700772,8027E5DM,4.7826741171557074,97.70779674534732,0.5760481267194711,0.2912616603350956,139.13327837346768 +2023-08-07 11:25:39.202897,7ARE1OP5,3.9431379706755347,97.82821280750653,0.4357050865375443,0.4825969807823727,320.8107580724221 +2023-08-07 11:25:39.705135,1UQABZ8S,3.74903314938282,98.77341940192714,0.06824857916856425,0.9241398557280043,263.30727125224485 +2023-08-07 11:25:40.207405,EQNF1PRY,3.2089031841978053,98.26836630457852,0.03716015702195009,1.0197134761869477,220.51219221551185 +2023-08-07 11:25:40.709711,DMTPJOAZ,2.267577986523981,98.377147321837,0.004453336568507826,0.17412424082207922,81.03565442438139 +2023-08-07 11:25:41.212001,CJQRLMW2,2.854613956808519,97.84093020050315,0.001494527054449296,0.11034302609138358,31.968383898329762 +2023-08-07 11:25:41.689175,MW5GH180,3.6096782842427553,97.80011908823755,0.00010304154267118545,0.18044206889858183,86.3815167896681 +2023-08-07 11:25:42.191320,Y7TEHPDN,3.645503976477947,97.03932719573736,4.689098994204505e-05,0.0365242129479465,87.3162229952906 +2023-08-07 11:25:42.693477,QMR3N57D,3.2811800796806994,96.5445943377218,2.1555155891280444e-05,0.01883540906698989,153.8215049956366 +2023-08-07 11:25:43.195656,IXM0EO6T,3.5479164464357114,95.86689350622481,3.291180597697038e-05,0.017863404939044647,96.19458890403632 +2023-08-07 11:25:43.697857,OCGIRHXN,4.467324856600795,96.71130407091309,5.4828959931505674e-05,0.02177885656618918,90.47890634584155 +2023-08-07 16:11:26.286176,9FLG1JRN,0.6680191419553747,103.52251399414432,8741.689529091398,214.74759423672296,239.92065380129694 +2023-08-07 16:11:26.788786,7XDEKQR2,0.9628888049509559,103.9186455299113,16156.142808181623,95.76380703120215,192.18385170409022 +2023-08-07 16:11:27.290860,4LZK7HID,0.7511370944988989,103.54614602390498,25497.644763442506,92.65882306582672,214.8550440051323 +2023-08-07 16:11:27.793234,UAVTBIS3,1.142212724590501,103.62400535870313,34435.37781844453,145.52251156329513,172.4340964259693 +2023-08-07 16:21:26.319416,FSYQ870K,1.212557810164098,103.10542088091297,834.0518008501404,158.08359534301388,343.178123755573 +2023-08-07 16:21:26.821864,GYAJ6E3B,0.9840472105077018,102.26510711935329,959.0376872082867,157.3078479234038,217.57551721088294 +2023-08-07 16:21:27.324123,PX916782,0.1280040619694378,101.68884711696826,1487.2829955900095,39.303775790466574,296.4497763988225 +2023-08-07 16:21:27.826295,GYS7BD06,0.8484038852253688,102.07625770163077,917.8787962888671,8.910928400267341,198.89009760832255 +2023-08-07 16:21:28.328529,C07YZJ4N,1.8465055917687057,101.11765617873834,1154.4145035124056,8.985637358816666,285.99907637588336 +2023-08-07 16:21:28.830639,JZPNXOGB,2.0168328202158543,101.0581204438626,1543.8104172337432,9.828294425585934,171.41330780029534 +2023-08-07 16:21:29.332827,QBDY672T,1.7107234642405182,100.3531870184899,557.5217620870133,13.399114854577938,169.72512553437628 +2023-08-07 16:21:29.835205,C6NIXH0S,2.2881814371996736,101.21103755570472,22.876509734920887,9.158464550316973,253.98030122616265 +2023-08-07 16:21:30.337551,TL8UCM5I,2.4010793693409926,100.35974381799019,44.95917841466303,2.6376555721909423,19.210623097934445 +2023-08-07 16:21:30.839841,4L21YXEQ,1.5717101436564445,99.48657173458967,33.97776548782829,1.7120673810485663,302.4868525984195 +2023-08-07 16:21:31.342088,8U6LTPFY,1.9950463738556694,100.3418802754518,33.55178833439851,2.0149852692575156,49.7029592138835 +2023-08-07 16:21:31.819290,6H4LR3CF,2.7368592541822987,100.80061161916561,14.435207671778791,3.7641104129772347,27.09128698007345 +2023-08-07 16:21:32.321637,AZHY2PN5,3.6970650485732723,100.31152218170834,15.00317570941897,1.492622748846299,283.5235817824307 +2023-08-07 16:21:32.823879,0TES45L1,3.942817759530045,99.79186388692918,15.251993550476906,2.5362149349059933,222.22044761451218 +2023-08-07 16:21:33.326134,WGYRX9H8,3.6358117578529296,100.10535903776072,6.758423981305045,1.6605014025747726,329.65318990071023 +2023-08-07 16:21:33.828343,IUWTEM6B,2.7657092576762166,100.6799682326449,0.6777150707184187,0.515753499076725,249.0821174273019 +2023-08-07 16:21:34.330602,JECKU8BY,1.9235957183817045,100.78018314756518,0.3490115705356143,0.4992074751418871,22.67765054953054 +2023-08-07 16:21:34.832879,D4CF79RJ,2.021799368623114,101.42501975086313,0.14911581973507812,0.8445649769732703,82.60100042099006 +2023-08-07 16:21:35.335135,8CUN19WY,2.888065384104639,102.14721819651199,0.09380707608165686,1.4814559433230015,355.6072395000027 +2023-08-07 16:21:35.837379,K8JAQ5GY,2.6423785593486437,102.95337198432927,0.1682372845728426,2.4855601529132736,157.85442126932185 +2023-08-07 16:21:36.339624,5EKYP2AH,3.190233446861493,102.26133019512247,0.21730681215016612,0.7092926347394113,33.15455180789422 +2023-08-07 16:21:36.841946,489IRA7O,2.444957037136543,103.06856223778193,0.058150667511012694,0.059380379400607475,83.21184001699041 +2023-08-07 16:21:37.319046,82DAJVHW,1.8103031986319242,103.15861959919673,0.06451104488665094,0.0534202823483365,1.861010284661461 +2023-08-07 16:21:39.477076,8XZCNHJU,2.1426219742540145,104.2408212678295,2165.081809923124,145.91339330069133,182.7728840731978 +2023-08-07 16:21:39.979686,4WN96VH0,1.3980564379465832,104.18830501852787,901.065499487534,32.76872719047242,107.92322449541052 +2023-08-07 16:21:40.481858,08TX4QP3,0.6309400638465021,103.4643818939401,775.7869824249325,37.7609311131947,204.19135565925276 +2023-08-07 16:21:40.984133,JRVZ3P29,0.9777365694448932,102.55829591410055,28.51972780009328,27.947176014213287,193.56776139578574 +2023-08-07 16:21:41.486438,NIGCBAHY,1.8661670316759762,102.78805861122864,42.24345152823255,55.28032112462975,329.5077633526489 +2023-08-07 16:22:26.048453,1ZNYH6PB,2.19156299359983,103.89768274455004,6158.179472509008,139.10904557324278,239.50265746271788 +2023-08-07 16:22:26.551891,0L21TREQ,1.2661317439107649,103.78887495236825,409.6101108343091,205.53781949231805,98.49421506107569 +2023-08-07 16:22:27.054188,H0EID8GZ,0.3343091559285494,104.01836783130479,602.123914754223,201.7958777344975,15.547188632590348 +2023-08-07 16:22:27.556407,TZ43UFKM,0.23506097590555908,103.9513385968941,850.8514729700051,364.3702562653118,358.16800191423476 +2023-08-07 16:22:28.058713,X0M7CHAO,0.9992017570285938,104.07521544027202,337.63963639771407,441.6948787837479,244.99360049112613 +2023-08-07 16:22:28.560984,JRM3ZCFP,0.12676189108537295,104.35601317039493,518.557983129492,141.27904131284015,197.34215044483392 +2023-08-07 16:22:29.063337,YICN7O62,1.0500343785880728,105.00445185750681,377.1705243222495,163.74527563056597,312.0618759427087 +2023-08-07 16:22:29.565646,XIC0MBOG,0.2565939750150543,104.1794027871388,186.3357020998392,286.00375944317,133.2790444795782 +2023-08-07 16:22:30.068024,G74P1A2T,1.175049300327357,103.40288026452878,143.53596424730912,148.8239582115367,257.6831773388467 +2023-08-07 16:22:30.570340,BSM096V7,1.86517504056509,104.19970101485909,242.89357386756268,235.7638550204664,179.88264772179843 +2023-08-07 16:22:31.047484,97YCZ1UB,1.4260685736136387,104.21748334760635,431.41976589947535,209.45347732336177,122.37169989533317 +2023-08-07 16:22:32.827302,1VSZ9NGI,2.04174354484816,103.043365427443,8237.526908927963,37.922193906507374,202.93447697731665 +2023-08-07 16:22:33.329768,TV5HDNB6,1.5599849894657172,103.04908304937277,6858.765963227234,68.98179008427451,345.4341760179532 +2023-08-07 16:22:33.832097,YRITB1P4,1.7456914952692617,103.22568065124537,7148.1607817611775,123.09612051593462,192.90254377783424 +2023-08-07 16:25:23.116303,V7WJ2IZD,1.6132226556031748,103.41318785254339,2552.686828791146,109.15402167301565,6.658992674658926 +2023-08-07 16:25:23.619077,KDFU3XQM,0.861217833521295,103.77056638870148,2914.820555845281,28.152483284683626,289.07741406939294 +2023-08-07 16:25:24.121371,4IRX2Z5C,0.6364446384999796,104.59877511044043,1894.2158894905888,32.24064947434099,162.9615073382688 +2023-08-07 16:25:24.623596,O3X9RZUJ,0.19464176530791222,103.94800546497461,1442.8803710113602,59.21675842897595,255.78554387268082 +2023-08-07 16:25:25.125913,PD8IUVRS,-0.78982297271827,104.42066572235255,2704.5632767781462,58.303271583714405,198.52098925994915 +2023-08-07 16:25:25.627874,TO1NXRDW,0.1711791189795009,104.1883310366521,146.5670367032908,22.41202999686228,130.38053817330814 +2023-08-07 16:25:26.130140,8H0CUJGN,-0.5818298443558159,103.77263399174551,288.22959654444077,21.782411952891,66.98336185192892 +2023-08-07 16:25:26.632014,BI74XP5F,-1.1958188179493285,104.0847102219097,489.88637029588443,13.075009590934647,118.03912612299261 +2023-08-07 16:25:27.134244,6B30F8VA,-0.823649534375865,103.28175229041565,169.65912499929476,4.34293474223089,298.3411788419288 +2023-08-07 16:25:28.805521,DFCZJE0X,2.155047430892718,103.79142809378261,7268.349445016837,148.81804726014929,79.58971057810245 +2023-08-07 16:25:29.307916,3Y0HLERV,2.035742038124181,104.75392942739295,2003.1888094844626,75.7627580064459,30.180104789295683 +2023-08-07 16:25:29.810141,VIDSLYNZ,1.2929491294186481,104.20868609210004,3573.264584025445,38.98269511901932,249.54228623143754 +2023-08-07 16:25:30.312426,QA31N65I,0.4118094104682941,104.64988886961382,2779.2173099105453,5.1106061309194,233.67385356423608 +2023-08-07 16:26:34.180956,G96MF3XO,1.9544797172547381,102.90485501074987,9846.579002497385,33.93635623154016,251.35724472280242 +2023-08-07 16:26:34.684164,K6IYPUG8,2.2283903887300776,103.19710674993722,3080.970552434629,45.037401671680804,209.55609588774917 +2023-08-07 16:26:35.186431,RZ4W8IM3,2.756728969655849,102.98688232319428,4536.896292301289,68.54673959141485,65.25201581198462 +2023-08-07 16:26:35.688703,LEMJZ82P,2.364755295253246,102.71167712405934,864.509401693208,123.10327045967644,118.45961104733504 +2023-08-07 16:26:36.190919,98ABXDWK,3.0417512276988945,102.77463850820035,667.2034035208192,213.83604148585871,7.175050672021484 +2023-08-07 16:26:36.693242,7P4JEVYX,3.2255338384621606,102.18993296819883,1090.4292853588206,226.2859617194323,108.58344270469257 +2023-08-07 16:26:37.195490,PDRZTE5W,3.162668697349078,101.75697699941787,1325.5727879757394,324.2685907007072,295.63657714435146 +2023-08-07 16:26:38.836186,4U1DGJIF,1.702965496761083,103.43670785918872,6581.627868309889,180.30843424513674,75.8968723045889 +2023-08-07 16:26:39.338534,O7RSJNLB,1.5719308496217346,103.22908824819821,7325.2576827083385,172.43490477084939,337.72138146719345 +2023-08-07 16:26:39.840618,5Q8GPFT6,2.4895889677931824,103.25186624242575,637.932477551276,24.32629490270665,255.2461431251054 +2023-08-11 14:31:51.054413,YLNZE2KM,1.8995020333218817,104.58928948977122,8699.336632959668,112.4693836226996,138.72845032571516 +2023-08-11 14:31:51.556761,36E8O9V0,2.376202129341449,103.83496199143589,3496.4539096674616,200.64728234181385,272.084767182067 +2023-08-11 14:35:26.763568,BGX4KR9T,1.7167738746528403,102.9891803312302,257.9271874382539,265.68979848728804,85.76280181742403 +2023-08-11 14:35:27.266626,OEF0YK4X,1.4362271020129023,103.25339146139004,62.003514931428214,359.35025154532786,169.13156652771656 +2023-08-11 14:35:40.305261,VR8W1NYM,1.8440821579180198,104.5468689938441,8442.123033929713,15.707530735667504,318.91442839614876 +2023-08-11 14:35:40.808615,V9BOYQA1,1.4971030936242702,105.45047977133105,10104.204947421691,12.247092282875915,306.14973143462987 +2023-08-11 14:36:09.152449,XO865PGV,2.005462272197316,103.56931335526093,1732.9452395536882,222.70120705619138,293.9090898536274 +2023-08-11 14:36:09.655237,NOP1MV9X,2.588639867341877,103.40740662361725,829.5449737848704,216.6111111858535,290.6321116056238 +2023-08-11 14:36:11.433788,BXJWHPFG,1.8364609318924472,103.87852439208721,7918.693304277305,125.30413640099685,143.38510100764339 +2023-08-11 14:36:11.936178,SW15PRB8,2.404030597403527,103.0323638612413,4360.257684134397,121.7292224508216,260.29011227557316 +2023-08-11 14:36:12.438361,KJL29W6V,3.3506652583712606,102.69662988936561,1.0644286245260446,128.07524566083347,172.48144216469836 +2023-08-11 14:36:12.940558,B3G1PXFW,4.224690518795022,101.91821835781938,0.2046354763667816,120.07256324258898,20.914496765154013 +2023-08-11 14:36:27.550174,QPDBKG4A,0.9842373851696959,103.60389134190739,2956.766345845451,110.70110579750408,153.80529355356154 +2023-08-11 14:36:28.052575,NXT15OR8,0.8689330382987224,102.96761690409483,4411.17242561422,148.67456298348156,295.53455828339554 +2023-08-11 14:36:32.629189,S5OMH3Z0,1.7918320187483046,104.05627990534497,3017.540473509959,276.4730232728963,205.17844594449133 +2023-08-11 14:36:33.132158,ONHIDJ8Z,2.2112821555200046,104.67224754169465,3821.319683366879,8.633927160207861,146.72126792141506 +2023-08-11 14:36:33.634311,5RZ9EXB1,1.8077075091680836,104.08443176658689,4973.057084874834,2.9202356908559324,201.49444385119762 +2023-08-11 14:36:34.136486,HDR5XMSL,2.215685570761304,104.94655850550211,191.12408734021028,3.6660104895299535,75.2546735259665 +2023-08-11 14:36:56.428975,12PXK4BR,1.8107064172358012,102.85985707039077,5140.510859817992,54.21802072309052,193.7784066972923 +2023-08-11 14:36:56.931412,Q4YLWGJ1,2.2586370640998212,102.52184992999567,3782.022413009538,10.706814985035777,251.54952595502442 +2023-08-11 14:37:06.897467,Z5PDUFHJ,0.8370927469310159,103.38398792320996,1193.7059942262513,156.48440711590268,29.348272590794956 +2023-08-11 14:37:07.399334,2871AJM4,1.2378318256336838,103.07281658320736,564.7966067375175,251.2602220972526,9.31086745194051 +2023-08-11 14:37:07.901465,I1PX2HEK,0.5166902339696959,102.83556685374447,867.3055286999112,91.60615330700065,204.96537902932658 +2023-08-11 14:38:32.182677,KHMRWPJ4,0.4983767018193992,104.6550045240449,224.1372967459838,62.69362467475872,274.76395918184795 +2023-08-11 14:38:32.685022,JE0FXICS,1.0353343160494666,104.70867914467775,282.85363270672315,13.218182512645768,340.69691934044556 +2023-08-11 14:38:33.187215,CA3UORFM,1.8111511637613882,104.11126695805387,150.17065430153514,19.71028975946143,255.15922860021305 +2023-08-11 14:38:55.431831,V8HICWQZ,1.6161917420577323,104.76179923275139,1118.41276142679,130.55117335255878,78.27850153866434 +2023-08-11 14:38:55.934326,I50ONFCA,1.6726150404084448,104.74016176626822,1727.263503753729,41.059943940877275,229.0273385927827 +2023-08-11 14:38:56.436491,HEFZ97SY,1.8154043392317305,105.3113438179926,427.69281683085205,41.758048312197246,319.36217962574233 +2023-08-11 14:39:45.305002,RO3564WX,0.7178284246341455,103.7870227253418,4768.8932652561125,144.84997662477844,66.19759441884952 +2023-08-11 14:39:45.807397,B3VUY64K,0.7570465775803406,104.51985902759166,644.8206935387061,232.453122601573,86.1099815493269 +2023-08-11 14:39:47.922837,V01BSICX,2.3331442726660976,103.47233818898457,5159.641382283626,98.49093555301218,267.11991284073923 +2023-08-11 14:39:48.425220,XG6ZDNSW,2.6459285400813384,102.57891368678497,8996.483744128602,37.31699487271816,340.75689198420764 +2023-08-11 14:40:44.743658,8KA1CP4L,1.1312398201741156,103.52540518853651,6742.626200931055,180.68132696511438,88.71728038017854 +2023-08-11 14:40:45.247093,JW0MK3XL,0.9055325733476445,104.24064230174095,170.32098583425704,174.4123006201712,349.8016294092407 +2023-08-11 14:40:58.990995,XREQNTH6,2.188270016534732,104.36819152090827,7997.219103363579,241.45996376174278,297.8145054063311 +2023-08-11 14:40:59.493565,24OIT9Y5,1.7689934741135358,104.42016191892368,7862.078537981989,32.74995451877501,350.8132992982385 +2023-08-11 14:41:41.660164,6ALMHZXW,2.219480200815606,103.90816921778938,9565.989525085919,86.00595843206592,63.761605117585404 +2023-08-11 14:41:42.162697,JIAMNF0Z,3.0225805869081186,103.48623036423083,4452.237971098254,18.252827658237933,0.8356348602867456 +2023-08-11 14:41:42.665013,QI2S6PVL,2.1260154744046837,102.82062386270194,2516.4141921571227,25.61379659038776,35.031051962442 +2023-08-11 14:41:43.167063,63GYA4IB,1.949565474830804,102.42470814469864,14.876482296508584,42.15320993003504,291.81891944895375 +2023-08-11 14:41:43.669353,LJB5HGPW,1.346690250504228,102.27414717799432,25.379858564636514,12.00998762985163,202.26690978546367 +2023-08-11 14:42:17.865020,0KOD82W3,0.6355524498787208,103.98983399553123,9859.499642409188,271.9317934289684,318.66572412342435 +2023-08-11 14:42:18.367912,CBEWVLTO,0.009490294289078438,103.39375538611793,8163.732084222587,94.7945507060461,310.4656323429165 +2023-08-11 14:42:24.739837,FW0TL1MJ,2.2722371739249105,103.72452451857104,4791.9913070625325,158.01250284637166,198.95301563282294 +2023-08-11 14:42:25.242224,HGBCXQRL,1.922719184807189,104.06479154420654,6225.090065057328,22.54952050410543,308.3356528374578 +2023-08-11 14:42:25.744456,ILBN0G26,2.5470866420101346,103.88671755734896,9464.510751525477,14.288719151080949,316.3387395073925 +2023-08-11 14:42:26.246662,SC5OLDWU,2.1413096552466975,103.86765522258621,16207.806652129233,18.806563585047215,242.644242179127 +2023-08-11 14:42:26.748718,BV8FMDGY,2.6966968616460223,103.52853230095808,6084.020626879903,2.111631036999679,320.51523257610995 +2023-08-11 14:42:27.250884,57CJSEPZ,2.4014541715681923,103.51154160790529,8858.942016168066,0.2490662724372117,243.59682252089283 +2023-08-11 14:42:37.943410,ESNDCX1R,1.9872974484557107,104.47108124923655,2252.663312655,223.31408563065196,359.87242507343575 +2023-08-11 14:42:38.445812,DSYNHXFA,1.0925326830403226,104.9673899178989,2716.7125415906153,247.69198636862794,181.2578857411728 +2023-08-11 14:42:38.947761,6JCPFG0R,0.43536012637579624,104.79135830943717,2171.4356119108907,84.81762235039366,98.26840629219038 +2023-08-11 14:42:39.450013,3MVKCQH6,0.7342403235898909,104.19141107356857,1145.1573387269964,157.5866396854447,114.656648239268 +2023-08-11 14:43:46.842937,A9O0FTJ3,1.7300906510958476,103.09464870561656,5670.862273579077,101.80147089666238,40.74711893588857 +2023-08-11 14:43:47.345991,IACKG9V3,1.1212053389875114,102.19451954566486,6382.3504650635,26.83078833637748,294.75177380018 +2023-08-11 14:43:47.848300,DF5EX7MC,0.33052316686247174,101.55007267406033,8285.196629382484,1.1536228939136386,120.90477425677034 +2023-08-11 14:43:48.350617,YUATW0K1,0.810144890032025,102.13710265075754,3400.607502748495,0.7666041489604714,141.17780587332544 +2023-08-11 14:47:01.243711,DIRMUZP4,1.8627522878525695,104.05896286843262,2991.1819159688007,121.12139989670102,102.81295575226433 +2023-08-11 14:47:01.746734,SULOJARG,2.4960105335458698,104.79041611732927,963.9243164583945,50.58899800602278,328.7844035560258 +2023-08-11 14:47:10.905966,Q6ZCPAO0,1.8786252345171204,104.16509442381653,8602.764156970425,72.55840781641068,59.445958373312536 +2023-08-11 14:47:11.408380,WGNM5AUH,1.529627452793448,103.98113107029334,9831.229292434564,71.86425144381725,189.7559758658207 +2023-08-11 14:47:11.910572,UHOM062B,1.8372166191834431,103.61831090305114,13061.563043933187,121.50429192435725,216.3272243818407 +2023-08-11 14:48:00.464576,B2SAGP3L,1.7407055616562717,103.70123890535454,5341.127669345653,49.32358014419026,165.99677483435462 +2023-08-11 14:48:00.969614,ZNAQB3KJ,2.4582259275431215,103.20439345322762,8057.02451766512,89.86993778644725,10.962011734566033 +2023-08-11 14:48:01.473532,QJT8IF6H,2.607354451684156,102.87264402335994,9592.398451916764,179.5937045976157,299.9212132530012 +2023-08-11 14:48:01.978194,NJWB0IHT,1.65631366860846,103.25747043064321,1771.959055066207,276.83303189030727,69.40056299122045 +2023-08-11 14:48:02.482574,6H12O8GU,2.24470308911304,103.27825424649997,2109.0375708116867,310.1653562364115,237.4221625740304 +2023-08-11 14:48:15.476928,Y3Q2RSOP,1.008842474094067,102.91626155404609,4372.788752543259,51.89137908745013,60.508037115308866 +2023-08-11 14:48:15.979328,30FT18VU,1.1556726836950746,102.30398916240893,1550.018762811359,63.1586980691548,12.918492180452631 +2023-08-11 14:48:27.855689,1QE6ZSI3,0.7886595852917269,103.16950628071257,6513.358116629146,155.32015054621925,304.18767366692543 +2023-08-11 14:48:28.358019,3CPHSQ1K,0.23623401806020095,102.32127444277033,3788.0885338183125,263.9932359180593,63.38251643400986 +2023-08-11 14:49:20.928631,ZTNB40WY,2.307501724475551,104.55184767265865,23.209186737259188,173.59062151891362,176.49439118295228 +2023-08-11 14:49:21.431147,V0WNJOYL,2.982932281274674,105.41797311174768,23.40451968289048,335.83475439860024,314.42435071997045 +2023-08-11 14:50:13.897706,NUJ0KETL,1.3381948236449168,104.31977534477893,9837.589807757951,230.2152039274472,146.18100924630656 +2023-08-11 14:50:14.400178,I2XQS4CR,1.2367749429467392,105.06139792762143,4845.061882050308,62.35096274565342,213.70745472766728 +2023-08-11 14:50:24.184994,LUEQZT3K,0.5820536979784003,103.12118361785444,8685.587666987809,6.744408098836061,48.246820936320724 +2023-08-11 14:50:24.687303,DGJ149HB,1.0826555738625507,102.92202234741168,2569.1506934034423,7.081326245342095,339.3429446487865 +2023-08-11 14:55:12.128763,GLF9WEJ0,2.3074054911762527,103.24069228907891,2832.3963196899263,258.5040186302408,280.54007499138 +2023-08-11 14:55:12.631139,TDHL4NAW,1.7761512914735738,104.02281206848303,3815.291138713311,158.04971643205013,155.90396018983608 +2023-08-11 14:55:21.280565,A3DC7YBI,0.35778981891044515,103.1357195223603,5894.15361715314,160.49360643307938,241.25912575460137 +2023-08-11 14:55:21.782864,AVW9ZL0R,0.34959914745442733,102.1616242361928,2710.2474095519046,100.63832605949564,351.7424970236614 +2023-08-11 14:56:21.074050,F4DYB3N0,1.288044678617704,103.39885860467642,8871.329749097327,61.99200547289415,58.83688398008453 +2023-08-11 14:56:21.576151,PW3F9ME0,0.9233842872356228,104.08348458520433,7927.525263352071,64.16846567353564,152.599189825038 +2023-08-11 14:57:05.231324,FNGPJX5S,2.01324168079291,104.54234016836925,2676.001234545254,19.008721444006866,316.9814359367978 +2023-08-11 14:57:05.733850,B97GQZYH,2.53312623956631,104.04103244964364,4988.748428002863,13.520652764654455,265.08280413883347 +2023-08-11 14:57:19.743058,ELXQVP6M,1.704137082649641,103.29015303168018,6056.563144008637,185.91957811874943,86.05896961730316 +2023-08-11 14:57:20.245813,PMTFG3J0,1.9074272669049257,103.17270519973093,2649.108782016278,266.65403521961565,270.35370368963686 +2023-08-11 15:00:10.047316,O02GFPS6,1.277749101610194,104.26458898234817,4130.0734252209595,15.664292331581521,19.903384332726738 +2023-08-11 15:00:10.549669,3IKJP9MT,1.8124135218622144,104.57942826744241,5420.658077352466,20.740088643364363,283.8161773020808 +2023-08-11 15:01:33.934274,8BQLXUHE,1.5327567388645453,103.3863745470156,3372.279095522782,159.41347014788764,262.267904514094 +2023-08-11 15:01:34.437295,3LFSAM9H,1.8669818695353841,104.2866164757171,1961.8044788861139,241.99124310146675,143.3455785657137 +2023-08-11 15:07:52.126936,JT8DYR7N,1.4024160158636994,102.87552832323641,6042.330052767699,64.8487719192847,24.995737515790477 +2023-08-11 15:07:52.629362,2QBXVSMO,1.8634571530932547,103.3477849546587,147.82689567174384,0.7438864717812521,210.92321810535572 +2023-08-11 15:09:37.011550,Y9HAJG13,0.7621085535475214,104.5883340186613,6281.27648517384,254.0777179571405,2.591149704169009 +2023-08-11 15:09:37.514614,TC87105F,0.28799871315503567,104.4566035466536,326.8025629224476,334.81266379042364,205.8735351017741 +2023-08-11 18:47:39.324319,BTALR1SN,1.7185325787303525,104.23182762113206,4183.860142045951,232.05679041675768,208.4984296149201 +2023-08-11 18:47:39.831819,7W2UXQEC,0.848324073173931,103.63219829223075,5.225685461417925,240.50270578891752,193.5626899797196 +2023-08-16 14:11:16.162841,7FKN5HCA,1.3949368237496726,103.12567340384494,4514.507674967041,198.56942733498173,62.82676652049499 +2023-08-16 14:11:16.669623,YISATP65,1.8893401716942906,103.18275655920301,2453.0791390552445,213.93147961762696,9.490155929720345 +2023-08-16 14:22:28.992618,3QIJMBYN,1.4626433193360946,102.831420528882,4981.507608822616,168.4543602196054,263.1284789998873 \ No newline at end of file diff --git a/pyhackrf.py b/pyhackrf.py index 62f5c60..72e5b79 100644 --- a/pyhackrf.py +++ b/pyhackrf.py @@ -51,7 +51,7 @@ class LibHackRfReturnCode(IntEnum): class LibHackRfBoardIds(IntEnum): BOARD_ID_JELLYBEAN = 0 BOARD_ID_JAWBREAKER = 1 - BOARD_ID_HACKRF_ONE = 2 + BOARD_ID_HACKRF_ONE = 4 # 4 for V9 and later, 2 for earlier BOARD_ID_RAD1O = 3 BOARD_ID_INVALID = 0xFF @@ -807,7 +807,8 @@ def isStreaming(self): if self.opened() and self.getTransceiverMode() != LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF: return __class__.__libhackrf.hackrf_is_streaming(self.__pDevice) == LibHackRfReturnCode.HACKRF_TRUE else: - print("isStreaming corner case") + print("[*] isStreaming corner case") + print("[*] Trying to call isStreaming for non-opened or non transmitting " + __class__.__name__) __class__.__logger.debug( "Trying to call isStreaming for non-opened or non transmitting " + __class__.__name__) return False @@ -872,16 +873,22 @@ def startTX(self, callback, tx_context): result = __class__.__libhackrf.hackrf_start_tx(self.__pDevice, self.__txCallback, None) else: + print("[*] tx_context:",tx_context) + print("[*] pDevice:",self.__pDevice) + print("[*] txCallback:",self.__txCallback) + # TX start is called HERE result = __class__.__libhackrf.hackrf_start_tx(self.__pDevice, self.__txCallback, byref(tx_context)) if (result == LibHackRfReturnCode.HACKRF_SUCCESS): __class__.__logger.info("Success starting TX") self.__transceiverMode = LibHackRfTransceiverMode.TRANSCEIVER_MODE_TX + print("[*] Success starting TX") else: __class__.__logger.error( "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") while starting TX ", result) else: __class__.__logger.debug("Trying to start TX for non-opened or in transmission " + __class__.__name__) + print("[!] Trying to start TX for non-opened or in transmission " + __class__.__name__) return result def getTransceiverMode(self): diff --git a/pyhackrf_backup.py b/pyhackrf_backup.py new file mode 100644 index 0000000..d977a6e --- /dev/null +++ b/pyhackrf_backup.py @@ -0,0 +1,1031 @@ +# +# Python wrapper for libhackrf +# +# Copyright 2019 Mathieu Peyrega +# +# This file is part of HackRF. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +import logging +from ctypes import * +from enum import IntEnum + +logging.basicConfig() + + +# +# libhackrf enums +# +class LibHackRfReturnCode(IntEnum): + HACKRF_SUCCESS = 0 + HACKRF_TRUE = 1 + HACKRF_ERROR_INVALID_PARAM = -2 + HACKRF_ERROR_NOT_FOUND = -5 + HACKRF_ERROR_BUSY = -6 + HACKRF_ERROR_NO_MEM = -11 + HACKRF_ERROR_LIBUSB = -1000 + HACKRF_ERROR_THREAD = -1001 + HACKRF_ERROR_STREAMING_THREAD_ERR = -1002 + HACKRF_ERROR_STREAMING_STOPPED = -1003 + HACKRF_ERROR_STREAMING_EXIT_CALLED = -1004 + HACKRF_ERROR_USB_API_VERSION = -1005 + HACKRF_ERROR_NOT_LAST_DEVICE = -2000 + HACKRF_ERROR_OTHER = -9999 + + +class LibHackRfBoardIds(IntEnum): + BOARD_ID_JELLYBEAN = 0 + BOARD_ID_JAWBREAKER = 1 + # For HackRF One V9+, BoardId is 4 + BOARD_ID_HACKRF_ONE = 4 + # For older HackRF Ones + #BOARD_ID_HACKRF_ONE = 2 + BOARD_ID_RAD1O = 3 + BOARD_ID_INVALID = 0xFF + + +class LibHackRfUSBBoardIds(IntEnum): + USB_BOARD_ID_JAWBREAKER = 0x604B + USB_BOARD_ID_HACKRF_ONE = 0x6089 + USB_BOARD_ID_RAD1O = 0xCC15 + USB_BOARD_ID_INVALID = 0xFFFF + + +class LibHackRfPathFilter(IntEnum): + RF_PATH_FILTER_BYPASS = 0 + RF_PATH_FILTER_LOW_PASS = 1 + RF_PATH_FILTER_HIGH_PASS = 2 + + +class LibHackRfTransceiverMode(IntEnum): + TRANSCEIVER_MODE_OFF = 0 + TRANSCEIVER_MODE_RX = 1 + TRANSCEIVER_MODE_TX = 2 + TRANSCEIVER_MODE_SS = 3 + + +class LibHackRfHwMode(IntEnum): + HW_MODE_OFF = 0 + HW_MODE_ON = 1 + + +# +# C structs or datatypes needed to interface Python and C +# +hackrf_device_p = c_void_p + + +class hackrf_transfer(Structure): + _fields_ = [("device", hackrf_device_p), + ("buffer", POINTER(c_ubyte)), + ("buffer_length", c_int), + ("valid_length", c_int), + ("rx_ctx", c_void_p), + ("tx_ctx", c_void_p)] + + +class read_partid_serialno_t(Structure): + _fields_ = [("part_id", c_uint32 * 2), + ("serial_no", c_uint32 * 4)] + + +class hackrf_device_list_t(Structure): + _fields_ = [("serial_numbers", POINTER(c_char_p)), + ("usb_board_ids", POINTER(c_int)), + ("usb_device_index", POINTER(c_int)), + ("devicecount", c_int), + ("usb_devices", POINTER(c_void_p)), + ("usb_devicecount", c_int)] + + +hackrf_transfer_callback_t = CFUNCTYPE(c_int, POINTER(hackrf_transfer)) + + +# +# libhackrf Python wrapper class +# +class HackRF(object): + # Class attibutes + __libhackrf = None + __libhackrfpath = None + __libraryversion = None + __libraryrelease = None + __instances = list() + __openedInstances = dict() + __logger = logging.getLogger("pyHackRF") + __logger.setLevel(logging.CRITICAL) + + @classmethod + def setLogLevel(cls, level): + cls.__logger.setLevel(level) + + def __init__(self, libhackrf_path='libhackrf.so.0'): + if (not __class__.initialized()): + __class__.initialize(libhackrf_path) + else: + __class__.__logger.debug("Instanciating " + __class__.__name__ + " object number #%d", + len(__class__.__instances)) + + # Instances attributes + # Description, serial and internals + self.__pDevice = hackrf_device_p(None) + self.__boardId = None + self.__usbboardId = None + self.__usbIndex = None + self.__usbAPIVersion = None + self.__boardFwVersionString = None + self.__partId = None + self.__serialNo = None + self.__CPLDcrc = None + self.__txCallback = None + self.__rxCallback = None + # RF state and settings + self.__transceiverMode = LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF + self.__hwSyncMode = LibHackRfHwMode.HW_MODE_OFF + self.__clockOutMode = LibHackRfHwMode.HW_MODE_OFF + self.__amplificatorMode = LibHackRfHwMode.HW_MODE_OFF + self.__antennaPowerMode = LibHackRfHwMode.HW_MODE_OFF + + self.__crystalppm = 0. + + # trial to implement getters, but this would probably be better to + # have it done from the .c library rather than a DIY solution here + # relevant parts have been commented out + # self.__lnaGain = 0 + # self.__vgaGain = 0 + # self.__txvgaGain = 0 + # self.__basebandFilterBandwidth = 0 + # self.__frequency = 0 + # self.__loFrequency = 0 + # self.__rfFilterPath = LibHackRfPathFilter.RF_PATH_FILTER_BYPASS + + __class__.__instances.append(self) + + def __del__(self): + __class__.__instances.remove(self) + __class__.__logger.debug(__class__.__name__ + " __del__ being called") + if (len(__class__.__instances) == 0): + __class__.__logger.debug(__class__.__name__ + " __del__ being called on the last instance") + + @classmethod + def initialized(cls): + return cls.__libhackrf is not None + + @classmethod + def initialize(cls, libhackrf_path='libhackrf.so.0'): + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if (not cls.initialized()): + cls.__libhackrfpath = libhackrf_path + cls.__libhackrf = CDLL(cls.__libhackrfpath) + + # + # begin of C to Python bindings + # + + # + # Library initialization / deinitialization + # + + # extern ADDAPI int ADDCALL hackrf_init(); + cls.__libhackrf.hackrf_init.restype = c_int + cls.__libhackrf.hackrf_init.argtypes = [] + + # extern ADDAPI int ADDCALL hackrf_exit(); + cls.__libhackrf.hackrf_exit.restype = c_int + cls.__libhackrf.hackrf_exit.argtypes = [] + + # extern ADDAPI const char* ADDCALL hackrf_library_version(); + cls.__libhackrf.hackrf_library_version.restype = c_char_p + cls.__libhackrf.hackrf_library_version.argtypes = [] + # extern ADDAPI const char* ADDCALL hackrf_library_release(); + cls.__libhackrf.hackrf_library_release.restype = c_char_p + cls.__libhackrf.hackrf_library_release.argtypes = [] + + # extern ADDAPI const char* ADDCALL hackrf_error_name(enum hackrf_error errcode); + cls.__libhackrf.hackrf_error_name.restype = c_char_p + cls.__libhackrf.hackrf_error_name.argtypes = [c_int] + + # extern ADDAPI int ADDCALL hackrf_open(hackrf_device** device); + # purposely not offered as a replacement logic is set-up + + # + # Not implemented yet + # + + # extern ADDAPI int ADDCALL hackrf_max2837_read(hackrf_device* device, uint8_t register_number, uint16_t* value); + # extern ADDAPI int ADDCALL hackrf_max2837_write(hackrf_device* device, uint8_t register_number, uint16_t value); + # extern ADDAPI int ADDCALL hackrf_si5351c_read(hackrf_device* device, uint16_t register_number, uint16_t* value); + # extern ADDAPI int ADDCALL hackrf_si5351c_write(hackrf_device* device, uint16_t register_number, uint16_t value); + # extern ADDAPI int ADDCALL hackrf_rffc5071_read(hackrf_device* device, uint8_t register_number, uint16_t* value); + # extern ADDAPI int ADDCALL hackrf_rffc5071_write(hackrf_device* device, uint8_t register_number, uint16_t value); + # extern ADDAPI int ADDCALL hackrf_spiflash_erase(hackrf_device* device); + # extern ADDAPI int ADDCALL hackrf_spiflash_write(hackrf_device* device, const uint32_t address, const uint16_t length, unsigned char* const data); + # extern ADDAPI int ADDCALL hackrf_spiflash_read(hackrf_device* device, const uint32_t address, const uint16_t length, unsigned char* data); + # extern ADDAPI int ADDCALL hackrf_spiflash_status(hackrf_device* device, uint8_t* data); + # extern ADDAPI int ADDCALL hackrf_spiflash_clear_status(hackrf_device* device); + # extern ADDAPI int ADDCALL hackrf_cpld_write(hackrf_device* device, unsigned char* const data, const unsigned int total_length); + # extern ADDAPI int ADDCALL hackrf_get_operacake_boards(hackrf_device* device, uint8_t* boards); + # extern ADDAPI int ADDCALL hackrf_set_operacake_ports(hackrf_device* device, uint8_t address, uint8_t port_a, uint8_t port_b); + # extern ADDAPI int ADDCALL hackrf_set_operacake_ranges(hackrf_device* device, uint8_t* ranges, uint8_t num_ranges); + # extern ADDAPI int ADDCALL hackrf_operacake_gpio_test(hackrf_device* device, uint8_t address, uint16_t* test_result); + + # + # General low level hardware management + # list, open, close + # + + # extern ADDAPI hackrf_device_list_t* ADDCALL hackrf_device_list(); + cls.__libhackrf.hackrf_device_list.restype = POINTER(hackrf_device_list_t) + cls.__libhackrf.hackrf_device_list.argtypes = [] + + # extern ADDAPI void ADDCALL hackrf_device_list_free(hackrf_device_list_t *list); + cls.__libhackrf.hackrf_device_list_free.restype = None + cls.__libhackrf.hackrf_device_list_free.argtypes = [POINTER(hackrf_device_list_t)] + + # extern ADDAPI int ADDCALL hackrf_open(hackrf_device** device); + cls.__libhackrf.hackrf_open.restype = c_int + cls.__libhackrf.hackrf_open.argtypes = [POINTER(hackrf_device_p)] + + # extern ADDAPI int ADDCALL hackrf_open_by_serial(const char* const desired_serial_number, hackrf_device** device); + cls.__libhackrf.hackrf_open_by_serial.restype = c_int + cls.__libhackrf.hackrf_open_by_serial.arg_types = [c_char_p, POINTER(hackrf_device_p)] + + # extern ADDAPI int ADDCALL hackrf_device_list_open(hackrf_device_list_t *list, int idx, hackrf_device** device); + cls.__libhackrf.hackrf_device_list_open.restype = c_int + cls.__libhackrf.hackrf_device_list_open.arg_types = [POINTER(hackrf_device_list_t), c_int, + POINTER(hackrf_device_p)] + + # extern ADDAPI int ADDCALL hackrf_close(hackrf_device* device); + cls.__libhackrf.hackrf_close.restype = c_int + cls.__libhackrf.hackrf_close.argtypes = [hackrf_device_p] + + # extern ADDAPI int ADDCALL hackrf_reset(hackrf_device* device); + cls.__libhackrf.hackrf_reset.restype = c_int + cls.__libhackrf.hackrf_reset.argtypes = [hackrf_device_p] + + # extern ADDAPI int ADDCALL hackrf_board_id_read(hackrf_device* device, uint8_t* value); + cls.__libhackrf.hackrf_board_id_read.restype = c_int + cls.__libhackrf.hackrf_board_id_read.argtypes = [hackrf_device_p, POINTER(c_uint8)] + + # extern ADDAPI int ADDCALL hackrf_version_string_read(hackrf_device* device, char* version, uint8_t length); + cls.__libhackrf.hackrf_version_string_read.restype = c_int + cls.__libhackrf.hackrf_version_string_read.argtypes = [hackrf_device_p, POINTER(c_char), c_uint8] + + # extern ADDAPI int ADDCALL hackrf_usb_api_version_read(hackrf_device* device, uint16_t* version); + cls.__libhackrf.hackrf_usb_api_version_read.restype = c_int + cls.__libhackrf.hackrf_usb_api_version_read.argtypes = [hackrf_device_p, POINTER(c_uint16)] + + # extern ADDAPI int ADDCALL hackrf_board_partid_serialno_read(hackrf_device* device, read_partid_serialno_t* read_partid_serialno); + cls.__libhackrf.hackrf_board_partid_serialno_read.restype = c_int + cls.__libhackrf.hackrf_board_partid_serialno_read.argtypes = [hackrf_device_p, + POINTER(read_partid_serialno_t)] + + # extern ADDAPI int ADDCALL hackrf_cpld_checksum(hackrf_device* device, uint32_t* crc); + # this is now disabled by default in libhackrf (see hackrf.h line 323) + #cls.__libhackrf.hackrf_cpld_checksum.restype = c_int + #cls.__libhackrf.hackrf_cpld_checksum.argtypes = [hackrf_device_p, POINTER(c_uint32)] + + # extern ADDAPI const char* ADDCALL hackrf_board_id_name(enum hackrf_board_id board_id); + cls.__libhackrf.hackrf_board_id_name.restype = c_char_p + cls.__libhackrf.hackrf_board_id_name.argtypes = [c_int] + # extern ADDAPI const char* ADDCALL hackrf_usb_board_id_name(enum hackrf_usb_board_id usb_board_id); + cls.__libhackrf.hackrf_usb_board_id_name.restype = c_char_p + cls.__libhackrf.hackrf_usb_board_id_name.argtypes = [c_int] + + # extern ADDAPI const char* ADDCALL hackrf_filter_path_name(const enum rf_path_filter path); + cls.__libhackrf.hackrf_filter_path_name.restype = c_char_p + cls.__libhackrf.hackrf_filter_path_name.argtypes = [c_int] + + # extern ADDAPI int ADDCALL hackrf_set_hw_sync_mode(hackrf_device* device, const uint8_t value); + cls.__libhackrf.hackrf_set_hw_sync_mode.restype = c_int + cls.__libhackrf.hackrf_set_hw_sync_mode.argtypes = [hackrf_device_p, c_uint8] + + # extern ADDAPI int ADDCALL hackrf_set_clkout_enable(hackrf_device* device, const uint8_t value); + cls.__libhackrf.hackrf_set_clkout_enable.restype = c_int + cls.__libhackrf.hackrf_set_clkout_enable.argtypes = [hackrf_device_p, c_uint8] + + # + # RF settings + # + # extern ADDAPI int ADDCALL hackrf_set_baseband_filter_bandwidth(hackrf_device* device, const uint32_t bandwidth_hz); + cls.__libhackrf.hackrf_set_baseband_filter_bandwidth.restype = c_int + cls.__libhackrf.hackrf_set_baseband_filter_bandwidth.argtypes = [hackrf_device_p, c_uint32] + + # extern ADDAPI int ADDCALL hackrf_set_freq(hackrf_device* device, const uint64_t freq_hz); + cls.__libhackrf.hackrf_set_freq.restype = c_int + cls.__libhackrf.hackrf_set_freq.argtypes = [hackrf_device_p, c_uint64] + + # extern ADDAPI int ADDCALL hackrf_set_freq_explicit(hackrf_device* device, const uint64_t if_freq_hz, const uint64_t lo_freq_hz, const enum rf_path_filter path); + cls.__libhackrf.hackrf_set_freq_explicit.restype = c_int + cls.__libhackrf.hackrf_set_freq_explicit.argtypes = [hackrf_device_p, c_uint64, c_uint64, c_uint32] + + # extern ADDAPI int ADDCALL hackrf_set_sample_rate_manual(hackrf_device* device, const uint32_t freq_hz, const uint32_t divider); + cls.__libhackrf.hackrf_set_sample_rate_manual.restype = c_int + cls.__libhackrf.hackrf_set_sample_rate_manual.argtypes = [hackrf_device_p, c_uint32, c_uint32] + + # extern ADDAPI int ADDCALL hackrf_set_sample_rate(hackrf_device* device, const double freq_hz); + cls.__libhackrf.hackrf_set_sample_rate.restype = c_int + cls.__libhackrf.hackrf_set_sample_rate.argtypes = [hackrf_device_p, c_double] + + # extern ADDAPI int ADDCALL hackrf_set_lna_gain(hackrf_device* device, uint32_t value); + cls.__libhackrf.hackrf_set_lna_gain.restype = c_int + cls.__libhackrf.hackrf_set_lna_gain.argtypes = [hackrf_device_p, c_uint32] + + # extern ADDAPI int ADDCALL hackrf_set_vga_gain(hackrf_device* device, uint32_t value); + cls.__libhackrf.hackrf_set_vga_gain.restype = c_int + cls.__libhackrf.hackrf_set_vga_gain.argtypes = [hackrf_device_p, c_uint32] + + # extern ADDAPI int ADDCALL hackrf_set_txvga_gain(hackrf_device* device, uint32_t value); + cls.__libhackrf.hackrf_set_txvga_gain.restype = c_int + cls.__libhackrf.hackrf_set_txvga_gain.argtypes = [hackrf_device_p, c_uint32] + + # extern ADDAPI int ADDCALL hackrf_set_amp_enable(hackrf_device* device, const uint8_t value); + cls.__libhackrf.hackrf_set_amp_enable.restype = c_int + cls.__libhackrf.hackrf_set_amp_enable.argtypes = [hackrf_device_p, c_uint8] + + # extern ADDAPI int ADDCALL hackrf_set_antenna_enable(hackrf_device* device, const uint8_t value); + cls.__libhackrf.hackrf_set_antenna_enable.restype = c_int + cls.__libhackrf.hackrf_set_antenna_enable.argtypes = [hackrf_device_p, c_uint8] + + # extern ADDAPI uint32_t ADDCALL hackrf_compute_baseband_filter_bw_round_down_lt(const uint32_t bandwidth_hz); + cls.__libhackrf.hackrf_compute_baseband_filter_bw_round_down_lt.restype = c_int + cls.__libhackrf.hackrf_compute_baseband_filter_bw_round_down_lt.argtypes = [c_uint32] + + # extern ADDAPI uint32_t ADDCALL hackrf_compute_baseband_filter_bw(const uint32_t bandwidth_hz); + cls.__libhackrf.hackrf_compute_baseband_filter_bw.restype = c_int + cls.__libhackrf.hackrf_compute_baseband_filter_bw.argtypes = [c_uint32] + + # + # Transfers management + # + + # extern ADDAPI int ADDCALL hackrf_is_streaming(hackrf_device* device); + cls.__libhackrf.hackrf_is_streaming.restype = c_int + cls.__libhackrf.hackrf_is_streaming.argtypes = [hackrf_device_p] + + # extern ADDAPI int ADDCALL hackrf_start_rx(hackrf_device* device, hackrf_sample_block_cb_fn callback, void* rx_ctx); + cls.__libhackrf.hackrf_start_rx.restype = c_int + cls.__libhackrf.hackrf_start_rx.argtypes = [hackrf_device_p, hackrf_transfer_callback_t, c_void_p] + + # extern ADDAPI int ADDCALL hackrf_start_tx(hackrf_device* device, hackrf_sample_block_cb_fn callback, void* tx_ctx); + cls.__libhackrf.hackrf_start_tx.restype = c_int + cls.__libhackrf.hackrf_start_tx.argtypes = [hackrf_device_p, hackrf_transfer_callback_t, c_void_p] + + # extern ADDAPI int ADDCALL hackrf_stop_rx(hackrf_device* device); + cls.__libhackrf.hackrf_stop_rx.restype = c_int + cls.__libhackrf.hackrf_stop_rx.argtypes = [hackrf_device_p] + + # extern ADDAPI int ADDCALL hackrf_stop_tx(hackrf_device* device); + cls.__libhackrf.hackrf_stop_tx.restype = c_int + cls.__libhackrf.hackrf_stop_tx.argtypes = [hackrf_device_p] + + # extern ADDAPI int ADDCALL hackrf_init_sweep(hackrf_device* device, const uint16_t* frequency_list, const int num_ranges, const uint32_t num_bytes, const uint32_t step_width, const uint32_t offset, const enum sweep_style style); + cls.__libhackrf.hackrf_init_sweep.restype = c_int + cls.__libhackrf.hackrf_init_sweep.argtypes = [hackrf_device_p, POINTER(c_uint16), c_int, c_uint32, c_uint32, + c_uint32, c_uint32] + + # + # end of C to Python bindings + # + + result = cls.__libhackrf.hackrf_init() + + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + cls.__logger.error( + cls.__name__ + " class initialization failed, error=(%d," + __class__.getHackRfErrorCodeName( + result) + ")", result) + else: + cls.__libraryversion = cls.__libhackrf.hackrf_library_version().decode("UTF-8") + cls.__logger.debug(cls.__name__ + " library version : " + cls.__libraryversion) + cls.__libraryrelease = cls.__libhackrf.hackrf_library_release().decode("UTF-8") + cls.__logger.debug(cls.__name__ + " library release : " + cls.__libraryrelease) + cls.__logger.debug(cls.__name__ + " class initialization successfull") + + else: + __class__.__logger.debug(cls.__name__ + " is already initialized") + return result + + @classmethod + def getInstanceByDeviceHandle(cls, pDevice): + return cls.__openedInstances.get(pDevice, None) + + @classmethod + def getDeviceListPointer(cls): + if (not __class__.initialized()): + __class__.initialize() + + pHackRfDeviceList = cls.__libhackrf.hackrf_device_list() + return pHackRfDeviceList + + @classmethod + def freeDeviceList(cls, pList): + if (not cls.initialized()): + cls.initialize() + + pHackRfDeviceList = cls.__libhackrf.hackrf_device_list_free(pList) + + @classmethod + def getHackRfErrorCodeName(cls, ec): + if (not cls.initialized()): + cls.initialize() + + return cls.__libhackrf.hackrf_error_name(ec).decode("UTF-8") + + @classmethod + def getBoardNameById(cls, bid): + if (not cls.initialized()): + cls.initialize() + + return cls.__libhackrf.hackrf_board_id_name(bid).decode("UTF-8") + + @classmethod + def getUsbBoardNameById(cls, usbbid): + if (not cls.initialized()): + cls.initialize() + + return cls.__libhackrf.hackrf_usb_board_id_name(usbbid).decode("UTF-8") + + @classmethod + def getHackRFFilterPathNameById(cls, rfpid): + if (not cls.initialized()): + cls.initialize() + + return cls.__libhackrf.hackrf_filter_path_name(rfpid).decode("UTF-8") + + @classmethod + def deinitialize(cls): + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if (cls.initialized()): + for hackrf in cls.__instances: + hackrf.stop() + + result = cls.__libhackrf.hackrf_exit() + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + cls.__libhackrf = None + else: + cls.__logger.error( + cls.__name__ + " class deinitialization failed, error=(%d," + __class__.getHackRfErrorCodeName( + result) + ")", result) + + return result + + @classmethod + def getLibraryVersion(cls): + if (not cls.initialized()): + cls.initialize() + + return cls.__libraryversion + + @classmethod + def getLibraryRelease(cls): + if (not cls.initialized()): + cls.initialize() + + return cls.__libraryrelease + + @classmethod + def computeBaseBandFilterBw(cls, bandwidth): + if (not cls.initialized()): + cls.initialize() + + return cls.__libhackrf.hackrf_compute_baseband_filter_bw(bandwidth) + + @classmethod + def computeBaseBandFilterBwRoundDownLt(cls, bandwidth): + if (not cls.initialized()): + cls.initialize() + + return cls.__libhackrf.hackrf_compute_baseband_filter_bw_round_down_lt(bandwidth) + + def opened(self): + return self.__pDevice.value is not None + + def closed(self): + return self.__pDevice.value is None + + def open(self, openarg=-1): + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if not self.opened(): + if (isinstance(openarg, int)): + result = self.__openByIndex(openarg) + elif (isinstance(openarg, str)): + result = self.__openBySerial(openarg.lower()) + else: + __class__.__logger.debug("Trying to open an already opened " + __class__.__name__) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__openedInstances[self.__pDevice.value] = self + return result + + def close(self): + __class__.__logger.debug("Trying to close a " + __class__.__name__) + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_close(self.__pDevice) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") while closing a " + __class__.__name__, + result) + else: + __class__.__logger.info("Success closing " + __class__.__name__) + __class__.__openedInstances.pop(self.__pDevice.value, None) + self.__pDevice.value = None + self.__boardId = None + self.__usbboardId = None + self.__usbIndex = None + self.__usbAPIVersion = None + self.__boardFwVersionString = None + self.__partId = None + self.__serialNo = None + self.__CPLDcrc = None + self.__txCallback = None + self.__rxCallback = None + self.__transceiverMode = LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF + self.__hwSyncMode = LibHackRfHwMode.HW_MODE_OFF + self.__clockOutMode = LibHackRfHwMode.HW_MODE_OFF + self.__amplificatorMode = LibHackRfHwMode.HW_MODE_OFF + self.__antennaPowerMode = LibHackRfHwMode.HW_MODE_OFF + self.__crystalppm = 0 + # self.__lnaGain = 0 + # self.__vgaGain = 0 + # self.__txvgaGain = 0 + # self.__basebandFilterBandwidth = 0 + # self.__frequency = 0 + # self.__loFrequency = 0 + # self.__rfFilterPath = LibHackRfPathFilter.RF_PATH_FILTER_BYPASS + + else: + __class__.__logger.debug("Trying to close a non-opened " + __class__.__name__) + return result + + def reset(self): + __class__.__logger.debug("Trying to reset a " + __class__.__name__) + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_reset(self.__pDevice) + else: + __class__.__logger.debug("Trying to reset a non-opened " + __class__.__name__) + return result + + def getBoardSerialNumberString(self, words_separator=''): + if not self.opened(): + __class__.__logger.error( + __class__.__name__ + " getBoardSerialNumberString() has been called on a closed instance") + raise Exception(__class__.__name__ + " getBoardSerialNumberString() has been called on a closed instance") + else: + return ( + "{:08x}" + words_separator + "{:08x}" + words_separator + "{:08x}" + words_separator + "{:08x}").format( + self.__serialNo[0], self.__serialNo[1], self.__serialNo[2], self.__serialNo[3]) + + def getBoardSerialNumber(self): + if not self.opened(): + __class__.__logger.error( + __class__.__name__ + " getBoardSerialNumber() has been called on a closed instance") + raise Exception(__class__.__name__ + " getBoardSerialNumber() has been called on a closed instance") + else: + return self.__serialNo + + def __readBoardSerialNumber(self): + # Board SerialNo and PartID + serinfo = read_partid_serialno_t((-1, -1), (-1, -1, -1, -1)) + result = __class__.__libhackrf.hackrf_board_partid_serialno_read(self.__pDevice, byref(serinfo)) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") on hackrf_board_partid_serialno_read", + result) + else: + self.__partId = (serinfo.part_id[0], serinfo.part_id[1]) + __class__.__logger.debug( + __class__.__name__ + " opened board part id : " + "{:08x}:{:08x}".format(self.__partId[0], + self.__partId[1])) + self.__serialNo = (serinfo.serial_no[0], serinfo.serial_no[1], serinfo.serial_no[2], serinfo.serial_no[3]) + __class__.__logger.debug( + __class__.__name__ + " opened board serial number : " + self.getBoardSerialNumberString(':')) + + def __openByIndex(self, deviceindex): + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + + pHDL = __class__.getDeviceListPointer() + + if (deviceindex == -1): + __class__.__logger.debug("Try to open first available HackRF") + __class__.__logger.debug("%d devices detected", pHDL.contents.devicecount) + for index in range(0, pHDL.contents.devicecount): + __class__.__logger.debug("trying to open device index %d", index) + result = self.open(index) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + break + else: + __class__.__logger.debug("tested hackrf not available") + + else: + __class__.__logger.debug("Trying to open HackRF with index=%d", deviceindex) + + result = __class__.__libhackrf.hackrf_device_list_open(pHDL, deviceindex, byref(self.__pDevice)) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.error("Error (%d," + __class__.getHackRfErrorCodeName( + result) + ") while opening " + __class__.__name__ + " with index=%d", result, deviceindex) + else: + self.__readBoardSerialNumber() + self.__usbboardId = pHDL.contents.usb_board_ids[deviceindex] + self.__usbIndex = pHDL.contents.usb_device_index[deviceindex] + self.__readBoardInfos() + __class__.__logger.info("Success opening " + __class__.__name__) + + __class__.freeDeviceList(pHDL) + return result + + def __openBySerial(self, deviceserial): + __class__.__logger.debug("Trying to open a HackRF by serial number: " + deviceserial) + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + result = __class__.__libhackrf.hackrf_open_by_serial(c_char_p(deviceserial.encode("UTF-8")), + byref(self.__pDevice)) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.error("Error (%d," + __class__.getHackRfErrorCodeName( + result) + ") while opening " + __class__.__name__ + " with serial number=" + deviceserial, result) + else: + self.__readBoardSerialNumber() + pHDL = __class__.getDeviceListPointer() + for deviceindex in range(0, pHDL.contents.devicecount): + if pHDL.contents.serial_numbers[deviceindex].decode("UTF-8") == self.getBoardSerialNumberString(): + self.__usbboardId = pHDL.contents.usb_board_ids[deviceindex] + self.__usbIndex = pHDL.contents.usb_device_index[deviceindex] + break; + __class__.freeDeviceList(pHDL) + self.__readBoardInfos() + __class__.__logger.info("Success opening " + __class__.__name__) + + return result + + def __readBoardInfos(self): + if not self.opened(): + __class__.__logger.error(__class__.__name__ + " __readBoardInfos() has been called on a closed instance") + else: + # Board Id + bId = c_uint8(0) + result = __class__.__libhackrf.hackrf_board_id_read(self.__pDevice, byref(bId)) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") on hackrf_board_id_read", result) + else: + self.__boardId = LibHackRfBoardIds(bId.value) + __class__.__logger.debug( + __class__.__name__ + " opened board id : %d, " + self.__boardId.name + ", " + __class__.getBoardNameById( + self.__boardId), self.__boardId.value) + __class__.__logger.debug(__class__.__name__ + " opened usbboard id : " + "{:04x}, ".format( + self.__usbboardId) + __class__.getUsbBoardNameById(self.__usbboardId)) + + # Board Firmware Version + bfwversion_size = 128 + bfwversion = (c_char * bfwversion_size)() + result = __class__.__libhackrf.hackrf_version_string_read(self.__pDevice, bfwversion, bfwversion_size) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") on hackrf_version_string_read", result) + else: + self.__boardFwVersionString = bfwversion.value.decode("UTF-8") + __class__.__logger.debug( + __class__.__name__ + " opened board firmware version : " + self.__boardFwVersionString) + + # Board USB API version + bUSB_API_ver = c_uint16(0) + result = __class__.__libhackrf.hackrf_usb_api_version_read(self.__pDevice, byref(bUSB_API_ver)) + if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") on hackrf_usb_api_version_read", + result) + else: + self.__usbAPIVersion = bUSB_API_ver.value + __class__.__logger.debug( + __class__.__name__ + " opened board USB API version : " + "{:02x}:{:02x}".format( + self.__usbAPIVersion >> 8, self.__usbAPIVersion & 0xFF)) + + # Board CLPD checksum + #cpld_checsum = c_uint32(-1) + #result = __class__.__libhackrf.hackrf_cpld_checksum(self.__pDevice, byref(cpld_checsum)) + #if (result != LibHackRfReturnCode.HACKRF_SUCCESS): + # __class__.__logger.error( + # "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") on hackrf_cpld_checksum", result) + #else: + # self.__CPLDcrc = cpld_checsum.value + # __class__.__logger.debug( + # __class__.__name__ + " opened board CPLD checksum : " + "{:08x}".format(self.__CPLDcrc)) + + def printBoardInfos(self): + if not self.opened(): + print(__class__.__name__ + " is closed and informations cannot be displayed") + else: + print(__class__.__name__ + " board id : " + "{:d}".format( + self.__boardId.value) + ", " + self.__boardId.name) + print(__class__.__name__ + " board name : " + __class__.getBoardNameById(self.__boardId)) + print(__class__.__name__ + " board USB id : " + "0x{:04x}".format( + self.__usbboardId) + ", " + __class__.getUsbBoardNameById(self.__usbboardId)) + print(__class__.__name__ + " board USB index : " + "0x{:04x}".format(self.__usbIndex)) + print(__class__.__name__ + " board USB API : " + "{:02x}:{:02x}".format(self.__usbAPIVersion >> 8, + self.__usbAPIVersion & 0xFF)) + print(__class__.__name__ + " board firmware : " + self.__boardFwVersionString) + print(__class__.__name__ + " board part id : " + "{:08x}:{:08x}".format(self.__partId[0], + self.__partId[1])) + print(__class__.__name__ + " board part id : " + self.getBoardSerialNumberString(':')) + #print(__class__.__name__ + " board CPLD checksum : " + "0x{:08x}".format(self.__CPLDcrc)) + + def stop(self): + # TODO : implement transfer stopping logics ? + self.close() + + def setHwSyncMode(self, mode): + __class__.__logger.debug(__class__.__name__ + " Trying to set HwSyncMode") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_hw_sync_mode(self.__pDevice, c_uint8(LibHackRfHwMode(mode).value)) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + self.__hwSyncMode = mode + else: + __class__.__logger.debug("Trying to set HwSyncMode for non-opened " + __class__.__name__) + return result + + def getHwSyncMode(self): + return self.__hwSyncMode + + def setClkOutMode(self, mode): + __class__.__logger.debug(__class__.__name__ + " Trying to set ClkOutMode") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_clkout_enable(self.__pDevice, + c_uint8(LibHackRfHwMode(mode).value)) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + self.__clockOutMode = mode + else: + __class__.__logger.debug("Trying to set ClkOutMode for non-opened " + __class__.__name__) + return result + + def getClkOutMode(self): + return self.__clockOutMode + + def setAmplifierMode(self, mode): + __class__.__logger.debug(__class__.__name__ + " Trying to set AmplifierMode") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_amp_enable(self.__pDevice, c_uint8(LibHackRfHwMode(mode).value)) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + self.__amplificatorMode = mode + else: + __class__.__logger.debug("Trying to set AmplifierMode for non-opened " + __class__.__name__) + return result + + def getAmplifierMode(self): + return self.__amplificatorMode + + def setAntennaPowerMode(self, mode): + __class__.__logger.debug(__class__.__name__ + " Trying to set AntennaPowerMode") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_antenna_enable(self.__pDevice, + c_uint8(LibHackRfHwMode(mode).value)) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + self.__antennaPowerMode = mode + else: + __class__.__logger.debug("Trying to set AntennaPowerMode for non-opened " + __class__.__name__) + return result + + def getAntennaPowerMode(self): + return self.__antennaPowerMode + + def isStreaming(self): + __class__.__logger.debug(__class__.__name__ + " Trying to call isStreaming") + if self.opened() and self.getTransceiverMode() != LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF: + return __class__.__libhackrf.hackrf_is_streaming(self.__pDevice) == LibHackRfReturnCode.HACKRF_TRUE + #else: + #print("isStreaming corner case") + #__class__.__logger.debug( + # "Trying to call isStreaming for non-opened or non transmitting " + __class__.__name__) + #return False + + def stopRX(self): + __class__.__logger.debug(__class__.__name__ + " Trying to stop RX") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened() and self.getTransceiverMode() != LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF: + result = __class__.__libhackrf.hackrf_stop_rx(self.__pDevice) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.info("Success stopping RX") + self.__transceiverMode = LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF + else: + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") while stopping RX ", result) + else: + __class__.__logger.debug("Trying to stop RX for non-opened or non transmitting " + __class__.__name__) + return result + + def stopTX(self): + __class__.__logger.debug(__class__.__name__ + " Trying to stop TX") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened() and self.getTransceiverMode() != LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF: + result = __class__.__libhackrf.hackrf_stop_tx(self.__pDevice) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.info("Success stopping TX") + self.__transceiverMode = LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF + else: + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") while stopping TX ", result) + else: + __class__.__logger.debug("Trying to stop TX for non-opened or non transmitting " + __class__.__name__) + return result + + def startRX(self, callback, rx_context): + __class__.__logger.debug(__class__.__name__ + " Trying to start RX") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened() and self.getTransceiverMode() == LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF: + self.__rxCallback = hackrf_transfer_callback_t(callback) + if rx_context is None: + result = __class__.__libhackrf.hackrf_start_rx(self.__pDevice, self.__rxCallback, + None) + else: + result = __class__.__libhackrf.hackrf_start_rx(self.__pDevice, self.__rxCallback, + byref(rx_context)) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.info("Success starting RX") + self.__transceiverMode = LibHackRfTransceiverMode.TRANSCEIVER_MODE_RX + else: + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") while starting RX ", result) + else: + __class__.__logger.debug("Trying to start RX for non-opened or in transmission " + __class__.__name__) + return result + + def startTX(self, callback, tx_context): + __class__.__logger.debug(__class__.__name__ + " Trying to start TX") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened() and self.getTransceiverMode() == LibHackRfTransceiverMode.TRANSCEIVER_MODE_OFF: + self.__txCallback = hackrf_transfer_callback_t(callback) + if tx_context is None: + result = __class__.__libhackrf.hackrf_start_tx(self.__pDevice, self.__txCallback, + None) + else: + result = __class__.__libhackrf.hackrf_start_tx(self.__pDevice, self.__txCallback, + byref(tx_context)) + if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + __class__.__logger.info("Success starting TX") + self.__transceiverMode = LibHackRfTransceiverMode.TRANSCEIVER_MODE_TX + else: + __class__.__logger.error( + "Error (%d," + __class__.getHackRfErrorCodeName(result) + ") while starting TX ", result) + else: + __class__.__logger.debug("Trying to start TX for non-opened or in transmission " + __class__.__name__) + return result + + def getTransceiverMode(self): + return self.__transceiverMode + + def setLNAGain(self, gain): + __class__.__logger.debug(__class__.__name__ + " Trying to set LNA gain") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_lna_gain(self.__pDevice, gain) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__lnaGain = gain + else: + __class__.__logger.debug("Trying to set LNA gain for non-opened " + __class__.__name__) + return result + + # def getLNAGain(self): + # return self.__lnaGain + + def setVGAGain(self, gain): + __class__.__logger.debug(__class__.__name__ + " Trying to set VGA gain") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_vga_gain(self.__pDevice, gain) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__vgaGain = gain + else: + __class__.__logger.debug("Trying to set VGA gain for non-opened " + __class__.__name__) + return result + + # def getVGAGain(self): + # return self.__vgaGain + + def setTXVGAGain(self, gain): + __class__.__logger.debug(__class__.__name__ + " Trying to set TX VGA gain") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_txvga_gain(self.__pDevice, gain) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__txvgaGain = gain + else: + __class__.__logger.debug("Trying to set TX VGA gain for non-opened " + __class__.__name__) + return result + + # def getTXVGAGain(self): + # return self.__txvgaGain + + def setBasebandFilterBandwidth(self, bandwidth): + __class__.__logger.debug(__class__.__name__ + " Trying to set baseband filter bandwidth") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_baseband_filter_bandwidth(self.__pDevice, bandwidth) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__basebandFilterBandwidth = bandwidth + else: + __class__.__logger.debug("Trying to set baseband filter bandwidth " + __class__.__name__) + return result + + # def getBasebandFilterBandwidth(self): + # return self.__basebandFilterBandwidth + + def setFrequency(self, frequency): + __class__.__logger.debug(__class__.__name__ + " Trying to set frequency") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_freq(self.__pDevice, self.__correctFrequency(frequency)) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__frequency = frequency + else: + __class__.__logger.debug("Trying to set frequency " + __class__.__name__) + return result + + def __correctFrequency(self, frequency): + return int(frequency * (1.0 - (self.__crystalppm / 1000000.0))) + + def __correctSampleRate(self, samplerate): + # + # Not sure why the +0.5 is there. I copied it from hackrf_transfer + # equivalent source code but this is probably not necessary, especially + # because there is already a +0.5 done in hackrf.c hackrf_set_sample_rate + # + return int(samplerate * (1.0 - (self.__crystalppm / 1000000.0)) + 0.5) + + # def getFrequency(self): + # return self.__frequency + + def setFrequencyExplicit(self, if_frequency, lo_frequency, rf_path): + __class__.__logger.debug(__class__.__name__ + " Trying to set frequency with details") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_freq_explicit(self.__pDevice, + self.__correctFrequency(if_frequency), + self.__correctFrequency(lo_frequency), + LibHackRfPathFilter(rf_path).value) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__ifFrequency = if_frequency + # self.__loFrequency = lo_frequency + # self.__rfFilterPath = LibHackRfPathFilter(rf_path) + else: + __class__.__logger.debug("Trying to set frequency with details " + __class__.__name__) + return result + + # def getIntermediateFrequency(self): + # return self.__ifFrequency + + # def getLocalOscillatorFrequency(self): + # return self.__loFrequency + + # def getRfFilterPath(self): + # return self.__rfFilterPath + + # + # This method should be called before setting frequency or baseband as in state + # it acts by modifying the values passed to libhackrf functions + # + def setCrystalPPM(self, ppm): + __class__.__logger.debug("This method must be called before setting frequency or samplerate") + self.__crystalppm = ppm + + def getCrystalPPM(self): + return self.__crystalppm + + def setSampleRate(self, samplerate): + __class__.__logger.debug(__class__.__name__ + " Trying to set samplerate") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_sample_rate(self.__pDevice, self.__correctSampleRate(samplerate)) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__sampleRate = samplerate + else: + __class__.__logger.debug("Trying to set samplerate " + __class__.__name__) + return result + + def setSampleRateManual(self, samplerate, divider): + __class__.__logger.debug(__class__.__name__ + " Trying to set samplerate") + result = LibHackRfReturnCode.HACKRF_ERROR_OTHER + if self.opened(): + result = __class__.__libhackrf.hackrf_set_sample_rate_manual(self.__pDevice, + self.__correctSampleRate(samplerate), divider) + # if (result == LibHackRfReturnCode.HACKRF_SUCCESS): + # self.__sampleRate = samplerate + else: + __class__.__logger.debug("Trying to set samplerate " + __class__.__name__) + return result diff --git a/scenario.json b/scenario.json new file mode 100644 index 0000000..1d3e879 --- /dev/null +++ b/scenario.json @@ -0,0 +1,18 @@ +{ + "plane1": + { + "filename":"./examples/MRYIA.json", + "trajectory_type":"waypoints", + "waypoints_file":"./examples/waypoints.txt" + }, + "plane2": + { + "filename":"./examples/AN-IL78MP.json", + "trajectory_type":"fixed" + }, + "plane3": + { + "filename":"./examples/A400M-110.json", + "trajectory_type":"flightsim" + } +} diff --git a/waypoints.csv b/waypoints.csv new file mode 100644 index 0000000..05b9688 --- /dev/null +++ b/waypoints.csv @@ -0,0 +1,4 @@ +DEADBEEF,1.400,103.500,16250,400,90,10 +DEADBEEF,1.400,103.505,16250,400,90,10 +DEADBEEF,1.400,103.510,16250,400,90,10 +DEADBEEF,1.400,103.515,16250,400,90,10