// File: /workspace/github_cpp_makefile_star2_O3/tanakh[P]icfpc2015/./picojson.h
// Function: void picojson::value::_serialize<std::ostream_iterator<char, char, std::char_traits<char>>>(std::ostream_iterator<char, char, std::char_traits<char>>, int) const
void value::_serialize(Iter oi, int indent) const {
    switch (type_) {
    case string_type:
      serialize_str(*u_.string_, oi);
      break;
    case array_type: {
      *oi++ = '[';
      if (indent != -1) {
        ++indent;
      }
      for (array::const_iterator i = u_.array_->begin();
           i != u_.array_->end();
           ++i) {
	if (i != u_.array_->begin()) {
	  *oi++ = ',';
	}
        if (indent != -1) {
          _indent(oi, indent);
        }
	i->_serialize(oi, indent);
      }
      if (indent != -1) {
        --indent;
        if (! u_.array_->empty()) {
          _indent(oi, indent);
        }
      }
      *oi++ = ']';
      break;
    }
    case object_type: {
      *oi++ = '{';
      if (indent != -1) {
        ++indent;
      }
      for (object::const_iterator i = u_.object_->begin();
	   i != u_.object_->end();
	   ++i) {
	if (i != u_.object_->begin()) {
	  *oi++ = ',';
	}
        if (indent != -1) {
          _indent(oi, indent);
        }
	serialize_str(i->first, oi);
	*oi++ = ':';
        if (indent != -1) {
          *oi++ = ' ';
        }
        i->second._serialize(oi, indent);
      }
      if (indent != -1) {
        --indent;
        if (! u_.object_->empty()) {
          _indent(oi, indent);
        }
      }
      *oi++ = '}';
      break;
    }
    default:
      copy(to_str(), oi);
      break;
    }
    if (indent == 0) {
      *oi++ = '\n';
    }
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r14
movl (%rdi), %eax
cmpl $0x5, %eax
je 0xe4c6
cmpl $0x4, %eax
je 0xe411
cmpl $0x3, %eax
jne 0xe5f5
movq 0x8(%r14), %rdi
movups (%rbx), %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
callq 0xe68f
jmp 0xe64c
movq %rsp, %rsi
movb $0x5b, (%rsi)
movq %rbx, %rdi
callq 0xeacc
movl %r13d, %ebp
incl %ebp
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmovel %eax, %ebp
movq 0x8(%r14), %rax
movq (%rax), %r15
cmpq 0x8(%rax), %r15
je 0xe491
leaq 0x50(%rsp), %r12
movq %rsp, %r13
cmpq (%rax), %r15
je 0xe455
movb $0x2c, (%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0xeacc
cmpl $-0x1, %ebp
je 0xe46e
movups (%rbx), %xmm0
movaps %xmm0, 0x60(%rsp)
leaq 0x60(%rsp), %rdi
movl %ebp, %esi
callq 0xeb1e
movups (%rbx), %xmm0
movaps %xmm0, 0x50(%rsp)
movq %r15, %rdi
movq %r12, %rsi
movl %ebp, %edx
callq 0xe3c2
addq $0x10, %r15
movq 0x8(%r14), %rax
cmpq 0x8(%rax), %r15
jne 0xe441
cmpl $-0x1, %ebp
movl $0xffffffff, %r13d      # imm = 0xFFFFFFFF
je 0xe4bb
decl %ebp
cmpq %r15, (%rax)
je 0xe4b8
movups (%rbx), %xmm0
leaq 0x90(%rsp), %rdi
movaps %xmm0, (%rdi)
movl %ebp, %esi
callq 0xeb1e
movl %ebp, %r13d
movq %rsp, %rsi
movb $0x5d, (%rsi)
jmp 0xe5eb
movq %rsp, %rsi
movb $0x7b, (%rsi)
movq %rbx, %rdi
callq 0xeacc
movl %r13d, %r15d
incl %r15d
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmovel %eax, %r15d
movq 0x8(%r14), %rax
movq 0x18(%rax), %r12
leaq 0x8(%rax), %rcx
cmpq %rcx, %r12
je 0xe5b6
movq %rsp, %rbp
leaq 0x30(%rsp), %r13
cmpq 0x18(%rax), %r12
je 0xe515
movb $0x2c, (%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xeacc
cmpl $-0x1, %r15d
je 0xe55c
movups (%rbx), %xmm0
movaps %xmm0, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
movl %r15d, %esi
callq 0xeb1e
leaq 0x20(%r12), %rdi
movups (%rbx), %xmm0
movaps %xmm0, 0x20(%rsp)
leaq 0x20(%rsp), %rsi
callq 0xe68f
movb $0x3a, (%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xeacc
movb $0x20, (%rsp)
jmp 0xe577
leaq 0x20(%r12), %rdi
movups (%rbx), %xmm0
movaps %xmm0, 0x20(%rsp)
leaq 0x20(%rsp), %rsi
callq 0xe68f
movb $0x3a, (%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xeacc
leaq 0x40(%r12), %rdi
movups (%rbx), %xmm0
movaps %xmm0, 0x30(%rsp)
movq %r13, %rsi
movl %r15d, %edx
callq 0xe3c2
movq %r12, %rdi
callq 0x3360
movq %rax, %r12
movq 0x8(%r14), %rax
leaq 0x8(%rax), %rcx
cmpq %rcx, %r12
jne 0xe500
cmpl $-0x1, %r15d
movl $0xffffffff, %r13d      # imm = 0xFFFFFFFF
je 0xe5e5
decl %r15d
cmpq $0x0, 0x28(%rax)
je 0xe5e2
movups (%rbx), %xmm0
leaq 0x80(%rsp), %rdi
movaps %xmm0, (%rdi)
movl %r15d, %esi
callq 0xeb1e
movl %r15d, %r13d
movq %rsp, %rsi
movb $0x7d, (%rsi)
movq %rbx, %rdi
callq 0xeacc
jmp 0xe64c
movq %rsp, %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0xeb70
movq (%r15), %r14
movq 0x8(%r15), %r12
movups (%rbx), %xmm0
movaps %xmm0, 0x70(%rsp)
testq %r12, %r12
jle 0xe63a
incq %r12
leaq 0x70(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0xeacc
incq %r14
decq %r12
cmpq $0x1, %r12
ja 0xe61f
movq (%rsp), %r14
leaq 0x10(%rsp), %rax
cmpq %rax, %r14
je 0xe64c
movq %r14, %rdi
callq 0x32f0
testl %r13d, %r13d
jne 0xe65f
movq %rsp, %rsi
movb $0xa, (%rsi)
movq %rbx, %rdi
callq 0xeacc
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xe687
callq 0x32f0
movq %rbx, %rdi
callq 0x34a0