// File: /workspace/github_cpp_makefile_star2_O3/grame-cncm[P]digraph/./dglib/arrow.hh
// Function: arrow_traits<std::pair<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>, int>>::combine(std::pair<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>, int> const&, std::pair<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>, int> const&)
static multidep combine(const multidep& X, const multidep& Y)
    {
        // std::cerr << "combine " << label(X) << " + " << label(Y) << std::endl;
        multidep M;
        auto     itx = X.first.begin();
        auto     ity = Y.first.begin();
        while ((itx != X.first.end()) && (ity != Y.first.end())) {
            if (itx->first < ity->first) {
                M.first[itx->first] = itx->second;
                itx++;
            } else if (ity->first < itx->first) {
                M.first[ity->first] = ity->second;
                ity++;
            } else {
                M.first[ity->first] = std::min(itx->second, ity->second);
                itx++;
                ity++;
            }
        }
        while (itx != X.first.end()) {
            M.first[itx->first] = itx->second;
            itx++;
        }
        while (ity != Y.first.end()) {
            M.first[ity->first] = ity->second;
            ity++;
        }
        M.second = std::min(X.second, Y.second);
        // std::cerr << "combine " << label(X) << " + " << label(Y) << " = " << label(M) <<
        // std::endl;
        return M;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
leaq 0x8(%rdi), %rax
xorl %ecx, %ecx
movq %rcx, 0x10(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq %rax, 0x18(%rdi)
movq %rax, 0x20(%rdi)
movq %rcx, 0x28(%rdi)
movl $0x0, 0x30(%rdi)
movq 0x18(%rsi), %r13
movq 0x18(%rdx), %r12
leaq 0x8(%rsi), %r15
leaq 0x8(%rdx), %r14
cmpq %r15, %r13
setne %al
cmpq %r14, %r12
setne %cl
andb %al, %cl
cmpb $0x1, %cl
movq %rsi, 0x18(%rsp)
movq %rdx, 0x10(%rsp)
jne 0x3c47
movq %r14, 0x8(%rsp)
movq %r15, 0x20(%rsp)
leaq 0x20(%r13), %r14
leaq 0x20(%r12), %rbp
movq %r14, %rdi
movq %rbp, %rsi
callq 0x2040
testl %eax, %eax
js 0x3bf3
movq %rbp, %rdi
movq %r14, %rsi
callq 0x2040
testl %eax, %eax
js 0x3c11
movl 0x40(%r12), %r14d
movl 0x40(%r13), %r15d
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x407e
cmpl %r15d, %r14d
cmovll %r14d, %r15d
movl %r15d, (%rax)
movq %r13, %rdi
callq 0x21b0
movq %rax, %r13
jmp 0x3c24
movl 0x40(%r13), %ebp
movq %rbx, %rdi
movq %r14, %rsi
callq 0x407e
movl %ebp, (%rax)
movq %r13, %rdi
callq 0x21b0
movq %rax, %r13
jmp 0x3c2f
movl 0x40(%r12), %r14d
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x407e
movl %r14d, (%rax)
movq %r12, %rdi
callq 0x21b0
movq %rax, %r12
movq 0x8(%rsp), %r14
movq 0x20(%rsp), %r15
cmpq %r15, %r13
je 0x3c47
cmpq %r14, %r12
jne 0x3ba1
cmpq %r15, %r13
je 0x3c6e
leaq 0x20(%r13), %rsi
movl 0x40(%r13), %ebp
movq %rbx, %rdi
callq 0x407e
movl %ebp, (%rax)
movq %r13, %rdi
callq 0x21b0
movq %rax, %r13
cmpq %r15, %rax
jne 0x3c4c
cmpq %r14, %r12
je 0x3c97
leaq 0x20(%r12), %rsi
movl 0x40(%r12), %ebp
movq %rbx, %rdi
callq 0x407e
movl %ebp, (%rax)
movq %r12, %rdi
callq 0x21b0
movq %rax, %r12
cmpq %r14, %rax
jne 0x3c73
movq 0x10(%rsp), %rax
movl 0x30(%rax), %eax
movq 0x18(%rsp), %rcx
movl 0x30(%rcx), %ecx
cmpl %ecx, %eax
cmovll %eax, %ecx
movl %ecx, 0x30(%rbx)
movq %rbx, %rax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3cc5
jmp 0x3ccf
movq %rax, %rdi
callq 0x31c5
jmp 0x3ccf
movq %rax, %r14
movq %rbx, %rdi
callq 0x34f0
movq %r14, %rdi
callq 0x2250