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

```asm
<vp8cx_last_vertical_band_3_5_scale_c>:
  endbr64
  test   %edx,%edx
  je     L36
  mov    %rdi,%rcx
  lea    (%rsi,%rsi,1),%edi
  lea    0x0(,%rsi,4),%r9d
  push   %r13
  lea    (%rdi,%rsi,1),%r10d
  mov    %esi,%esi
  lea    -0x1(%rdx),%r8d
  push   %r12
  lea    -0x1(%rsi),%rax
  push   %rbp
  lea    -0x1(%r9),%r11
  cmp    $0xe,%rax
  push   %rbx
  seta   %al
  cmp    $0xe,%r8d
  seta   %bl
  and    %ebx,%eax
  lea    -0x1(%rdi),%rbx
  cmp    $0xe,%rbx
  seta   %bl
  and    %ebx,%eax
  mov    %r10,%rbx
  sub    %rsi,%rbx
  sub    $0x1,%rbx
  cmp    $0xe,%rbx
  seta   %bl
  and    %ebx,%eax
  lea    -0x1(%r10),%rbx
  cmp    $0xe,%rbx
  seta   %bpl
  and    %ebp,%eax
  mov    %r9,%rbp
  sub    %rsi,%rbp
  sub    $0x1,%rbp
  cmp    $0xe,%rbp
  seta   %bpl
  and    %ebp,%eax
  cmp    $0xe,%r11
  seta   %bpl
  sub    %rdi,%rbx
  and    %ebp,%eax
  cmp    $0xe,%rbx
  lea    0x10(%rdi),%rbp
  seta   %bl
  and    %ebx,%eax
  mov    %r11,%rbx
  sub    %rdi,%rbx
  cmp    $0xe,%rbx
  seta   %bl
  and    %ebx,%eax
  lea    0x10(%rsi),%rbx
  cmp    %rdi,%rbx
  setle  %bl
  cmp    %rsi,%rbp
  setle  %bpl
  or     %ebp,%ebx
  test   %bl,%al
  je     L20
  sub    %r10,%r11
  cmp    $0xe,%r11
  jbe    L20
  movdqa D7(%rip),%xmm7
  mov    %edx,%ebp
  pxor   %xmm3,%xmm3
  xor    %eax,%eax
  movdqa D57(%rip),%xmm9
  shr    $0x4,%ebp
  lea    (%rcx,%rsi,1),%rbx
  lea    (%rcx,%rdi,1),%r11
  movdqa D55(%rip),%xmm6
  lea    (%rcx,%r10,1),%r13
  lea    (%rcx,%r9,1),%r12
  movdqa D49(%rip),%xmm8
  movdqa D35(%rip),%xmm5
  shl    $0x4,%rbp
  punpcklbw %xmm3,%xmm9
  movdqa D12(%rip),%xmm4
  punpcklbw %xmm3,%xmm8
  punpcklbw %xmm3,%xmm7
  punpcklbw %xmm3,%xmm6
  nopl   0x0(%rax,%rax,1)
L4:
  movdqu (%rcx,%rax,1),%xmm2
  movdqu (%rbx,%rax,1),%xmm0
  movdqa %xmm8,%xmm11
  movdqa %xmm7,%xmm12
  movdqa %xmm2,%xmm10
  movdqa %xmm0,%xmm1
  punpckhbw %xmm3,%xmm0
  punpcklbw %xmm3,%xmm1
  punpcklbw %xmm3,%xmm10
  punpckhbw %xmm3,%xmm2
  pmullw %xmm1,%xmm11
  pmullw %xmm9,%xmm10
  pmullw %xmm9,%xmm2
  pmullw %xmm0,%xmm12
  paddw  %xmm11,%xmm10
  movdqa %xmm0,%xmm11
  pmullw %xmm8,%xmm11
  pmullw %xmm6,%xmm0
  paddw  %xmm5,%xmm10
  psrlw  $0x8,%xmm10
  pand   %xmm4,%xmm10
  paddw  %xmm11,%xmm2
  movdqa %xmm7,%xmm11
  paddw  %xmm5,%xmm2
  pmullw %xmm1,%xmm11
  psrlw  $0x8,%xmm2
  pmullw %xmm6,%xmm1
  pand   %xmm4,%xmm2
  packuswb %xmm2,%xmm10
  movups %xmm10,(%rbx,%rax,1)
  movdqu (%r11,%rax,1),%xmm2
  movdqa %xmm6,%xmm10
  movdqa %xmm2,%xmm13
  punpcklbw %xmm3,%xmm13
  pmullw %xmm13,%xmm10
  pmullw %xmm7,%xmm13
  paddw  %xmm10,%xmm11
  movdqa %xmm2,%xmm10
  paddw  %xmm13,%xmm1
  punpckhbw %xmm3,%xmm10
  paddw  %xmm5,%xmm11
  paddw  %xmm5,%xmm1
  psrlw  $0x8,%xmm11
  psrlw  $0x8,%xmm1
  movdqa %xmm10,%xmm14
  pmullw %xmm6,%xmm14
  pmullw %xmm7,%xmm10
  pand   %xmm4,%xmm11
  pand   %xmm4,%xmm1
  paddw  %xmm14,%xmm12
  paddw  %xmm10,%xmm0
  paddw  %xmm5,%xmm12
  paddw  %xmm5,%xmm0
  psrlw  $0x8,%xmm12
  psrlw  $0x8,%xmm0
  pand   %xmm4,%xmm12
  pand   %xmm4,%xmm0
  packuswb %xmm12,%xmm11
  packuswb %xmm0,%xmm1
  movups %xmm11,(%r11,%rax,1)
  movups %xmm1,0x0(%r13,%rax,1)
  movups %xmm2,(%r12,%rax,1)
  add    $0x10,%rax
  cmp    %rbp,%rax
  jne    L4
  mov    %edx,%r11d
  and    $0xfffffff0,%r11d
  mov    %r11d,%eax
  add    %rcx,%rax
  cmp    %r11d,%edx
  je     L59
  sub    %r11d,%r8d
  lea    0x1(%rax,%r8,1),%r11
  nopl   (%rax)
L21:
  movzbl (%rax,%rsi,1),%edx
  movzbl (%rax),%ecx
  add    $0x1,%rax
  imul   $0x9a,%edx,%r8d
  imul   $0x66,%ecx,%ecx
  imul   $0xcd,%edx,%ebp
  imul   $0x33,%edx,%edx
  lea    0x80(%rcx,%r8,1),%ecx
  mov    %ch,-0x1(%rax,%rsi,1)
  movzbl -0x1(%rax,%rdi,1),%ecx
  imul   $0x33,%ecx,%ebx
  mov    %ecx,%r8d
  imul   $0xcd,%ecx,%ecx
  lea    0x80(%rbp,%rbx,1),%ebx
  lea    0x80(%rdx,%rcx,1),%edx
  mov    %bh,-0x1(%rax,%rdi,1)
  movzbl %dh,%edx
  mov    %dl,-0x1(%rax,%r10,1)
  mov    %r8b,-0x1(%rax,%r9,1)
  cmp    %rax,%r11
  ja     L21
L59:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  xchg   %ax,%ax
L20:
  mov    %edx,%edx
  add    %rcx,%rdx
  nopl   (%rax)
L66:
  movzbl (%rcx,%rsi,1),%eax
  movzbl (%rcx),%r8d
  add    $0x1,%rcx
  imul   $0x9a,%eax,%r11d
  imul   $0x66,%r8d,%r8d
  imul   $0xcd,%eax,%ebp
  imul   $0x33,%eax,%eax
  lea    0x80(%r8,%r11,1),%ebx
  mov    %bh,-0x1(%rcx,%rsi,1)
  movzbl -0x1(%rcx,%rdi,1),%r8d
  imul   $0x33,%r8d,%ebx
  mov    %r8d,%r11d
  imul   $0xcd,%r8d,%r8d
  lea    0x80(%rbp,%rbx,1),%ebx
  lea    0x80(%rax,%r8,1),%eax
  mov    %bh,-0x1(%rcx,%rdi,1)
  movzbl %ah,%eax
  mov    %al,-0x1(%rcx,%r10,1)
  mov    %r11b,-0x1(%rcx,%r9,1)
  cmp    %rcx,%rdx
  jne    L66
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L36:
  ret
```

tool_calls: name: read_data
arguments: data_tag: D7
data_type: byte[16]
name: read_data
arguments: data_tag: D57
data_type: byte[16]
name: read_data
arguments: data_tag: D55
data_type: byte[16]
name: read_data
arguments: data_tag: D49
data_type: byte[16]
name: read_data
arguments: data_tag: D35
data_type: byte[16]
name: read_data
arguments: data_tag: D12
data_type: byte[16]

tool: {"D7": [0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd]}

tool: {"D57": [0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66]}

tool: {"D55": [0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33]}

tool: {"D49": [0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a]}

tool: {"D35": [0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00]}

tool: {"D12": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
void vp8cx_last_vertical_band_3_5_scale_c(unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) {
  unsigned int i;
  unsigned int a, b, c;
  unsigned char *des = dest;
  for (i = 0; i < dest_width; ++i) {
    a = des[0];
    b = des[dest_pitch];
    des[dest_pitch] = (unsigned char)((a * 102 + 154 * b + 128) >> 8);
    c = des[dest_pitch * 2];
    des[dest_pitch * 2] = (unsigned char)((b * 205 + c * 51 + 128) >> 8);
    des[dest_pitch * 3] = (unsigned char)((b * 51 + c * 205 + 128) >> 8);
    des[dest_pitch * 4] = (unsigned char)(c);
    des++;
  }
}
```