// File: jliesch[P]ofxget/pugixml/pugixml.cpp
// Function: pugi::impl::(anonymous namespace)::xpath_ast_node::eval_string(pugi::impl::(anonymous namespace)::xpath_context const&, pugi::impl::(anonymous namespace)::xpath_stack const&)
xpath_string eval_string(const xpath_context& c, const xpath_stack& stack)
		{
			switch (_type)
			{
			case ast_string_constant:
				return xpath_string::from_const(_data.string);

			case ast_func_local_name_0:
			{
				xpath_node na = c.n;

				return xpath_string::from_const(local_name(na));
			}

			case ast_func_local_name_1:
			{
				xpath_allocator_capture cr(stack.result);

				xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first);
				xpath_node na = ns.first();

				return xpath_string::from_const(local_name(na));
			}

			case ast_func_name_0:
			{
				xpath_node na = c.n;

				return xpath_string::from_const(qualified_name(na));
			}

			case ast_func_name_1:
			{
				xpath_allocator_capture cr(stack.result);

				xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first);
				xpath_node na = ns.first();

				return xpath_string::from_const(qualified_name(na));
			}

			case ast_func_namespace_uri_0:
			{
				xpath_node na = c.n;

				return xpath_string::from_const(namespace_uri(na));
			}

			case ast_func_namespace_uri_1:
			{
				xpath_allocator_capture cr(stack.result);

				xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first);
				xpath_node na = ns.first();

				return xpath_string::from_const(namespace_uri(na));
			}

			case ast_func_string_0:
				return string_value(c.n, stack.result);

			case ast_func_string_1:
				return _left->eval_string(c, stack);

			case ast_func_concat:
				return eval_string_concat(c, stack);

			case ast_func_substring_before:
			{
				xpath_allocator_capture cr(stack.temp);

				xpath_stack swapped_stack = {stack.temp, stack.result};

				xpath_string s = _left->eval_string(c, swapped_stack);
				xpath_string p = _right->eval_string(c, swapped_stack);

				const char_t* pos = find_substring(s.c_str(), p.c_str());

				return pos ? xpath_string::from_heap(s.c_str(), pos, stack.result) : xpath_string();
			}

			case ast_func_substring_after:
			{
				xpath_allocator_capture cr(stack.temp);

				xpath_stack swapped_stack = {stack.temp, stack.result};

				xpath_string s = _left->eval_string(c, swapped_stack);
				xpath_string p = _right->eval_string(c, swapped_stack);

				const char_t* pos = find_substring(s.c_str(), p.c_str());
				if (!pos) return xpath_string();

				const char_t* rbegin = pos + p.length();
				const char_t* rend = s.c_str() + s.length();

				return s.uses_heap() ? xpath_string::from_heap(rbegin, rend, stack.result) : xpath_string::from_const(rbegin);
			}

			case ast_func_substring_2:
			{
				xpath_allocator_capture cr(stack.temp);

				xpath_stack swapped_stack = {stack.temp, stack.result};

				xpath_string s = _left->eval_string(c, swapped_stack);
				size_t s_length = s.length();

				double first = round_nearest(_right->eval_number(c, stack));

				if (is_nan(first)) return xpath_string(); // NaN
				else if (first >= s_length + 1) return xpath_string();

				size_t pos = first < 1 ? 1 : static_cast<size_t>(first);
				assert(1 <= pos && pos <= s_length + 1);

				const char_t* rbegin = s.c_str() + (pos - 1);
				const char_t* rend = s.c_str() + s.length();

				return s.uses_heap() ? xpath_string::from_heap(rbegin, rend, stack.result) : xpath_string::from_const(rbegin);
			}

			case ast_func_substring_3:
			{
				xpath_allocator_capture cr(stack.temp);

				xpath_stack swapped_stack = {stack.temp, stack.result};

				xpath_string s = _left->eval_string(c, swapped_stack);
				size_t s_length = s.length();

				double first = round_nearest(_right->eval_number(c, stack));
				double last = first + round_nearest(_right->_next->eval_number(c, stack));

				if (is_nan(first) || is_nan(last)) return xpath_string();
				else if (first >= s_length + 1) return xpath_string();
				else if (first >= last) return xpath_string();
				else if (last < 1) return xpath_string();

				size_t pos = first < 1 ? 1 : static_cast<size_t>(first);
				size_t end = last >= s_length + 1 ? s_length + 1 : static_cast<size_t>(last);

				assert(1 <= pos && pos <= end && end <= s_length + 1);
				const char_t* rbegin = s.c_str() + (pos - 1);
				const char_t* rend = s.c_str() + (end - 1);

				return (end == s_length + 1 && !s.uses_heap()) ? xpath_string::from_const(rbegin) : xpath_string::from_heap(rbegin, rend, stack.result);
			}

			case ast_func_normalize_space_0:
			{
				xpath_string s = string_value(c.n, stack.result);

				char_t* begin = s.data(stack.result);
				if (!begin) return xpath_string();

				char_t* end = normalize_space(begin);

				return xpath_string::from_heap_preallocated(begin, end);
			}

			case ast_func_normalize_space_1:
			{
				xpath_string s = _left->eval_string(c, stack);

				char_t* begin = s.data(stack.result);
				if (!begin) return xpath_string();

				char_t* end = normalize_space(begin);

				return xpath_string::from_heap_preallocated(begin, end);
			}

			case ast_func_translate:
			{
				xpath_allocator_capture cr(stack.temp);

				xpath_stack swapped_stack = {stack.temp, stack.result};

				xpath_string s = _left->eval_string(c, stack);
				xpath_string from = _right->eval_string(c, swapped_stack);
				xpath_string to = _right->_next->eval_string(c, swapped_stack);

				char_t* begin = s.data(stack.result);
				if (!begin) return xpath_string();

				char_t* end = translate(begin, from.c_str(), to.c_str(), to.length());

				return xpath_string::from_heap_preallocated(begin, end);
			}

			case ast_opt_translate_table:
			{
				xpath_string s = _left->eval_string(c, stack);

				char_t* begin = s.data(stack.result);
				if (!begin) return xpath_string();

				char_t* end = translate_table(begin, _data.table);

				return xpath_string::from_heap_preallocated(begin, end);
			}

			case ast_variable:
			{
				assert(_rettype == _data.variable->type());

				if (_rettype == xpath_type_string)
					return xpath_string::from_const(_data.variable->get_string());
			}

			// fallthrough
			default:
			{
				switch (_rettype)
				{
				case xpath_type_boolean:
					return xpath_string::from_const(eval_boolean(c, stack) ? PUGIXML_TEXT("true") : PUGIXML_TEXT("false"));

				case xpath_type_number:
					return convert_number_to_string(eval_number(c, stack), stack.result);

				case xpath_type_node_set:
				{
					xpath_allocator_capture cr(stack.temp);

					xpath_stack swapped_stack = {stack.temp, stack.result};

					xpath_node_set_raw ns = eval_node_set(c, swapped_stack, nodeset_eval_first);
					return ns.empty() ? xpath_string() : string_value(ns.first(), stack.result);
				}

				default:
					assert(false && "Wrong expression for return type string"); // unreachable
					return xpath_string();
				}
			}
			}
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x630, %rsp            # imm = 0x630
movq %rdi, -0x4a0(%rbp)
movq %rdi, -0x498(%rbp)
movq %rsi, -0x8(%rbp)
movq %rdx, -0x10(%rbp)
movq %rcx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x490(%rbp)
movsbl (%rax), %eax
addl $-0x12, %eax
movl %eax, %ecx
movq %rcx, -0x488(%rbp)
subl $0x28, %eax
ja 0x4dff7
movq -0x488(%rbp), %rax
leaq 0x1dc66(%rip), %rcx     # 0x6aa1c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x4a0(%rbp), %rdi
movq -0x490(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0x60df0
jmp 0x4e1b9
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x28(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x61400
movq -0x4a0(%rbp), %rdi
movq %rax, %rsi
callq 0x60df0
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq (%rax), %rsi
leaq -0x48(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
leaq -0x68(%rbp), %rdi
movl $0x2, %r8d
callq 0x4e6d0
jmp 0x4ce3f
leaq -0x68(%rbp), %rdi
callq 0x4eed0
movq %rdx, -0x4b0(%rbp)
movq %rax, -0x4a8(%rbp)
jmp 0x4ce58
movq -0x4b0(%rbp), %rax
movq -0x4a8(%rbp), %rcx
movq %rcx, -0x88(%rbp)
movq %rax, -0x80(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x61400
movq %rax, -0x4b8(%rbp)
jmp 0x4ce86
movq -0x4b8(%rbp), %rsi
movq -0x4a0(%rbp), %rdi
callq 0x60df0
jmp 0x4ce9b
leaq -0x48(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x98(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x90(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x61460
movq -0x4a0(%rbp), %rdi
movq %rax, %rsi
callq 0x60df0
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq (%rax), %rsi
leaq -0xb8(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
leaq -0xd8(%rbp), %rdi
movl $0x2, %r8d
callq 0x4e6d0
jmp 0x4cf36
leaq -0xd8(%rbp), %rdi
callq 0x4eed0
movq %rdx, -0x4c8(%rbp)
movq %rax, -0x4c0(%rbp)
jmp 0x4cf52
movq -0x4c8(%rbp), %rax
movq -0x4c0(%rbp), %rcx
movq %rcx, -0xe8(%rbp)
movq %rax, -0xe0(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x61460
movq %rax, -0x4d0(%rbp)
jmp 0x4cf83
movq -0x4d0(%rbp), %rsi
movq -0x4a0(%rbp), %rdi
callq 0x60df0
jmp 0x4cf98
leaq -0xb8(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0xf8(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0xf0(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x614d0
movq -0x4a0(%rbp), %rdi
movq %rax, %rsi
callq 0x60df0
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq (%rax), %rsi
leaq -0x118(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
leaq -0x138(%rbp), %rdi
movl $0x2, %r8d
callq 0x4e6d0
jmp 0x4d039
leaq -0x138(%rbp), %rdi
callq 0x4eed0
movq %rdx, -0x4e0(%rbp)
movq %rax, -0x4d8(%rbp)
jmp 0x4d055
movq -0x4e0(%rbp), %rax
movq -0x4d8(%rbp), %rcx
movq %rcx, -0x148(%rbp)
movq %rax, -0x140(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x614d0
movq %rax, -0x4e8(%rbp)
jmp 0x4d086
movq -0x4e8(%rbp), %rsi
movq -0x4a0(%rbp), %rdi
callq 0x60df0
jmp 0x4d09b
leaq -0x118(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movq -0x4a0(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rax
movq (%rax), %rdx
callq 0x60a90
jmp 0x4e1b9
movq -0x4a0(%rbp), %rdi
movq -0x490(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
callq 0x4cd60
jmp 0x4e1b9
movq -0x490(%rbp), %rsi
movq -0x4a0(%rbp), %rdi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
callq 0x61550
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x168(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, -0x178(%rbp)
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, -0x170(%rbp)
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x190(%rbp), %rdi
leaq -0x178(%rbp), %rcx
callq 0x4cd60
jmp 0x4d17e
movq -0x490(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x1a8(%rbp), %rdi
leaq -0x178(%rbp), %rcx
callq 0x4cd60
jmp 0x4d1a2
leaq -0x190(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x4f0(%rbp)
jmp 0x4d1b7
leaq -0x1a8(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x4f8(%rbp)
jmp 0x4d1cc
movq -0x4f8(%rbp), %rsi
movq -0x4f0(%rbp), %rdi
callq 0x608c0
movq %rax, -0x1b0(%rbp)
cmpq $0x0, -0x1b0(%rbp)
je 0x4d22a
leaq -0x190(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x500(%rbp)
jmp 0x4d205
movq -0x500(%rbp), %rsi
movq -0x4a0(%rbp), %rdi
movq -0x1b0(%rbp), %rdx
movq -0x18(%rbp), %rax
movq (%rax), %rcx
callq 0x61940
jmp 0x4d228
jmp 0x4d23a
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d238
jmp 0x4d23a
leaq -0x168(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x1d0(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, -0x1e0(%rbp)
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, -0x1d8(%rbp)
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x1f8(%rbp), %rdi
leaq -0x1e0(%rbp), %rcx
callq 0x4cd60
jmp 0x4d2bd
movq -0x490(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x210(%rbp), %rdi
leaq -0x1e0(%rbp), %rcx
callq 0x4cd60
jmp 0x4d2e1
leaq -0x1f8(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x508(%rbp)
jmp 0x4d2f6
leaq -0x210(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x510(%rbp)
jmp 0x4d30b
movq -0x510(%rbp), %rsi
movq -0x508(%rbp), %rdi
callq 0x608c0
movq %rax, -0x218(%rbp)
cmpq $0x0, -0x218(%rbp)
jne 0x4d369
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d33d
movl $0x1, -0x21c(%rbp)
jmp 0x4d44c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movq -0x218(%rbp), %rax
movq %rax, -0x520(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x4e200
movq %rax, -0x518(%rbp)
jmp 0x4d38c
movq -0x518(%rbp), %rcx
movq -0x520(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x228(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x528(%rbp)
jmp 0x4d3b9
leaq -0x1f8(%rbp), %rdi
callq 0x4e200
movq %rax, -0x530(%rbp)
jmp 0x4d3ce
movq -0x530(%rbp), %rcx
movq -0x528(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x230(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x61a00
movb %al, -0x531(%rbp)
jmp 0x4d3fa
movb -0x531(%rbp), %al
testb $0x1, %al
jne 0x4d406
jmp 0x4d42b
movq -0x4a0(%rbp), %rdi
movq -0x228(%rbp), %rsi
movq -0x230(%rbp), %rdx
movq -0x18(%rbp), %rax
movq (%rax), %rcx
callq 0x61940
jmp 0x4d429
jmp 0x4d442
movq -0x4a0(%rbp), %rdi
movq -0x228(%rbp), %rsi
callq 0x60df0
jmp 0x4d440
jmp 0x4d442
movl $0x1, -0x21c(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x250(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, -0x260(%rbp)
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, -0x258(%rbp)
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x278(%rbp), %rdi
leaq -0x260(%rbp), %rcx
callq 0x4cd60
jmp 0x4d4b2
leaq -0x278(%rbp), %rdi
callq 0x4e200
movq %rax, -0x540(%rbp)
jmp 0x4d4c7
movq -0x490(%rbp), %rax
movq -0x540(%rbp), %rcx
movq %rcx, -0x280(%rbp)
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x4c1a0
movsd %xmm0, -0x548(%rbp)
jmp 0x4d4f7
movsd -0x548(%rbp), %xmm0
callq 0x61a20
movsd %xmm0, -0x550(%rbp)
jmp 0x4d50e
movsd -0x550(%rbp), %xmm0
movsd %xmm0, -0x288(%rbp)
movsd -0x288(%rbp), %xmm0
callq 0x61350
testb $0x1, %al
jne 0x4d531
jmp 0x4d56b
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d53f
movl $0x1, -0x21c(%rbp)
jmp 0x4d764
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movsd -0x288(%rbp), %xmm0
movq -0x280(%rbp), %rax
incq %rax
movq %rax, %xmm1
movaps 0x1dd77(%rip), %xmm2    # 0x6b300
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x1dd7b(%rip), %xmm2    # 0x6b310
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0x4d5c7
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d5b8
movl $0x1, -0x21c(%rbp)
jmp 0x4d764
jmp 0x4d5c9
movsd 0x1dd4f(%rip), %xmm0    # 0x6b320
ucomisd -0x288(%rbp), %xmm0
jbe 0x4d5e9
movl $0x1, %eax
movq %rax, -0x558(%rbp)
jmp 0x4d61e
movsd -0x288(%rbp), %xmm0
movsd 0x1dd2f(%rip), %xmm2    # 0x6b328
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rcx
cvttsd2si %xmm0, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x558(%rbp)
movq -0x558(%rbp), %rax
movq %rax, -0x290(%rbp)
xorl %eax, %eax
movl $0x1, %ecx
cmpq -0x290(%rbp), %rcx
movb %al, -0x559(%rbp)
ja 0x4d660
movq -0x290(%rbp), %rax
movq -0x280(%rbp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
setbe %al
movb %al, -0x559(%rbp)
movb -0x559(%rbp), %al
testb $0x1, %al
jne 0x4d66c
jmp 0x4d66e
jmp 0x4d68d
leaq 0x20c7e(%rip), %rdi     # 0x6e2f3
leaq 0x1dcd9(%rip), %rsi     # 0x6b355
movl $0x2969, %edx           # imm = 0x2969
leaq 0x20c8b(%rip), %rcx     # 0x6e313
callq 0x7180
leaq -0x278(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x568(%rbp)
jmp 0x4d6a2
movq -0x568(%rbp), %rcx
movq -0x290(%rbp), %rax
leaq -0x1(%rax,%rcx), %rax
movq %rax, -0x298(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x570(%rbp)
jmp 0x4d6d1
leaq -0x278(%rbp), %rdi
callq 0x4e200
movq %rax, -0x578(%rbp)
jmp 0x4d6e6
movq -0x578(%rbp), %rcx
movq -0x570(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x2a0(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x61a00
movb %al, -0x579(%rbp)
jmp 0x4d712
movb -0x579(%rbp), %al
testb $0x1, %al
jne 0x4d71e
jmp 0x4d743
movq -0x4a0(%rbp), %rdi
movq -0x298(%rbp), %rsi
movq -0x2a0(%rbp), %rdx
movq -0x18(%rbp), %rax
movq (%rax), %rcx
callq 0x61940
jmp 0x4d741
jmp 0x4d75a
movq -0x4a0(%rbp), %rdi
movq -0x298(%rbp), %rsi
callq 0x60df0
jmp 0x4d758
jmp 0x4d75a
movl $0x1, -0x21c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x2c0(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, -0x2d0(%rbp)
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, -0x2c8(%rbp)
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x2e8(%rbp), %rdi
leaq -0x2d0(%rbp), %rcx
callq 0x4cd60
jmp 0x4d7ca
leaq -0x2e8(%rbp), %rdi
callq 0x4e200
movq %rax, -0x588(%rbp)
jmp 0x4d7df
movq -0x490(%rbp), %rax
movq -0x588(%rbp), %rcx
movq %rcx, -0x2f0(%rbp)
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x4c1a0
movsd %xmm0, -0x590(%rbp)
jmp 0x4d80f
movsd -0x590(%rbp), %xmm0
callq 0x61a20
movsd %xmm0, -0x598(%rbp)
jmp 0x4d826
movq -0x490(%rbp), %rax
movsd -0x598(%rbp), %xmm0
movsd %xmm0, -0x2f8(%rbp)
movsd -0x2f8(%rbp), %xmm0
movsd %xmm0, -0x5a8(%rbp)
movq 0x10(%rax), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x4c1a0
movsd %xmm0, -0x5a0(%rbp)
jmp 0x4d86c
movsd -0x5a0(%rbp), %xmm0
callq 0x61a20
movsd %xmm0, -0x5b0(%rbp)
jmp 0x4d883
movsd -0x5b0(%rbp), %xmm1
movsd -0x5a8(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x300(%rbp)
movsd -0x2f8(%rbp), %xmm0
callq 0x61350
testb $0x1, %al
jne 0x4d8c3
movsd -0x300(%rbp), %xmm0
callq 0x61350
testb $0x1, %al
jne 0x4d8c3
jmp 0x4d8fd
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d8d1
movl $0x1, -0x21c(%rbp)
jmp 0x4dc0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movsd -0x2f8(%rbp), %xmm0
movq -0x2f0(%rbp), %rax
incq %rax
movq %rax, %xmm1
movaps 0x1d9e5(%rip), %xmm2    # 0x6b300
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x1d9e9(%rip), %xmm2    # 0x6b310
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0x4d959
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d94a
movl $0x1, -0x21c(%rbp)
jmp 0x4dc0c
movsd -0x2f8(%rbp), %xmm0
ucomisd -0x300(%rbp), %xmm0
jb 0x4d988
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d979
movl $0x1, -0x21c(%rbp)
jmp 0x4dc0c
movsd 0x1d990(%rip), %xmm0    # 0x6b320
ucomisd -0x300(%rbp), %xmm0
jbe 0x4d9b7
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4d9a8
movl $0x1, -0x21c(%rbp)
jmp 0x4dc0c
jmp 0x4d9b9
jmp 0x4d9bb
jmp 0x4d9bd
movsd 0x1d95b(%rip), %xmm0    # 0x6b320
ucomisd -0x2f8(%rbp), %xmm0
jbe 0x4d9dd
movl $0x1, %eax
movq %rax, -0x5b8(%rbp)
jmp 0x4da12
movsd -0x2f8(%rbp), %xmm0
movsd 0x1d93b(%rip), %xmm2    # 0x6b328
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rcx
cvttsd2si %xmm0, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x5b8(%rbp)
movq -0x5b8(%rbp), %rax
movq %rax, -0x308(%rbp)
movsd -0x300(%rbp), %xmm0
movq -0x2f0(%rbp), %rax
incq %rax
movq %rax, %xmm1
movaps 0x1d8c2(%rip), %xmm2    # 0x6b300
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x1d8c6(%rip), %xmm2    # 0x6b310
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0x4da73
movq -0x2f0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x5c0(%rbp)
jmp 0x4daa8
movsd -0x300(%rbp), %xmm0
movsd 0x1d8a5(%rip), %xmm2    # 0x6b328
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rcx
cvttsd2si %xmm0, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x5c0(%rbp)
movq -0x5c0(%rbp), %rax
movq %rax, -0x310(%rbp)
xorl %eax, %eax
movl $0x1, %ecx
cmpq -0x308(%rbp), %rcx
movb %al, -0x5c1(%rbp)
ja 0x4db02
movq -0x308(%rbp), %rcx
xorl %eax, %eax
cmpq -0x310(%rbp), %rcx
movb %al, -0x5c1(%rbp)
ja 0x4db02
movq -0x310(%rbp), %rax
movq -0x2f0(%rbp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
setbe %al
movb %al, -0x5c1(%rbp)
movb -0x5c1(%rbp), %al
testb $0x1, %al
jne 0x4db0e
jmp 0x4db10
jmp 0x4db2f
leaq 0x20874(%rip), %rdi     # 0x6e38b
leaq 0x1d837(%rip), %rsi     # 0x6b355
movl $0x2985, %edx           # imm = 0x2985
leaq 0x207e9(%rip), %rcx     # 0x6e313
callq 0x7180
leaq -0x2e8(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x5d0(%rbp)
jmp 0x4db44
movq -0x5d0(%rbp), %rcx
movq -0x308(%rbp), %rax
leaq -0x1(%rax,%rcx), %rax
movq %rax, -0x318(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x5d8(%rbp)
jmp 0x4db73
movq -0x5d8(%rbp), %rax
movq -0x310(%rbp), %rcx
subq $0x1, %rcx
addq %rcx, %rax
movq %rax, -0x320(%rbp)
movq -0x310(%rbp), %rax
movq -0x2f0(%rbp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jne 0x4dbdd
leaq -0x2e8(%rbp), %rdi
callq 0x61a00
movb %al, -0x5d9(%rbp)
jmp 0x4dbba
movb -0x5d9(%rbp), %al
testb $0x1, %al
jne 0x4dbdd
jmp 0x4dbc6
movq -0x4a0(%rbp), %rdi
movq -0x318(%rbp), %rsi
callq 0x60df0
jmp 0x4dbdb
jmp 0x4dc02
movq -0x4a0(%rbp), %rdi
movq -0x318(%rbp), %rsi
movq -0x320(%rbp), %rdx
movq -0x18(%rbp), %rax
movq (%rax), %rcx
callq 0x61940
jmp 0x4dc00
jmp 0x4dc02
movl $0x1, -0x21c(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rax
movq (%rax), %rdx
leaq -0x338(%rbp), %rdi
callq 0x60a90
movq -0x18(%rbp), %rax
movq (%rax), %rsi
leaq -0x338(%rbp), %rdi
callq 0x61a50
movq %rax, -0x340(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x4dc69
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4e1b9
movq -0x340(%rbp), %rdi
callq 0x61ae0
movq -0x4a0(%rbp), %rdi
movq %rax, -0x348(%rbp)
movq -0x340(%rbp), %rsi
movq -0x348(%rbp), %rdx
callq 0x61be0
jmp 0x4e1b9
movq -0x490(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
leaq -0x360(%rbp), %rdi
callq 0x4cd60
movq -0x18(%rbp), %rax
movq (%rax), %rsi
leaq -0x360(%rbp), %rdi
callq 0x61a50
movq %rax, -0x368(%rbp)
cmpq $0x0, -0x368(%rbp)
jne 0x4dcef
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4e1b9
movq -0x368(%rbp), %rdi
callq 0x61ae0
movq -0x4a0(%rbp), %rdi
movq %rax, -0x370(%rbp)
movq -0x368(%rbp), %rsi
movq -0x370(%rbp), %rdx
callq 0x61be0
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x390(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, -0x3a0(%rbp)
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, -0x398(%rbp)
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
leaq -0x3b8(%rbp), %rdi
callq 0x4cd60
jmp 0x4dd73
movq -0x490(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x3d0(%rbp), %rdi
leaq -0x3a0(%rbp), %rcx
callq 0x4cd60
jmp 0x4dd97
movq -0x490(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x18(%rax), %rsi
movq -0x10(%rbp), %rdx
leaq -0x3e8(%rbp), %rdi
leaq -0x3a0(%rbp), %rcx
callq 0x4cd60
jmp 0x4ddbf
movq -0x18(%rbp), %rax
movq (%rax), %rsi
leaq -0x3b8(%rbp), %rdi
callq 0x61a50
movq %rax, -0x5e8(%rbp)
jmp 0x4dddb
movq -0x5e8(%rbp), %rax
movq %rax, -0x3f0(%rbp)
cmpq $0x0, -0x3f0(%rbp)
jne 0x4de2d
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4de01
movl $0x1, -0x21c(%rbp)
jmp 0x4ded8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
movq -0x3f0(%rbp), %rax
movq %rax, -0x5f8(%rbp)
leaq -0x3d0(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x5f0(%rbp)
jmp 0x4de50
leaq -0x3e8(%rbp), %rdi
callq 0x4e1e0
movq %rax, -0x600(%rbp)
jmp 0x4de65
leaq -0x3e8(%rbp), %rdi
callq 0x4e200
movq %rax, -0x608(%rbp)
jmp 0x4de7a
movq -0x608(%rbp), %rcx
movq -0x600(%rbp), %rdx
movq -0x5f0(%rbp), %rsi
movq -0x5f8(%rbp), %rdi
callq 0x61c70
movq %rax, -0x610(%rbp)
jmp 0x4dea4
movq -0x4a0(%rbp), %rdi
movq -0x610(%rbp), %rax
movq %rax, -0x3f8(%rbp)
movq -0x3f0(%rbp), %rsi
movq -0x3f8(%rbp), %rdx
callq 0x61be0
jmp 0x4dece
movl $0x1, -0x21c(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq -0x490(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
leaq -0x410(%rbp), %rdi
callq 0x4cd60
movq -0x18(%rbp), %rax
movq (%rax), %rsi
leaq -0x410(%rbp), %rdi
callq 0x61a50
movq %rax, -0x418(%rbp)
cmpq $0x0, -0x418(%rbp)
jne 0x4df3d
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4e1b9
movq -0x490(%rbp), %rax
movq -0x418(%rbp), %rdi
movq 0x20(%rax), %rsi
callq 0x61d30
movq -0x4a0(%rbp), %rdi
movq %rax, -0x420(%rbp)
movq -0x418(%rbp), %rsi
movq -0x420(%rbp), %rdx
callq 0x61be0
jmp 0x4e1b9
movq -0x490(%rbp), %rax
movsbl 0x1(%rax), %ecx
movl %ecx, -0x614(%rbp)
movq 0x20(%rax), %rdi
callq 0x4a1d0
movl %eax, %ecx
movl -0x614(%rbp), %eax
cmpl %ecx, %eax
jne 0x4dfa2
jmp 0x4dfc1
leaq 0x1fd65(%rip), %rdi     # 0x6dd0e
leaq 0x1d3a5(%rip), %rsi     # 0x6b355
movl $0x29c4, %edx           # imm = 0x29C4
leaq 0x20357(%rip), %rcx     # 0x6e313
callq 0x7180
movq -0x490(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x3, %eax
jne 0x4dff5
movq -0x490(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x4a270
movq -0x4a0(%rbp), %rdi
movq %rax, %rsi
callq 0x60df0
jmp 0x4e1b9
jmp 0x4dff7
movq -0x490(%rbp), %rax
movsbl 0x1(%rax), %eax
movl %eax, -0x618(%rbp)
subl $0x1, %eax
je 0x4e099
jmp 0x4e013
movl -0x618(%rbp), %eax
subl $0x2, %eax
je 0x4e06d
jmp 0x4e020
movl -0x618(%rbp), %eax
subl $0x4, %eax
jne 0x4e19a
jmp 0x4e031
movq -0x490(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x4b6c0
movq -0x4a0(%rbp), %rdi
movb %al, %cl
leaq 0x1e863(%rip), %rsi     # 0x6c8b8
leaq 0x1f882(%rip), %rax     # 0x6d8de
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x60df0
jmp 0x4e1b9
movq -0x490(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x4c1a0
movq -0x4a0(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
callq 0x61dd0
jmp 0x4e1b9
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x440(%rbp), %rdi
callq 0x607e0
movq -0x490(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x450(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x448(%rbp)
movq -0x10(%rbp), %rdx
leaq -0x470(%rbp), %rdi
leaq -0x450(%rbp), %rcx
movl $0x2, %r8d
callq 0x4e6d0
jmp 0x4e0f0
leaq -0x470(%rbp), %rdi
callq 0x609e0
testb $0x1, %al
jne 0x4e102
jmp 0x4e112
movq -0x4a0(%rbp), %rdi
callq 0x4e460
jmp 0x4e110
jmp 0x4e168
leaq -0x470(%rbp), %rdi
callq 0x4eed0
movq %rdx, -0x628(%rbp)
movq %rax, -0x620(%rbp)
jmp 0x4e12e
movq -0x4a0(%rbp), %rdi
movq -0x628(%rbp), %rax
movq -0x620(%rbp), %rcx
movq %rcx, -0x480(%rbp)
movq %rax, -0x478(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rdx
leaq -0x480(%rbp), %rsi
callq 0x60a90
jmp 0x4e166
jmp 0x4e168
movl $0x1, -0x21c(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x60890
jmp 0x4e1b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x60890
jmp 0x4e1c9
leaq 0x20218(%rip), %rdi     # 0x6e3b9
leaq 0x1d1ad(%rip), %rsi     # 0x6b355
movl $0x29e0, %edx           # imm = 0x29E0
leaq 0x2015f(%rip), %rcx     # 0x6e313
callq 0x7180
movq -0x498(%rbp), %rax
addq $0x630, %rsp            # imm = 0x630
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x7600
nopw %cs:(%rax,%rax)