// File: /workspace/github_c_makefile_star2_O3/nh13[P]ksw/src/parasail/src/sg_trace_scan_avx2_256_8.c
// Function: parasail_sg_flags_trace_scan_profile_avx2_256_8
parasail_result_t* PNAME(
        const parasail_profile_t * const restrict profile,
        const char * const restrict s2, const int s2Len,
        const int open, const int gap,
        int s1_beg, int s1_end, int s2_beg, int s2_end)
{
    /* declare local variables */
    int32_t i = 0;
    int32_t j = 0;
    int32_t k = 0;
    int32_t s1Len = 0;
    int32_t end_query = 0;
    int32_t end_ref = 0;
    const parasail_matrix_t *matrix = NULL;
    int32_t segWidth = 0;
    int32_t segLen = 0;
    int32_t offset = 0;
    int32_t position = 0;
    __m256i* restrict pvP = NULL;
    __m256i* restrict pvE = NULL;
    int8_t* restrict boundary = NULL;
    __m256i* restrict pvHt = NULL;
    __m256i* restrict pvH = NULL;
    __m256i* restrict pvGapper = NULL;
    __m256i vGapO;
    __m256i vGapE;
    int8_t NEG_LIMIT = 0;
    int8_t POS_LIMIT = 0;
    __m256i vZero;
    int8_t score = 0;
    __m256i vNegLimit;
    __m256i vPosLimit;
    __m256i vSaturationCheckMin;
    __m256i vSaturationCheckMax;
    __m256i vMaxH;
    __m256i vPosMask;
    __m256i vNegInfFront;
    __m256i vSegLenXgap;
    parasail_result_t *result = NULL;
    __m256i vTIns;
    __m256i vTDel;
    __m256i vTDiag;
    __m256i vTDiagE;
    __m256i vTInsE;
    __m256i vTDiagF;
    __m256i vTDelF;

    /* validate inputs */
    PARASAIL_CHECK_NULL(profile);
    PARASAIL_CHECK_NULL(profile->profile8.score);
    PARASAIL_CHECK_NULL(profile->matrix);
    PARASAIL_CHECK_GT0(profile->s1Len);
    PARASAIL_CHECK_NULL(s2);
    PARASAIL_CHECK_GT0(s2Len);
    PARASAIL_CHECK_GE0(open);
    PARASAIL_CHECK_GE0(gap);

    /* initialize stack variables */
    i = 0;
    j = 0;
    k = 0;
    s1Len = profile->s1Len;
    end_query = s1Len-1;
    end_ref = s2Len-1;
    matrix = profile->matrix;
    segWidth = 32; /* number of values in vector unit */
    segLen = (s1Len + segWidth - 1) / segWidth;
    offset = (s1Len - 1) % segLen;
    position = (segWidth - 1) - (s1Len - 1) / segLen;
    pvP = (__m256i*)profile->profile8.score;
    vGapO = _mm256_set1_epi8(open);
    vGapE = _mm256_set1_epi8(gap);
    NEG_LIMIT = (-open < matrix->min ? INT8_MIN + open : INT8_MIN - matrix->min) + 1;
    POS_LIMIT = INT8_MAX - matrix->max - 1;
    vZero = _mm256_setzero_si256();
    score = NEG_LIMIT;
    vNegLimit = _mm256_set1_epi8(NEG_LIMIT);
    vPosLimit = _mm256_set1_epi8(POS_LIMIT);
    vSaturationCheckMin = vPosLimit;
    vSaturationCheckMax = vNegLimit;
    vMaxH = vNegLimit;
    vPosMask = _mm256_cmpeq_epi8(_mm256_set1_epi8(position),
            _mm256_set_epi8(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31));
    vNegInfFront = vZero;
    vNegInfFront = _mm256_insert_epi8_rpl(vNegInfFront, NEG_LIMIT, 0);
    vSegLenXgap = _mm256_adds_epi8(vNegInfFront,
            _mm256_slli_si256_rpl(_mm256_set1_epi8(-segLen*gap), 1));
    vTIns  = _mm256_set1_epi8(PARASAIL_INS);
    vTDel  = _mm256_set1_epi8(PARASAIL_DEL);
    vTDiag = _mm256_set1_epi8(PARASAIL_DIAG);
    vTDiagE= _mm256_set1_epi8(PARASAIL_DIAG_E);
    vTInsE = _mm256_set1_epi8(PARASAIL_INS_E);
    vTDiagF= _mm256_set1_epi8(PARASAIL_DIAG_F);
    vTDelF = _mm256_set1_epi8(PARASAIL_DEL_F);

    /* initialize result */
    result = parasail_result_new_trace(segLen, s2Len, 32, sizeof(__m256i));
    if (!result) return NULL;

    /* set known flags */
    result->flag |= PARASAIL_FLAG_SG | PARASAIL_FLAG_SCAN
        | PARASAIL_FLAG_TRACE
        | PARASAIL_FLAG_BITS_8 | PARASAIL_FLAG_LANES_32;
    result->flag |= s1_beg ? PARASAIL_FLAG_SG_S1_BEG : 0;
    result->flag |= s1_end ? PARASAIL_FLAG_SG_S1_END : 0;
    result->flag |= s2_beg ? PARASAIL_FLAG_SG_S2_BEG : 0;
    result->flag |= s2_end ? PARASAIL_FLAG_SG_S2_END : 0;

    /* initialize heap variables */
    pvE = parasail_memalign___m256i(32, segLen);
    boundary = parasail_memalign_int8_t(32, s2Len+1);
    pvHt= parasail_memalign___m256i(32, segLen);
    pvH = parasail_memalign___m256i(32, segLen);
    pvGapper = parasail_memalign___m256i(32, segLen);

    /* validate heap variables */
    if (!pvE) return NULL;
    if (!boundary) return NULL;
    if (!pvHt) return NULL;
    if (!pvH) return NULL;
    if (!pvGapper) return NULL;

    /* initialize H and E */
    {
        int32_t index = 0;
        for (i=0; i<segLen; ++i) {
            int32_t segNum = 0;
            __m256i_8_t h;
            __m256i_8_t e;
            for (segNum=0; segNum<segWidth; ++segNum) {
                int64_t tmp = s1_beg ? 0 : (-open-gap*(segNum*segLen+i));
                h.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
                tmp = tmp - open;
                e.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
            }
            _mm256_store_si256(&pvH[index], h.m);
            _mm256_store_si256(&pvE[index], e.m);
            ++index;
        }
    }

    /* initialize uppder boundary */
    {
        boundary[0] = 0;
        for (i=1; i<=s2Len; ++i) {
            int64_t tmp = s2_beg ? 0 : (-open-gap*(i-1));
            boundary[i] = tmp < INT8_MIN ? INT8_MIN : tmp;
        }
    }

    {
        __m256i vGapper = _mm256_subs_epi8(vZero,vGapO);
        for (i=segLen-1; i>=0; --i) {
            _mm256_store_si256(pvGapper+i, vGapper);
            vGapper = _mm256_subs_epi8(vGapper, vGapE);
            /* long queries and/or large penalties will break the pseudo prefix scan */
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vGapper);
        }
    }

    /* outer loop over database sequence */
    for (j=0; j<s2Len; ++j) {
        __m256i vE;
        __m256i vE_ext;
        __m256i vE_opn;
        __m256i vHt;
        __m256i vF;
        __m256i vF_ext;
        __m256i vF_opn;
        __m256i vH;
        __m256i vHp;
        __m256i *pvW;
        __m256i vW;
        __m256i case1;
        __m256i case2;
        __m256i vGapper;
        __m256i vT;
        __m256i vET;
        __m256i vFT;

        /* calculate E */
        /* calculate Ht */
        /* calculate F and H first pass */
        vHp = _mm256_load_si256(pvH+(segLen-1));
        vHp = _mm256_slli_si256_rpl(vHp, 1);
        vHp = _mm256_insert_epi8_rpl(vHp, boundary[j], 0);
        pvW = pvP + matrix->mapper[(unsigned char)s2[j]]*segLen;
        vHt = _mm256_subs_epi8(vNegLimit, pvGapper[0]);
        vF = vNegLimit;
        for (i=0; i<segLen; ++i) {
            vH = _mm256_load_si256(pvH+i);
            vE = _mm256_load_si256(pvE+i);
            vW = _mm256_load_si256(pvW+i);
            vGapper = _mm256_load_si256(pvGapper+i);
            vE_opn = _mm256_subs_epi8(vH, vGapO);
            vE_ext = _mm256_subs_epi8(vE, vGapE);
            case1 = _mm256_cmpgt_epi8(vE_opn, vE_ext);
            vET = _mm256_blendv_epi8(vTInsE, vTDiagE, case1);
            arr_store(result->trace->trace_table, vET, i, segLen, j);
            vE = _mm256_max_epi8(vE_opn, vE_ext);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vE);
            vGapper = _mm256_adds_epi8(vHt, vGapper);
            vF = _mm256_max_epi8(vF, vGapper);
            vHp = _mm256_adds_epi8(vHp, vW);
            vHt = _mm256_max_epi8(vE, vHp);
            _mm256_store_si256(pvE+i, vE);
            _mm256_store_si256(pvHt+i, vHt);
            _mm256_store_si256(pvH+i, vHp);
            vHp = vH;
        }

        /* pseudo prefix scan on F and H */
        vHt = _mm256_slli_si256_rpl(vHt, 1);
        vHt = _mm256_insert_epi8_rpl(vHt, boundary[j+1], 0);
        vGapper = _mm256_load_si256(pvGapper);
        vGapper = _mm256_adds_epi8(vHt, vGapper);
        vF = _mm256_max_epi8(vF, vGapper);
        for (i=0; i<segWidth-2; ++i) {
            __m256i vFt = _mm256_slli_si256_rpl(vF, 1);
            vFt = _mm256_adds_epi8(vFt, vSegLenXgap);
            vF = _mm256_max_epi8(vF, vFt);
        }

        /* calculate final H */
        vF = _mm256_slli_si256_rpl(vF, 1);
        vF = _mm256_adds_epi8(vF, vNegInfFront);
        vH = _mm256_max_epi8(vF, vHt);
        for (i=0; i<segLen; ++i) {
            vET = arr_load(result->trace->trace_table, i, segLen, j);
            vHp = _mm256_load_si256(pvH+i);
            vHt = _mm256_load_si256(pvHt+i);
            vF_opn = _mm256_subs_epi8(vH, vGapO);
            vF_ext = _mm256_subs_epi8(vF, vGapE);
            vF = _mm256_max_epi8(vF_opn, vF_ext);
            case1 = _mm256_cmpgt_epi8(vF_opn, vF_ext);
            vFT = _mm256_blendv_epi8(vTDelF, vTDiagF, case1);
            vH = _mm256_max_epi8(vHt, vF);
            case1 = _mm256_cmpeq_epi8(vH, vHp);
            case2 = _mm256_cmpeq_epi8(vH, vF);
            vT = _mm256_blendv_epi8(
                    _mm256_blendv_epi8(vTIns, vTDel, case2),
                    vTDiag, case1);
            vT = _mm256_or_si256(vT, vET);
            vT = _mm256_or_si256(vT, vFT);
            arr_store(result->trace->trace_table, vT, i, segLen, j);
            _mm256_store_si256(pvH+i, vH);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vH);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vF);
            vSaturationCheckMax = _mm256_max_epi8(vSaturationCheckMax, vH);
        }

        /* extract vector containing last value from column */
        {
            __m256i vCompare;
            vH = _mm256_load_si256(pvH + offset);
            vCompare = _mm256_and_si256(vPosMask, _mm256_cmpgt_epi8(vH, vMaxH));
            vMaxH = _mm256_max_epi8(vH, vMaxH);
            if (_mm256_movemask_epi8(vCompare)) {
                end_ref = j;
            }
        }
    } 

    /* max last value from all columns */
    if (s2_end)
    {
        for (k=0; k<position; ++k) {
            vMaxH = _mm256_slli_si256_rpl(vMaxH, 1);
        }
        score = (int8_t) _mm256_extract_epi8_rpl(vMaxH, 31);
        end_query = s1Len-1;
    }

    /* max of last column */
    if (s1_end)
    {
        /* Trace the alignment ending position on read. */
        int8_t *t = (int8_t*)pvH;
        int32_t column_len = segLen * segWidth;
        for (i = 0; i<column_len; ++i, ++t) {
            int32_t temp = i / segWidth + i % segWidth * segLen;
            if (temp >= s1Len) continue;
            if (*t > score) {
                score = *t;
                end_query = temp;
                end_ref = s2Len-1;
            }
            else if (*t == score && end_ref == s2Len-1 && temp < end_query) {
                end_query = temp;
            }
        }
    }

    if (!s1_end && !s2_end) {
        /* extract last value from the last column */
        {
            __m256i vH = _mm256_load_si256(pvH + offset);
            for (k=0; k<position; ++k) {
                vH = _mm256_slli_si256_rpl(vH, 1);
            }
            score = (int8_t) _mm256_extract_epi8_rpl (vH, 31);
            end_ref = s2Len - 1;
            end_query = s1Len - 1;
        }
    }

    if (_mm256_movemask_epi8(_mm256_or_si256(
            _mm256_cmplt_epi8_rpl(vSaturationCheckMin, vNegLimit),
            _mm256_cmpgt_epi8(vSaturationCheckMax, vPosLimit)))) {
        result->flag |= PARASAIL_FLAG_SATURATED;
        score = 0;
        end_query = 0;
        end_ref = 0;
    }

    result->score = score;
    result->end_query = end_query;
    result->end_ref = end_ref;

    parasail_free(pvGapper);
    parasail_free(pvH);
    parasail_free(pvHt);
    parasail_free(boundary);
    parasail_free(pvE);

    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2f8, %rsp            # imm = 0x2F8
movq %rsi, 0x68(%rsp)
testq %rdi, %rdi
je 0x5af9a7
movq 0x18(%rdi), %rax
movq %rax, 0xa8(%rsp)
testq %rax, %rax
je 0x5af9ae
movq 0x10(%rdi), %rax
movq %rax, 0x60(%rsp)
testq %rax, %rax
je 0x5af9b5
movl %ecx, %r13d
movl 0x8(%rdi), %ecx
testl %ecx, %ecx
jle 0x5af9bc
cmpq $0x0, 0x68(%rsp)
je 0x5af9c3
movl %r9d, %r15d
movl %edx, %r9d
testl %edx, %edx
jle 0x5af9ca
testl %r13d, %r13d
js 0x5af9d1
testl %r8d, %r8d
js 0x5af9d8
movl %r8d, 0x28(%rsp)
leal -0x1(%rcx), %eax
movq %rcx, 0x98(%rsp)
leaq 0x1f(%rcx), %r14
movq %r14, %r12
shrq $0x5, %r12
movl %eax, 0x2c(%rsp)
xorl %edx, %edx
divl %r12d
movl %eax, 0x10(%rsp)
movl %edx, %ebp
movq 0x60(%rsp), %rdx
movl 0x20(%rdx), %eax
movl %eax, %ecx
negb %cl
movzbl %cl, %ecx
movl %r13d, %esi
negl %esi
movl %esi, 0x1c(%rsp)
cmpl %esi, %eax
cmovgl %r13d, %ecx
movl %ecx, 0x14(%rsp)
movb $0x7e, %al
subb 0x1c(%rdx), %al
movl %eax, 0x30(%rsp)
movl $0x20, %edx
movl $0x20, %ecx
movl %r12d, %edi
movl %r9d, %esi
movq %r9, 0x58(%rsp)
callq 0x20adf4
testq %rax, %rax
je 0x5af9dd
movq %rax, %rbx
movl %r13d, 0x70(%rsp)
movl %ebp, 0x20(%rsp)
movq %r14, 0x90(%rsp)
movl 0x340(%rsp), %edi
xorl %eax, %eax
testl %r15d, %r15d
setne %al
xorl %ecx, %ecx
cmpl $0x0, 0x330(%rsp)
setne %cl
shll $0x4, %ecx
xorl %edx, %edx
cmpl $0x0, 0x338(%rsp)
setne %dl
shll $0xe, %edx
xorl %esi, %esi
movl %edi, 0x24(%rsp)
testl %edi, %edi
setne %sil
shll $0xf, %esi
leal (%rcx,%rax,8), %eax
orl %edx, %eax
orl %esi, %eax
orl 0xc(%rbx), %eax
orl $0x20180402, %eax       # imm = 0x20180402
movl %eax, 0xc(%rbx)
movl $0x20, %edi
movq %r12, %rsi
callq 0x4f1904
movl %r15d, 0x110(%rsp)
movq %rax, %r15
movq 0x58(%rsp), %rax
leal 0x1(%rax), %esi
movl $0x20, %edi
callq 0x20a620
movq %rax, %r13
movl $0x20, %edi
movq %r12, %rsi
callq 0x4f1904
movq %rax, %r14
movl $0x20, %edi
movq %r12, %rsi
callq 0x4f1904
movq %rax, %rbp
movl $0x20, %edi
movq %r12, %rsi
callq 0x4f1904
testq %r15, %r15
sete %cl
testq %r13, %r13
sete %dl
orb %cl, %dl
testq %r14, %r14
sete %cl
testq %rbp, %rbp
sete %sil
orb %cl, %sil
orb %dl, %sil
testq %rax, %rax
sete %cl
orb %sil, %cl
jne 0x5af9dd
movq 0x58(%rsp), %r11
leal -0x1(%r11), %ecx
movl %ecx, 0xc(%rsp)
movl $0x1f, %edx
subl 0x10(%rsp), %edx
movl 0x70(%rsp), %esi
vmovd %esi, %xmm0
vpbroadcastb %xmm0, %ymm15
movl 0x28(%rsp), %r10d
vmovd %r10d, %xmm0
vpbroadcastb %xmm0, %ymm3
movl 0x14(%rsp), %ecx
addb $-0x7f, %cl
vmovd %ecx, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x170(%rsp)
vmovd 0x30(%rsp), %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x190(%rsp)
movl %edx, 0x18(%rsp)
vmovd %edx, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x1b0(%rsp)
movl %ecx, 0x14(%rsp)
movzbl %cl, %ecx
movl %r12d, %edx
imull %r10d, %edx
negb %dl
vmovd %edx, %xmm0
vpbroadcastb %xmm0, %ymm0
vpand 0x7f7d2(%rip), %ymm0, %ymm0 # 0x62dee0
vmovd %ecx, %xmm1
vmovdqu %ymm1, 0x2d0(%rsp)
vpaddsb %ymm0, %ymm1, %ymm0
vmovdqu %ymm0, 0x2b0(%rsp)
cmpl $0x0, 0x110(%rsp)
setne %cl
movl %esi, %edx
movl %r12d, %r8d
movl %r10d, %esi
movslq 0x1c(%rsp), %rdi
vmovq %rsi, %xmm0
vpbroadcastq %xmm0, %ymm0
vmovdqu %ymm0, 0xd0(%rsp)
vmovq %rdi, %xmm1
vpbroadcastq %xmm1, %ymm1
vmovdqu %ymm1, 0xf0(%rsp)
vmovq %rdx, %xmm1
vpbroadcastq %xmm1, %ymm1
vmovdqu %ymm1, 0xb0(%rsp)
movq %r8, 0xa0(%rsp)
vmovq %r8, %xmm1
vpbroadcastq %xmm1, %ymm1
vpmuldq 0x7f76c(%rip), %ymm1, %ymm0 # 0x62df00
vmovdqu %ymm0, 0x150(%rsp)
vpmuldq 0x7f77a(%rip), %ymm1, %ymm0 # 0x62df20
vmovdqu %ymm0, 0x130(%rsp)
vpmuldq 0x7f788(%rip), %ymm1, %ymm0 # 0x62df40
vmovdqu %ymm0, 0x290(%rsp)
vpmuldq 0x7f796(%rip), %ymm1, %ymm0 # 0x62df60
vmovdqu %ymm0, 0x270(%rsp)
vpmuldq 0x7f604(%rip), %ymm1, %ymm0 # 0x62dde0
vmovdqu %ymm0, 0x250(%rsp)
vpmuldq 0x7f612(%rip), %ymm1, %ymm0 # 0x62de00
vmovdqu %ymm0, 0x230(%rsp)
vpmuldq 0x7f440(%rip), %ymm1, %ymm0 # 0x62dc40
vmovdqu %ymm0, 0x210(%rsp)
vpmuldq 0x7f32e(%rip), %ymm1, %ymm0 # 0x62db40
vmovdqu %ymm0, 0x1f0(%rsp)
vmovd %ecx, %xmm1
vpbroadcastb %xmm1, %ymm0
vmovdqu %ymm0, 0x1d0(%rsp)
xorl %edi, %edi
movq %rbp, %r8
movq %r15, %r9
vpbroadcastq 0x7f782(%rip), %ymm8 # 0x62dfc0
vbroadcastsd 0x7f781(%rip), %ymm9 # 0x62dfc8
vmovq %rdi, %xmm1
vpbroadcastq %xmm1, %ymm6
vpaddq 0x150(%rsp), %ymm6, %ymm5
vpaddq 0x130(%rsp), %ymm6, %ymm1
vpaddq 0x290(%rsp), %ymm6, %ymm7
vpaddq 0x270(%rsp), %ymm6, %ymm11
vpaddq 0x250(%rsp), %ymm6, %ymm12
vpaddq 0x230(%rsp), %ymm6, %ymm13
vpaddq 0x1f0(%rsp), %ymm6, %ymm10
vpaddq 0x210(%rsp), %ymm6, %ymm6
vmovdqu 0xd0(%rsp), %ymm0
vpmuludq %ymm0, %ymm6, %ymm14
vpsrlq $0x20, %ymm6, %ymm6
vpmuludq %ymm0, %ymm6, %ymm6
vpsllq $0x20, %ymm6, %ymm6
vpaddq %ymm6, %ymm14, %ymm6
vpmuludq %ymm0, %ymm10, %ymm14
vpsrlq $0x20, %ymm10, %ymm10
vpmuludq %ymm0, %ymm10, %ymm10
vpsllq $0x20, %ymm10, %ymm10
vpaddq %ymm10, %ymm14, %ymm10
vpmuludq %ymm0, %ymm13, %ymm14
vpsrlq $0x20, %ymm13, %ymm13
vpmuludq %ymm0, %ymm13, %ymm13
vpsllq $0x20, %ymm13, %ymm13
vpaddq %ymm13, %ymm14, %ymm13
vpmuludq %ymm0, %ymm12, %ymm14
vpsrlq $0x20, %ymm12, %ymm12
vpmuludq %ymm0, %ymm12, %ymm12
vpsllq $0x20, %ymm12, %ymm12
vpaddq %ymm12, %ymm14, %ymm12
vpmuludq %ymm0, %ymm11, %ymm14
vpsrlq $0x20, %ymm11, %ymm11
vpmuludq %ymm0, %ymm11, %ymm11
vpsllq $0x20, %ymm11, %ymm11
vpaddq %ymm11, %ymm14, %ymm11
vpmuludq %ymm0, %ymm7, %ymm14
vpsrlq $0x20, %ymm7, %ymm7
vpmuludq %ymm0, %ymm7, %ymm7
vpsllq $0x20, %ymm7, %ymm7
vpaddq %ymm7, %ymm14, %ymm7
vpmuludq %ymm0, %ymm1, %ymm14
vpsrlq $0x20, %ymm1, %ymm1
vpmuludq %ymm0, %ymm1, %ymm1
vpsllq $0x20, %ymm1, %ymm1
vpaddq %ymm1, %ymm14, %ymm1
vpmuludq %ymm0, %ymm5, %ymm14
vpsrlq $0x20, %ymm5, %ymm5
vpmuludq %ymm0, %ymm5, %ymm5
vpsllq $0x20, %ymm5, %ymm5
vpaddq %ymm5, %ymm14, %ymm5
vmovdqu 0xf0(%rsp), %ymm4
vpsubq %ymm5, %ymm4, %ymm0
vmovdqu %ymm0, 0x110(%rsp)
vpsubq %ymm1, %ymm4, %ymm0
vmovdqu %ymm0, 0x70(%rsp)
vpsubq %ymm7, %ymm4, %ymm1
vpsubq %ymm11, %ymm4, %ymm7
vpsubq %ymm12, %ymm4, %ymm11
vpsubq %ymm13, %ymm4, %ymm2
vpsubq %ymm10, %ymm4, %ymm10
vpsubq %ymm6, %ymm4, %ymm6
vmovdqu 0x1d0(%rsp), %ymm0
vpmovsxbd 0x7f338(%rip), %xmm14 # 0x62dce4
vpshufb %xmm14, %xmm0, %xmm12
vpslld $0x1f, %xmm12, %xmm12
vpsrad $0x1f, %xmm12, %xmm12
vpmovsxdq %xmm12, %ymm12
vpandn %ymm6, %ymm12, %ymm12
vpmovzxbd %xmm0, %xmm6    # xmm6 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
vpslld $0x1f, %xmm6, %xmm6
vpsrad $0x1f, %xmm6, %xmm6
vpmovsxdq %xmm6, %ymm6
vpandn %ymm10, %ymm6, %ymm13
vpmovsxbd 0x7f640(%rip), %xmm5 # 0x62e028
vpshufb %xmm5, %xmm0, %xmm6
vpslld $0x1f, %xmm6, %xmm6
vpsrad $0x1f, %xmm6, %xmm6
vpmovsxdq %xmm6, %ymm6
vpandn %ymm2, %ymm6, %ymm2
vmovdqu %ymm2, 0x30(%rsp)
vpmovsxbd 0x7f61d(%rip), %xmm2 # 0x62e02c
vpshufb %xmm2, %xmm0, %xmm6
vpslld $0x1f, %xmm6, %xmm6
vpsrad $0x1f, %xmm6, %xmm6
vpmovsxdq %xmm6, %ymm6
vpandn %ymm11, %ymm6, %ymm11
vextracti128 $0x1, %ymm0, %xmm4
vpmovzxbd %xmm4, %xmm6    # xmm6 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero
vpslld $0x1f, %xmm6, %xmm6
vpsrad $0x1f, %xmm6, %xmm6
vpmovsxdq %xmm6, %ymm6
vpandn %ymm7, %ymm6, %ymm10
vpshufb %xmm14, %xmm4, %xmm6
vpslld $0x1f, %xmm6, %xmm6
vpsrad $0x1f, %xmm6, %xmm6
vpmovsxdq %xmm6, %ymm6
vpandn %ymm1, %ymm6, %ymm6
vpshufb %xmm5, %xmm4, %xmm1
vpslld $0x1f, %xmm1, %xmm7
vpshufb %xmm2, %xmm4, %xmm1
vpslld $0x1f, %xmm1, %xmm1
vpsrad $0x1f, %xmm1, %xmm1
vpmovsxdq %xmm1, %ymm1
vpandn 0x110(%rsp), %ymm1, %ymm14
vpcmpgtq %ymm8, %ymm14, %ymm1
vblendvpd %ymm1, %ymm14, %ymm8, %ymm1
vpsrad $0x1f, %xmm7, %xmm4
vpcmpgtq %ymm8, %ymm11, %ymm7
vblendvpd %ymm7, %ymm11, %ymm8, %ymm7
vpmovsxdq %xmm4, %ymm4
vpcmpgtq %ymm8, %ymm13, %ymm5
vblendvpd %ymm5, %ymm13, %ymm8, %ymm2
vpandn 0x70(%rsp), %ymm4, %ymm5
vpcmpgtq %ymm8, %ymm12, %ymm4
vblendvpd %ymm4, %ymm12, %ymm8, %ymm4
vandpd %ymm4, %ymm9, %ymm4
vandpd %ymm2, %ymm9, %ymm2
vpackusdw %ymm4, %ymm2, %ymm2
vmovdqu 0x30(%rsp), %ymm0
vpcmpgtq %ymm8, %ymm0, %ymm4
vblendvpd %ymm4, %ymm0, %ymm8, %ymm4
vandpd %ymm4, %ymm9, %ymm4
vandpd %ymm7, %ymm9, %ymm7
vpackusdw %ymm7, %ymm4, %ymm4
vpcmpgtq %ymm8, %ymm6, %ymm7
vblendvpd %ymm7, %ymm6, %ymm8, %ymm7
vpermq $0xd8, %ymm2, %ymm2     # ymm2 = ymm2[0,2,1,3]
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpackusdw %ymm4, %ymm2, %ymm0
vmovdqu %ymm0, 0x70(%rsp)
vpcmpgtq %ymm8, %ymm10, %ymm2
vblendvpd %ymm2, %ymm10, %ymm8, %ymm2
vandpd %ymm2, %ymm9, %ymm2
vandpd %ymm7, %ymm9, %ymm4
vpackusdw %ymm4, %ymm2, %ymm2
vpcmpgtq %ymm8, %ymm5, %ymm4
vblendvpd %ymm4, %ymm5, %ymm8, %ymm4
vandpd %ymm4, %ymm9, %ymm4
vandpd %ymm1, %ymm9, %ymm1
vpackusdw %ymm1, %ymm4, %ymm1
vpermq $0xd8, %ymm2, %ymm2     # ymm2 = ymm2[0,2,1,3]
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpackusdw %ymm1, %ymm2, %ymm7
vmovdqu 0xb0(%rsp), %ymm0
vpsubq %ymm0, %ymm12, %ymm2
vpsubq %ymm0, %ymm13, %ymm4
vpsubq %ymm0, %ymm14, %ymm1
vpcmpgtq %ymm8, %ymm1, %ymm12
vblendvpd %ymm12, %ymm1, %ymm8, %ymm1
vpsubq %ymm0, %ymm5, %ymm5
vpcmpgtq %ymm8, %ymm5, %ymm12
vblendvpd %ymm12, %ymm5, %ymm8, %ymm5
vpsubq %ymm0, %ymm6, %ymm6
vpcmpgtq %ymm8, %ymm6, %ymm12
vblendvpd %ymm12, %ymm6, %ymm8, %ymm6
vpsubq %ymm0, %ymm10, %ymm10
vpcmpgtq %ymm8, %ymm10, %ymm12
vblendvpd %ymm12, %ymm10, %ymm8, %ymm10
vpsubq %ymm0, %ymm11, %ymm11
vpcmpgtq %ymm8, %ymm11, %ymm12
vblendvpd %ymm12, %ymm11, %ymm8, %ymm11
vmovdqu 0x30(%rsp), %ymm12
vpsubq %ymm0, %ymm12, %ymm12
vpcmpgtq %ymm8, %ymm12, %ymm13
vblendvpd %ymm13, %ymm12, %ymm8, %ymm12
vpcmpgtq %ymm8, %ymm4, %ymm13
vblendvpd %ymm13, %ymm4, %ymm8, %ymm4
vpcmpgtq %ymm8, %ymm2, %ymm13
vblendvpd %ymm13, %ymm2, %ymm8, %ymm2
vpermq $0xd8, 0x70(%rsp), %ymm13 # ymm13 = mem[0,2,1,3]
vpermq $0xd8, %ymm7, %ymm7     # ymm7 = ymm7[0,2,1,3]
vpackuswb %ymm7, %ymm13, %ymm7
vandpd %ymm2, %ymm9, %ymm2
vandpd %ymm4, %ymm9, %ymm4
vpackusdw %ymm2, %ymm4, %ymm2
vandpd %ymm9, %ymm12, %ymm4
vandpd %ymm9, %ymm11, %ymm11
vpackusdw %ymm11, %ymm4, %ymm4
vpermq $0xd8, %ymm2, %ymm2     # ymm2 = ymm2[0,2,1,3]
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpackusdw %ymm4, %ymm2, %ymm2
vandpd %ymm9, %ymm10, %ymm4
vandpd %ymm6, %ymm9, %ymm6
vpackusdw %ymm6, %ymm4, %ymm4
vandpd %ymm5, %ymm9, %ymm5
vandpd %ymm1, %ymm9, %ymm1
vpackusdw %ymm1, %ymm5, %ymm1
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpackusdw %ymm1, %ymm4, %ymm1
vpermq $0xd8, %ymm7, %ymm4     # ymm4 = ymm7[0,2,1,3]
vmovdqa %ymm4, (%r8)
vpermq $0xd8, %ymm2, %ymm2     # ymm2 = ymm2[0,2,1,3]
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpackuswb %ymm1, %ymm2, %ymm1
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vmovdqa %ymm1, (%r9)
incq %rdi
addq $0x20, %r9
addq $0x20, %r8
cmpq %rdi, %r12
jne 0x5ae847
movb $0x0, (%r13)
movl %r11d, %ecx
addl $0x1f, %r11d
andl $-0x20, %r11d
movq %rcx, 0x110(%rsp)
decq %rcx
vmovq %rcx, %xmm0
vpbroadcastq %xmm0, %ymm7
vmovd %r10d, %xmm0
vpbroadcastd %xmm0, %ymm0
vmovdqu %ymm0, 0xb0(%rsp)
vmovss 0x1c(%rsp), %xmm0
vbroadcastss %xmm0, %ymm0
vmovups %ymm0, 0xd0(%rsp)
vpmovsxbd 0x7f300(%rip), %ymm8 # 0x62dfd0
vpmovsxbd 0x7f347(%rip), %ymm11 # 0x62e020
vpmovsxbd 0x7f166(%rip), %ymm12 # 0x62de48
vpmovsxbd 0x7efe5(%rip), %ymm13 # 0x62dcd0
xorl %r8d, %r8d
vpbroadcastq 0x7ee89(%rip), %xmm14 # 0x62db80
vpcmpeqd %xmm2, %xmm2, %xmm2
vpcmpeqd %ymm10, %ymm10, %ymm10
vbroadcastss 0x7f2cf(%rip), %ymm0 # 0x62dfd8
vmovups %ymm0, 0x150(%rsp)
vbroadcastss 0x7f2c1(%rip), %ymm0 # 0x62dfdc
vmovups %ymm0, 0x130(%rsp)
vpbroadcastq 0x7ee53(%rip), %ymm0 # 0x62db80
vbroadcastss 0x7ee8a(%rip), %xmm1 # 0x62dbc0
vmovups %ymm1, 0x30(%rsp)
vpbroadcastd 0x7f29b(%rip), %ymm1 # 0x62dfe0
vmovdqu %ymm1, 0xf0(%rsp)
movl 0x338(%rsp), %esi
testl %esi, %esi
vmovdqu %ymm8, 0x70(%rsp)
je 0x5aed69
vpxor %xmm8, %xmm8, %xmm8
jmp 0x5aee0f
vpcmpeqd %ymm6, %ymm6, %ymm6
vpaddd %ymm6, %ymm13, %ymm1
vpaddd %ymm6, %ymm12, %ymm4
vpaddd %ymm6, %ymm11, %ymm5
vpcmpeqd %ymm10, %ymm10, %ymm10
vpaddd %ymm6, %ymm8, %ymm8
vmovdqu 0xb0(%rsp), %ymm6
vpmulld %ymm6, %ymm8, %ymm8
vpmulld %ymm6, %ymm5, %ymm5
vpmulld %ymm6, %ymm4, %ymm4
vpmulld %ymm6, %ymm1, %ymm1
vmovdqu 0xd0(%rsp), %ymm6
vpsubd %ymm1, %ymm6, %ymm1
vpsubd %ymm4, %ymm6, %ymm4
vpsubd %ymm5, %ymm6, %ymm5
vpsubd %ymm8, %ymm6, %ymm8
vmovdqu 0x150(%rsp), %ymm6
vpmaxsd %ymm6, %ymm8, %ymm8
vpmaxsd %ymm6, %ymm5, %ymm5
vpmaxsd %ymm6, %ymm4, %ymm4
vpmaxsd %ymm6, %ymm1, %ymm1
vmovdqu 0x130(%rsp), %ymm6
vpand %ymm6, %ymm1, %ymm1
vpand %ymm6, %ymm4, %ymm4
vpackusdw %ymm4, %ymm1, %ymm1
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpand %ymm6, %ymm5, %ymm4
vpand %ymm6, %ymm8, %ymm5
vpackusdw %ymm5, %ymm4, %ymm4
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpackuswb %ymm4, %ymm1, %ymm1
vpermq $0xd8, %ymm1, %ymm8     # ymm8 = ymm1[0,2,1,3]
vmovq %r8, %xmm1
vpbroadcastq %xmm1, %ymm4
vpor 0x7ed1f(%rip), %ymm4, %ymm5 # 0x62db40
vpxor %xmm7, %xmm14, %xmm1
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm1, %xmm9, %xmm1
vpackssdw %xmm1, %xmm1, %xmm1
vpxor %xmm2, %xmm1, %xmm1
vpackssdw %xmm1, %xmm1, %xmm1
vpacksswb %xmm1, %xmm1, %xmm1
vmovd %xmm1, %ecx
testb $0x1, %cl
je 0x5aee4f
vpextrb $0x0, %xmm8, 0x1(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm1
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm1, %xmm9, %xmm1
vpackssdw %xmm1, %xmm1, %xmm1
vpxor %xmm2, %xmm1, %xmm1
vpackssdw %xmm1, %xmm1, %xmm1
vpacksswb %xmm1, %xmm1, %xmm1
vpextrb $0x1, %xmm1, %ecx
testb $0x1, %cl
je 0x5aee7f
vpextrb $0x1, %xmm8, 0x2(%r13,%r8)
vpxor %ymm0, %ymm7, %ymm1
vpxor %ymm0, %ymm5, %ymm5
vpcmpgtq %ymm1, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm9     # ymm9 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor %ymm10, %ymm9, %ymm9
vmovdqu 0x30(%rsp), %ymm6
vpermd %ymm9, %ymm6, %ymm9
vpackssdw %xmm9, %xmm9, %xmm9
vpacksswb %xmm9, %xmm9, %xmm9
vpextrb $0x2, %xmm9, %ecx
testb $0x1, %cl
je 0x5aeebe
vpextrb $0x2, %xmm8, 0x3(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x3, %xmm5, %ecx
testb $0x1, %cl
je 0x5aeee7
vpextrb $0x3, %xmm8, 0x4(%r13,%r8)
vpor 0x7ed51(%rip), %ymm4, %ymm9 # 0x62dc40
vpxor %xmm7, %xmm14, %xmm5
vpxor %xmm14, %xmm9, %xmm6
vpcmpgtq %xmm5, %xmm6, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastw %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x4, %xmm5, %ecx
testb $0x1, %cl
je 0x5aef31
vpextrb $0x4, %xmm8, 0x5(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm5
vpxor %xmm14, %xmm9, %xmm6
vpcmpgtq %xmm5, %xmm6, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm2, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastd %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x5, %xmm5, %ecx
testb $0x1, %cl
je 0x5aef74
vpextrb $0x5, %xmm8, 0x6(%r13,%r8)
vpxor %ymm0, %ymm9, %ymm5
vpcmpgtq %ymm1, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpacksswb %xmm6, %xmm6, %xmm6
vpextrb $0x6, %xmm6, %ecx
testb $0x1, %cl
je 0x5aefa6
vpextrb $0x6, %xmm8, 0x7(%r13,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x7, %xmm5, %ecx
testb $0x1, %cl
je 0x5aefd0
vpextrb $0x7, %xmm8, 0x8(%r13,%r8)
vpor 0x7ee28(%rip), %ymm4, %ymm5 # 0x62de00
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpmovzxwd %xmm6, %ymm6    # ymm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero,xmm6[4],zero,xmm6[5],zero,xmm6[6],zero,xmm6[7],zero
vpacksswb %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vmovd %xmm6, %ecx
testb $0x1, %cl
je 0x5af011
vpextrb $0x8, %xmm8, 0x9(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpacksswb %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0x1, %xmm6, %ecx
testb $0x1, %cl
je 0x5af04d
vpextrb $0x9, %xmm8, 0xa(%r13,%r8)
vpxor %ymm0, %ymm5, %ymm5
vpcmpgtq %ymm1, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm6     # ymm6 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor %ymm6, %ymm10, %ymm6
vmovdqu 0x30(%rsp), %ymm9
vpermd %ymm6, %ymm9, %ymm6
vpackssdw %xmm6, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpacksswb %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0x2, %xmm6, %ecx
testb $0x1, %cl
je 0x5af091
vpextrb $0xa, %xmm8, 0xb(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x3, %xmm5, %ecx
testb $0x1, %cl
je 0x5af0c6
vpextrb $0xb, %xmm8, 0xc(%r13,%r8)
vpor 0x7ed12(%rip), %ymm4, %ymm5 # 0x62dde0
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpackssdw %ymm6, %ymm0, %ymm6
vpacksswb %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0x4, %xmm6, %ecx
testb $0x1, %cl
je 0x5af10a
vpextrb $0xc, %xmm8, 0xd(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpshufhw $0x84, %xmm6, %xmm6     # xmm6 = xmm6[0,1,2,3,4,5,4,6]
vpxor %xmm2, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpackssdw %ymm6, %ymm0, %ymm6
vpacksswb %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0x5, %xmm6, %ecx
testb $0x1, %cl
je 0x5af147
vpextrb $0xd, %xmm8, 0xe(%r13,%r8)
vpxor %ymm0, %ymm5, %ymm5
vpcmpgtq %ymm1, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm6
vpxor %ymm6, %ymm10, %ymm6
vpackssdw %ymm6, %ymm0, %ymm6
vpacksswb %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0x6, %xmm6, %ecx
testb $0x1, %cl
je 0x5af179
vpextrb $0xe, %xmm8, 0xf(%r13,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor %ymm5, %ymm10, %ymm5
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x7, %xmm5, %ecx
testb $0x1, %cl
je 0x5af1a3
vpextrb $0xf, %xmm8, 0x10(%r13,%r8)
vpor 0x7edb5(%rip), %ymm4, %ymm5 # 0x62df60
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpacksswb %xmm6, %xmm6, %xmm6
vpextrb $0x8, %xmm6, %ecx
vextracti128 $0x1, %ymm8, %xmm8
testb $0x1, %cl
je 0x5af1e1
vpextrb $0x0, %xmm8, 0x11(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpacksswb %xmm6, %xmm6, %xmm6
vpextrb $0x9, %xmm6, %ecx
testb $0x1, %cl
je 0x5af211
vpextrb $0x1, %xmm8, 0x12(%r13,%r8)
vpxor %ymm0, %ymm5, %ymm5
vpcmpgtq %ymm1, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm6     # ymm6 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor %ymm6, %ymm10, %ymm6
vmovdqu 0x30(%rsp), %ymm9
vpermd %ymm6, %ymm9, %ymm6
vpackssdw %xmm6, %xmm6, %xmm6
vpacksswb %xmm6, %xmm6, %xmm6
vpextrb $0xa, %xmm6, %ecx
testb $0x1, %cl
je 0x5af249
vpextrb $0x2, %xmm8, 0x13(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xb, %xmm5, %ecx
testb $0x1, %cl
je 0x5af272
vpextrb $0x3, %xmm8, 0x14(%r13,%r8)
vpor 0x7ecc6(%rip), %ymm4, %ymm5 # 0x62df40
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpackssdw %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpbroadcastw %xmm6, %xmm6
vpacksswb %xmm6, %xmm6, %xmm6
vpextrb $0xc, %xmm6, %ecx
testb $0x1, %cl
je 0x5af2bb
vpextrb $0x4, %xmm8, 0x15(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpshufhw $0x84, %xmm6, %xmm6     # xmm6 = xmm6[0,1,2,3,4,5,4,6]
vpxor %xmm2, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpackssdw %ymm0, %ymm6, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpbroadcastd %xmm6, %xmm6
vpacksswb %xmm6, %xmm6, %xmm6
vpextrb $0xd, %xmm6, %ecx
testb $0x1, %cl
je 0x5af2fd
vpextrb $0x5, %xmm8, 0x16(%r13,%r8)
vpxor %ymm0, %ymm5, %ymm5
vpcmpgtq %ymm1, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpacksswb %xmm6, %xmm6, %xmm6
vpextrb $0xe, %xmm6, %ecx
testb $0x1, %cl
je 0x5af32f
vpextrb $0x6, %xmm8, 0x17(%r13,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xf, %xmm5, %ecx
testb $0x1, %cl
je 0x5af359
vpextrb $0x7, %xmm8, 0x18(%r13,%r8)
vpor 0x7ebbf(%rip), %ymm4, %ymm5 # 0x62df20
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpmovzxwd %xmm6, %ymm6    # ymm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero,xmm6[4],zero,xmm6[5],zero,xmm6[6],zero,xmm6[7],zero
vpacksswb %ymm6, %ymm0, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0x8, %xmm6, %ecx
testb $0x1, %cl
je 0x5af39c
vpextrb $0x8, %xmm8, 0x19(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm6
vpxor %xmm5, %xmm14, %xmm9
vpcmpgtq %xmm6, %xmm9, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpxor %xmm2, %xmm6, %xmm6
vpackssdw %xmm6, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpacksswb %ymm6, %ymm0, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0x9, %xmm6, %ecx
testb $0x1, %cl
je 0x5af3d8
vpextrb $0x9, %xmm8, 0x1a(%r13,%r8)
vpxor %ymm0, %ymm5, %ymm5
vpcmpgtq %ymm1, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm6     # ymm6 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor %ymm6, %ymm10, %ymm6
vmovdqu 0x30(%rsp), %ymm9
vpermd %ymm6, %ymm9, %ymm6
vpackssdw %xmm6, %xmm6, %xmm6
vpermq $0x55, %ymm6, %ymm6     # ymm6 = ymm6[1,1,1,1]
vpacksswb %ymm6, %ymm0, %ymm6
vextracti128 $0x1, %ymm6, %xmm6
vpextrb $0xa, %xmm6, %ecx
testb $0x1, %cl
je 0x5af41c
vpextrb $0xa, %xmm8, 0x1b(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xb, %xmm5, %ecx
testb $0x1, %cl
je 0x5af451
vpextrb $0xb, %xmm8, 0x1c(%r13,%r8)
vpor 0x7eaa7(%rip), %ymm4, %ymm4 # 0x62df00
vpxor %xmm7, %xmm14, %xmm5
vpxor %xmm4, %xmm14, %xmm6
vpcmpgtq %xmm5, %xmm6, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm2, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xc, %xmm5, %ecx
testb $0x1, %cl
je 0x5af495
vpextrb $0xc, %xmm8, 0x1d(%r13,%r8)
vpxor %xmm7, %xmm14, %xmm5
vpxor %xmm4, %xmm14, %xmm6
vpcmpgtq %xmm5, %xmm6, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm2, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xd, %xmm5, %ecx
testb $0x1, %cl
je 0x5af4d2
vpextrb $0xd, %xmm8, 0x1e(%r13,%r8)
vpxor %ymm0, %ymm4, %ymm4
vpcmpgtq %ymm1, %ymm4, %ymm1
vpackssdw %ymm1, %ymm0, %ymm4
vpxor %ymm4, %ymm10, %ymm4
vpackssdw %ymm4, %ymm0, %ymm4
vpacksswb %ymm4, %ymm0, %ymm4
vextracti128 $0x1, %ymm4, %xmm4
vpextrb $0xe, %xmm4, %ecx
testb $0x1, %cl
je 0x5af504
vpextrb $0xe, %xmm8, 0x1f(%r13,%r8)
vpshufhw $0x84, %ymm1, %ymm1     # ymm1 = ymm1[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor %ymm1, %ymm10, %ymm1
vpackssdw %ymm1, %ymm0, %ymm1
vpacksswb %ymm1, %ymm0, %ymm1
vextracti128 $0x1, %ymm1, %xmm1
vpextrb $0xf, %xmm1, %ecx
testb $0x1, %cl
je 0x5af52e
vpextrb $0xf, %xmm8, 0x20(%r13,%r8)
addq $0x20, %r8
vmovdqu 0xf0(%rsp), %ymm1
vpaddd %ymm1, %ymm13, %ymm13
vpaddd %ymm1, %ymm12, %ymm12
vpaddd %ymm1, %ymm11, %ymm11
vmovdqu 0x70(%rsp), %ymm8
vpaddd %ymm1, %ymm8, %ymm8
cmpq %r8, %r11
jne 0x5aed55
vpxor %xmm0, %xmm0, %xmm0
vpsubsb %ymm15, %ymm0, %ymm1
leal -0x1(%r12), %r10d
shlq $0x5, %r10
movq %rax, %rcx
addq %r10, %rcx
movl %r12d, %edx
vmovdqu 0x190(%rsp), %ymm0
vmovdqa %ymm1, (%rcx)
vpsubsb %ymm3, %ymm1, %ymm1
vpminsb %ymm1, %ymm0, %ymm0
addq $-0x20, %rcx
decl %edx
jg 0x5af57e
vpbroadcastb 0x80876(%rip), %ymm6 # 0x62fe12
addq %rbp, %r10
vpbroadcastb 0x8086b(%rip), %ymm7 # 0x62fe13
movl 0x20(%rsp), %r11d
movq %r11, 0xd0(%rsp)
vpbroadcastb 0x80856(%rip), %ymm8 # 0x62fe14
shlq $0x5, %r11
vpbroadcastb 0x8084a(%rip), %ymm9 # 0x62fe15
addq %rbp, %r11
movq %r12, 0xb0(%rsp)
vpbroadcastb 0x80837(%rip), %ymm10 # 0x62fe16
shlq $0x5, %r12
vpbroadcastb 0x8082b(%rip), %ymm11 # 0x62fe17
xorl %ecx, %ecx
vmovdqu 0x1b0(%rsp), %ymm1
vpcmpeqb 0x7ea01(%rip), %ymm1, %ymm1 # 0x62e000
vmovdqu %ymm1, 0xf0(%rsp)
xorl %r9d, %r9d
movl 0xc(%rsp), %r8d
vmovdqu 0x170(%rsp), %ymm2
vmovdqa %ymm2, %ymm1
vmovdqa %ymm2, %ymm5
vmovdqu %ymm8, 0x70(%rsp)
vmovdqu %ymm5, 0x30(%rsp)
vmovdqa (%r10), %ymm2
vinserti128 $0x1, %xmm2, %ymm0, %ymm5
vpalignr $0xf, %ymm5, %ymm2, %ymm2 # ymm2 = ymm5[15],ymm2[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm5[31],ymm2[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpinsrb $0x0, (%r13,%r9), %xmm2, %xmm5
vpblendd $0xf, %ymm5, %ymm2, %ymm5 # ymm5 = ymm5[0,1,2,3],ymm2[4,5,6,7]
movq 0x60(%rsp), %rdx
movq 0x10(%rdx), %rdx
movq 0x68(%rsp), %rsi
movzbl (%rsi,%r9), %esi
movslq (%rdx,%rsi,4), %rdx
imulq 0xa0(%rsp), %rdx
shlq $0x5, %rdx
addq 0xa8(%rsp), %rdx
vmovdqu 0x170(%rsp), %ymm13
vpsubsb (%rax), %ymm13, %ymm14
xorl %esi, %esi
vmovdqa %ymm7, %ymm8
vmovdqa %ymm6, %ymm7
vpaddsb (%rdx,%rsi), %ymm5, %ymm2
vmovdqa (%rbp,%rsi), %ymm5
vmovdqa (%r15,%rsi), %ymm12
vpsubsb %ymm15, %ymm5, %ymm4
vpsubsb %ymm3, %ymm12, %ymm12
vmovdqa %ymm3, %ymm6
vmovdqa %ymm15, %ymm3
vpcmpgtb %ymm12, %ymm4, %ymm15
vpblendvb %ymm15, %ymm7, %ymm8, %ymm15
movq 0x10(%rbx), %rdi
movq (%rdi), %rdi
addq %rcx, %rdi
vpaddsb (%rax,%rsi), %ymm14, %ymm14
vmovdqa %ymm15, (%rsi,%rdi)
vmovdqa %ymm3, %ymm15
vmovdqa %ymm6, %ymm3
vpmaxsb %ymm14, %ymm13, %ymm13
vpmaxsb %ymm12, %ymm4, %ymm4
vpminsb %ymm4, %ymm0, %ymm0
vpmaxsb %ymm2, %ymm4, %ymm14
vmovdqa %ymm4, (%r15,%rsi)
vmovdqa %ymm14, (%r14,%rsi)
vmovdqa %ymm2, (%rbp,%rsi)
addq $0x20, %rsi
cmpq %rsi, %r12
jne 0x5af68f
vinserti128 $0x1, %xmm14, %ymm0, %ymm2
vpalignr $0xf, %ymm2, %ymm14, %ymm2 # ymm2 = ymm2[15],ymm14[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm2[31],ymm14[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
leaq 0x1(%r9), %rdx
vpinsrb $0x0, 0x1(%r13,%r9), %xmm2, %xmm4
vpblendd $0xf, %ymm4, %ymm2, %ymm14 # ymm14 = ymm4[0,1,2,3],ymm2[4,5,6,7]
vpaddsb (%rax), %ymm14, %ymm2
vpmaxsb %ymm2, %ymm13, %ymm5
movl $0x1e, %esi
vmovdqu 0x2b0(%rsp), %ymm4
vperm2i128 $0x28, %ymm5, %ymm5, %ymm2 # ymm2 = zero,zero,ymm5[0,1]
vpalignr $0xf, %ymm2, %ymm5, %ymm2 # ymm2 = ymm2[15],ymm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm2[31],ymm5[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpaddsb %ymm4, %ymm2, %ymm2
vpmaxsb %ymm2, %ymm5, %ymm5
decl %esi
jne 0x5af73c
vperm2i128 $0x28, %ymm5, %ymm5, %ymm2 # ymm2 = zero,zero,ymm5[0,1]
vpalignr $0xf, %ymm2, %ymm5, %ymm2 # ymm2 = ymm2[15],ymm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm2[31],ymm5[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpaddsb 0x2d0(%rsp), %ymm2, %ymm5
vpmaxsb %ymm14, %ymm5, %ymm13
xorl %esi, %esi
vmovdqa %ymm7, %ymm6
vmovdqa %ymm8, %ymm7
vmovdqu 0x70(%rsp), %ymm8
movq 0x10(%rbx), %rdi
movq (%rdi), %rdi
addq %rcx, %rdi
vmovdqa (%r14,%rsi), %ymm2
vpsubsb %ymm15, %ymm13, %ymm4
vpsubsb %ymm3, %ymm5, %ymm12
vpmaxsb %ymm12, %ymm4, %ymm5
vpcmpgtb %ymm12, %ymm4, %ymm4
vpblendvb %ymm4, %ymm8, %ymm9, %ymm4
vpmaxsb %ymm5, %ymm2, %ymm13
vpcmpeqb (%rbp,%rsi), %ymm13, %ymm12
vpcmpgtb %ymm5, %ymm2, %ymm2
vpaddb %ymm2, %ymm10, %ymm2
vpblendvb %ymm12, %ymm11, %ymm2, %ymm2
vpor (%rsi,%rdi), %ymm4, %ymm4
vpor %ymm2, %ymm4, %ymm2
vmovdqa %ymm2, (%rsi,%rdi)
vmovdqa %ymm13, (%rbp,%rsi)
vpminsb %ymm5, %ymm0, %ymm0
vpminsb %ymm13, %ymm0, %ymm0
vpmaxsb %ymm13, %ymm1, %ymm1
addq $0x20, %rsi
cmpq %rsi, %r12
jne 0x5af77f
vmovdqa (%r11), %ymm2
vmovdqu 0x30(%rsp), %ymm5
vpcmpgtb %ymm5, %ymm2, %ymm4
vpand 0xf0(%rsp), %ymm4, %ymm4
vpmaxsb %ymm5, %ymm2, %ymm5
vpmovmskb %ymm4, %esi
testl %esi, %esi
cmovnel %r9d, %r8d
addq %r12, %rcx
movq %rdx, %r9
cmpq 0x110(%rsp), %rdx
jne 0x5af627
cmpl $0x0, 0x340(%rsp)
movl 0x2c(%rsp), %r10d
movq 0x98(%rsp), %r11
movl 0x14(%rsp), %r12d
je 0x5af86f
cmpl $0x1e, 0x10(%rsp)
jg 0x5af863
xorl %ecx, %ecx
movl 0x18(%rsp), %edx
vperm2i128 $0x8, %ymm5, %ymm5, %ymm2 # ymm2 = zero,zero,ymm5[0,1]
vpalignr $0xf, %ymm2, %ymm5, %ymm5 # ymm5 = ymm2[15],ymm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm2[31],ymm5[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
incl %ecx
cmpl %edx, %ecx
jl 0x5af851
vextracti128 $0x1, %ymm5, %xmm2
vpextrb $0xf, %xmm2, %r12d
cmpl $0x0, 0x330(%rsp)
je 0x5af8ea
testl $0x7fffffe0, 0x90(%rsp) # imm = 0x7FFFFFE0
je 0x5af8ea
movq 0xb0(%rsp), %rdx
andl $0x3ffffff, %edx        # imm = 0x3FFFFFF
shll $0x5, %edx
xorl %esi, %esi
movl %r10d, %ecx
movl %esi, %r9d
shrl $0x5, %r9d
movl %esi, %edi
andl $0x1f, %edi
imull 0xb0(%rsp), %edi
addl %r9d, %edi
cmpl %r11d, %edi
jge 0x5af8e1
movb (%rbp,%rsi), %r9b
cmpb %r12b, %r9b
jle 0x5af8ce
movl %r9d, %r12d
movl 0xc(%rsp), %r8d
movl %edi, %ecx
jmp 0x5af8e1
cmpl %ecx, %edi
cmovgel %ecx, %edi
cmpl 0xc(%rsp), %r8d
cmovnel %ecx, %edi
cmpb %r12b, %r9b
cmovel %edi, %ecx
incq %rsi
cmpl %esi, %edx
jne 0x5af89c
jmp 0x5af8ed
movl %r10d, %ecx
movl 0x330(%rsp), %edx
orl %edx, 0x24(%rsp)
jne 0x5af93f
movq 0xd0(%rsp), %rcx
shlq $0x5, %rcx
vmovdqa (%rbp,%rcx), %ymm2
cmpl $0x1e, 0x10(%rsp)
jg 0x5af92b
xorl %ecx, %ecx
movl 0x18(%rsp), %edx
vperm2i128 $0x28, %ymm2, %ymm2, %ymm3 # ymm3 = zero,zero,ymm2[0,1]
vpalignr $0xf, %ymm3, %ymm2, %ymm2 # ymm2 = ymm3[15],ymm2[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm3[31],ymm2[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
incl %ecx
cmpl %edx, %ecx
jl 0x5af919
vextracti128 $0x1, %ymm2, %xmm2
vpextrb $0xf, %xmm2, %r12d
movl 0xc(%rsp), %r8d
movl %r10d, %ecx
vmovdqu 0x170(%rsp), %ymm2
vpcmpgtb %ymm0, %ymm2, %ymm0
vpcmpgtb 0x190(%rsp), %ymm1, %ymm1
vpor %ymm1, %ymm0, %ymm0
vpmovmskb %ymm0, %edx
testl %edx, %edx
je 0x5af96d
orb $0x40, 0xc(%rbx)
xorl %r12d, %r12d
xorl %r8d, %r8d
xorl %ecx, %ecx
movsbl %r12b, %edx
movl %edx, (%rbx)
movl %ecx, 0x4(%rbx)
movl %r8d, 0x8(%rbx)
movq %rax, %rdi
vzeroupper
callq 0x20a60d
movq %rbp, %rdi
callq 0x20a60d
movq %r14, %rdi
callq 0x20a60d
movq %r13, %rdi
callq 0x20a60d
movq %r15, %rdi
callq 0x20a60d
jmp 0x5af9df
callq 0x1f8edd
jmp 0x5af9dd
callq 0x1f8eb7
jmp 0x5af9dd
callq 0x1f8e91
jmp 0x5af9dd
callq 0x1f8e6b
jmp 0x5af9dd
callq 0x1f8e45
jmp 0x5af9dd
callq 0x1f8e1f
jmp 0x5af9dd
callq 0x1f8df9
jmp 0x5af9dd
callq 0x1f8dd3
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x2f8, %rsp            # imm = 0x2F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq