user: 下面的汇编指令对应的C源代码是什么：

```asm
<main>:
  endbr64
  push   %r13
  lea    D291(%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    D55(%rip),%rdi
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D267(%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    L445
  xor    %eax,%eax
  call   <getchar@plt>
  cmp    $0xa,%eax
  jne    L106
  lea    D153(%rip),%rdi
  call   <puts@plt>
L333:
  lea    D349(%rip),%rdi
  mov    %rsp,%r12
  call   <puts@plt>
  lea    D342(%rip),%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <gets@plt>
  lea    D36(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L52
  lea    D573(%rip),%rdi
  call   <puts@plt>
L382:
  mov    $0x20,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L413
  mov    $0x61,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L149
  lea    D138(%rip),%rdi
  call   <puts@plt>
L60:
  lea    D496(%rip),%rdi
  xor    %ebp,%ebp
  call   <puts@plt>
  xor    %edx,%edx
  xor    %esi,%esi
  lea    D364(%rip),%rdi
  xor    %eax,%eax
  call   <strtol@plt>
  cmp    $0x1234,%eax
  je     L302
  lea    D283(%rip),%rdi
  mov    $0x1,%ebp
  call   <puts@plt>
L302:
  lea    D285(%rip),%r13
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0x10,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x1234,%eax
  je     L246
  lea    D254(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L246:
  xor    %edx,%edx
  xor    %esi,%esi
  lea    D18(%rip),%rdi
  xor    %eax,%eax
  call   <strtol@plt>
  cmp    $0x29c,%eax
  je     L238
  lea    D545(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L238:
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0x8,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x29c,%eax
  je     L227
  lea    D187(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L227:
  xor    %edx,%edx
  xor    %esi,%esi
  xor    %eax,%eax
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x4d2,%eax
  je     L269
  lea    D581(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L269:
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0xa,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0x4d2,%eax
  je     L47
  lea    D218(%rip),%rdi
  add    $0x1,%ebp
  call   <puts@plt>
L47:
  lea    D588(%rip),%r13
  xor    %edx,%edx
  xor    %esi,%esi
  xor    %eax,%eax
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  jne    L173
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0xa,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  jne    L310
  test   %ebp,%ebp
  jne    L204
  lea    D75(%rip),%rdi
  call   <puts@plt>
L228:
  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     L311
  lea    D249(%rip),%rdi
  call   <puts@plt>
L28:
  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    D2(%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     L350
  lea    D131(%rip),%rdi
  mov    $0x1,%r13d
  call   <puts@plt>
L350:
  lea    D445(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L355
L96:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movb   $0x0,(%rsp)
  movl   $0x6f6f66,0xd0(%rsp)
  call   <strcat@plt>
  lea    D432(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L175
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movb   $0x0,0xd0(%rsp)
  movl   $0x326f6f66,(%rsp)
  movb   $0x0,0x4(%rsp)
  call   <strcat@plt>
  lea    D555(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L74
  test   %r13d,%r13d
  jne    L427
  lea    D465(%rip),%rdi
  call   <puts@plt>
L80:
  mov    $0x61,%edi
  call   <toupper@plt>
  cmp    $0x41,%eax
  je     L76
L172:
  lea    D265(%rip),%rdi
  call   <puts@plt>
L73:
  mov    $0x41,%edi
  call   <tolower@plt>
  cmp    $0x61,%eax
  je     L146
L75:
  lea    D467(%rip),%rdi
  call   <puts@plt>
L372:
  mov    $0x7,%edi
  call   <isprint@plt>
  test   %eax,%eax
  jne    L328
  mov    $0x47,%edi
  call   <isprint@plt>
  test   %eax,%eax
  je     L328
  lea    D405(%rip),%rdi
  call   <puts@plt>
L280:
  mov    $0x100,%edx
  mov    $0x100,%eax
  lea    D385(%rip),%rdi
  movb   $0x2,0x2(%rsp)
  mov    %dx,0xd0(%rsp)
  mov    %ax,(%rsp)
  movb   $0x2,0xd2(%rsp)
  call   <puts@plt>
  movdqa D399(%rip),%xmm0
  mov    $0x3434,%ecx
  lea    D295(%rip),%rdi
  mov    %cx,0x30(%rsp)
  movaps %xmm0,(%rsp)
  movaps %xmm0,0x10(%rsp)
  movaps %xmm0,0x20(%rsp)
  call   <puts@plt>
  lea    D539(%rip),%rdi
  xor    %eax,%eax
  call   <atoi@plt>
  lea    D503(%rip),%rdi
  mov    %eax,%ebp
  xor    %eax,%eax
  call   <atoi@plt>
  lea    D256(%rip),%rdi
  test   %eax,%eax
  mov    $0x0,%eax
  je     L406
  call   <atoi@plt>
L32:
  lea    D434(%rip),%rdi
  call   <puts@plt>
L398:
  mov    0x198(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L139
  add    $0x1a0,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L328:
  lea    D219(%rip),%rdi
  call   <puts@plt>
  jmp    L280
L406:
  call   <atoi@plt>
  cmp    $0xffff8ad0,%eax
  jne    L32
  cmp    $0x856,%ebp
  jne    L32
  lea    D151(%rip),%rdi
  call   <puts@plt>
  jmp    L398
L175:
  lea    D579(%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    D555(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L427
L74:
  lea    D471(%rip),%rdi
  call   <puts@plt>
L427:
  lea    D25(%rip),%rdi
  call   <puts@plt>
  jmp    L80
L311:
  lea    D162(%rip),%rdi
  call   <puts@plt>
  jmp    L28
L173:
  lea    D552(%rip),%rdi
  call   <puts@plt>
  xor    %esi,%esi
  xor    %eax,%eax
  mov    $0xa,%edx
  mov    %r13,%rdi
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  je     L204
L310:
  lea    D14(%rip),%rdi
  call   <puts@plt>
L204:
  lea    D456(%rip),%rdi
  call   <puts@plt>
  jmp    L228
L52:
  lea    D488(%rip),%rdi
  call   <puts@plt>
  lea    D559(%rip),%rdi
  call   <puts@plt>
  jmp    L382
L445:
  lea    D74(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  cmp    $0xa,%eax
  je     L284
L106:
  lea    D146(%rip),%rdi
  call   <puts@plt>
L284:
  lea    D28(%rip),%rdi
  call   <puts@plt>
  jmp    L333
L413:
  lea    D505(%rip),%rdi
  call   <puts@plt>
  mov    $0x61,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L62
L149:
  lea    D437(%rip),%rdi
  call   <puts@plt>
L62:
  lea    D302(%rip),%rdi
  call   <puts@plt>
  jmp    L60
L146:
  mov    $0x5a,%edi
  call   <tolower@plt>
  cmp    $0x7a,%eax
  jne    L75
  lea    D86(%rip),%rdi
  call   <puts@plt>
  jmp    L372
L76:
  mov    $0x7a,%edi
  call   <toupper@plt>
  cmp    $0x5a,%eax
  jne    L172
  lea    D64(%rip),%rdi
  call   <puts@plt>
  jmp    L73
L355:
  lea    D43(%rip),%rdi
  add    $0x1,%r13d
  call   <puts@plt>
  jmp    L96
L139:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D291
type_infered: string
name: retrieve_data
arguments: label: D55
type_infered: string
name: retrieve_data
arguments: label: D267
type_infered: string
name: retrieve_data
arguments: label: D153
type_infered: string
name: retrieve_data
arguments: label: D349
type_infered: string
name: retrieve_data
arguments: label: D342
type_infered: string
name: retrieve_data
arguments: label: D36
type_infered: string
name: retrieve_data
arguments: label: D573
type_infered: string
name: retrieve_data
arguments: label: D138
type_infered: string
name: retrieve_data
arguments: label: D496
type_infered: string
name: retrieve_data
arguments: label: D364
type_infered: string
name: retrieve_data
arguments: label: D283
type_infered: string
name: retrieve_data
arguments: label: D285
type_infered: string
name: retrieve_data
arguments: label: D254
type_infered: string
name: retrieve_data
arguments: label: D18
type_infered: string
name: retrieve_data
arguments: label: D545
type_infered: string
name: retrieve_data
arguments: label: D187
type_infered: string
name: retrieve_data
arguments: label: D581
type_infered: string
name: retrieve_data
arguments: label: D218
type_infered: string
name: retrieve_data
arguments: label: D588
type_infered: string
name: retrieve_data
arguments: label: D75
type_infered: string
name: retrieve_data
arguments: label: D249
type_infered: string
name: retrieve_data
arguments: label: D2
type_infered: string
name: retrieve_data
arguments: label: D131
type_infered: string
name: retrieve_data
arguments: label: D445
type_infered: string
name: retrieve_data
arguments: label: D432
type_infered: string
name: retrieve_data
arguments: label: D555
type_infered: string
name: retrieve_data
arguments: label: D465
type_infered: string
name: retrieve_data
arguments: label: D265
type_infered: string
name: retrieve_data
arguments: label: D467
type_infered: string
name: retrieve_data
arguments: label: D405
type_infered: string
name: retrieve_data
arguments: label: D385
type_infered: string
name: retrieve_data
arguments: label: D399
type_infered: byte[16]
name: retrieve_data
arguments: label: D295
type_infered: string
name: retrieve_data
arguments: label: D539
type_infered: string
name: retrieve_data
arguments: label: D503
type_infered: string
name: retrieve_data
arguments: label: D256
type_infered: string
name: retrieve_data
arguments: label: D434
type_infered: string
name: retrieve_data
arguments: label: D219
type_infered: string
name: retrieve_data
arguments: label: D151
type_infered: string
name: retrieve_data
arguments: label: D579
type_infered: string
name: retrieve_data
arguments: label: D471
type_infered: string
name: retrieve_data
arguments: label: D25
type_infered: string
name: retrieve_data
arguments: label: D162
type_infered: string
name: retrieve_data
arguments: label: D552
type_infered: string
name: retrieve_data
arguments: label: D14
type_infered: string
name: retrieve_data
arguments: label: D456
type_infered: string
name: retrieve_data
arguments: label: D488
type_infered: string
name: retrieve_data
arguments: label: D559
type_infered: string
name: retrieve_data
arguments: label: D74
type_infered: string
name: retrieve_data
arguments: label: D146
type_infered: string
name: retrieve_data
arguments: label: D28
type_infered: string
name: retrieve_data
arguments: label: D505
type_infered: string
name: retrieve_data
arguments: label: D437
type_infered: string
name: retrieve_data
arguments: label: D302
type_infered: string
name: retrieve_data
arguments: label: D86
type_infered: string
name: retrieve_data
arguments: label: D64
type_infered: string
name: retrieve_data
arguments: label: D43
type_infered: string

tool: D291: ok puts

tool: D55: o%c pr%cntf

tool: D267: ok puts_nonl


tool: D153: ok getchar

tool: D349: ok strlen

tool: D342: ok strcmp

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

tool: D573: ok gets

tool: D138: ok isspace

tool: D496: ok isdigit

tool: D364: 0x1234

tool: D283: [0x1234 base=0]

tool: D285: 1234

tool: D254: [1234 base=16]

tool: D18: 01234

tool: D545: [01234 base=0]

tool: D187: [1234 base=8]

tool: D581: [1234 base=0]

tool: D218: [1234 base=10]

tool: D588: -1234

tool: D75: ok strtol

tool: D249: fail strcpy

tool: D2: ok memmove

tool: D131: [strcat retval]

tool: D445: foobar

tool: D432: foo

tool: D555: foo2

tool: D465: ok strcat

tool: D265: fail toupper

tool: D467: fail tolower

tool: D405: ok isprint

tool: D385: ok memcpy

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

tool: D295: ok memset

tool: D539: 2134

tool: D503: 0

tool: D256: -30000

tool: D434: fail atoi

tool: D219: fail isprint

tool: D151: ok atoi

tool: D579: [strcat foo]

tool: D471: [strcat foo2]

tool: D25: fail strcat

tool: D162: ok strcpy

tool: D552: [-1234 base=0]

tool: D14: [-1234 base=10]

tool: D456: fail strtol

tool: D488: [comparison fails]

tool: D559: fail gets

tool: D74: [lost x]

tool: D146: [lost newline]

tool: D28: fail getchar

tool: D505: [whitespace]

tool: D437: [non-whitespace]

tool: D302: fail isspace

tool: D86: ok tolower

tool: D64: ok toupper

tool: D43: [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;
}
```