// File: theuni[P]libutreexo/crypto/sha256.cpp
// Function: void (anonymous namespace)::TransformD64Wrapper<&sha256_shani::Transform(unsigned int*, unsigned char const*, unsigned long)>(unsigned char*, unsigned char const*)
void TransformD64Wrapper(unsigned char* out, const unsigned char* in)
{
    uint32_t s[8];
    static const unsigned char padding1[64] = {
        0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0
    };
    unsigned char buffer2[64] = {
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0
    };
    sha256::Initialize(s);
    tr(s, in, 1);
    tr(s, padding1, 1);
    WriteBE32(buffer2 + 0, s[0]);
    WriteBE32(buffer2 + 4, s[1]);
    WriteBE32(buffer2 + 8, s[2]);
    WriteBE32(buffer2 + 12, s[3]);
    WriteBE32(buffer2 + 16, s[4]);
    WriteBE32(buffer2 + 20, s[5]);
    WriteBE32(buffer2 + 24, s[6]);
    WriteBE32(buffer2 + 28, s[7]);
    sha256::Initialize(s);
    tr(s, buffer2, 1);
    WriteBE32(out + 0, s[0]);
    WriteBE32(out + 4, s[1]);
    WriteBE32(out + 8, s[2]);
    WriteBE32(out + 12, s[3]);
    WriteBE32(out + 16, s[4]);
    WriteBE32(out + 20, s[5]);
    WriteBE32(out + 24, s[6]);
    WriteBE32(out + 28, s[7]);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x70(%rbp), %rdi
xorl %esi, %esi
movl $0x40, %edx
callq 0x1060
movb $-0x80, -0x50(%rbp)
movb $0x1, -0x32(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x1bb0
leaq -0x30(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x1, %edx
callq 0x286d0
leaq -0x30(%rbp), %rdi
leaq 0x50ec2(%rip), %rsi     # 0x525b0
movl $0x1, %edx
callq 0x286d0
leaq -0x70(%rbp), %rdi
movl -0x30(%rbp), %esi
callq 0x1ec0
leaq -0x70(%rbp), %rdi
addq $0x4, %rdi
movl -0x2c(%rbp), %esi
callq 0x1ec0
leaq -0x70(%rbp), %rdi
addq $0x8, %rdi
movl -0x28(%rbp), %esi
callq 0x1ec0
leaq -0x70(%rbp), %rdi
addq $0xc, %rdi
movl -0x24(%rbp), %esi
callq 0x1ec0
leaq -0x70(%rbp), %rdi
addq $0x10, %rdi
movl -0x20(%rbp), %esi
callq 0x1ec0
leaq -0x70(%rbp), %rdi
addq $0x14, %rdi
movl -0x1c(%rbp), %esi
callq 0x1ec0
leaq -0x70(%rbp), %rdi
addq $0x18, %rdi
movl -0x18(%rbp), %esi
callq 0x1ec0
leaq -0x70(%rbp), %rdi
addq $0x1c, %rdi
movl -0x14(%rbp), %esi
callq 0x1ec0
leaq -0x30(%rbp), %rdi
callq 0x1bb0
leaq -0x30(%rbp), %rdi
leaq -0x70(%rbp), %rsi
movl $0x1, %edx
callq 0x286d0
movq -0x8(%rbp), %rdi
movl -0x30(%rbp), %esi
callq 0x1ec0
movq -0x8(%rbp), %rdi
addq $0x4, %rdi
movl -0x2c(%rbp), %esi
callq 0x1ec0
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
movl -0x28(%rbp), %esi
callq 0x1ec0
movq -0x8(%rbp), %rdi
addq $0xc, %rdi
movl -0x24(%rbp), %esi
callq 0x1ec0
movq -0x8(%rbp), %rdi
addq $0x10, %rdi
movl -0x20(%rbp), %esi
callq 0x1ec0
movq -0x8(%rbp), %rdi
addq $0x14, %rdi
movl -0x1c(%rbp), %esi
callq 0x1ec0
movq -0x8(%rbp), %rdi
addq $0x18, %rdi
movl -0x18(%rbp), %esi
callq 0x1ec0
movq -0x8(%rbp), %rdi
addq $0x1c, %rdi
movl -0x14(%rbp), %esi
callq 0x1ec0
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)