user: 请将以下的汇编代码转换成C语言代码：

```asm
<test_mktime>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  movabs $0xb00000070,%rax
  lea    0x10(%rsp),%rbp
  mov    %rbp,%rdi
  mov    %rax,0x10(%rsp)
  movabs $0x1500000010,%rax
  mov    %rax,0x18(%rsp)
  movabs $0x10000002a,%rax
  mov    %rax,0x20(%rsp)
  movabs $0xa0000000a,%rax
  mov    %rax,0x28(%rsp)
  call   <mktime@plt>
  mov    %eax,0xc(%rsp)
  cmp    $0x50ce4029,%eax
  jne    L191
  mov    0x28(%rsp),%r12d
  test   %r12d,%r12d
  jne    L69
  cmpl   $0x15e,0x2c(%rsp)
  je     L195
  mov    $0x30,%edx
  lea    D84(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
L28:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L13
  add    $0x60,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L195:
  lea    0x30(%rsp),%rbx
  lea    0xc(%rsp),%rdi
  mov    %rbx,%rsi
  call   <gmtime_r@plt>
  cmp    %rax,%rbx
  jne    L134
  cmpl   $0x70,0x30(%rsp)
  jne    L72
  cmpl   $0xb,0x34(%rsp)
  jne    L114
  cmpl   $0x10,0x38(%rsp)
  jne    L40
  cmpl   $0x15,0x3c(%rsp)
  jne    L9
  mov    %rbp,%rdi
  movl   $0x0,0x10(%rsp)
  call   <mktime@plt>
  cmp    $0xffffffff,%eax
  je     L120
  mov    $0x3a,%edx
  lea    D11(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L28
  nopl   (%rax)
L191:
  mov    $0x2e,%edx
  lea    D132(%rip),%rsi
  lea    D61(%rip),%rdi
  xor    %r12d,%r12d
  call   <printf@plt>
  jmp    L28
  nopl   0x0(%rax,%rax,1)
L134:
  mov    $0x32,%edx
  lea    D170(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L28
  nopl   (%rax)
L69:
  mov    $0x2f,%edx
  lea    D10(%rip),%rsi
  lea    D61(%rip),%rdi
  xor    %r12d,%r12d
  call   <printf@plt>
  jmp    L28
L72:
  mov    $0x34,%edx
  lea    D55(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L28
  nopl   (%rax)
L9:
  mov    $0x37,%edx
  lea    D9(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L28
  nopl   (%rax)
L114:
  mov    $0x35,%edx
  lea    D123(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L28
  nopl   (%rax)
L40:
  mov    $0x36,%edx
  lea    D199(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L28
  nopl   (%rax)
L120:
  mov    %rbp,%rdi
  movl   $0x7dc,0x10(%rsp)
  call   <mktime@plt>
  cmp    $0xffffffff,%eax
  jne    L50
  mov    $0x1,%r12d
  jmp    L28
L50:
  mov    $0x3d,%edx
  lea    D11(%rip),%rsi
  lea    D61(%rip),%rdi
  call   <printf@plt>
  jmp    L28
L13:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D84
datatype: string
name: disassemble_data
arguments: tag: D61
datatype: string
name: disassemble_data
arguments: tag: D11
datatype: string
name: disassemble_data
arguments: tag: D132
datatype: string
name: disassemble_data
arguments: tag: D170
datatype: string
name: disassemble_data
arguments: tag: D10
datatype: string
name: disassemble_data
arguments: tag: D55
datatype: string
name: disassemble_data
arguments: tag: D9
datatype: string
name: disassemble_data
arguments: tag: D123
datatype: string
name: disassemble_data
arguments: tag: D199
datatype: string

tool: D84: tm.tm_yday == 350

tool: D61: expression '%s' untrue at %d


tool: D11: -1 == mktime(&tm)

tool: D132: t == 1355694121

tool: D170: &tm2 == gmtime_r(&t, &tm2)

tool: D10: tm.tm_wday == 0

tool: D55: tm2.tm_year == 112

tool: D9: tm2.tm_hour == 21

tool: D123: tm2.tm_mon == 11

tool: D199: tm2.tm_mday == 16

assistant: ```c
int test_mktime(void) {
  struct tm tm = {
      .tm_year = 112,
      .tm_mon = 11,
      .tm_mday = 16,
      .tm_hour = 21,
      .tm_min = 42,
      .tm_sec = 1,
      .tm_wday = 10,
      .tm_yday = 10,
  };
  struct tm tm2;
  time_t t;
  t = mktime(&tm);
  do {
    if (!(t == 1355694121)) {
      printf("expression '%s' untrue at %d\n", "t == 1355694121", 46);
      return 0;
    }
  } while (0);
  do {
    if (!(tm.tm_wday == 0)) {
      printf("expression '%s' untrue at %d\n", "tm.tm_wday == 0", 47);
      return 0;
    }
  } while (0);
  do {
    if (!(tm.tm_yday == 350)) {
      printf("expression '%s' untrue at %d\n", "tm.tm_yday == 350", 48);
      return 0;
    }
  } while (0);
  do {
    if (!(&tm2 == gmtime_r(&t, &tm2))) {
      printf("expression '%s' untrue at %d\n", "&tm2 == gmtime_r(&t, &tm2)", 50);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_year == 112)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_year == 112", 52);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_mon == 11)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_mon == 11", 53);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_mday == 16)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_mday == 16", 54);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_hour == 21)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_hour == 21", 55);
      return 0;
    }
  } while (0);
  tm.tm_year = 0;
  do {
    if (!(-1 == mktime(&tm))) {
      printf("expression '%s' untrue at %d\n", "-1 == mktime(&tm)", 58);
      return 0;
    }
  } while (0);
  tm.tm_year = 2012;
  do {
    if (!(-1 == mktime(&tm))) {
      printf("expression '%s' untrue at %d\n", "-1 == mktime(&tm)", 61);
      return 0;
    }
  } while (0);
  return 1;
}
```