user: Translate the below assembly code into C programming language:

```asm
<print_mouse_stats>:
  endbr64
  push   %r15
  mov    %edx,%ecx
  mov    %rsi,%r15
  push   %r14
  mov    %edx,%r14d
  lea    D22(%rip),%rdx
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x8,%rsp
  mov    (%rdi),%eax
  mov    0x4(%rdi),%edi
  lea    0x2(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D1(%rip),%rdx
  lea    0x2(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D54(%rip),%rdx
  lea    0xf(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D40(%rip),%rdx
  lea    0x16(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D55(%rip),%rdx
  lea    0x1e(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  test   %r14d,%r14d
  jle    L18
  add    $0x10,%r15
  mov    $0x1,%r13d
  lea    D43(%rip),%r12
  nopl   0x0(%rax)
L15:
  mov    (%r15),%edi
  lea    0x3(%r13),%ebp
  add    $0x1,%r13d
  add    $0x10,%r15
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0x2(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    -0xc(%r15),%edi
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0xf(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    -0x8(%r15),%edi
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0x16(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    -0x4(%r15),%edi
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0x1e(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  cmp    %r13d,%r14d
  jge    L15
L18:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: retrieve_data
arguments: label: D22
type: string
name: retrieve_data
arguments: label: D1
type: string
name: retrieve_data
arguments: label: D54
type: string
name: retrieve_data
arguments: label: D40
type: string
name: retrieve_data
arguments: label: D55
type: string
name: retrieve_data
arguments: label: D43
type: string

tool: D22:  Stats - Last %d days 

tool: D1: Movement

tool: D54: Left

tool: D40: Center

tool: D55: Right

tool: D43: %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]));
  }
}
```