// File: /workspace/github_cpp_makefile_star2_O2/tap3edit[P]tap3xml/Asn.cpp
// Function: Asn::_compile_tree(tagtype_s*, treenode*)
long Asn::_compile_tree(tagtype_s *tagtype, treenode *tree)
{

    vector<tagelem_s *>*            tagtype_ch;
    vector<treenode *>::iterator    vii;
    vector<tagelem_s *>::iterator   vjj;
    long                            tot_size=0;
    extern map<string, int>         simpletypes_map;
    extern map<int, enc_dec_funcs>  simpletypes;
    AsnItem*                        asnitem;
    bool                            found=false;
    tagtype_s*                      tagtype_pa;
    int                             encoded_size;

    asnitem=new AsnItem();


    /* 1. CHOICE */

    if (tagtype->action==choice)
    {
        if (tree->tag_d != -2)
        {
            if (tree->children!=NULL)
            {

                /* 1.1. We got a fresh CHOICE */

                for (vii=tree->children->begin();vii!=tree->children->end();vii++)
                {
                    tagtype_ch=tagtype->children;

                    if (tagtype_ch!=NULL)
                    {
                        found=false;
                        for (vjj=tagtype_ch->begin();vjj!=tagtype_ch->end();vjj++)
                        {

                            if ( (*vii)->tagname == (*vjj)->elem_name )
                            {
                                (*vii)->tag_d=(*vjj)->elem_type_p->tagid;
                                (*vii)->pc=1;
                                tot_size+=_compile_tree((*vjj)->elem_type_p,(*vii));
                                found=true;
                                break;
                            }
                            else
                            {
                                if ( (*vjj)->elem_type_p->action == choice && !(*vjj)->elem_type_p->tagid)
                                {
                                    /* Could be CHOICE */

                                    (*vii)->tag_d=-2;
                                    tot_size+=_compile_tree((*vjj)->elem_type_p,(*vii));

                                    if ((*vii)->tag_d != -2)
                                        found=true;
                                    else
                                        (*vii)->tag_d=0;
                                }
                            }
                        }
                        if (!found)
                        {
                            cerr << "Error. " << (*vii)->tagname << " not found in specification";
                            err_trace(__FILE__, __LINE__);
                        }
                    }
                    else
                    {
                        cerr << "Error. " << tagtype->type_name << "  without children in tree specification";
                        err_trace(__FILE__, __LINE__);
                    }
                }
            }
            else 
            {
                cerr << "Error. \"" << tree->tagname << "\" (CHOICE) has no children";
                err_trace(__FILE__, __LINE__);
            }
        }
        else
        {
            /* 1.2. We are still analysing previous CHOICE */

            tagtype_ch=tagtype->children;

            if (tagtype_ch!=NULL)
            {
                found=false;
                for (vjj=tagtype_ch->begin();vjj!=tagtype_ch->end();vjj++)
                {

                    if ( tree->tagname == (*vjj)->elem_name )
                    {
                        tree->tag_d=(*vjj)->elem_type_p->tagid;
                        tree->pc=1;
                        tot_size+=_compile_tree((*vjj)->elem_type_p,tree);
                        found=true;
                        break;
                    }
                    else
                    {
                        /* Could be CHOICE */

                        if ( (*vjj)->elem_type_p->action == choice && !(*vjj)->elem_type_p->tagid)
                        {
                            tree->tag_d=-2;
                            tot_size+=_compile_tree((*vjj)->elem_type_p,tree);

                            if (tree->tag_d != -2)
                                found=true;
                        }
                    }
                }

            }
            else
            {
                cerr << "Error. " << tagtype->type_name << "  without children in tree specification";
                err_trace(__FILE__, __LINE__);
            }

            delete asnitem; 
            asnitem = NULL;
            return tot_size;
        }
    }


    /* SEQUENCE */

    if (tagtype->action==sequence)
    {

        tagtype_ch=tagtype->children;
        if (tagtype_ch==NULL)
        {
            cerr << "Error. \"" << tagtype->type_name << "\"  without children in tree specification";
            err_trace(__FILE__, __LINE__);
        }

        if (tree->children!=NULL)
        {
            vjj=tagtype_ch->begin();

            for (vii=tree->children->begin();vii!=tree->children->end();vii++)
            {
                found=false;
                while (vjj!=tagtype_ch->end() && !found)
                {

                    if ( (*vii)->tagname == (*vjj)->elem_name )
                    {
                        (*vii)->tag_d=(*vjj)->elem_type_p->tagid;
                        (*vii)->pc=1;
                        tot_size+=_compile_tree((*vjj)->elem_type_p,(*vii));
                        found=true;
                    }
                    else
                    {
                        if ( (*vjj)->elem_type_p == NULL )
                        {
                            cerr << "Error. Specification incomplete. Type not found for \"" << (*vjj)->elem_name << "\"";
                            err_trace(__FILE__, __LINE__);
                        }

                        if ( (*vjj)->elem_type_p->action == choice && !(*vjj)->elem_type_p->tagid)
                        {
                            (*vii)->tag_d=-2;
                            tot_size+=_compile_tree((*vjj)->elem_type_p,(*vii));

                            if ( (*vii)->tag_d!=-2 )
                                found=true;
                            else
                                (*vii)->tag_d=0;
                                
                        } 

                        if ( !found && !(*vjj)->optional )
                        {
                            cerr << "Error. Expected in tree: " << (*vjj)->elem_name << " found: " << (*vii)->tagname;
                            err_trace(__FILE__, __LINE__);
                        }
                    }
                    vjj++;
                }
                if (!found)
                {
                    cerr << "Error. " << (*vii)->tagname << " not found in specification";
                    err_trace(__FILE__, __LINE__);
                }
            }
            for (;vjj!=tagtype_ch->end();vjj++)
            {
                if ( (*vjj)->optional == false )
                {
                    cerr << "Error. Expected in tree: " << (*vjj)->elem_name << " found: " << (*vii)->tagname;
                    err_trace(__FILE__, __LINE__);
                }
            }
        }
        else
        {
            for (vjj=tagtype_ch->begin();vjj!=tagtype_ch->end();vjj++)
            {
                if ((*vjj)->elem_type_p==NULL)
                {
                    cerr << "Error. Type for \"" << (*vjj)->elem_name << "\" not found in the specification";
                    err_trace(__FILE__, __LINE__);
                }

                if (!(*vjj)->optional)
                {
                    cerr << "Error. Expected \"" << (*vjj)->elem_name << "\" under \"" << tree->tagname << "\"";
                    err_trace(__FILE__, __LINE__);
                }
            }


            /* Tag is composed but empty */

            asnitem->tree(tree);

            tree->pc=1;
            tree->size_d=0;

            encoded_size=asnitem->encode(0).size();
            delete asnitem; 
            asnitem = NULL;
            return encoded_size;
        }
    }


    /* SEQUENCE OF */

    if (tagtype->action==sequenceof)
    {
        if (tree->children!=NULL)
        {
            for (vii=tree->children->begin();vii!=tree->children->end();vii++)
            {
                tagtype_ch=tagtype->children;

                if (tagtype_ch==NULL || tagtype_ch->size()>1)
                {
                    cerr << "Error. " << tagtype->type_name << " (SEQUENCE OF) without or with many children in specification";
                    err_trace(__FILE__, __LINE__);
                }

                tagtype_pa=(*tagtype->children)[0]->elem_type_p;

                if (tagtype_pa->action==choice && !tagtype_pa->tagid)
                    tagtype_ch=tagtype_pa->children;

                found=false;
                if (tagtype_ch!=NULL)
                {
                    for (vjj=tagtype_ch->begin();vjj!=tagtype_ch->end();vjj++)
                    {

                        if ( (*vii)->tagname == (*vjj)->elem_name )
                        {
                            (*vii)->tag_d=(*vjj)->elem_type_p->tagid;
                            (*vii)->pc=1;
                            tot_size+=_compile_tree((*vjj)->elem_type_p,(*vii));
                            found=true;
                            break;
                        }
                    }
                }
                else
                {
                    if (tagtype_pa->action==simpletype)
                    {
                        if ( (*vii)->tagname == (*tagtype->children)[0]->elem_name )
                        {
                            (*vii)->tag_d=tagtype_pa->tagid;
                            (*vii)->pc=0;
                            tot_size+=_compile_tree(tagtype_pa,(*vii));
                            found=true;
                            break;
                        }
                    }
                    else
                    {
                        cerr << "Error. " << tagtype_pa->type_name << "  without children in tree specification";
                        err_trace(__FILE__, __LINE__);
                    }
                }
                if (!found)
                {
                    cerr     << "Error. " << tree->tagname <<"("<< tree->tag_d<<")->" 
                        << (*vii)->tagname << " not found in specification under " 
                        << tagtype->type_name << "(" << tagtype->tagid << ")";
                    if (tagtype_pa->action==choice && !tagtype_pa->tagid)
                        cerr     << "->" << tagtype_pa->type_name << "("<<tagtype_pa->tagid<<")";
                    err_trace(__FILE__, __LINE__);
                }
            }
        }
        else
        {
            /* Tag is composed but empty */

            asnitem->tree(tree);

            tree->pc=1;
            tree->size_d=0;

            encoded_size=asnitem->encode(0).size();
            delete asnitem; 
            asnitem = NULL;
            return encoded_size;
        }
    }


    /* SIMPLE TYPE */

    if (tagtype->action==simpletype)
    {
        if (tree->children==NULL)
        {
            asnitem->tree(tree);

            tree->pc=0;
            tree->type=simpletypes_map[tagtype->type_type];
            tree->size_d=(*simpletypes[tree->type].encode)(*tree->value).size();

            encoded_size=asnitem->encode(0).size();
            delete asnitem; 
            asnitem = NULL;
            return encoded_size;
        }
        else
        {
            cerr << "Error. \"" << tree->tagname << "\" expected to be a simple type but got children";
            err_trace(__FILE__, __LINE__);
        }
    }


    tree->size_d=tot_size;

    asnitem->tree(tree);
    encoded_size=asnitem->encode(0).size();
    delete asnitem; 
    asnitem = NULL;
    return tree->size_d+encoded_size;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, 0x38(%rsp)
pushq $0x48
popq %rdi
callq 0x42b0
movq %rax, %r12
movq %rax, %rdi
callq 0xfab0
movl 0x44(%r14), %eax
testl %eax, %eax
movq %rbx, 0x30(%rsp)
movq %r14, 0x40(%rsp)
movq %rbx, %rcx
je 0xdfb4
xorl %ebx, %ebx
jmp 0xe2c7
cmpl $-0x2, 0x24(%rcx)
movq %rcx, %r13
jne 0xe02a
movq %r14, %rbx
movq 0x50(%r14), %r14
testq %r14, %r14
je 0xe1f0
movq (%r14), %r15
xorl %ebx, %ebx
cmpq 0x8(%r14), %r15
je 0xec33
movq (%r15), %rsi
movq %rcx, %rdi
callq 0x6a30
movq (%r15), %rcx
movq 0x48(%rcx), %rsi
testb %al, %al
jne 0xea83
cmpl $0x0, 0x44(%rsi)
je 0xe001
movq %r13, %rcx
jmp 0xe024
cmpl $0x0, 0x40(%rsi)
movq %r13, %rcx
jne 0xe024
movl $0xfffffffe, 0x24(%rcx) # imm = 0xFFFFFFFE
movq 0x38(%rsp), %rdi
movq %r13, %rdx
callq 0xdf6c
movq %r13, %rcx
addq %rax, %rbx
addq $0x8, %r15
jmp 0xdfd2
movq 0x50(%rcx), %rax
testq %rax, %rax
je 0xe259
movq %r12, 0x48(%rsp)
movq (%rax), %r14
xorl %ebx, %ebx
leaq 0x10(%rsp), %rbp
cmpq 0x8(%rax), %r14
je 0xe1e1
movq 0x40(%rsp), %r15
movq 0x50(%r15), %r12
testq %r12, %r12
je 0xe0cf
movq (%r12), %r13
xorl %r15d, %r15d
cmpq 0x8(%r12), %r13
je 0xe138
movq (%r14), %rdi
movq (%r13), %rsi
callq 0x6a30
movq (%r13), %rcx
movq 0x48(%rcx), %rsi
testb %al, %al
jne 0xe1aa
cmpl $0x0, 0x44(%rsi)
jne 0xe098
cmpl $0x0, 0x40(%rsi)
je 0xe0a4
movq %rbx, %rax
addq $0x8, %r13
movq %rax, %rbx
jmp 0xe065
movq (%r14), %rdx
movl $0xfffffffe, 0x24(%rdx) # imm = 0xFFFFFFFE
movq 0x38(%rsp), %rdi
callq 0xdf6c
addq %rbx, %rax
movq (%r14), %rcx
cmpl $-0x2, 0x24(%rcx)
jne 0xe0ca
andl $0x0, 0x24(%rcx)
jmp 0xe09b
movb $0x1, %r15b
jmp 0xe09b
movq %rcx, %r12
movq 0xbf17(%rip), %rdi      # 0x19ff0
leaq 0x4d0a(%rip), %rsi      # 0x12dea
callq 0x4290
movq %rax, %rdi
movq %r15, %rsi
callq 0x4250
movq %rax, %rdi
leaq 0x4d39(%rip), %rsi      # 0x12e33
callq 0x4290
movq %rbp, %rdi
leaq 0x4aac(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x45a, 0xc(%rsp)       # imm = 0x45A
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq %rbp, %rdi
callq 0x4150
movq %r12, %rcx
jmp 0xe1d4
testb $0x1, %r15b
jne 0xe1cf
movq 0xbea7(%rip), %rdi      # 0x19ff0
leaq 0x4c9a(%rip), %rsi      # 0x12dea
callq 0x4290
movq (%r14), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x4c88(%rip), %rsi      # 0x12df2
callq 0x4290
movq %rbp, %rdi
leaq 0x4a3c(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movq 0x30(%rsp), %r15
movl $0x454, 0xc(%rsp)       # imm = 0x454
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq %rbp, %rdi
callq 0x4150
movq %r15, %rcx
jmp 0xe1d4
movl 0x40(%rsi), %eax
movq (%r14), %rcx
movl %eax, 0x24(%rcx)
orb $0x4, 0x20(%rcx)
movq (%r13), %rax
movq 0x48(%rax), %rsi
movq (%r14), %rdx
movq 0x38(%rsp), %rdi
callq 0xdf6c
addq %rax, %rbx
movq 0x30(%rsp), %rcx
addq $0x8, %r14
movq 0x50(%rcx), %rax
jmp 0xe046
movq 0x48(%rsp), %r12
movq 0x40(%rsp), %r14
jmp 0xe2c3
movq 0xbdf9(%rip), %rdi      # 0x19ff0
leaq 0x4bec(%rip), %rsi      # 0x12dea
callq 0x4290
movq %rax, %rdi
movq %rbx, %rsi
callq 0x4250
leaq 0x4c1e(%rip), %rsi      # 0x12e33
movq %rax, %rdi
callq 0x4290
leaq 0x4991(%rip), %rsi      # 0x12bb5
leaq 0x10(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x5caa
leaq 0xc(%rsp), %rsi
movl $0x48b, (%rsi)          # imm = 0x48B
leaq 0x10(%rsp), %rdi
callq 0xb17a
leaq 0x10(%rsp), %rdi
callq 0x4150
xorl %ebx, %ebx
jmp 0xec33
movq 0xbd90(%rip), %rdi      # 0x19ff0
leaq 0x4ba7(%rip), %rsi      # 0x12e0e
movq %rcx, %rbx
callq 0x4290
movq %rax, %rdi
movq %rbx, %rsi
callq 0x4250
leaq 0x4b96(%rip), %rsi      # 0x12e17
movq %rax, %rdi
callq 0x4290
leaq 0x4925(%rip), %rsi      # 0x12bb5
leaq 0x10(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x5caa
leaq 0xc(%rsp), %rsi
movl $0x461, (%rsi)          # imm = 0x461
leaq 0x10(%rsp), %rdi
callq 0xb17a
leaq 0x10(%rsp), %rdi
callq 0x4150
xorl %ebx, %ebx
movq %r13, %rcx
movl 0x44(%r14), %eax
cmpl $0x1, %eax
jne 0xe623
movq 0x50(%r14), %r15
testq %r15, %r15
movq %rcx, %rbp
jne 0xe341
movq 0xbd0d(%rip), %rdi      # 0x19ff0
leaq 0x4b24(%rip), %rsi      # 0x12e0e
callq 0x4290
movq %rax, %rdi
movq %r14, %rsi
callq 0x4250
leaq 0x4b31(%rip), %rsi      # 0x12e32
movq %rax, %rdi
callq 0x4290
leaq 0x48a5(%rip), %rsi      # 0x12bb5
leaq 0x10(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x5caa
leaq 0xc(%rsp), %rsi
movl $0x49e, (%rsi)          # imm = 0x49E
leaq 0x10(%rsp), %rdi
callq 0xb17a
leaq 0x10(%rsp), %rdi
callq 0x4150
movq %rbp, %rcx
movq %r12, 0x48(%rsp)
movq 0x50(%rcx), %rax
movq (%r15), %r14
testq %rax, %rax
movq %r15, 0x50(%rsp)
je 0xe90d
movq (%rax), %r12
leaq 0x10(%rsp), %rbp
cmpq 0x8(%rax), %r12
je 0xe57c
xorl %r13d, %r13d
cmpq 0x8(%r15), %r14
je 0xe4ff
testb $0x1, %r13b
jne 0xe4ff
movq (%r12), %rdi
movq (%r14), %rsi
callq 0x6a30
movq (%r14), %rcx
movq 0x48(%rcx), %rsi
testb %al, %al
je 0xe3cc
movl 0x40(%rsi), %eax
movq (%r12), %rcx
movl %eax, 0x24(%rcx)
orb $0x4, 0x20(%rcx)
movq (%r14), %rax
movq 0x48(%rax), %rsi
movq (%r12), %rdx
movq 0x38(%rsp), %rdi
callq 0xdf6c
movq %rax, %r15
addq %rbx, %r15
movb $0x1, %r13b
jmp 0xe4bc
testq %rsi, %rsi
jne 0xe436
movq 0xbc18(%rip), %rdi      # 0x19ff0
leaq 0x48d3(%rip), %rsi      # 0x12cb2
callq 0x4290
movq (%r14), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x4a1c(%rip), %rsi      # 0x12e15
callq 0x4290
movq %rbp, %rdi
leaq 0x47ad(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x4b7, 0xc(%rsp)       # imm = 0x4B7
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq %rbp, %rdi
callq 0x4150
movq (%r14), %rax
movq 0x48(%rax), %rsi
cmpl $0x0, 0x44(%rsi)
jne 0xe446
cmpl $0x0, 0x40(%rsi)
je 0xe4cd
movq %rbx, %r15
movq (%r14), %rax
cmpb $0x0, 0x40(%rax)
jne 0xe4bc
movq 0xbb97(%rip), %rdi      # 0x19ff0
leaq 0x49fc(%rip), %rsi      # 0x12e5c
callq 0x4290
movq (%r14), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x49fc(%rip), %rsi      # 0x12e76
callq 0x4290
movq (%r12), %rsi
movq %rax, %rdi
callq 0x4250
movq %rbp, %rdi
leaq 0x4720(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x4c9, 0xc(%rsp)       # imm = 0x4C9
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq %rbp, %rdi
callq 0x4150
addq $0x8, %r14
movq %r15, %rbx
movq 0x50(%rsp), %r15
jmp 0xe370
movq (%r12), %rdx
movl $0xfffffffe, 0x24(%rdx) # imm = 0xFFFFFFFE
movq 0x38(%rsp), %rdi
callq 0xdf6c
movq %rax, %r15
addq %rbx, %r15
movq (%r12), %rax
cmpl $-0x2, 0x24(%rax)
jne 0xe3c4
andl $0x0, 0x24(%rax)
jmp 0xe449
testb $0x1, %r13b
movq 0x30(%rsp), %rcx
jne 0xe56f
movq %rcx, %r13
movq 0xbadc(%rip), %rdi      # 0x19ff0
leaq 0x48cf(%rip), %rsi      # 0x12dea
callq 0x4290
movq (%r12), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x48bc(%rip), %rsi      # 0x12df2
callq 0x4290
movq %rbp, %rdi
leaq 0x4670(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x4d1, 0xc(%rsp)       # imm = 0x4D1
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq %rbp, %rdi
callq 0x4150
movq %r13, %rcx
addq $0x8, %r12
movq 0x50(%rcx), %rax
jmp 0xe363
leaq 0x10(%rsp), %r15
leaq 0xc(%rsp), %rbp
movq 0x50(%rsp), %rax
cmpq 0x8(%rax), %r14
je 0xe615
movq (%r14), %rax
cmpb $0x0, 0x40(%rax)
jne 0xe60c
movq %rcx, %r13
movq 0xba48(%rip), %rdi      # 0x19ff0
leaq 0x48ad(%rip), %rsi      # 0x12e5c
callq 0x4290
movq (%r14), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x48ad(%rip), %rsi      # 0x12e76
callq 0x4290
movq (%r12), %rsi
movq %rax, %rdi
callq 0x4250
movq %r15, %rdi
leaq 0x45d1(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x4d9, 0xc(%rsp)       # imm = 0x4D9
movq %r15, %rdi
movq %rbp, %rsi
callq 0xb17a
movq %r15, %rdi
callq 0x4150
movq %r13, %rcx
addq $0x8, %r14
jmp 0xe586
movq 0x40(%rsp), %r14
movl 0x44(%r14), %eax
movq 0x48(%rsp), %r12
cmpl $0x3, %eax
jne 0xeae1
movq 0x50(%rcx), %rax
testq %rax, %rax
je 0xea65
movq %r12, 0x48(%rsp)
movq (%rax), %r12
leaq 0x10(%rsp), %rbp
cmpq 0x8(%rax), %r12
je 0xead8
movq 0x50(%r14), %r15
testq %r15, %r15
je 0xe669
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
cmpq $0x9, %rcx
jb 0xe6ce
movq 0xb980(%rip), %rdi      # 0x19ff0
leaq 0x4773(%rip), %rsi      # 0x12dea
callq 0x4290
movq %rax, %rdi
movq %r14, %rsi
callq 0x4250
movq %rax, %rdi
leaq 0x483d(%rip), %rsi      # 0x12ece
callq 0x4290
movq %rbp, %rdi
leaq 0x4515(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x50b, 0xc(%rsp)       # imm = 0x50B
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq %rbp, %rdi
callq 0x4150
movq 0x50(%r14), %rax
movq (%rax), %rax
movq (%rax), %rsi
movq 0x48(%rsi), %r14
movl 0x44(%r14), %eax
testl %eax, %eax
jne 0xe6e8
cmpl $0x0, 0x40(%r14)
jne 0xe6e8
movq 0x50(%r14), %r15
testq %r15, %r15
je 0xe711
movq (%r15), %r13
cmpq 0x8(%r15), %r13
je 0xe7c8
movq (%r12), %rdi
movq (%r13), %rsi
callq 0x6a30
testb %al, %al
jne 0xe72c
addq $0x8, %r13
jmp 0xe6f0
cmpl $0x2, %eax
jne 0xe76a
movq (%r12), %rdi
callq 0x6a30
testb %al, %al
je 0xe7c8
jmp 0xeaab
movq (%r13), %rax
movq 0x48(%rax), %rax
movl 0x40(%rax), %eax
movq (%r12), %rcx
movl %eax, 0x24(%rcx)
orb $0x4, 0x20(%rcx)
movq (%r13), %rax
movq 0x48(%rax), %rsi
movq (%r12), %rdx
movq 0x38(%rsp), %rdi
callq 0xdf6c
addq %rax, %rbx
movq 0x30(%rsp), %rcx
movq 0x40(%rsp), %r14
jmp 0xe900
movq 0xb87f(%rip), %rdi      # 0x19ff0
leaq 0x4672(%rip), %rsi      # 0x12dea
callq 0x4290
movq %rax, %rdi
movq %r14, %rsi
callq 0x4250
movq %rax, %rdi
leaq 0x46a1(%rip), %rsi      # 0x12e33
callq 0x4290
movq %rbp, %rdi
leaq 0x4414(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x533, 0xc(%rsp)       # imm = 0x533
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq %rbp, %rdi
callq 0x4150
movq %rbp, %r13
movq 0xb81e(%rip), %rdi      # 0x19ff0
leaq 0x4611(%rip), %rsi      # 0x12dea
callq 0x4290
movq %rax, %rdi
movq 0x30(%rsp), %r15
movq %r15, %rsi
callq 0x4250
movq %rax, %rdi
leaq 0x399f(%rip), %rbp      # 0x12197
movq %rbp, %rsi
callq 0x4290
movl 0x24(%r15), %esi
movq %rax, %rdi
callq 0x4540
movq %rax, %rdi
leaq 0x46f6(%rip), %rsi      # 0x12f0c
callq 0x4290
movq (%r12), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x46df(%rip), %rsi      # 0x12f10
callq 0x4290
movq %rax, %rdi
movq 0x40(%rsp), %r15
movq %r15, %rsi
callq 0x4250
movq %rax, %rdi
movq %rbp, %rsi
callq 0x4290
movl 0x40(%r15), %esi
movq %rax, %rdi
callq 0x4540
movq %rax, %rdi
leaq 0x34b7(%rip), %rsi      # 0x11d1e
callq 0x4290
cmpl $0x0, 0x44(%r14)
jne 0xe8c2
cmpl $0x0, 0x40(%r14)
jne 0xe8c2
movq 0xb76f(%rip), %rdi      # 0x19ff0
leaq 0x4685(%rip), %rsi      # 0x12f0d
callq 0x4290
movq %rax, %rdi
movq %r14, %rsi
callq 0x4250
movq %rax, %rdi
leaq 0x38f5(%rip), %rsi      # 0x12197
callq 0x4290
movl 0x40(%r14), %esi
movq %rax, %rdi
callq 0x4540
movq %rax, %rdi
leaq 0x3461(%rip), %rsi      # 0x11d1e
callq 0x4290
movq %r13, %rbp
movq %r13, %rdi
leaq 0x42e6(%rip), %rsi      # 0x12bb5
leaq 0xb(%rsp), %rdx
callq 0x5caa
movl $0x53d, 0xc(%rsp)       # imm = 0x53D
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0xb17a
movq 0x40(%rsp), %r14
movq %rbp, %rdi
callq 0x4150
movq 0x30(%rsp), %rcx
addq $0x8, %r12
movq 0x50(%rcx), %rax
jmp 0xe646
leaq 0x10(%rsp), %r15
leaq 0xb(%rsp), %r12
leaq 0xc(%rsp), %rbx
movq 0x50(%rsp), %rax
cmpq 0x8(%rax), %r14
je 0xea1e
movq (%r14), %rax
cmpq $0x0, 0x48(%rax)
jne 0xe995
movq 0xb6b4(%rip), %rdi      # 0x19ff0
leaq 0x453c(%rip), %rsi      # 0x12e7f
callq 0x4290
movq (%r14), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x4534(%rip), %rsi      # 0x12e91
callq 0x4290
movq %r15, %rdi
leaq 0x4249(%rip), %rsi      # 0x12bb5
movq %r12, %rdx
callq 0x5caa
movl $0x4e4, 0xc(%rsp)       # imm = 0x4E4
movq %r15, %rdi
movq %rbx, %rsi
callq 0xb17a
movq %r15, %rdi
callq 0x4150
movq (%r14), %rax
movq %rbp, %rcx
cmpb $0x0, 0x40(%rax)
jne 0xea15
movq 0xb64e(%rip), %rdi      # 0x19ff0
leaq 0x4509(%rip), %rsi      # 0x12eb2
movq %rcx, %r13
callq 0x4290
movq (%r14), %rsi
movq %rax, %rdi
callq 0x4250
movq %rax, %rdi
leaq 0x44fe(%rip), %rsi      # 0x12ec4
callq 0x4290
movq %rax, %rdi
movq %r13, %rsi
callq 0x4250
movq %rax, %rdi
leaq 0x4435(%rip), %rsi      # 0x12e15
callq 0x4290
movq %r15, %rdi
leaq 0x41c6(%rip), %rsi      # 0x12bb5
movq %r12, %rdx
callq 0x5caa
movl $0x4ea, 0xc(%rsp)       # imm = 0x4EA
movq %r15, %rdi
movq %rbx, %rsi
callq 0xb17a
movq %r15, %rdi
callq 0x4150
movq %rbp, %rcx
addq $0x8, %r14
jmp 0xe91c
movq 0x48(%rsp), %r15
movq (%r15), %rax
movq %r15, %rdi
movq %rcx, %rsi
movq %rcx, %rbx
callq *0x8(%rax)
orb $0x4, 0x20(%rbx)
andq $0x0, 0x30(%rbx)
movq (%r15), %rax
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq *0x10(%rax)
movslq 0x8(%r14), %rbx
movq %r14, %rdi
callq 0x4150
movq (%r15), %rax
movq %r15, %rdi
jmp 0xec3a
movq (%r12), %rax
movq %r12, %rdi
movq %rcx, %rsi
movq %rcx, %rbx
callq *0x8(%rax)
orb $0x4, 0x20(%rbx)
andq $0x0, 0x30(%rbx)
jmp 0xec13
movl 0x40(%rsi), %eax
movl %eax, 0x24(%r13)
orb $0x4, 0x20(%r13)
movq (%r15), %rax
movq 0x48(%rax), %rsi
movq 0x38(%rsp), %rdi
movq %r13, %rdx
callq 0xdf6c
addq %rax, %rbx
jmp 0xec33
movl 0x40(%r14), %eax
movq (%r12), %rcx
movl %eax, 0x24(%rcx)
andb $-0x5, 0x20(%rcx)
movq (%r12), %rdx
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0xdf6c
addq %rax, %rbx
movq 0x30(%rsp), %rcx
movq 0x40(%rsp), %r14
movl 0x44(%r14), %eax
movq 0x48(%rsp), %r12
cmpl $0x2, %eax
jne 0xeb5c
cmpq $0x0, 0x50(%rcx)
je 0xeba3
movq 0xb4f8(%rip), %rdi      # 0x19ff0
leaq 0x430f(%rip), %rsi      # 0x12e0e
movq %rcx, %r14
callq 0x4290
movq %rax, %rdi
movq %r14, %r15
movq %r14, %rsi
callq 0x4250
leaq 0x4417(%rip), %rsi      # 0x12f33
movq %rax, %rdi
callq 0x4290
leaq 0x408a(%rip), %rsi      # 0x12bb5
leaq 0x10(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x5caa
leaq 0xc(%rsp), %rsi
movl $0x566, (%rsi)          # imm = 0x566
leaq 0x10(%rsp), %rdi
callq 0xb17a
leaq 0x10(%rsp), %rdi
callq 0x4150
movq %r15, %rcx
movq %rbx, 0x30(%rcx)
movq (%r12), %rax
movq %r12, %rdi
movq %rcx, %rsi
movq %rcx, %r15
callq *0x8(%rax)
movq (%r12), %rax
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
xorl %edx, %edx
callq *0x10(%rax)
movslq 0x8(%r14), %rbx
movq %r14, %rdi
callq 0x4150
movq (%r12), %rax
movq %r12, %rdi
callq *0x28(%rax)
addq 0x30(%r15), %rbx
jmp 0xec3d
movq (%r12), %rax
movq %r12, %rdi
movq %rcx, %rsi
movq %rcx, %r15
callq *0x8(%rax)
andb $-0x5, 0x20(%r15)
addq $0x20, %r14
leaq 0xbd15(%rip), %rdi      # 0x1a8d8
movq %r14, %rsi
callq 0xf444
movl (%rax), %eax
movl $0xffffff07, %ecx       # imm = 0xFFFFFF07
andl 0x20(%r15), %ecx
andl $0x1f, %eax
leal (%rcx,%rax,8), %ecx
movw %cx, 0x20(%r15)
leaq 0xc(%rsp), %rsi
movl %eax, (%rsi)
leaq 0xbd19(%rip), %rdi      # 0x1a908
callq 0xf4aa
movq 0x48(%r15), %rsi
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq *0x8(%rax)
movq 0x8(%rbx), %rax
movq %rax, 0x30(%r15)
movq %rbx, %rdi
callq 0x4150
movq (%r12), %rax
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
xorl %edx, %edx
callq *0x10(%rax)
movslq 0x8(%r14), %rbx
movq %r14, %rdi
callq 0x4150
movq (%r12), %rax
movq %r12, %rdi
callq *0x28(%rax)
movq %rbx, %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xec97
jmp 0xec97
jmp 0xeca6
jmp 0xeca6
jmp 0xec97
jmp 0xeca6
jmp 0xec97
jmp 0xeca6
jmp 0xec97
jmp 0xeca6
movq %rax, %rbx
pushq $0x48
popq %rsi
movq %r12, %rdi
callq 0x42c0
jmp 0xeca9
jmp 0xec97
jmp 0xeca6
jmp 0xeca6
jmp 0xec97
jmp 0xec97
jmp 0xeca6
jmp 0xeca6
jmp 0xec97
jmp 0xeca6
jmp 0xec97
jmp 0xeca6
jmp 0xec97
jmp 0xec97
jmp 0xeca6
jmp 0xeca6
jmp 0xec97
jmp 0xec97
jmp 0xeca6
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x4150
jmp 0xeca9
movq %rax, %rbx
movq %rbx, %rdi
callq 0x4560
nop