// File: cloudinary[P]fuif/encoding/../maniac/compound_enc.h
// Function: MetaPropertySymbolCoder<SimpleBitChance, RacOutput24<BlobIO>>::write_subtree(int, std::vector<std::pair<int, int>, std::allocator<std::pair<int, int>>>&, Tree const&)
void MetaPropertySymbolCoder<BitChance,RAC>::write_subtree(int pos, Ranges &subrange, const Tree &tree) {
        const PropertyDecisionNode &n = tree[pos];
        int p = n.property;
        coder[0].write_int2(0,nb_properties,p+1);
        if (p != -1) {
//            coder[1].write_int2(CONTEXT_TREE_MIN_COUNT, CONTEXT_TREE_MAX_COUNT, n.count);
//            printf("From properties 0..%i, split node at PROPERTY %i\n",nb_properties-1,p);
            int oldmin = subrange[p].first;
            int oldmax = subrange[p].second;
            assert(oldmin < oldmax);
            coder[2].write_int2(oldmin, oldmax-1, n.splitval);
//            e_printf( "Pos %i: prop %i splitval %i in [%i..%i]\n", pos, n.property, n.splitval, oldmin, oldmax-1);
            // > splitval
            subrange[p].first = n.splitval+1;
            write_subtree(n.childID, subrange, tree);

            // <= splitval
            subrange[p].first = oldmin;
            subrange[p].second = n.splitval;
            write_subtree(n.childID+1, subrange, tree);

            subrange[p].second = oldmax;
        }
    }

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movl %esi, 0x4c(%rsp)
movq %rdx, 0x40(%rsp)
movq %rcx, 0x38(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x38(%rsp), %rdi
movslq 0x4c(%rsp), %rsi
callq 0x34840
movq 0x18(%rsp), %rdi
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movswl (%rax), %eax
movl %eax, 0x2c(%rsp)
xorl %eax, %eax
movl %eax, %esi
callq 0x34860
movq %rax, %rdi
movq 0x18(%rsp), %rax
movl 0x30(%rax), %edx
movl 0x2c(%rsp), %ecx
addl $0x1, %ecx
xorl %esi, %esi
callq 0x34880
cmpl $-0x1, 0x2c(%rsp)
je 0x34836
movq 0x40(%rsp), %rdi
movslq 0x2c(%rsp), %rsi
callq 0x13420
movl (%rax), %eax
movl %eax, 0x28(%rsp)
movq 0x40(%rsp), %rdi
movslq 0x2c(%rsp), %rsi
callq 0x13420
movq 0x18(%rsp), %rdi
movl 0x4(%rax), %eax
movl %eax, 0x24(%rsp)
movl $0x2, %esi
callq 0x34860
movq %rax, %rdi
movl 0x28(%rsp), %esi
movl 0x24(%rsp), %edx
subl $0x1, %edx
movq 0x30(%rsp), %rax
movl 0x4(%rax), %ecx
callq 0x34880
movq 0x30(%rsp), %rax
movl 0x4(%rax), %eax
addl $0x1, %eax
movl %eax, 0x8(%rsp)
movq 0x40(%rsp), %rdi
movslq 0x2c(%rsp), %rsi
callq 0x13420
movl 0x8(%rsp), %ecx
movq 0x18(%rsp), %rdi
movl %ecx, (%rax)
movq 0x30(%rsp), %rax
movzwl 0x2(%rax), %esi
movq 0x40(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x346b0
movl 0x28(%rsp), %eax
movl %eax, 0xc(%rsp)
movq 0x40(%rsp), %rdi
movslq 0x2c(%rsp), %rsi
callq 0x13420
movl 0xc(%rsp), %ecx
movl %ecx, (%rax)
movq 0x30(%rsp), %rax
movl 0x4(%rax), %eax
movl %eax, 0x10(%rsp)
movq 0x40(%rsp), %rdi
movslq 0x2c(%rsp), %rsi
callq 0x13420
movl 0x10(%rsp), %ecx
movq 0x18(%rsp), %rdi
movl %ecx, 0x4(%rax)
movq 0x30(%rsp), %rax
movzwl 0x2(%rax), %esi
addl $0x1, %esi
movq 0x40(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x346b0
movl 0x24(%rsp), %eax
movl %eax, 0x14(%rsp)
movq 0x40(%rsp), %rdi
movslq 0x2c(%rsp), %rsi
callq 0x13420
movl 0x14(%rsp), %ecx
movl %ecx, 0x4(%rax)
addq $0x58, %rsp
retq
nopl (%rax,%rax)