// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/third_party/jsoncpp/json_reader.cpp
// Function: Json::Reader::decodeNumber(Json::Reader::Token&)
bool 
Reader::decodeNumber( Token &token )
{
   bool isDouble = false;
   for ( Location inspect = token.start_; inspect != token.end_; ++inspect )
   {
      isDouble = isDouble  
                 ||  in( *inspect, '.', 'e', 'E', '+' )  
                 ||  ( *inspect == '-'  &&  inspect != token.start_ );
   }
   if ( isDouble )
      return decodeDouble( token );
   // Attempts to parse the number as an integer. If the number is
   // larger than the maximum supported value of an integer then
   // we decode the number as a double.
   Location current = token.start_;
   bool isNegative = *current == '-';
   if ( isNegative )
      ++current;
   Value::UInt maxIntegerValue = isNegative ? Value::UInt(-Value::minInt) 
                                            : Value::maxUInt;
   Value::UInt threshold = maxIntegerValue / 10;
   Value::UInt lastDigitThreshold = maxIntegerValue % 10;
   assert( lastDigitThreshold >=0  &&  lastDigitThreshold <= 9 );
   Value::UInt value = 0;
   while ( current < token.end_ )
   {
      Char c = *current++;
      if ( c < '0'  ||  c > '9' )
         return addError( "'" + std::string( token.start_, token.end_ ) + "' is not a number.", token );
      Value::UInt digit(c - '0');
      if ( value >= threshold )
      {
         // If the current digit is not the last one, or if it is
         // greater than the last digit of the maximum integer value,
         // the parse the number as a double.
         if ( current != token.end_  ||  digit > lastDigitThreshold )
         {
            return decodeDouble( token );
         }
      }
      value = value * 10 + digit;
   }
   if ( isNegative )
      currentValue() = -Value::Int( value );
   else if ( value <= Value::UInt(Value::maxInt) )
      currentValue() = Value::Int( value );
   else
      currentValue() = value;
   return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movq %rsi, %r14
movq %rdi, %rbp
movq 0x8(%rsi), %rbx
movq 0x10(%rsi), %rax
cmpq %rax, %rbx
je 0x67da0
xorl %ecx, %ecx
movabsq $0x400000004000009, %rdx # imm = 0x400000004000009
xorl %esi, %esi
movl %esi, %edi
movb $0x1, %sil
testb $0x1, %dil
jne 0x67d7c
movzbl (%rbx,%rcx), %edi
addl $-0x2b, %edi
cmpl $0x3a, %edi
ja 0x67d9c
btq %rdi, %rdx
jae 0x67d8d
leaq (%rbx,%rcx), %rdi
incq %rdi
incq %rcx
cmpq %rax, %rdi
jne 0x67d5f
jmp 0x67da2
cmpq $0x2, %rdi
jne 0x67d9c
testq %rcx, %rcx
setne %sil
jmp 0x67d7c
xorl %esi, %esi
jmp 0x67d7c
xorl %esi, %esi
testb %sil, %sil
je 0x67dc0
movq %rbp, %rdi
movq %r14, %rsi
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x68c78
movq %rbp, 0x8(%rsp)
movb (%rbx), %cl
xorl %r15d, %r15d
xorl %eax, %eax
cmpb $0x2d, %cl
sete %al
movb %cl, 0x7(%rsp)
je 0x67de4
leaq 0xf7f9(%rip), %rcx      # 0x775d8
movq (%rcx), %rsi
jmp 0x67df0
leaq 0xf7dd(%rip), %rcx      # 0x775c8
xorl %esi, %esi
subq (%rcx), %rsi
addq %rax, %rbx
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
movq %rsi, %rax
mulq %rcx
movq %rdx, %r13
shrq $0x3, %r13
leaq (,%r13,2), %rax
leaq (%rax,%rax,4), %rax
subq %rax, %rsi
movq %rsi, 0x50(%rsp)
leaq 0x30(%rsp), %rbp
leaq 0x10(%rsp), %r12
movq 0x10(%r14), %rdx
cmpq %rdx, %rbx
jae 0x67f3a
movzbl (%rbx), %ecx
incq %rbx
leal -0x3a(%rcx), %esi
cmpb $-0xb, %sil
ja 0x67ef9
movq 0x8(%r14), %rsi
leaq 0x40(%rsp), %rax
movq %rax, 0x30(%rsp)
movq %rbp, %rdi
callq 0x2f1b2
leaq 0x58(%rsp), %rdi
leaq 0xc536(%rip), %rsi      # 0x743a0
movq %rbp, %rdx
callq 0x40c12
leaq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0x2f122
movq %r12, %rdi
leaq 0xf47a(%rip), %rsi      # 0x77315
callq 0x27c10
movq 0x8(%rsp), %rdi
movq %r12, %rsi
movq %r14, %rdx
xorl %ecx, %ecx
callq 0x677a2
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x67ec6
callq 0x27560
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x67eda
callq 0x27560
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x67eee
callq 0x27560
xorl %ecx, %ecx
xorl %eax, %eax
leaq 0x30(%rsp), %rbp
jmp 0x67f2d
andl $0xf, %ecx
cmpq %r13, %r15
jb 0x67f0d
cmpq %rdx, %rbx
jne 0x67f19
cmpq %rcx, 0x50(%rsp)
jb 0x67f19
leaq (%r15,%r15,4), %rdx
leaq (%rcx,%rdx,2), %r15
movb $0x1, %cl
jmp 0x67f2d
movq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x68c78
leaq 0x30(%rsp), %rbp
xorl %ecx, %ecx
testb %cl, %cl
jne 0x67e28
jmp 0x67ffd
cmpb $0x2d, 0x7(%rsp)
jne 0x67f7d
negq %r15
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
callq 0x6c00e
movq 0x8(%rsp), %rbp
movq 0x30(%rbp), %rax
cmpq 0x38(%rbp), %rax
jne 0x67f6d
movq 0x48(%rbp), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movq -0x8(%rax), %rdi
leaq 0x10(%rsp), %rsi
callq 0x6c3fa
jmp 0x67ff1
leaq 0xf64c(%rip), %rax      # 0x775d0
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
cmpq (%rax), %r15
jbe 0x67fc2
callq 0x6c01e
movq 0x8(%rsp), %rbp
movq 0x30(%rbp), %rax
cmpq 0x38(%rbp), %rax
jne 0x67fb2
movq 0x48(%rbp), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movq -0x8(%rax), %rdi
leaq 0x10(%rsp), %rsi
callq 0x6c3fa
jmp 0x67ff1
callq 0x6c00e
movq 0x8(%rsp), %rbp
movq 0x30(%rbp), %rax
cmpq 0x38(%rbp), %rax
jne 0x67fe3
movq 0x48(%rbp), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movq -0x8(%rax), %rdi
leaq 0x10(%rsp), %rsi
callq 0x6c3fa
leaq 0x10(%rsp), %rdi
callq 0x6c31c
movb $0x1, %al
andb $0x1, %al
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x6c31c
jmp 0x68093
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x6c31c
jmp 0x68093
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x6c31c
jmp 0x68093
movq %rax, %rdi
callq 0x2e1ed
movq %rax, %rbx
jmp 0x6807f
jmp 0x68054
movq %rax, %rbx
jmp 0x68093
movq %rax, %rbx
jmp 0x6806b
movq %rax, %rbx
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x6806b
callq 0x27560
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x6807f
callq 0x27560
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x68093
callq 0x27560
movq %rbx, %rdi
callq 0x27b20
nop