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

```asm
<find_tag_var_start>:
  endbr64
  test   %rdi,%rdi
  je     L215
  mov    %rsi,%r10
  test   %rsi,%rsi
  je     L215
  movzbl (%rdi),%eax
  mov    %rdi,%r9
  test   %eax,%eax
  je     L215
  xor    %r8d,%r8d
L83:
  cmp    $0x20,%eax
  ja     L187
  add    $0x1,%r8d
  movslq %r8d,%rax
  movzbl (%r9,%rax,1),%eax
  test   %eax,%eax
  jne    L83
L215:
  mov    $0xffffffff,%eax
  ret
  nopl   0x0(%rax)
L187:
  push   %rbx
L164:
  movzbl (%r10),%edx
  mov    %edx,%esi
  test   %edx,%edx
  je     L108
  movslq %r8d,%r11
  mov    $0x1,%ecx
  add    %r9,%r11
  jmp    L105
  nopl   0x0(%rax)
L163:
  lea    -0x41(%rdx),%edi
  lea    0x20(%rdx),%esi
  cmp    $0x1a,%edi
  lea    -0x41(%rax),%edi
  cmovb  %esi,%edx
  lea    0x20(%rax),%esi
  cmp    $0x1a,%edi
  movslq %ecx,%rdi
  cmovae %eax,%esi
  movzbl (%r11,%rcx,1),%eax
  cmp    %esi,%edx
  jne    L202
  movzbl (%r10,%rcx,1),%edx
  add    $0x1,%rcx
  mov    %edx,%esi
  test   %edx,%edx
  je     L2
L105:
  lea    -0x1(%rcx),%ebx
  test   %eax,%eax
  jne    L163
L115:
  mov    $0xffffffff,%r8d
L39:
  mov    %r8d,%eax
  pop    %rbx
  ret
L238:
  mov    %edi,%ebx
  nopw   0x0(%rax,%rax,1)
L202:
  lea    0x1(%rbx,%r8,1),%edx
  movslq %edx,%rdx
  movzbl (%r9,%rdx,1),%eax
  test   %eax,%eax
  jne    L233
  jmp    L115
  nopl   0x0(%rax,%rax,1)
L29:
  movzbl 0x1(%r9,%rdx,1),%eax
  add    $0x1,%rdx
  test   %eax,%eax
  je     L115
L233:
  mov    %edx,%r8d
  cmp    $0xa,%eax
  jne    L29
L182:
  cmp    $0x20,%eax
  ja     L164
  add    $0x1,%r8d
  movslq %r8d,%rax
  movzbl (%r9,%rax,1),%eax
  test   %eax,%eax
  jne    L182
  jmp    L115
L108:
  xor    %edi,%edi
  nopl   0x0(%rax,%rax,1)
L2:
  test   %sil,%sil
  jne    L238
  test   %eax,%eax
  je     L115
  movslq %r8d,%rdx
  add    %r9,%rdx
L56:
  mov    %edi,%ebx
  cmp    $0x3d,%eax
  je     L39
  cmp    $0xa,%eax
  je     L202
  cmp    $0x20,%eax
  ja     L202
  movzbl 0x1(%rdi,%rdx,1),%eax
  add    $0x1,%rdi
  test   %eax,%eax
  jne    L56
  jmp    L115
```

assistant: ```c
int find_tag_var_start(const char *tagbuffer, const char *varname) {
  int i, j;
  if (!tagbuffer || !varname)
    return -1;
  for (i = 0;;) {
    for (;; i++) {
      unsigned u = ((unsigned)(tagbuffer[i])) & 0xFF;
      if (!u)
        return -1;
      if (u <= 0x20)
        continue;
      break;
    }
    for (j = 0;; j++) {
      unsigned ucmp = ((unsigned)(varname[j])) & 0xFF;
      unsigned u = ((unsigned)(tagbuffer[i + j])) & 0xFF;
      if (!ucmp)
        break;
      if (!u)
        return -1;
      if (ucmp >= 'A' && ucmp <= 'Z') {
        ucmp -= 'A';
        ucmp += 'a';
      }
      if (u >= 'A' && u <= 'Z') {
        u -= 'A';
        u += 'a';
      }
      if (u != ucmp)
        break;
    }
    if (!varname[j]) {
      for (;; j++) {
        unsigned u = ((unsigned)(tagbuffer[i + j])) & 0xFF;
        if (!u)
          return -1;
        if (u == '=')
          return i;
        if (u == 0x0A)
          break;
        if (u <= 0x20)
          continue;
        break;
      }
    }
    i += j + 1;
    for (;; i++) {
      unsigned u = ((unsigned)(tagbuffer[i])) & 0xFF;
      if (!u)
        return -1;
      if (u == 0x0A)
        break;
    }
  }
  return -1;
}
```