// File: iPapatsoris[P]Maximum-Independent-Set/src/Reductions.cpp
// Function: Reductions::removeShortFunnels(unsigned int const&)
bool Reductions::removeShortFunnels(const uint32_t &theta) {
    //cout << "\n**Performing short funnels reduction**" << endl;
    uint32_t minDegree = NONE;
    graph.getMinDegree(minDegree);
    if (minDegree > 4) {
        return false;
    }
    Graph::GraphTraversal graphTraversal(graph);
    while (graphTraversal.curNode != NONE) {
        uint32_t nodeV = graphTraversal.curNode;
        if (graph.getNodeDegree(nodeV) == 3) {
            //cout << "nodeV " << nodeV << endl;
            vector<uint32_t> neighborsV;
            graph.gatherNeighbors(nodeV, neighborsV);
            for (uint32_t i = 0 ; i < 3 ; i++) {
                uint32_t nodeA = neighborsV[i];
                uint32_t nodeB, nodeC;
                if (i == 0) {
                    nodeB = neighborsV[1];
                    nodeC = neighborsV[2];
                } else if (i == 1) {
                    nodeB = neighborsV[0];
                    nodeC = neighborsV[2];
                } else {
                    nodeB = neighborsV[0];
                    nodeC = neighborsV[1];
                }
                if ((theta == 5 && graph.getNodeDegree(nodeA) == minDegree || theta == 4 && graph.getNodeDegree(nodeA) <= 4 || theta == 3) && graph.edgeExists(nodeB, nodeC)) {
                    bool shortFunnel = false;
                    vector<uint32_t> neighborsA;
                    graph.gatherNeighbors(nodeA, neighborsA);
                    if (theta == 5 && minDegree == 3 || theta == 4) {
                        uint32_t edges;
                        if (theta == 5) {
                            edges = 1;
                        } else if (theta == 4) {
                            edges = graph.getNodeDegree(nodeA) - 2;
                        }
                        for (auto &neighbor: neighborsA) {
                            if (neighbor == nodeV) {
                                continue;
                            }
                            if (graph.edgeExists(neighbor, nodeB) || graph.edgeExists(neighbor, nodeC)) {
                                if (--edges) {
                                    shortFunnel = true;
                                    break;
                                }
                            }
                        }
                    } else if (theta == 5 && minDegree == 4) {
                        uint32_t countB = 0;
                        uint32_t countC = 0;
                        uint32_t *count;
                        uint32_t target;
                        for (auto &neighbor: neighborsA) {
                            count = &countB;
                            target = nodeB;
                            for (uint32_t i = 0 ; i < 2 ; i++) {
                                if (graph.edgeExists(neighbor, target)) {
                                    (*count)++;
                                    if ((*count) == 2) {
                                        shortFunnel = true;
                                        break;
                                    }
                                }
                                count = &countC;
                                target = nodeC;
                            }
                            if (shortFunnel) {
                                break;
                            }
                        }
                    } else if (theta == 3) {
                        uint32_t count = 0;
                        uint32_t atmost = graph.getNodeDegree(nodeA);
                        shortFunnel = true;
                        for (auto &neighbor: neighborsA) {
                            if (neighbor == nodeV) {
                                continue;
                            }
                            if (!graph.edgeExists(neighbor, nodeB)) {
                                if (++count > atmost) {
                                    shortFunnel = false;
                                    break;
                                }
                            }
                            if (!graph.edgeExists(neighbor, nodeC)) {
                                if (++count > atmost) {
                                    shortFunnel = false;
                                    break;
                                }
                            }
                        }
                    }
                    if (shortFunnel) {
                        //cout << "short funnel " << nodeA << "-" << nodeV << "-{" << nodeB << "," << nodeC << "}" << endl;
                        vector<uint32_t> container;
                        container.push_back(nodeA);
                        container.push_back(nodeV);
                        graph.remove(container, reduceInfo);
                        uint32_t target = nodeB;
                        for (uint32_t i = 0 ; i < 2 ; i++) {
                            container.clear();
                            for (auto &neighbor: neighborsA) {
                                if (neighbor == nodeV) {
                                    continue;
                                }
                                if (!graph.edgeExists(neighbor, target)) {
                                    container.push_back(neighbor);
                                    graph.addEdges(neighbor, vector<uint32_t>(1, target));
                                }
                            }
                            graph.addEdges(target, container);
                            target = nodeC;
                        }
                        auto &subsequentNodes = mis.getSubsequentNodes();
                        for (auto &neighbor: neighborsA) {
                            if (neighbor == nodeV) {
                                continue;
                            }
                            subsequentNodes.insert({neighbor, nodeV});
                        }
                        subsequentNodes.insert({nodeB, nodeA});
                        subsequentNodes.insert({nodeC, nodeA});
                        return true;
                    }
                }
            }
        }
        graph.getNextNode(graphTraversal);
    }
    return false;
}

// Assembly:
subq $0x2a8, %rsp            # imm = 0x2A8
movq %rdi, 0x298(%rsp)
movq %rsi, 0x290(%rsp)
movq 0x298(%rsp), %rax
movq %rax, 0xb0(%rsp)
movl $0xffffffff, 0x28c(%rsp) # imm = 0xFFFFFFFF
movq (%rax), %rdi
leaq 0x28c(%rsp), %rsi
callq 0x2bd0
cmpl $0x4, 0x28c(%rsp)
jbe 0x2f809
movb $0x0, 0x2a7(%rsp)
jmp 0x3055e
movq 0xb0(%rsp), %rax
movq (%rax), %rsi
leaq 0x284(%rsp), %rdi
callq 0x2a40
cmpl $-0x1, 0x284(%rsp)
je 0x30556
movq 0xb0(%rsp), %rax
movl 0x284(%rsp), %ecx
movl %ecx, 0x280(%rsp)
movq (%rax), %rdi
leaq 0x280(%rsp), %rsi
callq 0x1a040
cmpl $0x3, %eax
jne 0x30539
leaq 0x268(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x17e60
movq 0xb0(%rsp), %rax
movq 0xa8(%rsp), %rdx
movq (%rax), %rdi
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
xorl %eax, %eax
movl %eax, %ecx
leaq 0x280(%rsp), %rsi
leaq 0x264(%rsp), %r8
callq 0x19c30
jmp 0x2f8ac
movl $0x0, 0x250(%rsp)
cmpl $0x3, 0x250(%rsp)
jae 0x30501
movl 0x250(%rsp), %eax
movl %eax, %esi
leaq 0x268(%rsp), %rdi
callq 0x18900
movl (%rax), %eax
movl %eax, 0x24c(%rsp)
cmpl $0x0, 0x250(%rsp)
jne 0x2f942
leaq 0x268(%rsp), %rdi
movl $0x1, %esi
callq 0x18900
movl (%rax), %eax
movl %eax, 0x248(%rsp)
leaq 0x268(%rsp), %rdi
movl $0x2, %esi
callq 0x18900
movl (%rax), %eax
movl %eax, 0x244(%rsp)
jmp 0x2f9ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x258(%rsp)
movl %eax, 0x254(%rsp)
jmp 0x3052a
cmpl $0x1, 0x250(%rsp)
jne 0x2f983
leaq 0x268(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x18900
movl (%rax), %eax
movl %eax, 0x248(%rsp)
leaq 0x268(%rsp), %rdi
movl $0x2, %esi
callq 0x18900
movl (%rax), %eax
movl %eax, 0x244(%rsp)
jmp 0x2f9b8
leaq 0x268(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x18900
movl (%rax), %eax
movl %eax, 0x248(%rsp)
leaq 0x268(%rsp), %rdi
movl $0x1, %esi
callq 0x18900
movl (%rax), %eax
movl %eax, 0x244(%rsp)
jmp 0x2f9ba
movq 0x290(%rsp), %rax
cmpl $0x5, (%rax)
jne 0x2f9f8
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
leaq 0x24c(%rsp), %rsi
callq 0x1a040
movl %eax, 0xa4(%rsp)
jmp 0x2f9e8
movl 0xa4(%rsp), %eax
cmpl 0x28c(%rsp), %eax
je 0x2fa43
movq 0x290(%rsp), %rax
cmpl $0x4, (%rax)
jne 0x2fa32
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
leaq 0x24c(%rsp), %rsi
callq 0x1a040
movl %eax, 0xa0(%rsp)
jmp 0x2fa26
movl 0xa0(%rsp), %eax
cmpl $0x4, %eax
jbe 0x2fa43
movq 0x290(%rsp), %rax
cmpl $0x3, (%rax)
jne 0x304e9
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
leaq 0x248(%rsp), %rsi
leaq 0x244(%rsp), %rdx
callq 0x18920
movb %al, 0x9f(%rsp)
jmp 0x2fa6c
movb 0x9f(%rsp), %al
testb $0x1, %al
jne 0x2fa7c
jmp 0x304e9
movb $0x0, 0x243(%rsp)
leaq 0x228(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x17e60
movq 0xb0(%rsp), %rax
movq 0x90(%rsp), %rdx
movq (%rax), %rdi
movl $0xffffffff, 0x224(%rsp) # imm = 0xFFFFFFFF
xorl %eax, %eax
movl %eax, %ecx
leaq 0x24c(%rsp), %rsi
leaq 0x224(%rsp), %r8
callq 0x19c30
jmp 0x2fad2
movq 0x290(%rsp), %rax
cmpl $0x5, (%rax)
jne 0x2fae9
cmpl $0x3, 0x28c(%rsp)
je 0x2fafa
movq 0x290(%rsp), %rax
cmpl $0x4, (%rax)
jne 0x2fc9a
movq 0x290(%rsp), %rax
cmpl $0x5, (%rax)
jne 0x2fb2d
movl $0x1, 0x220(%rsp)
jmp 0x2fb6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x258(%rsp)
movl %eax, 0x254(%rsp)
jmp 0x304da
movq 0x290(%rsp), %rax
cmpl $0x4, (%rax)
jne 0x2fb6c
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
leaq 0x24c(%rsp), %rsi
callq 0x1a040
movl %eax, 0x8c(%rsp)
jmp 0x2fb5b
movl 0x8c(%rsp), %eax
subl $0x2, %eax
movl %eax, 0x220(%rsp)
jmp 0x2fb6e
leaq 0x228(%rsp), %rax
movq %rax, 0x218(%rsp)
movq 0x218(%rsp), %rdi
callq 0x19b50
movq %rax, 0x210(%rsp)
movq 0x218(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x208(%rsp)
leaq 0x210(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0x2fbc6
jmp 0x2fc95
leaq 0x210(%rsp), %rdi
callq 0x1a150
movq %rax, 0x200(%rsp)
movq 0x200(%rsp), %rax
movl (%rax), %eax
cmpl 0x280(%rsp), %eax
jne 0x2fbf3
jmp 0x2fc83
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
movq 0x200(%rsp), %rsi
leaq 0x248(%rsp), %rdx
callq 0x18920
movb %al, 0x8b(%rsp)
jmp 0x2fc1c
movb 0x8b(%rsp), %al
testb $0x1, %al
jne 0x2fc5f
jmp 0x2fc29
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
movq 0x200(%rsp), %rsi
leaq 0x244(%rsp), %rdx
callq 0x18920
movb %al, 0x8a(%rsp)
jmp 0x2fc52
movb 0x8a(%rsp), %al
testb $0x1, %al
jne 0x2fc5f
jmp 0x2fc81
movl 0x220(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x220(%rsp)
cmpl $0x0, %eax
je 0x2fc7f
movb $0x1, 0x243(%rsp)
jmp 0x2fc95
jmp 0x2fc81
jmp 0x2fc83
leaq 0x210(%rsp), %rdi
callq 0x1a160
jmp 0x2fba8
jmp 0x2ffd4
movq 0x290(%rsp), %rax
cmpl $0x5, (%rax)
jne 0x2fe2a
cmpl $0x4, 0x28c(%rsp)
jne 0x2fe2a
movl $0x0, 0x1fc(%rsp)
movl $0x0, 0x1f8(%rsp)
leaq 0x228(%rsp), %rax
movq %rax, 0x1e0(%rsp)
movq 0x1e0(%rsp), %rdi
callq 0x19b50
movq %rax, 0x1d8(%rsp)
movq 0x1e0(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x1d0(%rsp)
leaq 0x1d8(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0x2fd27
jmp 0x2fe25
leaq 0x1d8(%rsp), %rdi
callq 0x1a150
movq %rax, 0x1c8(%rsp)
leaq 0x1fc(%rsp), %rax
movq %rax, 0x1f0(%rsp)
movl 0x248(%rsp), %eax
movl %eax, 0x1ec(%rsp)
movl $0x0, 0x1c4(%rsp)
cmpl $0x2, 0x1c4(%rsp)
jae 0x2fe05
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
movq 0x1c8(%rsp), %rsi
leaq 0x1ec(%rsp), %rdx
callq 0x18920
movb %al, 0x89(%rsp)
jmp 0x2fd9c
movb 0x89(%rsp), %al
testb $0x1, %al
jne 0x2fda9
jmp 0x2fdd1
movq 0x1f0(%rsp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq 0x1f0(%rsp), %rax
cmpl $0x2, (%rax)
jne 0x2fdcf
movb $0x1, 0x243(%rsp)
jmp 0x2fe05
jmp 0x2fdd1
leaq 0x1f8(%rsp), %rax
movq %rax, 0x1f0(%rsp)
movl 0x244(%rsp), %eax
movl %eax, 0x1ec(%rsp)
movl 0x1c4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c4(%rsp)
jmp 0x2fd65
testb $0x1, 0x243(%rsp)
je 0x2fe11
jmp 0x2fe25
jmp 0x2fe13
leaq 0x1d8(%rsp), %rdi
callq 0x1a160
jmp 0x2fd09
jmp 0x2ffd2
movq 0x290(%rsp), %rax
cmpl $0x3, (%rax)
jne 0x2ffd0
movq 0xb0(%rsp), %rax
movl $0x0, 0x1c0(%rsp)
movq (%rax), %rdi
leaq 0x24c(%rsp), %rsi
callq 0x1a040
movl %eax, 0x84(%rsp)
jmp 0x2fe67
movl 0x84(%rsp), %eax
movl %eax, 0x1bc(%rsp)
movb $0x1, 0x243(%rsp)
leaq 0x228(%rsp), %rax
movq %rax, 0x1b0(%rsp)
movq 0x1b0(%rsp), %rdi
callq 0x19b50
movq %rax, 0x1a8(%rsp)
movq 0x1b0(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x1a0(%rsp)
leaq 0x1a8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0x2fed5
jmp 0x2ffce
leaq 0x1a8(%rsp), %rdi
callq 0x1a150
movq %rax, 0x198(%rsp)
movq 0x198(%rsp), %rax
movl (%rax), %eax
cmpl 0x280(%rsp), %eax
jne 0x2ff02
jmp 0x2ffbc
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
movq 0x198(%rsp), %rsi
leaq 0x248(%rsp), %rdx
callq 0x18920
movb %al, 0x83(%rsp)
jmp 0x2ff2b
movb 0x83(%rsp), %al
testb $0x1, %al
jne 0x2ff5e
jmp 0x2ff38
movl 0x1c0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c0(%rsp)
cmpl 0x1bc(%rsp), %eax
jbe 0x2ff5c
movb $0x0, 0x243(%rsp)
jmp 0x2ffce
jmp 0x2ff5e
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
movq 0x198(%rsp), %rsi
leaq 0x244(%rsp), %rdx
callq 0x18920
movb %al, 0x82(%rsp)
jmp 0x2ff87
movb 0x82(%rsp), %al
testb $0x1, %al
jne 0x2ffba
jmp 0x2ff94
movl 0x1c0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c0(%rsp)
cmpl 0x1bc(%rsp), %eax
jbe 0x2ffb8
movb $0x0, 0x243(%rsp)
jmp 0x2ffce
jmp 0x2ffba
jmp 0x2ffbc
leaq 0x1a8(%rsp), %rdi
callq 0x1a160
jmp 0x2feb7
jmp 0x2ffd0
jmp 0x2ffd2
jmp 0x2ffd4
testb $0x1, 0x243(%rsp)
je 0x304b3
leaq 0x180(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x17e60
movq 0x78(%rsp), %rdi
leaq 0x24c(%rsp), %rsi
callq 0x19070
jmp 0x30008
leaq 0x180(%rsp), %rdi
leaq 0x280(%rsp), %rsi
callq 0x19070
jmp 0x3001f
movq 0xb0(%rsp), %rdx
movq (%rdx), %rdi
addq $0x10, %rdx
movb $0x0, 0x17f(%rsp)
movb $0x0, 0x17e(%rsp)
xorl %eax, %eax
movl %eax, %r8d
leaq 0x180(%rsp), %rsi
leaq 0x17f(%rsp), %rcx
leaq 0x17e(%rsp), %r9
callq 0x189b0
jmp 0x30062
movl 0x248(%rsp), %eax
movl %eax, 0x178(%rsp)
movl $0x0, 0x174(%rsp)
cmpl $0x2, 0x174(%rsp)
jae 0x302a6
leaq 0x180(%rsp), %rdi
callq 0x191c0
leaq 0x228(%rsp), %rax
movq %rax, 0x168(%rsp)
movq 0x168(%rsp), %rdi
callq 0x19b50
movq %rax, 0x160(%rsp)
movq 0x168(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x158(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0x300ee
jmp 0x30261
leaq 0x160(%rsp), %rdi
callq 0x1a150
movq %rax, 0x150(%rsp)
movq 0x150(%rsp), %rax
movl (%rax), %eax
cmpl 0x280(%rsp), %eax
jne 0x30134
jmp 0x3024f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x258(%rsp)
movl %eax, 0x254(%rsp)
jmp 0x304a4
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
movq 0x150(%rsp), %rsi
leaq 0x178(%rsp), %rdx
callq 0x18920
movb %al, 0x77(%rsp)
jmp 0x3015a
movb 0x77(%rsp), %al
testb $0x1, %al
jne 0x3024d
jmp 0x30168
movq 0x150(%rsp), %rsi
leaq 0x180(%rsp), %rdi
callq 0x19070
jmp 0x3017f
movq 0xb0(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x58(%rsp)
movq 0x150(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x64(%rsp)
leaq 0x137(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x18d80
movq 0x68(%rsp), %rcx
leaq 0x138(%rsp), %rdi
movl $0x1, %esi
leaq 0x178(%rsp), %rdx
callq 0x18d90
jmp 0x301d0
movl 0x64(%rsp), %esi
movq 0x58(%rsp), %rdi
leaq 0x138(%rsp), %rdx
callq 0x9840
jmp 0x301e8
leaq 0x138(%rsp), %rdi
callq 0x18520
leaq 0x137(%rsp), %rdi
callq 0x18e10
jmp 0x3024d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x258(%rsp)
movl %eax, 0x254(%rsp)
jmp 0x3023b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x258(%rsp)
movl %eax, 0x254(%rsp)
leaq 0x138(%rsp), %rdi
callq 0x18520
leaq 0x137(%rsp), %rdi
callq 0x18e10
jmp 0x304a4
jmp 0x3024f
leaq 0x160(%rsp), %rdi
callq 0x1a160
jmp 0x300d0
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
movl 0x178(%rsp), %esi
leaq 0x180(%rsp), %rdx
callq 0x9840
jmp 0x30282
movl 0x244(%rsp), %eax
movl %eax, 0x178(%rsp)
movl 0x174(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x174(%rsp)
jmp 0x3007b
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x33420
movq %rax, 0x50(%rsp)
jmp 0x302be
movq 0x50(%rsp), %rax
movq %rax, 0x128(%rsp)
leaq 0x228(%rsp), %rax
movq %rax, 0x120(%rsp)
movq 0x120(%rsp), %rdi
callq 0x19b50
movq %rax, 0x118(%rsp)
movq 0x120(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x110(%rsp)
leaq 0x118(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0x30323
jmp 0x303c0
leaq 0x118(%rsp), %rdi
callq 0x1a150
movq %rax, 0x108(%rsp)
movq 0x108(%rsp), %rax
movl (%rax), %eax
cmpl 0x280(%rsp), %eax
jne 0x3034d
jmp 0x303ae
movq 0x128(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x108(%rsp), %rsi
leaq 0x100(%rsp), %rdi
leaq 0x280(%rsp), %rdx
callq 0x1b1e0
jmp 0x30379
movq 0x48(%rsp), %rdi
leaq 0x100(%rsp), %rsi
callq 0x190e0
movb %dl, 0x3f(%rsp)
movq %rax, 0x40(%rsp)
jmp 0x30396
movb 0x3f(%rsp), %al
movq 0x40(%rsp), %rcx
movq %rcx, 0xf0(%rsp)
movb %al, 0xf8(%rsp)
leaq 0x118(%rsp), %rdi
callq 0x1a160
jmp 0x30305
movq 0x128(%rsp), %rax
movq %rax, 0x30(%rsp)
leaq 0xe8(%rsp), %rdi
leaq 0x248(%rsp), %rsi
leaq 0x24c(%rsp), %rdx
callq 0x1b1e0
jmp 0x303ec
movq 0x30(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x190e0
movb %dl, 0x27(%rsp)
movq %rax, 0x28(%rsp)
jmp 0x30409
movb 0x27(%rsp), %al
movq 0x28(%rsp), %rcx
movq %rcx, 0xd8(%rsp)
movb %al, 0xe0(%rsp)
movq 0x128(%rsp), %rax
movq %rax, 0x18(%rsp)
leaq 0xd0(%rsp), %rdi
leaq 0x244(%rsp), %rsi
leaq 0x24c(%rsp), %rdx
callq 0x1b1e0
jmp 0x3044d
movq 0x18(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x190e0
movb %dl, 0xf(%rsp)
movq %rax, 0x10(%rsp)
jmp 0x3046a
movb 0xf(%rsp), %al
movq 0x10(%rsp), %rcx
movq %rcx, 0xc0(%rsp)
movb %al, 0xc8(%rsp)
movb $0x1, 0x2a7(%rsp)
movl $0x1, 0xbc(%rsp)
leaq 0x180(%rsp), %rdi
callq 0x18520
jmp 0x304be
leaq 0x180(%rsp), %rdi
callq 0x18520
jmp 0x304da
movl $0x0, 0xbc(%rsp)
leaq 0x228(%rsp), %rdi
callq 0x18520
movl 0xbc(%rsp), %eax
testl %eax, %eax
jne 0x3050c
jmp 0x304d8
jmp 0x304e9
leaq 0x228(%rsp), %rdi
callq 0x18520
jmp 0x3052a
jmp 0x304eb
movl 0x250(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x250(%rsp)
jmp 0x2f8b7
movl $0x0, 0xbc(%rsp)
leaq 0x268(%rsp), %rdi
callq 0x18520
movl 0xbc(%rsp), %eax
testl %eax, %eax
je 0x30528
jmp 0x30526
jmp 0x3055e
jmp 0x30539
leaq 0x268(%rsp), %rdi
callq 0x18520
jmp 0x3056f
movq 0xb0(%rsp), %rax
movq (%rax), %rdi
leaq 0x284(%rsp), %rsi
callq 0x185f0
jmp 0x2f821
movb $0x0, 0x2a7(%rsp)
movb 0x2a7(%rsp), %al
andb $0x1, %al
addq $0x2a8, %rsp            # imm = 0x2A8
retq
movq 0x258(%rsp), %rdi
callq 0x2310
nopl (%rax)