user: What is the c source code of the assembly code below:

```asm
<intToRoman>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x130,%rsp
  mov    %edi,-0x124(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x3e8,-0x100(%rbp)
  movl   $0x384,-0xfc(%rbp)
  movl   $0x1f4,-0xf8(%rbp)
  movl   $0x190,-0xf4(%rbp)
  movl   $0x64,-0xf0(%rbp)
  movl   $0x5a,-0xec(%rbp)
  movl   $0x32,-0xe8(%rbp)
  movl   $0x28,-0xe4(%rbp)
  movl   $0xa,-0xe0(%rbp)
  movl   $0x9,-0xdc(%rbp)
  movl   $0x5,-0xd8(%rbp)
  movl   $0x4,-0xd4(%rbp)
  movl   $0x1,-0xd0(%rbp)
  movq   $0x4d,-0xc0(%rbp)
  movl   $0x0,-0xb8(%rbp)
  movb   $0x0,-0xb4(%rbp)
  movq   $0x4d43,-0xb3(%rbp)
  movl   $0x0,-0xab(%rbp)
  movb   $0x0,-0xa7(%rbp)
  movq   $0x44,-0xa6(%rbp)
  movl   $0x0,-0x9e(%rbp)
  movb   $0x0,-0x9a(%rbp)
  movq   $0x4443,-0x99(%rbp)
  movl   $0x0,-0x91(%rbp)
  movb   $0x0,-0x8d(%rbp)
  movq   $0x43,-0x8c(%rbp)
  movl   $0x0,-0x84(%rbp)
  movb   $0x0,-0x80(%rbp)
  movq   $0x4358,-0x7f(%rbp)
  movl   $0x0,-0x77(%rbp)
  movb   $0x0,-0x73(%rbp)
  movq   $0x4c,-0x72(%rbp)
  movl   $0x0,-0x6a(%rbp)
  movb   $0x0,-0x66(%rbp)
  movq   $0x4c58,-0x65(%rbp)
  movl   $0x0,-0x5d(%rbp)
  movb   $0x0,-0x59(%rbp)
  movq   $0x58,-0x58(%rbp)
  movl   $0x0,-0x50(%rbp)
  movb   $0x0,-0x4c(%rbp)
  movq   $0x5849,-0x4b(%rbp)
  movl   $0x0,-0x43(%rbp)
  movb   $0x0,-0x3f(%rbp)
  movq   $0x56,-0x3e(%rbp)
  movl   $0x0,-0x36(%rbp)
  movb   $0x0,-0x32(%rbp)
  movq   $0x5649,-0x31(%rbp)
  movl   $0x0,-0x29(%rbp)
  movb   $0x0,-0x25(%rbp)
  movq   $0x49,-0x24(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movb   $0x0,-0x18(%rbp)
  mov    $0x20,%edi
  call   <malloc@plt>
  mov    %rax,-0x108(%rbp)
  movl   $0x0,-0x11c(%rbp)
  movl   $0x0,-0x118(%rbp)
  movl   $0x0,-0x114(%rbp)
  movl   $0x0,-0x110(%rbp)
  mov    -0x108(%rbp),%rax
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  jmp    L40
L36:
  mov    -0x11c(%rbp),%eax
  cltq
  mov    -0x100(%rbp,%rax,4),%ecx
  mov    -0x124(%rbp),%eax
  cltd
  idiv   %ecx
  mov    %eax,-0x10c(%rbp)
  movl   $0x0,-0x118(%rbp)
  jmp    L32
L42:
  lea    -0xc0(%rbp),%rcx
  mov    -0x11c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x110(%rbp)
  mov    -0x110(%rbp),%eax
  movslq %eax,%rcx
  lea    -0xc0(%rbp),%rsi
  mov    -0x11c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rsi
  mov    -0x114(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x108(%rbp),%rax
  add    %rdx,%rax
  mov    %rcx,%rdx
  mov    %rax,%rdi
  call   <strncat@plt>
  mov    -0x110(%rbp),%eax
  add    %eax,-0x114(%rbp)
  mov    -0x11c(%rbp),%eax
  cltq
  mov    -0x100(%rbp,%rax,4),%eax
  sub    %eax,-0x124(%rbp)
  addl   $0x1,-0x118(%rbp)
L32:
  mov    -0x118(%rbp),%eax
  cmp    -0x10c(%rbp),%eax
  jl     L42
  addl   $0x1,-0x11c(%rbp)
L40:
  cmpl   $0x0,-0x124(%rbp)
  jg     L36
  mov    -0x108(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L13
  call   <__stack_chk_fail@plt>
L13:
  leave
  ret
```

assistant: ```c
char *intToRoman(int num) {
  int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
  char symbols[13][13] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
  char *ret = (char *)malloc(sizeof(char) * 32);
  int i = 0;
  int j = 0;
  int cur = 0;
  int len = 0;
  memset(ret, 0, sizeof(char) * 32);
  while (num > 0) {
    int k = num / values[i];
    for (j = 0; j < k; j++) {
      len = strlen(symbols[i]);
      strncat(ret + cur, symbols[i], len);
      cur += len;
      num -= values[i];
    }
    i++;
  }
  return ret;
}
```