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

```asm
<yc_poly_emulator>:
  endbr64
  test   %edx,%edx
  je     L32
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edx,%r10d
  lea    -0x1(%rdx),%eax
  lea    0x1(%rsi,%rax,1),%r13
  mov    %rsi,%r9
  add    %esi,%r10d
  lea    D1(%rip),%r8
L16:
  mov    %r10d,%r11d
  sub    %r9d,%r11d
  mov    %r9,%r12
  movzbl (%r9),%esi
  mov    $0x0,%edx
  mov    %r9d,%ebp
  sub    %r10d,%ebp
  mov    %r11d,%ebx
  and    $0x7,%ebx
  jmp    L91
L234:
  cmp    $0xc0,%al
  je     L186
  cmp    $0xd2,%al
  jne    L205
  lea    0x1(%rdx),%eax
  cmpb   $0xc8,(%rdi,%rax,1)
  je     L249
  add    $0x2,%edx
  mov    %ebx,%ecx
  rol    %cl,%sil
  jmp    L153
L205:
  cmp    $0x90,%al
  jne    L251
L153:
  add    $0x1,%edx
  cmp    $0x2f,%edx
  ja     L182
L91:
  mov    %edx,%eax
  movzbl (%rdi,%rax,1),%eax
  cmp    $0x34,%al
  jg     L63
  cmp    $0xeb,%al
  jl     L234
  add    $0x15,%eax
  cmp    $0x49,%al
  ja     L219
  movzbl %al,%eax
  movslq (%r8,%rax,4),%rax
  add    %r8,%rax
  notrack jmp *%rax
L251:
  mov    $0x1,%eax
  jmp    L227
  add    $0x1,%edx
  mov    %edx,%eax
  movsbl (%rdi,%rax,1),%eax
  add    %eax,%edx
  jmp    L153
  sub    $0x1,%esi
  add    $0x1,%edx
  jmp    L153
  add    %ebp,%esi
  add    $0x1,%edx
  jmp    L153
  add    %r11d,%esi
  add    $0x1,%edx
  jmp    L153
  xor    %r11d,%esi
  add    $0x1,%edx
  jmp    L153
  add    $0x1,%edx
  mov    %edx,%eax
  add    (%rdi,%rax,1),%sil
  jmp    L153
  add    $0x1,%edx
  mov    %edx,%eax
  xor    (%rdi,%rax,1),%sil
  jmp    L153
  add    $0x1,%edx
  mov    %edx,%eax
  sub    (%rdi,%rax,1),%sil
  jmp    L153
L186:
  lea    0x1(%rdx),%eax
  cmpb   $0xc0,(%rdi,%rax,1)
  je     L42
  add    $0x2,%edx
  mov    %edx,%eax
  movzbl (%rdi,%rax,1),%ecx
  and    $0x7,%ecx
  ror    %cl,%sil
  jmp    L153
L42:
  add    $0x2,%edx
  mov    %edx,%eax
  movzbl (%rdi,%rax,1),%ecx
  and    $0x7,%ecx
  rol    %cl,%sil
  jmp    L153
L249:
  add    $0x2,%edx
  mov    %ebx,%ecx
  ror    %cl,%sil
  jmp    L153
L182:
  mov    %sil,(%r12)
  add    $0x1,%r9
  cmp    %r9,%r13
  jne    L16
  mov    $0x0,%eax
  jmp    L227
L32:
  mov    $0x0,%eax
  ret
L63:
  mov    $0x1,%eax
  jmp    L227
L219:
  mov    $0x1,%eax
L227:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

assistant: ```c
__attribute__((always_)) int yc_poly_emulator(char *decryptor_offset, char *code, unsigned int ecx) {
  unsigned char al;
  unsigned char cl = ecx & 0xff;
  unsigned int j, i;
  for (i = 0; i < ecx; i++) {
    al = code[i];
    for (j = 0; j < 0x30; j++) {
      switch (decryptor_offset[j]) {
      case '\xEB':
        j++;
        j = j + decryptor_offset[j];
        break;
      case '\xFE':
        al--;
        j++;
        break;
      case '\x2A':
        al = al - cl;
        j++;
        break;
      case '\x02':
        al = al + cl;
        j++;
        break;
      case '\x32':
        al = al ^ cl;
        j++;
        break;
        ;
      case '\x04':
        j++;
        al = al + decryptor_offset[j];
        break;
        ;
      case '\x34':
        j++;
        al = al ^ decryptor_offset[j];
        break;
      case '\x2C':
        j++;
        al = al - decryptor_offset[j];
        break;
      case '\xC0':
        j++;
        if (decryptor_offset[j] == '\xC0') {
          j++;
          al = (al << (decryptor_offset[j] % (sizeof(al) << 3))) | (al >> ((sizeof(al) << 3) - (decryptor_offset[j] % (sizeof(al) << 3))));
        } else {
          j++;
          al = (al >> (decryptor_offset[j] % (sizeof(al) << 3))) | (al << ((sizeof(al) << 3) - (decryptor_offset[j] % (sizeof(al) << 3))));
        }
        break;
      case '\xD2':
        j++;
        if (decryptor_offset[j] == '\xC8') {
          j++;
          al = (al >> (cl % (sizeof(al) << 3))) | (al << ((sizeof(al) << 3) - (cl % (sizeof(al) << 3))));
        } else {
          j++;
          al = (al << (cl % (sizeof(al) << 3))) | (al >> ((sizeof(al) << 3) - (cl % (sizeof(al) << 3))));
        }
        break;
      case '\x90':
      case '\xf8':
      case '\xf9':
        break;
      default:;
        return 1;
      }
    }
    cl--;
    code[i] = al;
  }
  return 0;
}
```