// File: /workspace/github_cpp_makefile_star2_O1/agorenst[P]trie/./radixtree.h
// Function: void node<int>::insert<std::reverse_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int>>>>>(std::reverse_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int>>>>, std::reverse_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int>>>>)
void insert(Iter first, Iter last) {
                auto edge_iter = edge_to_follow(*first);

                // if no edge has any prefix with [first, last) then we make a new edge.
                if (edge_iter == edge_list.end()) {
                    edge to_add(std::list<T>(first, last), std::shared_ptr<node>(new node));
                    edge_list.push_back(to_add);
                    return;
                }

                auto edge_first = edge_iter->first.begin();
                auto edge_last = edge_iter->first.end();

                // this loop should always run at least once
                // we "consume" the common prefix between [edge_first, edge_list) and [first, last)
                std::list<T> prefix;
                while (first != last &&
                        edge_first != edge_last &&
                        (*edge_first) == (*first)) {
                    prefix.push_back(*first);
                    ++edge_first;
                    ++first;
                }
                assert(prefix.size() > 0);

                // this string is already included
                if (first == last && edge_first == edge_last) {
                    return;
                }
                // we input a superstring, ie, input = "abcde", edge = "abc"
                // recurse to the child
                if (first != last && edge_first == edge_last) {
                    return edge_iter->second->insert(first, last);
                }
                // something about the input sequence means we have to make a new node.
                if (edge_first != edge_last) {
                    // we clip off the prefix, this creates a copy edge with only the suffix sequence
                    edge clipped_orig(std::list<T>(edge_first, edge_last), edge_iter->second);

                    // this creates the new intermediary node
                    edge prefix_edge(prefix, std::shared_ptr<node>(new node(std::list<edge>{clipped_orig})));

                    edge_list.erase(edge_iter); // erase the old copy of our edge

                    edge_list.push_back(prefix_edge); // ok, we've rebuilt the tree with the new node.

                    if (first != last) {
                        prefix_edge.second->insert(first, last);
                    }
                    return;

                }
            }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
movq %rdi, %rbx
movq (%rsi), %rax
movl -0x4(%rax), %ecx
movq %rdi, %r12
movq (%r12), %r12
cmpq %rbx, %r12
je 0x294d
movq 0x10(%r12), %rdi
cmpl %ecx, 0x10(%rdi)
jne 0x2938
jmp 0x2950
movq %rbx, %r12
cmpq %rbx, %r12
je 0x2a51
leaq 0x10(%r12), %r13
movq 0x10(%r12), %r14
leaq -0x60(%rbp), %rax
movq %rax, 0x8(%rax)
movq %rax, (%rax)
movq $0x0, 0x10(%rax)
movq (%rsi), %rcx
movq %rdx, -0x38(%rbp)
movq (%rdx), %rdx
cmpq %rdx, %rcx
setne %al
movq %rsi, -0x40(%rbp)
je 0x29f7
cmpq %r13, %r14
je 0x29f7
movl 0x10(%r14), %edi
movq (%rsi), %r15
cmpl -0x4(%r15), %edi
jne 0x29f7
addq $-0x4, %r15
movl $0x18, %edi
callq 0x2110
movl (%r15), %ecx
movl %ecx, 0x10(%rax)
movq %rax, %rdi
leaq -0x60(%rbp), %rsi
callq 0x2040
incq -0x50(%rbp)
movq (%r14), %r14
movq -0x40(%rbp), %rdi
movq (%rdi), %rcx
addq $-0x4, %rcx
movq %rcx, (%rdi)
movq -0x38(%rbp), %rax
movq (%rax), %rdx
cmpq %rdx, %rcx
setne %al
je 0x29f7
cmpq %r13, %r14
je 0x29f7
movl 0x10(%r14), %esi
movq (%rdi), %rdi
leaq -0x4(%rdi), %r15
cmpl -0x4(%rdi), %esi
je 0x29a2
cmpq $0x0, -0x50(%rbp)
je 0x2dac
cmpq %rdx, %rcx
movq -0x40(%rbp), %rdx
jne 0x2a14
cmpq %r13, %r14
je 0x2d7d
cmpq %r13, %r14
sete %cl
andb %cl, %al
cmpb $0x1, %al
jne 0x2b51
movq 0x28(%r12), %rdi
movq (%rdx), %rax
leaq -0x140(%rbp), %rsi
movq %rax, (%rsi)
movq -0x38(%rbp), %rax
movq (%rax), %rax
leaq -0x138(%rbp), %rdx
movq %rax, (%rdx)
callq 0x2918
jmp 0x2d7d
leaq -0x150(%rbp), %rsi
movq %rax, (%rsi)
movq (%rdx), %rax
leaq -0x148(%rbp), %rdx
movq %rax, (%rdx)
leaq -0x88(%rbp), %r14
leaq -0x108(%rbp), %rcx
movq %r14, %rdi
callq 0x2f00
movl $0x18, %edi
callq 0x2110
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movq %rax, 0x8(%rax)
movq %rax, (%rax)
leaq -0xb0(%rbp), %rdi
movq %rax, -0x8(%rdi)
movq %rax, %rsi
callq 0x265e
leaq -0xe0(%rbp), %rdi
leaq -0x88(%rbp), %r15
leaq -0xb8(%rbp), %rdx
movq %r15, %rsi
callq 0x304c
movq -0xb0(%rbp), %rdi
testq %rdi, %rdi
je 0x2ade
callq 0x25e4
movq -0x88(%rbp), %rdi
cmpq %r15, %rdi
je 0x2afa
movq (%rdi), %r14
callq 0x20f0
movq %r14, %rdi
cmpq %r15, %r14
jne 0x2aea
leaq -0xe0(%rbp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x312e
movq %rax, %rdi
movq %rbx, %rsi
callq 0x2040
incq 0x10(%rbx)
movq -0xc0(%rbp), %rdi
testq %rdi, %rdi
je 0x2b2c
callq 0x25e4
movq -0xe0(%rbp), %rdi
cmpq %r14, %rdi
je 0x2d9a
movq (%rdi), %rbx
callq 0x20f0
movq %rbx, %rdi
cmpq %r14, %rbx
jne 0x2b3c
jmp 0x2d9a
cmpq %r13, %r14
je 0x2d7d
leaq -0x88(%rbp), %rdi
leaq -0x108(%rbp), %rcx
movq %r14, %rsi
movq %r13, %rdx
callq 0x2f66
movq 0x28(%r12), %rax
movq %rax, -0x98(%rbp)
movq 0x30(%r12), %rax
movq %rax, -0x90(%rbp)
testq %rax, %rax
je 0x2ba5
movq 0x3431(%rip), %rcx      # 0x5fc8
cmpb $0x0, (%rcx)
je 0x2ba1
incl 0x8(%rax)
jmp 0x2ba5
lock
incl 0x8(%rax)
leaq -0xe0(%rbp), %rdi
leaq -0x88(%rbp), %r14
leaq -0x98(%rbp), %rdx
movq %r14, %rsi
callq 0x304c
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x2bd3
callq 0x25e4
movq -0x88(%rbp), %rdi
cmpq %r14, %rdi
je 0x2bef
movq (%rdi), %r15
callq 0x20f0
movq %r15, %rdi
cmpq %r14, %r15
jne 0x2bdf
movl $0x18, %edi
callq 0x2110
leaq -0x108(%rbp), %rdi
leaq -0xe0(%rbp), %r13
movq %r13, %rsi
movq %rax, -0x48(%rbp)
callq 0x31b8
leaq -0x120(%rbp), %rdi
leaq -0x108(%rbp), %r14
leaq -0x29(%rbp), %rcx
movl $0x1, %edx
movq %r14, %rsi
callq 0x2fb6
movb $0x1, %al
movl %eax, -0x30(%rbp)
leaq -0x120(%rbp), %rsi
movq -0x48(%rbp), %r15
movq %r15, %rdi
callq 0x3240
leaq -0xa0(%rbp), %rdi
movq %r15, -0x8(%rdi)
movl $0x0, -0x30(%rbp)
movq %r15, %rsi
callq 0x265e
leaq -0x88(%rbp), %rdi
leaq -0x60(%rbp), %rsi
leaq -0xa8(%rbp), %rdx
callq 0x304c
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x2c8c
callq 0x25e4
leaq -0x120(%rbp), %rdi
callq 0x2734
movq -0xe8(%rbp), %rdi
testq %rdi, %rdi
je 0x2ca9
callq 0x25e4
movq -0x108(%rbp), %rdi
cmpq %r14, %rdi
je 0x2cc5
movq (%rdi), %r15
callq 0x20f0
movq %r15, %rdi
cmpq %r14, %r15
jne 0x2cb5
movq %rbx, %rdi
movq %r12, %rsi
callq 0x32c2
leaq -0x88(%rbp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x312e
movq -0x38(%rbp), %r15
movq -0x40(%rbp), %r12
movq %rax, %rdi
movq %rbx, %rsi
callq 0x2040
incq 0x10(%rbx)
movq (%r12), %rax
cmpq (%r15), %rax
je 0x2d26
movq -0x70(%rbp), %rdi
movq (%r12), %rax
leaq -0x130(%rbp), %rsi
movq %rax, (%rsi)
movq (%r15), %rax
leaq -0x128(%rbp), %rdx
movq %rax, (%rdx)
callq 0x2918
movq -0x68(%rbp), %rdi
testq %rdi, %rdi
je 0x2d34
callq 0x25e4
movq -0x88(%rbp), %rdi
cmpq %r14, %rdi
je 0x2d50
movq (%rdi), %rbx
callq 0x20f0
movq %rbx, %rdi
cmpq %r14, %rbx
jne 0x2d40
movq -0xc0(%rbp), %rdi
testq %rdi, %rdi
je 0x2d61
callq 0x25e4
movq -0xe0(%rbp), %rdi
cmpq %r13, %rdi
je 0x2d7d
movq (%rdi), %rbx
callq 0x20f0
movq %rbx, %rdi
cmpq %r13, %rbx
jne 0x2d6d
movq -0x60(%rbp), %rdi
leaq -0x60(%rbp), %r14
cmpq %r14, %rdi
je 0x2d9a
movq (%rdi), %rbx
callq 0x20f0
movq %rbx, %rdi
cmpq %r14, %rbx
jne 0x2d8a
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x134b(%rip), %rdi      # 0x40fe
leaq 0x1356(%rip), %rsi      # 0x4110
leaq 0x135d(%rip), %rcx      # 0x411e
movl $0x38, %edx
callq 0x20b0
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x2ddf
callq 0x25e4
xorl %r14d, %r14d
jmp 0x2e57
movq %rax, %rbx
movb $0x1, %r14b
jmp 0x2e63
movq %rax, %rbx
movb $0x1, %r14b
jmp 0x2e6f
movq %rax, %rbx
jmp 0x2e7d
movq %rax, %rbx
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x2e10
callq 0x25e4
movq -0x88(%rbp), %rdi
cmpq %r14, %rdi
je 0x2edb
movq (%rdi), %r15
callq 0x20f0
movq %r15, %rdi
cmpq %r14, %r15
jne 0x2e20
jmp 0x2edb
jmp 0x2ed8
jmp 0x2ed8
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
callq 0x27aa
jmp 0x2e7d
movl -0x30(%rbp), %r14d
movq %rax, %rbx
leaq -0x120(%rbp), %rdi
callq 0x2734
leaq -0x108(%rbp), %rdi
callq 0x27aa
testb %r14b, %r14b
je 0x2e7d
movq -0x48(%rbp), %rdi
callq 0x20f0
leaq -0xe0(%rbp), %rdi
callq 0x27aa
jmp 0x2edb
movq %rax, %rbx
leaq -0xe0(%rbp), %rdi
callq 0x27aa
jmp 0x2ef8
movq %rax, %rbx
movq -0xb0(%rbp), %rdi
testq %rdi, %rdi
je 0x2eba
callq 0x25e4
jmp 0x2eba
movq %rax, %rbx
jmp 0x2ef8
movq %rax, %rbx
movq -0x88(%rbp), %rdi
cmpq %r14, %rdi
je 0x2ef8
movq (%rdi), %r15
callq 0x20f0
movq %r15, %rdi
cmpq %r14, %r15
jne 0x2ec6
jmp 0x2ef8
movq %rax, %rbx
movq -0x60(%rbp), %rdi
leaq -0x60(%rbp), %r15
cmpq %r15, %rdi
je 0x2ef8
movq (%rdi), %r14
callq 0x20f0
movq %r14, %rdi
cmpq %r15, %r14
jne 0x2ee8
movq %rbx, %rdi
callq 0x21b0