// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::synthesize_string_expression(exprtk::details::operator_type const&, exprtk::details::expression_node<double>* (&) [3])
inline expression_node_ptr synthesize_string_expression(const details::operator_type& opr, expression_node_ptr (&branch)[3])
         {
            if (details::e_inrange != opr)
               return error_node();
            else if ((0 == branch[0]) || (0 == branch[1]) || (0 == branch[2]))
            {
               details::free_all_nodes(*node_allocator_,branch);

               return error_node();
            }
            else if (
                      details::is_const_string_node(branch[0]) &&
                      details::is_const_string_node(branch[1]) &&
                      details::is_const_string_node(branch[2])
                    )
            {
               const std::string s0 = static_cast<details::string_literal_node<Type>*>(branch[0])->str();
               const std::string s1 = static_cast<details::string_literal_node<Type>*>(branch[1])->str();
               const std::string s2 = static_cast<details::string_literal_node<Type>*>(branch[2])->str();

               const Type v = (((s0 <= s1) && (s1 <= s2)) ? Type(1) : Type(0));

               details::free_all_nodes(*node_allocator_,branch);

               return node_allocator_->allocate_c<details::literal_node<Type> >(v);
            }
            else if (
                      details::is_string_node(branch[0]) &&
                      details::is_string_node(branch[1]) &&
                      details::is_string_node(branch[2])
                    )
            {
               std::string& s0 = static_cast<details::stringvar_node<Type>*>(branch[0])->ref();
               std::string& s1 = static_cast<details::stringvar_node<Type>*>(branch[1])->ref();
               std::string& s2 = static_cast<details::stringvar_node<Type>*>(branch[2])->ref();

               typedef typename details::sosos_node<Type, std::string&, std::string&, std::string&, details::inrange_op<Type> > inrange_t;

               return node_allocator_->allocate_type<inrange_t, std::string&, std::string&, std::string&>(s0, s1, s2);
            }
            else if (
                      details::is_const_string_node(branch[0]) &&
                            details::is_string_node(branch[1]) &&
                      details::is_const_string_node(branch[2])
                    )
            {
               std::string  s0 = static_cast<details::string_literal_node<Type>*>(branch[0])->str();
               std::string& s1 = static_cast<details::stringvar_node<Type>*     >(branch[1])->ref();
               std::string  s2 = static_cast<details::string_literal_node<Type>*>(branch[2])->str();

               typedef typename details::sosos_node<Type, std::string, std::string&, std::string, details::inrange_op<Type> > inrange_t;

               details::free_node(*node_allocator_,branch[0]);
               details::free_node(*node_allocator_,branch[2]);

               return node_allocator_->allocate_type<inrange_t, std::string, std::string&, std::string>(s0, s1, s2);
            }
            else if (
                            details::is_string_node(branch[0]) &&
                      details::is_const_string_node(branch[1]) &&
                            details::is_string_node(branch[2])
                    )
            {
               std::string&  s0 = static_cast<details::stringvar_node<Type>*     >(branch[0])->ref();
               std::string   s1 = static_cast<details::string_literal_node<Type>*>(branch[1])->str();
               std::string&  s2 = static_cast<details::stringvar_node<Type>*     >(branch[2])->ref();

               typedef typename details::sosos_node<Type, std::string&, std::string, std::string&, details::inrange_op<Type> > inrange_t;

               details::free_node(*node_allocator_,branch[1]);

               return node_allocator_->allocate_type<inrange_t, std::string&, std::string, std::string&>(s0, s1, s2);
            }
            else if (
                      details::is_string_node(branch[0]) &&
                      details::is_string_node(branch[1]) &&
                      details::is_const_string_node(branch[2])
                    )
            {
               std::string& s0 = static_cast<details::stringvar_node<Type>*     >(branch[0])->ref();
               std::string& s1 = static_cast<details::stringvar_node<Type>*     >(branch[1])->ref();
               std::string  s2 = static_cast<details::string_literal_node<Type>*>(branch[2])->str();

               typedef typename details::sosos_node<Type, std::string&, std::string&, std::string, details::inrange_op<Type> > inrange_t;

               details::free_node(*node_allocator_,branch[2]);

               return node_allocator_->allocate_type<inrange_t, std::string&, std::string&, std::string>(s0, s1, s2);
            }
            else if (
                      details::is_const_string_node(branch[0]) &&
                      details::      is_string_node(branch[1]) &&
                      details::      is_string_node(branch[2])
                    )
            {
               std::string  s0 = static_cast<details::string_literal_node<Type>*>(branch[0])->str();
               std::string& s1 = static_cast<details::stringvar_node<Type>*     >(branch[1])->ref();
               std::string& s2 = static_cast<details::stringvar_node<Type>*     >(branch[2])->ref();

               typedef typename details::sosos_node<Type, std::string, std::string&, std::string&, details::inrange_op<Type> > inrange_t;

               details::free_node(*node_allocator_,branch[0]);

               return node_allocator_->allocate_type<inrange_t, std::string, std::string&, std::string&>(s0, s1, s2);
            }
            else
               return error_node();
         }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x110, %rsp            # imm = 0x110
cmpl $0x44, (%rsi)
jne 0x2875da
movq %rdx, %r14
movq %rdi, %rbx
movq (%rdx), %rdi
testq %rdi, %rdi
je 0x2875ce
cmpq $0x0, 0x8(%r14)
je 0x2875ce
cmpq $0x0, 0x10(%r14)
je 0x2875ce
leaq 0x8(%r14), %r12
leaq 0x10(%r14), %r15
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x2875f0
movq (%r12), %rdi
testq %rdi, %rdi
je 0x2875f0
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x2875f0
movq (%r15), %rdi
testq %rdi, %rdi
je 0x2875f0
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x2875f0
movq (%r14), %rsi
addq $0x30, %rsi
leaq 0x8(%rsp), %rdi
callq 0x1182f0
movq 0x8(%r14), %rsi
addq $0x30, %rsi
leaq 0x28(%rsp), %rdi
callq 0x1182f0
movq (%r15), %rsi
addq $0x30, %rsi
leaq 0xf0(%rsp), %rdi
callq 0x1182f0
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x253657
xorps %xmm0, %xmm0
testb %al, %al
je 0x287957
leaq 0x28(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0x253657
testb %al, %al
jne 0x28794f
xorps %xmm0, %xmm0
jmp 0x287957
movq 0x8(%rbx), %rdi
movq %r14, %rsi
callq 0x28739d
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x110, %rsp            # imm = 0x110
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq (%r14), %rdi
testq %rdi, %rdi
je 0x2875da
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x28765a
movq (%r12), %rdi
testq %rdi, %rdi
je 0x28765a
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x28765a
movq (%r15), %rdi
testq %rdi, %rdi
je 0x28765a
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x28765a
movq (%r14), %rax
movq 0x8(%r14), %rcx
movq 0x30(%rax), %rsi
movq 0x30(%rcx), %rdx
movq 0x10(%r14), %rax
movq 0x30(%rax), %rcx
movq 0x8(%rbx), %rdi
addq $0x110, %rsp            # imm = 0x110
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x287bfe
movq (%r14), %rdi
testq %rdi, %rdi
je 0x2875da
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x28774f
movq (%r12), %rdi
testq %rdi, %rdi
je 0x28774f
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x28774f
movq (%r15), %rdi
testq %rdi, %rdi
je 0x28774f
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x28774f
movq (%r14), %rsi
addq $0x30, %rsi
leaq 0x8(%rsp), %rdi
callq 0x1182f0
movq 0x8(%r14), %rax
movq 0x30(%rax), %r12
movq 0x10(%r14), %rsi
addq $0x30, %rsi
leaq 0x28(%rsp), %rdi
callq 0x1182f0
movq 0x8(%rbx), %rdi
movq %r14, %rsi
callq 0x1ad9c8
movq 0x8(%rbx), %rdi
movq %r15, %rsi
callq 0x1ad9c8
movq 0x8(%rbx), %rbx
leaq 0xd0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1182f0
leaq 0xb0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1182f0
leaq 0xd0(%rsp), %rsi
leaq 0xb0(%rsp), %rcx
movq %rbx, %rdi
movq %r12, %rdx
callq 0x287c44
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x118648
leaq 0xd0(%rsp), %rdi
jmp 0x287982
movq (%r14), %rdi
testq %rdi, %rdi
je 0x2875da
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x2877fe
movq (%r12), %rdi
testq %rdi, %rdi
je 0x2877fe
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x2877fe
movq (%r15), %rdi
testq %rdi, %rdi
je 0x2877fe
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x2877fe
movq (%r14), %rax
movq 0x30(%rax), %r15
movq 0x8(%r14), %rsi
addq $0x30, %rsi
leaq 0x8(%rsp), %rdi
callq 0x1182f0
movq 0x10(%r14), %rax
movq 0x30(%rax), %r14
movq 0x8(%rbx), %rdi
movq %r12, %rsi
callq 0x1ad9c8
movq 0x8(%rbx), %rbx
leaq 0x90(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1182f0
leaq 0x90(%rsp), %rdx
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rcx
callq 0x287cf8
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
jmp 0x28798c
movq (%r14), %rdi
testq %rdi, %rdi
je 0x2875da
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x2878a0
movq (%r12), %rdi
testq %rdi, %rdi
je 0x2878a0
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x2878a0
movq (%r15), %rdi
testq %rdi, %rdi
je 0x2878a0
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x2878a0
movq (%r14), %rax
movq 0x8(%r14), %rcx
movq 0x30(%rax), %r12
movq 0x30(%rcx), %r13
movq 0x10(%r14), %rsi
addq $0x30, %rsi
leaq 0x8(%rsp), %rdi
callq 0x1182f0
movq 0x8(%rbx), %rdi
movq %r15, %rsi
callq 0x1ad9c8
movq 0x8(%rbx), %rbx
leaq 0x70(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1182f0
leaq 0x70(%rsp), %rcx
movq %rbx, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0x287d84
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
jmp 0x28798c
movq (%r14), %rdi
testq %rdi, %rdi
je 0x2875da
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x2875da
movq (%r12), %rdi
testq %rdi, %rdi
je 0x2875da
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x2875da
movq (%r15), %rdi
testq %rdi, %rdi
je 0x2875da
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
jne 0x2875da
movq (%r14), %rsi
addq $0x30, %rsi
leaq 0x8(%rsp), %rdi
callq 0x1182f0
movq 0x8(%r14), %rax
movq 0x10(%r14), %rcx
movq 0x30(%rax), %r15
movq 0x30(%rcx), %r12
movq 0x8(%rbx), %rdi
movq %r14, %rsi
callq 0x1ad9c8
movq 0x8(%rbx), %rbx
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1182f0
leaq 0x50(%rsp), %rsi
movq %rbx, %rdi
movq %r15, %rdx
movq %r12, %rcx
callq 0x287e10
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
jmp 0x28798c
movsd 0x46869(%rip), %xmm0    # 0x2ce1c0
movsd %xmm0, 0x48(%rsp)
movq 0x8(%rbx), %rdi
movq %r14, %rsi
callq 0x28739d
movq 0x8(%rbx), %rdi
leaq 0x48(%rsp), %rsi
callq 0x1ae9f6
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x2875dc
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
jmp 0x287a09
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
jmp 0x287a09
jmp 0x2879ea
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
jmp 0x287a09
jmp 0x2879ea
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x118648
jmp 0x2879da
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
jmp 0x2879ff
jmp 0x2879ea
jmp 0x2879ea
jmp 0x2879ef
movq %rax, %rbx
jmp 0x287a0e
movq %rax, %rbx
jmp 0x287a04
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
movq %rbx, %rdi
callq 0x118360