Audi steering wheel lin bus reading

Hey everyone!

I'm new to Arduino and trying to modify my car a bit :slight_smile:

I want to create a LinBus converter for steering wheel controls for my Audi A4 2013. Currently I have connected Arduino and MCP2004 with my car

And using this code

#include <SoftwareSerial.h>

// https://github.com/zapta/linbus/tree/master/analyzer/arduino
#include "lin_frame.h"

// Pins we use for MCP2004
#define RX_PIN 10
#define TX_PIN 11
#define FAULT_PIN 14
#define CS_PIN 8

#define SYN_FIELD 0x55

SoftwareSerial LINBusSerial(RX_PIN, TX_PIN);

byte b, i, n;
LinFrame frame;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

  // Open serial communications to host (PC) and wait for port to open:
  Serial.begin(9600, SERIAL_8E1);
  Serial.println("LIN Debugging begins");

  LINBusSerial.begin(19200);

  pinMode(CS_PIN, OUTPUT);
  digitalWrite(CS_PIN, HIGH);

  pinMode(FAULT_PIN, OUTPUT);
  digitalWrite(FAULT_PIN, HIGH);

  frame = LinFrame();
}

void loop() {
  if (LINBusSerial.available()) {
    b = LINBusSerial.read();
    n = frame.num_bytes();

    if (b == SYN_FIELD && n > 2 && frame.get_byte(n - 1) == 0) {
      //Added delay for better read if I delete this is doesn't read anything
      delay(10);
      digitalWrite(LED_BUILTIN, HIGH);
      frame.pop_byte();
      handle_frame();
      frame.reset();
      digitalWrite(LED_BUILTIN, LOW);
    } else if (n == LinFrame::kMaxBytes) {
      frame.reset();
    } else {
      frame.append_byte(b);
    }
  }
}

void handle_frame() {
  if (!frame.isValid())
    return;

  dump_frame();
}

void dump_frame() {
  for (i = 0; i < frame.num_bytes(); i++) {
    Serial.print(frame.get_byte(i), HEX);
    Serial.print(" ");
  }
  Serial.println();
}

I get this info

LIN Debugging begins
50 0 80 FF 7F 
C1 0 FF 0 
F0 0 55 50 0 80 FF 7F 0 0 
F0 F0 0 0 34 0 FF DA 
50 0 80 FF 7F 
C1 0 FF 0 
61 64 1 9A 
F0 F1 10 0 34 0 FF C9 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
50 0 80 FF 7F 0 
50 0 80 FF 7F 
61 64 1 9A 0 0 
F0 F2 20 0 34 0 FF B8 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
F0 F3 30 0 34 0 FF A7 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 0 
50 0 80 FF 7F 
61 64 1 9A 0 0 
F0 F4 47 0 34 0 FF 8F 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
F0 F5 57 0 34 0 FF 7E 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 0 
50 0 80 FF 7F 
61 64 1 9A 0 0 
F0 F6 67 0 34 0 FF 6D 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
F0 F7 70 0 34 0 FF 63 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 0 
50 0 80 FF 7F 
61 64 1 9A 0 0 
F0 F8 80 0 34 0 FF 52 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
F0 F9 97 0 34 0 FF 3A 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 0 
50 0 80 FF 7F 
61 64 1 9A 0 0 
F0 FA A7 0 34 0 FF 29 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
F0 FB B0 0 34 0 FF 1F 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 0 
50 0 80 FF 7F 
61 64 1 9A 0 0 
F0 FC C0 0 34 0 FF E 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
F0 FD D0 0 34 0 FF FC 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 0 
50 0 80 FF 7F 
61 64 1 9A 0 0 
F0 FE E0 0 34 0 FF EB 
50 0 80 FF 7F 0 0 
50 0 80 FF 7F 
C1 0 FF 0 0 0 
F0 FF F4 0 34 0 FF D6 

But from this i can't distinguish is this actual linbus frame

As I understand It should look like this
LIN_message

  1. Synchronisation interrupt.
  2. Identification field.
  3. Data information.
  4. Checksum.

But from what I get I feel like I'm doing something wrong :frowning:

Can someone help me to understand what I'm doing wrong? Or maybe someone has already done something with Audi and linbus readings and can share his knowledge?

People don't be shy, everyone can help :smiley:

Your posted code is there twice, maybe you double-pasted it.

Anyway, at a glance the code appears to be receiving, validating and dumping frames.

There is no way for it to print without the logic having been convinved of a proper frame going by.

What do you expect to see? Right now, every line should be a frame. At a glance.

Cool project and devices! Almost makes me wish I had a car. Or could still drive. :expressionless:

a7

1 Like

Can You elaborate that? There's a possibility that a modification of the car might be illegal. Vital functions of the car might get out of order.

1 Like

The "Typical Application" schematic in the datasheet for the MCP2004 shows a 4.7k pull-up resistor on the RX line.

1 Like

Yeah, I have edited it :smiley: I did double paste it :slight_smile:

I would expect to see actual frames , but it seems to be missing info :man_shrugging:

I actually used the code and schematic from here GitHub - laurynas/volvo_linbus: Volvo LIN bus reader. but probably it's missing the resistor

Not sure if that's the case :thinking: All i want to do is make the steering wheel switches play next song and volume up and down :smiley: I think it should be legal

Okey, only reading the bus....
Steering wheel..... Do want music playing to switch because of passing right or left bends on the road? Never mind. Reading the bus and understanding the data is the mission.

1 Like

Well I want to retrofit a steering wheel that uses lin 2.2 and if I understand right my cars supports only lin1.3 so basically I need to read the bus for old steering wheel , then for the new one and map the messages in correct order

Have You been trying to get in contact with Audi engineers?

Yeah, they said that it's a stupid idea and I should just buy a new car. Not understanding If I could buy a new car I would :smiley:

Hum.
That sounds like sales people, not engineers...
Could You go on using the old steering wheel? I've never heard about changing it.....

Sure, but I really want the new one :smiley:

Not clear. It sounds like you are trying to "capture" a few of the steering wheel controls, and pass the remainder to the vehicle. Then use these controls to do something sourced from the Arduino.

Or you trying to modify the LIN commands to change the function of the control --> vehicle function?

I want to capture the messages from the new steering wheel and pass as it is from the old one.

I know nothing about LIN but feel like your logic may not be syncing properly ( I admit I didn't go over it with a fine tooth comb...)

(EDIT: N/M I see what you're doing now. Probably better than my code since you look for the break...)

Any chance this does anything different?

#include <SoftwareSerial.h>

// https://github.com/zapta/linbus/tree/master/analyzer/arduino
#include "lin_frame.h"

#define SYN_FIELD 0x55

// Pins we use for MCP2004
const uint8_t pinRX = 10;
const uint8_t pinTX = 11;
const uint8_t pinFault = 14;
const uint8_t pinCS = 8;

enum eLINStates
{
    SEEK_SYNC = 0,
    GET_ID_DATA_CS    
};

SoftwareSerial LINBusSerial( pinRX, pinTX );

byte 
    b, i, n;

LinFrame frame;

void setup() 
{
    pinMode(LED_BUILTIN, OUTPUT);

    // Open serial communications to host (PC) and wait for port to open:
    Serial.begin(9600, SERIAL_8E1);
    Serial.println("LIN Debugging begins");
    
    LINBusSerial.begin(19200);
    
    pinMode( pinCS, OUTPUT );
    digitalWrite( pinCS, HIGH );
    
    pinMode( pinFault, OUTPUT );
    digitalWrite( pinFault, HIGH );
    
    frame = LinFrame();
    
}//setup

void loop() 
{
    static uint8_t
        stateLIN = SEEK_SYNC;
        
    if( LINBusSerial.available() ) 
    {
        b = LINBusSerial.read();
        switch( stateLIN )
        {
            case    SEEK_SYNC:
                //not sure if we can detect a break using SoftwareSerial so all we can do is just check
                //for the sync byte (0x55)
                if( b == SYN_FIELD )
                {
                    frame.reset();
                    stateLIN = GET_ID_DATA_CS;
                    
                }//if
                
            break;

            case    GET_ID_DATA_CS:
                if( frame.num_bytes() > LinFrame::kMaxBytes )
                {
                    stateLIN = SEEK_SYNC;
                    
                }//if
                else
                {
                    frame.append_byte(b);
                    if( frame.isValid() )
                    {
                        digitalWrite(LED_BUILTIN, HIGH);
                        dump_frame();
                        stateLIN = SEEK_SYNC;
                        digitalWrite(LED_BUILTIN, LOW);
    
                    }//if
                    
                }//if
                
            break;
            
        }//switch

    }//if
    
}//loop

void dump_frame() 
{
    uint8_t
        b;
    for (i = 0; i < frame.num_bytes(); i++) 
    {
        b = frame.get_byte(i);
        if( b <= 0xf )
            Serial.write( '0' );
        Serial.print( b, HEX);
        Serial.write( ' ' );
        
    }//for
    
    Serial.println();
    
}//dump_frame
1 Like

So all I get is this

50 
F0 
50 
F0 
50 
F0 
50 
50 
F0 
50 
F0 
50 
F0 
50 
F0 

Not really sure what it suppose to mean :thinking: It goes in the same pattern all the way

Looking at the source for your library it makes sense; it's not right, it just makes sense. I assumed doing an isValid() after each received byte would fail until an entire valid message is "valid." However, looking at the source for isValid, it appears that receiving just an ID by is sufficient to pass the validity test. So, after receiving the ID byte, I print it and then reset the frame and wait until another SYNC.

In your original code it looks like you receive bytes until you see a 0x00 0x55 -- a break and a SYNC, indicating the beginning of new frame, and then send the packet received up to that point for validation checking.

On the surface this should work but your frame contents seem to indicate that there's still some sort of sync issue.

Maybe you could try this; it just tries to sync and prints the contents received until the next start/sync sequence, similar to what your OP code did. I don't do any LIN stuff yet, just printing raw received data.

#include <SoftwareSerial.h>

#define FRAME_START     0x00
#define SYNC_FIELD      0x55

#define MAX_FRAME_BYTES 20

uint8_t
    frmIndex = 0;
uint8_t
    grFrame[MAX_FRAME_BYTES];

// Pins we use for MCP2004
const uint8_t pinRX = 10;
const uint8_t pinTX = 11;
const uint8_t pinFault = 14;
const uint8_t pinCS = 8;

enum eLINStates
{
    SEEK_FRAME_START = 0,
    SEEK_SYNC_BYTE,
    RECEIVE_FRAME_DATA,
     
};

SoftwareSerial 
    LINBusSerial( pinRX, pinTX );

byte 
    b, i, n;

void setup() 
{
    pinMode(LED_BUILTIN, OUTPUT);

    // Open serial communications to host (PC) and wait for port to open:
    Serial.begin(9600, SERIAL_8E1);
    Serial.println("LIN Debugging begins");
    
    LINBusSerial.begin(19200);
    
    pinMode( pinCS, OUTPUT );
    digitalWrite( pinCS, HIGH );
    
    pinMode( pinFault, OUTPUT );
    digitalWrite( pinFault, HIGH );
        
}//setup

void loop() 
{
    static bool
        bSyncArmed = false;
    static uint8_t
        stateLIN = SEEK_FRAME_START;
        
    if( LINBusSerial.available() ) 
    {
        b = LINBusSerial.read();
        switch( stateLIN )
        {
            case    SEEK_FRAME_START:
                //look for a 0x00 that might indicate a serial break detected
                if( b == FRAME_START )
                    stateLIN = SEEK_SYNC_BYTE;

            break;

            case    SEEK_SYNC_BYTE:
                //after the break, we should see a 0x55
                if( b == SYNC_FIELD )
                {
                    //if so, assume we're synced and go collect the first frame
                    frmIndex = 0;                
                    stateLIN = RECEIVE_FRAME_DATA;
                }//if
                else
                    //if not, go back to look for break
                    stateLIN = SEEK_FRAME_START;
                
            break;

            case    RECEIVE_FRAME_DATA:
                //put the byte in the frame buffer
                grFrame[frmIndex++] = b;
                //bump the index; stay within the bounds of the buffer
                if( frmIndex >= MAX_FRAME_BYTES )
                    frmIndex--;

                //we're looking for the start of the next frame here
                if( !bSyncArmed )
                {
                    //not armed so we're still looking for a 0x00 (break)
                    if( b == FRAME_START )
                        bSyncArmed = true;                    
                    
                }//if
                else
                {
                    //we're armed (saw a 0x00 last byte); is this byte the SYNC byte?
                    if( b == SYNC_FIELD )
                    {
                        //yes; print contents of frame
                        //subtract 2 because we include the start and sync bytes as part of collection
                        for( i=0; i<frmIndex-2; i++ )
                        {
                            //print two chars for each HEX byte
                            if( grFrame[i] <= 0xf )
                                Serial.write( '0' );
                            Serial.print( grFrame[i], HEX);
                            Serial.write( ' ' );
                            
                        }//for
                        Serial.println();
                        //we're ready to receive this frame's data
                        frmIndex = 0;
                        bSyncArmed = false;
                        stateLIN = RECEIVE_FRAME_DATA;
                        
                    }//if
                    else
                        //armed but this byte isn't the SYNC so disarm
                        bSyncArmed == false;
                                        
                }//else
                
            break;

        }//switch

    }//if            
                    
}//loop

Here's the result

LIN Debugging begins
F0 F9 97 00 34 00 FF 3A 
50 00 80 FF 7F 
C1 00 FF 00 
F0 FA A7 00 34 00 FF 29 
50 00 80 FF 7F 
F0 FB B0 00 34 00 FF 1F 
50 00 80 FF 7F 
C1 00 FF 00 
F0 FC C0 00 34 00 FF 0E 
50 00 80 FF 7F 
61 64 01 9A 
F0 FD D0 00 34 00 FF FC 
50 00 80 FF 7F 
C1 00 FF 00 
F0 FE E0 00 34 00 FF EB 
50 00 80 FF 7F 
00 34 00 FF DA 
50 00 80 
F0 F1 10 00 34 
C1 00 FF 
50 00 80 FF 7F 
61 64 
F0 F4 47 00 34 
F0 F5 57 00 
C1 00 FF 00 
F0 F6 34 00 FF 63 
50 00 34 00 FF 52 
97 00 34 00 FF C1 00 FF 00 
F0 
F0 FB B0 
50 00 80 FF 7F 
50 00 
F0 FD D0 00 34 C1 00 FF 00 
7F 
61 64 01 
50 00 80 FF 7F 00 80 FF 7F 
F0 F1 10 
C1 00 FF 00 
F0 F2 20 
50 
C1 00 FF FF 8F 
50 00 80 00 FF 7E 00 
C1 00 FF 00 
F0 F6 67 
50 
C1 00 FF FF 52 
50 00 80 FF 7F 

F0 FA A7 FF 7F 
61 64 
50 00 80 
F0 0E 
50 00 80 FF FF FC 
50 00 80 FF 7F FF 7F 
F0 FF 
50 00 80 
F0 DA 
50 00 80 FF FF C9 
50 00 80 00 FF 
50 00 80 FF 7F 
50 00 C1 00 FF 00 00 
50 00 
F0 F5 57 00 34 00 
F0 F6 67 00 34 00 FF 
50 00 C1 00 FF 00 00 
50 00 
F0 F9 97 00 34 00 
F0 FA A7 00 34 
F0 FB B0 00 34 
F0 FC C0 00 34 00 FF FC 
50 55 C1 00 FF 00 
F0 
F0 FF F0 00 34 00 FF 34 00 FF DA 
50 00 80 80 FF 7F 00 
F0 F2 20 00 34 00 30 00 34 00 FF A7 00 F4 47 00 34 
FF 7F 
F0 F7 70 00 
C1 
F0 F8 80 00 34 00 FF 52 
50 
F0 FA A7 00 34 00 FF 
50 00 80 FF 7F 
C1 00 FF 00 
F0 FC C0 00 34 00 FF 0E 
50 00 80 FF 7F 
50 00 64 01 9A 
F0 
C1 
F0 F0 00 00 34 00 FF DA 
50 
C1 00 FF 00 
F0 
F0 F3 30 00 34 
F0 F4 47 00 61 64 01 9A 
F0 F5 57 00 FF 6D 
50 00 80 00 FF 63 
50 00 34 00 FF 00 80 FF 
F0 F9 97 00 34 00 FF 3A 29 
FF 7F 
61 64 
50 
C1 00 FF 00 00 
F0 FD D0 00 34 00 FF FC FE E0 00 34 00 FF EB 00 FF 
50 00 80 FF 
50 00 80 FF 7F 
61 
F0 F2 20 00 34 00 FF B8 00 FF 7F 

F0 F4 50 00 80 
F0 F5 57 00 
C1 00 FF 00 
F0 F6 67 00 34 00 FF 6D 
50 00 80 
F0 F9 97 00 FF 7F 
C1 00 FF 80 FF 7F 
F0 FB B0 00 34 00 FF 1F 
50 01 9A 
F0 FD D0 00 34 
F0 FE E0 00 
F0 FF F0 00 80 FF 7F 
C1 00 FF 00 00 
F0 F1 10 
C1 00 FF 00 
61 64 01 9A 
F0 F3 
F0 F4 47 00 34 00 FF 
50 00 80 
F0 F6 67 00 34 
F0 F7 70 00 34 FF 00 
F0 F8 80 00 34 97 00 34 00 FF 3A 00 FA A7 00 34 00 
F0 FB B0 00 FF 7F 
C1 00 
50 00 
F0 FD D0 00 34 00 FF E0 00 34 00 
61 64 01 9A 
55 C1 00 FF 00 
F0 F0 55 F0 F1 10 00 34 00 FF C9 
50 00 80 FF 7F 
C1 F0 F4 47 00 34 00 FF 8F 00 FF 7E 00 
C1 00 67 00 34 00 FF 6D 
50 00 80 FF 7F 00 34 00 FF 52 00 
F0 F9 97 00 34 
F0 FA A7 00 34 00 FF 29 
50 
F0 FC C0 00 34 
F0 FD D0 00 34 00 FF FC 
50 00 80 FF DA 
50 00 80 FF 7F 
61 64 01 9A 
F0 F1 10 00 34 00 
F0 F3 30 00 
C1 00 FF 00 
F0 F4 47 00 FF 7E 00 80 FF 7F 
C1 50 00 80 FF 7F 
61 64 01 
F0 F8 80 00 34 
F0 F9 97 00 34 
F0 FA A7 00 
F0 FB B0 00 34 00 00 
F0 FC C0 
61 64 01 9A 55 50 00 80 FF 7F 
C1 00 FF 00 
50 00 80 FF 7F 
50 00 80 FF F0 F1 10 00 34 00 
F0 F2 20 00 34 
F0 F3 30 00 34 FF 00 
F0 F4 47 00 34 57 00 34 00 FF C1 00 FF 00 
F0 F6 67 00 34 00 
C1 00 FF 00 
50 00 80 FF 7F 
50 00 80 FF 7F 
C1 00 FF 00 FF 1F 
50 00 34 00 FF 0E 
50 00 80 00 80 FF 7F 
C1 00 FF 00 
F0 FE E0 
F0 F0 00 00 34 00 FF 00 34 00 FF C9 00 
F0 F2 20 00 34 
F0 F3 30 00 34 
F0 F4 47 00 34 00 F0 F5 57 00 34 00 FF 7E 00 FF 6D 
50 00 80 FF 80 FF 7F 
C1 
50 00 80 
F0 F9 97 00 34 00 FF 3A 
50 00 80 
50 00 80 FF 7F 0E 
50 00 80 FF FF FC 
50 00 80 FF 7F 
C1 00 FF 00 
F0 FE DA 
50 00 80 FF 7F 00 
C1 
F0 F2 20 80 FF 7F 
F0 F3 30 00 34 
F0 F4 47 
F0 F5 57 00 34 00 C1 00 FF 00 
F0 F6 
F0 F7 70 00 34 
F0 F8 80 00 
F0 F9 97 
50 00 80 FF 7F 00 50 00 80 
F0 FB B0 00 34 00 
F0 FC C0 00 34 
F0 FD D0 80 FF 7F 
C1 00 FF 00 
F0 
50 00 00 FF 00 
F0 F0 
F0 F1 10 00 7F 
C1 00 00 FF B8 
50 00 80 FF 7F 00 
F0 F4 47 00 34 
F0 F5 57 00 34 00 
F0 F6 67 00 34 00 70 00 34 00 FF 63 
F0 FF 52 
50 00 80 00 FF 3A 00 
C1 00 FF 00 00 
F0 FB B0 00 34 
C1 00 FF 00 

F0 FD D0 00 
C1 00 FF 00 
F0 
F0 FF F0 00 34 00 FF DA 
50 
F0 F1 10 00 
C1 00 FF 00 
F0 
F0 F3 30 00 34 
F0 F4 47 00 34 
F0 F5 57 
C1 00 
F0 F6 67 
F0 F7 70 00 50 00 
C1 00 FF 00 
F0 F8 80 FF 3A 00 80 FF 7F 
C1 
50 00 80 FF B0 00 
50 00 80 FF 7F 00 
50 00 80 FF 7F 
50 00 80 
F0 FE 55 50 00 80 FF FF F0 00 34 00 FF DA 00 FF DA 
50 
F0 F1 10 00 34 00 FF C9 

F0 F3 30 00 34 00 FF A7 00 47 00 34 00 FF 8F 
7E 
50 00 80 FF FF 6D 
50 
F0 F7 70 00 34 00 FF 63 
50 00 80 FF 7F 

F0 34 00 FF 29 
50 00 80 FF 
00 FF 00 
F0 FC C0 00 34 00 FF 0E 
50 00 00 80 FF 
F0 FF F0 00 34 00 
F0 00 FF DA 
50 00 80 FF 7F 
C1 00 FF 00 00 
64 01 9A 
F0 F3 C1 00 FF 00 
7F 
F0 F5 34 00 FF 7E 
50 00 80 FF 
F0 F7 70 00 34 
C1 00 FF 00 
64 01 9A 
F0 
C1 00 FF 00 00 7F 
F0 FB B0 00 FF 7F 
C1 34 00 FF 0E 
50 00 
50 
C1 00 FF 00 
61 64 01 9A 
7F 
C1 00 FF 00 FF 7F 
F0 F1 
50 00 80 
F0 B8 
50 00 80 FF 7F 
50 00 80 FF 7F 00 FF 7F 
61 64 01 80 FF 7F 00 
F0 6D 
50 00 80 F0 F7 70 00 34 00 
F0 00 34 00 FF 52 
50 
50 00 C1 00 FF 00 00 
50 00 9A 
F0 FB B0 00 FF 00 
F0 FC C0 00 34 00 
50 00 80 FF 7F 

F0 FF F0 00 34 00 FF DA 
50 00 
61 64 01 9A 
F0 
F0 34 00 FF B8 
50 00 80 00 80 FF 7F 00 47 00 34 00 FF 8F 
7E 
50 00 80 FF 
50 00 80 FF 7F 00 
00 80 FF 7F 
C1 00 FF 00 
F0 F9 55 50 00 80 FF 7F 29 
FF 7F 
F0 FB B0 80 FF 7F 
C1 00 FF 00 
F0 FC C0 00 
F0 FE 
50 00 80 FF F0 00 34 00 FF DA 
DA 
50 00 80 F0 F1 10 00 34 00 
F0 F2 20 00 34 00 FF B8 00 FF 7F 

F0 F4 47 00 34 00 57 00 34 00 FF 7E 
F0 F6 67 00 
F0 F7 00 FF 63 
50 00 80 FF 7F 
55 F0 F9 
50 00 80 FF 7F 
C1 00 
F0 FB B0 00 34 00 FF 1F 
50 
FD D0 00 34 00 FF FC 
50 00 80 FF 7F DA 
50 00 80 F0 00 00 34 00 FF DA F0 F1 10 00 34 00 
F0 F2 20 00 
F0 F3 30 00 34 
C1 00 F4 47 00 34 00 FF 8F 
50 7F 

F0 F6 67 00 34 00 FF 34 00 FF 63 
50 00 
50 00 80 FF 7F 
F0 F9 97 00 34 00 FF 3A 00 34 00 FF 1F 

F0 FC C0 00 34 
F0 FD D0 00 34 00 FF FC 00 
F0 FF F0 00 00 FF DA 
50 00 80 FF 7F 
C1 00 FF C9 00 
C1 00 FF 00 00 
F0 F3 30 00 34 00 FF A7 
50 00 80 
F5 57 00 34 00 FF 7E F0 F6 67 00 34 00 FF 6D 
50 55 C1 00 FF 00 
F0 F8 F0 F9 97 00 34 00 
F0 FA A7 00 34 00 
F0 FB B0 00 34 
F0 FC C0 00 34 00 FF 0E 50 00 80 FF 7F FE E0 00 34 
50 00 80 FF 7F 
F0 
F0 F1 10 00 34 00 
F0 F2 20 00 34 00 FF 
50 00 80 FF 7F 
7F 
F0 F5 57 00 FF 7F 
C1 00 FF 00 
F0 F6 67 00 34 00 FF 6D 
50 00 7F 
61 64 01 9A FF 7F 00 00 
F0 FA A7 00 34 
F0 FB B0 00 34 00 FF 
50 00 80 FF 7F FC 
7F 
C1 00 FF 00 00 
61 64 01 9A 80 FF 7F 
C1 00 FF 00 00 
F0 F1 10 
C1 00 FF 00 
F0 F2 30 00 34 00 FF A7 00 F4 47 00 34 00 FF 8F 
55 50 00 80 FF 7F 
FF 7F 
F0 F7 70 00 34 00 FF 00 
F0 F8 80 00 34 97 00 34 00 FF 3A 00 FA A7 00 34 
61 64 01 9A 00 FF 7F 
C1 00 FF 00 
F0 FC C0 00 34 00 FF 0E 
50 00 80 FF 7F 00 FF 7F 

F0 F0 00 00 34 00 FF DA 00 80 FF 7F 
C1 00 FF 00 
F0 F2 20 00 34 00 
50 00 80 FF 7F 

C1 00 FF 00 00 80 FF 7F 
61 64 01 9A 
F0 F8 80 00 34 00 FF 52 50 00 7F 
C1 00 FF 00 
F0 FA A7 00 
C1 00 FF 00 00 FF 7F 
61 64 01 9A 
C1 00 FF 00 00 
F0 FF F0 00 34 00 FF DA 
DA 
50 00 80 F0 F1 10 00 34 00 FF C9 
50 00 80 F3 30 00 34 00 FF 
F0 F4 47 00 
F0 F5 57 00 34 00 FF 
F0 F6 67 00 
F0 F7 70 00 34 00 FF 00 
F0 F8 80 00 34 3A 
FF 7F 
C1 00 FF 00 
F0 FA A7 7F 
C1 00 FF 00 
F0 FC 00 FF FC 
50 55 F0 FE E0 00 34 00 FF EB 
50 00 80 FF 00 34 00 FF DA 
50 00 80 
C1 00 FF 00 

F0 F3 FF A7 
50 
F0 F4 47 00 34 9A 
F0 F5 57 
C1 00 FF 00 00 
F0 F7 70 00 34 00 FF 63 
55 50 00 80 FF 7F 
F0 F9 97 A7 00 34 00 
61 64 01 9A 00 FF 7F 
C1 00 FF 00 50 00 80 
F0 FD D0 00 34 00 
F0 FE E0 80 FF 7F 
F0 FF 00 80 FF 7F 
C1 00 FF 00 
F0 F1 10 00 34 00 20 00 34 00 FF B8 
50 55 50 00 80 FF 7F 
C1 
F0 F5 57 00 34 00 FF F6 67 00 34 00 FF 6D 00 FF 63 
50 00 80 FF 
50 00 80 FF 7F 00 80 FF 7F 
C1 
50 00 80 FF 7F 
F0 FB B0 00 34 00 80 FF 7F 
61 64 01 FF 00 00 FE E0 00 34 00 FF EB 
50 00 80 FF 7F 
F0 FF F0 00 34 00 FF C9 00 
F0 F2 20 00 34 00 FF B8 00 
C1 
F0 F4 47 00 34 
F0 F5 57 00 34 00 FF 7E 00 80 FF 7F 
F0 F7 70 00 34 00 FF 63 

F0 F9 97 00 34 00 
F0 FA A7 00 34 00 FF 29 80 FF 7F 
C1 00 FF 00 
34 00 FF 50 00 80 FF 7F 
55 50 00 80 FF 7F 
61 64 01 9A 

F0 F1 10 00 34 00 FF C9 F2 20 00 FF B8 
50 00 80 
50 00 80 FF 7F 
C1 00 FF 00 
50 00 80 FF 00 34 00 FF 6D 
50 00 80 
C1 00 FF 00 

F0 F9 97 00 
C1 00 FF 00 
F0 FA A7 00 34 00 FF 29 00 F0 FC C0 00 34 
F0 FD D0 00 34 
C1 00 FF 00 50 00 80 FF 7F 
F0 FF F0 00 00 00 34 00 FF 61 64 01 9A 
7F 
C1 00 FF 00 00 50 00 80 FF 7F 00 A7 
50 00 80 FF 7F 
C1 00 FF 00 
00 FF 00 
F0 F6 61 64 01 9A 
F0 F7 70 00 
50 00 80 FF 7F 
F0 F9 97 00 34 00 FF 
F0 FB B0 00 34 00 FF 1F 
50 00 80 FF 7F FF FC 
50 00 80 00 FF EB 
50 55 F0 FF F0 00 
C1 00 FF 00 

F0 F1 10 00 
C1 00 FF 00 00 7F 
61 64 01 9A 

F0 F4 47 00 34 00 FF 8F 
50 00 80 FF 7F 

F0 F7 70 00 34 00 00 
F0 F8 80 00 34 
F0 F9 97 00 00 FF 
F0 FA A7 00 
F0 FB B0 00 34 00 00 
F0 FC C0 
F0 FD D0 00 34 00 FF FC 
EB 
50 00 80 FF FF DA 
50 00 80 FF 7F 

F0 F1 10 00 34 
C1 00 FF 00 

F0 F3 30 00 
C1 00 FF 00 
F0 
F0 F5 57 FF 7F 
C1 00 FF 00 
55 F0 F7 
50 00 80 FF 7F 00 50 00 80 FF 7F 
55 50 FF 7F 
C1 00 FF 80 FF 7F 
61 
50 00 80 FF 7F 00 FF 0E 
50 
F0 FD 
50 00 80 FF 7F 
50 00 80 FF FF F0 00 34 
C1 00 FF 00 
F0 F0 00 00 34 
C1 00 FF 00 00 FF 7F 
F0 F3 30 00 
C1 
F0 F4 47 00 34 00 FF 8F 50 00 
C1 00 FF 00 FF 6D 
50 00 34 00 FF 63 
50 00 80 FF 
F0 F9 97 00 50 00 80 FF 7F 
55 50 00 80 FF 7F 
F0 C1 00 FF 00 
7F 
9A 
F0 FD D0 00 34 00 FF FC 00 
F0 FF F0 00 34 00 FF 00 
F0 F0 00 00 
F0 F1 10 00 C1 00 FF 00 
F0 F2 20 00 
50 00 80 FF 7F 
7F 
F0 F5 57 00 FF 7F 00 00 
67 00 34 00 FF 6D 
50 00 80 00 FF 00 
F0 F8 80 00 34 3A 
50 00 80 FA A7 00 34 00 FF 29 
50 7F 
C1 00 FF 
50 00 80 FF 7F 
50 
C1 00 FF 00 
F0 FE F0 00 34 00 FF DA 
DA 
50 00 80 FF 
50 00 80 FF 7F 
7F 
F0 F3 30 00 34 00 FF A7 00 
50 00 9A 
F0 F5 00 80 FF 7F 
C1 55 50 00 
F0 F7 70 00 FF 7F 
C1 00 FF 00 
55 F0 F9 
50 00 80 FF A7 00 34 00 FF 29 00 FB B0 00 
50 00 80 FF 7F 
C1 
F0 FD D0 00 
C1 00 FF 00 

F0 FF F0 00 
C1 00 FF 00 
61 64 01 9A 
7F 
C1 00 00 FF B8 
50 00 80 FF 7F 
F0 F3 30 00 
F0 F5 57 00 34 
C1 
F0 F6 67 00 64 01 9A 
F0 7F 
C1 00 FF 00 00 00 80 FF 7F 

50 00 80 FF FA A7 00 
50 00 80 FF 7F 
50 00 80 FF 7F 
50 00 80 FF 00 34 00 FF FC 
E0 00 34 
50 00 80 FF 7F 
55 C1 00 FF 34 00 FF DA 
50 00 80 FF 7F 00 
F0 F2 20 00 34 00 FF B8 A7 
50 00 80 FF FF 8F 
50 00 80 00 FF 7E 
50 00 80 FF 7F 00 
F0 F7 70 80 FF 7F 
C1 00 00 80 FF 7F 
61 64 01 9A 
F0 FA A7 00 34 00 B0 00 34 00 FF 1F 
50 00 80 
F0 FD D0 00 34 00 
F0 FE E0 00 34 00 F0 FF F0 00 34 00 FF DA 00 FF DA 
50 00 80 
50 00 80 FF 7F 00 00 80 FF 7F 

50 00 80 FF 7F 
C1 00 FF 00 00 00 80 FF 7F 00 67 00 34 00 FF 6D 
63 
50 00 80 FF 7F 
C1 00 FF 00 
F0 F8 80 
50 00 80 
F0 FB B0 00 34 00 FF 1F 

F0 FD D0 00 34 00 FF 00 
F0 FE E0 00 34 00 FF EB 
50 00 80 FF 
61 64 
F0 F1 10 00 34 
F0 F2 20 00 
F0 F3 30 
50 00 
F0 F4 47 00 34 00 FF 8F 00 80 FF 
C1 00 FF 00 
F0 F6 70 00 34 00 FF 63 
50 00 
F0 F9 97 
50 00 80 
F0 FA A7 00 34 
F0 FB B0 00 
C1 00 FF 
50 
61 64 01 9A 
F0 FD D0 00 34 00 
F0 FF F0 00 FF 7F 
C1 00 FF 00 
55 F0 F1 10 00 80 FF 7F 00 20 00 34 00 FF 61 64 01 
F0 55 C1 00 FF 00 00 FF 7F 
F0 00 34 
50 00 80 FF 7F FF 6D 
50 00 80 FF 
50 00 80 FF 7F 00 FF 7F 
61 64 
50 00 80 FF 7F 
C1 00 FF 00 
F0 FA A7 00 34 
50 00 80 FF 7F 
F0 FD 55 F0 FE E0 00 
61 64 01 9A 
F0 
F0 F0 00 00 
F0 F1 10 00 34 00 FF C9 B8 
50 
F0 F3 30 00 
C1 00 FF 00 00 80 FF 7F 
61 64 00 80 FF 7F 
C1 50 00 80 FF 7