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

```asm
<wprintf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x100,%rsp
  mov    %rdi,-0xf8(%rbp)
  mov    %rsi,-0x100(%rbp)
  mov    %rdx,-0xa0(%rbp)
  mov    %rcx,-0x98(%rbp)
  mov    %r8,-0x90(%rbp)
  mov    %r9,-0x88(%rbp)
  test   %al,%al
  je     L239
  movaps %xmm0,-0x80(%rbp)
  movaps %xmm1,-0x70(%rbp)
  movaps %xmm2,-0x60(%rbp)
  movaps %xmm3,-0x50(%rbp)
  movaps %xmm4,-0x40(%rbp)
  movaps %xmm5,-0x30(%rbp)
  movaps %xmm6,-0x20(%rbp)
  movaps %xmm7,-0x10(%rbp)
L239:
  mov    %fs:0x28,%rax
  mov    %rax,-0xb8(%rbp)
  xor    %eax,%eax
  lea    -0x100(%rbp),%rax
  mov    %rax,-0xe0(%rbp)
  addq   $0x8,-0xe0(%rbp)
  jmp    L247
L48:
  cmpl   $0x25,-0xf0(%rbp)
  je     L114
  mov    -0xf0(%rbp),%edx
  mov    -0xf8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <wputchar@plt>
  jmp    L247
L114:
  movl   $0x20,-0xec(%rbp)
  movl   $0x0,-0xe8(%rbp)
  movl   $0x0,-0xe4(%rbp)
  mov    -0x100(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x100(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0xf0(%rbp)
  cmpl   $0x30,-0xf0(%rbp)
  jne    L9
  movl   $0x30,-0xec(%rbp)
  mov    -0x100(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x100(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0xf0(%rbp)
L9:
  cmpl   $0x2f,-0xf0(%rbp)
  jle    L130
  cmpl   $0x39,-0xf0(%rbp)
  jg     L130
L32:
  mov    -0xe8(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,%edx
  mov    -0xf0(%rbp),%eax
  sub    $0x30,%eax
  add    %edx,%eax
  mov    %eax,-0xe8(%rbp)
  mov    -0x100(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x100(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0xf0(%rbp)
  cmpl   $0x2f,-0xf0(%rbp)
  jle    L130
  cmpl   $0x39,-0xf0(%rbp)
  jle    L32
L130:
  cmpl   $0x6c,-0xf0(%rbp)
  jne    L228
  movl   $0x1,-0xe4(%rbp)
  mov    -0x100(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x100(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0xf0(%rbp)
L228:
  mov    -0xf0(%rbp),%eax
  sub    $0x63,%eax
  cmp    $0x15,%eax
  ja     L134
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D14(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D14(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  cmpl   $0x0,-0xe4(%rbp)
  je     L4
  mov    -0xe0(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0xe0(%rbp)
  mov    (%rax),%rdx
  mov    -0xf0(%rbp),%ecx
  lea    -0xd0(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <itoa@plt>
  jmp    L33
L4:
  mov    -0xe0(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0xe0(%rbp)
  mov    (%rax),%eax
  movslq %eax,%rdx
  mov    -0xf0(%rbp),%ecx
  lea    -0xd0(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <itoa@plt>
L33:
  lea    -0xd0(%rbp),%rax
  mov    %rax,-0xd8(%rbp)
  jmp    L105
L258:
  subl   $0x1,-0xe8(%rbp)
  addq   $0x1,-0xd8(%rbp)
L105:
  mov    -0xd8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L258
  jmp    L237
L40:
  mov    -0xec(%rbp),%edx
  mov    -0xf8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <wputchar@plt>
L237:
  mov    -0xe8(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xe8(%rbp)
  test   %eax,%eax
  jg     L40
  lea    -0xd0(%rbp),%rax
  mov    %rax,-0xd8(%rbp)
  jmp    L68
L162:
  mov    -0xd8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0xf8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <wputchar@plt>
  addq   $0x1,-0xd8(%rbp)
L68:
  mov    -0xd8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L162
  jmp    L247
  mov    -0xe0(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0xe0(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0xf8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <wputchar@plt>
  jmp    L247
  mov    -0xe0(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0xe0(%rbp)
  mov    (%rax),%rax
  mov    %rax,-0xd8(%rbp)
  cmpq   $0x0,-0xd8(%rbp)
  jne    L145
  lea    D3(%rip),%rax
  mov    %rax,-0xd8(%rbp)
  jmp    L145
L12:
  mov    -0xd8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xd8(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0xf8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <wputchar@plt>
L145:
  mov    -0xd8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L12
  jmp    L247
L134:
  mov    -0xe0(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0xe0(%rbp)
  mov    (%rax),%edx
  mov    -0xf8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <wputchar@plt>
  nop
L247:
  mov    -0x100(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x100(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0xf0(%rbp)
  cmpl   $0x0,-0xf0(%rbp)
  jne    L48
  nop
  mov    -0xb8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L131
  call   <__stack_chk_fail@plt>
L131:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D3
type_infered: string

tool: D3: (null)

assistant: ```c
void wprintf(struct Window *win, const char *format, ...) {
  char **arg = (char **)&format;
  int c;
  char buf[20];
  arg++;
  while ((c = *format++) != 0) {
    if (c != '%') {
      wputchar(win, c);
    } else {
      char *p;
      int padChar = ' ';
      int padWidth = 0;
      int longArg = 0;
      c = *format++;
      if (c == '0') {
        padChar = '0';
        c = *format++;
      }
      if (c >= '0' && c <= '9') {
        do {
          padWidth = 10 * padWidth + (c - '0');
          c = *format++;
        } while (c >= '0' && c <= '9');
      }
      if (c == 'l') {
        longArg = 1;
        c = *format++;
      }
      switch (c) {
      case 'd':
      case 'u':
      case 'x':
        if (longArg) {
          itoa(buf, c, *((long *)arg++));
        } else {
          itoa(buf, c, (long)(*((int *)arg++)));
        }
        for (p = buf; *p; p++) {
          padWidth--;
        }
        while (0 < padWidth--) {
          wputchar(win, padChar);
        }
        for (p = buf; *p; p++) {
          wputchar(win, *p);
        }
        break;
      case 'c':
        wputchar(win, *((char *)arg++));
        break;
      case 's':
        p = *arg++;
        if (!p) {
          p = "(null)";
        }
        while (*p) {
          wputchar(win, *p++);
        }
        break;
      default:
        wputchar(win, *((int *)arg++));
        break;
      }
    }
  }
}
```