user: Please show me the C implementation that matches the assembly code listed below:

```asm
<help>:
  endbr64
  push   %rbp
  mov    $0x10,%edi
  lea    D50(%rip),%rbp
  call   <ts_print_ascii_logo@plt>
  xor    %eax,%eax
  call   <print_version@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D19(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D95(%rip),%rdi
  call   <printf@plt>
  lea    D193(%rip),%rdi
  call   <printf@plt>
  lea    D123(%rip),%rdi
  call   <printf@plt>
  lea    D187(%rip),%rdi
  call   <printf@plt>
  lea    D55(%rip),%rdi
  call   <printf@plt>
  lea    D211(%rip),%rdi
  call   <printf@plt>
  lea    D54(%rip),%rdi
  call   <printf@plt>
  lea    D119(%rip),%rdi
  call   <printf@plt>
  lea    D169(%rip),%rdi
  call   <printf@plt>
  lea    D58(%rip),%rdi
  call   <printf@plt>
  lea    D150(%rip),%rdi
  call   <printf@plt>
  lea    D56(%rip),%rdi
  call   <printf@plt>
  lea    D74(%rip),%rdi
  call   <printf@plt>
  lea    D172(%rip),%rdi
  call   <printf@plt>
  lea    D96(%rip),%rdi
  call   <printf@plt>
  lea    D27(%rip),%rdi
  call   <printf@plt>
  lea    D209(%rip),%rdi
  call   <printf@plt>
  lea    D66(%rip),%rdi
  call   <printf@plt>
  lea    D99(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D82(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  pop    %rbp
  jmp    1080 <printf@plt>
```

tool_calls: name: read_data
arguments: label: D50
type_infered: string
name: read_data
arguments: label: D19
type_infered: string
name: read_data
arguments: label: D95
type_infered: string
name: read_data
arguments: label: D193
type_infered: string
name: read_data
arguments: label: D123
type_infered: string
name: read_data
arguments: label: D187
type_infered: string
name: read_data
arguments: label: D55
type_infered: string
name: read_data
arguments: label: D211
type_infered: string
name: read_data
arguments: label: D54
type_infered: string
name: read_data
arguments: label: D119
type_infered: string
name: read_data
arguments: label: D169
type_infered: string
name: read_data
arguments: label: D58
type_infered: string
name: read_data
arguments: label: D150
type_infered: string
name: read_data
arguments: label: D56
type_infered: string
name: read_data
arguments: label: D74
type_infered: string
name: read_data
arguments: label: D172
type_infered: string
name: read_data
arguments: label: D96
type_infered: string
name: read_data
arguments: label: D27
type_infered: string
name: read_data
arguments: label: D209
type_infered: string
name: read_data
arguments: label: D66
type_infered: string
name: read_data
arguments: label: D99
type_infered: string
name: read_data
arguments: label: D82
type_infered: string

tool: D50: 


tool: D19: Usage: ts_test_mt [-v] [-i <device>] [-j <slots>] [-r <rotate_value>]


tool: D95: -i --idev


tool: D193:                        Override the input device to use


tool: D123: -j --slots


tool: D187:                        Override the number of possible touch contacts


tool: D55:                        Automatically detected only on Linux, but not


tool: D211:                        for all devices


tool: D54: -r --rotate


tool: D119:         <rotate_value> 0 ... no rotation; 0 degree (default)


tool: D169:                        1 ... clockwise orientation; 90 degrees


tool: D58:                        2 ... upside down orientation; 180 degrees


tool: D150:                        3 ... counterclockwise orientation; 270 degrees


tool: D56: -n --samples


tool: D74:                        exit automatically after n samples


tool: D172: -a --altcross


tool: D96:                        use an alternative crosshair


tool: D27: -h --help


tool: D209:                        print this help text


tool: D66: -v --verbose


tool: D99:                        print the touch samples to stdout


tool: D82: Example (Linux): ts_test_mt -r $(cat /sys/class/graphics/fbcon/rotate)


assistant: ```c
void help(void) {
  ts_print_ascii_logo(16);
  print_version();
  printf("\n");
  printf("Usage: ts_test_mt [-v] [-i <device>] [-j <slots>] [-r <rotate_value>]\n");
  printf("\n");
  printf("-i --idev\n");
  printf("                       Override the input device to use\n");
  printf("-j --slots\n");
  printf("                       Override the number of possible touch contacts\n");
  printf("                       Automatically detected only on Linux, but not\n");
  printf("                       for all devices\n");
  printf("-r --rotate\n");
  printf("        <rotate_value> 0 ... no rotation; 0 degree (default)\n");
  printf("                       1 ... clockwise orientation; 90 degrees\n");
  printf("                       2 ... upside down orientation; 180 degrees\n");
  printf("                       3 ... counterclockwise orientation; 270 degrees\n");
  printf("-n --samples\n");
  printf("                       exit automatically after n samples\n");
  printf("-a --altcross\n");
  printf("                       use an alternative crosshair\n");
  printf("-h --help\n");
  printf("                       print this help text\n");
  printf("-v --verbose\n");
  printf("                       print the touch samples to stdout\n");
  printf("\n");
  printf("Example (Linux): ts_test_mt -r $(cat /sys/class/graphics/fbcon/rotate)\n");
  printf("\n");
}
```