user: What would the C source look like for the assembly code provided here:

```asm
<tst_doublesize>:
  endbr64
  push   %r15
  push   %r14
  lea    D202(%rip),%r14
  push   %r13
  lea    D93(%rip),%r13
  push   %r12
  lea    D204(%rip),%r12
  push   %rbp
  xor    %ebp,%ebp
  push   %rbx
  mov    $0x2,%ebx
  sub    $0x8,%rsp
L41:
  mov    $0x2,%edi
  call   <ed@plt>
  mov    $0x1,%edi
  mov    $0x1,%esi
  call   <cup@plt>
  mov    %r14,%rdi
  test   %ebp,%ebp
  je     L32
  call   <sm@plt>
  lea    D198(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L57:
  lea    -0x1(%rbx,%rbx,1),%r15d
  mov    $0x5,%edi
  mov    %r15d,%esi
  call   <cup@plt>
  lea    D177(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15d,%esi
  mov    $0x7,%edi
  call   <cup@plt>
  lea    D85(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    %ebx,%esi
  mov    $0x9,%edi
  call   <cup@plt>
  lea    D94(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  mov    %ebx,%esi
  mov    $0xb,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  mov    $0xe,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x2,%edi
  call   <el@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  mov    $0xf,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15d,%esi
  mov    $0x11,%edi
  call   <cup@plt>
  lea    D100(%rip),%rdi
  xor    %eax,%eax
  add    $0xd,%ebx
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  lea    D61(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x6,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  lea    D127(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    $0x1,%esi
  mov    $0x17,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <holdit@plt>
  mov    $0x6,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  lea    D98(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  mov    $0x1,%esi
  mov    $0x17,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <holdit@plt>
  cmp    $0x1,%ebp
  jne    L46
  mov    $0x1,%esi
  mov    $0x1,%edi
  mov    $0x11,%ebx
  call   <cup@plt>
  mov    $0x3,%edi
  call   <tbc@plt>
  nopl   0x0(%rax)
L37:
  mov    $0x8,%edi
  call   <cuf@plt>
  xor    %eax,%eax
  call   <hts@plt>
  sub    $0x1,%ebx
  jne    L37
  mov    %r14,%rdi
  lea    D167(%rip),%rbp
  mov    $0xc,%ebx
  call   <rm@plt>
  mov    $0x2,%edi
  call   <ed@plt>
  xor    %edi,%edi
  mov    $0x30,%esi
  call   <scs@plt>
  mov    $0x1,%esi
  mov    $0x8,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x9,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D119(%rip),%rbp
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xa,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xb,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xd,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xe,%edi
  lea    D131(%rip),%rbp
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xf,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D11(%rip),%rbp
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x10,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x11,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x42,%esi
  xor    %edi,%edi
  call   <scs@plt>
  lea    D4(%rip),%rdi
  call   <sgr@plt>
  mov    $0x3,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  lea    D172(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x3,%esi
  mov    $0xd,%edi
  call   <cup@plt>
  mov    $0x9,%edi
  call   <putchar@plt>
  mov    $0x6,%edi
  call   <cub@plt>
  lea    D118(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D105(%rip),%rdi
  call   <sgr@plt>
  mov    $0x1,%esi
  mov    $0x16,%edi
  call   <cup@plt>
  lea    D159(%rip),%rdi
  call   <println@plt>
  lea    D33(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <holdit@plt>
  mov    $0x18,%esi
  mov    $0x8,%edi
  call   <decstbm@plt>
  mov    $0x1,%esi
  mov    $0x8,%edi
  call   <cup@plt>
L34:
  xor    %eax,%eax
  call   <ri@plt>
  sub    $0x1,%ebx
  jne    L34
  xor    %esi,%esi
  xor    %edi,%edi
  call   <decstbm@plt>
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <cup@plt>
  lea    D79(%rip),%rsi
  lea    D48(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    12a0 <holdit@plt>
  xchg   %ax,%ax
L46:
  mov    $0x1,%ebp
  jmp    L41
  nopw   0x0(%rax,%rax,1)
L32:
  call   <rm@plt>
  lea    D92(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L57
```

tool_calls: name: extract_symbolic_data
arguments: tag: D202
type: string
name: extract_symbolic_data
arguments: tag: D93
type: string
name: extract_symbolic_data
arguments: tag: D204
type: string
name: extract_symbolic_data
arguments: tag: D198
type: string
name: extract_symbolic_data
arguments: tag: D177
type: string
name: extract_symbolic_data
arguments: tag: D85
type: string
name: extract_symbolic_data
arguments: tag: D94
type: string
name: extract_symbolic_data
arguments: tag: D100
type: string
name: extract_symbolic_data
arguments: tag: D61
type: string
name: extract_symbolic_data
arguments: tag: D127
type: string
name: extract_symbolic_data
arguments: tag: D98
type: string
name: extract_symbolic_data
arguments: tag: D167
type: string
name: extract_symbolic_data
arguments: tag: D119
type: string
name: extract_symbolic_data
arguments: tag: D131
type: string
name: extract_symbolic_data
arguments: tag: D11
type: string
name: extract_symbolic_data
arguments: tag: D4
type: string
name: extract_symbolic_data
arguments: tag: D172
type: string
name: extract_symbolic_data
arguments: tag: D118
type: string
name: extract_symbolic_data
arguments: tag: D105
type: string
name: extract_symbolic_data
arguments: tag: D159
type: string
name: extract_symbolic_data
arguments: tag: D33
type: string
name: extract_symbolic_data
arguments: tag: D79
type: string
name: extract_symbolic_data
arguments: tag: D48
type: string
name: extract_symbolic_data
arguments: tag: D92
type: string

tool: D202: ?3

tool: D93: This is a Double-width-and-height line

tool: D204: This is another such line

tool: D198: 132 column mode

tool: D177: v------- left margin

tool: D85: This is a normal-sized line

tool: D94: This is a Double-width line

tool: D100: ^------- left margin

tool: D61: This is not a double-width line

tool: D127: is not

tool: D98: **is**

tool: D167: lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk

tool: D119: x%c%c%c%c%cx

tool: D131: x                                      x

tool: D11: mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

tool: D4: 1;5

tool: D172: * The mad programmer strikes again * 

tool: D118: * The mad programmer strikes again *

tool: D105: 0

tool: D159: Another test pattern...  a frame with blinking bold text,

tool: D33: all in double-height double-width size. 

tool: D79: Exactly half of the box should remain. 

tool: D48: %s

tool: D92:  80 column mode

assistant: ```c
tst_doublesize() {
  int col, i, w, w1;
  for (w = 0; w <= 1; w++) {
    w1 = 13 * w;
    ed(2);
    cup(1, 1);
    if (w) {
      sm("?3");
      printf("132 column mode");
    } else {
      rm("?3");
      printf(" 80 column mode");
    }
    cup(5, 3 + 2 * w1);
    printf("v------- left margin");
    cup(7, 3 + 2 * w1);
    printf("This is a normal-sized line");
    decdhl(0);
    decdhl(1);
    decdwl();
    decswl();
    cup(9, 2 + w1);
    printf("This is a Double-width line");
    decswl();
    decdhl(0);
    decdhl(1);
    decdwl();
    cup(11, 2 + w1);
    decdwl();
    decswl();
    decdhl(1);
    decdhl(0);
    printf("This is a Double-width-and-height line");
    cup(12, 2 + w1);
    decdwl();
    decswl();
    decdhl(0);
    decdhl(1);
    printf("This is a Double-width-and-height line");
    cup(14, 2 + w1);
    decdwl();
    decswl();
    decdhl(1);
    decdhl(0);
    el(2);
    printf("This is another such line");
    cup(15, 2 + w1);
    decdwl();
    decswl();
    decdhl(0);
    decdhl(1);
    printf("This is another such line");
    cup(17, 3 + 2 * w1);
    printf("^------- left margin");
    cup(21, 1);
    printf("This is not a double-width line");
    for (i = 0; i <= 1; i++) {
      cup(21, 6);
      if (i) {
        printf("**is**");
        decdwl();
      } else {
        printf("is not");
        decswl();
      }
      cup(23, 1);
      holdit();
    }
  }
  cup(1, 1);
  tbc(3);
  for (col = 1; col <= 132; col += 8) {
    cuf(8);
    hts();
  }
  rm("?3");
  ed(2);
  scs(0, '0');
  cup(8, 1);
  decdhl(0);
  printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
  cup(9, 1);
  decdhl(1);
  printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
  cup(10, 1);
  decdhl(0);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(11, 1);
  decdhl(1);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(12, 1);
  decdhl(0);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(13, 1);
  decdhl(1);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(14, 1);
  decdhl(0);
  printf("x                                      x");
  cup(15, 1);
  decdhl(1);
  printf("x                                      x");
  cup(16, 1);
  decdhl(0);
  printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
  cup(17, 1);
  decdhl(1);
  printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
  scs(0, 'B');
  sgr("1;5");
  cup(12, 3);
  printf("* The mad programmer strikes again * ");
  cup(13, 3);
  printf("%c", 9);
  cub(6);
  printf("* The mad programmer strikes again *");
  sgr("0");
  cup(22, 1);
  println("Another test pattern...  a frame with blinking bold text,");
  printf("all in double-height double-width size. ");
  holdit();
  decstbm(8, 24);
  cup(8, 1);
  for (i = 1; i <= 12; i++)
    ri();
  decstbm(0, 0);
  cup(1, 1);
  printf("%s", "Exactly half of the box should remain. ");
  holdit();
}
```