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

```asm
<printText>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    $0x10,%r13d
  push   %r12
  sub    %ecx,%r13d
  push   %rbp
  mov    %ecx,%ebp
  push   %rbx
  mov    %esi,%ebx
  sub    $0x18,%rsp
  mov    %rdi,(%rsp)
  mov    %rdx,0x8(%rsp)
  test   %r13d,%r13d
  jle    L15
  mov    %rdi,%r12
  xor    %r15d,%r15d
  lea    D5(%rip),%r14
  jmp    L132
L61:
  sub    %eax,%ebx
  add    $0x1,%r15d
  cltq
  add    %rax,%r12
  cmp    %r13d,%r15d
  je     L81
L132:
  xor    %eax,%eax
  mov    %r14,%rdx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <snprintf@plt>
  cmp    %ebx,%eax
  jl     L61
  lea    -0x1(%rbx),%eax
  add    $0x1,%r15d
  mov    $0x1,%ebx
  cltq
  add    %rax,%r12
  cmp    %r13d,%r15d
  jne    L132
L81:
  xor    %eax,%eax
  lea    D13(%rip),%rdx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <snprintf@plt>
  cmp    %ebx,%eax
  jge    L83
  sub    %eax,%ebx
L6:
  cltq
  add    %rax,%r12
  test   %ebp,%ebp
  jle    L68
  mov    0x8(%rsp),%r15
  lea    -0x1(%rbp),%eax
  lea    D35(%rip),%r14
  lea    D49(%rip),%r13
  lea    0x1(%r15,%rax,1),%rbp
  jmp    L117
  nopl   0x0(%rax)
L53:
  xor    %eax,%eax
  mov    %r13,%rdx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <snprintf@plt>
  cmp    %ebx,%eax
  jge    L79
L93:
  sub    %eax,%ebx
  add    $0x1,%r15
  cltq
  add    %rax,%r12
  cmp    %r15,%rbp
  je     L68
L117:
  movzbl (%r15),%ecx
  lea    -0x20(%rcx),%eax
  cmp    $0x5e,%al
  jbe    L53
  xor    %eax,%eax
  mov    %r14,%rdx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <snprintf@plt>
  cmp    %ebx,%eax
  jl     L93
L79:
  lea    -0x1(%rbx),%eax
  add    $0x1,%r15
  mov    $0x1,%ebx
  cltq
  add    %rax,%r12
  cmp    %r15,%rbp
  jne    L117
L68:
  lea    D16(%rip),%rdx
  mov    %ebx,%esi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <snprintf@plt>
  lea    -0x1(%rbx),%edx
  cmp    %ebx,%eax
  cmovge %edx,%eax
  add    %r12d,%eax
  sub    (%rsp),%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L83:
  lea    -0x1(%rbx),%eax
  mov    $0x1,%ebx
  jmp    L6
  nopl   (%rax)
L15:
  mov    (%rsp),%r12
  jmp    L81
```

tool_calls: name: parse_data
arguments: data_tag: D5
datatype: string
name: parse_data
arguments: data_tag: D13
datatype: string
name: parse_data
arguments: data_tag: D35
datatype: string
name: parse_data
arguments: data_tag: D49
datatype: string
name: parse_data
arguments: data_tag: D16
datatype: string

tool: D5:    

tool: D13:    |

tool: D35: .

tool: D49: %c

tool: D16: |


assistant: ```c
int printText(char *outBuf, int outLen, unsigned char *message, int length) {
  char *startOutBuf = outBuf;
  int len;
  int i;
  for (i = 0; i < 16 - length; ++i) {
    len = snprintf(outBuf, outLen, "   ");
    if (len > outLen - 1)
      len = outLen - 1;
    outBuf += len;
    outLen -= len;
  }
  len = snprintf(outBuf, outLen, "   |");
  if (len > outLen - 1)
    len = outLen - 1;
  outBuf += len;
  outLen -= len;
  for (i = 0; i < length; ++i) {
    unsigned char ch = message[i];
    if (ch >= 32 && ch <= 126) {
      len = snprintf(outBuf, outLen, "%c", ch);
    } else {
      len = snprintf(outBuf, outLen, ".");
    }
    if (len > outLen - 1)
      len = outLen - 1;
    outBuf += len;
    outLen -= len;
  }
  len = snprintf(outBuf, outLen, "|\n");
  if (len > outLen - 1)
    len = outLen - 1;
  outBuf += len;
  outLen -= len;
  return outBuf - startOutBuf;
}
```