// File: /workspace/github_c_makefile_star2_O0/minoki[P]icfpc2006/run_directthreaded.c
// Function: main
int main(int argc, char *argv[])
{
    if (argc <= 1) {
        fprintf(stderr, "Usage: %s file.um\n", argv[0]);
        return 1;
    }
    void *rawprogram = NULL;
    size_t rawprogsize = 0;
    {
        FILE *f = fopen(argv[1], "rb");
        assert(f != NULL);
        int seekresult = fseek(f, 0, SEEK_END);
        assert(seekresult == 0);
        long size = ftell(f);
        assert(size >= 0);
        rawprogsize = size;
        seekresult = fseek(f, 0, SEEK_SET);
        assert(seekresult == 0);
        rawprogram = malloc(rawprogsize);
        assert(rawprogram != NULL);
        size_t result = fread(rawprogram, 1, rawprogsize, f);
        assert(result == rawprogsize);
        fclose(f);
    }
    assert(rawprogsize % 4 == 0);
    struct array *arr0 = malloc(sizeof(uint32_t) + rawprogsize);
    assert(arr0 != NULL);
    arr0->length = rawprogsize / 4;
    {
        uint8_t *rawprogram_ = (uint8_t *)rawprogram;
        for (size_t i = 0; i < rawprogsize / 4; ++i) {
            uint32_t a = (uint32_t)rawprogram_[4 * i];
            uint32_t b = (uint32_t)rawprogram_[4 * i + 1];
            uint32_t c = (uint32_t)rawprogram_[4 * i + 2];
            uint32_t d = (uint32_t)rawprogram_[4 * i + 3];
            arr0->data[i] = (a << 24) | (b << 16) | (c << 8) | d;
        }
        free(rawprogram);
    }

    fprintf(stderr, "Loaded program. size=%zu bytes\n", rawprogsize);

    size_t pc = 0;
    uint32_t reg[8] = {0};
    struct array **arr = calloc(1, sizeof(struct array *));
    arr[0] = arr0;
    size_t arraycount = 1;
    uint32_t *freelist = NULL, *freelist_end = NULL;
    uint32_t freelist_capacity = 0;

    static void * const operations[16] = {
        &&OP_CondMove,
        &&OP_ArrayIndex,
        &&OP_ArrayAmendment,
        &&OP_Add,
        &&OP_Mul,
        &&OP_Div,
        &&OP_NotAnd,
        &&OP_Halt,
        &&OP_Alloc,
        &&OP_Abandon,
        &&OP_Output,
        &&OP_Input,
        &&OP_LoadProgram,
        &&OP_Orthography,
        &&OP_Invalid,
        &&OP_Invalid,
    };
    void **program = NULL;
    while (1) {
        free(program);
        program = malloc(sizeof(void *) * arr0->length);
        for (uint32_t i = 0; i < arr0->length; ++i) {
            uint32_t op = arr0->data[i];
            program[i] = operations[op >> 28];
        }
        goto *program[pc];
    OP_CondMove:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            if (reg[c] != 0) {
                reg[a] = reg[b];
            }
            ++pc;
            goto *program[pc];
        }
    OP_ArrayIndex:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t i = reg[b];
            assert(i < arraycount);
            struct array *ai = arr[i];
            assert(ai != NULL);
            assert(reg[c] < ai->length);
            reg[a] = ai->data[reg[c]];
            ++pc;
            goto *program[pc];
        }
    OP_ArrayAmendment:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t i = reg[a];
            assert(i < arraycount);
            struct array *ai = arr[i];
            assert(ai != NULL);
            assert(reg[b] < ai->length);
            ai->data[reg[b]] = reg[c];
            if (UNLIKELY(i == 0)) {
                program[reg[b]] = operations[reg[c] >> 28];
            }
            ++pc;
            goto *program[pc];
        }
    OP_Add:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            reg[a] = reg[b] + reg[c];
            ++pc;
            goto *program[pc];
        }
    OP_Mul:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            reg[a] = reg[b] * reg[c];
            ++pc;
            goto *program[pc];
        }
    OP_Div:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            assert(reg[c] != 0);
            reg[a] = reg[b] / reg[c];
            ++pc;
            goto *program[pc];
        }
    OP_NotAnd:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            reg[a] = ~(reg[b] & reg[c]);
            ++pc;
            goto *program[pc];
        }
    OP_Halt:
        fflush(stdout);
        fprintf(stderr, "HALT\n");
        return 0;
    OP_Alloc:
        {
            uint32_t op = arr0->data[pc];
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t capacity = reg[c];
            uint32_t i = 0;
            if (freelist_end == freelist) {
                i = arraycount;
                ++arraycount;
                arr = realloc(arr, sizeof(struct array *) * arraycount);
                assert(arr != NULL);
            } else {
                i = *(--freelist_end);
                *freelist_end = 0;
            }
            struct array *newarr = calloc(1 + capacity, sizeof(uint32_t));
            assert(newarr != NULL);
            newarr->length = capacity;
            arr[i] = newarr;
            reg[b] = i;
            ++pc;
            goto *program[pc];
        }
    OP_Abandon:
        {
            uint32_t op = arr0->data[pc];
            uint32_t c = op & 7;
            uint32_t i = reg[c];
            assert(i < arraycount);
            assert(i != 0);
            assert(arr[i] != NULL);
            free(arr[i]);
            arr[i] = NULL;
            if (freelist_end - freelist == freelist_capacity) {
                uint32_t freelist_new_capacity = freelist_capacity == 0 ? 32 : freelist_capacity * 2;
                freelist = realloc(freelist, freelist_new_capacity * sizeof(uint32_t));
                memset(freelist + freelist_capacity, 0, (freelist_new_capacity - freelist_capacity) * sizeof(uint32_t));
                freelist_end = freelist + freelist_capacity;
                freelist_capacity = freelist_new_capacity;
            }
            *freelist_end++ = i;
            ++pc;
            goto *program[pc];
        }
    OP_Output:
        {
            uint32_t op = arr0->data[pc];
            uint32_t c = op & 7;
            assert(reg[c] <= 255);
            putchar(reg[c]);
            ++pc;
            goto *program[pc];
        }
    OP_Input:
        {
            uint32_t op = arr0->data[pc];
            uint32_t c = op & 7;
            fflush(stdout);
            int ch = getchar();
            if (ch == EOF) {
                reg[c] = (uint32_t)(-1);
            } else {
                assert(0 <= ch && ch <= 255);
                reg[c] = (uint32_t)ch;
            }
            ++pc;
            goto *program[pc];
        }
    OP_LoadProgram:
        {
            uint32_t op = arr0->data[pc];
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t i = reg[b];
            if (UNLIKELY(i != 0)) {
                assert(i < arraycount);
                assert(arr[i] != NULL);
                uint32_t length = arr[i]->length;
                struct array *newprogram = malloc((length + 1) * sizeof(uint32_t));
                assert(newprogram != NULL);
                memcpy(newprogram, arr[i], (length + 1) * sizeof(uint32_t));
                free(arr0);
                arr0 = newprogram;
                arr[0] = newprogram;
                pc = reg[c];
                assert(pc < arr0->length);
                continue;
            }
            pc = reg[c];
            assert(pc < arr0->length);
            goto *program[pc];
        }
    OP_Orthography:
        {
            uint32_t op = arr0->data[pc];
            uint32_t a = (op >> 25) & 7;
            uint32_t value = op & ((UINT32_C(1) << 25) - 1);
            reg[a] = value;
            ++pc;
            goto *program[pc];
        }
    OP_Invalid:
        {
            uint32_t op = arr0->data[pc];
            fprintf(stderr, "Invalid Instruction: %08X\n", op);
            abort();
        }
    }
}

// Assembly:
subq $0x1e8, %rsp            # imm = 0x1E8
movl $0x0, 0x1e4(%rsp)
movl %edi, 0x1e0(%rsp)
movq %rsi, 0x1d8(%rsp)
cmpl $0x1, 0x1e0(%rsp)
jg 0x129e
movq 0x3d7e(%rip), %rax      # 0x4ff0
movq (%rax), %rdi
movq 0x1d8(%rsp), %rax
movq (%rax), %rdx
leaq 0x1d7d(%rip), %rsi      # 0x3004
movb $0x0, %al
callq 0x10c0
movl $0x1, 0x1e4(%rsp)
jmp 0x2694
movq $0x0, 0x1d0(%rsp)
movq $0x0, 0x1c8(%rsp)
movq 0x1d8(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x1d4e(%rip), %rsi      # 0x3017
callq 0x1130
movq %rax, 0x1c0(%rsp)
cmpq $0x0, 0x1c0(%rsp)
je 0x12e3
jmp 0x1302
leaq 0x1d30(%rip), %rdi      # 0x301a
leaq 0x1d33(%rip), %rsi      # 0x3024
movl $0x1b, %edx
leaq 0x1d3c(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1c0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x2, %edx
callq 0x1110
movl %eax, 0x1bc(%rsp)
cmpl $0x0, 0x1bc(%rsp)
jne 0x132b
jmp 0x134a
leaq 0x1d1e(%rip), %rdi      # 0x3050
leaq 0x1ceb(%rip), %rsi      # 0x3024
movl $0x1d, %edx
leaq 0x1cf4(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1c0(%rsp), %rdi
callq 0x10d0
movq %rax, 0x1b0(%rsp)
cmpq $0x0, 0x1b0(%rsp)
jl 0x136c
jmp 0x138b
leaq 0x1ced(%rip), %rdi      # 0x3060
leaq 0x1caa(%rip), %rsi      # 0x3024
movl $0x1f, %edx
leaq 0x1cb3(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1b0(%rsp), %rax
movq %rax, 0x1c8(%rsp)
movq 0x1c0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x1110
movl %eax, 0x1bc(%rsp)
cmpl $0x0, 0x1bc(%rsp)
jne 0x13c1
jmp 0x13e0
leaq 0x1c88(%rip), %rdi      # 0x3050
leaq 0x1c55(%rip), %rsi      # 0x3024
movl $0x22, %edx
leaq 0x1c5e(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1c8(%rsp), %rdi
callq 0x10f0
movq %rax, 0x1d0(%rsp)
cmpq $0x0, 0x1d0(%rsp)
je 0x1402
jmp 0x1421
leaq 0x1c61(%rip), %rdi      # 0x306a
leaq 0x1c14(%rip), %rsi      # 0x3024
movl $0x24, %edx
leaq 0x1c1d(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1d0(%rsp), %rdi
movq 0x1c8(%rsp), %rdx
movq 0x1c0(%rsp), %rcx
movl $0x1, %esi
callq 0x1060
movq %rax, 0x1a8(%rsp)
movq 0x1a8(%rsp), %rax
cmpq 0x1c8(%rsp), %rax
jne 0x145f
jmp 0x147e
leaq 0x1c17(%rip), %rdi      # 0x307d
leaq 0x1bb7(%rip), %rsi      # 0x3024
movl $0x26, %edx
leaq 0x1bc0(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1c0(%rsp), %rdi
callq 0x1070
movq 0x1c8(%rsp), %rax
andq $0x3, %rax
cmpq $0x0, %rax
jne 0x149f
jmp 0x14be
leaq 0x1bed(%rip), %rdi      # 0x3093
leaq 0x1b77(%rip), %rsi      # 0x3024
movl $0x29, %edx
leaq 0x1b80(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1c8(%rsp), %rdi
addq $0x4, %rdi
callq 0x10f0
movq %rax, 0x1a0(%rsp)
cmpq $0x0, 0x1a0(%rsp)
je 0x14e4
jmp 0x1503
leaq 0x1bbd(%rip), %rdi      # 0x30a8
leaq 0x1b32(%rip), %rsi      # 0x3024
movl $0x2b, %edx
leaq 0x1b3b(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x1c8(%rsp), %rax
shrq $0x2, %rax
movl %eax, %ecx
movq 0x1a0(%rsp), %rax
movl %ecx, (%rax)
movq 0x1d0(%rsp), %rax
movq %rax, 0x198(%rsp)
movq $0x0, 0x190(%rsp)
movq 0x190(%rsp), %rax
movq 0x1c8(%rsp), %rcx
shrq $0x2, %rcx
cmpq %rcx, %rax
jae 0x1629
movq 0x198(%rsp), %rax
movq 0x190(%rsp), %rcx
shlq $0x2, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, 0x18c(%rsp)
movq 0x198(%rsp), %rax
movq 0x190(%rsp), %rcx
shlq $0x2, %rcx
movzbl 0x1(%rax,%rcx), %eax
movl %eax, 0x188(%rsp)
movq 0x198(%rsp), %rax
movq 0x190(%rsp), %rcx
shlq $0x2, %rcx
movzbl 0x2(%rax,%rcx), %eax
movl %eax, 0x184(%rsp)
movq 0x198(%rsp), %rax
movq 0x190(%rsp), %rcx
shlq $0x2, %rcx
movzbl 0x3(%rax,%rcx), %eax
movl %eax, 0x180(%rsp)
movl 0x18c(%rsp), %edx
shll $0x18, %edx
movl 0x188(%rsp), %eax
shll $0x10, %eax
orl %eax, %edx
movl 0x184(%rsp), %eax
shll $0x8, %eax
orl %eax, %edx
orl 0x180(%rsp), %edx
movq 0x1a0(%rsp), %rax
movq 0x190(%rsp), %rcx
movl %edx, 0x4(%rax,%rcx,4)
movq 0x190(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x190(%rsp)
jmp 0x1537
movq 0x1d0(%rsp), %rdi
callq 0x1030
movq 0x39b3(%rip), %rax      # 0x4ff0
movq (%rax), %rdi
movq 0x1c8(%rsp), %rdx
leaq 0x1a66(%rip), %rsi      # 0x30b5
movb $0x0, %al
callq 0x10c0
movq $0x0, 0x178(%rsp)
leaq 0x150(%rsp), %rdi
xorl %esi, %esi
movl $0x20, %edx
callq 0x1090
movl $0x1, %edi
movl $0x8, %esi
callq 0x10a0
movq %rax, 0x148(%rsp)
movq 0x1a0(%rsp), %rcx
movq 0x148(%rsp), %rax
movq %rcx, (%rax)
movq $0x1, 0x140(%rsp)
movq $0x0, 0x138(%rsp)
movq $0x0, 0x130(%rsp)
movl $0x0, 0x12c(%rsp)
movq $0x0, 0x120(%rsp)
movq 0x120(%rsp), %rdi
callq 0x1030
movq 0x1a0(%rsp), %rax
movl (%rax), %eax
movl %eax, %edi
shlq $0x3, %rdi
callq 0x10f0
movq %rax, 0x120(%rsp)
movl $0x0, 0x11c(%rsp)
movl 0x11c(%rsp), %eax
movq 0x1a0(%rsp), %rcx
cmpl (%rcx), %eax
jae 0x177c
movq 0x1a0(%rsp), %rax
movl 0x11c(%rsp), %ecx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x118(%rsp)
movl 0x118(%rsp), %eax
shrl $0x1c, %eax
movl %eax, %eax
movl %eax, %ecx
leaq 0x360e(%rip), %rax      # 0x4d60
movq (%rax,%rcx,8), %rdx
movq 0x120(%rsp), %rax
movl 0x11c(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
movl 0x11c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x11c(%rsp)
jmp 0x1710
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x114(%rsp)
movl 0x114(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0x110(%rsp)
movl 0x114(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x10c(%rsp)
movl 0x114(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x108(%rsp)
movl 0x108(%rsp), %eax
cmpl $0x0, 0x150(%rsp,%rax,4)
je 0x181b
movl 0x10c(%rsp), %eax
movl 0x150(%rsp,%rax,4), %ecx
movl 0x110(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x104(%rsp)
movl 0x104(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0x100(%rsp)
movl 0x104(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xfc(%rsp)
movl 0x104(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xf8(%rsp)
movl 0xfc(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movl %eax, 0xf4(%rsp)
movl 0xf4(%rsp), %eax
cmpq 0x140(%rsp), %rax
jae 0x18c9
jmp 0x18e8
leaq 0x1805(%rip), %rdi      # 0x30d5
leaq 0x174d(%rip), %rsi      # 0x3024
movl $0x71, %edx
leaq 0x1756(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x148(%rsp), %rax
movl 0xf4(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, 0xe8(%rsp)
cmpq $0x0, 0xe8(%rsp)
je 0x1910
jmp 0x192f
leaq 0x17cd(%rip), %rdi      # 0x30e4
leaq 0x1706(%rip), %rsi      # 0x3024
movl $0x73, %edx
leaq 0x170f(%rip), %rcx      # 0x3039
callq 0x1080
movl 0xf8(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movq 0xe8(%rsp), %rcx
cmpl (%rcx), %eax
jae 0x194b
jmp 0x196a
leaq 0x179d(%rip), %rdi      # 0x30ef
leaq 0x16cb(%rip), %rsi      # 0x3024
movl $0x74, %edx
leaq 0x16d4(%rip), %rcx      # 0x3039
callq 0x1080
movq 0xe8(%rsp), %rax
movl 0xf8(%rsp), %ecx
movl 0x150(%rsp,%rcx,4), %ecx
movl 0x4(%rax,%rcx,4), %ecx
movl 0x100(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0xe4(%rsp)
movl 0xe4(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xe0(%rsp)
movl 0xe4(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xdc(%rsp)
movl 0xe4(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xd8(%rsp)
movl 0xe0(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movl %eax, 0xd4(%rsp)
movl 0xd4(%rsp), %eax
cmpq 0x140(%rsp), %rax
jae 0x1a40
jmp 0x1a5f
leaq 0x168e(%rip), %rdi      # 0x30d5
leaq 0x15d6(%rip), %rsi      # 0x3024
movl $0x80, %edx
leaq 0x15df(%rip), %rcx      # 0x3039
callq 0x1080
movq 0x148(%rsp), %rax
movl 0xd4(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, 0xc8(%rsp)
cmpq $0x0, 0xc8(%rsp)
je 0x1a87
jmp 0x1aa6
leaq 0x1656(%rip), %rdi      # 0x30e4
leaq 0x158f(%rip), %rsi      # 0x3024
movl $0x82, %edx
leaq 0x1598(%rip), %rcx      # 0x3039
callq 0x1080
movl 0xdc(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movq 0xc8(%rsp), %rcx
cmpl (%rcx), %eax
jae 0x1ac2
jmp 0x1ae1
leaq 0x163a(%rip), %rdi      # 0x3103
leaq 0x1554(%rip), %rsi      # 0x3024
movl $0x83, %edx
leaq 0x155d(%rip), %rcx      # 0x3039
callq 0x1080
movl 0xd8(%rsp), %eax
movl 0x150(%rsp,%rax,4), %edx
movq 0xc8(%rsp), %rax
movl 0xdc(%rsp), %ecx
movl 0x150(%rsp,%rcx,4), %ecx
movl %edx, 0x4(%rax,%rcx,4)
cmpl $0x0, 0xd4(%rsp)
sete %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x1b5f
movl 0xd8(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
shrl $0x1c, %eax
movl %eax, %eax
movl %eax, %ecx
leaq 0x321f(%rip), %rax      # 0x4d60
movq (%rax,%rcx,8), %rdx
movq 0x120(%rsp), %rax
movl 0xdc(%rsp), %ecx
movl 0x150(%rsp,%rcx,4), %ecx
movq %rdx, (%rax,%rcx,8)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0xc4(%rsp)
movl 0xc4(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xc0(%rsp)
movl 0xc4(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xbc(%rsp)
movl 0xc4(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xb8(%rsp)
movl 0xbc(%rsp), %eax
movl 0x150(%rsp,%rax,4), %ecx
movl 0xb8(%rsp), %eax
addl 0x150(%rsp,%rax,4), %ecx
movl 0xc0(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0xb4(%rsp)
movl 0xb4(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xb0(%rsp)
movl 0xb4(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xac(%rsp)
movl 0xb4(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xa8(%rsp)
movl 0xac(%rsp), %eax
movl 0x150(%rsp,%rax,4), %ecx
movl 0xa8(%rsp), %eax
imull 0x150(%rsp,%rax,4), %ecx
movl 0xb0(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0xa4(%rsp)
movl 0xa4(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xa0(%rsp)
movl 0xa4(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x9c(%rsp)
movl 0xa4(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x98(%rsp)
movl 0x98(%rsp), %eax
cmpl $0x0, 0x150(%rsp,%rax,4)
je 0x1d59
jmp 0x1d78
leaq 0x13b7(%rip), %rdi      # 0x3117
leaq 0x12bd(%rip), %rsi      # 0x3024
movl $0xa5, %edx
leaq 0x12c6(%rip), %rcx      # 0x3039
callq 0x1080
movl 0x9c(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movl 0x98(%rsp), %ecx
xorl %edx, %edx
divl 0x150(%rsp,%rcx,4)
movl %eax, %ecx
movl 0xa0(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x94(%rsp)
movl 0x94(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0x90(%rsp)
movl 0x94(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x8c(%rsp)
movl 0x94(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x88(%rsp)
movl 0x8c(%rsp), %eax
movl 0x150(%rsp,%rax,4), %ecx
movl 0x88(%rsp), %eax
andl 0x150(%rsp,%rax,4), %ecx
xorl $-0x1, %ecx
movl 0x90(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x313e(%rip), %rax      # 0x4fd0
movq (%rax), %rdi
callq 0x1100
movq 0x314f(%rip), %rax      # 0x4ff0
movq (%rax), %rdi
leaq 0x1278(%rip), %rsi      # 0x3123
movb $0x0, %al
callq 0x10c0
movl $0x0, 0x1e4(%rsp)
jmp 0x2694
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x84(%rsp)
movl 0x84(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x80(%rsp)
movl 0x84(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x7c(%rsp)
movl 0x7c(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movl %eax, 0x78(%rsp)
movl $0x0, 0x74(%rsp)
movq 0x130(%rsp), %rax
cmpq 0x138(%rsp), %rax
jne 0x1f97
movq 0x140(%rsp), %rax
movl %eax, 0x74(%rsp)
movq 0x140(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x140(%rsp)
movq 0x148(%rsp), %rdi
movq 0x140(%rsp), %rsi
shlq $0x3, %rsi
callq 0x1120
movq %rax, 0x148(%rsp)
cmpq $0x0, 0x148(%rsp)
je 0x1f76
jmp 0x1f95
leaq 0x11af(%rip), %rdi      # 0x312c
leaq 0x10a0(%rip), %rsi      # 0x3024
movl $0xc3, %edx
leaq 0x10a9(%rip), %rcx      # 0x3039
callq 0x1080
jmp 0x1fc3
movq 0x130(%rsp), %rax
movq %rax, %rcx
addq $-0x4, %rcx
movq %rcx, 0x130(%rsp)
movl -0x4(%rax), %eax
movl %eax, 0x74(%rsp)
movq 0x130(%rsp), %rax
movl $0x0, (%rax)
movl 0x78(%rsp), %eax
addl $0x1, %eax
movl %eax, %eax
movl %eax, %edi
movl $0x4, %esi
callq 0x10a0
movq %rax, 0x68(%rsp)
cmpq $0x0, 0x68(%rsp)
je 0x1fe7
jmp 0x2006
leaq 0x113b(%rip), %rdi      # 0x3129
leaq 0x102f(%rip), %rsi      # 0x3024
movl $0xc9, %edx
leaq 0x1038(%rip), %rcx      # 0x3039
callq 0x1080
movl 0x78(%rsp), %ecx
movq 0x68(%rsp), %rax
movl %ecx, (%rax)
movq 0x68(%rsp), %rdx
movq 0x148(%rsp), %rax
movl 0x74(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
movl 0x74(%rsp), %ecx
movl 0x80(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x64(%rsp)
movl 0x64(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x60(%rsp)
movl 0x60(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movl %eax, 0x5c(%rsp)
movl 0x5c(%rsp), %eax
cmpq 0x140(%rsp), %rax
jae 0x20ac
jmp 0x20cb
leaq 0x1022(%rip), %rdi      # 0x30d5
leaq 0xf6a(%rip), %rsi       # 0x3024
movl $0xd5, %edx
leaq 0xf73(%rip), %rcx       # 0x3039
callq 0x1080
cmpl $0x0, 0x5c(%rsp)
je 0x20d4
jmp 0x20f3
leaq 0x105d(%rip), %rdi      # 0x3138
leaq 0xf42(%rip), %rsi       # 0x3024
movl $0xd6, %edx
leaq 0xf4b(%rip), %rcx       # 0x3039
callq 0x1080
movq 0x148(%rsp), %rax
movl 0x5c(%rsp), %ecx
cmpq $0x0, (%rax,%rcx,8)
je 0x2108
jmp 0x2127
leaq 0x1030(%rip), %rdi      # 0x313f
leaq 0xf0e(%rip), %rsi       # 0x3024
movl $0xd7, %edx
leaq 0xf17(%rip), %rcx       # 0x3039
callq 0x1080
movq 0x148(%rsp), %rax
movl 0x5c(%rsp), %ecx
movq (%rax,%rcx,8), %rdi
callq 0x1030
movq 0x148(%rsp), %rax
movl 0x5c(%rsp), %ecx
movq $0x0, (%rax,%rcx,8)
movq 0x130(%rsp), %rax
movq 0x138(%rsp), %rcx
subq %rcx, %rax
sarq $0x2, %rax
movl 0x12c(%rsp), %ecx
cmpq %rcx, %rax
jne 0x2219
cmpl $0x0, 0x12c(%rsp)
jne 0x218c
movl $0x20, %eax
movl %eax, 0xc(%rsp)
jmp 0x2199
movl 0x12c(%rsp), %eax
shll %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
movl %eax, 0x58(%rsp)
movq 0x138(%rsp), %rdi
movl 0x58(%rsp), %eax
movl %eax, %esi
shlq $0x2, %rsi
callq 0x1120
movq %rax, 0x138(%rsp)
movq 0x138(%rsp), %rdi
movl 0x12c(%rsp), %eax
shlq $0x2, %rax
addq %rax, %rdi
movl 0x58(%rsp), %eax
subl 0x12c(%rsp), %eax
movl %eax, %eax
movl %eax, %edx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x1090
movq 0x138(%rsp), %rax
movl 0x12c(%rsp), %ecx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x130(%rsp)
movl 0x58(%rsp), %eax
movl %eax, 0x12c(%rsp)
movl 0x5c(%rsp), %ecx
movq 0x130(%rsp), %rax
movq %rax, %rdx
addq $0x4, %rdx
movq %rdx, 0x130(%rsp)
movl %ecx, (%rax)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x54(%rsp)
movl 0x54(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x50(%rsp)
movl 0x50(%rsp), %eax
cmpl $0xff, 0x150(%rsp,%rax,4)
ja 0x229e
jmp 0x22bd
leaq 0xea9(%rip), %rdi       # 0x314e
leaq 0xd78(%rip), %rsi       # 0x3024
movl $0xe9, %edx
leaq 0xd81(%rip), %rcx       # 0x3039
callq 0x1080
movl 0x50(%rsp), %eax
movl 0x150(%rsp,%rax,4), %edi
callq 0x1040
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x4c(%rsp)
movl 0x4c(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x48(%rsp)
movq 0x2ca7(%rip), %rax      # 0x4fd0
movq (%rax), %rdi
callq 0x1100
callq 0x10b0
movl %eax, 0x44(%rsp)
cmpl $-0x1, 0x44(%rsp)
jne 0x2352
movl 0x48(%rsp), %eax
movl $0xffffffff, 0x150(%rsp,%rax,4) # imm = 0xFFFFFFFF
jmp 0x2394
xorl %eax, %eax
cmpl 0x44(%rsp), %eax
jg 0x2366
cmpl $0xff, 0x44(%rsp)
jg 0x2366
jmp 0x2385
leaq 0xdef(%rip), %rdi       # 0x315c
leaq 0xcb0(%rip), %rsi       # 0x3024
movl $0xf7, %edx
leaq 0xcb9(%rip), %rcx       # 0x3039
callq 0x1080
movl 0x44(%rsp), %ecx
movl 0x48(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x40(%rsp)
movl 0x40(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x3c(%rsp)
movl 0x40(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x38(%rsp)
movl 0x3c(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movl %eax, 0x34(%rsp)
cmpl $0x0, 0x34(%rsp)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2581
movl 0x34(%rsp), %eax
cmpq 0x140(%rsp), %rax
jae 0x2433
jmp 0x2452
leaq 0xc9b(%rip), %rdi       # 0x30d5
leaq 0xbe3(%rip), %rsi       # 0x3024
movl $0x104, %edx            # imm = 0x104
leaq 0xbec(%rip), %rcx       # 0x3039
callq 0x1080
movq 0x148(%rsp), %rax
movl 0x34(%rsp), %ecx
cmpq $0x0, (%rax,%rcx,8)
je 0x2467
jmp 0x2486
leaq 0xcd1(%rip), %rdi       # 0x313f
leaq 0xbaf(%rip), %rsi       # 0x3024
movl $0x105, %edx            # imm = 0x105
leaq 0xbb8(%rip), %rcx       # 0x3039
callq 0x1080
movq 0x148(%rsp), %rax
movl 0x34(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movl (%rax), %eax
movl %eax, 0x30(%rsp)
movl 0x30(%rsp), %eax
addl $0x1, %eax
movl %eax, %eax
movl %eax, %edi
shlq $0x2, %rdi
callq 0x10f0
movq %rax, 0x28(%rsp)
cmpq $0x0, 0x28(%rsp)
je 0x24bf
jmp 0x24de
leaq 0xcab(%rip), %rdi       # 0x3171
leaq 0xb57(%rip), %rsi       # 0x3024
movl $0x108, %edx            # imm = 0x108
leaq 0xb60(%rip), %rcx       # 0x3039
callq 0x1080
movq 0x28(%rsp), %rdi
movq 0x148(%rsp), %rax
movl 0x34(%rsp), %ecx
movq (%rax,%rcx,8), %rsi
movl 0x30(%rsp), %eax
addl $0x1, %eax
movl %eax, %eax
movl %eax, %edx
shlq $0x2, %rdx
callq 0x10e0
movq 0x1a0(%rsp), %rdi
callq 0x1030
movq 0x28(%rsp), %rax
movq %rax, 0x1a0(%rsp)
movq 0x28(%rsp), %rcx
movq 0x148(%rsp), %rax
movq %rcx, (%rax)
movl 0x38(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movq %rax, 0x178(%rsp)
movq 0x178(%rsp), %rax
movq 0x1a0(%rsp), %rcx
movl (%rcx), %ecx
cmpq %rcx, %rax
jae 0x255d
jmp 0x257c
leaq 0xc20(%rip), %rdi       # 0x3184
leaq 0xab9(%rip), %rsi       # 0x3024
movl $0x10e, %edx            # imm = 0x10E
leaq 0xac2(%rip), %rcx       # 0x3039
callq 0x1080
jmp 0x16db
movl 0x38(%rsp), %eax
movl 0x150(%rsp,%rax,4), %eax
movq %rax, 0x178(%rsp)
movq 0x178(%rsp), %rax
movq 0x1a0(%rsp), %rcx
movl (%rcx), %ecx
cmpq %rcx, %rax
jae 0x25ad
jmp 0x25cc
leaq 0xbd0(%rip), %rdi       # 0x3184
leaq 0xa69(%rip), %rsi       # 0x3024
movl $0x112, %edx            # imm = 0x112
leaq 0xa72(%rip), %rcx       # 0x3039
callq 0x1080
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x24(%rsp)
movl 0x24(%rsp), %eax
shrl $0x19, %eax
andl $0x7, %eax
movl %eax, 0x20(%rsp)
movl 0x24(%rsp), %eax
andl $0x1ffffff, %eax        # imm = 0x1FFFFFF
movl %eax, 0x1c(%rsp)
movl 0x1c(%rsp), %ecx
movl 0x20(%rsp), %eax
movl %ecx, 0x150(%rsp,%rax,4)
movq 0x178(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x178(%rsp)
movq 0x120(%rsp), %rax
movq 0x178(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x10(%rsp)
jmp 0x26a3
movq 0x1a0(%rsp), %rax
movq 0x178(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x18(%rsp)
movq 0x2976(%rip), %rax      # 0x4ff0
movq (%rax), %rdi
movl 0x18(%rsp), %edx
leaq 0xb0e(%rip), %rsi       # 0x3196
movb $0x0, %al
callq 0x10c0
callq 0x1050
movl 0x1e4(%rsp), %eax
addq $0x1e8, %rsp            # imm = 0x1E8
retq
movq 0x10(%rsp), %rax
jmpq *%rax