// File: dlbeer[P]summary_map/./summary_map.hpp
// Function: summary_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, summary, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, aggregator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>, summary>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>::copy_subtree(std::allocator<summary_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, summary, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, aggregator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>, summary>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>::node>&, summary_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, summary, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, aggregator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>, summary>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>::node*, summary_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, summary, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, aggregator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>, summary>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>::node*)
static node *copy_subtree(node_allocator& alloc, node *new_parent,
			      node *src)
    {
	if (!src)
	    return 0;

	node *copy = new_node(alloc, src->value);

	try {
	    copy->flags = src->flags;
	    copy->sum = src->sum;
	    copy->parent = new_parent;
	    copy->left = copy_subtree(alloc, copy, src->left);
	    copy->right = copy_subtree(alloc, copy, src->right);
	} catch (...) {
	    delete_tree(alloc, copy);
	    throw;
	}

	return copy;
    }

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movq %rsi, 0x30(%rsp)
movq %rdx, 0x28(%rsp)
cmpq $0x0, 0x28(%rsp)
jne 0x3619
movq $0x0, 0x40(%rsp)
jmp 0x3706
movq 0x38(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x37a0
movq %rax, 0x20(%rsp)
movq 0x28(%rsp), %rax
movl 0x2c(%rax), %ecx
movq 0x20(%rsp), %rax
movl %ecx, 0x2c(%rax)
movq 0x28(%rsp), %rcx
movq 0x20(%rsp), %rax
movl 0x28(%rcx), %ecx
movl %ecx, 0x28(%rax)
movq 0x30(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x40(%rax)
movq 0x38(%rsp), %rdi
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rax
movq 0x30(%rax), %rdx
callq 0x35f0
movq %rax, 0x8(%rsp)
jmp 0x367a
movq 0x8(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x30(%rax)
movq 0x38(%rsp), %rdi
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rax
movq 0x38(%rax), %rdx
callq 0x35f0
movq %rax, (%rsp)
jmp 0x36a6
movq (%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x38(%rax)
jmp 0x36fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x18(%rsp)
movl %eax, 0x14(%rsp)
movq 0x18(%rsp), %rdi
callq 0x1060
movq 0x38(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x31e0
jmp 0x36de
callq 0x1110
jmp 0x3722
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x18(%rsp)
movl %eax, 0x14(%rsp)
callq 0x1120
jmp 0x36fa
jmp 0x3710
movq 0x20(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
addq $0x48, %rsp
retq
movq 0x18(%rsp), %rdi
callq 0x1130
movq %rax, %rdi
callq 0x3160
nopw %cs:(%rax,%rax)
nopl (%rax)