// File: zeeev[P]DASVC/bamtools/src/toolkit/bamtools_filter.cpp
// Function: BamTools::BamAlignmentChecker::check(BamTools::PropertyFilter const&, BamTools::BamAlignment const&)
bool check(const PropertyFilter& filter, const BamAlignment& al) {
      
        bool keepAlignment = true;
        const PropertyMap& properties = filter.Properties;
        PropertyMap::const_iterator propertyIter = properties.begin();
        PropertyMap::const_iterator propertyEnd  = properties.end();
        for ( ; propertyIter != propertyEnd; ++propertyIter ) {
          
            // check alignment data field depending on propertyName
            const string& propertyName = (*propertyIter).first;
            const PropertyFilterValue& valueFilter = (*propertyIter).second;
            
            if      ( propertyName == ALIGNMENTFLAG_PROPERTY )  keepAlignment &= valueFilter.check(al.AlignmentFlag);
            else if ( propertyName == CIGAR_PROPERTY ) {
                stringstream cigarSs;
                const vector<CigarOp>& cigarData = al.CigarData;
                if ( !cigarData.empty() ) {
                    vector<CigarOp>::const_iterator cigarBegin = cigarData.begin();
                    vector<CigarOp>::const_iterator cigarIter = cigarBegin;
                    vector<CigarOp>::const_iterator cigarEnd  = cigarData.end();
                    for ( ; cigarIter != cigarEnd; ++cigarIter ) {
                        const CigarOp& op = (*cigarIter);
                        cigarSs << op.Length << op.Type;
                    }
                    keepAlignment &= valueFilter.check(cigarSs.str());
                }
            }
            else if ( propertyName == INSERTSIZE_PROPERTY )           keepAlignment &= valueFilter.check(al.InsertSize);
            else if ( propertyName == ISDUPLICATE_PROPERTY )          keepAlignment &= valueFilter.check(al.IsDuplicate());
            else if ( propertyName == ISFAILEDQC_PROPERTY )           keepAlignment &= valueFilter.check(al.IsFailedQC());
            else if ( propertyName == ISFIRSTMATE_PROPERTY )          keepAlignment &= valueFilter.check(al.IsFirstMate());
            else if ( propertyName == ISMAPPED_PROPERTY )             keepAlignment &= valueFilter.check(al.IsMapped());
            else if ( propertyName == ISMATEMAPPED_PROPERTY )         keepAlignment &= valueFilter.check(al.IsMateMapped());
            else if ( propertyName == ISMATEREVERSESTRAND_PROPERTY )  keepAlignment &= valueFilter.check(al.IsMateReverseStrand());
            else if ( propertyName == ISPAIRED_PROPERTY )             keepAlignment &= valueFilter.check(al.IsPaired());
            else if ( propertyName == ISPRIMARYALIGNMENT_PROPERTY )   keepAlignment &= valueFilter.check(al.IsPrimaryAlignment());
            else if ( propertyName == ISPROPERPAIR_PROPERTY )         keepAlignment &= valueFilter.check(al.IsProperPair());
            else if ( propertyName == ISREVERSESTRAND_PROPERTY )      keepAlignment &= valueFilter.check(al.IsReverseStrand());
            else if ( propertyName == ISSECONDMATE_PROPERTY )         keepAlignment &= valueFilter.check(al.IsSecondMate());
            else if ( propertyName == ISSINGLETON_PROPERTY ) {
                const bool isSingleton = al.IsPaired() && al.IsMapped() && !al.IsMateMapped();
                keepAlignment &= valueFilter.check(isSingleton);
            }
            else if ( propertyName == LENGTH_PROPERTY )               keepAlignment &= valueFilter.check(al.Length);
            else if ( propertyName == MAPQUALITY_PROPERTY )           keepAlignment &= valueFilter.check(al.MapQuality);
            else if ( propertyName == MATEPOSITION_PROPERTY )         keepAlignment &= ( al.IsPaired() && al.IsMateMapped() && valueFilter.check(al.MateRefID) );
            else if ( propertyName == MATEREFERENCE_PROPERTY ) {
                if ( !al.IsPaired() || !al.IsMateMapped() ) return false;
                BAMTOOLS_ASSERT_MESSAGE( (al.MateRefID>=0 && (al.MateRefID<(int)filterToolReferences.size())), "Invalid MateRefID");
                const string& refName = filterToolReferences.at(al.MateRefID).RefName;
                keepAlignment &= valueFilter.check(refName);
            }
            else if ( propertyName == NAME_PROPERTY )                 keepAlignment &= valueFilter.check(al.Name);
            else if ( propertyName == POSITION_PROPERTY )             keepAlignment &= valueFilter.check(al.Position);
            else if ( propertyName == QUERYBASES_PROPERTY )           keepAlignment &= valueFilter.check(al.QueryBases);
            else if ( propertyName == REFERENCE_PROPERTY ) {
                BAMTOOLS_ASSERT_MESSAGE( (al.RefID>=0 && (al.RefID<(int)filterToolReferences.size())), "Invalid RefID");
                const string& refName = filterToolReferences.at(al.RefID).RefName;
                keepAlignment &= valueFilter.check(refName);
            }
            else if ( propertyName == TAG_PROPERTY ) keepAlignment &= checkAlignmentTag(valueFilter, al);
            else BAMTOOLS_ASSERT_UNREACHABLE;
            
            // if alignment fails at ANY point, just quit and return false
            if ( !keepAlignment ) return false;
        }
      
        BAMTOOLS_ASSERT_MESSAGE( keepAlignment, "Error in BamAlignmentChecker... keepAlignment should be true here");
        return keepAlignment;
    }

// Assembly:
subq $0x2f8, %rsp            # imm = 0x2F8
movq %rdi, 0x2e8(%rsp)
movq %rsi, 0x2e0(%rsp)
movq %rdx, 0x2d8(%rsp)
movq 0x2e8(%rsp), %rax
movq %rax, 0xa0(%rsp)
movb $0x1, 0x2d7(%rsp)
movq 0x2e0(%rsp), %rax
movq %rax, 0x2c8(%rsp)
movq 0x2c8(%rsp), %rdi
callq 0xb99e0
movq %rax, 0x2c0(%rsp)
movq 0x2c8(%rsp), %rdi
callq 0xb9a10
movq %rax, 0x2b8(%rsp)
leaq 0x2c0(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0xb9a40
testb $0x1, %al
jne 0xafb4f
jmp 0xb086c
leaq 0x2c0(%rsp), %rdi
callq 0xb9a60
movq %rax, 0x2b0(%rsp)
leaq 0x2c0(%rsp), %rdi
callq 0xb9a60
addq $0x20, %rax
movq %rax, 0x2a8(%rsp)
movq 0x2b0(%rsp), %rdi
leaq 0xb5d4c(%rip), %rsi     # 0x1658d8
callq 0x91630
testb $0x1, %al
jne 0xafb97
jmp 0xafbda
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
addq $0xb4, %rsi
callq 0xb9a80
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0844
movq 0x2b0(%rsp), %rdi
leaq 0xb5d0f(%rip), %rsi     # 0x1658f8
callq 0x91630
testb $0x1, %al
jne 0xafbf7
jmp 0xafe05
leaq 0x120(%rsp), %rdi
callq 0x86520
movq 0x2d8(%rsp), %rax
addq $0xb8, %rax
movq %rax, 0x118(%rsp)
movq 0x118(%rsp), %rdi
callq 0x91740
movb %al, 0x9f(%rsp)
jmp 0xafc30
movb 0x9f(%rsp), %al
testb $0x1, %al
jne 0xafddf
jmp 0xafc41
movq 0x118(%rsp), %rdi
callq 0x91790
movq %rax, 0x90(%rsp)
jmp 0xafc58
movq 0x90(%rsp), %rax
movq %rax, 0x100(%rsp)
movq 0x100(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq 0x118(%rsp), %rdi
callq 0x917c0
movq %rax, 0x88(%rsp)
jmp 0xafc8f
movq 0x88(%rsp), %rax
movq %rax, 0xf0(%rsp)
leaq 0xf8(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0x917f0
movb %al, 0x87(%rsp)
jmp 0xafcbd
movb 0x87(%rsp), %al
testb $0x1, %al
jne 0xafccd
jmp 0xafd53
leaq 0xf8(%rsp), %rdi
callq 0x91830
movq %rax, 0x78(%rsp)
jmp 0xafce1
movq 0x78(%rsp), %rax
movq %rax, 0xe8(%rsp)
leaq 0x130(%rsp), %rdi
movq 0xe8(%rsp), %rax
movl 0x4(%rax), %esi
callq 0x869c0
movq %rax, 0x70(%rsp)
jmp 0xafd0d
movq 0x70(%rsp), %rdi
movq 0xe8(%rsp), %rax
movsbl (%rax), %esi
callq 0x86890
jmp 0xafd24
jmp 0xafd26
leaq 0xf8(%rsp), %rdi
callq 0x91840
jmp 0xafd35
jmp 0xafc9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x110(%rsp)
movl %eax, 0x10c(%rsp)
jmp 0xafdf1
movq 0x2a8(%rsp), %rax
movq %rax, 0x68(%rsp)
leaq 0xc8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x866f0
jmp 0xafd77
movq 0x68(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0xb9c50
movb %al, 0x67(%rsp)
jmp 0xafd8f
movb 0x67(%rsp), %al
movzbl %al, %eax
movzbl 0x2d7(%rsp), %ecx
andl %ecx, %eax
andb $0x1, %al
movb %al, 0x2d7(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x86f68
jmp 0xafdb8
jmp 0xafddf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x110(%rsp)
movl %eax, 0x10c(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x86f68
jmp 0xafddd
jmp 0xafdf1
leaq 0x120(%rsp), %rdi
callq 0x86580
jmp 0xb0842
leaq 0x120(%rsp), %rdi
callq 0x86580
jmp 0xafe00
jmp 0xb0892
movq 0x2b0(%rsp), %rdi
leaq 0xb5b04(%rip), %rsi     # 0x165918
callq 0x91630
testb $0x1, %al
jne 0xafe1f
jmp 0xafe62
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
addq $0xd8, %rsi
callq 0xb9e20
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0840
movq 0x2b0(%rsp), %rdi
leaq 0xb5ac7(%rip), %rsi     # 0x165938
callq 0x91630
testb $0x1, %al
jne 0xafe7c
jmp 0xafed8
movq 0x2a8(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86e20
movq 0x58(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc7(%rsp)
leaq 0xc7(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb083e
movq 0x2b0(%rsp), %rdi
leaq 0xb5a71(%rip), %rsi     # 0x165958
callq 0x91630
testb $0x1, %al
jne 0xafef2
jmp 0xaff4e
movq 0x2a8(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x867c0
movq 0x50(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc6(%rsp)
leaq 0xc6(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb083c
movq 0x2b0(%rsp), %rdi
leaq 0xb5a1b(%rip), %rsi     # 0x165978
callq 0x91630
testb $0x1, %al
jne 0xaff68
jmp 0xaffc4
movq 0x2a8(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86340
movq 0x48(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc5(%rsp)
leaq 0xc5(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb083a
movq 0x2b0(%rsp), %rdi
leaq 0xb59c5(%rip), %rsi     # 0x165998
callq 0x91630
testb $0x1, %al
jne 0xaffde
jmp 0xb003a
movq 0x2a8(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x860f0
movq 0x40(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc4(%rsp)
leaq 0xc4(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0838
movq 0x2b0(%rsp), %rdi
leaq 0xb596f(%rip), %rsi     # 0x1659b8
callq 0x91630
testb $0x1, %al
jne 0xb0054
jmp 0xb00b0
movq 0x2a8(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86880
movq 0x38(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc3(%rsp)
leaq 0xc3(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0836
movq 0x2b0(%rsp), %rdi
leaq 0xb5919(%rip), %rsi     # 0x1659d8
callq 0x91630
testb $0x1, %al
jne 0xb00ca
jmp 0xb0126
movq 0x2a8(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86a80
movq 0x30(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc2(%rsp)
leaq 0xc2(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0834
movq 0x2b0(%rsp), %rdi
leaq 0xb58c3(%rip), %rsi     # 0x1659f8
callq 0x91630
testb $0x1, %al
jne 0xb0140
jmp 0xb019c
movq 0x2a8(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x863d0
movq 0x28(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc1(%rsp)
leaq 0xc1(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0832
movq 0x2b0(%rsp), %rdi
leaq 0xb586d(%rip), %rsi     # 0x165a18
callq 0x91630
testb $0x1, %al
jne 0xb01b6
jmp 0xb0212
movq 0x2a8(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86560
movq 0x20(%rsp), %rdi
andb $0x1, %al
movb %al, 0xc0(%rsp)
leaq 0xc0(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0830
movq 0x2b0(%rsp), %rdi
leaq 0xb5817(%rip), %rsi     # 0x165a38
callq 0x91630
testb $0x1, %al
jne 0xb022c
jmp 0xb0288
movq 0x2a8(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86ec0
movq 0x18(%rsp), %rdi
andb $0x1, %al
movb %al, 0xbf(%rsp)
leaq 0xbf(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb082e
movq 0x2b0(%rsp), %rdi
leaq 0xb57c1(%rip), %rsi     # 0x165a58
callq 0x91630
testb $0x1, %al
jne 0xb02a2
jmp 0xb02fe
movq 0x2a8(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86a40
movq 0x10(%rsp), %rdi
andb $0x1, %al
movb %al, 0xbe(%rsp)
leaq 0xbe(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb082c
movq 0x2b0(%rsp), %rdi
leaq 0xb576b(%rip), %rsi     # 0x165a78
callq 0x91630
testb $0x1, %al
jne 0xb0318
jmp 0xb0374
movq 0x2a8(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0x86df0
movq 0x8(%rsp), %rdi
andb $0x1, %al
movb %al, 0xbd(%rsp)
leaq 0xbd(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb082a
movq 0x2b0(%rsp), %rdi
leaq 0xb5715(%rip), %rsi     # 0x165a98
callq 0x91630
testb $0x1, %al
jne 0xb0391
jmp 0xb0425
movq 0x2d8(%rsp), %rdi
callq 0x863d0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x7(%rsp)
jne 0xb03ad
jmp 0xb03dc
movq 0x2d8(%rsp), %rdi
callq 0x860f0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x7(%rsp)
jne 0xb03c9
jmp 0xb03dc
movq 0x2d8(%rsp), %rdi
callq 0x86880
xorb $-0x1, %al
movb %al, 0x7(%rsp)
movb 0x7(%rsp), %al
andb $0x1, %al
movb %al, 0xbc(%rsp)
movq 0x2a8(%rsp), %rdi
leaq 0xbc(%rsp), %rsi
callq 0xb9ff0
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0828
movq 0x2b0(%rsp), %rdi
leaq 0xb5684(%rip), %rsi     # 0x165ab8
callq 0x91630
testb $0x1, %al
jne 0xb043f
jmp 0xb047f
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
addq $0x20, %rsi
callq 0xb9e20
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0826
movq 0x2b0(%rsp), %rdi
leaq 0xb564a(%rip), %rsi     # 0x165ad8
callq 0x91630
testb $0x1, %al
jne 0xb0499
jmp 0xb04dc
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
addq $0xb2, %rsi
callq 0xba210
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0824
movq 0x2b0(%rsp), %rdi
leaq 0xb560d(%rip), %rsi     # 0x165af8
callq 0x91630
testb $0x1, %al
jne 0xb04f9
jmp 0xb057c
movq 0x2d8(%rsp), %rdi
callq 0x863d0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x6(%rsp)
jne 0xb0515
jmp 0xb0551
movq 0x2d8(%rsp), %rdi
callq 0x86880
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x6(%rsp)
jne 0xb0531
jmp 0xb0551
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
addq $0xd0, %rsi
callq 0xb9e20
movb %al, 0x6(%rsp)
movb 0x6(%rsp), %al
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0822
movq 0x2b0(%rsp), %rdi
leaq 0xb558d(%rip), %rsi     # 0x165b18
callq 0x91630
testb $0x1, %al
jne 0xb0599
jmp 0xb062e
movq 0x2d8(%rsp), %rdi
callq 0x863d0
testb $0x1, %al
jne 0xb05ac
jmp 0xb05bd
movq 0x2d8(%rsp), %rdi
callq 0x86880
testb $0x1, %al
jne 0xb05ca
movb $0x0, 0x2f7(%rsp)
jmp 0xb0881
callq 0xafa50
movq 0x2d8(%rsp), %rax
movslq 0xd0(%rax), %rsi
leaq 0xb5633(%rip), %rdi     # 0x165c18
callq 0x916c0
movq %rax, 0xb0(%rsp)
movq 0x2a8(%rsp), %rdi
movq 0xb0(%rsp), %rsi
callq 0xb9c50
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0820
movq 0x2b0(%rsp), %rdi
leaq 0xb54fb(%rip), %rsi     # 0x165b38
callq 0x91630
testb $0x1, %al
jne 0xb0648
jmp 0xb0684
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
callq 0xb9c50
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb081e
movq 0x2b0(%rsp), %rdi
leaq 0xb54c5(%rip), %rsi     # 0x165b58
callq 0x91630
testb $0x1, %al
jne 0xb069e
jmp 0xb06e1
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
addq $0xac, %rsi
callq 0xb9e20
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb081c
movq 0x2b0(%rsp), %rdi
leaq 0xb5488(%rip), %rsi     # 0x165b78
callq 0x91630
testb $0x1, %al
jne 0xb06fb
jmp 0xb073b
movq 0x2a8(%rsp), %rdi
movq 0x2d8(%rsp), %rsi
addq $0x28, %rsi
callq 0xb9c50
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb081a
movq 0x2b0(%rsp), %rdi
leaq 0xb544e(%rip), %rsi     # 0x165b98
callq 0x91630
testb $0x1, %al
jne 0xb0755
jmp 0xb07b6
callq 0xafa50
movq 0x2d8(%rsp), %rax
movslq 0xa8(%rax), %rsi
leaq 0xb54a8(%rip), %rdi     # 0x165c18
callq 0x916c0
movq %rax, 0xa8(%rsp)
movq 0x2a8(%rsp), %rdi
movq 0xa8(%rsp), %rsi
callq 0xb9c50
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0818
movq 0x2b0(%rsp), %rdi
leaq 0xb53f3(%rip), %rsi     # 0x165bb8
callq 0x91630
testb $0x1, %al
jne 0xb07d0
jmp 0xb0811
movq 0xa0(%rsp), %rdi
movq 0x2a8(%rsp), %rsi
movq 0x2d8(%rsp), %rdx
callq 0xba400
andb $0x1, %al
movzbl %al, %ecx
movb 0x2d7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x2d7(%rsp)
jmp 0xb0816
callq 0xafa50
jmp 0xb0818
jmp 0xb081a
jmp 0xb081c
jmp 0xb081e
jmp 0xb0820
jmp 0xb0822
jmp 0xb0824
jmp 0xb0826
jmp 0xb0828
jmp 0xb082a
jmp 0xb082c
jmp 0xb082e
jmp 0xb0830
jmp 0xb0832
jmp 0xb0834
jmp 0xb0836
jmp 0xb0838
jmp 0xb083a
jmp 0xb083c
jmp 0xb083e
jmp 0xb0840
jmp 0xb0842
jmp 0xb0844
testb $0x1, 0x2d7(%rsp)
jne 0xb0858
movb $0x0, 0x2f7(%rsp)
jmp 0xb0881
jmp 0xb085a
leaq 0x2c0(%rsp), %rdi
callq 0xbad00
jmp 0xafb31
callq 0xafa50
movb 0x2d7(%rsp), %al
andb $0x1, %al
movb %al, 0x2f7(%rsp)
movb 0x2f7(%rsp), %al
andb $0x1, %al
addq $0x2f8, %rsp            # imm = 0x2F8
retq
movq 0x110(%rsp), %rdi
callq 0x86d80
movq %rax, %rdi
callq 0x91290
nopw (%rax,%rax)