user: What is the c source code of the assembly code below?

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x800,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x7f8(%rbp),%rax
  mov    %rax,%rsi
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L19
L50:
  lea    -0x7e0(%rbp),%rax
  mov    %rax,%rdi
  call   <gets@plt>
  lea    -0x7e0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x7e8(%rbp)
  movl   $0x0,-0x7f4(%rbp)
  jmp    L58
L39:
  mov    -0x7f4(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  cmp    $0x40,%al
  jle    L93
  mov    -0x7f4(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  cmp    $0x5a,%al
  jle    L21
L93:
  mov    -0x7f4(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  cmp    $0x60,%al
  jle    L13
  mov    -0x7f4(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  cmp    $0x7a,%al
  jg     L13
L21:
  mov    -0x7f4(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  add    $0x3,%eax
  mov    %eax,%edx
  mov    -0x7f4(%rbp),%eax
  cltq
  mov    %dl,-0x7e0(%rbp,%rax,1)
L13:
  addl   $0x1,-0x7f4(%rbp)
L58:
  mov    -0x7f4(%rbp),%eax
  cmp    -0x7e8(%rbp),%eax
  jl     L39
  movl   $0x0,-0x7ec(%rbp)
  mov    -0x7e8(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x7f0(%rbp)
  jmp    L32
L85:
  mov    -0x7f0(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%edx
  mov    -0x7ec(%rbp),%eax
  cltq
  mov    %dl,-0x3f0(%rbp,%rax,1)
  addl   $0x1,-0x7ec(%rbp)
  subl   $0x1,-0x7f0(%rbp)
L32:
  cmpl   $0x0,-0x7f0(%rbp)
  jns    L85
  mov    -0x7ec(%rbp),%eax
  cltq
  movb   $0x0,-0x3f0(%rbp,%rax,1)
  mov    -0x7e8(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x7e4(%rbp)
  mov    -0x7e4(%rbp),%eax
  mov    %eax,-0x7f4(%rbp)
  jmp    L62
L101:
  mov    -0x7f4(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%eax
  sub    $0x1,%eax
  mov    %eax,%edx
  mov    -0x7f4(%rbp),%eax
  cltq
  mov    %dl,-0x3f0(%rbp,%rax,1)
  addl   $0x1,-0x7f4(%rbp)
L62:
  mov    -0x7f4(%rbp),%eax
  cmp    -0x7e8(%rbp),%eax
  jl     L101
  lea    -0x3f0(%rbp),%rax
  mov    %rax,%rsi
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L19:
  mov    -0x7f8(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x7f8(%rbp)
  test   %eax,%eax
  jne    L50
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L97
  call   <__stack_chk_fail@plt>
L97:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D14
type_guessed: string
name: parse_data
arguments: data_tag: D10
type_guessed: string

tool: D14: %d

tool: D10: %s


assistant: ```c
int main() {
  char str[1000], str1[1000];
  int i, k, j, n, m, l, T;
  scanf("%d", &T);
  getchar();
  while (T--) {
    gets(str);
    k = strlen(str);
    for (i = 0; i < k; i++) {
      if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
        str[i] = str[i] + 3;
    }
    n = 0;
    for (j = k - 1; j >= 0; j--) {
      str1[n] = str[j];
      n++;
    }
    str1[n] = '\0';
    l = k / 2;
    for (i = l; i < k; i++) {
      str1[i] = str1[i] - 1;
    }
    printf("%s\n", str1);
  }
}
```