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

```asm
<wsha1_transform>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x190,%rsp
  mov    %rdi,-0x188(%rbp)
  mov    %rsi,-0x190(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x15c(%rbp)
  jmp    L93
L36:
  mov    -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x188(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  shl    $0x18,%eax
  mov    %eax,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x188(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  shl    $0x8,%eax
  and    $0xff0000,%eax
  or     %eax,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x188(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  shr    $0x8,%eax
  and    $0xff00,%eax
  or     %eax,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x188(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  shr    $0x18,%eax
  or     %eax,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x188(%rbp),%rax
  add    %rcx,%rax
  mov    %edx,(%rax)
  addl   $0x1,-0x15c(%rbp)
L93:
  cmpl   $0xf,-0x15c(%rbp)
  jle    L36
  mov    -0x188(%rbp),%rcx
  lea    -0x150(%rbp),%rax
  mov    $0x40,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  movl   $0x0,-0x15c(%rbp)
  jmp    L101
L26:
  mov    -0x15c(%rbp),%eax
  add    $0xd,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%edx
  mov    -0x15c(%rbp),%eax
  add    $0x8,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  xor    %eax,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  xor    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x2,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  xor    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x10,%eax
  rol    %edx
  cltq
  mov    %edx,-0x150(%rbp,%rax,4)
  addl   $0x1,-0x15c(%rbp)
L101:
  cmpl   $0x3f,-0x15c(%rbp)
  jle    L26
  mov    -0x190(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x190(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,-0x178(%rbp)
  mov    -0x190(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    %eax,-0x174(%rbp)
  mov    -0x190(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x190(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  mov    %eax,-0x16c(%rbp)
  movl   $0x0,-0x15c(%rbp)
  jmp    L52
L19:
  mov    -0x164(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x16c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x178(%rbp),%eax
  not    %eax
  and    -0x160(%rbp),%eax
  mov    %eax,%edx
  mov    -0x178(%rbp),%eax
  and    -0x174(%rbp),%eax
  or     %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x15c(%rbp),%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x5a827999,%eax
  mov    %eax,-0x16c(%rbp)
  mov    -0x15c(%rbp),%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x178(%rbp)
  mov    -0x16c(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x160(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x164(%rbp),%eax
  not    %eax
  and    -0x174(%rbp),%eax
  mov    %eax,%edx
  mov    -0x164(%rbp),%eax
  and    -0x178(%rbp),%eax
  or     %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x15c(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x5a827999,%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x1,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x164(%rbp)
  mov    -0x160(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x174(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x16c(%rbp),%eax
  not    %eax
  and    -0x178(%rbp),%eax
  mov    %eax,%edx
  mov    -0x16c(%rbp),%eax
  and    -0x164(%rbp),%eax
  or     %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x15c(%rbp),%eax
  add    $0x2,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x5a827999,%eax
  mov    %eax,-0x174(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x2,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x16c(%rbp)
  mov    -0x174(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x178(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x160(%rbp),%eax
  not    %eax
  and    -0x164(%rbp),%eax
  mov    %eax,%edx
  mov    -0x160(%rbp),%eax
  and    -0x16c(%rbp),%eax
  or     %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x15c(%rbp),%eax
  add    $0x3,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x5a827999,%eax
  mov    %eax,-0x178(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x3,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x160(%rbp)
  mov    -0x178(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x164(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x174(%rbp),%eax
  not    %eax
  and    -0x16c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x174(%rbp),%eax
  and    -0x160(%rbp),%eax
  or     %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x15c(%rbp),%eax
  add    $0x4,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x5a827999,%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x4,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x174(%rbp)
  addl   $0x5,-0x15c(%rbp)
L52:
  cmpl   $0x13,-0x15c(%rbp)
  jle    L19
  mov    -0x164(%rbp),%eax
  mov    %eax,-0x168(%rbp)
  mov    -0x160(%rbp),%eax
  mov    %eax,-0x170(%rbp)
  movl   $0x14,-0x15c(%rbp)
  jmp    L0
L69:
  mov    -0x15c(%rbp),%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%edx
  mov    -0x168(%rbp),%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    -0x170(%rbp),%eax
  xor    -0x174(%rbp),%eax
  xor    -0x178(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x158(%rbp),%edx
  mov    -0x16c(%rbp),%eax
  add    %edx,%eax
  add    $0x6ed9eba1,%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x170(%rbp),%eax
  add    %eax,%edx
  mov    -0x178(%rbp),%eax
  ror    $0x2,%eax
  xor    -0x174(%rbp),%eax
  xor    -0x168(%rbp),%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x6ed9eba1,%eax
  mov    %eax,-0x170(%rbp)
  mov    -0x170(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x174(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x158(%rbp),%edx
  mov    -0x16c(%rbp),%eax
  add    %edx,%eax
  lea    0x6ed9eba1(%rax),%edx
  mov    -0x178(%rbp),%eax
  ror    $0x2,%eax
  xor    %eax,%edx
  mov    -0x168(%rbp),%eax
  ror    $0x2,%eax
  xor    %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x15c(%rbp),%eax
  add    $0x2,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x6ed9eba1,%eax
  mov    %eax,-0x174(%rbp)
  mov    -0x158(%rbp),%edx
  mov    -0x16c(%rbp),%eax
  add    %edx,%eax
  add    $0x6ed9eba1,%eax
  ror    $0x2,%eax
  mov    %eax,-0x16c(%rbp)
  mov    -0x178(%rbp),%eax
  ror    $0x2,%eax
  mov    %eax,%edx
  mov    -0x174(%rbp),%eax
  rol    $0x5,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x16c(%rbp),%eax
  xor    -0x170(%rbp),%eax
  mov    %eax,%edx
  mov    -0x168(%rbp),%eax
  ror    $0x2,%eax
  xor    %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x15c(%rbp),%eax
  add    $0x3,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x6ed9eba1,%eax
  mov    %eax,-0x178(%rbp)
  rorl   $0x2,-0x170(%rbp)
  mov    -0x168(%rbp),%eax
  ror    $0x2,%eax
  mov    %eax,%edx
  mov    -0x178(%rbp),%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    -0x16c(%rbp),%eax
  xor    -0x170(%rbp),%eax
  xor    -0x174(%rbp),%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x4,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x6ed9eba1,%eax
  mov    %eax,-0x168(%rbp)
  rorl   $0x2,-0x174(%rbp)
  addl   $0x5,-0x15c(%rbp)
L0:
  cmpl   $0x27,-0x15c(%rbp)
  jle    L69
  mov    -0x168(%rbp),%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x170(%rbp),%eax
  mov    %eax,-0x160(%rbp)
  movl   $0x28,-0x15c(%rbp)
  jmp    L33
L88:
  mov    -0x160(%rbp),%eax
  or     -0x174(%rbp),%eax
  and    -0x178(%rbp),%eax
  mov    %eax,%edx
  mov    -0x174(%rbp),%eax
  and    -0x160(%rbp),%eax
  or     %eax,%edx
  mov    -0x16c(%rbp),%eax
  add    %eax,%edx
  mov    -0x164(%rbp),%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  sub    $0x70e44324,%eax
  mov    %eax,-0x16c(%rbp)
  mov    -0x15c(%rbp),%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x178(%rbp)
  mov    -0x174(%rbp),%eax
  or     -0x178(%rbp),%eax
  and    -0x164(%rbp),%eax
  mov    %eax,%edx
  mov    -0x178(%rbp),%eax
  and    -0x174(%rbp),%eax
  or     %eax,%edx
  mov    -0x160(%rbp),%eax
  add    %eax,%edx
  mov    -0x16c(%rbp),%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  sub    $0x70e44324,%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x1,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x164(%rbp)
  mov    -0x178(%rbp),%eax
  or     -0x164(%rbp),%eax
  and    -0x16c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x164(%rbp),%eax
  and    -0x178(%rbp),%eax
  or     %eax,%edx
  mov    -0x174(%rbp),%eax
  add    %eax,%edx
  mov    -0x160(%rbp),%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x2,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  sub    $0x70e44324,%eax
  mov    %eax,-0x174(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x2,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x16c(%rbp)
  mov    -0x164(%rbp),%eax
  or     -0x16c(%rbp),%eax
  and    -0x160(%rbp),%eax
  mov    %eax,%edx
  mov    -0x16c(%rbp),%eax
  and    -0x164(%rbp),%eax
  or     %eax,%edx
  mov    -0x178(%rbp),%eax
  add    %eax,%edx
  mov    -0x174(%rbp),%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x3,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  sub    $0x70e44324,%eax
  mov    %eax,-0x178(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x3,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x160(%rbp)
  mov    -0x16c(%rbp),%eax
  or     -0x160(%rbp),%eax
  and    -0x174(%rbp),%eax
  mov    %eax,%edx
  mov    -0x160(%rbp),%eax
  and    -0x16c(%rbp),%eax
  or     %eax,%edx
  mov    -0x164(%rbp),%eax
  add    %eax,%edx
  mov    -0x178(%rbp),%eax
  rol    $0x5,%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x4,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  sub    $0x70e44324,%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x15c(%rbp),%eax
  add    $0x4,%eax
  cltq
  movl   $0x0,-0x150(%rbp,%rax,4)
  rorl   $0x2,-0x174(%rbp)
  addl   $0x5,-0x15c(%rbp)
L33:
  cmpl   $0x3b,-0x15c(%rbp)
  jle    L88
  mov    -0x164(%rbp),%eax
  mov    %eax,-0x168(%rbp)
  mov    -0x164(%rbp),%eax
  mov    %eax,-0x17c(%rbp)
  mov    -0x160(%rbp),%eax
  mov    %eax,-0x170(%rbp)
  movl   $0x3c,-0x15c(%rbp)
  jmp    L81
L30:
  mov    -0x17c(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x170(%rbp),%eax
  xor    -0x174(%rbp),%eax
  xor    -0x178(%rbp),%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x16c(%rbp),%eax
  add    %edx,%eax
  sub    $0x359d3e2a,%eax
  mov    %eax,-0x158(%rbp)
  rorl   $0x2,-0x178(%rbp)
  mov    -0x158(%rbp),%eax
  mov    %eax,-0x16c(%rbp)
  mov    -0x174(%rbp),%eax
  xor    -0x178(%rbp),%eax
  xor    -0x17c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x170(%rbp),%eax
  add    %eax,%edx
  mov    -0x158(%rbp),%eax
  rol    $0x5,%eax
  add    %edx,%eax
  sub    $0x359d3e2a,%eax
  mov    %eax,-0x170(%rbp)
  rorl   $0x2,-0x17c(%rbp)
  mov    -0x170(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x16c(%rbp),%eax
  xor    -0x178(%rbp),%eax
  xor    -0x17c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x2,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x174(%rbp),%eax
  add    %eax,%edx
  mov    -0x158(%rbp),%eax
  add    %edx,%eax
  sub    $0x359d3e2a,%eax
  mov    %eax,-0x158(%rbp)
  rorl   $0x2,-0x16c(%rbp)
  mov    -0x158(%rbp),%eax
  mov    %eax,-0x174(%rbp)
  mov    -0x158(%rbp),%eax
  rol    $0x5,%eax
  mov    %eax,%edx
  mov    -0x16c(%rbp),%eax
  xor    -0x170(%rbp),%eax
  xor    -0x17c(%rbp),%eax
  add    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x3,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x178(%rbp),%eax
  add    %edx,%eax
  sub    $0x359d3e2a,%eax
  mov    %eax,-0x158(%rbp)
  rorl   $0x2,-0x170(%rbp)
  mov    -0x16c(%rbp),%eax
  xor    -0x170(%rbp),%eax
  xor    -0x174(%rbp),%eax
  mov    %eax,%edx
  mov    -0x15c(%rbp),%eax
  add    $0x4,%eax
  cltq
  mov    -0x150(%rbp,%rax,4),%eax
  add    %edx,%eax
  mov    %eax,-0x154(%rbp)
  mov    -0x158(%rbp),%eax
  mov    %eax,-0x178(%rbp)
  roll   $0x5,-0x158(%rbp)
  rorl   $0x2,-0x174(%rbp)
  mov    -0x154(%rbp),%edx
  mov    -0x17c(%rbp),%eax
  add    %eax,%edx
  mov    -0x158(%rbp),%eax
  add    %edx,%eax
  sub    $0x359d3e2a,%eax
  mov    %eax,-0x17c(%rbp)
  addl   $0x5,-0x15c(%rbp)
L81:
  cmpl   $0x4f,-0x15c(%rbp)
  jle    L30
  mov    -0x190(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%edx
  mov    -0x17c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  mov    -0x190(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x190(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,%edx
  mov    -0x178(%rbp),%eax
  add    %eax,%edx
  mov    -0x190(%rbp),%rax
  add    $0x4,%rax
  mov    %edx,(%rax)
  mov    -0x190(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    %eax,%edx
  mov    -0x174(%rbp),%eax
  add    %eax,%edx
  mov    -0x190(%rbp),%rax
  add    $0x8,%rax
  mov    %edx,(%rax)
  mov    -0x190(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  mov    %eax,%edx
  mov    -0x170(%rbp),%eax
  add    %eax,%edx
  mov    -0x190(%rbp),%rax
  add    $0xc,%rax
  mov    %edx,(%rax)
  mov    -0x190(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  mov    %eax,%edx
  mov    -0x16c(%rbp),%eax
  add    %eax,%edx
  mov    -0x190(%rbp),%rax
  add    $0x10,%rax
  mov    %edx,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L43
  call   <__stack_chk_fail@plt>
L43:
  leave
  ret
```

assistant: ```c
void wsha1_transform(int *data, int *state) {
  unsigned W[80];
  unsigned A, B, C, D, E, F, G, H, M, N;
  int i;
  for (i = 0; i < 16; i++) {
    data[i] = (((((unsigned)(data[i])) & 0x000000FF) << 24) | ((((unsigned)(data[i])) & 0x0000FF00) << 8) | ((((unsigned)(data[i])) & 0x00FF0000) >> 8) | ((((unsigned)(data[i])) & 0xFF000000) >> 24));
  }
  memcpy(W, data, 64);
  for (i = 0; i < 64; i++) {
    W[i + 16] = ((((unsigned)(W[i + 13] ^ W[i + 8] ^ W[i + 0] ^ W[i + 2])) << (1)) | (((unsigned)(W[i + 13] ^ W[i + 8] ^ W[i + 0] ^ W[i + 2])) >> (32 - (1))));
  }
  M = state[0];
  B = state[1];
  C = state[2];
  N = state[3];
  E = state[4];
  for (i = 0; i < 20; i += 5) {
    E = E + ((((unsigned)((M))) << (5)) | (((unsigned)((M))) >> (32 - (5)))) + ((~B & (N)) | (B & (C))) + W[i + 0] + 0x5A827999;
    W[i + 0] = 0;
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30))));
    N = N + ((((unsigned)((E))) << (5)) | (((unsigned)((E))) >> (32 - (5)))) + ((~M & (C)) | (M & (B))) + W[i + 1] + 0x5A827999;
    W[i + 1] = 0;
    M = ((((unsigned)(M)) << (30)) | (((unsigned)(M)) >> (32 - (30))));
    C = C + ((((unsigned)((N))) << (5)) | (((unsigned)((N))) >> (32 - (5)))) + ((~E & (B)) | (E & (M))) + W[i + 2] + 0x5A827999;
    W[i + 2] = 0;
    E = ((((unsigned)(E)) << (30)) | (((unsigned)(E)) >> (32 - (30))));
    B = B + ((((unsigned)((C))) << (5)) | (((unsigned)((C))) >> (32 - (5)))) + ((~N & (M)) | (N & (E))) + W[i + 3] + 0x5A827999;
    W[i + 3] = 0;
    N = ((((unsigned)(N)) << (30)) | (((unsigned)(N)) >> (32 - (30))));
    M = M + ((((unsigned)((B))) << (5)) | (((unsigned)((B))) >> (32 - (5)))) + ((~C & (E)) | (C & (N))) + W[i + 4] + 0x5A827999;
    W[i + 4] = 0;
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
  }
  F = M;
  D = N;
  for (i = 20; i < 40; i += 5) {
    G = W[i] + ((((unsigned)(F)) << (5)) | (((unsigned)(F)) >> (32 - (5)))) + (D ^ C ^ B);
    D = D + ((((unsigned)(G + E + 0x6ED9EBA1)) << (5)) | (((unsigned)(G + E + 0x6ED9EBA1)) >> (32 - (5)))) + (C ^ ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30)))) ^ F) + W[i + 1] + 0x6ED9EBA1;
    C = C + ((((unsigned)(D)) << (5)) | (((unsigned)(D)) >> (32 - (5)))) + ((G + E + 0x6ED9EBA1) ^ ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30)))) ^ ((((unsigned)(F)) << (30)) | (((unsigned)(F)) >> (32 - (30))))) + W[i + 2] + 0x6ED9EBA1;
    E = ((((unsigned)(G + E + 0x6ED9EBA1)) << (30)) | (((unsigned)(G + E + 0x6ED9EBA1)) >> (32 - (30))));
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30)))) + ((((unsigned)(C)) << (5)) | (((unsigned)(C)) >> (32 - (5)))) + (E ^ D ^ ((((unsigned)(F)) << (30)) | (((unsigned)(F)) >> (32 - (30))))) + W[i + 3] + 0x6ED9EBA1;
    D = ((((unsigned)(D)) << (30)) | (((unsigned)(D)) >> (32 - (30))));
    F = ((((unsigned)(F)) << (30)) | (((unsigned)(F)) >> (32 - (30)))) + ((((unsigned)(B)) << (5)) | (((unsigned)(B)) >> (32 - (5)))) + (E ^ D ^ C) + W[i + 4] + 0x6ED9EBA1;
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
  }
  M = F;
  N = D;
  for (i = 40; i < 60; i += 5) {
    E = E + ((((N) | (C)) & B) | ((C) & (N))) + ((((unsigned)((M))) << (5)) | (((unsigned)((M))) >> (32 - (5)))) + W[i + 0] - 0x70E44324;
    W[i + 0] = 0;
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30))));
    N = N + ((((C) | (B)) & M) | ((B) & (C))) + ((((unsigned)((E))) << (5)) | (((unsigned)((E))) >> (32 - (5)))) + W[i + 1] - 0x70E44324;
    W[i + 1] = 0;
    M = ((((unsigned)(M)) << (30)) | (((unsigned)(M)) >> (32 - (30))));
    C = C + ((((B) | (M)) & E) | ((M) & (B))) + ((((unsigned)((N))) << (5)) | (((unsigned)((N))) >> (32 - (5)))) + W[i + 2] - 0x70E44324;
    W[i + 2] = 0;
    E = ((((unsigned)(E)) << (30)) | (((unsigned)(E)) >> (32 - (30))));
    B = B + ((((M) | (E)) & N) | ((E) & (M))) + ((((unsigned)((C))) << (5)) | (((unsigned)((C))) >> (32 - (5)))) + W[i + 3] - 0x70E44324;
    W[i + 3] = 0;
    N = ((((unsigned)(N)) << (30)) | (((unsigned)(N)) >> (32 - (30))));
    M = M + ((((E) | (N)) & C) | ((N) & (E))) + ((((unsigned)((B))) << (5)) | (((unsigned)((B))) >> (32 - (5)))) + W[i + 4] - 0x70E44324;
    W[i + 4] = 0;
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
  }
  F = M;
  A = M;
  D = N;
  for (i = 60; i < 80; i += 5) {
    G = ((((unsigned)(A)) << (5)) | (((unsigned)(A)) >> (32 - (5)))) + (D ^ C ^ B) + W[i + 0] + E - 0x359D3E2A;
    B = ((((unsigned)(B)) << (30)) | (((unsigned)(B)) >> (32 - (30))));
    E = G;
    D = (C ^ B ^ A) + W[i + 1] + D + ((((unsigned)(G)) << (5)) | (((unsigned)(G)) >> (32 - (5)))) - 0x359D3E2A;
    A = ((((unsigned)(A)) << (30)) | (((unsigned)(A)) >> (32 - (30))));
    G = ((((unsigned)(D)) << (5)) | (((unsigned)(D)) >> (32 - (5))));
    G = (E ^ B ^ A) + W[i + 2] + C + G - 0x359D3E2A;
    E = ((((unsigned)(E)) << (30)) | (((unsigned)(E)) >> (32 - (30))));
    C = G;
    G = ((((unsigned)(G)) << (5)) | (((unsigned)(G)) >> (32 - (5)))) + (E ^ D ^ A) + W[i + 3] + B - 0x359D3E2A;
    D = ((((unsigned)(D)) << (30)) | (((unsigned)(D)) >> (32 - (30))));
    H = (E ^ D ^ C) + W[i + 4];
    B = G;
    G = ((((unsigned)(G)) << (5)) | (((unsigned)(G)) >> (32 - (5))));
    C = ((((unsigned)(C)) << (30)) | (((unsigned)(C)) >> (32 - (30))));
    A = H + A + G - 0x359D3E2A;
  }
  state[0] += A;
  state[1] += B;
  state[2] += C;
  state[3] += D;
  state[4] += E;
}
```