user: 这段汇编代码用C语言表示是什么样的：

```asm
<c_blit_write>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  movzbl 0xc8(%rsp),%r15d
  mov    0x98(%rsp),%r10d
  mov    %ecx,0x10(%rsp)
  mov    0xa8(%rsp),%edi
  mov    0xb8(%rsp),%esi
  mov    %r8w,0x14(%rsp)
  mov    %r15b,0x2c(%rsp)
  mov    0xa0(%rsp),%r11d
  lea    (%r10,%r8,1),%r15d
  mov    0xb0(%rsp),%eax
  mov    0xd8(%rsp),%ebp
  mov    %r15w,0xc(%rsp)
  movzbl %sil,%r8d
  mov    0xe8(%rsp),%r12d
  mov    0xf0(%rsp),%ebx
  movswl %di,%r15d
  mov    %di,0xe(%rsp)
  mov    0xc0(%rsp),%ecx
  mov    %ax,0x28(%rsp)
  imul   %r8d,%r15d
  lea    (%r11,%r9,1),%r14d
  mov    %bp,0x20(%rsp)
  mov    0xe0(%rsp),%edx
  mov    %r12w,0x18(%rsp)
  mov    %bx,0x24(%rsp)
  test   %cl,%cl
  jne    L3315
  cmp    %bp,%r10w
  jl     L3315
  lea    (%rax,%r11,1),%ecx
  cmp    %bx,%cx
  setle  %cl
  cmp    %dx,%r11w
  setge  %r11b
  test   %r11b,%cl
  je     L1249
  add    %r10d,%edi
  cmp    %r12w,%di
  jle    L802
L1249:
  cmp    $0x3,%sil
  je     L1195
  cmp    $0x4,%sil
  je     L501
  cmp    $0x2,%sil
  je     L117
L2569:
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L3315:
  cmp    $0xa,%cl
  ja     L2569
  lea    D4(%rip),%rdi
  movzbl %cl,%ecx
  movslq (%rdi,%rcx,4),%rcx
  add    %rdi,%rcx
  notrack jmp *%rcx
  nopl   0x0(%rax)
L802:
  mov    0x10(%rsp),%r12d
  movswl 0xc(%rsp),%edx
  movswl %r14w,%ecx
  xor    %ebp,%ebp
  imul   %r12d,%ecx
  imul   %r8d,%edx
  add    %edx,%ecx
  mov    %ecx,%ecx
  add    %r13,%rcx
  test   %ax,%ax
  jle    L2569
  mov    0x90(%rsp),%rbx
  mov    %eax,%r13d
  nopw   0x0(%rax,%rax,1)
L1940:
  mov    %rbx,%rsi
  mov    %rcx,%rdi
  mov    %r15,%rdx
  add    $0x1,%ebp
  call   <memcpy@plt>
  add    %r15,%rbx
  mov    %rax,%rcx
  add    %r12,%rcx
  cmp    %r13w,%bp
  jne    L1940
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
  cmp    $0x3,%sil
  je     L3461
  cmp    $0x4,%sil
  je     L487
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L851
  nopl   (%rax)
L3246:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L851:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L3246
  cmp    %r12d,%ecx
  jg     L3246
  cmpw   $0x0,0xe(%rsp)
  jle    L3246
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
L1393:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L3390
  cmp    %r11d,%ebx
  jg     L3390
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,2),%ebx
  mov    %esi,%ebp
  movzwl (%rax,%rbp,1),%ebp
  and    %bp,0x0(%r13,%rbx,1)
L3390:
  add    $0x1,%edx
  add    $0x2,%esi
  cmp    %dx,%r9w
  jne    L1393
  movzwl 0x14(%rsp),%eax
  jmp    L3246
  nopw   0x0(%rax,%rax,1)
  cmp    $0x3,%sil
  je     L2040
  cmp    $0x4,%sil
  je     L2122
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ecx
  movswl 0x14(%rsp),%edx
  xor    %r8d,%r8d
  lea    (%r12,%r9,1),%ebp
  movzwl 0xd0(%rsp),%edi
  movswl 0x20(%rsp),%r9d
  lea    (%rcx,%rdx,1),%r12d
  mov    %edi,0x14(%rsp)
  add    %edx,%r9d
  jmp    L1371
  nopw   0x0(%rax,%rax,1)
L1024:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r14w,%ax
  je     L2569
L1371:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L1024
  cmp    %ebp,%edx
  jg     L1024
  movzwl 0xe(%rsp),%ebx
  test   %bx,%bx
  jle    L1024
  imul   0x10(%rsp),%edx
  mov    %r8d,%esi
  mov    %edx,0x20(%rsp)
  movzwl 0xc(%rsp),%edx
  add    %edx,%ebx
  mov    %ebx,%edi
  nopl   (%rax)
L1079:
  movzwl %dx,%ecx
  cmp    %r9d,%ecx
  jl     L1330
  cmp    %r12d,%ecx
  jg     L1330
  mov    0x90(%rsp),%rbx
  mov    %esi,%r11d
  movzwl (%rbx,%r11,1),%ebx
  mov    %ebx,%r11d
  cmp    %ebx,0x14(%rsp)
  je     L1330
  mov    0x20(%rsp),%ebx
  lea    (%rbx,%rcx,2),%ecx
  mov    %r11w,0x0(%r13,%rcx,1)
  nopl   0x0(%rax,%rax,1)
L1330:
  add    $0x1,%edx
  add    $0x2,%esi
  cmp    %dx,%di
  jne    L1079
  jmp    L1024
  nopl   0x0(%rax,%rax,1)
  cmp    $0x3,%sil
  je     L651
  cmp    $0x4,%sil
  je     L1265
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L1603
  nopl   (%rax)
L1177:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L1603:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L1177
  cmp    %r12d,%ecx
  jg     L1177
  cmpw   $0x0,0xe(%rsp)
  jle    L1177
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
L1857:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L2466
  cmp    %r11d,%ebx
  jg     L2466
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,2),%ebx
  mov    %esi,%ebp
  movzwl (%rax,%rbp,1),%ebp
  xor    %bp,0x0(%r13,%rbx,1)
L2466:
  add    $0x1,%edx
  add    $0x2,%esi
  cmp    %dx,%r9w
  jne    L1857
  movzwl 0x14(%rsp),%eax
  jmp    L1177
  nopw   0x0(%rax,%rax,1)
  cmp    $0x3,%sil
  je     L2079
  cmp    $0x4,%sil
  je     L1382
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  xor    %r10d,%r10d
  lea    (%r14,%rax,1),%r11d
  movswl 0x20(%rsp),%esi
  lea    (%rdx,%r9,1),%ecx
  movswl 0x18(%rsp),%edx
  lea    (%r12,%r9,1),%eax
  movzwl 0xe(%rsp),%ebp
  add    0xc(%rsp),%bp
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  add    %eax,%esi
  lea    (%rdx,%rax,1),%r12d
  jmp    L231
  nopl   0x0(%rax,%rax,1)
L3286:
  add    $0x1,%r14d
  add    %r15d,%r10d
  cmp    %r11w,%r14w
  je     L2569
L231:
  movzwl %r14w,%r8d
  cmp    %ecx,%r8d
  jl     L3286
  cmp    0x24(%rsp),%r8d
  jg     L3286
  cmpw   $0x0,0xe(%rsp)
  jle    L3286
  imul   0x10(%rsp),%r8d
  mov    %r10d,0x14(%rsp)
  mov    %r10d,%r9d
  mov    %ecx,0x20(%rsp)
  movzwl 0xc(%rsp),%edi
L1976:
  movzwl %di,%eax
  cmp    %esi,%eax
  jl     L1099
  cmp    %r12d,%eax
  jg     L1099
  lea    (%r8,%rax,2),%ebx
  mov    %r9d,%edx
  mov    0x90(%rsp),%rcx
  add    %r13,%rbx
  mov    %rdx,%r10
  xor    %edx,%edx
  movzwl (%rbx),%eax
  divw   (%rcx,%r10,1)
  mov    %ax,(%rbx)
L1099:
  add    $0x1,%edi
  add    $0x2,%r9d
  cmp    %bp,%di
  jne    L1976
  mov    0x14(%rsp),%r10d
  mov    0x20(%rsp),%ecx
  jmp    L3286
  nopl   0x0(%rax,%rax,1)
  cmp    $0x3,%sil
  je     L555
  cmp    $0x4,%sil
  je     L3080
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  xor    %edi,%edi
  lea    (%r14,%rax,1),%ebp
  lea    (%rdx,%r9,1),%r8d
  movswl 0x18(%rsp),%edx
  lea    (%r12,%r9,1),%eax
  movswl 0x20(%rsp),%r9d
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  add    %eax,%r9d
  lea    (%rdx,%rax,1),%r12d
  movzwl 0xd0(%rsp),%eax
  mov    %eax,0x14(%rsp)
  jmp    L2998
  nopl   0x0(%rax,%rax,1)
L2724:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%bp
  je     L2569
L2998:
  movzwl %r14w,%ecx
  cmp    %r8d,%ecx
  jl     L2724
  cmp    0x24(%rsp),%ecx
  jg     L2724
  movzwl 0xe(%rsp),%eax
  test   %ax,%ax
  jle    L2724
  imul   0x10(%rsp),%ecx
  mov    %edi,%ebx
  mov    %eax,%r10d
  movzwl 0xc(%rsp),%eax
  add    %eax,%r10d
  sub    %ecx,%ebx
  mov    %ecx,%esi
  mov    %ebx,0x20(%rsp)
  nopl   0x0(%rax)
L885:
  movzwl %ax,%edx
  cmp    %r9d,%edx
  jl     L1340
  cmp    %r12d,%edx
  jg     L1340
  add    %edx,%edx
  mov    %esi,%r11d
  movslq %edx,%rbx
  add    %r13,%rbx
  movzwl (%rbx,%r11,1),%r11d
  cmp    0x14(%rsp),%r11d
  jne    L1340
  mov    0x20(%rsp),%ebx
  add    %ecx,%edx
  mov    %edx,%edx
  lea    (%rbx,%rsi,1),%r11d
  mov    0x90(%rsp),%rbx
  movzwl (%rbx,%r11,1),%r11d
  mov    %r11w,0x0(%r13,%rdx,1)
  nopl   0x0(%rax,%rax,1)
L1340:
  add    $0x1,%eax
  add    $0x2,%esi
  cmp    %ax,%r10w
  jne    L885
  jmp    L2724
  nopl   0x0(%rax)
  cmp    $0x3,%sil
  je     L1820
  cmp    $0x4,%sil
  je     L3639
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L2747
  nopl   (%rax)
L2791:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L2747:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L2791
  cmp    %r12d,%ecx
  jg     L2791
  cmpw   $0x0,0xe(%rsp)
  jle    L2791
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
  nopl   0x0(%rax,%rax,1)
L884:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L653
  cmp    %r11d,%ebx
  jg     L653
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,2),%ebx
  mov    %esi,%ebp
  movzwl (%rax,%rbp,1),%ebp
  add    %bp,0x0(%r13,%rbx,1)
L653:
  add    $0x1,%edx
  add    $0x2,%esi
  cmp    %dx,%r9w
  jne    L884
  movzwl 0x14(%rsp),%eax
  jmp    L2791
  nopw   0x0(%rax,%rax,1)
  cmp    $0x3,%sil
  je     L446
  cmp    $0x4,%sil
  je     L1855
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L1381
  nopl   (%rax)
L618:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L1381:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L618
  cmp    %r12d,%ecx
  jg     L618
  cmpw   $0x0,0xe(%rsp)
  jle    L618
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
L400:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L326
  cmp    %r11d,%ebx
  jg     L326
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,2),%ebx
  mov    %esi,%ebp
  movzwl (%rax,%rbp,1),%ebp
  or     %bp,0x0(%r13,%rbx,1)
L326:
  add    $0x1,%edx
  add    $0x2,%esi
  cmp    %dx,%r9w
  jne    L400
  movzwl 0x14(%rsp),%eax
  jmp    L618
  nopw   0x0(%rax,%rax,1)
  cmp    $0x3,%sil
  je     L1333
  cmp    $0x4,%sil
  je     L2189
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  movswl 0x20(%rsp),%r8d
  movswl 0x18(%rsp),%ebp
  lea    (%rdx,%r9,1),%r10d
  xor    %edi,%edi
  movswl 0x14(%rsp),%edx
  movzwl 0xe(%rsp),%r11d
  add    %r9d,%r12d
  add    0xc(%rsp),%r11w
  add    %edx,%r8d
  add    %edx,%ebp
  jmp    L2316
  nopl   0x0(%rax,%rax,1)
L3255:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L2316:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L3255
  cmp    %r12d,%ecx
  jg     L3255
  cmpw   $0x0,0xe(%rsp)
  jle    L3255
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %edi,0x20(%rsp)
  mov    %edi,%esi
  mov    %ax,0x14(%rsp)
  nopl   0x0(%rax)
L3239:
  movzwl %dx,%r9d
  cmp    %r8d,%r9d
  jl     L2191
  cmp    %ebp,%r9d
  jg     L2191
  mov    0x90(%rsp),%rdi
  lea    (%rcx,%r9,2),%r9d
  mov    %esi,%ebx
  add    %r13,%r9
  movzwl (%r9),%eax
  imul   (%rdi,%rbx,1),%ax
  mov    %ax,(%r9)
L2191:
  add    $0x1,%edx
  add    $0x2,%esi
  cmp    %dx,%r11w
  jne    L3239
  movzwl 0x14(%rsp),%eax
  mov    0x20(%rsp),%edi
  jmp    L3255
  xchg   %ax,%ax
  cmp    $0x3,%sil
  je     L473
  cmp    $0x4,%sil
  je     L657
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  add    %r14d,%eax
  movswl %dx,%edx
  mov    %ax,0x28(%rsp)
  movswl 0x14(%rsp),%ebx
  lea    (%rdx,%r9,1),%edi
  xor    %r11d,%r11d
  lea    (%r12,%r9,1),%eax
  mov    %edi,%r12d
  mov    %eax,0x24(%rsp)
  movswl 0x20(%rsp),%eax
  mov    %ebx,0x38(%rsp)
  mov    %eax,0x3c(%rsp)
  movswl 0x18(%rsp),%eax
  mov    %r13,0x18(%rsp)
  add    %ebx,%eax
  mov    %eax,0x14(%rsp)
  movzbl 0x2c(%rsp),%eax
  not    %eax
  movzbl %al,%eax
  mov    %eax,0x40(%rsp)
  jmp    L2975
L3534:
  add    $0x1,%r14d
  add    %r15d,%r11d
  cmp    %r14w,0x28(%rsp)
  je     L2569
L2975:
  movzwl %r14w,%eax
  cmp    %r12d,%eax
  jl     L3534
  cmp    0x24(%rsp),%eax
  jg     L3534
  movzwl 0xe(%rsp),%esi
  test   %si,%si
  jle    L3534
  imul   0x10(%rsp),%eax
  mov    %r11d,0x30(%rsp)
  mov    %r11d,%r8d
  movzbl 0x2c(%rsp),%r13d
  mov    0x40(%rsp),%r11d
  mov    0x3c(%rsp),%ebx
  add    0x38(%rsp),%ebx
  mov    %eax,0x20(%rsp)
  movzwl 0xc(%rsp),%eax
  add    %eax,%esi
  mov    %esi,%r10d
  nopw   0x0(%rax,%rax,1)
L3575:
  movzwl %ax,%edx
  cmp    %ebx,%edx
  jl     L1028
  cmp    0x14(%rsp),%edx
  jg     L1028
  mov    0x20(%rsp),%esi
  lea    (%rsi,%rdx,2),%r9d
  mov    0x90(%rsp),%rsi
  add    0x18(%rsp),%r9
  mov    %r8d,%edx
  movzwl (%r9),%edi
  movzwl (%rsi,%rdx,1),%edx
  mov    %edi,%esi
  mov    %edi,%ebp
  shr    $0x5,%di
  mov    %edx,%ecx
  shr    $0xb,%si
  and    $0x1f,%ebp
  and    $0x3f,%edi
  shr    $0xb,%cx
  imul   %r11d,%ebp
  movzwl %si,%esi
  movzwl %cx,%ecx
  imul   %r11d,%esi
  imul   %r13d,%ecx
  imul   %r11d,%edi
  add    %ecx,%esi
  mov    %edx,%ecx
  shr    $0x5,%dx
  and    $0x1f,%ecx
  and    $0x3f,%edx
  sar    $0x8,%esi
  imul   %r13d,%ecx
  shl    $0xb,%esi
  imul   %r13d,%edx
  add    %ebp,%ecx
  add    %edi,%edx
  sar    $0x8,%ecx
  sar    $0x8,%edx
  or     %esi,%ecx
  shl    $0x5,%edx
  or     %edx,%ecx
  mov    %cx,(%r9)
L1028:
  add    $0x1,%eax
  add    $0x2,%r8d
  cmp    %ax,%r10w
  jne    L3575
  mov    0x30(%rsp),%r11d
  jmp    L3534
  nopl   0x0(%rax,%rax,1)
  cmp    $0x3,%sil
  je     L2174
  cmp    $0x4,%sil
  je     L1868
  cmp    $0x2,%sil
  jne    L2569
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L2390
  nopl   (%rax)
L3488:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L2390:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L3488
  cmp    %r12d,%ecx
  jg     L3488
  cmpw   $0x0,0xe(%rsp)
  jle    L3488
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
L3020:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L160
  cmp    %r11d,%ebx
  jg     L160
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,2),%ebx
  mov    %esi,%ebp
  movzwl (%rax,%rbp,1),%ebp
  sub    %bp,0x0(%r13,%rbx,1)
L160:
  add    $0x1,%edx
  add    $0x2,%esi
  cmp    %dx,%r9w
  jne    L3020
  movzwl 0x14(%rsp),%eax
  jmp    L3488
  nopw   0x0(%rax,%rax,1)
L117:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebx
  movswl 0x14(%rsp),%edx
  xor    %r8d,%r8d
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  add    %edx,%ebx
  add    0xc(%rsp),%r11w
  add    %edx,%r9d
  jmp    L2196
  cs nopw 0x0(%rax,%rax,1)
L2186:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r14w,%ax
  je     L2569
L2196:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L2186
  cmp    %r12d,%ecx
  jg     L2186
  cmpw   $0x0,0xe(%rsp)
  jle    L2186
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %r8d,%edi
  nopl   0x0(%rax)
L3581:
  movzwl %dx,%esi
  cmp    %r9d,%esi
  jl     L1319
  cmp    %ebx,%esi
  jg     L1319
  mov    0x90(%rsp),%rax
  mov    %edi,%ebp
  lea    (%rcx,%rsi,2),%esi
  movzwl (%rax,%rbp,1),%ebp
  mov    %bp,0x0(%r13,%rsi,1)
L1319:
  add    $0x1,%edx
  add    $0x2,%edi
  cmp    %dx,%r11w
  jne    L3581
  movzwl 0x14(%rsp),%eax
  jmp    L2186
  cs nopw 0x0(%rax,%rax,1)
L1868:
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L3272
  nopw   0x0(%rax,%rax,1)
L3157:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L3272:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L3157
  cmp    %r12d,%ecx
  jg     L3157
  cmpw   $0x0,0xe(%rsp)
  jle    L3157
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
  nopl   0x0(%rax,%rax,1)
L3043:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L2394
  cmp    %r11d,%ebx
  jg     L2394
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,4),%ebx
  mov    %esi,%ebp
  mov    (%rax,%rbp,1),%ebp
  sub    %ebp,0x0(%r13,%rbx,1)
L2394:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r9w
  jne    L3043
  movzwl 0x14(%rsp),%eax
  jmp    L3157
  nopl   (%rax)
L657:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  add    %r14d,%eax
  movswl %dx,%edx
  mov    %ax,0x28(%rsp)
  lea    (%rdx,%r9,1),%edi
  movswl 0x20(%rsp),%edx
  xor    %r8d,%r8d
  lea    (%r12,%r9,1),%eax
  mov    %edi,0x2c(%rsp)
  movzwl 0xe(%rsp),%r12d
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  mov    %r13,0x30(%rsp)
  add    0xc(%rsp),%r12w
  lea    (%rdx,%rax,1),%ebp
  movswl 0x18(%rsp),%edx
  add    %edx,%eax
  mov    %eax,0x20(%rsp)
  jmp    L2037
  nopl   0x0(%rax)
L1291:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r14w,0x28(%rsp)
  je     L2569
L2037:
  movzwl %r14w,%eax
  cmp    0x2c(%rsp),%eax
  jl     L1291
  cmp    0x24(%rsp),%eax
  jg     L1291
  cmpw   $0x0,0xe(%rsp)
  jle    L1291
  imul   0x10(%rsp),%eax
  movzwl 0xc(%rsp),%edx
  mov    %r8d,%edi
  mov    %eax,0x18(%rsp)
  nopl   0x0(%rax)
L2607:
  movzwl %dx,%eax
  cmp    %ebp,%eax
  jl     L3276
  cmp    0x20(%rsp),%eax
  jg     L3276
  mov    0x18(%rsp),%ebx
  lea    (%rbx,%rax,4),%r11d
  mov    0x90(%rsp),%rbx
  mov    %edi,%eax
  add    0x30(%rsp),%r11
  mov    (%r11),%ecx
  mov    (%rbx,%rax,1),%eax
  mov    %ecx,0x14(%rsp)
  movzbl 0x14(%rsp),%r13d
  mov    %eax,%ebx
  movzbl %ah,%esi
  shr    $0x18,%ebx
  mov    %esi,%r9d
  movzbl %ch,%esi
  mov    %ebx,%r10d
  imul   %ebx,%r9d
  not    %r10d
  movzbl %r10b,%r10d
  imul   %r10d,%esi
  imul   %r10d,%r13d
  add    %esi,%r9d
  movzbl %al,%esi
  imul   %ebx,%esi
  and    $0xff00,%r9d
  add    %r13d,%esi
  mov    %esi,%ecx
  movzbl %ch,%esi
  mov    0x14(%rsp),%ecx
  or     %r9d,%esi
  mov    %eax,%r9d
  shr    $0x10,%eax
  shr    $0x10,%ecx
  movzbl %al,%eax
  and    $0xff000000,%r9d
  movzbl %cl,%ecx
  imul   %ebx,%eax
  or     %esi,%r9d
  imul   %r10d,%ecx
  add    %ecx,%eax
  shl    $0x8,%eax
  and    $0xff0000,%eax
  or     %eax,%r9d
  mov    %r9d,(%r11)
L3276:
  add    $0x1,%edx
  add    $0x4,%edi
  cmp    %dx,%r12w
  jne    L2607
  jmp    L1291
  nopl   0x0(%rax)
L2189:
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  movswl 0x20(%rsp),%r8d
  movswl 0x18(%rsp),%ebp
  lea    (%rdx,%r9,1),%r10d
  xor    %edi,%edi
  movswl 0x14(%rsp),%edx
  movzwl 0xe(%rsp),%r11d
  add    %r9d,%r12d
  add    0xc(%rsp),%r11w
  add    %edx,%r8d
  add    %edx,%ebp
  jmp    L1354
  nopl   (%rax)
L253:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L1354:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L253
  cmp    %r12d,%ecx
  jg     L253
  cmpw   $0x0,0xe(%rsp)
  jle    L253
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %edi,0x20(%rsp)
  mov    %edi,%esi
  mov    %ax,0x14(%rsp)
  nopl   0x0(%rax)
L1241:
  movzwl %dx,%r9d
  cmp    %r8d,%r9d
  jl     L239
  cmp    %ebp,%r9d
  jg     L239
  mov    0x90(%rsp),%rdi
  lea    (%rcx,%r9,4),%r9d
  mov    %esi,%ebx
  add    %r13,%r9
  mov    (%r9),%eax
  imul   (%rdi,%rbx,1),%eax
  mov    %eax,(%r9)
L239:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r11w
  jne    L1241
  movzwl 0x14(%rsp),%eax
  mov    0x20(%rsp),%edi
  jmp    L253
  nopl   0x0(%rax,%rax,1)
L1855:
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L2848
  nopw   0x0(%rax,%rax,1)
L1048:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L2848:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L1048
  cmp    %r12d,%ecx
  jg     L1048
  cmpw   $0x0,0xe(%rsp)
  jle    L1048
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
  nopl   0x0(%rax,%rax,1)
L628:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L1756
  cmp    %r11d,%ebx
  jg     L1756
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,4),%ebx
  mov    %esi,%ebp
  mov    (%rax,%rbp,1),%ebp
  or     %ebp,0x0(%r13,%rbx,1)
L1756:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r9w
  jne    L628
  movzwl 0x14(%rsp),%eax
  jmp    L1048
  nopl   (%rax)
L3639:
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L687
  nop
L986:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L687:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L986
  cmp    %r12d,%ecx
  jg     L986
  cmpw   $0x0,0xe(%rsp)
  jle    L986
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
  nopl   0x0(%rax,%rax,1)
L2585:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L104
  cmp    %r11d,%ebx
  jg     L104
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,4),%ebx
  mov    %esi,%ebp
  mov    (%rax,%rbp,1),%ebp
  add    %ebp,0x0(%r13,%rbx,1)
L104:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r9w
  jne    L2585
  movzwl 0x14(%rsp),%eax
  jmp    L986
  nopl   (%rax)
L3080:
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  movswl 0x20(%rsp),%r8d
  movswl 0x18(%rsp),%ebx
  lea    (%rdx,%r9,1),%r10d
  xor    %edi,%edi
  movswl 0x14(%rsp),%edx
  movzwl 0xe(%rsp),%r11d
  add    %r9d,%r12d
  add    0xc(%rsp),%r11w
  add    %edx,%r8d
  add    %edx,%ebx
  jmp    L1141
  nopl   (%rax)
L3245:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L1141:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L3245
  cmp    %r12d,%ecx
  jg     L3245
  cmpw   $0x0,0xe(%rsp)
  jle    L3245
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
  nopl   0x0(%rax,%rax,1)
L2783:
  movzwl %dx,%r9d
  cmp    %r8d,%r9d
  jl     L2556
  cmp    %ebx,%r9d
  jg     L2556
  lea    (%rcx,%r9,4),%r9d
  mov    0xd0(%rsp),%ebp
  add    %r13,%r9
  xor    (%r9),%ebp
  and    $0xffffff00,%ebp
  jne    L2556
  mov    0x90(%rsp),%rax
  mov    %esi,%ebp
  mov    (%rax,%rbp,1),%ebp
  mov    %ebp,(%r9)
  nopw   0x0(%rax,%rax,1)
L2556:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r11w
  jne    L2783
  movzwl 0x14(%rsp),%eax
  jmp    L3245
  cs nopw 0x0(%rax,%rax,1)
L1382:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  xor    %r8d,%r8d
  lea    (%r14,%rax,1),%r11d
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%edx
  movzwl 0xe(%rsp),%ebp
  lea    (%r12,%r9,1),%eax
  movswl 0x20(%rsp),%r9d
  add    0xc(%rsp),%bp
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  add    %eax,%r9d
  lea    (%rdx,%rax,1),%r12d
  jmp    L2761
  nopl   0x0(%rax)
L1716:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r11w,%r14w
  je     L2569
L2761:
  movzwl %r14w,%esi
  cmp    %r10d,%esi
  jl     L1716
  cmp    0x24(%rsp),%esi
  jg     L1716
  cmpw   $0x0,0xe(%rsp)
  jle    L1716
  imul   0x10(%rsp),%esi
  mov    %r8d,0x14(%rsp)
  mov    %r8d,%edi
  mov    %r10d,0x20(%rsp)
  movzwl 0xc(%rsp),%ecx
  nop
L2745:
  movzwl %cx,%eax
  cmp    %r9d,%eax
  jl     L256
  cmp    %r12d,%eax
  jg     L256
  lea    (%rsi,%rax,4),%ebx
  mov    %edi,%edx
  mov    0x90(%rsp),%r8
  add    %r13,%rbx
  mov    %rdx,%r10
  xor    %edx,%edx
  mov    (%rbx),%eax
  divl   (%r8,%r10,1)
  mov    %eax,(%rbx)
L256:
  add    $0x1,%ecx
  add    $0x4,%edi
  cmp    %bp,%cx
  jne    L2745
  mov    0x14(%rsp),%r8d
  mov    0x20(%rsp),%r10d
  jmp    L1716
  nopl   0x0(%rax)
L1265:
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L424
  nop
L1540:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L424:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L1540
  cmp    %r12d,%ecx
  jg     L1540
  cmpw   $0x0,0xe(%rsp)
  jle    L1540
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
  nopl   0x0(%rax,%rax,1)
L2135:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L1885
  cmp    %r11d,%ebx
  jg     L1885
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,4),%ebx
  mov    %esi,%ebp
  mov    (%rax,%rbp,1),%ebp
  xor    %ebp,0x0(%r13,%rbx,1)
L1885:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r9w
  jne    L2135
  movzwl 0x14(%rsp),%eax
  jmp    L1540
  nopl   (%rax)
L2122:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ecx
  movswl 0x14(%rsp),%edx
  xor    %r8d,%r8d
  lea    (%r12,%r9,1),%ebp
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  lea    (%rcx,%rdx,1),%r12d
  add    0xc(%rsp),%r11w
  add    %edx,%r9d
  jmp    L43
  nopl   0x0(%rax)
L2264:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r14w,%ax
  je     L2569
L43:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L2264
  cmp    %ebp,%edx
  jg     L2264
  cmpw   $0x0,0xe(%rsp)
  jle    L2264
  imul   0x10(%rsp),%edx
  mov    %r8d,%esi
  mov    %edx,0x14(%rsp)
  movzwl 0xc(%rsp),%edx
  nop
L3236:
  movzwl %dx,%ecx
  cmp    %r9d,%ecx
  jl     L2462
  cmp    %r12d,%ecx
  jg     L2462
  mov    0x90(%rsp),%rbx
  mov    %esi,%edi
  mov    (%rbx,%rdi,1),%edi
  mov    0xd0(%rsp),%ebx
  xor    %edi,%ebx
  and    $0xffffff00,%ebx
  je     L2462
  mov    0x14(%rsp),%ebx
  lea    (%rbx,%rcx,4),%ecx
  mov    %edi,0x0(%r13,%rcx,1)
  nopw   0x0(%rax,%rax,1)
L2462:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r11w
  jne    L3236
  jmp    L2264
  nopl   0x0(%rax)
L487:
  test   %ax,%ax
  jle    L2569
  movswl %r9w,%r9d
  movswl %dx,%edx
  movswl 0x24(%rsp),%r12d
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x20(%rsp),%r8d
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  movswl 0x18(%rsp),%r11d
  add    %r9d,%r12d
  movzwl 0xe(%rsp),%r9d
  add    %edx,%r8d
  add    0xc(%rsp),%r9w
  add    %edx,%r11d
  jmp    L1590
  nop
L4:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L1590:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L4
  cmp    %r12d,%ecx
  jg     L4
  cmpw   $0x0,0xe(%rsp)
  jle    L4
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %edi,%esi
  nopl   0x0(%rax,%rax,1)
L2178:
  movzwl %dx,%ebx
  cmp    %r8d,%ebx
  jl     L1614
  cmp    %r11d,%ebx
  jg     L1614
  mov    0x90(%rsp),%rax
  lea    (%rcx,%rbx,4),%ebx
  mov    %esi,%ebp
  mov    (%rax,%rbp,1),%ebp
  and    %ebp,0x0(%r13,%rbx,1)
L1614:
  add    $0x1,%edx
  add    $0x4,%esi
  cmp    %dx,%r9w
  jne    L2178
  movzwl 0x14(%rsp),%eax
  jmp    L4
  nopl   (%rax)
L501:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebx
  movswl 0x14(%rsp),%edx
  xor    %r8d,%r8d
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  add    %edx,%ebx
  add    0xc(%rsp),%r11w
  add    %edx,%r9d
  jmp    L1694
  xchg   %ax,%ax
L198:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r14w,%ax
  je     L2569
L1694:
  movzwl %r14w,%ecx
  cmp    %r10d,%ecx
  jl     L198
  cmp    %r12d,%ecx
  jg     L198
  cmpw   $0x0,0xe(%rsp)
  jle    L198
  imul   0x10(%rsp),%ecx
  movzwl 0xc(%rsp),%edx
  mov    %ax,0x14(%rsp)
  mov    %r8d,%edi
  nopl   0x0(%rax)
L3497:
  movzwl %dx,%esi
  cmp    %r9d,%esi
  jl     L3558
  cmp    %ebx,%esi
  jg     L3558
  mov    0x90(%rsp),%rax
  mov    %edi,%ebp
  lea    (%rcx,%rsi,4),%esi
  mov    (%rax,%rbp,1),%ebp
  mov    %ebp,0x0(%r13,%rsi,1)
L3558:
  add    $0x1,%edx
  add    $0x4,%edi
  cmp    %dx,%r11w
  jne    L3497
  movzwl 0x14(%rsp),%eax
  jmp    L198
  nopl   0x0(%rax)
L2174:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebp
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  mov    0x90(%rsp),%rbx
  add    0xc(%rsp),%r11w
  add    %edx,%ebp
  add    %edx,%r9d
  jmp    L2042
  nopl   (%rax)
L3519:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L2042:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L3519
  cmp    %r12d,%edx
  jg     L3519
  cmpw   $0x0,0xe(%rsp)
  jle    L3519
  imul   0x10(%rsp),%edx
  mov    %ax,0x20(%rsp)
  mov    %edi,%ecx
  mov    %edx,0x14(%rsp)
  movzwl 0xc(%rsp),%edx
  nopl   0x0(%rax)
L1859:
  movzwl %dx,%esi
  cmp    %r9d,%esi
  jl     L116
  cmp    %ebp,%esi
  jg     L116
  mov    0x14(%rsp),%r8d
  lea    (%rsi,%rsi,2),%esi
  add    %r8d,%esi
  mov    %ecx,%r8d
  mov    %esi,%esi
  movzbl (%rbx,%r8,1),%eax
  sub    %al,0x0(%r13,%rsi,1)
  movzbl 0x1(%rbx,%r8,1),%eax
  sub    %al,0x1(%r13,%rsi,1)
  movzbl 0x2(%rbx,%r8,1),%r8d
  sub    %r8b,0x2(%r13,%rsi,1)
L116:
  add    $0x1,%edx
  add    $0x3,%ecx
  cmp    %dx,%r11w
  jne    L1859
  movzwl 0x20(%rsp),%eax
  jmp    L3519
  nopw   0x0(%rax,%rax,1)
L473:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  xor    %r11d,%r11d
  lea    (%r14,%rax,1),%ebp
  movswl 0x14(%rsp),%ebx
  lea    (%rdx,%r9,1),%edi
  lea    (%r12,%r9,1),%eax
  mov    %ebp,%r10d
  mov    %edi,0x28(%rsp)
  mov    %r13,%rbp
  mov    %eax,0x24(%rsp)
  movswl 0x20(%rsp),%eax
  mov    %ebx,0x44(%rsp)
  mov    %eax,0x48(%rsp)
  movswl 0x18(%rsp),%eax
  add    %ebx,%eax
  mov    %eax,0x14(%rsp)
  movzbl 0x2c(%rsp),%eax
  not    %eax
  movzbl %al,%eax
  mov    %eax,0x4c(%rsp)
  jmp    L2389
L2308:
  add    $0x1,%r14d
  add    %r15d,%r11d
  cmp    %r14w,%r10w
  je     L2569
L2389:
  movzwl %r14w,%eax
  cmp    0x28(%rsp),%eax
  jl     L2308
  cmp    0x24(%rsp),%eax
  jg     L2308
  movzwl 0xe(%rsp),%ebx
  test   %bx,%bx
  jle    L2308
  imul   0x10(%rsp),%eax
  mov    %r10w,0x30(%rsp)
  mov    %r11d,%edx
  mov    %r11d,0x38(%rsp)
  mov    0x90(%rsp),%r11
  mov    %r15d,0x3c(%rsp)
  mov    0x4c(%rsp),%r15d
  mov    %eax,0x18(%rsp)
  movzwl 0xc(%rsp),%eax
  mov    %r14w,0x40(%rsp)
  mov    0x48(%rsp),%r8d
  add    %eax,%ebx
  add    0x44(%rsp),%r8d
  mov    %ebx,%edi
  movzbl 0x2c(%rsp),%ebx
  mov    %ebx,%r14d
  nopl   (%rax)
L2525:
  movzwl %ax,%ecx
  cmp    %r8d,%ecx
  jl     L2161
  cmp    0x14(%rsp),%ecx
  jg     L2161
  mov    0x18(%rsp),%ebx
  lea    (%rcx,%rcx,2),%ecx
  mov    %edx,%esi
  add    %ebx,%ecx
  movzbl 0x1(%r11,%rsi,1),%ebx
  mov    %ecx,%ecx
  lea    0x1(%rbp,%rcx,1),%r12
  lea    0x0(%rbp,%rcx,1),%r13
  imul   %r14d,%ebx
  lea    0x2(%rbp,%rcx,1),%r10
  movzbl (%r12),%ecx
  movzbl (%r10),%r9d
  imul   %r15d,%ecx
  imul   %r15d,%r9d
  add    %ecx,%ebx
  movzbl 0x2(%r11,%rsi,1),%ecx
  movzbl (%r11,%rsi,1),%esi
  movzbl %bh,%ebx
  imul   %r14d,%ecx
  imul   %r14d,%esi
  add    %r9d,%ecx
  movzbl 0x0(%r13),%r9d
  mov    %ecx,0x20(%rsp)
  imul   %r15d,%r9d
  add    %r9d,%esi
  mov    %esi,%ecx
  movzbl %ch,%ecx
  mov    %cl,0x0(%r13)
  mov    %bl,(%r12)
  mov    0x20(%rsp),%ebx
  movzbl %bh,%ebx
  mov    %bl,(%r10)
L2161:
  add    $0x1,%eax
  add    $0x3,%edx
  cmp    %ax,%di
  jne    L2525
  movzwl 0x30(%rsp),%r10d
  mov    0x38(%rsp),%r11d
  mov    0x3c(%rsp),%r15d
  movzwl 0x40(%rsp),%r14d
  jmp    L2308
  nopl   0x0(%rax)
L555:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  xor    %esi,%esi
  lea    (%r14,%rax,1),%ebp
  movswl 0x20(%rsp),%edi
  lea    (%rdx,%r9,1),%r8d
  movswl 0x18(%rsp),%edx
  lea    (%r12,%r9,1),%eax
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  add    %eax,%edi
  lea    (%rdx,%rax,1),%r12d
  mov    0xd0(%rsp),%eax
  xor    %al,%al
  mov    %eax,0x14(%rsp)
  jmp    L2470
  nopl   0x0(%rax)
L462:
  add    $0x1,%r14d
  add    %r15d,%esi
  cmp    %r14w,%bp
  je     L2569
L2470:
  movzwl %r14w,%edx
  cmp    %r8d,%edx
  jl     L462
  cmp    0x24(%rsp),%edx
  jg     L462
  movzwl 0xe(%rsp),%eax
  test   %ax,%ax
  jle    L462
  imul   0x10(%rsp),%edx
  mov    %esi,%ebx
  mov    %eax,%r9d
  mov    %esi,0x20(%rsp)
  movzwl 0xc(%rsp),%eax
  sub    %edx,%ebx
  mov    %edx,0x28(%rsp)
  mov    %edx,%ecx
  mov    0x90(%rsp),%rdx
  mov    %ebx,0x18(%rsp)
  add    %eax,%r9d
  nopl   0x0(%rax)
L2340:
  movzwl %ax,%r10d
  cmp    %edi,%r10d
  jl     L1350
  cmp    %r12d,%r10d
  jg     L1350
  lea    (%r10,%r10,2),%ebx
  mov    %ecx,%r10d
  mov    0x14(%rsp),%esi
  movslq %ebx,%r11
  add    %r13,%r11
  cmp    %esi,(%r11,%r10,1)
  jne    L1350
  mov    0x18(%rsp),%esi
  lea    (%rsi,%rcx,1),%r10d
  mov    0x28(%rsp),%esi
  lea    (%rbx,%rsi,1),%r11d
  movzbl (%rdx,%r10,1),%ebx
  mov    %bl,0x0(%r13,%r11,1)
  movzbl 0x1(%rdx,%r10,1),%ebx
  mov    %bl,0x1(%r13,%r11,1)
  movzbl 0x2(%rdx,%r10,1),%r10d
  mov    %r10b,0x2(%r13,%r11,1)
  nopl   (%rax)
L1350:
  add    $0x1,%eax
  add    $0x3,%ecx
  cmp    %ax,%r9w
  jne    L2340
  mov    0x20(%rsp),%esi
  jmp    L462
  nopl   (%rax)
L1820:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebp
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  mov    0x90(%rsp),%rbx
  add    0xc(%rsp),%r11w
  add    %edx,%ebp
  add    %edx,%r9d
  jmp    L1596
  nopl   (%rax)
L1410:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L1596:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L1410
  cmp    %r12d,%edx
  jg     L1410
  cmpw   $0x0,0xe(%rsp)
  jle    L1410
  imul   0x10(%rsp),%edx
  mov    %ax,0x20(%rsp)
  mov    %edi,%ecx
  mov    %edx,0x14(%rsp)
  movzwl 0xc(%rsp),%edx
  nopl   0x0(%rax)
L859:
  movzwl %dx,%esi
  cmp    %r9d,%esi
  jl     L901
  cmp    %ebp,%esi
  jg     L901
  mov    0x14(%rsp),%r8d
  lea    (%rsi,%rsi,2),%esi
  add    %r8d,%esi
  mov    %ecx,%r8d
  mov    %esi,%esi
  movzbl (%rbx,%r8,1),%eax
  add    %al,0x0(%r13,%rsi,1)
  movzbl 0x1(%rbx,%r8,1),%eax
  add    %al,0x1(%r13,%rsi,1)
  movzbl 0x2(%rbx,%r8,1),%r8d
  add    %r8b,0x2(%r13,%rsi,1)
L901:
  add    $0x1,%edx
  add    $0x3,%ecx
  cmp    %dx,%r11w
  jne    L859
  movzwl 0x20(%rsp),%eax
  jmp    L1410
  nopw   0x0(%rax,%rax,1)
L446:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebp
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  mov    0x90(%rsp),%rbx
  add    0xc(%rsp),%r11w
  add    %edx,%ebp
  add    %edx,%r9d
  jmp    L1315
  nopl   (%rax)
L575:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L1315:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L575
  cmp    %r12d,%edx
  jg     L575
  cmpw   $0x0,0xe(%rsp)
  jle    L575
  imul   0x10(%rsp),%edx
  mov    %ax,0x20(%rsp)
  mov    %edi,%ecx
  mov    %edx,0x14(%rsp)
  movzwl 0xc(%rsp),%edx
  nopl   0x0(%rax)
L2494:
  movzwl %dx,%esi
  cmp    %r9d,%esi
  jl     L1916
  cmp    %ebp,%esi
  jg     L1916
  mov    0x14(%rsp),%r8d
  lea    (%rsi,%rsi,2),%esi
  add    %r8d,%esi
  mov    %ecx,%r8d
  mov    %esi,%esi
  movzbl (%rbx,%r8,1),%eax
  or     %al,0x0(%r13,%rsi,1)
  movzbl 0x1(%rbx,%r8,1),%eax
  or     %al,0x1(%r13,%rsi,1)
  movzbl 0x2(%rbx,%r8,1),%r8d
  or     %r8b,0x2(%r13,%rsi,1)
L1916:
  add    $0x1,%edx
  add    $0x3,%ecx
  cmp    %dx,%r11w
  jne    L2494
  movzwl 0x20(%rsp),%eax
  jmp    L575
  nopw   0x0(%rax,%rax,1)
L2079:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  add    %r14d,%eax
  movswl %dx,%edx
  mov    %ax,0x28(%rsp)
  lea    (%rdx,%r9,1),%r11d
  movswl 0x20(%rsp),%edx
  xor    %r8d,%r8d
  lea    (%r12,%r9,1),%eax
  movzwl 0xe(%rsp),%r10d
  add    0xc(%rsp),%r10w
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  lea    (%rdx,%rax,1),%r12d
  movswl 0x18(%rsp),%edx
  add    %edx,%eax
  mov    %eax,0x14(%rsp)
  jmp    L2611
  nopl   0x0(%rax)
L2512:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r14w,0x28(%rsp)
  je     L2569
L2611:
  movzwl %r14w,%eax
  cmp    %r11d,%eax
  jl     L2512
  cmp    0x24(%rsp),%eax
  jg     L2512
  cmpw   $0x0,0xe(%rsp)
  jle    L2512
  imul   0x10(%rsp),%eax
  mov    %r8d,0x18(%rsp)
  mov    %r8d,%esi
  movzwl 0xc(%rsp),%ecx
  mov    0x90(%rsp),%r8
  mov    %eax,0x20(%rsp)
  nopl   0x0(%rax,%rax,1)
L1704:
  movzwl %cx,%eax
  cmp    %r12d,%eax
  jl     L2730
  cmp    0x14(%rsp),%eax
  jg     L2730
  mov    0x20(%rsp),%ebx
  lea    (%rax,%rax,2),%eax
  mov    %esi,%edi
  movsbl (%r8,%rdi,1),%ebp
  lea    (%rax,%rbx,1),%r9d
  lea    0x0(%r13,%r9,1),%rbx
  movsbl (%rbx),%eax
  cltd
  idiv   %ebp
  mov    %al,(%rbx)
  lea    0x1(%r13,%r9,1),%rbx
  movsbl 0x1(%r8,%rdi,1),%ebp
  lea    0x2(%r13,%r9,1),%r9
  movsbl (%rbx),%eax
  cltd
  idiv   %ebp
  mov    %al,(%rbx)
  movsbl (%r9),%eax
  movsbl 0x2(%r8,%rdi,1),%edi
  cltd
  idiv   %edi
  mov    %al,(%r9)
L2730:
  add    $0x1,%ecx
  add    $0x3,%esi
  cmp    %r10w,%cx
  jne    L1704
  mov    0x18(%rsp),%r8d
  jmp    L2512
  nopl   0x0(%rax,%rax,1)
L651:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebp
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  mov    0x90(%rsp),%rbx
  add    0xc(%rsp),%r11w
  add    %edx,%ebp
  add    %edx,%r9d
  jmp    L2428
  nopl   (%rax)
L3521:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L2428:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L3521
  cmp    %r12d,%edx
  jg     L3521
  cmpw   $0x0,0xe(%rsp)
  jle    L3521
  imul   0x10(%rsp),%edx
  mov    %ax,0x20(%rsp)
  mov    %edi,%ecx
  mov    %edx,0x14(%rsp)
  movzwl 0xc(%rsp),%edx
  nopl   0x0(%rax)
L973:
  movzwl %dx,%esi
  cmp    %r9d,%esi
  jl     L217
  cmp    %ebp,%esi
  jg     L217
  mov    0x14(%rsp),%r8d
  lea    (%rsi,%rsi,2),%esi
  add    %r8d,%esi
  mov    %ecx,%r8d
  mov    %esi,%esi
  movzbl (%rbx,%r8,1),%eax
  xor    %al,0x0(%r13,%rsi,1)
  movzbl 0x1(%rbx,%r8,1),%eax
  xor    %al,0x1(%r13,%rsi,1)
  movzbl 0x2(%rbx,%r8,1),%r8d
  xor    %r8b,0x2(%r13,%rsi,1)
L217:
  add    $0x1,%edx
  add    $0x3,%ecx
  cmp    %dx,%r11w
  jne    L973
  movzwl 0x20(%rsp),%eax
  jmp    L3521
  nopw   0x0(%rax,%rax,1)
L2040:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  xor    %edi,%edi
  lea    (%r14,%rax,1),%ebp
  lea    (%rdx,%r9,1),%r8d
  movswl 0x18(%rsp),%edx
  movzwl 0xe(%rsp),%r10d
  lea    (%r12,%r9,1),%eax
  movswl 0x20(%rsp),%r9d
  mov    0x90(%rsp),%rbx
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  add    0xc(%rsp),%r10w
  add    %eax,%r9d
  lea    (%rdx,%rax,1),%r12d
  jmp    L2319
  nopl   (%rax)
L2491:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%bp
  je     L2569
L2319:
  movzwl %r14w,%eax
  cmp    %r8d,%eax
  jl     L2491
  cmp    0x24(%rsp),%eax
  jg     L2491
  cmpw   $0x0,0xe(%rsp)
  jle    L2491
  imul   0x10(%rsp),%eax
  mov    %r15d,0x20(%rsp)
  mov    %edi,%ecx
  mov    %eax,0x14(%rsp)
  movzwl 0xc(%rsp),%eax
  nopl   (%rax)
L1075:
  movzwl %ax,%edx
  cmp    %r9d,%edx
  jl     L1623
  cmp    %r12d,%edx
  jg     L1623
  mov    %ecx,%esi
  mov    0xd0(%rsp),%r15d
  lea    (%rbx,%rsi,1),%r11
  xor    (%r11),%r15d
  and    $0xffffff00,%r15d
  je     L1623
  mov    0x14(%rsp),%r15d
  lea    (%rdx,%rdx,2),%edx
  movzbl (%r11),%r11d
  add    %r15d,%edx
  mov    %edx,%edx
  mov    %r11b,0x0(%r13,%rdx,1)
  movzbl 0x1(%rbx,%rsi,1),%r11d
  mov    %r11b,0x1(%r13,%rdx,1)
  movzbl 0x2(%rbx,%rsi,1),%esi
  mov    %sil,0x2(%r13,%rdx,1)
  nopw   0x0(%rax,%rax,1)
L1623:
  add    $0x1,%eax
  add    $0x3,%ecx
  cmp    %ax,%r10w
  jne    L1075
  mov    0x20(%rsp),%r15d
  jmp    L2491
  xchg   %ax,%ax
L1195:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebp
  movswl 0x14(%rsp),%edx
  xor    %r8d,%r8d
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  mov    0x90(%rsp),%rbx
  add    0xc(%rsp),%r11w
  add    %edx,%ebp
  add    %edx,%r9d
  jmp    L3034
  xchg   %ax,%ax
L1757:
  add    $0x1,%r14d
  add    %r15d,%r8d
  cmp    %r14w,%ax
  je     L2569
L3034:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L1757
  cmp    %r12d,%edx
  jg     L1757
  cmpw   $0x0,0xe(%rsp)
  jle    L1757
  imul   0x10(%rsp),%edx
  mov    %ax,0x20(%rsp)
  mov    %r8d,%esi
  mov    %edx,0x14(%rsp)
  movzwl 0xc(%rsp),%edx
  nopl   (%rax)
L3209:
  movzwl %dx,%ecx
  cmp    %r9d,%ecx
  jl     L308
  cmp    %ebp,%ecx
  jg     L308
  mov    0x14(%rsp),%eax
  mov    %esi,%edi
  lea    (%rcx,%rcx,2),%ecx
  add    %eax,%ecx
  movzbl (%rbx,%rdi,1),%eax
  mov    %ecx,%ecx
  mov    %al,0x0(%r13,%rcx,1)
  movzbl 0x1(%rbx,%rdi,1),%eax
  mov    %al,0x1(%r13,%rcx,1)
  movzbl 0x2(%rbx,%rdi,1),%edi
  mov    %dil,0x2(%r13,%rcx,1)
L308:
  add    $0x1,%edx
  add    $0x3,%esi
  cmp    %dx,%r11w
  jne    L3209
  movzwl 0x20(%rsp),%eax
  jmp    L1757
  nopl   0x0(%rax)
L3461:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  add    %r14d,%eax
  lea    (%rdx,%r9,1),%r10d
  movswl 0x18(%rsp),%ebp
  movswl 0x14(%rsp),%edx
  xor    %edi,%edi
  add    %r9d,%r12d
  movswl 0x20(%rsp),%r9d
  movzwl 0xe(%rsp),%r11d
  mov    0x90(%rsp),%rbx
  add    0xc(%rsp),%r11w
  add    %edx,%ebp
  add    %edx,%r9d
  jmp    L3253
  nopl   (%rax)
L436:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%ax
  je     L2569
L3253:
  movzwl %r14w,%edx
  cmp    %r10d,%edx
  jl     L436
  cmp    %r12d,%edx
  jg     L436
  cmpw   $0x0,0xe(%rsp)
  jle    L436
  imul   0x10(%rsp),%edx
  mov    %ax,0x20(%rsp)
  mov    %edi,%ecx
  mov    %edx,0x14(%rsp)
  movzwl 0xc(%rsp),%edx
  nopl   0x0(%rax)
L2278:
  movzwl %dx,%esi
  cmp    %r9d,%esi
  jl     L2880
  cmp    %ebp,%esi
  jg     L2880
  mov    0x14(%rsp),%r8d
  lea    (%rsi,%rsi,2),%esi
  add    %r8d,%esi
  mov    %ecx,%r8d
  mov    %esi,%esi
  movzbl (%rbx,%r8,1),%eax
  and    %al,0x0(%r13,%rsi,1)
  movzbl 0x1(%rbx,%r8,1),%eax
  and    %al,0x1(%r13,%rsi,1)
  movzbl 0x2(%rbx,%r8,1),%r8d
  and    %r8b,0x2(%r13,%rsi,1)
L2880:
  add    $0x1,%edx
  add    $0x3,%ecx
  cmp    %dx,%r11w
  jne    L2278
  movzwl 0x20(%rsp),%eax
  jmp    L436
  nopw   0x0(%rax,%rax,1)
L1333:
  test   %ax,%ax
  jle    L2569
  movswl 0x24(%rsp),%r12d
  movswl %r9w,%r9d
  movswl %dx,%edx
  xor    %edi,%edi
  lea    (%r14,%rax,1),%ebx
  lea    (%rdx,%r9,1),%r8d
  movswl 0x18(%rsp),%edx
  movswl 0x20(%rsp),%r10d
  lea    (%r12,%r9,1),%eax
  movzwl 0xe(%rsp),%r11d
  add    0xc(%rsp),%r11w
  mov    %eax,0x24(%rsp)
  movswl 0x14(%rsp),%eax
  lea    (%rdx,%rax,1),%r12d
  add    %eax,%r10d
  mov    %r12d,0x14(%rsp)
  mov    0x90(%rsp),%r12
  jmp    L1638
  nopw   0x0(%rax,%rax,1)
L3268:
  add    $0x1,%r14d
  add    %r15d,%edi
  cmp    %r14w,%bx
  je     L2569
L1638:
  movzwl %r14w,%eax
  cmp    %r8d,%eax
  jl     L3268
  cmp    0x24(%rsp),%eax
  jg     L3268
  cmpw   $0x0,0xe(%rsp)
  jle    L3268
  imul   0x10(%rsp),%eax
  movzwl 0xc(%rsp),%edx
  mov    %edi,%ecx
  mov    %eax,0x20(%rsp)
L3405:
  movzwl %dx,%eax
  cmp    %r10d,%eax
  jl     L218
  cmp    0x14(%rsp),%eax
  jg     L218
  mov    0x20(%rsp),%esi
  lea    (%rax,%rax,2),%eax
  lea    (%rax,%rsi,1),%r9d
  mov    %ecx,%esi
  lea    0x0(%r13,%r9,1),%rbp
  movzbl 0x0(%rbp),%eax
  mulb   (%r12,%rsi,1)
  mov    %al,0x0(%rbp)
  lea    0x1(%r13,%r9,1),%rbp
  lea    0x2(%r13,%r9,1),%r9
  movzbl 0x0(%rbp),%eax
  mulb   0x1(%r12,%rsi,1)
  mov    %al,0x0(%rbp)
  movzbl (%r9),%eax
  mulb   0x2(%r12,%rsi,1)
  mov    %al,(%r9)
L218:
  add    $0x1,%edx
  add    $0x3,%ecx
  cmp    %dx,%r11w
  jne    L3405
  jmp    L3268
```

assistant: ```c
void c_blit_write(char *framebuffer, short screen_width, short screen_height, unsigned int bytes_per_line, short xoffset, short yoffset, char *blit_data, short x, short y, short w, short h, unsigned char bytes_per_pixel, unsigned char draw_mode, unsigned char alpha, unsigned int bcolor, short x_clip, short y_clip, short xx_clip, short yy_clip) {
  short fb_x = xoffset + x;
  short fb_y = yoffset + y;
  short xx = x + w;
  short yy = y + h;
  short horizontal;
  short vertical;
  unsigned int bline = w * bytes_per_pixel;
  if (draw_mode == 0 && x >= x_clip && xx <= xx_clip && y >= y_clip && yy <= yy_clip) {
    unsigned char *source = blit_data;
    unsigned char *dest = &framebuffer[(fb_y * bytes_per_line) + (fb_x * bytes_per_pixel)];
    for (vertical = 0; vertical < h; vertical++) {
      memcpy(dest, source, bline);
      source += bline;
      dest += bytes_per_line;
    }
  } else {
    switch (draw_mode) {
    case 0:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) = *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) = *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) = *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) = *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) = *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 1:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) ^= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) ^= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) ^= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) ^= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) ^= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 2:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) |= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) |= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) |= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) |= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) |= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 3:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) &= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) &= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) &= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) &= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) &= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 4:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned int rgb = *((unsigned int *)(blit_data + vhz));
                if ((rgb & 0xFFFFFF00) != (bcolor & 0xFFFFFF00)) {
                  *((unsigned int *)(framebuffer + xhbp_yvbl)) = rgb;
                }
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if ((*((unsigned int *)(blit_data + vhz)) & 0xFFFFFF00) != (bcolor & 0xFFFFFF00)) {
                  *(framebuffer + xhbp_yvbl) = *(blit_data + vhz);
                  *(framebuffer + xhbp_yvbl + 1) = *(blit_data + vhz + 1);
                  *(framebuffer + xhbp_yvbl + 2) = *(blit_data + vhz + 2);
                }
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned int rgb = *((unsigned short *)(blit_data + vhz));
                if (rgb != (bcolor & 0xFFFF)) {
                  *((unsigned short *)(framebuffer + xhbp_yvbl)) = rgb;
                }
              }
            }
          }
        }
        break;
      }
      break;
    case 5:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if ((*((unsigned int *)(framebuffer + xhbp_yvbl)) & 0xFFFFFF00) == (bcolor & 0xFFFFFF00)) {
                  *((unsigned int *)(framebuffer + xhbp_yvbl)) = *((unsigned int *)(blit_data + vhz));
                }
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if (*((unsigned int *)(framebuffer + xhbp + yvhz)) == (bcolor & 0xFFFFFF00)) {
                  *(framebuffer + xhbp_yvbl) = *(blit_data + vhz);
                  *(framebuffer + xhbp_yvbl + 1) = *(blit_data + vhz + 1);
                  *(framebuffer + xhbp_yvbl + 2) = *(blit_data + vhz + 2);
                }
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                if (*((unsigned short *)(framebuffer + xhbp + yvhz)) == (bcolor & 0xFFFF)) {
                  *((unsigned short *)(framebuffer + xhbp_yvbl)) = *((unsigned short *)(blit_data + vhz));
                }
              }
            }
          }
        }
        break;
      }
      break;
    case 6:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned int fb_rgb = *((unsigned int *)(framebuffer + xhbp_yvbl));
                unsigned char fb_r = fb_rgb & 255;
                unsigned char fb_g = (fb_rgb >> 8) & 255;
                unsigned char fb_b = (fb_rgb >> 16) & 255;
                unsigned int blit_rgb = *((unsigned int *)(blit_data + vhz));
                unsigned char R = blit_rgb & 255;
                unsigned char G = (blit_rgb >> 8) & 255;
                unsigned char B = (blit_rgb >> 16) & 255;
                unsigned char A = (blit_rgb >> 24) & 255;
                unsigned char invA = (255 - A);
                fb_r = ((R * A) + (fb_r * invA)) >> 8;
                fb_g = ((G * A) + (fb_g * invA)) >> 8;
                fb_b = ((B * A) + (fb_b * invA)) >> 8;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) = fb_r | (fb_g << 8) | (fb_b << 16) | (A << 24);
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned char fb_r = *(framebuffer + xhbp_yvbl);
                unsigned char fb_g = *(framebuffer + xhbp_yvbl + 1);
                unsigned char fb_b = *(framebuffer + xhbp_yvbl + 2);
                unsigned char R = *(blit_data + vhz);
                unsigned char G = *(blit_data + vhz + 1);
                unsigned char B = *(blit_data + vhz + 2);
                unsigned char invA = (255 - alpha);
                fb_r = ((R * alpha) + (fb_r * invA)) >> 8;
                fb_g = ((G * alpha) + (fb_g * invA)) >> 8;
                fb_b = ((B * alpha) + (fb_b * invA)) >> 8;
                *(framebuffer + xhbp_yvbl) = fb_r;
                *(framebuffer + xhbp_yvbl + 1) = fb_g;
                *(framebuffer + xhbp_yvbl + 2) = fb_b;
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                unsigned short rgb565 = *((unsigned short *)(framebuffer + xhbp_yvbl));
                unsigned short fb_r = rgb565 & 31;
                unsigned short fb_g = (rgb565 >> 5) & 63;
                unsigned short fb_b = (rgb565 >> 11) & 31;
                rgb565 = *((unsigned short *)(blit_data + vhz));
                unsigned short R = rgb565 & 31;
                unsigned short G = (rgb565 >> 5) & 63;
                unsigned short B = (rgb565 >> 11) & 31;
                unsigned char invA = (255 - alpha);
                fb_r = ((R * alpha) + (fb_r * invA)) >> 8;
                fb_g = ((G * alpha) + (fb_g * invA)) >> 8;
                fb_b = ((B * alpha) + (fb_b * invA)) >> 8;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) = (fb_b << 11) | (fb_g << 5) | fb_r;
              }
            }
          }
        }
        break;
      }
      break;
    case 7:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) += *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) += *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) += *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) += *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) += *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 8:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) -= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) -= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) -= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) -= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) -= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 9:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) *= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) *= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) *= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) *= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) *= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    case 10:
      switch (bytes_per_pixel) {
      case 4:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned int *)(framebuffer + xhbp_yvbl)) /= *((unsigned int *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      case 3:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *(framebuffer + xhbp_yvbl) /= *(blit_data + vhz);
                *(framebuffer + xhbp_yvbl + 1) /= *(blit_data + vhz + 1);
                *(framebuffer + xhbp_yvbl + 2) /= *(blit_data + vhz + 2);
              }
            }
          }
        }
        break;
      case 2:
        for (vertical = 0; vertical < h; vertical++) {
          unsigned int vbl = vertical * bline;
          unsigned short yv = fb_y + vertical;
          unsigned int yvbl = yv * bytes_per_line;
          if (yv >= (yoffset + y_clip) && yv <= (yoffset + yy_clip)) {
            for (horizontal = 0; horizontal < w; horizontal++) {
              unsigned short xh = fb_x + horizontal;
              unsigned int xhbp = xh * bytes_per_pixel;
              if (xh >= (xoffset + x_clip) && xh <= (xoffset + xx_clip)) {
                unsigned int hzpixel = horizontal * bytes_per_pixel;
                unsigned int vhz = vbl + hzpixel;
                unsigned int yvhz = yvbl + hzpixel;
                unsigned int xhbp_yvbl = xhbp + yvbl;
                *((unsigned short *)(framebuffer + xhbp_yvbl)) /= *((unsigned short *)(blit_data + vhz));
              }
            }
          }
        }
        break;
      }
      break;
    }
  }
}
```