user: Converte this assembly snippet into its equivalent C code:

```asm
<test_copy>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movb   $0x0,-0x12(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x1,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L133
  call   <call_not_eliminated_on_line_44@plt>
L133:
  movb   $0x0,-0x12(%rbp)
  movb   $0x0,-0x11(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x2,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  je     L10
  call   <call_not_eliminated_on_line_45@plt>
L10:
  movb   $0x31,-0x12(%rbp)
  movb   $0x0,-0x11(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x2,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x1,%eax
  je     L112
  call   <call_not_eliminated_on_line_46@plt>
L112:
  movb   $0x31,-0x12(%rbp)
  movb   $0x32,-0x11(%rbp)
  movb   $0x0,-0x10(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x3,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x2,%eax
  je     L27
  call   <call_not_eliminated_on_line_47@plt>
L27:
  movb   $0x31,-0x12(%rbp)
  movb   $0x0,-0x11(%rbp)
  movb   $0x0,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x2,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x1,%eax
  je     L41
  call   <call_not_eliminated_on_line_50@plt>
L41:
  movb   $0x31,-0x12(%rbp)
  movb   $0x0,-0x11(%rbp)
  movb   $0x0,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x1,%eax
  je     L14
  call   <call_not_eliminated_on_line_53@plt>
L14:
  movb   $0x31,-0x12(%rbp)
  movb   $0x32,-0x11(%rbp)
  movb   $0x0,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x3,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x2,%eax
  je     L125
  call   <call_not_eliminated_on_line_54@plt>
L125:
  movb   $0x31,-0x12(%rbp)
  movb   $0x32,-0x11(%rbp)
  movb   $0x0,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x2,%eax
  je     L121
  call   <call_not_eliminated_on_line_55@plt>
L121:
  movb   $0x31,-0x12(%rbp)
  movb   $0x32,-0x11(%rbp)
  movb   $0x33,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x3,%eax
  je     L98
  call   <call_not_eliminated_on_line_56@plt>
L98:
  movb   $0x31,-0x12(%rbp)
  movb   $0x0,-0x11(%rbp)
  movb   $0x0,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x1,%eax
  je     L78
  call   <call_not_eliminated_on_line_57@plt>
L78:
  movb   $0x31,-0x12(%rbp)
  movb   $0x32,-0x11(%rbp)
  movb   $0x0,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x2,%eax
  je     L39
  call   <call_not_eliminated_on_line_58@plt>
L39:
  movb   $0x31,-0x12(%rbp)
  movb   $0x32,-0x11(%rbp)
  movb   $0x33,-0x10(%rbp)
  movb   $0x0,-0xf(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x3,%eax
  je     L12
  call   <call_not_eliminated_on_line_59@plt>
L12:
  movb   $0x31,-0x12(%rbp)
  movb   $0x32,-0x11(%rbp)
  movb   $0x33,-0x10(%rbp)
  movb   $0x34,-0xf(%rbp)
  movb   $0x0,-0xe(%rbp)
  lea    -0x12(%rbp),%rcx
  lea    -0xd(%rbp),%rax
  mov    $0x5,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0xd(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x4,%eax
  je     L107
  call   <call_not_eliminated_on_line_64@plt>
L107:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L134
  call   <__stack_chk_fail@plt>
L134:
  leave
  ret
```

assistant: ```c
void test_copy(void) {
  do {
    char a[2], b[2];
    (a[0] = 0);
    memcpy(b, a, 1);
    if ((!(0 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_44(void);
        call_not_eliminated_on_line_44();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[2], b[2];
    (a[0] = 0, a[1] = 0);
    memcpy(b, a, 2);
    if ((!(0 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_45(void);
        call_not_eliminated_on_line_45();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[2], b[2];
    (a[0] = '1', a[1] = 0);
    memcpy(b, a, 2);
    if ((!(1 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_46(void);
        call_not_eliminated_on_line_46();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[4], b[4];
    (a[0] = '1', a[1] = '2', a[2] = 0);
    memcpy(b, a, 3);
    if ((!(2 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_47(void);
        call_not_eliminated_on_line_47();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[4], b[4];
    (a[0] = '1', a[1] = 0, a[2] = 0, a[3] = 0);
    memcpy(b, a, 2);
    if ((!(1 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_50(void);
        call_not_eliminated_on_line_50();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[4], b[4];
    (a[0] = '1', a[1] = 0, a[2] = 0, a[3] = 0);
    memcpy(b, a, 4);
    if ((!(1 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_53(void);
        call_not_eliminated_on_line_53();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[4], b[4];
    (a[0] = '1', a[1] = '2', a[2] = 0, a[3] = 0);
    memcpy(b, a, 3);
    if ((!(2 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_54(void);
        call_not_eliminated_on_line_54();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[4], b[4];
    (a[0] = '1', a[1] = '2', a[2] = 0, a[3] = 0);
    memcpy(b, a, 4);
    if ((!(2 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_55(void);
        call_not_eliminated_on_line_55();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[4], b[4];
    (a[0] = '1', a[1] = '2', a[2] = '3', a[3] = 0);
    memcpy(b, a, 4);
    if ((!(3 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_56(void);
        call_not_eliminated_on_line_56();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[5], b[5];
    (a[0] = '1', a[1] = 0, a[2] = 0, a[3] = 0);
    memcpy(b, a, 4);
    if ((!(1 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_57(void);
        call_not_eliminated_on_line_57();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[5], b[5];
    (a[0] = '1', a[1] = '2', a[2] = 0, a[3] = 0);
    memcpy(b, a, 4);
    if ((!(2 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_58(void);
        call_not_eliminated_on_line_58();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[5], b[5];
    (a[0] = '1', a[1] = '2', a[2] = '3', a[3] = 0);
    memcpy(b, a, 4);
    if ((!(3 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_59(void);
        call_not_eliminated_on_line_59();
      } while (0);
    else
      (void)0;
  } while (0);
  do {
    char a[5], b[5];
    (a[0] = '1', a[1] = '2', a[2] = '3', a[3] = '4', a[4] = 0);
    memcpy(b, a, 5);
    if ((!(4 == strlen(b))))
      do {
        extern void call_not_eliminated_on_line_64(void);
        call_not_eliminated_on_line_64();
      } while (0);
    else
      (void)0;
  } while (0);
}
```