// File: /workspace/github_cpp_makefile_star2_O2/vsklad[P]cgen/./acl/sha256.hpp
// Function: acl::SHA256<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>>> (&) [8], 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)[SHA256_HASH_SIZE],
                     Tracer<SHA256_WORD_SIZE, BIT>& tracer,
                     const uint32_t rounds = ROUNDS_NUMBER) {
            
            assert(M_size > 0 && (M_size % SHA256_MESSAGE_BLOCK_SIZE) == 0);
            assert(rounds > 0 && rounds <= SHA256_ROUNDS_NUMBER);
            
            const Ref<Word> K[SHA256_ROUNDS_NUMBER] = {
                0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
                0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
                0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
                0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
                0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
                0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
                0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
                0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
                0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
                0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
                0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
                0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
                0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
                0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
                0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
                0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
            };
            
            H[0] = 0x6a09e667;
            H[1] = 0xbb67ae85;
            H[2] = 0x3c6ef372;
            H[3] = 0xa54ff53a;
            H[4] = 0x510e527f;
            H[5] = 0x9b05688c;
            H[6] = 0x1f83d9ab;
            H[7] = 0x5be0cd19;
            
            for (std::size_t block_index = 0; block_index < M_size / SHA256_MESSAGE_BLOCK_SIZE; block_index++) {
                Ref<Word> W[rounds];
                
                for (unsigned int i = 0; i < _min(SHA256_MESSAGE_BLOCK_SIZE, rounds); i++) {
                    W[i] = M[i];
                    tracer.trace("M", block_index * SHA256_MESSAGE_BLOCK_SIZE + i, M[i]);
                    tracer.trace("W", block_index * SHA256_MESSAGE_BLOCK_SIZE + i, M[i]);
                };
                
                for (unsigned int i = SHA256_MESSAGE_BLOCK_SIZE; i < rounds; i++) {
                    Ref<Word> args[] = { ss1(W[i-2]), W[i-7], ss0(W[i-15]), W[i-16] };
                    W[i] = add(args);
                    tracer.trace("W", block_index * SHA256_MESSAGE_BLOCK_SIZE + i, W[i]);
                };
                
                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];
                Ref<Word> f = H[5];
                Ref<Word> g = H[6];
                Ref<Word> h = H[7];
                
                for (unsigned int i = 0; i < rounds; i++) {
                    Ref<Word> args[] = { h, sl1(e), ch(e, f, g), K[i], W[i] };
                    Ref<Word> t1 = add(args);
                    Ref<Word> t2 = sl0(a) + maj(a, b, c);
                    
                    h = g;
                    g = f;
                    f = e;
                    e = d + t1;
                    d = c;
                    c = b;
                    b = a;
                    a = t1 + t2;
                    
                    tracer.trace("A", block_index * SHA256_MESSAGE_BLOCK_SIZE + i, a);
                };
                
                H[0] = a + H[0];
                H[1] = b + H[1];
                H[2] = c + H[2];
                H[3] = d + H[3];
                H[4] = e + H[4];
                H[5] = f + H[5];
                H[6] = g + H[6];
                H[7] = h + H[7];
                
                M += SHA256_MESSAGE_BLOCK_SIZE;
            };
                
            trace(tracer, "H", H);
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3f8, %rsp            # imm = 0x3F8
movq %rsi, -0x118(%rbp)
testq %rdx, %rdx
je 0x27903
movl %edx, %eax
andl $0xf, %eax
jne 0x27903
movq %rdi, -0xb8(%rbp)
movq %r9, -0x30(%rbp)
leal -0x1(%r9), %eax
cmpl $0x40, %eax
jae 0x2791c
movq %rcx, %rbx
movq %r8, %r14
movq %rdx, %r12
leaq -0x60(%rbp), %rsi
movl $0x428a2f98, (%rsi)     # imm = 0x428A2F98
leaq -0x420(%rbp), %r13
movq %r13, %rdi
callq 0x25600
leaq -0x418(%rbp), %r15
leaq -0x38(%rbp), %rsi
movl $0x71374491, (%rsi)     # imm = 0x71374491
movq %r15, %rdi
callq 0x25600
leaq -0x410(%rbp), %r15
leaq -0x90(%rbp), %rsi
movl $0xb5c0fbcf, (%rsi)     # imm = 0xB5C0FBCF
movq %r15, %rdi
callq 0x2560e
leaq -0x408(%rbp), %r15
leaq -0x88(%rbp), %rsi
movl $0xe9b5dba5, (%rsi)     # imm = 0xE9B5DBA5
movq %r15, %rdi
callq 0x2560e
leaq -0x400(%rbp), %r15
leaq -0xa8(%rbp), %rsi
movl $0x3956c25b, (%rsi)     # imm = 0x3956C25B
movq %r15, %rdi
callq 0x25600
leaq -0x3f8(%rbp), %r15
leaq -0x80(%rbp), %rsi
movl $0x59f111f1, (%rsi)     # imm = 0x59F111F1
movq %r15, %rdi
callq 0x25600
leaq -0x3f0(%rbp), %r15
leaq -0x78(%rbp), %rsi
movl $0x923f82a4, (%rsi)     # imm = 0x923F82A4
movq %r15, %rdi
callq 0x2560e
leaq -0x3e8(%rbp), %r15
leaq -0x70(%rbp), %rsi
movl $0xab1c5ed5, (%rsi)     # imm = 0xAB1C5ED5
movq %r15, %rdi
callq 0x2560e
leaq -0x3e0(%rbp), %r15
leaq -0xa0(%rbp), %rsi
movl $0xd807aa98, (%rsi)     # imm = 0xD807AA98
movq %r15, %rdi
callq 0x2560e
leaq -0x3d8(%rbp), %r15
leaq -0xc8(%rbp), %rsi
movl $0x12835b01, (%rsi)     # imm = 0x12835B01
movq %r15, %rdi
callq 0x25600
leaq -0x3d0(%rbp), %r15
leaq -0xc0(%rbp), %rsi
movl $0x243185be, (%rsi)     # imm = 0x243185BE
movq %r15, %rdi
callq 0x25600
leaq -0x3c8(%rbp), %r15
leaq -0x68(%rbp), %rsi
movl $0x550c7dc3, (%rsi)     # imm = 0x550C7DC3
movq %r15, %rdi
callq 0x25600
leaq -0x3c0(%rbp), %r15
leaq -0x128(%rbp), %rsi
movl $0x72be5d74, (%rsi)     # imm = 0x72BE5D74
movq %r15, %rdi
callq 0x25600
leaq -0x3b8(%rbp), %r15
leaq -0x21c(%rbp), %rsi
movl $0x80deb1fe, (%rsi)     # imm = 0x80DEB1FE
movq %r15, %rdi
callq 0x2560e
leaq -0x3b0(%rbp), %r15
leaq -0x218(%rbp), %rsi
movl $0x9bdc06a7, (%rsi)     # imm = 0x9BDC06A7
movq %r15, %rdi
callq 0x2560e
leaq -0x3a8(%rbp), %r15
leaq -0x214(%rbp), %rsi
movl $0xc19bf174, (%rsi)     # imm = 0xC19BF174
movq %r15, %rdi
callq 0x2560e
leaq -0x3a0(%rbp), %r15
leaq -0x210(%rbp), %rsi
movl $0xe49b69c1, (%rsi)     # imm = 0xE49B69C1
movq %r15, %rdi
callq 0x2560e
leaq -0x398(%rbp), %r15
leaq -0x20c(%rbp), %rsi
movl $0xefbe4786, (%rsi)     # imm = 0xEFBE4786
movq %r15, %rdi
callq 0x2560e
leaq -0x390(%rbp), %r15
leaq -0x208(%rbp), %rsi
movl $0xfc19dc6, (%rsi)      # imm = 0xFC19DC6
movq %r15, %rdi
callq 0x25600
leaq -0x388(%rbp), %r15
leaq -0x204(%rbp), %rsi
movl $0x240ca1cc, (%rsi)     # imm = 0x240CA1CC
movq %r15, %rdi
callq 0x25600
leaq -0x380(%rbp), %r15
leaq -0x200(%rbp), %rsi
movl $0x2de92c6f, (%rsi)     # imm = 0x2DE92C6F
movq %r15, %rdi
callq 0x25600
leaq -0x378(%rbp), %r15
leaq -0x1fc(%rbp), %rsi
movl $0x4a7484aa, (%rsi)     # imm = 0x4A7484AA
movq %r15, %rdi
callq 0x25600
leaq -0x370(%rbp), %r15
leaq -0x1f8(%rbp), %rsi
movl $0x5cb0a9dc, (%rsi)     # imm = 0x5CB0A9DC
movq %r15, %rdi
callq 0x25600
leaq -0x368(%rbp), %r15
leaq -0x1f4(%rbp), %rsi
movl $0x76f988da, (%rsi)     # imm = 0x76F988DA
movq %r15, %rdi
callq 0x25600
leaq -0x360(%rbp), %r15
leaq -0x1f0(%rbp), %rsi
movl $0x983e5152, (%rsi)     # imm = 0x983E5152
movq %r15, %rdi
callq 0x2560e
leaq -0x358(%rbp), %r15
leaq -0x1ec(%rbp), %rsi
movl $0xa831c66d, (%rsi)     # imm = 0xA831C66D
movq %r15, %rdi
callq 0x2560e
leaq -0x350(%rbp), %r15
leaq -0x1e8(%rbp), %rsi
movl $0xb00327c8, (%rsi)     # imm = 0xB00327C8
movq %r15, %rdi
callq 0x2560e
leaq -0x348(%rbp), %r15
leaq -0x1e4(%rbp), %rsi
movl $0xbf597fc7, (%rsi)     # imm = 0xBF597FC7
movq %r15, %rdi
callq 0x2560e
leaq -0x340(%rbp), %r15
leaq -0x1e0(%rbp), %rsi
movl $0xc6e00bf3, (%rsi)     # imm = 0xC6E00BF3
movq %r15, %rdi
callq 0x2560e
leaq -0x338(%rbp), %r15
leaq -0x1dc(%rbp), %rsi
movl $0xd5a79147, (%rsi)     # imm = 0xD5A79147
movq %r15, %rdi
callq 0x2560e
leaq -0x330(%rbp), %r15
leaq -0x1d8(%rbp), %rsi
movl $0x6ca6351, (%rsi)      # imm = 0x6CA6351
movq %r15, %rdi
callq 0x25600
leaq -0x328(%rbp), %r15
leaq -0x1d4(%rbp), %rsi
movl $0x14292967, (%rsi)     # imm = 0x14292967
movq %r15, %rdi
callq 0x25600
leaq -0x320(%rbp), %r15
leaq -0x1d0(%rbp), %rsi
movl $0x27b70a85, (%rsi)     # imm = 0x27B70A85
movq %r15, %rdi
callq 0x25600
leaq -0x318(%rbp), %r15
leaq -0x1cc(%rbp), %rsi
movl $0x2e1b2138, (%rsi)     # imm = 0x2E1B2138
movq %r15, %rdi
callq 0x25600
leaq -0x310(%rbp), %r15
leaq -0x1c8(%rbp), %rsi
movl $0x4d2c6dfc, (%rsi)     # imm = 0x4D2C6DFC
movq %r15, %rdi
callq 0x25600
leaq -0x308(%rbp), %r15
leaq -0x1c4(%rbp), %rsi
movl $0x53380d13, (%rsi)     # imm = 0x53380D13
movq %r15, %rdi
callq 0x25600
leaq -0x300(%rbp), %r15
leaq -0x1c0(%rbp), %rsi
movl $0x650a7354, (%rsi)     # imm = 0x650A7354
movq %r15, %rdi
callq 0x25600
leaq -0x2f8(%rbp), %r15
leaq -0x1bc(%rbp), %rsi
movl $0x766a0abb, (%rsi)     # imm = 0x766A0ABB
movq %r15, %rdi
callq 0x25600
leaq -0x2f0(%rbp), %r15
leaq -0x1b8(%rbp), %rsi
movl $0x81c2c92e, (%rsi)     # imm = 0x81C2C92E
movq %r15, %rdi
callq 0x2560e
leaq -0x2e8(%rbp), %r15
leaq -0x1b4(%rbp), %rsi
movl $0x92722c85, (%rsi)     # imm = 0x92722C85
movq %r15, %rdi
callq 0x2560e
leaq -0x2e0(%rbp), %r15
leaq -0x1b0(%rbp), %rsi
movl $0xa2bfe8a1, (%rsi)     # imm = 0xA2BFE8A1
movq %r15, %rdi
callq 0x2560e
leaq -0x2d8(%rbp), %r15
leaq -0x1ac(%rbp), %rsi
movl $0xa81a664b, (%rsi)     # imm = 0xA81A664B
movq %r15, %rdi
callq 0x2560e
leaq -0x2d0(%rbp), %r15
leaq -0x1a8(%rbp), %rsi
movl $0xc24b8b70, (%rsi)     # imm = 0xC24B8B70
movq %r15, %rdi
callq 0x2560e
leaq -0x2c8(%rbp), %r15
leaq -0x1a4(%rbp), %rsi
movl $0xc76c51a3, (%rsi)     # imm = 0xC76C51A3
movq %r15, %rdi
callq 0x2560e
leaq -0x2c0(%rbp), %r15
leaq -0x1a0(%rbp), %rsi
movl $0xd192e819, (%rsi)     # imm = 0xD192E819
movq %r15, %rdi
callq 0x2560e
leaq -0x2b8(%rbp), %r15
leaq -0x19c(%rbp), %rsi
movl $0xd6990624, (%rsi)     # imm = 0xD6990624
movq %r15, %rdi
callq 0x2560e
leaq -0x2b0(%rbp), %r15
leaq -0x198(%rbp), %rsi
movl $0xf40e3585, (%rsi)     # imm = 0xF40E3585
movq %r15, %rdi
callq 0x2560e
leaq -0x2a8(%rbp), %r15
leaq -0x194(%rbp), %rsi
movl $0x106aa070, (%rsi)     # imm = 0x106AA070
movq %r15, %rdi
callq 0x25600
leaq -0x2a0(%rbp), %r15
leaq -0x190(%rbp), %rsi
movl $0x19a4c116, (%rsi)     # imm = 0x19A4C116
movq %r15, %rdi
callq 0x25600
leaq -0x298(%rbp), %r15
leaq -0x18c(%rbp), %rsi
movl $0x1e376c08, (%rsi)     # imm = 0x1E376C08
movq %r15, %rdi
callq 0x25600
leaq -0x290(%rbp), %r15
leaq -0x188(%rbp), %rsi
movl $0x2748774c, (%rsi)     # imm = 0x2748774C
movq %r15, %rdi
callq 0x25600
leaq -0x288(%rbp), %r15
leaq -0x184(%rbp), %rsi
movl $0x34b0bcb5, (%rsi)     # imm = 0x34B0BCB5
movq %r15, %rdi
callq 0x25600
leaq -0x280(%rbp), %r15
leaq -0x180(%rbp), %rsi
movl $0x391c0cb3, (%rsi)     # imm = 0x391C0CB3
movq %r15, %rdi
callq 0x25600
leaq -0x278(%rbp), %r15
leaq -0x17c(%rbp), %rsi
movl $0x4ed8aa4a, (%rsi)     # imm = 0x4ED8AA4A
movq %r15, %rdi
callq 0x25600
leaq -0x270(%rbp), %r15
leaq -0x178(%rbp), %rsi
movl $0x5b9cca4f, (%rsi)     # imm = 0x5B9CCA4F
movq %r15, %rdi
callq 0x25600
leaq -0x268(%rbp), %r15
leaq -0x174(%rbp), %rsi
movl $0x682e6ff3, (%rsi)     # imm = 0x682E6FF3
movq %r15, %rdi
callq 0x25600
leaq -0x260(%rbp), %r15
leaq -0x170(%rbp), %rsi
movl $0x748f82ee, (%rsi)     # imm = 0x748F82EE
movq %r15, %rdi
callq 0x25600
leaq -0x258(%rbp), %r15
leaq -0x16c(%rbp), %rsi
movl $0x78a5636f, (%rsi)     # imm = 0x78A5636F
movq %r15, %rdi
callq 0x25600
leaq -0x250(%rbp), %r15
leaq -0x168(%rbp), %rsi
movl $0x84c87814, (%rsi)     # imm = 0x84C87814
movq %r15, %rdi
callq 0x2560e
leaq -0x248(%rbp), %r15
leaq -0x164(%rbp), %rsi
movl $0x8cc70208, (%rsi)     # imm = 0x8CC70208
movq %r15, %rdi
callq 0x2560e
leaq -0x240(%rbp), %r15
leaq -0x160(%rbp), %rsi
movl $0x90befffa, (%rsi)     # imm = 0x90BEFFFA
movq %r15, %rdi
callq 0x2560e
leaq -0x238(%rbp), %r15
leaq -0x15c(%rbp), %rsi
movl $0xa4506ceb, (%rsi)     # imm = 0xA4506CEB
movq %r15, %rdi
callq 0x2560e
leaq -0x230(%rbp), %r15
leaq -0x158(%rbp), %rsi
movl $0xbef9a3f7, (%rsi)     # imm = 0xBEF9A3F7
movq %r15, %rdi
callq 0x2560e
leaq -0x228(%rbp), %r15
leaq -0x154(%rbp), %rsi
movl $0xc67178f2, (%rsi)     # imm = 0xC67178F2
movq %r15, %rdi
callq 0x2560e
leaq -0x60(%rbp), %rsi
movl $0x6a09e667, (%rsi)     # imm = 0x6A09E667
movq %rbx, %rdi
callq 0x2561c
leaq -0x60(%rbp), %rsi
movl $0xbb67ae85, (%rsi)     # imm = 0xBB67AE85
leaq 0x8(%rbx), %r15
movq %r15, %rdi
callq 0x25644
leaq -0x60(%rbp), %rsi
movl $0x3c6ef372, (%rsi)     # imm = 0x3C6EF372
leaq 0x10(%rbx), %r13
movq %r13, %rdi
callq 0x2561c
leaq -0x60(%rbp), %rsi
movl $0xa54ff53a, (%rsi)     # imm = 0xA54FF53A
leaq 0x18(%rbx), %rdi
movq %rdi, -0x110(%rbp)
callq 0x25644
leaq -0x60(%rbp), %rsi
movl $0x510e527f, (%rsi)     # imm = 0x510E527F
leaq 0x20(%rbx), %rdi
movq %rdi, -0xf0(%rbp)
callq 0x2561c
leaq -0x60(%rbp), %rsi
movl $0x9b05688c, (%rsi)     # imm = 0x9B05688C
leaq 0x28(%rbx), %rdi
movq %rdi, -0xe8(%rbp)
callq 0x25644
leaq -0x60(%rbp), %rsi
movl $0x1f83d9ab, (%rsi)     # imm = 0x1F83D9AB
leaq 0x30(%rbx), %rdi
movq %rdi, -0xe0(%rbp)
callq 0x2561c
movq %r13, -0xf8(%rbp)
movq %r14, -0xb0(%rbp)
leaq -0x60(%rbp), %rsi
movl $0x5be0cd19, (%rsi)     # imm = 0x5BE0CD19
movq %rbx, -0xd0(%rbp)
leaq 0x38(%rbx), %rdi
movq %rdi, -0xd8(%rbp)
callq 0x2561c
shrq $0x4, %r12
movq -0x30(%rbp), %r14
movl %r14d, %r13d
cmpl $0x10, %r14d
pushq $0x10
popq %rax
cmovbl %r14d, %eax
leaq (,%r13,8), %rcx
movq %rcx, -0x108(%rbp)
shll $0x3, %eax
movq %rax, -0x150(%rbp)
xorl %ebx, %ebx
xorl %r14d, %r14d
movq %r12, -0x130(%rbp)
movq %r15, -0x100(%rbp)
cmpq %r12, %r14
je 0x278bb
movq %rsp, -0x138(%rbp)
movq %rsp, %rdi
leaq 0xf(,%r13,8), %rax
andq $-0x10, %rax
subq %rax, %rdi
movq %rdi, %rsp
movq %rdi, -0x30(%rbp)
xorl %esi, %esi
movq -0x108(%rbp), %rdx
callq 0xc160
movq %r14, -0x140(%rbp)
shlq $0x4, %r14
movq %r14, -0x120(%rbp)
movq %rbx, -0x148(%rbp)
movq %rbx, %r12
xorl %r14d, %r14d
cmpq %r14, -0x150(%rbp)
je 0x27295
movq -0x118(%rbp), %rax
leaq (%rax,%r14), %rbx
movq -0x30(%rbp), %rax
leaq (%rax,%r14), %rdi
movq %rbx, %rsi
callq 0x2566c
movq -0xb0(%rbp), %r15
movq (%r15), %rax
movq %r15, %rdi
leaq 0x138ec(%rip), %rsi     # 0x3ab59
movq %r12, %rdx
movq %rbx, %rcx
callq *0x8(%rax)
movq (%r15), %rax
movq %r15, %rdi
leaq 0x105fe(%rip), %rsi     # 0x37881
movq %r12, %rdx
movq %rbx, %rcx
callq *0x8(%rax)
addq $0x8, %r14
incq %r12
jmp 0x27235
movq -0x30(%rbp), %rax
leaq -0x10(%rax), %r15
addq $-0x78, %rax
movq %rax, -0x98(%rbp)
pushq $0x10
popq %r12
cmpq %r13, %r12
leaq -0x60(%rbp), %rdi
jae 0x2738e
leaq (%r15,%r12,8), %rdx
movq -0xb8(%rbp), %rsi
callq 0x27b56
movq -0x30(%rbp), %rax
movq -0x38(%rax,%r12,8), %rax
movq %rax, -0x58(%rbp)
testq %rax, %rax
je 0x272e6
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x98(%rbp), %rax
leaq (%rax,%r12,8), %rdx
leaq -0x50(%rbp), %rdi
movq -0xb8(%rbp), %rsi
callq 0x27c14
movq -0x30(%rbp), %rax
movq -0x80(%rax,%r12,8), %rax
movq %rax, -0x48(%rbp)
testq %rax, %rax
je 0x2731e
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
leaq -0x38(%rbp), %r14
movq %r14, %rdi
leaq -0x60(%rbp), %rsi
callq 0x27cd2
movq -0x30(%rbp), %rax
leaq (%rax,%r12,8), %rbx
movq -0x38(%rbp), %rax
movq %rax, (%rbx)
andq $0x0, -0x38(%rbp)
movq %r14, %rdi
callq 0x23cce
movq -0x120(%rbp), %rax
leaq (%rax,%r12), %rdx
movq -0xb0(%rbp), %rdi
movq (%rdi), %rax
leaq 0x1051b(%rip), %rsi     # 0x37881
movq %rbx, %rcx
callq *0x8(%rax)
pushq $0x18
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x60, %rdi
callq 0x23cce
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x2736f
incq %r12
jmp 0x272ac
movq -0xd0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x38(%rbp)
testq %rax, %rax
je 0x273ac
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x100(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x90(%rbp)
testq %rax, %rax
movq -0x110(%rbp), %r14
je 0x273d4
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0xf8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x88(%rbp)
testq %rax, %rax
je 0x273f5
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq (%r14), %rax
movq %rax, -0xa8(%rbp)
testq %rax, %rax
je 0x2740f
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x80(%rbp)
testq %rax, %rax
je 0x2742d
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0xe8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x78(%rbp)
testq %rax, %rax
je 0x2744b
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0xe0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x70(%rbp)
testq %rax, %rax
je 0x27469
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0xd8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
testq %rax, %rax
je 0x2748a
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
xorl %eax, %eax
movq %rax, -0x98(%rbp)
cmpq %r13, %rax
je 0x276c1
movq -0xa0(%rbp), %rax
movq %rax, -0x60(%rbp)
testq %rax, %rax
je 0x274b7
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
leaq -0x58(%rbp), %rdi
movq %rdi, %r12
movq -0xb8(%rbp), %rsi
leaq -0x80(%rbp), %r15
movq %r15, %rdx
callq 0x27cf2
leaq -0x38(%rbp), %r14
leaq -0x50(%rbp), %rdi
movq %rdi, %r12
movq %r15, %rsi
leaq -0x78(%rbp), %rdx
leaq -0x70(%rbp), %rcx
callq 0x25d01
movq -0x98(%rbp), %rax
movq -0x420(%rbp,%rax,8), %rax
movq %rax, -0x48(%rbp)
testq %rax, %rax
je 0x2750f
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
movq -0x30(%rbp), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x40(%rbp)
testq %rax, %rax
je 0x27532
movq (%rax), %rcx
movq -0x20(%rcx), %rcx
incl 0x8(%rax,%rcx)
leaq -0xc8(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x2574b
leaq -0x68(%rbp), %rdi
movq -0xb8(%rbp), %rsi
movq %r14, %rdx
callq 0x27db0
leaq -0x128(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
leaq -0x90(%rbp), %rdx
leaq -0x88(%rbp), %rcx
callq 0x25d53
leaq -0xc0(%rbp), %rdi
leaq -0x68(%rbp), %rbx
movq %rbx, %rsi
movq %r15, %rdx
callq 0x2576b
movq %r15, %rdi
callq 0x23cce
movq %rbx, %rdi
callq 0x23cce
movq -0x70(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x2480c
movq -0x78(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x2480c
movq -0x80(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x2480c
movq %rbx, %rdi
leaq -0xa8(%rbp), %r12
movq %r12, %rsi
leaq -0xc8(%rbp), %r15
movq %r15, %rdx
callq 0x2576b
movq -0x68(%rbp), %rax
movq %rax, -0x80(%rbp)
andq $0x0, -0x68(%rbp)
movq %rbx, %rdi
callq 0x23cce
movq -0x88(%rbp), %rsi
movq %r12, %rdi
callq 0x2480c
movq -0x90(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0x2480c
movq -0x38(%rbp), %rsi
leaq -0x90(%rbp), %rdi
callq 0x2480c
movq %rbx, %rdi
movq %r15, %rsi
leaq -0xc0(%rbp), %rdx
callq 0x2576b
movq -0x68(%rbp), %rax
movq %rax, -0x38(%rbp)
andq $0x0, -0x68(%rbp)
movq %rbx, %rdi
callq 0x23cce
movq -0x120(%rbp), %rax
movq -0x98(%rbp), %rcx
leaq (%rax,%rcx), %rdx
movq -0xb0(%rbp), %rdi
movq (%rdi), %rax
leaq 0x13ed0(%rip), %rsi     # 0x3b542
movq %r14, %rcx
callq *0x8(%rax)
leaq -0xc0(%rbp), %rdi
callq 0x23cce
leaq -0xc8(%rbp), %rdi
callq 0x23cce
pushq $0x20
popq %r14
leaq (%r14,%rbp), %rdi
addq $-0x60, %rdi
callq 0x23cce
addq $-0x8, %r14
cmpq $-0x8, %r14
jne 0x27694
movq -0x98(%rbp), %rax
incq %rax
movq -0x110(%rbp), %r14
jmp 0x2748c
leaq -0x60(%rbp), %r12
movq %r12, %rdi
leaq -0x38(%rbp), %rsi
movq -0xd0(%rbp), %rbx
movq %rbx, %rdx
callq 0x2576b
movq -0x60(%rbp), %rax
movq %rax, (%rbx)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
movq %r12, %rdi
leaq -0x90(%rbp), %rsi
movq -0x100(%rbp), %r15
movq %r15, %rdx
callq 0x2576b
movq -0x60(%rbp), %rax
movq %rax, (%r15)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
movq %r12, %rdi
leaq -0x88(%rbp), %rsi
movq -0xf8(%rbp), %rbx
movq %rbx, %rdx
callq 0x2576b
movq -0x60(%rbp), %rax
movq %rax, (%rbx)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
movq %r12, %rdi
leaq -0xa8(%rbp), %rsi
movq %r14, %rdx
callq 0x2576b
movq -0x60(%rbp), %rax
movq %rax, (%r14)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
movq %r12, %rdi
leaq -0x80(%rbp), %rsi
movq -0xf0(%rbp), %rbx
movq %rbx, %rdx
callq 0x2576b
movq -0x60(%rbp), %rax
movq %rax, (%rbx)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
movq %r12, %rdi
leaq -0x78(%rbp), %rsi
movq -0xe8(%rbp), %rbx
movq %rbx, %rdx
callq 0x2576b
movq -0xe0(%rbp), %r14
movq -0x60(%rbp), %rax
movq %rax, (%rbx)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
movq %r12, %rdi
leaq -0x70(%rbp), %rsi
movq %r14, %rdx
callq 0x2576b
movq -0x60(%rbp), %rax
movq %rax, (%r14)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
movq %r12, %rdi
leaq -0xa0(%rbp), %r14
movq %r14, %rsi
movq -0xd8(%rbp), %rbx
movq %rbx, %rdx
callq 0x2576b
movq -0x60(%rbp), %rax
movq %rax, (%rbx)
andq $0x0, -0x60(%rbp)
movq %r12, %rdi
callq 0x23cce
subq $-0x80, -0x118(%rbp)
movq %r14, %rdi
callq 0x23cce
leaq -0x70(%rbp), %rdi
callq 0x23cce
leaq -0x78(%rbp), %rdi
callq 0x23cce
leaq -0x80(%rbp), %rdi
callq 0x23cce
leaq -0xa8(%rbp), %rdi
callq 0x23cce
leaq -0x88(%rbp), %rdi
callq 0x23cce
leaq -0x90(%rbp), %rdi
callq 0x23cce
leaq -0x38(%rbp), %rdi
callq 0x23cce
movq -0x30(%rbp), %r14
addq $-0x8, %r14
movq -0x108(%rbp), %rbx
leaq (%r14,%rbx), %rdi
callq 0x23cce
addq $-0x8, %rbx
jne 0x27884
movq -0x138(%rbp), %rsp
movq -0x140(%rbp), %r14
incq %r14
movq -0x148(%rbp), %rbx
addq $0x10, %rbx
movq -0x130(%rbp), %r12
jmp 0x271df
leaq 0x13c82(%rip), %rsi     # 0x3b544
movq -0xb0(%rbp), %rdi
movq -0xd0(%rbp), %rdx
callq 0x27e6e
movl $0x1f8, %ebx            # imm = 0x1F8
leaq (%rbx,%rbp), %rdi
addq $-0x420, %rdi           # imm = 0xFBE0
callq 0x23cce
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x278da
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x14528(%rip), %rdi     # 0x3be32
leaq 0x14559(%rip), %rsi     # 0x3be6a
leaq 0x14563(%rip), %rcx     # 0x3be7b
pushq $0x3d
jmp 0x27933
leaq 0x145fe(%rip), %rdi     # 0x3bf21
leaq 0x14540(%rip), %rsi     # 0x3be6a
leaq 0x1454a(%rip), %rcx     # 0x3be7b
pushq $0x3e
popq %rdx
callq 0xc180
jmp 0x27949
jmp 0x27949
jmp 0x27949
jmp 0x27949
jmp 0x27949
jmp 0x27949
jmp 0x27949
jmp 0x27949
movq %rax, %r14
jmp 0x27b2f
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
jmp 0x279cd
movq %rax, %r14
addq $-0x8, %r15
movq %r15, %rdi
callq 0x23cce
cmpq %r13, %r15
jne 0x279d0
jmp 0x27b4e
jmp 0x279f4
jmp 0x279f4
jmp 0x279f4
jmp 0x279f4
jmp 0x279f4
jmp 0x279f4
jmp 0x279f4
movq %rax, %r14
jmp 0x27abb
movq %rax, %r14
leaq -0x128(%rbp), %rdi
callq 0x23cce
jmp 0x27a2a
jmp 0x27a11
jmp 0x27a11
movq %rax, %r14
leaq -0xc0(%rbp), %rdi
jmp 0x27a2e
movq %rax, %r14
jmp 0x27a3f
movq %rax, %r14
jmp 0x27a33
movq %rax, %r14
leaq -0x68(%rbp), %rdi
callq 0x23cce
leaq -0xc8(%rbp), %rdi
callq 0x23cce
pushq $0x20
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x60, %rdi
callq 0x23cce
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x27a42
jmp 0x27abb
movq %rax, %r14
pushq $0x8
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x60, %rdi
callq 0x23cce
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x27a61
jmp 0x27b14
jmp 0x27a84
jmp 0x27b11
movq %rax, %r14
pushq $0x18
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x60, %rdi
callq 0x23cce
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x27a8a
jmp 0x27b14
movq %rax, %r14
leaq -0x60(%rbp), %rbx
addq $-0x8, %r12
movq %r12, %rdi
callq 0x23cce
cmpq %rbx, %r12
jne 0x27aaa
leaq -0xa0(%rbp), %rdi
callq 0x23cce
leaq -0x70(%rbp), %rdi
callq 0x23cce
leaq -0x78(%rbp), %rdi
callq 0x23cce
leaq -0x80(%rbp), %rdi
callq 0x23cce
leaq -0xa8(%rbp), %rdi
callq 0x23cce
leaq -0x88(%rbp), %rdi
callq 0x23cce
leaq -0x90(%rbp), %rdi
callq 0x23cce
leaq -0x38(%rbp), %rdi
callq 0x23cce
jmp 0x27b14
movq %rax, %r14
movq -0x30(%rbp), %rbx
addq $-0x8, %rbx
shlq $0x3, %r13
leaq (%rbx,%r13), %rdi
callq 0x23cce
addq $-0x8, %r13
jne 0x27b20
movl $0x1f8, %ebx            # imm = 0x1F8
leaq (%rbx,%rbp), %rdi
addq $-0x420, %rdi           # imm = 0xFBE0
callq 0x23cce
addq $-0x8, %rbx
cmpq $-0x8, %rbx
jne 0x27b34
movq %r14, %rdi
callq 0xc4c0