// File: /workspace/github_cpp_makefile_star2_O1/vsklad[P]cgen/./acl/sha1.hpp
// Function: acl::SHA1<bal::Literal<bal::Anf>>::execute(bal::Ref<bal::GF2NElement<32ul, bal::Literal<bal::Anf>>>*, unsigned long, bal::Ref<bal::GF2NElement<32ul, bal::Literal<bal::Anf>>> (&) [5], bal::Tracer<32ul, bal::Literal<bal::Anf>>&, unsigned int)
void execute(Ref<Word> *M,
                     const std::size_t M_size, // size in words
                     Ref<Word> (&H)[SHA1_HASH_SIZE],
                     Tracer<SHA1_WORD_SIZE, BIT>& tracer,
                     const uint32_t rounds = SHA1_ROUNDS_NUMBER) {
            
            assert(M_size > 0 && (M_size % SHA1_MESSAGE_BLOCK_SIZE) == 0);
            assert(rounds > 0 && rounds <= SHA1_ROUNDS_NUMBER);
            
            const Ref<Word> K[] = { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 };
            
            H[0] = 0x67452301;
            H[1] = 0xEFCDAB89;
            H[2] = 0x98BADCFE;
            H[3] = 0x10325476;
            H[4] = 0xC3D2E1F0;
            
            for (std::size_t block_index = 0; block_index < M_size / SHA1_MESSAGE_BLOCK_SIZE; block_index++) {
                Ref<Word> W[rounds];
                
                for (unsigned int t = 0; t < _min(SHA1_MESSAGE_BLOCK_SIZE, rounds); t++) {
                    W[t] = M[t];
                    tracer.trace("M", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, M[t]);
                    tracer.trace("W", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, M[t]);
                };
                
                for (unsigned int t = SHA1_MESSAGE_BLOCK_SIZE; t < rounds; t++) {
                    Ref<Word> eor_args[] = { W[t-3], W[t-8], W[t-14], W[t-16] };
                    W[t] = rotl(eor(eor_args), 1);
                    tracer.trace("W", t, W[t]);
                };
                
                Ref<Word> a = H[0];
                Ref<Word> b = H[1];
                Ref<Word> c = H[2];
                Ref<Word> d = H[3];
                Ref<Word> e = H[4];
                
                for (unsigned int t = 0; t < rounds; t++) {
                    Ref<Word> ft = f(t, b, c, d);
                    tracer.trace("F", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, ft);
                    
                    Ref<Word> temp_args[] = { rotl(a, 5), ft, e, W[t], K[t / 20] };
                    Ref<Word> temp = add(temp_args);
                    
                    e = d;
                    d = c;
                    c = rotl(b, 30);
                    b = a;
                    a = temp;
                    
                    tracer.trace("A", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, a);
                };
                
                H[0] = H[0] + a;
                H[1] = H[1] + b;
                H[2] = H[2] + c;
                H[3] = H[3] + d;
                H[4] = H[4] + e;
                
                M += SHA1_MESSAGE_BLOCK_SIZE;
            };
            
            trace(tracer, "H", H);
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
movq %rsi, -0x118(%rbp)
movq %rdi, -0x138(%rbp)
testq %rdx, %rdx
je 0x2edcf
movl %edx, %eax
andl $0xf, %eax
jne 0x2edcf
leal -0x1(%r9), %eax
cmpl $0x50, %eax
jae 0x2edee
movq %r8, %rbx
movq %rcx, -0xa8(%rbp)
movq %r9, -0x40(%rbp)
movq %rdx, %r12
movq $0x0, -0xe0(%rbp)
xorl %edi, %edi
movl $0x5a827999, %esi       # imm = 0x5A827999
callq 0x30702
leaq -0xe0(%rbp), %rdi
movq %rax, %rsi
callq 0x2f3bc
leaq -0xd8(%rbp), %r14
movq $0x0, (%r14)
xorl %edi, %edi
movl $0x6ed9eba1, %esi       # imm = 0x6ED9EBA1
callq 0x30702
movq %r14, %rdi
movq %rax, %rsi
callq 0x2f3bc
leaq -0xd0(%rbp), %r14
movq $0x0, (%r14)
xorl %edi, %edi
movl $0x8f1bbcdc, %esi       # imm = 0x8F1BBCDC
callq 0x307b2
movq %r14, %rdi
movq %rax, %rsi
callq 0x2f3bc
leaq -0xc8(%rbp), %r14
movq $0x0, (%r14)
xorl %edi, %edi
movl $0xca62c1d6, %esi       # imm = 0xCA62C1D6
callq 0x307b2
movq %r14, %rdi
movq %rax, %rsi
callq 0x2f3bc
movq -0xa8(%rbp), %r14
movq (%r14), %rdi
movl $0x67452301, %esi       # imm = 0x67452301
callq 0x30702
movq %r14, %rdi
movq %rax, %rsi
callq 0x2f3bc
movq 0x8(%r14), %rdi
movl $0xefcdab89, %esi       # imm = 0xEFCDAB89
callq 0x307b2
movq %r14, %r15
movq %r12, %r14
leaq 0x8(%r15), %rdi
movq %rdi, -0x108(%rbp)
movq %rax, %rsi
callq 0x2f3bc
movq 0x10(%r15), %rdi
movl $0x98badcfe, %esi       # imm = 0x98BADCFE
callq 0x307b2
leaq 0x10(%r15), %rdi
movq %rdi, -0x110(%rbp)
movq %rax, %rsi
callq 0x2f3bc
movq 0x18(%r15), %rdi
movl $0x10325476, %esi       # imm = 0x10325476
callq 0x30702
movq %rbx, -0x68(%rbp)
leaq 0x18(%r15), %rdi
movq %rdi, -0x100(%rbp)
movq %rax, %rsi
callq 0x2f3bc
movq 0x20(%r15), %rdi
movl $0xc3d2e1f0, %esi       # imm = 0xC3D2E1F0
callq 0x307b2
leaq 0x20(%r15), %rdi
movq %rdi, -0xf8(%rbp)
movq %rax, %rsi
callq 0x2f3bc
shrq $0x4, %r14
movq -0x40(%rbp), %rdx
movl %edx, %eax
cmpl $0x10, %edx
movl $0x10, %ecx
cmovbl %edx, %ecx
leaq (,%rax,8), %rdx
movq %rdx, -0xf0(%rbp)
shll $0x3, %ecx
movq %rcx, -0x140(%rbp)
movq $0x0, -0xe8(%rbp)
movq %rax, -0xb8(%rbp)
leaq 0xf(,%rax,8), %rax
andq $-0x10, %rax
movq %rax, -0x128(%rbp)
movq $0x0, -0xb0(%rbp)
movq %r14, -0x120(%rbp)
movq %rsp, -0x130(%rbp)
movq %rsp, %r14
subq -0x128(%rbp), %r14
movq %r14, %rsp
movq %r14, %rdi
xorl %esi, %esi
movq -0xf0(%rbp), %rdx
callq 0xc160
cmpl $0x0, -0x40(%rbp)
je 0x2e6f8
movq -0xe8(%rbp), %rbx
xorl %r15d, %r15d
movq -0x118(%rbp), %rax
leaq (%rax,%r15), %r12
movq %r14, %r13
leaq (%r14,%r15), %rdi
movq (%rax,%r15), %rsi
callq 0x2f3bc
movq -0x68(%rbp), %r14
movq (%r14), %rax
movq %r14, %rdi
leaq 0x1c2d5(%rip), %rsi     # 0x4a99b
movq %rbx, %rdx
movq %r12, %rcx
callq *0x8(%rax)
movq (%r14), %rax
movq %r14, %rdi
leaq 0x19235(%rip), %rsi     # 0x47911
movq %rbx, %rdx
movq %r12, %rcx
callq *0x8(%rax)
addq $0x8, %r15
incq %rbx
cmpq %r15, -0x140(%rbp)
movq %r13, %r14
jne 0x2e69a
cmpl $0x11, -0x40(%rbp)
jb 0x2e856
movl $0x10, %r12d
movq -0x18(%r14,%r12,8), %rax
movq %rax, -0xa0(%rbp)
testq %rax, %rax
je 0x2e724
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x40(%r14,%r12,8), %rax
movq %rax, -0x98(%rbp)
testq %rax, %rax
leaq -0xa0(%rbp), %rdx
je 0x2e747
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x70(%r14,%r12,8), %rax
movq %rax, -0x90(%rbp)
testq %rax, %rax
je 0x2e763
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x80(%r14,%r12,8), %rax
movq %rax, -0x88(%rbp)
testq %rax, %rax
je 0x2e77f
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movl $0x4, %ecx
leaq -0x30(%rbp), %rdi
xorl %esi, %esi
callq 0x309de
movq -0x30(%rbp), %rdx
leaq -0x38(%rbp), %rdi
xorl %esi, %esi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x30899
movq -0x38(%rbp), %rax
movq %rax, (%r14,%r12,8)
movq $0x0, -0x38(%rbp)
movq -0x30(%rbp), %rax
testq %rax, %rax
je 0x2e7e5
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2e7d8
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2e7dd
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x30(%rbp)
leaq (%r14,%r12,8), %rcx
movq -0x68(%rbp), %rdi
movq (%rdi), %rax
leaq 0x1911a(%rip), %rsi     # 0x47911
movq %r12, %rdx
callq *0x8(%rax)
movl $0x18, %ebx
movq -0xa0(%rbp,%rbx), %rax
testq %rax, %rax
je 0x2e83c
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2e82b
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2e830
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0xa0(%rbp,%rbx)
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x2e802
incq %r12
cmpq -0xb8(%rbp), %r12
jne 0x2e708
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x38(%rbp)
testq %rax, %rax
movq -0x110(%rbp), %rbx
je 0x2e87b
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x108(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
testq %rax, %rax
je 0x2e899
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq (%rbx), %rax
movq %rax, -0x50(%rbp)
testq %rax, %rax
leaq -0x60(%rbp), %r15
je 0x2e8b4
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x100(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
testq %rax, %rax
je 0x2e8d2
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0xf8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
testq %rax, %rax
je 0x2e8f0
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
cmpl $0x0, -0x40(%rbp)
je 0x2eb20
movq -0xb0(%rbp), %r13
shlq $0x4, %r13
xorl %r12d, %r12d
movq %r15, %rdi
movq -0x138(%rbp), %rsi
movl %r12d, %edx
leaq -0x30(%rbp), %rcx
leaq -0x50(%rbp), %r8
leaq -0x48(%rbp), %r9
callq 0x305d2
leaq (%r12,%r13), %rbx
movq -0x68(%rbp), %rdi
movq (%rdi), %rax
leaq 0x18fa0(%rip), %rsi     # 0x478d8
movq %rbx, %rdx
movq %r15, %rcx
callq *0x8(%rax)
movq -0x38(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
movl $0xfffffffb, %ecx       # imm = 0xFFFFFFFB
callq 0x30899
movq -0x60(%rbp), %rax
movq %rax, -0x98(%rbp)
testq %rax, %rax
je 0x2e973
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x58(%rbp), %rax
movq %rax, -0x90(%rbp)
testq %rax, %rax
je 0x2e98e
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq (%r14,%r12,8), %rax
movq %rax, -0x88(%rbp)
testq %rax, %rax
je 0x2e9a9
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movl %r12d, %eax
movl $0xcccccccd, %ecx       # imm = 0xCCCCCCCD
imulq %rcx, %rax
shrq $0x21, %rax
andl $-0x8, %eax
movq -0xe0(%rbp,%rax), %rax
movq %rax, -0x80(%rbp)
testq %rax, %rax
je 0x2e9d8
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
leaq -0x70(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x30665
movq -0x48(%rbp), %rsi
leaq -0x58(%rbp), %rdi
callq 0x2f3bc
movq -0x50(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x2f3bc
movq -0x30(%rbp), %rdx
leaq -0x148(%rbp), %rdi
xorl %esi, %esi
movl $0xffffffe2, %ecx       # imm = 0xFFFFFFE2
callq 0x30899
movq -0x148(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x38(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x2f3bc
movq -0x70(%rbp), %rsi
leaq -0x38(%rbp), %r15
movq %r15, %rdi
callq 0x2f3bc
movq -0x68(%rbp), %rdi
movq (%rdi), %rax
leaq 0x1c935(%rip), %rsi     # 0x4b384
movq %rbx, %rdx
movq %r15, %rcx
callq *0x8(%rax)
movq -0x70(%rbp), %rax
testq %rax, %rax
leaq -0x60(%rbp), %r15
je 0x2ea8e
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ea81
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ea86
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x70(%rbp)
movl $0x20, %ebx
movq -0xa0(%rbp,%rbx), %rax
testq %rax, %rax
je 0x2eacd
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2eabc
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2eac1
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0xa0(%rbp,%rbx)
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x2ea93
movq -0x60(%rbp), %rax
testq %rax, %rax
movq -0x110(%rbp), %rbx
je 0x2eb10
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2eb03
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2eb08
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x60(%rbp)
incq %r12
cmpq -0xb8(%rbp), %r12
jne 0x2e908
movq -0xa8(%rbp), %r15
movq (%r15), %rdx
movq -0x38(%rbp), %rcx
leaq -0xa0(%rbp), %r12
movq %r12, %rdi
xorl %esi, %esi
callq 0x31662
movq -0xa0(%rbp), %rax
movq %rax, (%r15)
movq 0x8(%r15), %rdx
movq -0x30(%rbp), %rcx
movq %r12, %rdi
xorl %esi, %esi
callq 0x31662
movq -0xa0(%rbp), %rax
movq -0x108(%rbp), %rcx
movq %rax, (%rcx)
movq (%rbx), %rdx
movq -0x50(%rbp), %rcx
movq %r12, %rdi
xorl %esi, %esi
callq 0x31662
movq -0xa0(%rbp), %rax
movq %rax, (%rbx)
movq -0x100(%rbp), %rbx
movq (%rbx), %rdx
movq -0x48(%rbp), %rcx
movq %r12, %rdi
xorl %esi, %esi
callq 0x31662
movq -0xa0(%rbp), %rax
movq %rax, (%rbx)
movq -0xf8(%rbp), %rbx
movq (%rbx), %rdx
movq -0x58(%rbp), %rcx
movq %r12, %rdi
xorl %esi, %esi
callq 0x31662
movq -0xa0(%rbp), %rax
movq %rax, (%rbx)
movq -0x58(%rbp), %rax
testq %rax, %rax
je 0x2ebfd
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ebf0
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ebf5
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x58(%rbp)
movq -0x48(%rbp), %rax
testq %rax, %rax
je 0x2ec2f
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ec22
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ec27
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x48(%rbp)
movq -0x50(%rbp), %rax
testq %rax, %rax
je 0x2ec61
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ec54
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ec59
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x50(%rbp)
movq -0x30(%rbp), %rax
testq %rax, %rax
je 0x2ec93
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ec86
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ec8b
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x30(%rbp)
movq -0x38(%rbp), %rax
testq %rax, %rax
je 0x2ecc5
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ecb8
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ecbd
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x38(%rbp)
cmpl $0x0, -0x40(%rbp)
je 0x2ed0c
movq -0xf0(%rbp), %rbx
movq -0x8(%r14,%rbx), %rax
testq %rax, %rax
je 0x2ed06
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ecf8
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ecfd
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x8(%r14,%rbx)
addq $-0x8, %rbx
jne 0x2ecd2
movq -0x130(%rbp), %rsp
subq $-0x80, -0x118(%rbp)
movq -0xb0(%rbp), %rcx
incq %rcx
addq $0x10, -0xe8(%rbp)
movq -0x120(%rbp), %r14
movq %rcx, -0xb0(%rbp)
cmpq %r14, %rcx
jne 0x2e665
xorl %ebx, %ebx
leaq 0x1c639(%rip), %r14     # 0x4b386
movq -0x68(%rbp), %r15
movq -0xa8(%rbp), %r12
movq (%r15), %rax
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
movq %r12, %rcx
callq *0x8(%rax)
incq %rbx
addq $0x8, %r12
cmpq $0x5, %rbx
jne 0x2ed58
movl $0x18, %ebx
movq -0xe0(%rbp,%rbx), %rax
testq %rax, %rax
je 0x2edb6
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2eda5
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2edaa
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0xe0(%rbp,%rbx)
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x2ed7c
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1c49a(%rip), %rdi     # 0x4b270
leaq 0x1c4c9(%rip), %rsi     # 0x4b2a6
leaq 0x1c4d1(%rip), %rcx     # 0x4b2b5
movl $0x34, %edx
callq 0xc180
leaq 0x1c564(%rip), %rdi     # 0x4b359
leaq 0x1c4aa(%rip), %rsi     # 0x4b2a6
leaq 0x1c4b2(%rip), %rcx     # 0x4b2b5
movl $0x35, %edx
callq 0xc180
jmp 0x2ee62
jmp 0x2ee62
jmp 0x2ee62
jmp 0x2ee62
jmp 0x2ee62
jmp 0x2ee1b
jmp 0x2ee1b
movq %rax, %rbx
jmp 0x2ee2a
movq %rax, %rbx
leaq -0xe0(%rbp), %r14
leaq -0xe0(%rbp), %r15
cmpq %r14, %r15
jne 0x2ee3e
movq %rbx, %rdi
callq 0xc4e0
addq $-0x8, %r14
movq (%r14), %rdi
testq %rdi, %rdi
jne 0x2ee58
leaq -0x8(%r14), %rax
cmpq %r15, %r14
movq %rax, %r14
jne 0x2ee42
jmp 0x2ee36
movq %r14, %rsi
callq 0xca18
jmp 0x2ee4a
movq %rax, %rbx
jmp 0x2f051
jmp 0x2ef4c
jmp 0x2ef4c
jmp 0x2ef4c
jmp 0x2ef4c
jmp 0x2ef4c
jmp 0x2ee85
movq %rax, %rbx
jmp 0x2ee9f
movq %rax, %rbx
movq -0x30(%rbp), %rdi
testq %rdi, %rdi
je 0x2ee9f
leaq -0x30(%rbp), %rsi
callq 0xc93c
movl $0x18, %r15d
movq -0xa0(%rbp,%r15), %rdi
testq %rdi, %rdi
jne 0x2eec1
addq $-0x8, %r15
cmpq $-0x8, %r15
jne 0x2eea5
jmp 0x2f049
leaq (%r15,%rbp), %rsi
addq $-0xa0, %rsi
callq 0xc9aa
jmp 0x2eeb2
jmp 0x2eed5
movq %rax, %rbx
movq -0x60(%rbp), %rax
testq %rax, %rax
je 0x2ef4f
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2eefd
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ef02
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x60(%rbp)
jmp 0x2ef4f
jmp 0x2ef0e
movq %rax, %rbx
movq -0x70(%rbp), %rax
testq %rax, %rax
je 0x2f0b3
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ef3a
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ef3f
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x70(%rbp)
jmp 0x2f0b3
movq %rax, %rbx
movq -0x58(%rbp), %rax
testq %rax, %rax
je 0x2ef81
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2ef74
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2ef79
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x58(%rbp)
movq -0x48(%rbp), %rax
testq %rax, %rax
je 0x2efb3
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2efa6
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2efab
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x48(%rbp)
movq -0x50(%rbp), %rax
testq %rax, %rax
je 0x2efe5
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2efd8
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2efdd
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x50(%rbp)
movq -0x30(%rbp), %rax
testq %rax, %rax
je 0x2f017
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2f00a
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2f00f
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x30(%rbp)
movq -0x38(%rbp), %rax
testq %rax, %rax
je 0x2f049
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x8(%rax,%rcx), %eax
cmpl $0x1, %eax
ja 0x2f03c
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2f041
decl %eax
movl %eax, 0x8(%rdi)
movq $0x0, -0x38(%rbp)
movq -0x40(%rbp), %rax
testl %eax, %eax
jne 0x2f085
movl $0x18, %r14d
movq -0xe0(%rbp,%r14), %rdi
testq %rdi, %rdi
jne 0x2f073
addq $-0x8, %r14
cmpq $-0x8, %r14
jne 0x2f057
jmp 0x2ee36
leaq (%r14,%rbp), %rsi
addq $-0xe0, %rsi
callq 0xca4f
jmp 0x2f064
addq $-0x8, %r14
movq -0xb8(%rbp), %r15
shlq $0x3, %r15
movq (%r14,%r15), %rdi
testq %rdi, %rdi
jne 0x2f0a5
addq $-0x8, %r15
jne 0x2f094
jmp 0x2f051
leaq (%r14,%r15), %rsi
callq 0xc9e1
jmp 0x2f09d
movq %rax, %rbx
movl $0x20, %r15d
movq -0xa0(%rbp,%r15), %rdi
testq %rdi, %rdi
jne 0x2f0d5
addq $-0x8, %r15
cmpq $-0x8, %r15
jne 0x2f0b9
jmp 0x2eed8
leaq (%r15,%rbp), %rsi
addq $-0xa0, %rsi
callq 0xc973
jmp 0x2f0c6
movq %rax, %rbx
movq -0x40(%rbp), %rax
movq %r13, %r14
jmp 0x2f04d