// File: ghallak[P]regex-to-dfa/src/./RegexTree.h
// Function: RegexTree::ConcatNode::ConcatNode(std::unique_ptr<RegexTree::Node, std::default_delete<RegexTree::Node>>, std::unique_ptr<RegexTree::Node, std::default_delete<RegexTree::Node>>)
explicit ConcatNode(std::unique_ptr<Node> l, std::unique_ptr<Node> r)
        : left(std::move(l)), right(std::move(r)) {
      firstpos.insert(left->firstpos.cbegin(), left->firstpos.cend());
      if (left->nullable) {
        firstpos.insert(right->firstpos.cbegin(), right->firstpos.cend());
      }

      lastpos.insert(right->lastpos.cbegin(), right->lastpos.cend());
      if (right->nullable) {
        lastpos.insert(left->lastpos.cbegin(), left->lastpos.cend());
      }

      nullable = left->nullable && right->nullable;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rsi, -0x98(%rbp)
movq %rdx, -0x90(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x80(%rbp)
callq 0xe390
movq -0x98(%rbp), %rsi
movq -0x80(%rbp), %rdi
leaq 0xe4cc(%rip), %rax      # 0x1ed80
movq %rax, (%rdi)
subq $-0x80, %rdi
movq %rdi, -0x78(%rbp)
callq 0xf4a0
movq -0x90(%rbp), %rsi
movq -0x80(%rbp), %rdi
addq $0x88, %rdi
movq %rdi, -0x88(%rbp)
callq 0xf4a0
movq -0x80(%rbp), %rax
movq -0x78(%rbp), %rdi
addq $0x8, %rax
movq %rax, -0x70(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x8, %rdi
callq 0x4be0
movq -0x78(%rbp), %rdi
movq %rax, -0x20(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x8, %rdi
callq 0x4c10
movq -0x70(%rbp), %rdi
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x4f30
jmp 0x10933
movq -0x80(%rbp), %rdi
addq $0x80, %rdi
callq 0x5c90
testb $0x1, 0x78(%rax)
je 0x109e5
movq -0x80(%rbp), %rdi
movq %rdi, %rax
addq $0x8, %rax
movq %rax, -0xa0(%rbp)
addq $0x88, %rdi
movq %rdi, -0xa8(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x8, %rdi
callq 0x4be0
movq -0xa8(%rbp), %rdi
movq %rax, -0x40(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x8, %rdi
callq 0x4c10
movq -0xa0(%rbp), %rdi
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rsi
movq -0x48(%rbp), %rdx
callq 0x4f30
jmp 0x109b4
jmp 0x109e5
movq -0x88(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
callq 0xb880
movq -0x78(%rbp), %rdi
callq 0xb880
movq -0x80(%rbp), %rdi
callq 0xc1a0
jmp 0x10b1b
movq -0x80(%rbp), %rdi
movq %rdi, %rax
addq $0x40, %rax
movq %rax, -0xb0(%rbp)
addq $0x88, %rdi
movq %rdi, -0xb8(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x40, %rdi
callq 0x4be0
movq -0xb8(%rbp), %rdi
movq %rax, -0x50(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x40, %rdi
callq 0x4c10
movq -0xb0(%rbp), %rdi
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
callq 0x4f30
jmp 0x10a4c
movq -0x80(%rbp), %rdi
addq $0x88, %rdi
callq 0x5c90
testb $0x1, 0x78(%rax)
je 0x10ac8
movq -0x80(%rbp), %rdi
movq %rdi, %rax
addq $0x40, %rax
movq %rax, -0xc0(%rbp)
subq $-0x80, %rdi
movq %rdi, -0xc8(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x40, %rdi
callq 0x4be0
movq -0xc8(%rbp), %rdi
movq %rax, -0x60(%rbp)
callq 0x5c90
movq %rax, %rdi
addq $0x40, %rdi
callq 0x4c10
movq -0xc0(%rbp), %rdi
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rsi
movq -0x68(%rbp), %rdx
callq 0x4f30
jmp 0x10ac6
jmp 0x10ac8
movq -0x80(%rbp), %rdi
addq $0x80, %rdi
callq 0x5c90
movq %rax, %rcx
xorl %eax, %eax
testb $0x1, 0x78(%rcx)
movb %al, -0xc9(%rbp)
je 0x10b02
movq -0x80(%rbp), %rdi
addq $0x88, %rdi
callq 0x5c90
movb 0x78(%rax), %al
movb %al, -0xc9(%rbp)
movq -0x80(%rbp), %rax
movb -0xc9(%rbp), %cl
andb $0x1, %cl
movb %cl, 0x78(%rax)
addq $0xd0, %rsp
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x2240
nopw %cs:(%rax,%rax)
nop