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

```asm
<BinSearchDelete>:
  endbr64
  mov    %esi,%ecx
  mov    %edx,%r9d
  test   %sil,%sil
  je     L573
  movzbl %sil,%esi
  lea    (%rdi,%rsi,2),%rax
  jmp    L165
  nopl   0x0(%rax)
L507:
  sub    $0x2,%rax
  test   %cl,%cl
  je     L573
L165:
  movzbl %cl,%r8d
  sub    $0x1,%ecx
  cmpw   $0x0,-0x2(%rax)
  je     L507
L160:
  movzwl (%rdi),%esi
  xor    %eax,%eax
  cmp    %dx,%si
  ja     L440
  movzbl %cl,%r10d
  lea    (%rdi,%r10,2),%r11
  movzwl (%r11),%r10d
  cmp    %dx,%r10w
  jb     L440
  cmp    %dx,%si
  je     L121
  cmp    %dx,%r10w
  je     L622
  xor    %esi,%esi
  test   %cl,%cl
  jne    L557
  jmp    L144
  nopl   0x0(%rax)
L198:
  lea    -0x1(%rax),%ecx
  movzbl %cl,%eax
  lea    (%rdi,%rax,2),%rax
  cmp    %r9w,(%rax)
  je     L355
L280:
  cmp    %sil,%cl
  jbe    L144
L557:
  movzbl %sil,%eax
  movzbl %cl,%edx
  sub    %eax,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  add    %esi,%eax
  movzbl %al,%edx
  lea    (%rdi,%rdx,2),%rdx
  cmp    %r9w,(%rdx)
  je     L138
  ja     L198
  lea    0x1(%rax),%esi
  movzbl %sil,%eax
  lea    (%rdi,%rax,2),%rdx
  cmp    %r9w,(%rdx)
  jne    L280
  movzbl %r8b,%eax
  movzbl %sil,%ecx
  sub    $0x1,%eax
  cmp    %ecx,%eax
  jle    L654
  mov    %esi,%ecx
  cs nopw 0x0(%rax,%rax,1)
L657:
  movzbl %cl,%edx
  add    $0x1,%ecx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%r8d
  mov    %r8w,-0x2(%rdi,%rdx,2)
  movzbl %cl,%r8d
  cmp    %eax,%r8d
  jl     L657
  movzbl %dl,%edx
  lea    (%rdi,%rdx,2),%rdx
L654:
  xor    %eax,%eax
  mov    %ax,(%rdx)
  mov    %esi,%eax
  ret
  nopl   (%rax)
L440:
  ret
  nopl   0x0(%rax)
L573:
  xor    %r8d,%r8d
  mov    $0xffffffff,%ecx
  jmp    L160
L144:
  mov    $0xffffffff,%eax
  ret
L121:
  lea    -0x1(%r8),%esi
  test   %esi,%esi
  jle    L495
  lea    -0x2(%r8),%eax
  cmp    $0xfe,%eax
  ja     L0
  cmp    $0x6,%eax
  jbe    L0
  cmp    $0xe,%eax
  jbe    L605
  movdqu 0x2(%rdi),%xmm3
  movdqu 0x12(%rdi),%xmm4
  mov    %esi,%eax
  shr    $0x4,%eax
  movups %xmm3,(%rdi)
  movups %xmm4,0x10(%rdi)
  cmp    $0x1,%eax
  je     L598
  movdqu 0x22(%rdi),%xmm5
  movdqu 0x32(%rdi),%xmm6
  movups %xmm5,0x20(%rdi)
  movups %xmm6,0x30(%rdi)
  cmp    $0x2,%eax
  je     L392
  movdqu 0x42(%rdi),%xmm7
  movups %xmm7,0x40(%rdi)
  movdqu 0x52(%rdi),%xmm7
  movups %xmm7,0x50(%rdi)
  cmp    $0x3,%eax
  je     L415
  movdqu 0x62(%rdi),%xmm5
  movdqu 0x72(%rdi),%xmm6
  movups %xmm5,0x60(%rdi)
  movups %xmm6,0x70(%rdi)
  cmp    $0x4,%eax
  je     L543
  movdqu 0x82(%rdi),%xmm3
  movdqu 0x92(%rdi),%xmm4
  movups %xmm3,0x80(%rdi)
  movups %xmm4,0x90(%rdi)
  cmp    $0x5,%eax
  je     L529
  movdqu 0xa2(%rdi),%xmm5
  movdqu 0xb2(%rdi),%xmm6
  movups %xmm5,0xa0(%rdi)
  movups %xmm6,0xb0(%rdi)
  cmp    $0x6,%eax
  je     L70
  movdqu 0xc2(%rdi),%xmm7
  movdqu 0xd2(%rdi),%xmm3
  movups %xmm7,0xc0(%rdi)
  movups %xmm3,0xd0(%rdi)
  cmp    $0x7,%eax
  je     L206
  movdqu 0xe2(%rdi),%xmm4
  movups %xmm4,0xe0(%rdi)
  movdqu 0xf2(%rdi),%xmm4
  movups %xmm4,0xf0(%rdi)
  cmp    $0x8,%eax
  je     L268
  movdqu 0x102(%rdi),%xmm5
  movdqu 0x112(%rdi),%xmm6
  movups %xmm5,0x100(%rdi)
  movups %xmm6,0x110(%rdi)
  cmp    $0x9,%eax
  je     L164
  movdqu 0x122(%rdi),%xmm7
  movdqu 0x132(%rdi),%xmm1
  movups %xmm7,0x120(%rdi)
  movups %xmm1,0x130(%rdi)
  cmp    $0xa,%eax
  je     L247
  movdqu 0x142(%rdi),%xmm2
  movdqu 0x152(%rdi),%xmm3
  movups %xmm2,0x140(%rdi)
  movups %xmm3,0x150(%rdi)
  cmp    $0xb,%eax
  je     L611
  movdqu 0x162(%rdi),%xmm4
  movdqu 0x172(%rdi),%xmm5
  movups %xmm4,0x160(%rdi)
  movups %xmm5,0x170(%rdi)
  cmp    $0xc,%eax
  je     L113
  movdqu 0x182(%rdi),%xmm6
  movdqu 0x192(%rdi),%xmm7
  movups %xmm6,0x180(%rdi)
  movups %xmm7,0x190(%rdi)
  cmp    $0xd,%eax
  je     L584
  movdqu 0x1a2(%rdi),%xmm1
  movdqu 0x1b2(%rdi),%xmm2
  movups %xmm1,0x1a0(%rdi)
  movups %xmm2,0x1b0(%rdi)
  cmp    $0xf,%eax
  jne    L578
  movdqu 0x1c2(%rdi),%xmm3
  movdqu 0x1d2(%rdi),%xmm4
  movdqa D37(%rip),%xmm0
  movups %xmm3,0x1c0(%rdi)
  movups %xmm4,0x1d0(%rdi)
L224:
  mov    %esi,%edx
  movaps %xmm0,-0x18(%rsp)
  movzbl -0x9(%rsp),%eax
  and    $0xfffffff0,%edx
  mov    %edx,%ecx
  cmp    %esi,%edx
  je     L97
  sub    %edx,%r8d
  lea    -0x1(%r8),%r9d
  sub    $0x2,%r8d
  cmp    $0x6,%r8d
  jbe    L658
L612:
  movq   D58(%rip),%xmm0
  lea    0x1(%rdx),%eax
  add    %rax,%rax
  lea    (%rdi,%rax,1),%rdx
  lea    -0x2(%rdi,%rax,1),%rax
  mov    (%rdx),%r8
  mov    0x8(%rdx),%rdx
  mov    %r8,(%rax)
  mov    %rdx,0x8(%rax)
  mov    %ecx,%eax
  movzbl %cl,%edx
  shl    $0x8,%eax
  or     %edx,%eax
  mov    %r9d,%edx
  movd   %eax,%xmm2
  and    $0xfffffff8,%edx
  pshuflw $0x0,%xmm2,%xmm1
  add    %edx,%ecx
  paddb  %xmm1,%xmm0
  movq   %xmm0,%rax
  shr    $0x38,%rax
  cmp    %r9d,%edx
  je     L97
L658:
  movzbl %cl,%edx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%eax
  mov    %ax,-0x2(%rdi,%rdx,2)
  lea    0x1(%rcx),%eax
  movzbl %al,%r8d
  cmp    %r8d,%esi
  jle    L97
  movzbl %dl,%edx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%eax
  mov    %ax,-0x2(%rdi,%rdx,2)
  lea    0x2(%rcx),%eax
  movzbl %al,%r8d
  cmp    %r8d,%esi
  jle    L97
  movzbl %dl,%edx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%eax
  mov    %ax,-0x2(%rdi,%rdx,2)
  lea    0x3(%rcx),%eax
  movzbl %al,%r8d
  cmp    %r8d,%esi
  jle    L97
  movzbl %dl,%edx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%eax
  mov    %ax,-0x2(%rdi,%rdx,2)
  lea    0x4(%rcx),%eax
  movzbl %al,%r8d
  cmp    %r8d,%esi
  jle    L97
  movzbl %dl,%edx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%eax
  mov    %ax,-0x2(%rdi,%rdx,2)
  lea    0x5(%rcx),%eax
  movzbl %al,%r8d
  cmp    %r8d,%esi
  jle    L97
  movzbl %dl,%edx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%eax
  mov    %ax,-0x2(%rdi,%rdx,2)
  lea    0x6(%rcx),%eax
  movzbl %al,%r8d
  cmp    %r8d,%esi
  jle    L97
  movzbl %dl,%eax
  add    $0x1,%rax
  movzwl (%rdi,%rax,2),%edx
  mov    %dx,-0x2(%rdi,%rax,2)
  lea    0x7(%rcx),%eax
L97:
  movzbl %al,%eax
  lea    (%rdi,%rax,2),%rdi
L495:
  xor    %r8d,%r8d
  xor    %eax,%eax
  mov    %r8w,(%rdi)
  ret
L138:
  sub    $0x1,%r8d
  movzbl %al,%ecx
  cmp    %ecx,%r8d
  jle    L301
  mov    %eax,%ecx
  cs nopw 0x0(%rax,%rax,1)
L345:
  movzbl %cl,%edx
  add    $0x1,%ecx
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%esi
  mov    %si,-0x2(%rdi,%rdx,2)
  movzbl %cl,%esi
  cmp    %r8d,%esi
  jl     L345
  movzbl %dl,%edx
  lea    (%rdi,%rdx,2),%rdx
L301:
  xor    %ecx,%ecx
  mov    %cx,(%rdx)
  ret
L622:
  xor    %esi,%esi
  mov    %ecx,%eax
  mov    %si,(%r11)
  ret
L598:
  movdqa D58(%rip),%xmm0
  jmp    L224
L355:
  sub    $0x1,%r8d
  movzbl %cl,%edx
  cmp    %r8d,%edx
  jge    L123
  mov    %ecx,%edx
  nopl   0x0(%rax)
L528:
  movzbl %dl,%eax
  add    $0x1,%edx
  add    $0x1,%rax
  movzwl (%rdi,%rax,2),%esi
  mov    %si,-0x2(%rdi,%rax,2)
  movzbl %dl,%esi
  cmp    %r8d,%esi
  jl     L528
  movzbl %al,%eax
  lea    (%rdi,%rax,2),%rax
L123:
  xor    %edx,%edx
  mov    %dx,(%rax)
  mov    %ecx,%eax
  ret
L0:
  xor    %eax,%eax
  nopl   0x0(%rax)
L354:
  movzbl %al,%edx
  add    $0x1,%eax
  add    $0x1,%rdx
  movzwl (%rdi,%rdx,2),%ecx
  mov    %cx,-0x2(%rdi,%rdx,2)
  movzbl %al,%edx
  cmp    %edx,%esi
  jg     L354
  jmp    L97
L392:
  movdqa D10(%rip),%xmm0
  jmp    L224
L605:
  mov    %esi,%r9d
  xor    %ecx,%ecx
  xor    %edx,%edx
  jmp    L612
L415:
  movdqa D116(%rip),%xmm0
  jmp    L224
L543:
  movdqa D133(%rip),%xmm0
  jmp    L224
L529:
  movdqa D74(%rip),%xmm0
  jmp    L224
L70:
  movdqa D107(%rip),%xmm0
  jmp    L224
L268:
  movdqa D115(%rip),%xmm0
  jmp    L224
L206:
  movdqa D135(%rip),%xmm0
  jmp    L224
L611:
  movdqa D68(%rip),%xmm0
  jmp    L224
L247:
  movdqa D131(%rip),%xmm0
  jmp    L224
L164:
  movdqa D63(%rip),%xmm0
  jmp    L224
L113:
  movdqa D108(%rip),%xmm0
  jmp    L224
L578:
  movdqa D71(%rip),%xmm0
  jmp    L224
L584:
  movdqa D146(%rip),%xmm0
  jmp    L224
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D37
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D58
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D10
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D116
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D133
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D74
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D107
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D115
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D135
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D68
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D131
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D63
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D108
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D71
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D146
type_guessed: byte[16]

tool: {"D37": [0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf0]}

tool: {"D58": [0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10]}

tool: {"D10": [0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20]}

tool: {"D116": [0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30]}

tool: {"D133": [0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40]}

tool: {"D74": [0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50]}

tool: {"D107": [0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60]}

tool: {"D115": [0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80]}

tool: {"D135": [0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70]}

tool: {"D68": [0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0]}

tool: {"D131": [0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,0xa0]}

tool: {"D63": [0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90]}

tool: {"D108": [0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,0xc0]}

tool: {"D71": [0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,0xe0]}

tool: {"D146": [0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0]}

assistant: ```c
char BinSearchDelete(unsigned short *src, unsigned char len, unsigned short key) {
  unsigned char i, low, high, mid;
  while ((len >= 1) && (src[len - 1] == 0))
    len--;
  low = 0;
  high = len - 1;
  if ((key < src[low]) || (key > src[high]))
    return 0;
  if (key == src[low]) {
    for (i = low; i < len - 1; i++) {
      src[i] = src[i + 1];
    }
    src[i] = 0;
    return low;
  }
  if (key == src[high]) {
    src[high] = 0;
    return high;
  }
  while (low < high) {
    mid = low + ((high - low) / 2);
    if (key == src[mid]) {
      for (i = mid; i < len - 1; i++) {
        src[i] = src[i + 1];
      }
      src[i] = 0;
      return mid;
    }
    if (key < src[mid]) {
      high = mid - 1;
      if (key == src[high]) {
        for (i = high; i < len - 1; i++) {
          src[i] = src[i + 1];
        }
        src[i] = 0;
        return high;
      }
    } else {
      low = mid + 1;
      if (key == src[low]) {
        for (i = low; i < len - 1; i++) {
          src[i] = src[i + 1];
        }
        src[i] = 0;
        return low;
      }
    }
  }
  return -1;
}
```