// File: demon386[P]git-store/./boost/token_functions.hpp
// Function: bool boost::char_separator<char, std::char_traits<char>>::operator()<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
bool operator()(InputIterator& next, InputIterator end, Token& tok)
    {
      typedef tokenizer_detail::assign_or_plus_equal<
        BOOST_DEDUCED_TYPENAME tokenizer_detail::get_iterator_category<
          InputIterator
        >::iterator_category
      > assigner;

      assigner::clear(tok);

      // skip past all dropped_delims
      if (m_empty_tokens == drop_empty_tokens)
        for (; next != end  && is_dropped(*next); ++next)
          { }

      InputIterator start(next);

      if (m_empty_tokens == drop_empty_tokens) {

        if (next == end)
          return false;


        // if we are on a kept_delims move past it and stop
        if (is_kept(*next)) {
          assigner::plus_equal(tok,*next);
          ++next;
        } else
          // append all the non delim characters
          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
            assigner::plus_equal(tok,*next);
      }
      else { // m_empty_tokens == keep_empty_tokens

        // Handle empty token at the end
        if (next == end)
        {
          if (m_output_done == false)
          {
            m_output_done = true;
            assigner::assign(start,next,tok);
            return true;
          }
          else
            return false;
        }

        if (is_kept(*next)) {
          if (m_output_done == false)
            m_output_done = true;
          else {
            assigner::plus_equal(tok,*next);
            ++next;
            m_output_done = false;
          }
        }
        else if (m_output_done == false && is_dropped(*next)) {
          m_output_done = true;
        }
        else {
          if (is_dropped(*next))
            start=++next;
          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
            assigner::plus_equal(tok,*next);
          m_output_done = true;
        }
      }
      assigner::assign(start,next,tok);
      return true;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdx, -0x10(%rbp)
movq %rdi, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rdi
callq 0x2a3b0
movq -0x58(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x2a083
jmp 0x2a038
movq -0x20(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x29fc0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x59(%rbp)
jne 0x2a053
jmp 0x2a06b
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a3c0
movb %al, -0x59(%rbp)
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x2a074
jmp 0x2a081
jmp 0x2a076
movq -0x20(%rbp), %rdi
callq 0x2a460
jmp 0x2a038
jmp 0x2a083
movq -0x58(%rbp), %rax
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, -0x30(%rbp)
cmpl $0x0, 0x44(%rax)
jne 0x2a191
movq -0x20(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x2a480
testb $0x1, %al
jne 0x2a0af
jmp 0x2a0b8
movb $0x0, -0x1(%rbp)
jmp 0x2a392
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a4c0
testb $0x1, %al
jne 0x2a0d3
jmp 0x2a0fe
movq -0x28(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x2a540
movq -0x20(%rbp), %rdi
callq 0x2a460
jmp 0x2a18c
jmp 0x2a100
movq -0x20(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x29fc0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x69(%rbp)
jne 0x2a11b
jmp 0x2a156
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a3c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x69(%rbp)
jne 0x2a156
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a4c0
xorb $-0x1, %al
movb %al, -0x69(%rbp)
movb -0x69(%rbp), %al
testb $0x1, %al
jne 0x2a15f
jmp 0x2a18a
movq -0x28(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x78(%rbp), %rdi
movq %rax, %rsi
callq 0x2a540
movq -0x20(%rbp), %rdi
callq 0x2a460
jmp 0x2a100
jmp 0x2a18c
jmp 0x2a36a
movq -0x20(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x2a480
testb $0x1, %al
jne 0x2a1a4
jmp 0x2a1f3
movq -0x58(%rbp), %rax
movb 0x48(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2a1ea
movq -0x58(%rbp), %rax
movb $0x1, 0x48(%rax)
movq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rdx
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x2a550
movb $0x1, -0x1(%rbp)
jmp 0x2a392
movb $0x0, -0x1(%rbp)
jmp 0x2a392
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a4c0
testb $0x1, %al
jne 0x2a20e
jmp 0x2a25c
movq -0x58(%rbp), %rax
movb 0x48(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2a229
movq -0x58(%rbp), %rax
movb $0x1, 0x48(%rax)
jmp 0x2a257
movq -0x28(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x80(%rbp), %rdi
movq %rax, %rsi
callq 0x2a540
movq -0x20(%rbp), %rdi
callq 0x2a460
movq -0x58(%rbp), %rax
movb $0x0, 0x48(%rax)
jmp 0x2a368
movq -0x58(%rbp), %rax
movb 0x48(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2a295
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a3c0
testb $0x1, %al
jne 0x2a288
jmp 0x2a295
movq -0x58(%rbp), %rax
movb $0x1, 0x48(%rax)
jmp 0x2a366
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a3c0
testb $0x1, %al
jne 0x2a2b0
jmp 0x2a2c0
movq -0x20(%rbp), %rdi
callq 0x2a460
movq (%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x2a2c2
movq -0x20(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x29fc0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x81(%rbp)
jne 0x2a2e0
jmp 0x2a321
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a3c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x81(%rbp)
jne 0x2a321
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x58(%rbp), %rdi
movsbl (%rax), %esi
callq 0x2a4c0
xorb $-0x1, %al
movb %al, -0x81(%rbp)
movb -0x81(%rbp), %al
testb $0x1, %al
jne 0x2a32d
jmp 0x2a35e
movq -0x28(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x20(%rbp), %rdi
callq 0x2a440
movq -0x90(%rbp), %rdi
movq %rax, %rsi
callq 0x2a540
movq -0x20(%rbp), %rdi
callq 0x2a460
jmp 0x2a2c2
movq -0x58(%rbp), %rax
movb $0x1, 0x48(%rax)
jmp 0x2a368
jmp 0x2a36a
movq -0x30(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rdx
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x2a550
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x90, %rsp
popq %rbp
retq