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

```asm
<decrypt>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %rdi,%r12
  mov    %rsi,%rdi
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  sub    $0x108,%rsp
  call   <strlen@plt>
  mov    %r12,%rdi
  mov    %rax,%rbx
  call   <strlen@plt>
  xor    %edx,%edx
  mov    %rax,%rcx
  div    %rbx
  mov    %rax,(%rsp)
  cmp    %rcx,%rbx
  ja     L56
  test   %rbx,%rbx
  je     L56
  mov    %rbx,%r9
  mov    %r13,%rax
  mov    %r12,%rcx
  xor    %r8d,%r8d
  and    $0xfffffffffffffff0,%r9
  pxor   %xmm15,%xmm15
  pxor   %xmm7,%xmm7
  xor    %r14d,%r14d
  lea    0x0(%rbp,%r9,1),%rdi
  mov    %r9,%r11
  mov    $0x34,%r10d
  movdqa D36(%rip),%xmm8
  mov    %rdi,0x20(%rsp)
  lea    0x1(%r9),%rdi
  pxor   %xmm6,%xmm6
  mov    %rdi,0x18(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x30(%rsp)
  lea    0x2(%r9),%rdi
  mov    %rdi,0x28(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x38(%rsp)
  lea    0x3(%r9),%rdi
  mov    %rdi,0x40(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x48(%rsp)
  lea    0x4(%r9),%rdi
  mov    %rdi,0x50(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x58(%rsp)
  lea    0x5(%r9),%rdi
  mov    %rdi,0x60(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x68(%rsp)
  lea    0x6(%r9),%rdi
  mov    %rdi,0x70(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x78(%rsp)
  lea    0x7(%r9),%rdi
  mov    %rdi,0x80(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x88(%rsp)
  lea    0x8(%r9),%rdi
  mov    %rdi,0x90(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0x98(%rsp)
  lea    0x9(%r9),%rdi
  mov    %rdi,0xa0(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0xa8(%rsp)
  lea    0xa(%r9),%rdi
  mov    %rdi,0xb0(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0xb8(%rsp)
  lea    0xb(%r9),%rdi
  mov    %rdi,0xc0(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0xc8(%rsp)
  lea    0xc(%r9),%rdi
  mov    %rdi,0xd0(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0xd8(%rsp)
  lea    0xd(%r9),%rdi
  mov    %rdi,0xe0(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0xe8(%rsp)
  lea    0xe(%r9),%rdi
  mov    %rdi,0xf0(%rsp)
  add    %rbp,%rdi
  mov    %rdi,0xf8(%rsp)
  lea    0x1(%rbp),%rdi
  mov    %rdi,0x8(%rsp)
  lea    -0x1(%rbx),%rdi
  mov    %rdi,0x10(%rsp)
  nopl   0x0(%rax,%rax,1)
L268:
  mov    %rax,%rdx
  sub    0x8(%rsp),%rdx
  cmp    $0xe,%rdx
  seta   %sil
  cmpq   $0xe,0x10(%rsp)
  seta   %dl
  test   %dl,%sil
  je     L262
  lea    0x1(%rcx),%rsi
  mov    %rax,%rdx
  sub    %rsi,%rdx
  cmp    $0xe,%rdx
  jbe    L262
  xor    %edx,%edx
  nopl   0x0(%rax,%rax,1)
L117:
  movdqu (%rcx,%rdx,1),%xmm0
  movdqa %xmm15,%xmm1
  movdqa %xmm15,%xmm2
  movdqa %xmm7,%xmm5
  pcmpgtb %xmm0,%xmm1
  movdqa %xmm0,%xmm4
  punpcklbw %xmm1,%xmm4
  punpckhbw %xmm1,%xmm0
  movdqa %xmm7,%xmm1
  pcmpgtw %xmm4,%xmm1
  movdqa %xmm4,%xmm12
  movdqa %xmm0,%xmm10
  movdqa %xmm0,%xmm3
  punpcklwd %xmm1,%xmm12
  punpckhwd %xmm1,%xmm4
  movdqa %xmm7,%xmm1
  pcmpgtw %xmm0,%xmm1
  movdqu 0x0(%rbp,%rdx,1),%xmm0
  movdqa %xmm4,%xmm13
  pcmpgtb %xmm0,%xmm2
  punpcklwd %xmm1,%xmm10
  punpckhwd %xmm1,%xmm3
  movdqa %xmm0,%xmm1
  movdqa %xmm10,%xmm11
  punpckhbw %xmm2,%xmm0
  punpcklbw %xmm2,%xmm1
  movdqa %xmm7,%xmm2
  pcmpgtw %xmm1,%xmm2
  movdqa %xmm1,%xmm14
  movdqa %xmm0,%xmm9
  pcmpgtw %xmm0,%xmm5
  punpcklwd %xmm2,%xmm14
  punpckhwd %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  movdqa %xmm12,%xmm0
  psubd  %xmm1,%xmm13
  psubd  %xmm4,%xmm1
  psubd  %xmm14,%xmm0
  psubd  %xmm12,%xmm14
  movdqa %xmm8,%xmm12
  psubd  %xmm14,%xmm12
  movdqa %xmm6,%xmm14
  movdqa %xmm6,%xmm4
  pcmpgtd %xmm0,%xmm14
  pcmpgtd %xmm13,%xmm4
  punpcklwd %xmm5,%xmm9
  punpckhwd %xmm5,%xmm2
  movdqa %xmm3,%xmm5
  psubd  %xmm9,%xmm11
  psubd  %xmm2,%xmm5
  psubd  %xmm3,%xmm2
  movdqa %xmm8,%xmm3
  pand   %xmm14,%xmm12
  pandn  %xmm0,%xmm14
  psubd  %xmm2,%xmm3
  movdqa %xmm14,%xmm0
  movdqa %xmm6,%xmm2
  psubd  %xmm10,%xmm9
  por    %xmm12,%xmm0
  movdqa %xmm8,%xmm12
  movdqa %xmm8,%xmm10
  psubd  %xmm1,%xmm12
  pcmpgtd %xmm5,%xmm2
  psubd  %xmm9,%xmm10
  movdqa %xmm12,%xmm1
  movdqa %xmm10,%xmm9
  pand   %xmm4,%xmm1
  pandn  %xmm13,%xmm4
  por    %xmm1,%xmm4
  movdqa %xmm6,%xmm1
  pand   %xmm2,%xmm3
  pcmpgtd %xmm11,%xmm1
  pandn  %xmm5,%xmm2
  por    %xmm3,%xmm2
  movdqa %xmm0,%xmm3
  punpcklwd %xmm4,%xmm0
  punpckhwd %xmm4,%xmm3
  movdqa %xmm0,%xmm4
  pand   %xmm1,%xmm9
  pandn  %xmm11,%xmm1
  punpckhwd %xmm3,%xmm4
  por    %xmm9,%xmm1
  punpcklwd %xmm3,%xmm0
  movdqa %xmm1,%xmm3
  punpcklwd %xmm2,%xmm1
  punpcklwd %xmm4,%xmm0
  punpckhwd %xmm2,%xmm3
  movdqa %xmm1,%xmm2
  punpckhwd %xmm3,%xmm2
  punpcklwd %xmm3,%xmm1
  movdqa %xmm0,%xmm3
  pmulhw D10(%rip),%xmm3
  punpcklwd %xmm2,%xmm1
  psraw  $0x3,%xmm3
  movdqa %xmm0,%xmm2
  psraw  $0xf,%xmm2
  psubw  %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  psllw  $0x1,%xmm2
  paddw  %xmm3,%xmm2
  psllw  $0x2,%xmm2
  paddw  %xmm3,%xmm2
  movdqa %xmm1,%xmm3
  pmulhw D10(%rip),%xmm3
  psllw  $0x1,%xmm2
  psraw  $0x3,%xmm3
  psubw  %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  pand   D2(%rip),%xmm0
  psraw  $0xf,%xmm2
  psubw  %xmm2,%xmm3
  movdqa %xmm3,%xmm2
  psllw  $0x1,%xmm2
  paddw  %xmm3,%xmm2
  psllw  $0x2,%xmm2
  paddw  %xmm3,%xmm2
  psllw  $0x1,%xmm2
  psubw  %xmm2,%xmm1
  pand   D2(%rip),%xmm1
  packuswb %xmm1,%xmm0
  paddb  D9(%rip),%xmm0
  movups %xmm0,(%rax,%rdx,1)
  add    $0x10,%rdx
  cmp    %r9,%rdx
  jne    L117
  cmp    %r11,%rbx
  je     L240
  mov    0x20(%rsp),%rsi
  lea    (%r11,%r8,1),%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L57
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L57:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x18(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0x30(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L248
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L248:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x28(%rsp),%rdi
  cmp    %rbx,%rdi
  jae    L240
  mov    0x38(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L340
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L340:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x40(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0x48(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L233
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L233:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x50(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0x58(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L382
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L382:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x60(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0x68(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L0
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L0:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x70(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0x78(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L225
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L225:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x80(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0x88(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L95
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L95:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0x90(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0x98(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L310
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L310:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0xa0(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0xa8(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L54
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L54:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0xb0(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0xb8(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L325
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L325:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0xc0(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0xc8(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L283
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L283:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0xd0(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0xd8(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L172
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L172:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0xe0(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0xe8(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L339
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L339:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  mov    0xf0(%rsp),%rdi
  cmp    %rdi,%rbx
  jbe    L240
  mov    0xf8(%rsp),%rsi
  add    %r8,%rdi
  movsbl (%r12,%rdi,1),%r15d
  movsbl (%rsi),%edx
  mov    %r15d,%esi
  sub    %edx,%esi
  jns    L316
  sub    %r15d,%edx
  mov    %r10d,%esi
  sub    %edx,%esi
L316:
  movslq %esi,%rdx
  mov    %esi,%r15d
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%r15d
  sar    $0x23,%rdx
  sub    %r15d,%edx
  imul   $0x1a,%edx,%edx
  sub    %edx,%esi
  add    $0x41,%esi
  mov    %sil,0x0(%r13,%rdi,1)
  nopl   0x0(%rax,%rax,1)
L240:
  add    $0x1,%r14
  add    %rbx,%rax
  add    %rbx,%rcx
  add    %rbx,%r8
  cmp    %r14,(%rsp)
  ja     L268
L56:
  add    $0x108,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L262:
  xor    %edx,%edx
  nopw   0x0(%rax,%rax,1)
L222:
  movsbl (%rcx,%rdx,1),%r15d
  movsbl 0x0(%rbp,%rdx,1),%esi
  mov    %r15d,%edi
  sub    %esi,%edi
  jns    L184
  sub    %r15d,%esi
  mov    %r10d,%edi
  sub    %esi,%edi
L184:
  movslq %edi,%rsi
  mov    %edi,%r15d
  imul   $0x4ec4ec4f,%rsi,%rsi
  sar    $0x1f,%r15d
  sar    $0x23,%rsi
  sub    %r15d,%esi
  imul   $0x1a,%esi,%esi
  sub    %esi,%edi
  add    $0x41,%edi
  mov    %dil,(%rax,%rdx,1)
  add    $0x1,%rdx
  cmp    %rdx,%rbx
  jne    L222
  jmp    L240
```

tool_calls: name: unpack_data
arguments: data_label: D36
data_type: byte[16]
name: unpack_data
arguments: data_label: D10
data_type: byte[16]
name: unpack_data
arguments: data_label: D2
data_type: byte[16]
name: unpack_data
arguments: data_label: D9
data_type: byte[16]

tool: {"D36": [0x34,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x34,0x00,0x00,0x00]}

tool: {"D10": [0xc5,0x4e,0xc5,0x4e,0xc5,0x4e,0xc5,0x4e,0xc5,0x4e,0xc5,0x4e,0xc5,0x4e,0xc5,0x4e]}

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

tool: {"D9": [0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41]}

assistant: ```c
void decrypt(const char *c, const char *key, char *p) {
  size_t klen = strlen(key);
  size_t clen = strlen(c);
  for (size_t i = 0; i < clen / klen; i++)
    for (size_t j = 0; j < klen; j++) {
      int tp = c[i * klen + j] - 'A' - (key[j] - 'A');
      if (tp < 0) {
        tp = 26 - abs(tp) + 26;
      }
      p[i * klen + j] = tp % 26 + 'A';
    }
}
```