user: Translate the below assembly code into C programming language:

```asm
<utf_replace_html>:
  endbr64
  push   %r15
  push   %r14
  lea    0x3(%rdi),%r14
  push   %r13
  lea    0x7(%rdi),%r13
  push   %r12
  push   %rbp
  lea    D45(%rip),%rbp
  push   %rbx
  lea    0x2(%rdi),%rbx
  sub    $0x8,%rsp
  movzbl (%rdi),%edx
  test   %dl,%dl
  je     L119
  nopl   0x0(%rax)
L200:
  movzbl -0x1(%rbx),%eax
  lea    -0x2(%rbx),%r12
  lea    -0x1(%rbx),%r15
  cmp    $0xe2,%dl
  je     L19
  cmp    $0xce,%dl
  je     L49
  cmp    $0xcf,%dl
  je     L10
  cmp    $0xc2,%dl
  jne    L347
  cmp    $0xb0,%al
  je     L283
  nopl   0x0(%rax)
L347:
  add    $0x1,%r13
  add    $0x1,%r14
  add    $0x1,%rbx
  test   %al,%al
  je     L119
  mov    %eax,%edx
  jmp    L200
  nopl   0x0(%rax)
L119:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L19:
  cmp    $0x80,%al
  je     L358
  cmp    $0x88,%al
  je     L361
  cmp    $0x89,%al
  jne    L347
  cmpb   $0xa4,(%rbx)
  je     L153
L162:
  add    $0x1,%r13
  add    $0x1,%r14
  add    $0x1,%rbx
  mov    %eax,%edx
  jmp    L200
L49:
  cmp    $0x93,%al
  je     L20
  cmp    $0xb2,%al
  je     L343
  cmp    $0xbb,%al
  je     L204
  cmp    $0xbc,%al
  jne    L347
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x2(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D67(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nop
L10:
  cmp    $0x80,%al
  je     L201
  cmp    $0x81,%al
  je     L282
  cmp    $0x83,%al
  je     L50
  cmp    $0x89,%al
  jne    L347
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %rbx,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D126(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopw   0x0(%rax,%rax,1)
L358:
  movzbl (%rbx),%edx
  cmp    $0x93,%dl
  je     L180
  cmp    $0x94,%dl
  je     L362
  cmp    $0xa6,%dl
  jne    L162
  lea    D110(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  xchg   %ax,%ax
L361:
  cmpb   $0x92,(%rbx)
  jne    L162
  lea    D19(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %r15,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopl   0x0(%rax,%rax,1)
L20:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %rbx,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D12(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopw   0x0(%rax,%rax,1)
L343:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x4(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D123(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopl   0x0(%rax,%rax,1)
L204:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x6(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D33(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopl   0x0(%rax,%rax,1)
L201:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x2(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D16(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopl   0x0(%rax,%rax,1)
L282:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x3(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nop
L50:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %rbx,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D92(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopw   0x0(%rax,%rax,1)
L283:
  mov    $0x2,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  lea    0x3(%rbx),%rdi
  mov    %rbx,%rsi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D115(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopl   0x0(%rax,%rax,1)
L180:
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D29(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopw   0x0(%rax,%rax,1)
L153:
  lea    D31(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %rbx,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
  nopw   0x0(%rax,%rax,1)
L362:
  mov    $0x3,%esi
  mov    %r12,%rdi
  call   <mvsize@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  lea    D59(%rip),%rsi
  mov    %r12,%rdi
  call   <write_text@plt>
  movzbl -0x1(%rbx),%eax
  jmp    L347
```

tool_calls: name: extract_symbolic_data
arguments: tag: D45
data_type: string
name: extract_symbolic_data
arguments: tag: D67
data_type: string
name: extract_symbolic_data
arguments: tag: D126
data_type: string
name: extract_symbolic_data
arguments: tag: D110
data_type: string
name: extract_symbolic_data
arguments: tag: D19
data_type: string
name: extract_symbolic_data
arguments: tag: D12
data_type: string
name: extract_symbolic_data
arguments: tag: D123
data_type: string
name: extract_symbolic_data
arguments: tag: D33
data_type: string
name: extract_symbolic_data
arguments: tag: D16
data_type: string
name: extract_symbolic_data
arguments: tag: D92
data_type: string
name: extract_symbolic_data
arguments: tag: D115
data_type: string
name: extract_symbolic_data
arguments: tag: D29
data_type: string
name: extract_symbolic_data
arguments: tag: D31
data_type: string
name: extract_symbolic_data
arguments: tag: D59
data_type: string

tool: D45: &rho;

tool: D67: &mu;

tool: D126: &omega;

tool: D110: ...

tool: D19: -

tool: D12: &Gamma;

tool: D123: &beta;

tool: D33: &lambda;

tool: D16: &pi;

tool: D92: &sigma;

tool: D115: &deg;

tool: D29: &#8211;

tool: D31: <=

tool: D59: &#8212;

assistant: ```c
void utf_replace_html(unsigned char *s) {
  while (*s) {
    if (s[0] == 0xe2 && s[1] == 0x80) {
      if (s[2] == 0x93) {
        memmove(s + 7, s + 3, mvsize(s, 3));
        write_text(s, "&#8211;");
      } else if (s[2] == 0x94) {
        memmove(s + 7, s + 3, mvsize(s, 3));
        write_text(s, "&#8212;");
      } else if (s[2] == 0xa6) {
        write_text(s, "...");
      }
    } else if (s[0] == 0xe2 && s[1] == 0x88 && s[2] == 0x92) {
      write_text(s, "-");
      memmove(s + 1, s + 3, mvsize(s, 3));
    } else if (s[0] == 0xe2 && s[1] == 0x89 && s[2] == 0xa4) {
      write_text(s, "<=");
      memmove(s + 2, s + 3, mvsize(s, 3));
    } else if (s[0] == 0xce && s[1] == 0x93) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&Gamma;");
    } else if (s[0] == 0xce && s[1] == 0xb2) {
      memmove(s + 6, s + 2, mvsize(s, 2));
      write_text(s, "&beta;");
    } else if (s[0] == 0xce && s[1] == 0xbb) {
      memmove(s + 8, s + 2, mvsize(s, 2));
      write_text(s, "&lambda;");
    } else if (s[0] == 0xce && s[1] == 0xbc) {
      memmove(s + 4, s + 2, mvsize(s, 2));
      write_text(s, "&mu;");
    } else if (s[0] == 0xcf && s[1] == 0x80) {
      memmove(s + 4, s + 2, mvsize(s, 2));
      write_text(s, "&pi;");
    } else if (s[0] == 0xcf && s[1] == 0x81) {
      memmove(s + 5, s + 2, mvsize(s, 2));
      write_text(s, "&rho;");
    } else if (s[0] == 0xcf && s[1] == 0x83) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&sigma;");
    } else if (s[0] == 0xcf && s[1] == 0x89) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&omega;");
    } else if (s[0] == 0xc2 && s[1] == 0xb0) {
      memmove(s + 5, s + 2, mvsize(s, 2));
      write_text(s, "&deg;");
    }
    s++;
  }
}
```