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

```asm
<xml_parse_tag_only>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,-0x34(%rbp)
  mov    %rcx,-0x40(%rbp)
L74:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <getc@plt>
  mov    %al,-0x15(%rbp)
  cmpb   $0xa,-0x15(%rbp)
  jne    L21
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
L21:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L86
  cmpb   $0x3c,-0x15(%rbp)
  jne    L74
L86:
  movl   $0x0,-0x14(%rbp)
L171:
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <getc@plt>
  mov    %al,(%rbx)
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L42
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movb   $0x20,(%rax)
L42:
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  jne    L238
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  je     L171
L238:
  addl   $0x1,-0x14(%rbp)
  cmpl   $0x3,-0x14(%rbp)
  jne    L67
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x21,%al
  jne    L67
  mov    -0x30(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L67
  mov    -0x30(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L67
  movl   $0x0,-0x14(%rbp)
L14:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <getc@plt>
  mov    %al,-0x15(%rbp)
  cmpb   $0x2d,-0x15(%rbp)
  jne    L33
  addl   $0x1,-0x14(%rbp)
  jmp    L47
L33:
  cmpb   $0x3e,-0x15(%rbp)
  jne    L211
  cmpl   $0x1,-0x14(%rbp)
  jne    L47
L211:
  movl   $0x0,-0x14(%rbp)
L47:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L147
  cmpl   $0x1,-0x14(%rbp)
  jle    L14
  cmpb   $0x3e,-0x15(%rbp)
  jne    L14
L147:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <getc@plt>
  mov    %al,-0x15(%rbp)
  cmpb   $0xa,-0x15(%rbp)
  jne    L7
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
L7:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L170
  cmpb   $0x3c,-0x15(%rbp)
  jne    L147
L170:
  movl   $0x0,-0x14(%rbp)
L67:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L237
  mov    -0x14(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jge    L237
  mov    -0x14(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3e,%al
  jne    L171
L237:
  cmpl   $0x0,-0x14(%rbp)
  jne    L142
  movl   $0x1,-0x14(%rbp)
L142:
  mov    -0x14(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <xml_remove_leading_trailing_spaces@plt>
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void xml_parse_tag_only(FILE *fileptr, char *tag, int maxlen, int *lnn) {
  int i;
  char ch;
  do {
    ch = getc(fileptr);
    if (ch == '\n')
      (*lnn)++;
  } while ((!feof(fileptr)) && (ch != '<'));
  i = 0;
  do {
    do {
      tag[i] = getc(fileptr);
      if (tag[i] == '\n')
        tag[i] = ' ';
    } while ((tag[i] == '\r') && (!feof(fileptr)));
    i = i + 1;
    if ((i == 3) && (tag[0] == '!') && (tag[1] == '-') && (tag[2] == '-')) {
      i = 0;
      do {
        ch = getc(fileptr);
        if (ch == '-')
          i = i + 1;
        else if ((ch != '>') || (i == 1))
          i = 0;
      } while ((!feof(fileptr)) && ((i < 2) || (ch != '>')));
      do {
        ch = getc(fileptr);
        if (ch == '\n')
          (*lnn)++;
      } while ((!feof(fileptr)) && (ch != '<'));
      i = 0;
    }
  } while ((!feof(fileptr)) && (i < maxlen) && (tag[i - 1] != '>'));
  if (i == 0)
    i = 1;
  tag[i - 1] = '\0';
  xml_remove_leading_trailing_spaces(tag);
}
```