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

```asm
<main>:
  endbr64
  push   %r13
  lea    D48(%rip),%rdi
  push   %r12
  push   %rbp
  sub    $0x1a0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x198(%rsp)
  xor    %eax,%eax
  call   <puts@plt>
  mov    $0x69,%edx
  mov    $0x6b,%esi
  xor    %eax,%eax
  lea    D136(%rip),%rdi
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D322(%rip),%rdi
  xor    %eax,%eax
  call   <puts_nonl@plt>
  mov    $0x6f,%edi
  call   <putchar@plt>
  mov    $0x6b,%edi
  call   <putchar@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    $0x70,%edi
  call   <putchar@plt>
  mov    $0x75,%edi
  call   <putchar@plt>
  mov    $0x74,%edi
  call   <putchar@plt>
  mov    $0x63,%edi
  call   <putchar@plt>
  mov    $0x68,%edi
  call   <putchar@plt>
  mov    $0x61,%edi
  call   <putchar@plt>
  mov    $0x72,%edi
  call   <putchar@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <set_echo@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  cmp    $0x78,%eax
  jne    L41
  xor    %eax,%eax
  call   <getchar@plt>
  cmp    $0xa,%eax
  jne    L478
  lea    D446(%rip),%rdi
  call   <puts@plt>
L423:
  lea    D423(%rip),%rdi
  mov    %rsp,%r12
  call   <puts@plt>
  lea    D28(%rip),%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <gets@plt>
  lea    D69(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L208
  lea    D10(%rip),%rdi
  call   <puts@plt>
L263:
  mov    $0x20,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L83
  mov    $0x61,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L142
  lea    D532(%rip),%rdi
  call   <puts@plt>
L5:
  lea    D200(%rip),%rdi
  xor    %ebp,%ebp
  call   <puts@plt>
  xor    %edx,%edx
  xor    %esi,%esi
  lea    D595(%rip),%rdi
  xor    %eax,%eax
  call   <strtol@plt>
  cmp    $0x1234,%eax
  je     L266
  lea    D456(%rip),%rdi
  mov    $0x1,%ebp
  call   <puts@plt>
L266:
  lea    D236(%rip),%r13
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0x10,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x1234,%eax
  je     L78
  lea    D150(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L78:
  xor    %edx,%edx
  xor    %esi,%esi
  lea    D201(%rip),%rdi
  xor    %eax,%eax
  call   <strtol@plt>
  cmp    $0x29c,%eax
  je     L12
  lea    D570(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L12:
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0x8,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x29c,%eax
  je     L159
  lea    D549(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L159:
  xor    %edx,%edx
  xor    %esi,%esi
  xor    %eax,%eax
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x4d2,%eax
  je     L24
  lea    D412(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L24:
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0xa,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x4d2,%eax
  je     L363
  lea    D515(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L363:
  lea    D265(%rip),%r13
  xor    %edx,%edx
  xor    %esi,%esi
  xor    %eax,%eax
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  jne    L485
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0xa,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  jne    L131
  test   %ebp,%ebp
  jne    L138
  lea    D47(%rip),%rdi
  call   <puts@plt>
L288:
  mov    $0x6261,%r8d
  mov    $0x6261,%edi
  movb   $0x0,0x2(%rsp)
  mov    %r8w,0x3(%rsp)
  cmpb   $0x62,0x4(%rsp)
  mov    %di,(%rsp)
  movb   $0x0,0x5(%rsp)
  je     L23
  lea    D381(%rip),%rdi
  call   <puts@plt>
L381:
  lea    0x5(%rsp),%r8
  mov    $0x79,%esi
  mov    $0x3,%edx
  xor    %r13d,%r13d
  mov    %r8,%rdi
  mov    %si,0x8(%rsp)
  movabs $0x7979636261787878,%rax
  lea    0x3(%rsp),%rsi
  mov    %rax,(%rsp)
  lea    0xd0(%rsp),%rbp
  call   <memmove@plt>
  mov    $0x3,%edx
  lea    0x4(%rsp),%rdi
  mov    %rax,%rsi
  call   <memmove@plt>
  lea    D534(%rip),%rdi
  call   <puts@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movl   $0x726162,(%rsp)
  movl   $0x6f6f66,0xd0(%rsp)
  call   <strcat@plt>
  cmp    %rbp,%rbp
  je     L13
  lea    D64(%rip),%rdi
  mov    $0x1,%r13d
  call   <puts@plt>
L13:
  lea    D52(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L176
L256:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movb   $0x0,(%rsp)
  movl   $0x6f6f66,0xd0(%rsp)
  call   <strcat@plt>
  lea    D114(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L46
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movb   $0x0,0xd0(%rsp)
  movl   $0x326f6f66,(%rsp)
  movb   $0x0,0x4(%rsp)
  call   <strcat@plt>
  lea    D507(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L44
  test   %r13d,%r13d
  jne    L340
  lea    D555(%rip),%rdi
  call   <puts@plt>
L200:
  mov    $0x61,%edi
  call   <toupper@plt>
  cmp    $0x41,%eax
  je     L277
L222:
  lea    D144(%rip),%rdi
  call   <puts@plt>
L468:
  mov    $0x41,%edi
  call   <tolower@plt>
  cmp    $0x61,%eax
  je     L110
L465:
  lea    D556(%rip),%rdi
  call   <puts@plt>
L425:
  mov    $0x7,%edi
  call   <isprint@plt>
  test   %eax,%eax
  jne    L249
  mov    $0x47,%edi
  call   <isprint@plt>
  test   %eax,%eax
  je     L249
  lea    D368(%rip),%rdi
  call   <puts@plt>
L15:
  mov    $0x100,%edx
  mov    $0x100,%eax
  lea    D217(%rip),%rdi
  movb   $0x2,0x2(%rsp)
  mov    %dx,0xd0(%rsp)
  mov    %ax,(%rsp)
  movb   $0x2,0xd2(%rsp)
  call   <puts@plt>
  movdqa D13(%rip),%xmm0
  mov    $0x3434,%ecx
  xor    %edx,%edx
  mov    %cx,0x30(%rsp)
  lea    0x1(%rsp),%rax
  lea    0x32(%rsp),%rsi
  movaps %xmm0,(%rsp)
  movaps %xmm0,0x10(%rsp)
  movaps %xmm0,0x20(%rsp)
  jmp    L29
  nopw   0x0(%rax,%rax,1)
L424:
  movzbl (%rax),%ecx
  add    $0x1,%rax
  cmp    $0x34,%cl
  setne  %cl
  movzbl %cl,%ecx
  add    %ecx,%edx
L29:
  cmp    %rax,%rsi
  jne    L424
  test   %edx,%edx
  je     L130
  lea    D508(%rip),%rdi
  call   <puts@plt>
L121:
  lea    D406(%rip),%rdi
  xor    %eax,%eax
  call   <atoi@plt>
  lea    D485(%rip),%rdi
  mov    %eax,%ebp
  xor    %eax,%eax
  call   <atoi@plt>
  lea    D163(%rip),%rdi
  test   %eax,%eax
  mov    $0x0,%eax
  je     L234
  call   <atoi@plt>
L164:
  lea    D361(%rip),%rdi
  call   <puts@plt>
L349:
  mov    0x198(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L111
  add    $0x1a0,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L249:
  lea    D479(%rip),%rdi
  call   <puts@plt>
  jmp    L15
L234:
  call   <atoi@plt>
  cmp    $0xffff8ad0,%eax
  jne    L164
  cmp    $0x856,%ebp
  jne    L164
  lea    D68(%rip),%rdi
  call   <puts@plt>
  jmp    L349
L130:
  lea    D262(%rip),%rdi
  call   <puts@plt>
  jmp    L121
L46:
  lea    D340(%rip),%rdi
  call   <puts@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movb   $0x0,0x4(%rsp)
  movb   $0x0,0xd0(%rsp)
  movl   $0x326f6f66,(%rsp)
  call   <strcat@plt>
  lea    D507(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L340
L44:
  lea    D491(%rip),%rdi
  call   <puts@plt>
L340:
  lea    D410(%rip),%rdi
  call   <puts@plt>
  jmp    L200
L23:
  lea    D219(%rip),%rdi
  call   <puts@plt>
  jmp    L381
L485:
  lea    D279(%rip),%rdi
  call   <puts@plt>
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0xa,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  je     L138
L131:
  lea    D192(%rip),%rdi
  call   <puts@plt>
L138:
  lea    D157(%rip),%rdi
  call   <puts@plt>
  jmp    L288
L208:
  lea    D73(%rip),%rdi
  call   <puts@plt>
  lea    D25(%rip),%rdi
  call   <puts@plt>
  jmp    L263
L41:
  lea    D66(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  cmp    $0xa,%eax
  je     L30
L478:
  lea    D377(%rip),%rdi
  call   <puts@plt>
L30:
  lea    D159(%rip),%rdi
  call   <puts@plt>
  jmp    L423
L83:
  lea    D428(%rip),%rdi
  call   <puts@plt>
  mov    $0x61,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L106
L142:
  lea    D425(%rip),%rdi
  call   <puts@plt>
L106:
  lea    D89(%rip),%rdi
  call   <puts@plt>
  jmp    L5
L110:
  mov    $0x5a,%edi
  call   <tolower@plt>
  cmp    $0x7a,%eax
  jne    L465
  lea    D183(%rip),%rdi
  call   <puts@plt>
  jmp    L425
L277:
  mov    $0x7a,%edi
  call   <toupper@plt>
  cmp    $0x5a,%eax
  jne    L222
  lea    D225(%rip),%rdi
  call   <puts@plt>
  jmp    L468
L176:
  lea    D299(%rip),%rdi
  add    $0x1,%r13d
  call   <puts@plt>
  jmp    L256
L111:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D48
data_type: string
name: extract_symbolic_data
arguments: data_tag: D136
data_type: string
name: extract_symbolic_data
arguments: data_tag: D322
data_type: string
name: extract_symbolic_data
arguments: data_tag: D446
data_type: string
name: extract_symbolic_data
arguments: data_tag: D423
data_type: string
name: extract_symbolic_data
arguments: data_tag: D28
data_type: string
name: extract_symbolic_data
arguments: data_tag: D69
data_type: string
name: extract_symbolic_data
arguments: data_tag: D10
data_type: string
name: extract_symbolic_data
arguments: data_tag: D532
data_type: string
name: extract_symbolic_data
arguments: data_tag: D200
data_type: string
name: extract_symbolic_data
arguments: data_tag: D595
data_type: string
name: extract_symbolic_data
arguments: data_tag: D456
data_type: string
name: extract_symbolic_data
arguments: data_tag: D236
data_type: string
name: extract_symbolic_data
arguments: data_tag: D150
data_type: string
name: extract_symbolic_data
arguments: data_tag: D201
data_type: string
name: extract_symbolic_data
arguments: data_tag: D570
data_type: string
name: extract_symbolic_data
arguments: data_tag: D549
data_type: string
name: extract_symbolic_data
arguments: data_tag: D412
data_type: string
name: extract_symbolic_data
arguments: data_tag: D515
data_type: string
name: extract_symbolic_data
arguments: data_tag: D265
data_type: string
name: extract_symbolic_data
arguments: data_tag: D47
data_type: string
name: extract_symbolic_data
arguments: data_tag: D381
data_type: string
name: extract_symbolic_data
arguments: data_tag: D534
data_type: string
name: extract_symbolic_data
arguments: data_tag: D64
data_type: string
name: extract_symbolic_data
arguments: data_tag: D52
data_type: string
name: extract_symbolic_data
arguments: data_tag: D114
data_type: string
name: extract_symbolic_data
arguments: data_tag: D507
data_type: string
name: extract_symbolic_data
arguments: data_tag: D555
data_type: string
name: extract_symbolic_data
arguments: data_tag: D144
data_type: string
name: extract_symbolic_data
arguments: data_tag: D556
data_type: string
name: extract_symbolic_data
arguments: data_tag: D368
data_type: string
name: extract_symbolic_data
arguments: data_tag: D217
data_type: string
name: extract_symbolic_data
arguments: data_tag: D13
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D508
data_type: string
name: extract_symbolic_data
arguments: data_tag: D406
data_type: string
name: extract_symbolic_data
arguments: data_tag: D485
data_type: string
name: extract_symbolic_data
arguments: data_tag: D163
data_type: string
name: extract_symbolic_data
arguments: data_tag: D361
data_type: string
name: extract_symbolic_data
arguments: data_tag: D479
data_type: string
name: extract_symbolic_data
arguments: data_tag: D68
data_type: string
name: extract_symbolic_data
arguments: data_tag: D262
data_type: string
name: extract_symbolic_data
arguments: data_tag: D340
data_type: string
name: extract_symbolic_data
arguments: data_tag: D491
data_type: string
name: extract_symbolic_data
arguments: data_tag: D410
data_type: string
name: extract_symbolic_data
arguments: data_tag: D219
data_type: string
name: extract_symbolic_data
arguments: data_tag: D279
data_type: string
name: extract_symbolic_data
arguments: data_tag: D192
data_type: string
name: extract_symbolic_data
arguments: data_tag: D157
data_type: string
name: extract_symbolic_data
arguments: data_tag: D73
data_type: string
name: extract_symbolic_data
arguments: data_tag: D25
data_type: string
name: extract_symbolic_data
arguments: data_tag: D66
data_type: string
name: extract_symbolic_data
arguments: data_tag: D377
data_type: string
name: extract_symbolic_data
arguments: data_tag: D159
data_type: string
name: extract_symbolic_data
arguments: data_tag: D428
data_type: string
name: extract_symbolic_data
arguments: data_tag: D425
data_type: string
name: extract_symbolic_data
arguments: data_tag: D89
data_type: string
name: extract_symbolic_data
arguments: data_tag: D183
data_type: string
name: extract_symbolic_data
arguments: data_tag: D225
data_type: string
name: extract_symbolic_data
arguments: data_tag: D299
data_type: string

tool: D48: ok puts

tool: D136: o%c pr%cntf

tool: D322: ok puts_nonl


tool: D446: ok getchar

tool: D423: ok strlen

tool: D28: ok strcmp

tool: D69: This is a test of the emergency broadcasting system.

tool: D10: ok gets

tool: D532: ok isspace

tool: D200: ok isdigit

tool: D595: 0x1234

tool: D456: [0x1234 base=0]

tool: D236: 1234

tool: D150: [1234 base=16]

tool: D201: 01234

tool: D570: [01234 base=0]

tool: D549: [1234 base=8]

tool: D412: [1234 base=0]

tool: D515: [1234 base=10]

tool: D265: -1234

tool: D47: ok strtol

tool: D381: fail strcpy

tool: D534: ok memmove

tool: D64: [strcat retval]

tool: D52: foobar

tool: D114: foo

tool: D507: foo2

tool: D555: ok strcat

tool: D144: fail toupper

tool: D556: fail tolower

tool: D368: ok isprint

tool: D217: ok memcpy

tool: {"D13": [0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34]}

tool: D508: fail memset

tool: D406: 2134

tool: D485: 0

tool: D163: -30000

tool: D361: fail atoi

tool: D479: fail isprint

tool: D68: ok atoi

tool: D262: ok memset

tool: D340: [strcat foo]

tool: D491: [strcat foo2]

tool: D410: fail strcat

tool: D219: ok strcpy

tool: D279: [-1234 base=0]

tool: D192: [-1234 base=10]

tool: D157: fail strtol

tool: D73: [comparison fails]

tool: D25: fail gets

tool: D66: [lost x]

tool: D377: [lost newline]

tool: D159: fail getchar

tool: D428: [whitespace]

tool: D425: [non-whitespace]

tool: D89: fail isspace

tool: D183: ok tolower

tool: D225: ok toupper

tool: D299: [strcat foobar]

assistant: ```c
int main(int argc, char **argv) {
  int fail, i;
  char buf[200], dest[200], c;
  puts("ok puts");
  printf("o%c pr%cntf", 'k', 'i');
  printf("\n");
  puts_nonl("ok puts_nonl\n");
  putchar('o');
  putchar('k');
  putchar(' ');
  putchar('p');
  putchar('u');
  putchar('t');
  putchar('c');
  putchar('h');
  putchar('a');
  putchar('r');
  putchar('\n');
  fail = 0;
  set_echo(0);
  if (getchar() != 'x') {
    puts("[lost x]");
    fail++;
  }
  if (getchar() != '\n') {
    puts("[lost newline]");
    fail++;
  }
  if (fail) {
    puts("fail getchar");
  } else {
    puts("ok getchar");
  }
  fail = 0;
  if (strlen("") != 0) {
    puts("[empty]");
    fail++;
  }
  if (strlen("abcdef") != 6) {
    puts("[non-empty]");
    fail++;
  }
  if (fail) {
    puts("fail strlen");
  } else {
    puts("ok strlen");
  }
  fail = 0;
  if (strcmp("less", "lesser") >= 0) {
    puts("[len=4 vs len=6]");
    fail++;
  }
  if (strcmp("lesseq", "lesser") >= 0) {
    puts("[q vs r]");
    fail++;
  }
  if (strcmp("lesser", "lesser") != 0) {
    puts("[r vs r]");
    fail++;
  }
  if (strcmp("lesser", "lesseq") <= 0) {
    puts("[r vs q]");
    fail++;
  }
  if (strcmp("lesser", "less") <= 0) {
    puts("[len=6 vs len=4]");
    fail++;
  }
  if (fail) {
    puts("fail strcmp");
  } else {
    puts("ok strcmp");
  }
  fail = 0;
  gets(buf);
  if (strcmp(buf, "This is a test of the emergency broadcasting system.") != 0) {
    puts("[comparison fails]");
    fail++;
  }
  if (fail) {
    puts("fail gets");
  } else {
    puts("ok gets");
  }
  fail = 0;
  if (!isspace(' ')) {
    puts("[whitespace]");
    fail++;
  }
  if (isspace('a')) {
    puts("[non-whitespace]");
    fail++;
  }
  if (fail) {
    puts("fail isspace");
  } else {
    puts("ok isspace");
  }
  fail = 0;
  if (!isdigit('0')) {
    puts("[0]");
    fail++;
  }
  if (!isdigit('1')) {
    puts("[1]");
    fail++;
  }
  if (!isdigit('2')) {
    puts("[2]");
    fail++;
  }
  if (!isdigit('3')) {
    puts("[3]");
    fail++;
  }
  if (!isdigit('4')) {
    puts("[4]");
    fail++;
  }
  if (!isdigit('5')) {
    puts("[5]");
    fail++;
  }
  if (!isdigit('6')) {
    puts("[6]");
    fail++;
  }
  if (!isdigit('7')) {
    puts("[7]");
    fail++;
  }
  if (!isdigit('8')) {
    puts("[8]");
    fail++;
  }
  if (!isdigit('9')) {
    puts("[9]");
    fail++;
  }
  if (isdigit(' ')) {
    puts("[space]");
    fail++;
  }
  if (isdigit('a')) {
    puts("[alpha]");
    fail++;
  }
  if (fail) {
    puts("fail isdigit");
  } else {
    puts("ok isdigit");
  }
  fail = 0;
  if (strtol("0x1234", ((void *)0L), 0) != 0x1234) {
    puts("[0x1234 base=0]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 16) != 0x1234) {
    puts("[1234 base=16]");
    fail++;
  }
  if (strtol("01234", ((void *)0L), 0) != 01234) {
    puts("[01234 base=0]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 8) != 01234) {
    puts("[1234 base=8]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 0) != 1234) {
    puts("[1234 base=0]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 10) != 1234) {
    puts("[1234 base=10]");
    fail++;
  }
  if (strtol("-1234", ((void *)0L), 0) != -1234) {
    puts("[-1234 base=0]");
    fail++;
  }
  if (strtol("-1234", ((void *)0L), 10) != -1234) {
    puts("[-1234 base=10]");
    fail++;
  }
  if (fail) {
    puts("fail strtol");
  } else {
    puts("ok strtol");
  }
  fail = 0;
  strcpy(buf, "ab");
  if (!((buf[0] == 'a') && (buf[1] == 'b') && (buf[2] == '\0')))
    fail++;
  strcpy(&buf[3], buf);
  if (!((buf[0] == 'a') && (buf[1] == 'b') && (buf[2] == '\0') && (buf[3] == 'a') && (buf[4] == 'b') && (buf[5] == '\0')))
    fail++;
  if (fail) {
    puts("fail strcpy");
  } else {
    puts("ok strcpy");
  }
  fail = 0;
  strcpy(buf, "xxxabcyyy");
  memmove(&buf[5], &buf[3], 3);
  if (!((buf[5] == 'a') && (buf[6] == 'b') && (buf[7] == 'c')))
    fail++;
  memmove(&buf[4], &buf[5], 3);
  if (!((buf[4] == 'a') && (buf[5] == 'b') && (buf[6] == 'c')))
    fail++;
  if (fail) {
    puts("fail memmove");
  } else {
    puts("ok memmove");
  }
  fail = 0;
  buf[0] = 'b';
  buf[1] = 'a';
  buf[2] = 'r';
  buf[3] = '\0';
  dest[0] = 'f';
  dest[1] = 'o';
  dest[2] = 'o';
  dest[3] = '\0';
  if (strcat(dest, buf) != dest) {
    puts("[strcat retval]");
    fail++;
  }
  if (strcmp(dest, "foobar") != 0) {
    puts("[strcat foobar]");
    fail++;
  }
  buf[0] = '\0';
  dest[0] = 'f';
  dest[1] = 'o';
  dest[2] = 'o';
  dest[3] = '\0';
  strcat(dest, buf);
  if (strcmp(dest, "foo") != 0) {
    puts("[strcat foo]");
    fail++;
  }
  dest[0] = '\0';
  buf[0] = 'f';
  buf[1] = 'o';
  buf[2] = 'o';
  buf[3] = '2';
  buf[4] = '\0';
  strcat(dest, buf);
  if (strcmp(dest, "foo2") != 0) {
    puts("[strcat foo2]");
    fail++;
  }
  if (fail) {
    puts("fail strcat");
  } else {
    puts("ok strcat");
  }
  fail = 0;
  c = 'a';
  if (toupper(c) != 'A') {
    fail++;
  }
  c = 'z';
  if (toupper(c) != 'Z') {
    fail++;
  }
  if (fail) {
    puts("fail toupper");
  } else {
    puts("ok toupper");
  }
  fail = 0;
  c = 'A';
  if (tolower(c) != 'a') {
    fail++;
  }
  c = 'Z';
  if (tolower(c) != 'z') {
    fail++;
  }
  if (fail) {
    puts("fail tolower");
  } else {
    puts("ok tolower");
  }
  fail = 0;
  if (isprint('')) {
    fail++;
  }
  if (!isprint('G')) {
    fail++;
  }
  if (fail) {
    puts("fail isprint");
  } else {
    puts("ok isprint");
  }
  fail = 0;
  buf[0] = 0;
  buf[1] = 1;
  buf[2] = 2;
  dest[0] = 0;
  dest[1] = 0;
  dest[2] = 0;
  memcpy(dest, buf, 3);
  if (!(dest[0] == 0 && dest[1] == 1 && dest[2] == 2)) {
    fail++;
  }
  if (fail) {
    puts("fail memcpy");
  } else {
    puts("ok memcpy");
  }
  memset(buf, '4', 50);
  for (i = 0; i < 50; ++i) {
    if (buf[i] != '4') {
      fail++;
    }
  }
  if (fail) {
    puts("fail memset");
  } else {
    puts("ok memset");
  }
  fail = 0;
  if (atoi("2134") != 2134) {
    fail++;
  }
  if (atoi("0") != 0) {
    fail++;
  }
  if (atoi("-30000") != -30000) {
    fail++;
  }
  if (fail) {
    puts("fail atoi");
  } else {
    puts("ok atoi");
  }
  return 0;
}
```