// File: /workspace/github_cpp_makefile_star2_O2/sisong[P]ApkDiffPatch/src/diff/Differ.cpp
// Function: ZipDiffWithStream(hpatch_TStreamInput const*, hpatch_TStreamInput const*, hpatch_TStreamOutput const*, hdiff_TCompress const*, hpatch_TDecompress*, int, unsigned long, bool*, int)
bool ZipDiffWithStream(const hpatch_TStreamInput* oldZipStream,const hpatch_TStreamInput* newZipStream,
                       const hpatch_TStreamOutput* outDiffStream,
                       const hdiff_TCompress* compressPlugin,hpatch_TDecompress* decompressPlugin,
                       int diffMatchScore,size_t patchStepMemSize,
                       bool* out_isNewZipApkV2SignNoError,int threadNum){
    UnZipper            oldZip;
    UnZipper            newZip;
    std::vector<TByte>  newData;
    std::vector<TByte>  oldData;
    std::vector<TByte>  hdiffzData;
    std::vector<TByte>  out_diffData;
    std::vector<uint32_t> samePairList;
    std::vector<uint32_t> newRefDecompressList;
    std::vector<uint32_t> newRefList;
    std::vector<uint32_t> newRefOtherCompressedList;
    std::vector<uint32_t> newRefCompressedSizeList;
    std::vector<uint32_t> oldRefList;
    bool            result=true;
    bool            _isInClear=false;
    bool            byteByByteEqualCheck=false;
    bool            isNewZipApkV2SignNoError=true;
    size_t          newZipAlignSize=0;
    int             newZipNormalized_compressLevel=kDefaultZlibCompressLevel;
    int             newZipNormalized_compressMemLevel=kDefaultZlibCompressMemLevel;
    int             newZip_otherCompressLevel=0;
    int             newZip_otherCompressMemLevel=0;
    bool            newCompressedDataIsNormalized=false;
    const bool isSD=patchStepMemSize>0;
    
    check(compressPlugin!=0);
    check(decompressPlugin!=0);

    UnZipper_init(&oldZip);
    UnZipper_init(&newZip);
    check(UnZipper_openStream(&oldZip,oldZipStream));
    check(UnZipper_openStream(&newZip,newZipStream,false,false,true));
    
    newZipAlignSize=getBaseAlignSize_unsafe(&newZip);
    if (UnZipper_isHaveApkV2Sign(&newZip)){//precondition (+checkZipIsSame() to complete)
        newZip._isDataNormalized=(newZipAlignSize>0)&&(newZip._dataDescriptorCount==0);
    }else{
        newZip._isDataNormalized=true;
    }
    //if (newZip._isDataNormalized && UnZipper_isHaveApkV2Sign(&newZip)){
        newCompressedDataIsNormalized=getCompressedIsNormalized(&newZip,&newZipNormalized_compressLevel,
                                                                &newZipNormalized_compressMemLevel);
    //}else{
    //    newCompressedDataIsNormalized=getCompressedIsNormalizedBy(&newZip,newZipNormalized_compressLevel,
    //                                                              newZipNormalized_compressMemLevel);
    //}
    newZip._isDataNormalized&=newCompressedDataIsNormalized;
    if (UnZipper_isHaveApkV2Sign(&newZip)){
        if (!getCompressedIsNormalized(&newZip,&newZip_otherCompressLevel,&newZip_otherCompressMemLevel,true)){
            newZip_otherCompressLevel=0;
            newZip_otherCompressMemLevel=0;
        }
    }
    byteByByteEqualCheck=UnZipper_isHaveApkV2Sign(&newZip);
    
    if (newCompressedDataIsNormalized && UnZipper_isHaveApkV2Sign(&oldZip))
        oldZip._isDataNormalized=getCompressedIsNormalizedBy(&oldZip,newZipNormalized_compressLevel,
                                                             newZipNormalized_compressMemLevel);
    isNewZipApkV2SignNoError=checkZipInfo(&oldZip,&newZip);
    if (out_isNewZipApkV2SignNoError) *out_isNewZipApkV2SignNoError=isNewZipApkV2SignNoError;
    //if isNewZipApkV2SignNoError==false ,same info error,but continue;
    
    std::cout<<"ZipDiff with compress plugin: \""<<compressPlugin->compressType()<<"\"\n";
    check(getSamePairList(&newZip,&oldZip,newCompressedDataIsNormalized,
                          newZipNormalized_compressLevel,newZipNormalized_compressMemLevel,
                          samePairList,newRefList,newRefOtherCompressedList,newRefCompressedSizeList));
    newRefDecompressList=newRefList;
    if ((newZip_otherCompressLevel|newZip_otherCompressMemLevel)!=0){
        newRefDecompressList.insert(newRefDecompressList.end(),
                                    newRefOtherCompressedList.begin(),newRefOtherCompressedList.end());
        std::sort(newRefDecompressList.begin(),newRefDecompressList.end());
    }
    check(getOldRefList(&newZip,samePairList,newRefDecompressList,&oldZip,oldRefList));
    std::cout<<"ZipDiff same file count: "<<samePairList.size()/2<<" (all "
    <<UnZipper_fileCount(&newZip)<<")\n";
    std::cout<<"    diff new file count: "<<newRefList.size()+newRefOtherCompressedList.size()<<"\n";
    std::cout<<"     ref old file count: "<<oldRefList.size()<<" (all "
    <<UnZipper_fileCount(&oldZip)<<")\n";
    std::cout<<"     ref old decompress: "
    <<OldStream_getDecompressFileCount(&oldZip,oldRefList.data(),oldRefList.size())<<" file ("
    <<OldStream_getDecompressSumSize(&oldZip,oldRefList.data(),oldRefList.size()) <<" byte!)\n";
    //for (int i=0; i<(int)newRefList.size(); ++i) std::cout<<zipFile_name(&newZip,newRefList[i])<<"\n";
    //for (int i=0; i<(int)newRefOtherCompressedList.size(); ++i) std::cout<<zipFile_name(&newZip,newRefOtherCompressedList[i])<<"\n";
    //for (int i=0; i<(int)oldRefList.size(); ++i) std::cout<<zipFile_name(&oldZip,oldRefList[i])<<"\n";
    
    #define _loadNewAndOldData() \
        if ((newZip_otherCompressLevel|newZip_otherCompressMemLevel)!=0){ \
            check(readZipStreamData(&newZip,newRefDecompressList,std::vector<uint32_t>(),newData)); \
        }else{ \
            check(readZipStreamData(&newZip,newRefList,newRefOtherCompressedList,newData)); \
        } \
        check(readZipStreamData(&oldZip,oldRefList,std::vector<uint32_t>(),oldData));
    _loadNewAndOldData();
    check(HDiffZ(oldData,newData,hdiffzData,compressPlugin,diffMatchScore,patchStepMemSize,threadNum));
    _loadNewAndOldData();
    check(HPatchZ_check(oldData,newData,hdiffzData,decompressPlugin,isSD));
    { std::vector<TByte> _empty; oldData.swap(_empty); }
    { std::vector<TByte> _empty; newData.swap(_empty); }
    
    check(serializeZipDiffData(out_diffData,&newZip,&oldZip,newZipAlignSize,
                               newZipNormalized_compressLevel,newZipNormalized_compressMemLevel,
                               newZip_otherCompressLevel,newZip_otherCompressMemLevel,
                               samePairList,newRefOtherCompressedList,newRefCompressedSizeList,
                               oldRefList,hdiffzData,compressPlugin,isSD?1:0));
    std::cout<<"ZipDiff size: "<<out_diffData.size()<<"\n";
    
    check(outDiffStream->write(outDiffStream,0,out_diffData.data(),out_diffData.data()+out_diffData.size()));
clear:
    _isInClear=true;
    check(UnZipper_close(&newZip));
    check(UnZipper_close(&oldZip));
    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2e8, %rsp            # imm = 0x2E8
movq %rdx, 0x180(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
movapd %xmm0, 0x40(%rsp)
andq $0x0, 0x50(%rsp)
movapd %xmm0, 0xe0(%rsp)
andq $0x0, 0xf0(%rsp)
movapd %xmm0, 0x140(%rsp)
andq $0x0, 0x150(%rsp)
movapd %xmm0, 0x120(%rsp)
andq $0x0, 0x130(%rsp)
movapd %xmm0, 0xc0(%rsp)
andq $0x0, 0xd0(%rsp)
movapd %xmm0, 0x100(%rsp)
andq $0x0, 0x110(%rsp)
movapd %xmm0, 0xa0(%rsp)
andq $0x0, 0xb0(%rsp)
movapd %xmm0, 0x160(%rsp)
andq $0x0, 0x170(%rsp)
movapd %xmm0, 0x80(%rsp)
andq $0x0, 0x90(%rsp)
movl $0x6, 0x1c(%rsp)
movl $0x8, 0x18(%rsp)
andl $0x0, 0x14(%rsp)
andl $0x0, 0x10(%rsp)
testq %rcx, %rcx
je 0x9d49
movq %r8, %r12
testq %r8, %r8
je 0x9d55
movl %r9d, %r13d
movq %rcx, %r14
movq %rsi, %r15
movq %rdi, %rbp
leaq 0x238(%rsp), %rdi
callq 0x37105
leaq 0x188(%rsp), %rdi
callq 0x37105
leaq 0x238(%rsp), %rdi
movq %rbp, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3719a
testb %al, %al
je 0x9d61
leaq 0x188(%rsp), %rdi
pushq $0x1
popq %r8
movq %r15, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x3719a
testb %al, %al
je 0x9d6d
leaq 0x188(%rsp), %rdi
callq 0x7475
movq %rax, 0x158(%rsp)
movq 0x220(%rsp), %rcx
movb $0x1, %al
cmpq 0x1d8(%rsp), %rcx
jae 0x9841
cmpq $0x0, 0x158(%rsp)
setne %cl
cmpl $0x0, 0x1f8(%rsp)
sete %al
andb %cl, %al
leaq 0x188(%rsp), %rdi
movb %al, 0x89(%rdi)
leaq 0x1c(%rsp), %rsi
leaq 0x18(%rsp), %rdx
xorl %ecx, %ecx
callq 0x73c0
movb %al, 0x8(%rsp)
movb 0x8(%rsp), %al
andb %al, 0x211(%rsp)
movq 0x220(%rsp), %rax
cmpq 0x1d8(%rsp), %rax
jae 0x98a9
leaq 0x188(%rsp), %rdi
leaq 0x14(%rsp), %rsi
leaq 0x10(%rsp), %rdx
pushq $0x1
popq %rcx
callq 0x73c0
testb %al, %al
jne 0x98a9
andl $0x0, 0x14(%rsp)
andl $0x0, 0x10(%rsp)
cmpb $0x0, 0x8(%rsp)
je 0x98e0
movq 0x2d0(%rsp), %rax
cmpq 0x288(%rsp), %rax
jae 0x98e0
movl 0x1c(%rsp), %esi
movl 0x18(%rsp), %edx
leaq 0x238(%rsp), %rdi
xorl %ecx, %ecx
callq 0x713c
movb %al, 0x2c1(%rsp)
cmpb $0x1, 0x2c1(%rsp)
jne 0x98f6
leaq 0x4695b(%rip), %rdi     # 0x5024c
callq 0x4510
leaq 0x238(%rsp), %rdi
callq 0x36cb8
testb %al, %al
je 0x9913
leaq 0x4695e(%rip), %rdi     # 0x5026c
callq 0x4510
movq 0x2d0(%rsp), %rax
cmpq 0x288(%rsp), %rax
jae 0x9931
leaq 0x46968(%rip), %rdi     # 0x50294
callq 0x4510
leaq 0x238(%rsp), %rdi
callq 0x370ee
testb %al, %al
je 0x994e
leaq 0x4696a(%rip), %rdi     # 0x502b3
callq 0x4510
cmpb $0x1, 0x211(%rsp)
jne 0x9964
leaq 0x46973(%rip), %rdi     # 0x502d2
callq 0x4510
leaq 0x188(%rsp), %rdi
callq 0x36cb8
testb %al, %al
je 0x9981
leaq 0x46976(%rip), %rdi     # 0x502f2
callq 0x4510
movq 0x1d8(%rsp), %r15
movq 0x220(%rsp), %rbx
cmpq %r15, %rbx
jae 0x99a2
leaq 0x4697d(%rip), %rdi     # 0x5031a
callq 0x4510
leaq 0x188(%rsp), %rdi
callq 0x370ee
movq %r13, %rbp
testb %al, %al
je 0x99c2
leaq 0x4697c(%rip), %rdi     # 0x50339
callq 0x4510
cmpq %r15, %rbx
setae %r13b
orb 0x211(%rsp), %r13b
jne 0x99df
leaq 0x4697e(%rip), %rdi     # 0x50358
callq 0x4510
cmpq %r15, %rbx
jb 0x9a07
leaq 0x188(%rsp), %rdi
callq 0x36e81
movb $0x1, %r13b
testb %al, %al
je 0x9a07
leaq 0x469cc(%rip), %rdi     # 0x503cb
callq 0x4510
xorl %r13d, %r13d
movq 0x328(%rsp), %rbx
pushq $0xa
popq %rdi
callq 0x4440
testq %rbx, %rbx
je 0x9a1f
movb %r13b, (%rbx)
movq 0x6b59a(%rip), %rdi     # 0x74fc0
leaq 0x46085(%rip), %rsi     # 0x4fab2
callq 0x4310
movq %rbp, 0x58(%rsp)
movq %rax, %r15
callq *(%r14)
movq %r15, %rdi
movq %rax, %rsi
callq 0x4310
leaq 0x44654(%rip), %rsi     # 0x4e0a3
movq %rax, %rdi
callq 0x4310
movl 0x1c(%rsp), %ecx
movl 0x18(%rsp), %r8d
subq $0x8, %rsp
leaq 0x168(%rsp), %r11
leaq 0xa8(%rsp), %r10
leaq 0x108(%rsp), %rax
movzbl 0x10(%rsp), %edx
leaq 0x190(%rsp), %rdi
leaq 0x240(%rsp), %rsi
leaq 0x128(%rsp), %r9
pushq %r11
pushq %r10
pushq %rax
callq 0x7590
addq $0x20, %rsp
testb %al, %al
je 0x9d79
leaq 0xc0(%rsp), %rdi
leaq 0x100(%rsp), %rsi
callq 0xa740
movl 0x10(%rsp), %eax
orl 0x14(%rsp), %eax
je 0x9b04
leaq 0xc0(%rsp), %rdi
movq 0x8(%rdi), %rsi
movq 0xa0(%rsp), %rdx
movq 0xa8(%rsp), %rcx
callq 0xa80a
movq 0xc0(%rsp), %rdi
movq 0xc8(%rsp), %rsi
callq 0xaa7d
leaq 0x188(%rsp), %rdi
leaq 0x120(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
leaq 0x238(%rsp), %rcx
leaq 0x80(%rsp), %r8
callq 0xae80
testb %al, %al
je 0x9d85
movq 0x6b480(%rip), %rdi     # 0x74fc0
leaq 0x45f8b(%rip), %rsi     # 0x4fad2
callq 0x4310
movq 0x128(%rsp), %rsi
subq 0x120(%rsp), %rsi
sarq $0x2, %rsi
shrq %rsi
movq %rax, %rdi
callq 0x4250
leaq 0x45f7a(%rip), %rsi     # 0x4faec
movq %rax, %rdi
callq 0x4310
movq %rax, %r15
leaq 0x188(%rsp), %rdi
callq 0x36bfd
movq %r15, %rdi
movl %eax, %esi
callq 0x45e0
leaq 0x4490c(%rip), %rsi     # 0x4e4a7
movq %rax, %rdi
callq 0x4310
movq 0x6b416(%rip), %rdi     # 0x74fc0
leaq 0x45f42(%rip), %rsi     # 0x4faf3
callq 0x4310
movq 0x108(%rsp), %rcx
subq 0x100(%rsp), %rcx
sarq $0x2, %rcx
movq 0xa8(%rsp), %rsi
subq 0xa0(%rsp), %rsi
sarq $0x2, %rsi
addq %rcx, %rsi
movq %rax, %rdi
callq 0x4250
leaq 0x46088(%rip), %rsi     # 0x4fc78
movq %rax, %rdi
callq 0x4310
movq 0x6b3c1(%rip), %rdi     # 0x74fc0
leaq 0x45f07(%rip), %rsi     # 0x4fb0d
callq 0x4310
movq 0x88(%rsp), %rsi
subq 0x80(%rsp), %rsi
sarq $0x2, %rsi
movq %rax, %rdi
callq 0x4250
leaq 0x45ebe(%rip), %rsi     # 0x4faec
movq %rax, %rdi
callq 0x4310
movq %rax, %r15
leaq 0x238(%rsp), %rdi
callq 0x36bfd
movq %r15, %rdi
movl %eax, %esi
callq 0x45e0
leaq 0x44850(%rip), %rsi     # 0x4e4a7
movq %rax, %rdi
callq 0x4310
movq 0x6b35a(%rip), %rdi     # 0x74fc0
leaq 0x45eba(%rip), %rsi     # 0x4fb27
callq 0x4310
movq %rax, %r15
movq 0x80(%rsp), %rsi
movq 0x88(%rsp), %rdx
subq %rsi, %rdx
sarq $0x2, %rdx
leaq 0x238(%rsp), %rdi
callq 0x35240
movq %r15, %rdi
movl %eax, %esi
callq 0x45e0
leaq 0x45e97(%rip), %rsi     # 0x4fb41
movq %rax, %rdi
callq 0x4310
movq %rax, %r15
movq 0x80(%rsp), %rsi
movq 0x88(%rsp), %rdx
subq %rsi, %rdx
sarq $0x2, %rdx
leaq 0x238(%rsp), %rdi
callq 0x3527c
movl %eax, %esi
movq %r15, %rdi
callq 0x4250
leaq 0x45e5f(%rip), %rsi     # 0x4fb49
movq %rax, %rdi
callq 0x4310
movl 0x10(%rsp), %eax
orl 0x14(%rsp), %eax
je 0x9d91
xorpd %xmm0, %xmm0
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
andq $0x0, 0x10(%rdx)
leaq 0x188(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
leaq 0x20(%rsp), %rcx
callq 0x7a92
movl %eax, %ebp
leaq 0x60(%rsp), %rdi
callq 0x90f0
testb %bpl, %bpl
jne 0x9dbb
leaq 0x46441(%rip), %rdi     # 0x50185
jmp 0x9f0a
leaq 0x46033(%rip), %rdi     # 0x4fd83
jmp 0x9f0a
leaq 0x46025(%rip), %rdi     # 0x4fd81
jmp 0x9f0a
leaq 0x4579a(%rip), %rdi     # 0x4f502
jmp 0x9f0a
leaq 0x46028(%rip), %rdi     # 0x4fd9c
jmp 0x9f0a
leaq 0x4605e(%rip), %rdi     # 0x4fdde
jmp 0x9f0a
leaq 0x46126(%rip), %rdi     # 0x4feb2
jmp 0x9f0a
leaq 0x188(%rsp), %rdi
leaq 0x100(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
leaq 0x20(%rsp), %rcx
callq 0x7a92
testb %al, %al
je 0x9f03
xorpd %xmm0, %xmm0
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
andq $0x0, 0x10(%rdx)
leaq 0x238(%rsp), %rdi
leaq 0x80(%rsp), %rsi
leaq 0x40(%rsp), %rcx
callq 0x7a92
movl %eax, %ebp
leaq 0x60(%rsp), %rdi
callq 0x90f0
testb %bpl, %bpl
je 0x9efa
callq 0xa6ec
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
movq %rax, 0x8(%rsp)
movsd %xmm0, 0x178(%rsp)
movq 0x28(%rsp), %r15
subq 0x20(%rsp), %r15
movq 0x6b196(%rip), %rdi     # 0x74fc0
leaq 0x45d44(%rip), %rsi     # 0x4fb75
callq 0x4310
movq 0x6b183(%rip), %rdi     # 0x74fc0
leaq 0x45d3f(%rip), %rsi     # 0x4fb83
callq 0x4310
movq %rax, %rdi
movq 0x8(%rsp), %rsi
callq 0x4250
leaq 0x45d37(%rip), %rsi     # 0x4fb94
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
movq %r15, %rsi
callq 0x4250
leaq 0x45e01(%rip), %rsi     # 0x4fc78
movq %rax, %rdi
callq 0x4310
movq 0x20(%rsp), %rbp
movq 0x40(%rsp), %r13
movslq 0x330(%rsp), %rbx
cmpq $0x0, 0x320(%rsp)
je 0x9fdf
movq 0x6b119(%rip), %rdi     # 0x74fc0
leaq 0x45cf8(%rip), %rsi     # 0x4fba6
callq 0x4310
addq %rbp, %r15
movq 0x8(%rsp), %rcx
addq %r13, %rcx
subq $0x8, %rsp
leaq 0xe8(%rsp), %r8
movq %rbp, %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %r14, %r9
pushq %rbx
pushq $0x1000                 # imm = 0x1000
pushq $0x1
pushq 0x340(%rsp)
pushq 0x80(%rsp)
callq 0x14c67
addq $0x30, %rsp
jmp 0xa013
leaq 0x46237(%rip), %rdi     # 0x50138
jmp 0x9f0a
leaq 0x45ffb(%rip), %rdi     # 0x4ff05
callq 0x4510
xorl %ebx, %ebx
leaq 0x188(%rsp), %rdi
callq 0x37111
testb %al, %al
jne 0x9f30
leaq 0x45664(%rip), %rdi     # 0x4f58d
callq 0x4510
xorl %ebx, %ebx
leaq 0x238(%rsp), %rdi
callq 0x37111
testb %al, %al
jne 0x9f4f
leaq 0x45664(%rip), %rdi     # 0x4f5ac
callq 0x4510
xorl %ebx, %ebx
leaq 0x80(%rsp), %rdi
callq 0x90f0
leaq 0x160(%rsp), %rdi
callq 0x90f0
leaq 0xa0(%rsp), %rdi
callq 0x90f0
leaq 0x100(%rsp), %rdi
callq 0x90f0
leaq 0xc0(%rsp), %rdi
callq 0x90f0
leaq 0x120(%rsp), %rdi
callq 0x90f0
leaq 0x140(%rsp), %rdi
callq 0x8b88
leaq 0xe0(%rsp), %rdi
callq 0x8b88
leaq 0x40(%rsp), %rdi
callq 0x8b88
leaq 0x20(%rsp), %rdi
callq 0x8b88
movl %ebx, %eax
addq $0x2e8, %rsp            # imm = 0x2E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
addq %rbp, %r15
movq 0x8(%rsp), %rcx
addq %r13, %rcx
leaq 0xe0(%rsp), %r8
movq %rbp, %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %r14, %r9
pushq %rbx
pushq $0x1000                 # imm = 0x1000
pushq $0x1
pushq 0x70(%rsp)
callq 0x148b8
addq $0x20, %rsp
callq 0xa6ec
movsd %xmm0, 0x8(%rsp)
movq 0x6af9b(%rip), %rdi     # 0x74fc0
leaq 0x45ba2(%rip), %rsi     # 0x4fbce
callq 0x4310
movq 0xe8(%rsp), %rsi
subq 0xe0(%rsp), %rsi
movq %rax, %rdi
callq 0x4250
leaq 0x45c28(%rip), %rsi     # 0x4fc78
movq %rax, %rdi
callq 0x4310
movq 0x6af61(%rip), %rdi     # 0x74fc0
leaq 0x45b79(%rip), %rsi     # 0x4fbdf
callq 0x4310
movsd 0x8(%rsp), %xmm0
subsd 0x178(%rsp), %xmm0
movq %rax, %rdi
callq 0x4520
leaq 0x4408d(%rip), %rsi     # 0x4e116
movq %rax, %rdi
callq 0x4310
movl 0x10(%rsp), %eax
orl 0x14(%rsp), %eax
je 0xa0dd
xorpd %xmm0, %xmm0
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
andq $0x0, 0x10(%rdx)
leaq 0x188(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
leaq 0x20(%rsp), %rcx
callq 0x7a92
movl %eax, %ebp
leaq 0x60(%rsp), %rdi
callq 0x90f0
testb %bpl, %bpl
jne 0xa107
jmp 0x9d3d
leaq 0x188(%rsp), %rdi
leaq 0x100(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
leaq 0x20(%rsp), %rcx
callq 0x7a92
testb %al, %al
je 0xa1a8
xorpd %xmm0, %xmm0
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
andq $0x0, 0x10(%rdx)
leaq 0x238(%rsp), %rdi
leaq 0x80(%rsp), %rbx
leaq 0x40(%rsp), %rcx
movq %rbx, %rsi
callq 0x7a92
movl %eax, %ebp
leaq 0x60(%rsp), %rdi
callq 0x90f0
testb %bpl, %bpl
je 0xa1a3
movq 0x40(%rsp), %rbp
movq 0x48(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %r15
movq 0x28(%rsp), %r13
callq 0xa6ec
movsd %xmm0, 0x58(%rsp)
movq 0xe0(%rsp), %r8
movq 0xe8(%rsp), %r9
cmpq $0x0, 0x320(%rsp)
je 0xa1ad
subq $0x8, %rsp
movq %r15, %rdi
movq %r13, %rsi
movq %rbp, %rdx
movq 0x10(%rsp), %rcx
pushq %r12
callq 0xd388
popq %rcx
popq %rdx
jmp 0xa1c8
jmp 0x9efa
jmp 0x9f03
subq $0x8, %rsp
movq %r15, %rdi
movq %r13, %rsi
movq %rbp, %rdx
movq 0x10(%rsp), %rcx
pushq %r12
callq 0xd229
popq %rcx
popq %rdx
testb %al, %al
je 0xa373
callq 0xa6ec
movsd %xmm0, 0x8(%rsp)
movq 0x6adde(%rip), %rdi     # 0x74fc0
leaq 0x45a5a(%rip), %rsi     # 0x4fc43
callq 0x4310
movq 0x6adcb(%rip), %rdi     # 0x74fc0
leaq 0x45a6a(%rip), %rsi     # 0x4fc66
callq 0x4310
movsd 0x8(%rsp), %xmm0
subsd 0x58(%rsp), %xmm0
movq %rax, %rdi
callq 0x4520
leaq 0x45a59(%rip), %rsi     # 0x4fc75
movq %rax, %rdi
callq 0x4310
xorl %r12d, %r12d
cmpq $0x0, 0x320(%rsp)
setne %r12b
movq 0x50(%rsp), %rax
movaps 0x40(%rsp), %xmm0
xorps %xmm1, %xmm1
andq $0x0, 0x50(%rsp)
movaps %xmm1, 0x40(%rsp)
leaq 0x60(%rsp), %r15
movaps %xmm0, (%r15)
movq %rax, 0x10(%r15)
movq %r15, %rdi
callq 0x8b88
movq 0x30(%rsp), %rax
andq $0x0, 0x30(%rsp)
movapd 0x20(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x20(%rsp)
movapd %xmm0, (%r15)
movq %rax, 0x10(%r15)
leaq 0x60(%rsp), %rdi
callq 0x8b88
movslq 0x1c(%rsp), %r8
movslq 0x18(%rsp), %r9
movslq 0x14(%rsp), %rax
movslq 0x10(%rsp), %r10
subq $0x8, %rsp
leaq 0xe8(%rsp), %r11
leaq 0x148(%rsp), %rdi
leaq 0x190(%rsp), %rsi
leaq 0x240(%rsp), %rdx
movq 0x160(%rsp), %rcx
pushq %r12
pushq %r14
pushq %r11
pushq %rbx
leaq 0x188(%rsp), %r11
pushq %r11
leaq 0xd0(%rsp), %r11
pushq %r11
leaq 0x158(%rsp), %r11
pushq %r11
pushq %r10
pushq %rax
callq 0x7c6d
addq $0x50, %rsp
testb %al, %al
je 0xa392
movq 0x6acb3(%rip), %rdi     # 0x74fc0
leaq 0x4583e(%rip), %rsi     # 0x4fb52
callq 0x4310
movq 0x148(%rsp), %rsi
subq 0x140(%rsp), %rsi
movq %rax, %rdi
callq 0x4250
leaq 0x45940(%rip), %rsi     # 0x4fc78
movq %rax, %rdi
callq 0x4310
movq 0x140(%rsp), %rdx
movq 0x148(%rsp), %rcx
movq 0x180(%rsp), %rdi
xorl %esi, %esi
callq *0x18(%rdi)
movb $0x1, %bl
testl %eax, %eax
jne 0x9f11
leaq 0x45d61(%rip), %rdi     # 0x500cf
jmp 0x9f0a
movq 0x6ac46(%rip), %rdi     # 0x74fc0
leaq 0x45899(%rip), %rsi     # 0x4fc1a
callq 0x4310
leaq 0x45bc7(%rip), %rdi     # 0x4ff54
jmp 0x9f0a
leaq 0x45c02(%rip), %rdi     # 0x4ff9b
jmp 0x9f0a
jmp 0xa3a4
jmp 0xa3a4
jmp 0xa3a4
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x90f0
jmp 0xa3b8
jmp 0xa3b5
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0x90f0
leaq 0x160(%rsp), %rdi
callq 0x90f0
leaq 0xa0(%rsp), %rdi
callq 0x90f0
leaq 0x100(%rsp), %rdi
callq 0x90f0
leaq 0xc0(%rsp), %rdi
callq 0x90f0
leaq 0x120(%rsp), %rdi
callq 0x90f0
leaq 0x140(%rsp), %rdi
callq 0x8b88
leaq 0xe0(%rsp), %rdi
callq 0x8b88
leaq 0x40(%rsp), %rdi
callq 0x8b88
leaq 0x20(%rsp), %rdi
callq 0x8b88
movq %rbx, %rdi
callq 0x4600