// File: iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getSeparatingPairs2(std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>&, std::vector<unsigned int, std::allocator<unsigned int>>&, std::vector<unsigned int, std::allocator<unsigned int>>&, bool&, unsigned int const&, std::unordered_map<unsigned int, std::vector<unsigned int, std::allocator<unsigned int>>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<unsigned int, std::allocator<unsigned int>>>>>&, std::unordered_map<unsigned int, std::vector<unsigned int, std::allocator<unsigned int>>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<unsigned int, std::allocator<unsigned int>>>>>&, std::unordered_map<unsigned int, std::vector<unsigned int, std::allocator<unsigned int>>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<unsigned int, std::allocator<unsigned int>>>>>&, std::unordered_map<unsigned int, Graph::Value1, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, Graph::Value1>>>&, std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>&, std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>&, std::unordered_map<unsigned int, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>>>>&, std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>&) const
bool Graph::getSeparatingPairs2(unordered_set<uint32_t> &vertexCut, vector<uint32_t> &component1, vector<uint32_t> &component2, bool &actualComponent1,
                               const uint32_t &numberOfNodes, unordered_map<uint32_t, vector<uint32_t> > &palmTree1, unordered_map<uint32_t, vector<uint32_t> > &palmTree2,
                               unordered_map<uint32_t, vector<uint32_t> > &bothPalmTrees, unordered_map<uint32_t, Value1> &oldExploredSet, unordered_map<uint32_t, uint32_t> &fathers,
                               unordered_map<uint32_t, uint32_t> &sons, unordered_map<uint32_t, unordered_set<uint32_t> > &descendants, unordered_map<uint32_t, uint32_t> &visitToId) const {

    struct Edge {
        uint32_t node;
        uint32_t neighbor;

        Edge(const uint32_t &node, const uint32_t &neighbor) : node(node), neighbor(neighbor) {}
    };

    struct Value2 {
        Value2(const uint32_t &visit) : visit(visit), low1(visit), low2(visit), high(visit) {}
        uint32_t visit;
        uint32_t low1;
        uint32_t low2;
        uint32_t high;
    };

    struct Instance {
        Instance(const uint32_t &node) : node(node), curNeighborIndex(0) {}
        uint32_t node;
        uint32_t curNeighborIndex;
    };

    vector<vector<Edge> > buckets(2 * numberOfNodes + 1, vector<Edge>());
    assert(buckets.size() == 2 * numberOfNodes + 1);
    for (auto &arc: bothPalmTrees) {
        uint32_t v = arc.first;
        for (auto w: arc.second) {
            auto res = palmTree2.find(v);
            bool edgeExists = false;
            if (res != palmTree2.end()) {
                for (auto n: res->second) {
                    if (n == w) {
                        edgeExists = true;
                        buckets[2 * oldExploredSet.find(w)->second.visit + 1].push_back(Edge(v, w));
                    }
                }
            }
            if (!edgeExists) {
                auto itW = oldExploredSet.find(w);
                if (itW->second.low2 < oldExploredSet.find(v)->second.visit) {
                    buckets[2 * itW->second.low1].push_back(Edge(v, w));
                } else {
                    buckets[2 * itW->second.low1 + 1].push_back(Edge(v, w));
                }
            }
        }
    }
    unordered_map<uint32_t, vector<uint32_t> > sortedPalmTree;
    for (auto &bucket: buckets) {
        for (auto &edge: bucket) {
            auto it = sortedPalmTree.find(edge.node);
            if (it != sortedPalmTree.end()) {
                it->second.push_back(edge.neighbor);
            } else {
                vector<uint32_t> tmp;
                tmp.push_back(edge.neighbor);
                sortedPalmTree.insert({edge.node, tmp});
            }
        }
    }

    uint32_t visit = numberOfNodes;
    unordered_map<uint32_t, Value2> exploredSet;
    stack<Instance> frontier;
    uint32_t root = visitToId.find(1)->second;
    if (exploredSet.find(root) == exploredSet.end()) {
        frontier.push(Instance(root));
        while (!frontier.empty()) {
            uint32_t node = frontier.top().node;
            exploredSet.insert({node, Value2(visit - oldExploredSet.find(node)->second.nd)});
            bool newCall;
            do {
                node = frontier.top().node;
                uint32_t &curNeighborIndex = frontier.top().curNeighborIndex;
                newCall = false;
                while (curNeighborIndex < sortedPalmTree.find(node)->second.size()) {
                    uint32_t neighbor = sortedPalmTree.find(node)->second.at(curNeighborIndex);
                    auto it = exploredSet.find(neighbor);
                    if (it == exploredSet.end()) {
                        newCall = true;
                        frontier.push(Instance(neighbor));
                        break;
                    } else {
                        auto itV = exploredSet.find(node);
                        if (neighbor != root) {
                            auto itW = exploredSet.find(fathers.find(neighbor)->second);
                            if (itV->second.visit > itW->second.high) {
                                itW->second.high = itV->second.visit;
                            }
                        }
                        auto itW = exploredSet.find(neighbor);
                        if (itW->second.visit < itV->second.low1) {
                            itV->second.low2 = itV->second.low1;
                            itV->second.low1 = itW->second.visit;
                        } else if (itW->second.visit > itV->second.low1 && itW->second.visit < itV->second.low2) {
                            itV->second.low2 = itW->second.visit;
                        }
                    }
                    curNeighborIndex++;
                }
                if (!newCall) {
                    uint32_t neighbor = frontier.top().node;
                    frontier.pop();
                    if (!frontier.size()) {
                        break;
                    }
                    node = frontier.top().node;
                    auto itVSons = sons.find(exploredSet.find(node)->second.visit);
                    auto itW = exploredSet.find(neighbor);
                    if (itVSons->second == 0) {
                        itVSons->second = itW->second.visit;
                    }
                    visit--;
                    auto itV = exploredSet.find(node);
                    if (itW->second.low1 < itV->second.low1) {
                        itV->second.low2 = itV->second.low1;
                        if (itW->second.low2 < itV->second.low2) {
                            itV->second.low2 = itW->second.low2;
                        }
                        itV->second.low1 = itW->second.low1;
                    } else if (itW->second.low1 == itV->second.low1) {
                        if (itW->second.low2 < itV->second.low2) {
                            itV->second.low2 = itW->second.low2;
                        }
                    } else if (itW->second.low1 < itV->second.low2) {
                        itV->second.low2 = itW->second.low1;
                    }
                    frontier.top().curNeighborIndex++;
                }
            } while (!newCall);
        }
    }

    for (auto &edge: sortedPalmTree) {
        uint32_t b = edge.first;
        uint32_t visitB = exploredSet.find(b)->second.visit;
        for (auto r: edge.second) {
            auto itR = exploredSet.find(r);
            uint32_t low1R = itR->second.low1;
            uint32_t low2R = itR->second.low2;
            if (low2R >= visitB) {
                for (auto &a: exploredSet) {
                    if (a.second.visit < visitB && low1R == a.second.visit) {
                        auto descendantsR = descendants.find(r);
                        for (auto &node: exploredSet) {
                            if (node.first != a.first && node.first != b && node.first != r && (descendantsR == descendants.end() || descendantsR->second.find(node.first) == descendantsR->second.end())) {
                                //cout << "Separating pair " << a.first << "-" << b << endl;
                                unordered_set<uint32_t> cut;
                                cut.insert(a.first);
                                cut.insert(b);
                                if (checkSeparation(cut, component1, component2, actualComponent1)) {
                                    vertexCut = cut;
                                    //cout << "Separating pair " << a.first << "-" << b << endl;
                                    return true;
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
    return false;
}

// Assembly:
subq $0x6b8, %rsp            # imm = 0x6B8
movq 0x6f8(%rsp), %rax
movq 0x6f0(%rsp), %rax
movq 0x6e8(%rsp), %rax
movq 0x6e0(%rsp), %rax
movq 0x6d8(%rsp), %rax
movq 0x6d0(%rsp), %rax
movq 0x6c8(%rsp), %rax
movq 0x6c0(%rsp), %rax
movq %rdi, 0x6a8(%rsp)
movq %rsi, 0x6a0(%rsp)
movq %rdx, 0x698(%rsp)
movq %rcx, 0x690(%rsp)
movq %r8, 0x688(%rsp)
movq %r9, 0x680(%rsp)
movq 0x6a8(%rsp), %rax
movq %rax, 0x1e8(%rsp)
movq 0x680(%rsp), %rax
movl (%rax), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movq %rax, 0x1f0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x650(%rsp)
movq $0x0, 0x660(%rsp)
leaq 0x650(%rsp), %rdi
movq %rdi, 0x1f8(%rsp)
callq 0xe0c0
leaq 0x64f(%rsp), %rdi
movq %rdi, 0x200(%rsp)
callq 0xe0d0
movq 0x1f0(%rsp), %rsi
movq 0x1f8(%rsp), %rdx
movq 0x200(%rsp), %rcx
leaq 0x668(%rsp), %rdi
callq 0xe0e0
jmp 0xc8a7
leaq 0x64f(%rsp), %rdi
callq 0xe160
leaq 0x650(%rsp), %rdi
callq 0xe170
leaq 0x668(%rsp), %rdi
callq 0xe1d0
movq 0x680(%rsp), %rcx
movl (%rcx), %ecx
shll %ecx
addl $0x1, %ecx
movl %ecx, %ecx
cmpq %rcx, %rax
jne 0xc8e6
jmp 0xc938
leaq 0x39aa8(%rip), %rdi     # 0x46395
leaq 0x39746(%rip), %rsi     # 0x4603a
movl $0x5a6, %edx            # imm = 0x5A6
leaq 0x39abd(%rip), %rcx     # 0x463bd
callq 0x2110
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
leaq 0x64f(%rsp), %rdi
callq 0xe160
leaq 0x650(%rsp), %rdi
callq 0xe170
jmp 0xe096
movq 0x6d0(%rsp), %rax
movq %rax, 0x630(%rsp)
movq 0x630(%rsp), %rdi
callq 0x1b420
movq %rax, 0x628(%rsp)
movq 0x630(%rsp), %rdi
callq 0x1af60
movq %rax, 0x620(%rsp)
leaq 0x628(%rsp), %rdi
leaq 0x620(%rsp), %rsi
callq 0x1b450
testb $0x1, %al
jne 0xc990
jmp 0xcd77
leaq 0x628(%rsp), %rdi
callq 0x1b470
movq %rax, 0x618(%rsp)
movq 0x618(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x614(%rsp)
movq 0x618(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x608(%rsp)
movq 0x608(%rsp), %rdi
callq 0x19b50
movq %rax, 0x600(%rsp)
movq 0x608(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x5f8(%rsp)
leaq 0x600(%rsp), %rdi
leaq 0x5f8(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0xca12
jmp 0xcd63
leaq 0x600(%rsp), %rdi
callq 0x1a150
movl (%rax), %eax
movl %eax, 0x5f4(%rsp)
movq 0x6c8(%rsp), %rdi
leaq 0x614(%rsp), %rsi
callq 0x1af10
movq %rax, 0x1e0(%rsp)
jmp 0xca47
movq 0x1e0(%rsp), %rax
movq %rax, 0x5e8(%rsp)
movb $0x0, 0x5e7(%rsp)
movq 0x6c8(%rsp), %rdi
callq 0x1af60
movq %rax, 0x5d8(%rsp)
leaq 0x5e8(%rsp), %rdi
leaq 0x5d8(%rsp), %rsi
callq 0x1b450
testb $0x1, %al
jne 0xca92
jmp 0xcbe8
leaq 0x5e8(%rsp), %rdi
callq 0x1b040
addq $0x8, %rax
movq %rax, 0x5d0(%rsp)
movq 0x5d0(%rsp), %rdi
callq 0x19b50
movq %rax, 0x5c8(%rsp)
movq 0x5d0(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x5c0(%rsp)
leaq 0x5c8(%rsp), %rdi
leaq 0x5c0(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0xcaf3
jmp 0xcbe6
leaq 0x5c8(%rsp), %rdi
callq 0x1a150
movl (%rax), %eax
movl %eax, 0x5bc(%rsp)
movl 0x5bc(%rsp), %eax
cmpl 0x5f4(%rsp), %eax
jne 0xcbd2
movb $0x1, 0x5e7(%rsp)
movq 0x6d8(%rsp), %rdi
leaq 0x5f4(%rsp), %rsi
callq 0x1b0b0
movq %rax, 0x1d8(%rsp)
jmp 0xcb44
movq 0x1d8(%rsp), %rax
movq %rax, 0x5b0(%rsp)
leaq 0x5b0(%rsp), %rdi
callq 0x1b240
movl 0x4(%rax), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movl %eax, %esi
leaq 0x668(%rsp), %rdi
callq 0xe1f0
movq %rax, 0x1d0(%rsp)
leaq 0x5a8(%rsp), %rdi
leaq 0x614(%rsp), %rsi
leaq 0x5f4(%rsp), %rdx
callq 0xe240
jmp 0xcba0
movq 0x1d0(%rsp), %rdi
leaq 0x5a8(%rsp), %rsi
callq 0xe210
jmp 0xcbb7
jmp 0xcbd2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
jmp 0xe089
jmp 0xcbd4
leaq 0x5c8(%rsp), %rdi
callq 0x1a160
jmp 0xcad5
jmp 0xcbe8
testb $0x1, 0x5e7(%rsp)
jne 0xcd4f
movq 0x6d8(%rsp), %rdi
leaq 0x5f4(%rsp), %rsi
callq 0x1b0b0
movq %rax, 0x1c8(%rsp)
jmp 0xcc15
movq 0x1c8(%rsp), %rax
movq %rax, 0x5a0(%rsp)
leaq 0x5a0(%rsp), %rdi
callq 0x1b240
movl 0xc(%rax), %eax
movl %eax, 0x1bc(%rsp)
movq 0x6d8(%rsp), %rdi
leaq 0x614(%rsp), %rsi
callq 0x1b0b0
movq %rax, 0x1c0(%rsp)
jmp 0xcc5b
movq 0x1c0(%rsp), %rax
movq %rax, 0x598(%rsp)
leaq 0x598(%rsp), %rdi
callq 0x1b240
movq %rax, %rcx
movl 0x1bc(%rsp), %eax
cmpl 0x4(%rcx), %eax
jae 0xcce8
leaq 0x5a0(%rsp), %rdi
callq 0x1b240
movl 0x8(%rax), %eax
addl %eax, %eax
movl %eax, %esi
leaq 0x668(%rsp), %rdi
callq 0xe1f0
movq %rax, 0x1b0(%rsp)
leaq 0x590(%rsp), %rdi
leaq 0x614(%rsp), %rsi
leaq 0x5f4(%rsp), %rdx
callq 0xe240
jmp 0xcccf
movq 0x1b0(%rsp), %rdi
leaq 0x590(%rsp), %rsi
callq 0xe210
jmp 0xcce6
jmp 0xcd4d
leaq 0x5a0(%rsp), %rdi
callq 0x1b240
movl 0x8(%rax), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movl %eax, %esi
leaq 0x668(%rsp), %rdi
callq 0xe1f0
movq %rax, 0x1a8(%rsp)
leaq 0x588(%rsp), %rdi
leaq 0x614(%rsp), %rsi
leaq 0x5f4(%rsp), %rdx
callq 0xe240
jmp 0xcd34
movq 0x1a8(%rsp), %rdi
leaq 0x588(%rsp), %rsi
callq 0xe210
jmp 0xcd4b
jmp 0xcd4d
jmp 0xcd4f
jmp 0xcd51
leaq 0x600(%rsp), %rdi
callq 0x1a160
jmp 0xc9f4
jmp 0xcd65
leaq 0x628(%rsp), %rdi
callq 0x1b490
jmp 0xc972
leaq 0x550(%rsp), %rdi
callq 0x1b070
leaq 0x668(%rsp), %rax
movq %rax, 0x548(%rsp)
movq 0x548(%rsp), %rdi
callq 0xe270
movq %rax, 0x540(%rsp)
movq 0x548(%rsp), %rdi
callq 0xe2a0
movq %rax, 0x538(%rsp)
leaq 0x540(%rsp), %rdi
leaq 0x538(%rsp), %rsi
callq 0xe2d0
testb $0x1, %al
jne 0xcddc
jmp 0xd022
leaq 0x540(%rsp), %rdi
callq 0xe310
movq %rax, 0x530(%rsp)
movq 0x530(%rsp), %rax
movq %rax, 0x528(%rsp)
movq 0x528(%rsp), %rdi
callq 0xe320
movq %rax, 0x520(%rsp)
movq 0x528(%rsp), %rdi
callq 0xe350
movq %rax, 0x518(%rsp)
leaq 0x520(%rsp), %rdi
leaq 0x518(%rsp), %rsi
callq 0xe380
testb $0x1, %al
jne 0xce49
jmp 0xd00e
leaq 0x520(%rsp), %rdi
callq 0xe3c0
movq %rax, 0x510(%rsp)
movq 0x510(%rsp), %rsi
leaq 0x550(%rsp), %rdi
callq 0x1af10
movq %rax, 0x1a0(%rsp)
jmp 0xce7d
movq 0x1a0(%rsp), %rax
movq %rax, 0x508(%rsp)
leaq 0x550(%rsp), %rdi
callq 0x1af60
movq %rax, 0x500(%rsp)
leaq 0x508(%rsp), %rdi
leaq 0x500(%rsp), %rsi
callq 0x1b450
testb $0x1, %al
jne 0xcebd
jmp 0xcf02
leaq 0x508(%rsp), %rdi
callq 0x1b040
movq %rax, %rdi
addq $0x8, %rdi
movq 0x510(%rsp), %rsi
addq $0x4, %rsi
callq 0x19070
jmp 0xcee4
jmp 0xcffa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
jmp 0xe07c
leaq 0x4e8(%rsp), %rdi
movq %rdi, 0x198(%rsp)
callq 0x17e60
movq 0x198(%rsp), %rdi
movq 0x510(%rsp), %rsi
addq $0x4, %rsi
callq 0x19070
jmp 0xcf32
movq 0x510(%rsp), %rsi
leaq 0x4c8(%rsp), %rdi
leaq 0x4e8(%rsp), %rdx
callq 0x1b4c0
jmp 0xcf51
leaq 0x550(%rsp), %rdi
leaq 0x4c8(%rsp), %rsi
callq 0x1af90
movb %dl, 0x18f(%rsp)
movq %rax, 0x190(%rsp)
jmp 0xcf77
movb 0x18f(%rsp), %al
movq 0x190(%rsp), %rcx
movq %rcx, 0x4b8(%rsp)
movb %al, 0x4c0(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x1b020
leaq 0x4e8(%rsp), %rdi
callq 0x18520
jmp 0xcffa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
jmp 0xcfe8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x1b020
leaq 0x4e8(%rsp), %rdi
callq 0x18520
jmp 0xe07c
jmp 0xcffc
leaq 0x520(%rsp), %rdi
callq 0xe3d0
jmp 0xce2b
jmp 0xd010
leaq 0x540(%rsp), %rdi
callq 0xe3f0
jmp 0xcdbe
movq 0x680(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x4b4(%rsp)
leaq 0x478(%rsp), %rdi
callq 0xe410
leaq 0x428(%rsp), %rdi
callq 0xe420
jmp 0xd04f
movq 0x6f8(%rsp), %rdi
movl $0x1, 0x414(%rsp)
leaq 0x414(%rsp), %rsi
callq 0x19340
movq %rax, 0x180(%rsp)
jmp 0xd079
movq 0x180(%rsp), %rax
movq %rax, 0x418(%rsp)
leaq 0x418(%rsp), %rdi
callq 0x1b500
movl 0x4(%rax), %eax
movl %eax, 0x424(%rsp)
leaq 0x478(%rsp), %rdi
leaq 0x424(%rsp), %rsi
callq 0xe470
movq %rax, 0x178(%rsp)
jmp 0xd0bf
movq 0x178(%rsp), %rax
movq %rax, 0x408(%rsp)
leaq 0x478(%rsp), %rdi
callq 0xe4a0
movq %rax, 0x400(%rsp)
leaq 0x408(%rsp), %rdi
leaq 0x400(%rsp), %rsi
callq 0xe450
testb $0x1, %al
jne 0xd102
jmp 0xda9f
leaq 0x3f8(%rsp), %rdi
leaq 0x424(%rsp), %rsi
callq 0xe500
jmp 0xd119
leaq 0x428(%rsp), %rdi
leaq 0x3f8(%rsp), %rsi
callq 0xe4d0
jmp 0xd130
jmp 0xd132
leaq 0x428(%rsp), %rdi
callq 0xe520
movb %al, 0x177(%rsp)
jmp 0xd148
movb 0x177(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xd15a
jmp 0xda9d
leaq 0x428(%rsp), %rdi
callq 0xe540
movq %rax, 0x168(%rsp)
jmp 0xd171
movq 0x168(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x3f4(%rsp)
movl 0x4b4(%rsp), %eax
movl %eax, 0x15c(%rsp)
movq 0x6d8(%rsp), %rdi
leaq 0x3f4(%rsp), %rsi
callq 0x1b0b0
movq %rax, 0x160(%rsp)
jmp 0xd1af
movq 0x160(%rsp), %rax
movq %rax, 0x3c0(%rsp)
leaq 0x3c0(%rsp), %rdi
callq 0x1b240
movq %rax, %rcx
movl 0x15c(%rsp), %eax
movl 0x10(%rcx), %ecx
subl %ecx, %eax
movl %eax, 0x3cc(%rsp)
leaq 0x3d0(%rsp), %rdi
leaq 0x3cc(%rsp), %rsi
callq 0xe5a0
jmp 0xd1f9
leaq 0x3e0(%rsp), %rdi
leaq 0x3f4(%rsp), %rsi
leaq 0x3d0(%rsp), %rdx
callq 0xe5e0
jmp 0xd218
leaq 0x478(%rsp), %rdi
leaq 0x3e0(%rsp), %rsi
callq 0xe550
movb %dl, 0x14f(%rsp)
movq %rax, 0x150(%rsp)
jmp 0xd23e
movb 0x14f(%rsp), %al
movq 0x150(%rsp), %rcx
movq %rcx, 0x3b0(%rsp)
movb %al, 0x3b8(%rsp)
leaq 0x428(%rsp), %rdi
callq 0xe540
movq %rax, 0x140(%rsp)
jmp 0xd273
movq 0x140(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x3f4(%rsp)
leaq 0x428(%rsp), %rdi
callq 0xe540
movq %rax, 0x138(%rsp)
jmp 0xd29b
movq 0x138(%rsp), %rax
addq $0x4, %rax
movq %rax, 0x3a0(%rsp)
movb $0x0, 0x3af(%rsp)
movq 0x3a0(%rsp), %rax
movl (%rax), %eax
movq %rax, 0x128(%rsp)
leaq 0x550(%rsp), %rdi
leaq 0x3f4(%rsp), %rsi
callq 0x1af10
movq %rax, 0x130(%rsp)
jmp 0xd2e8
movq 0x130(%rsp), %rax
movq %rax, 0x398(%rsp)
leaq 0x398(%rsp), %rdi
callq 0x1b040
movq %rax, %rdi
addq $0x8, %rdi
callq 0x188e0
movq %rax, %rcx
movq 0x128(%rsp), %rax
cmpq %rcx, %rax
jae 0xd6df
leaq 0x550(%rsp), %rdi
leaq 0x3f4(%rsp), %rsi
callq 0x1af10
movq %rax, 0x120(%rsp)
jmp 0xd344
movq 0x120(%rsp), %rax
movq %rax, 0x388(%rsp)
leaq 0x388(%rsp), %rdi
callq 0x1b040
movq %rax, %rdi
addq $0x8, %rdi
movq 0x3a0(%rsp), %rax
movl (%rax), %eax
movl %eax, %esi
callq 0x18870
movq %rax, 0x118(%rsp)
jmp 0xd383
movq 0x118(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x394(%rsp)
leaq 0x478(%rsp), %rdi
leaq 0x394(%rsp), %rsi
callq 0xe470
movq %rax, 0x110(%rsp)
jmp 0xd3b3
movq 0x110(%rsp), %rax
movq %rax, 0x380(%rsp)
leaq 0x478(%rsp), %rdi
callq 0xe4a0
movq %rax, 0x378(%rsp)
leaq 0x380(%rsp), %rdi
leaq 0x378(%rsp), %rsi
callq 0xe450
testb $0x1, %al
jne 0xd3f3
jmp 0xd460
movb $0x1, 0x3af(%rsp)
leaq 0x370(%rsp), %rdi
leaq 0x394(%rsp), %rsi
callq 0xe500
jmp 0xd412
leaq 0x428(%rsp), %rdi
leaq 0x370(%rsp), %rsi
callq 0xe4d0
jmp 0xd429
jmp 0xd6df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
jmp 0xe06f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
jmp 0xe062
leaq 0x478(%rsp), %rdi
leaq 0x3f4(%rsp), %rsi
callq 0xe470
movq %rax, 0x108(%rsp)
jmp 0xd47f
movq 0x108(%rsp), %rax
movq %rax, 0x368(%rsp)
movl 0x394(%rsp), %eax
cmpl 0x424(%rsp), %eax
je 0xd570
movq 0x6e0(%rsp), %rdi
leaq 0x394(%rsp), %rsi
callq 0x19340
movq %rax, 0x100(%rsp)
jmp 0xd4c2
movq 0x100(%rsp), %rax
movq %rax, 0x358(%rsp)
leaq 0x358(%rsp), %rdi
callq 0x1b500
movq %rax, %rsi
addq $0x4, %rsi
leaq 0x478(%rsp), %rdi
callq 0xe470
movq %rax, 0xf8(%rsp)
jmp 0xd4fd
movq 0xf8(%rsp), %rax
movq %rax, 0x360(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0xf4(%rsp)
leaq 0x360(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0xf4(%rsp), %eax
cmpl 0x10(%rcx), %eax
jbe 0xd56e
leaq 0x368(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0xf0(%rsp)
leaq 0x360(%rsp), %rdi
callq 0xe620
movl 0xf0(%rsp), %ecx
movl %ecx, 0x10(%rax)
jmp 0xd570
leaq 0x478(%rsp), %rdi
leaq 0x394(%rsp), %rsi
callq 0xe470
movq %rax, 0xe8(%rsp)
jmp 0xd58f
movq 0xe8(%rsp), %rax
movq %rax, 0x350(%rsp)
leaq 0x350(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0xe4(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0xe4(%rsp), %eax
cmpl 0x8(%rcx), %eax
jae 0xd633
leaq 0x368(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0xdc(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xe620
movl 0xdc(%rsp), %ecx
movl %ecx, 0xc(%rax)
leaq 0x350(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0xe0(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xe620
movl 0xe0(%rsp), %ecx
movl %ecx, 0x8(%rax)
jmp 0xd6c9
leaq 0x350(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0xd8(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0xd8(%rsp), %eax
cmpl 0x8(%rcx), %eax
jbe 0xd6c7
leaq 0x350(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0xd4(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0xd4(%rsp), %eax
cmpl 0xc(%rcx), %eax
jae 0xd6c7
leaq 0x350(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0xd0(%rsp)
leaq 0x368(%rsp), %rdi
callq 0xe620
movl 0xd0(%rsp), %ecx
movl %ecx, 0xc(%rax)
jmp 0xd6c9
jmp 0xd6cb
movq 0x3a0(%rsp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0xd2b7
testb $0x1, 0x3af(%rsp)
jne 0xda85
leaq 0x428(%rsp), %rdi
callq 0xe540
movq %rax, 0xc8(%rsp)
jmp 0xd704
movq 0xc8(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x34c(%rsp)
leaq 0x428(%rsp), %rdi
callq 0xe640
jmp 0xd724
leaq 0x428(%rsp), %rdi
callq 0xe650
movq %rax, 0xc0(%rsp)
jmp 0xd73b
movq 0xc0(%rsp), %rax
cmpq $0x0, %rax
jne 0xd74e
jmp 0xda98
leaq 0x428(%rsp), %rdi
callq 0xe540
movq %rax, 0xb8(%rsp)
jmp 0xd765
movq 0xb8(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x3f4(%rsp)
movq 0x6e8(%rsp), %rax
movq %rax, 0xa8(%rsp)
leaq 0x478(%rsp), %rdi
leaq 0x3f4(%rsp), %rsi
callq 0xe470
movq %rax, 0xb0(%rsp)
jmp 0xd7a5
movq 0xb0(%rsp), %rax
movq %rax, 0x338(%rsp)
leaq 0x338(%rsp), %rdi
callq 0xe620
movq 0xa8(%rsp), %rdi
movq %rax, %rsi
addq $0x4, %rsi
callq 0x19340
movq %rax, 0xa0(%rsp)
jmp 0xd7e0
movq 0xa0(%rsp), %rax
movq %rax, 0x340(%rsp)
leaq 0x478(%rsp), %rdi
leaq 0x34c(%rsp), %rsi
callq 0xe470
movq %rax, 0x98(%rsp)
jmp 0xd80f
movq 0x98(%rsp), %rax
movq %rax, 0x330(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x1b500
cmpl $0x0, 0x4(%rax)
jne 0xd860
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0x94(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x1b500
movl 0x94(%rsp), %ecx
movl %ecx, 0x4(%rax)
movl 0x4b4(%rsp), %eax
decl %eax
movl %eax, 0x4b4(%rsp)
leaq 0x478(%rsp), %rdi
leaq 0x3f4(%rsp), %rsi
callq 0xe470
movq %rax, 0x88(%rsp)
jmp 0xd88f
movq 0x88(%rsp), %rax
movq %rax, 0x328(%rsp)
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0x84(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0x84(%rsp), %eax
cmpl 0x8(%rcx), %eax
jae 0xd986
leaq 0x328(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0x7c(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movl 0x7c(%rsp), %ecx
movl %ecx, 0xc(%rax)
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0xc(%rax), %eax
movl %eax, 0x80(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0x80(%rsp), %eax
cmpl 0xc(%rcx), %eax
jae 0xd959
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0xc(%rax), %eax
movl %eax, 0x78(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movl 0x78(%rsp), %ecx
movl %ecx, 0xc(%rax)
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0x74(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movl 0x74(%rsp), %ecx
movl %ecx, 0x8(%rax)
jmp 0xda63
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0x70(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0x70(%rsp), %eax
cmpl 0x8(%rcx), %eax
jne 0xda0a
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0xc(%rax), %eax
movl %eax, 0x6c(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0x6c(%rsp), %eax
cmpl 0xc(%rcx), %eax
jae 0xda08
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0xc(%rax), %eax
movl %eax, 0x68(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movl 0x68(%rsp), %ecx
movl %ecx, 0xc(%rax)
jmp 0xda61
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0x64(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movq %rax, %rcx
movl 0x64(%rsp), %eax
cmpl 0xc(%rcx), %eax
jae 0xda5f
leaq 0x330(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0x60(%rsp)
leaq 0x328(%rsp), %rdi
callq 0xe620
movl 0x60(%rsp), %ecx
movl %ecx, 0xc(%rax)
jmp 0xda61
jmp 0xda63
leaq 0x428(%rsp), %rdi
callq 0xe540
movq %rax, 0x58(%rsp)
jmp 0xda77
movq 0x58(%rsp), %rax
movl 0x4(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x4(%rax)
jmp 0xda87
movb 0x3af(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xd25c
jmp 0xd132
jmp 0xda9f
leaq 0x550(%rsp), %rax
movq %rax, 0x320(%rsp)
movq 0x320(%rsp), %rdi
callq 0x1b420
movq %rax, 0x318(%rsp)
movq 0x320(%rsp), %rdi
callq 0x1af60
movq %rax, 0x310(%rsp)
leaq 0x318(%rsp), %rdi
leaq 0x310(%rsp), %rsi
callq 0x1b450
testb $0x1, %al
jne 0xdaf7
jmp 0xe00a
leaq 0x318(%rsp), %rdi
callq 0x1b470
movq %rax, 0x308(%rsp)
movq 0x308(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x304(%rsp)
leaq 0x478(%rsp), %rdi
leaq 0x304(%rsp), %rsi
callq 0xe470
movq %rax, 0x50(%rsp)
jmp 0xdb39
movq 0x50(%rsp), %rax
movq %rax, 0x2f8(%rsp)
leaq 0x2f8(%rsp), %rdi
callq 0xe620
movl 0x4(%rax), %eax
movl %eax, 0x300(%rsp)
movq 0x308(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x2f0(%rsp)
movq 0x2f0(%rsp), %rdi
callq 0x19b50
movq %rax, 0x2e8(%rsp)
movq 0x2f0(%rsp), %rdi
callq 0x1a0e0
movq %rax, 0x2e0(%rsp)
leaq 0x2e8(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0x1a110
testb $0x1, %al
jne 0xdbb9
jmp 0xdff6
leaq 0x2e8(%rsp), %rdi
callq 0x1a150
movl (%rax), %eax
movl %eax, 0x2dc(%rsp)
leaq 0x478(%rsp), %rdi
leaq 0x2dc(%rsp), %rsi
callq 0xe470
movq %rax, 0x48(%rsp)
jmp 0xdbeb
movq 0x48(%rsp), %rax
movq %rax, 0x2d0(%rsp)
leaq 0x2d0(%rsp), %rdi
callq 0xe620
movl 0x8(%rax), %eax
movl %eax, 0x2cc(%rsp)
leaq 0x2d0(%rsp), %rdi
callq 0xe620
movl 0xc(%rax), %eax
movl %eax, 0x2c8(%rsp)
movl 0x2c8(%rsp), %eax
cmpl 0x300(%rsp), %eax
jb 0xdfe2
leaq 0x478(%rsp), %rax
movq %rax, 0x2c0(%rsp)
movq 0x2c0(%rsp), %rdi
callq 0xe660
movq %rax, 0x2b8(%rsp)
movq 0x2c0(%rsp), %rdi
callq 0xe4a0
movq %rax, 0x2b0(%rsp)
leaq 0x2b8(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0xe690
testb $0x1, %al
jne 0xdc92
jmp 0xdfe0
leaq 0x2b8(%rsp), %rdi
callq 0xe6b0
movq %rax, 0x2a8(%rsp)
movq 0x2a8(%rsp), %rax
movl 0x4(%rax), %eax
cmpl 0x300(%rsp), %eax
jae 0xdfcc
movl 0x2cc(%rsp), %eax
movq 0x2a8(%rsp), %rcx
cmpl 0x4(%rcx), %eax
jne 0xdfcc
movq 0x6f0(%rsp), %rdi
leaq 0x2dc(%rsp), %rsi
callq 0x1b280
movq %rax, 0x40(%rsp)
jmp 0xdcf3
movq 0x40(%rsp), %rax
movq %rax, 0x2a0(%rsp)
leaq 0x478(%rsp), %rax
movq %rax, 0x298(%rsp)
movq 0x298(%rsp), %rdi
callq 0xe660
movq %rax, 0x290(%rsp)
movq 0x298(%rsp), %rdi
callq 0xe4a0
movq %rax, 0x288(%rsp)
leaq 0x290(%rsp), %rdi
leaq 0x288(%rsp), %rsi
callq 0xe690
testb $0x1, %al
jne 0xdd58
jmp 0xdfca
leaq 0x290(%rsp), %rdi
callq 0xe6b0
movq %rax, 0x280(%rsp)
movq 0x280(%rsp), %rax
movl (%rax), %ecx
movq 0x2a8(%rsp), %rdx
xorl %eax, %eax
cmpl (%rdx), %ecx
movb %al, 0x3f(%rsp)
je 0xde75
movq 0x280(%rsp), %rax
movl (%rax), %ecx
xorl %eax, %eax
cmpl 0x304(%rsp), %ecx
movb %al, 0x3f(%rsp)
je 0xde75
movq 0x280(%rsp), %rax
movl (%rax), %ecx
xorl %eax, %eax
cmpl 0x2dc(%rsp), %ecx
movb %al, 0x3f(%rsp)
je 0xde75
movq 0x6f0(%rsp), %rdi
callq 0x1b2d0
movq %rax, 0x278(%rsp)
leaq 0x2a0(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0x1b2b0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x3e(%rsp)
jne 0xde6d
leaq 0x2a0(%rsp), %rdi
callq 0x1b3b0
movq %rax, %rdi
addq $0x8, %rdi
movq 0x280(%rsp), %rsi
callq 0x192c0
movq %rax, 0x30(%rsp)
jmp 0xde26
movq 0x30(%rsp), %rax
movq %rax, 0x270(%rsp)
leaq 0x2a0(%rsp), %rdi
callq 0x1b3b0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x19250
movq %rax, 0x268(%rsp)
leaq 0x270(%rsp), %rdi
leaq 0x268(%rsp), %rsi
callq 0x1a690
movb %al, 0x3e(%rsp)
movb 0x3e(%rsp), %al
movb %al, 0x3f(%rsp)
movb 0x3f(%rsp), %al
testb $0x1, %al
jne 0xde82
jmp 0xdfb6
leaq 0x230(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x1a020
movq 0x18(%rsp), %rdi
movq 0x2a8(%rsp), %rsi
callq 0x18960
movb %dl, 0x27(%rsp)
movq %rax, 0x28(%rsp)
jmp 0xdeb1
movb 0x27(%rsp), %al
movq 0x28(%rsp), %rcx
movq %rcx, 0x220(%rsp)
movb %al, 0x228(%rsp)
leaq 0x230(%rsp), %rdi
leaq 0x304(%rsp), %rsi
callq 0x18960
movb %dl, 0xf(%rsp)
movq %rax, 0x10(%rsp)
jmp 0xdee9
movq 0x1e8(%rsp), %rdi
movb 0xf(%rsp), %al
movq 0x10(%rsp), %rcx
movq %rcx, 0x210(%rsp)
movb %al, 0x218(%rsp)
movq 0x698(%rsp), %rdx
movq 0x690(%rsp), %rcx
movq 0x688(%rsp), %r8
leaq 0x230(%rsp), %rsi
callq 0xad70
movb %al, 0xe(%rsp)
jmp 0xdf34
movb 0xe(%rsp), %al
testb $0x1, %al
jne 0xdf3e
jmp 0xdf90
movq 0x6a0(%rsp), %rdi
leaq 0x230(%rsp), %rsi
callq 0x1aee0
jmp 0xdf55
movb $0x1, 0x6b7(%rsp)
movl $0x1, 0x20c(%rsp)
jmp 0xdf9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x640(%rsp)
movl %eax, 0x63c(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x1a030
jmp 0xe062
movl $0x18, 0x20c(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x1a030
movl 0x20c(%rsp), %eax
subl $0x18, %eax
je 0xdfca
jmp 0xe01d
jmp 0xdfb8
leaq 0x290(%rsp), %rdi
callq 0xe6d0
jmp 0xdd3a
jmp 0xdfcc
jmp 0xdfce
leaq 0x2b8(%rsp), %rdi
callq 0xe6d0
jmp 0xdc74
jmp 0xdfe2
jmp 0xdfe4
leaq 0x2e8(%rsp), %rdi
callq 0x1a160
jmp 0xdb9b
jmp 0xdff8
leaq 0x318(%rsp), %rdi
callq 0x1b490
jmp 0xdad9
movb $0x0, 0x6b7(%rsp)
movl $0x1, 0x20c(%rsp)
leaq 0x428(%rsp), %rdi
callq 0xe700
leaq 0x478(%rsp), %rdi
callq 0xe710
leaq 0x550(%rsp), %rdi
callq 0x1b400
leaq 0x668(%rsp), %rdi
callq 0xe720
movb 0x6b7(%rsp), %al
andb $0x1, %al
addq $0x6b8, %rsp            # imm = 0x6B8
retq
leaq 0x428(%rsp), %rdi
callq 0xe700
leaq 0x478(%rsp), %rdi
callq 0xe710
leaq 0x550(%rsp), %rdi
callq 0x1b400
leaq 0x668(%rsp), %rdi
callq 0xe720
movq 0x640(%rsp), %rdi
callq 0x2310
nopw %cs:(%rax,%rax)