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

```asm
<print_mouse_stats>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%r12
  mov    %edx,%r15d
  mov    (%rdi),%eax
  lea    0x2(%rax),%esi
  mov    0x4(%rdi),%edi
  mov    %edx,%ecx
  lea    D52(%rip),%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    0x2(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  lea    D56(%rip),%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    0xf(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  lea    D28(%rip),%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    0x16(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  lea    D23(%rip),%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    0x1e(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  lea    D1(%rip),%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  test   %r15d,%r15d
  jle    L18
  add    $0x10,%r12
  mov    $0x1,%r14d
  lea    D53(%rip),%r13
L8:
  mov    (%r12),%edi
  call   <commaprint@plt>
  mov    %eax,%ecx
  lea    0x3(%r14),%ebp
  mov    (%rbx),%eax
  lea    0x2(%rax),%esi
  mov    %ebp,%edi
  add    0x4(%rbx),%edi
  mov    %r13,%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  mov    0x4(%r12),%edi
  call   <commaprint@plt>
  mov    %eax,%ecx
  mov    (%rbx),%eax
  lea    0xf(%rax),%esi
  mov    %ebp,%edi
  add    0x4(%rbx),%edi
  mov    %r13,%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  mov    0x8(%r12),%edi
  call   <commaprint@plt>
  mov    %eax,%ecx
  mov    (%rbx),%eax
  lea    0x16(%rax),%esi
  mov    %ebp,%edi
  add    0x4(%rbx),%edi
  mov    %r13,%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  mov    0xc(%r12),%edi
  call   <commaprint@plt>
  mov    %eax,%ecx
  mov    (%rbx),%eax
  lea    0x1e(%rax),%esi
  mov    %ebp,%edi
  add    0x4(%rbx),%edi
  mov    %r13,%rdx
  mov    $0x0,%eax
  call   <mvprintw@plt>
  add    $0x1,%r14d
  add    $0x10,%r12
  cmp    %r14d,%r15d
  jge    L8
L18:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: tag: D52
data_type: string
name: read_data
arguments: tag: D56
data_type: string
name: read_data
arguments: tag: D28
data_type: string
name: read_data
arguments: tag: D23
data_type: string
name: read_data
arguments: tag: D1
data_type: string
name: read_data
arguments: tag: D53
data_type: string

tool: D52:  Stats - Last %d days 

tool: D56: Movement

tool: D28: Left

tool: D23: Center

tool: D1: Right

tool: D53: %s

assistant: ```c
void print_mouse_stats(int cords[], int stats_data[][4], int days) {
  int column[4] = {2, 15, 22, 30};
  mvprintw(cords[1], cords[0] + 2, " Stats - Last %d days ", days);
  mvprintw(cords[1] + 2, cords[0] + column[0], "Movement");
  mvprintw(cords[1] + 2, cords[0] + column[1], "Left");
  mvprintw(cords[1] + 2, cords[0] + column[2], "Center");
  mvprintw(cords[1] + 2, cords[0] + column[3], "Right");
  for (int i = 1; i <= days; i++) {
    mvprintw(cords[1] + (3 + i), cords[0] + column[0], "%s", commaprint(stats_data[i][0]));
    mvprintw(cords[1] + (3 + i), cords[0] + column[1], "%s", commaprint(stats_data[i][1]));
    mvprintw(cords[1] + (3 + i), cords[0] + column[2], "%s", commaprint(stats_data[i][2]));
    mvprintw(cords[1] + (3 + i), cords[0] + column[3], "%s", commaprint(stats_data[i][3]));
  }
}
```