// File: /workspace/github_c_makefile_star2_O0/msteveb[P]autosetup/./jimsh0.c
// Function: Jim_FormatString
Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_Obj *const *objv)
{
    const char *span, *format, *formatEnd, *msg;
    int numBytes = 0, objIndex = 0, gotXpg = 0, gotSequential = 0;
    static const char * const mixedXPG =
            "cannot mix \"%\" and \"%n$\" conversion specifiers";
    static const char * const badIndex[2] = {
        "not enough arguments for all format specifiers",
        "\"%n$\" argument index out of range"
    };
    int formatLen;
    Jim_Obj *resultPtr;

    char *num_buffer = NULL;
    int num_buffer_size = 0;

    span = format = Jim_GetString(fmtObjPtr, &formatLen);
    formatEnd = format + formatLen;
    resultPtr = Jim_NewEmptyStringObj(interp);

    while (format != formatEnd) {
        char *end;
        int gotMinus, sawFlag;
        int gotPrecision, useShort;
        long width, precision;
        int newXpg;
        int ch;
        int step;
        int doubleType;
        char pad = ' ';
        char spec[2*JIM_INTEGER_SPACE + 12];
        char *p;

        int formatted_chars;
        int formatted_bytes;
        const char *formatted_buf;

        step = utf8_tounicode(format, &ch);
        format += step;
        if (ch != '%') {
            numBytes += step;
            continue;
        }
        if (numBytes) {
            Jim_AppendString(interp, resultPtr, span, numBytes);
            numBytes = 0;
        }


        step = utf8_tounicode(format, &ch);
        if (ch == '%') {
            span = format;
            numBytes = step;
            format += step;
            continue;
        }


        newXpg = 0;
        if (isdigit(ch)) {
            int position = strtoul(format, &end, 10);
            if (*end == '$') {
                newXpg = 1;
                objIndex = position - 1;
                format = end + 1;
                step = utf8_tounicode(format, &ch);
            }
        }
        if (newXpg) {
            if (gotSequential) {
                msg = mixedXPG;
                goto errorMsg;
            }
            gotXpg = 1;
        } else {
            if (gotXpg) {
                msg = mixedXPG;
                goto errorMsg;
            }
            gotSequential = 1;
        }
        if ((objIndex < 0) || (objIndex >= objc)) {
            msg = badIndex[gotXpg];
            goto errorMsg;
        }

        p = spec;
        *p++ = '%';

        gotMinus = 0;
        sawFlag = 1;
        do {
            switch (ch) {
            case '-':
                gotMinus = 1;
                break;
            case '0':
                pad = ch;
                break;
            case ' ':
            case '+':
            case '#':
                break;
            default:
                sawFlag = 0;
                continue;
            }
            *p++ = ch;
            format += step;
            step = utf8_tounicode(format, &ch);

        } while (sawFlag && (p - spec <= 5));


        width = 0;
        if (isdigit(ch)) {
            width = strtoul(format, &end, 10);
            format = end;
            step = utf8_tounicode(format, &ch);
        } else if (ch == '*') {
            if (objIndex >= objc - 1) {
                msg = badIndex[gotXpg];
                goto errorMsg;
            }
            if (Jim_GetLong(interp, objv[objIndex], &width) != JIM_OK) {
                goto error;
            }
            if (width < 0) {
                width = -width;
                if (!gotMinus) {
                    *p++ = '-';
                    gotMinus = 1;
                }
            }
            objIndex++;
            format += step;
            step = utf8_tounicode(format, &ch);
        }


        gotPrecision = precision = 0;
        if (ch == '.') {
            gotPrecision = 1;
            format += step;
            step = utf8_tounicode(format, &ch);
        }
        if (isdigit(ch)) {
            precision = strtoul(format, &end, 10);
            format = end;
            step = utf8_tounicode(format, &ch);
        } else if (ch == '*') {
            if (objIndex >= objc - 1) {
                msg = badIndex[gotXpg];
                goto errorMsg;
            }
            if (Jim_GetLong(interp, objv[objIndex], &precision) != JIM_OK) {
                goto error;
            }


            if (precision < 0) {
                precision = 0;
            }
            objIndex++;
            format += step;
            step = utf8_tounicode(format, &ch);
        }


        useShort = 0;
        if (ch == 'h') {
            useShort = 1;
            format += step;
            step = utf8_tounicode(format, &ch);
        } else if (ch == 'l') {

            format += step;
            step = utf8_tounicode(format, &ch);
            if (ch == 'l') {
                format += step;
                step = utf8_tounicode(format, &ch);
            }
        }

        format += step;
        span = format;


        if (ch == 'i') {
            ch = 'd';
        }

        doubleType = 0;

        switch (ch) {
        case '\0':
            msg = "format string ended in middle of field specifier";
            goto errorMsg;
        case 's': {
            formatted_buf = Jim_GetString(objv[objIndex], &formatted_bytes);
            formatted_chars = Jim_Utf8Length(interp, objv[objIndex]);
            if (gotPrecision && (precision < formatted_chars)) {

                formatted_chars = precision;
                formatted_bytes = utf8_index(formatted_buf, precision);
            }
            break;
        }
        case 'c': {
            jim_wide code;

            if (Jim_GetWide(interp, objv[objIndex], &code) != JIM_OK) {
                goto error;
            }

            formatted_bytes = utf8_getchars(spec, code);
            formatted_buf = spec;
            formatted_chars = 1;
            break;
        }
        case 'b': {
                unsigned jim_wide w;
                int length;
                int i;
                int j;

                if (Jim_GetWide(interp, objv[objIndex], (jim_wide *)&w) != JIM_OK) {
                    goto error;
                }
                length = sizeof(w) * 8;



                if (num_buffer_size < length + 1) {
                    num_buffer_size = length + 1;
                    num_buffer = Jim_Realloc(num_buffer, num_buffer_size);
                }

                j = 0;
                for (i = length; i > 0; ) {
                        i--;
                        if (w & ((unsigned jim_wide)1 << i)) {
                                num_buffer[j++] = '1';
                        }
                        else if (j || i == 0) {
                                num_buffer[j++] = '0';
                        }
                }
                num_buffer[j] = 0;
                formatted_chars = formatted_bytes = j;
                formatted_buf = num_buffer;
                break;
        }

        case 'e':
        case 'E':
        case 'f':
        case 'g':
        case 'G':
            doubleType = 1;

        case 'd':
        case 'u':
        case 'o':
        case 'x':
        case 'X': {
            jim_wide w;
            double d;
            int length;


            if (width) {
                p += sprintf(p, "%ld", width);
            }
            if (gotPrecision) {
                p += sprintf(p, ".%ld", precision);
            }


            if (doubleType) {
                if (Jim_GetDouble(interp, objv[objIndex], &d) != JIM_OK) {
                    goto error;
                }
                length = MAX_FLOAT_WIDTH;
            }
            else {
                if (Jim_GetWide(interp, objv[objIndex], &w) != JIM_OK) {
                    goto error;
                }
                length = JIM_INTEGER_SPACE;
                if (useShort) {
                    if (ch == 'd') {
                        w = (short)w;
                    }
                    else {
                        w = (unsigned short)w;
                    }
                }
                *p++ = 'l';
#ifdef HAVE_LONG_LONG
                if (sizeof(long long) == sizeof(jim_wide)) {
                    *p++ = 'l';
                }
#endif
            }

            *p++ = (char) ch;
            *p = '\0';


            if (width > 10000 || length > 10000 || precision > 10000) {
                Jim_SetResultString(interp, "format too long", -1);
                goto error;
            }



            if (width > length) {
                length = width;
            }
            if (gotPrecision) {
                length += precision;
            }


            if (num_buffer_size < length + 1) {
                num_buffer_size = length + 1;
                num_buffer = Jim_Realloc(num_buffer, num_buffer_size);
            }

            if (doubleType) {
                snprintf(num_buffer, length + 1, spec, d);
            }
            else {
                formatted_bytes = snprintf(num_buffer, length + 1, spec, w);
            }
            formatted_chars = formatted_bytes = strlen(num_buffer);
            formatted_buf = num_buffer;
            break;
        }

        default: {

            spec[0] = ch;
            spec[1] = '\0';
            Jim_SetResultFormatted(interp, "bad field specifier \"%s\"", spec);
            goto error;
        }
        }

        if (!gotMinus) {
            while (formatted_chars < width) {
                Jim_AppendString(interp, resultPtr, &pad, 1);
                formatted_chars++;
            }
        }

        Jim_AppendString(interp, resultPtr, formatted_buf, formatted_bytes);

        while (formatted_chars < width) {
            Jim_AppendString(interp, resultPtr, &pad, 1);
            formatted_chars++;
        }

        objIndex += gotSequential;
    }
    if (numBytes) {
        Jim_AppendString(interp, resultPtr, span, numBytes);
    }

    Jim_Free(num_buffer);
    return resultPtr;

  errorMsg:
    Jim_SetResultString(interp, msg, -1);
  error:
    Jim_FreeNewObj(interp, resultPtr);
    Jim_Free(num_buffer);
    return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x170, %rsp            # imm = 0x170
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq %rcx, -0x28(%rbp)
movl $0x0, -0x4c(%rbp)
movl $0x0, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movl $0x0, -0x58(%rbp)
movq $0x0, -0x70(%rbp)
movl $0x0, -0x74(%rbp)
movq -0x18(%rbp), %rdi
leaq -0x5c(%rbp), %rsi
callq 0x89b0
movq %rax, -0x38(%rbp)
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rax
movslq -0x5c(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
leaq 0x2892e(%rip), %rsi     # 0x3d9b2
xorl %edx, %edx
callq 0x7990
movq %rax, -0x68(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x40(%rbp), %rax
je 0x15cd5
movb $0x20, -0xb1(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
cmpl $0x25, -0xa8(%rbp)
je 0x150e6
movl -0xac(%rbp), %eax
addl -0x4c(%rbp), %eax
movl %eax, -0x4c(%rbp)
jmp 0x1508f
cmpl $0x0, -0x4c(%rbp)
je 0x15107
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x30(%rbp), %rdx
movl -0x4c(%rbp), %ecx
callq 0x8db0
movl $0x0, -0x4c(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
cmpl $0x25, -0xa8(%rbp)
jne 0x15151
movq -0x38(%rbp), %rax
movq %rax, -0x30(%rbp)
movl -0xac(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
jmp 0x1508f
movl $0x0, -0xa4(%rbp)
callq 0x64f0
movq (%rax), %rax
movslq -0xa8(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0x151d7
movq -0x38(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movl $0xa, %edx
callq 0x6470
movl %eax, -0x10c(%rbp)
movq -0x80(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x24, %eax
jne 0x151d5
movl $0x1, -0xa4(%rbp)
movl -0x10c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x50(%rbp)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x151d7
cmpl $0x0, -0xa4(%rbp)
je 0x151ff
cmpl $0x0, -0x58(%rbp)
je 0x151f6
leaq 0x26027(%rip), %rax     # 0x3b214
movq %rax, -0x48(%rbp)
jmp 0x15d0d
movl $0x1, -0x54(%rbp)
jmp 0x1521c
cmpl $0x0, -0x54(%rbp)
je 0x15215
leaq 0x26008(%rip), %rax     # 0x3b214
movq %rax, -0x48(%rbp)
jmp 0x15d0d
movl $0x1, -0x58(%rbp)
cmpl $0x0, -0x50(%rbp)
jl 0x1522a
movl -0x50(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jl 0x15242
movslq -0x54(%rbp), %rcx
leaq 0x317fb(%rip), %rax     # 0x46a30
movq (%rax,%rcx,8), %rax
movq %rax, -0x48(%rbp)
jmp 0x15d0d
leaq -0xf0(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0xf8(%rbp)
movb $0x25, (%rax)
movl $0x0, -0x84(%rbp)
movl $0x1, -0x88(%rbp)
movl -0xa8(%rbp), %eax
addl $-0x20, %eax
movl %eax, %ecx
movq %rcx, -0x160(%rbp)
subl $0x10, %eax
ja 0x152c6
movq -0x160(%rbp), %rax
leaq 0x20e33(%rip), %rcx     # 0x360d4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x1, -0x84(%rbp)
jmp 0x152d2
movl -0xa8(%rbp), %eax
movb %al, -0xb1(%rbp)
jmp 0x152d2
jmp 0x152d2
movl $0x0, -0x88(%rbp)
jmp 0x1531c
movl -0xa8(%rbp), %eax
movb %al, %cl
movq -0xf8(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0xf8(%rbp)
movb %cl, (%rax)
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
xorl %eax, %eax
cmpl $0x0, -0x88(%rbp)
movb %al, -0x161(%rbp)
je 0x1534b
movq -0xf8(%rbp), %rax
leaq -0xf0(%rbp), %rcx
subq %rcx, %rax
cmpq $0x5, %rax
setle %al
movb %al, -0x161(%rbp)
movb -0x161(%rbp), %al
testb $0x1, %al
jne 0x1527c
movq $0x0, -0x98(%rbp)
callq 0x64f0
movq (%rax), %rax
movslq -0xa8(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0x153be
movq -0x38(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movl $0xa, %edx
callq 0x6470
movq %rax, -0x98(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x15493
cmpl $0x2a, -0xa8(%rbp)
jne 0x15491
movl -0x50(%rbp), %eax
movl -0x1c(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jl 0x153f0
movslq -0x54(%rbp), %rcx
leaq 0x3164d(%rip), %rax     # 0x46a30
movq (%rax,%rcx,8), %rax
movq %rax, -0x48(%rbp)
jmp 0x15d0d
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0x98(%rbp), %rdx
callq 0xf4d0
cmpl $0x0, %eax
je 0x15416
jmp 0x15d6d
cmpq $0x0, -0x98(%rbp)
jge 0x1545d
xorl %eax, %eax
subq -0x98(%rbp), %rax
movq %rax, -0x98(%rbp)
cmpl $0x0, -0x84(%rbp)
jne 0x1545b
movq -0xf8(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0xf8(%rbp)
movb $0x2d, (%rax)
movl $0x1, -0x84(%rbp)
jmp 0x1545d
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x15493
movq $0x0, -0xa0(%rbp)
movl $0x0, -0x8c(%rbp)
cmpl $0x2e, -0xa8(%rbp)
jne 0x154e6
movl $0x1, -0x8c(%rbp)
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
callq 0x64f0
movq (%rax), %rax
movslq -0xa8(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0x15540
movq -0x38(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movl $0xa, %edx
callq 0x6470
movq %rax, -0xa0(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x155e3
cmpl $0x2a, -0xa8(%rbp)
jne 0x155e1
movl -0x50(%rbp), %eax
movl -0x1c(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jl 0x15572
movslq -0x54(%rbp), %rcx
leaq 0x314cb(%rip), %rax     # 0x46a30
movq (%rax,%rcx,8), %rax
movq %rax, -0x48(%rbp)
jmp 0x15d0d
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0xa0(%rbp), %rdx
callq 0xf4d0
cmpl $0x0, %eax
je 0x15598
jmp 0x15d6d
cmpq $0x0, -0xa0(%rbp)
jge 0x155ad
movq $0x0, -0xa0(%rbp)
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x155e3
movl $0x0, -0x90(%rbp)
cmpl $0x68, -0xa8(%rbp)
jne 0x1562d
movl $0x1, -0x90(%rbp)
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x15699
cmpl $0x6c, -0xa8(%rbp)
jne 0x15697
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
cmpl $0x6c, -0xa8(%rbp)
jne 0x15695
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0xa8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x15697
jmp 0x15699
movl -0xac(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x30(%rbp)
cmpl $0x69, -0xa8(%rbp)
jne 0x156c8
movl $0x64, -0xa8(%rbp)
movl $0x0, -0xb0(%rbp)
movl -0xa8(%rbp), %eax
movq %rax, -0x170(%rbp)
subq $0x78, %rax
ja 0x15bfb
movq -0x170(%rbp), %rax
leaq 0x20a21(%rip), %rcx     # 0x36118
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x25b8d(%rip), %rax     # 0x3b294
movq %rax, -0x48(%rbp)
jmp 0x15d0d
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq -0x100(%rbp), %rsi
callq 0x89b0
movq %rax, -0x108(%rbp)
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0xc730
movl %eax, -0xfc(%rbp)
cmpl $0x0, -0x8c(%rbp)
je 0x15780
movq -0xa0(%rbp), %rax
movslq -0xfc(%rbp), %rcx
cmpq %rcx, %rax
jge 0x15780
movq -0xa0(%rbp), %rax
movl %eax, -0xfc(%rbp)
movq -0xa0(%rbp), %rax
movl %eax, -0x100(%rbp)
jmp 0x15c2c
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0x118(%rbp), %rdx
callq 0xf640
cmpl $0x0, %eax
je 0x157ab
jmp 0x15d6d
movq -0x118(%rbp), %rax
movb %al, -0xf0(%rbp)
movl $0x1, -0x100(%rbp)
leaq -0xf0(%rbp), %rax
movq %rax, -0x108(%rbp)
movl $0x1, -0xfc(%rbp)
jmp 0x15c2c
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0x120(%rbp), %rdx
callq 0xf640
cmpl $0x0, %eax
je 0x15805
jmp 0x15d6d
movl $0x40, -0x124(%rbp)
movl -0x74(%rbp), %eax
movl -0x124(%rbp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jge 0x15840
movl -0x124(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
movq 0x32a5e(%rip), %rax     # 0x48290
movq -0x70(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq *%rax
movq %rax, -0x70(%rbp)
movl $0x0, -0x12c(%rbp)
movl -0x124(%rbp), %eax
movl %eax, -0x128(%rbp)
cmpl $0x0, -0x128(%rbp)
jle 0x158e6
movl -0x128(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x128(%rbp)
movq -0x120(%rbp), %rax
movl -0x128(%rbp), %ecx
movl $0x1, %edx
shlq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
je 0x158b1
movq -0x70(%rbp), %rax
movl -0x12c(%rbp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, -0x12c(%rbp)
movslq %ecx, %rcx
movb $0x31, (%rax,%rcx)
jmp 0x158e1
cmpl $0x0, -0x12c(%rbp)
jne 0x158c3
cmpl $0x0, -0x128(%rbp)
jne 0x158df
movq -0x70(%rbp), %rax
movl -0x12c(%rbp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, -0x12c(%rbp)
movslq %ecx, %rcx
movb $0x30, (%rax,%rcx)
jmp 0x158e1
jmp 0x15856
movq -0x70(%rbp), %rax
movslq -0x12c(%rbp), %rcx
movb $0x0, (%rax,%rcx)
movl -0x12c(%rbp), %eax
movl %eax, -0x100(%rbp)
movl %eax, -0xfc(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x108(%rbp)
jmp 0x15c2c
movl $0x1, -0xb0(%rbp)
cmpq $0x0, -0x98(%rbp)
je 0x1595d
movq -0xf8(%rbp), %rdi
movq -0x98(%rbp), %rdx
leaq 0x25986(%rip), %rsi     # 0x3b2c6
movb $0x0, %al
callq 0x6490
movl %eax, %ecx
movq -0xf8(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0xf8(%rbp)
cmpl $0x0, -0x8c(%rbp)
je 0x15998
movq -0xf8(%rbp), %rdi
movq -0xa0(%rbp), %rdx
leaq 0x2594a(%rip), %rsi     # 0x3b2c5
movb $0x0, %al
callq 0x6490
movl %eax, %ecx
movq -0xf8(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0xf8(%rbp)
cmpl $0x0, -0xb0(%rbp)
je 0x159d6
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0x140(%rbp), %rdx
callq 0xfa00
cmpl $0x0, %eax
je 0x159c7
jmp 0x15d6d
movl $0x140, -0x144(%rbp)    # imm = 0x140
jmp 0x15a57
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq -0x138(%rbp), %rdx
callq 0xf640
cmpl $0x0, %eax
je 0x159fc
jmp 0x15d6d
movl $0x18, -0x144(%rbp)
cmpl $0x0, -0x90(%rbp)
je 0x15a3f
cmpl $0x64, -0xa8(%rbp)
jne 0x15a2c
movq -0x138(%rbp), %rax
movswq %ax, %rax
movq %rax, -0x138(%rbp)
jmp 0x15a3d
movq -0x138(%rbp), %rax
movzwl %ax, %eax
movq %rax, -0x138(%rbp)
jmp 0x15a3f
movq -0xf8(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0xf8(%rbp)
movb $0x6c, (%rax)
movl -0xa8(%rbp), %eax
movb %al, %cl
movq -0xf8(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0xf8(%rbp)
movb %cl, (%rax)
movq -0xf8(%rbp), %rax
movb $0x0, (%rax)
cmpq $0x2710, -0x98(%rbp) # imm = 0x2710
jg 0x15aa6
cmpl $0x2710, -0x144(%rbp)   # imm = 0x2710
jg 0x15aa6
cmpq $0x2710, -0xa0(%rbp) # imm = 0x2710
jle 0x15b0c
jmp 0x15aa8
movq -0x10(%rbp), %rdi
leaq 0x25817(%rip), %rsi     # 0x3b2ca
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x7990
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x15af9
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0x7a10
movq -0x150(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
jmp 0x15d6d
movq -0x98(%rbp), %rax
movslq -0x144(%rbp), %rcx
cmpq %rcx, %rax
jle 0x15b2c
movq -0x98(%rbp), %rax
movl %eax, -0x144(%rbp)
cmpl $0x0, -0x8c(%rbp)
je 0x15b4c
movq -0xa0(%rbp), %rcx
movslq -0x144(%rbp), %rax
addq %rcx, %rax
movl %eax, -0x144(%rbp)
movl -0x74(%rbp), %eax
movl -0x144(%rbp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jge 0x15b7d
movl -0x144(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
movq 0x32721(%rip), %rax     # 0x48290
movq -0x70(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq *%rax
movq %rax, -0x70(%rbp)
cmpl $0x0, -0xb0(%rbp)
je 0x15bae
movq -0x70(%rbp), %rdi
movl -0x144(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
leaq -0xf0(%rbp), %rdx
movsd -0x140(%rbp), %xmm0
movb $0x1, %al
callq 0x61f0
jmp 0x15bd9
movq -0x70(%rbp), %rdi
movl -0x144(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
leaq -0xf0(%rbp), %rdx
movq -0x138(%rbp), %rcx
movb $0x0, %al
callq 0x61f0
movl %eax, -0x100(%rbp)
movq -0x70(%rbp), %rdi
callq 0x6190
movl %eax, -0x100(%rbp)
movl %eax, -0xfc(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x108(%rbp)
jmp 0x15c2c
movl -0xa8(%rbp), %eax
movb %al, -0xf0(%rbp)
movb $0x0, -0xef(%rbp)
movq -0x10(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
leaq 0x256ba(%rip), %rsi     # 0x3b2da
movb $0x0, %al
callq 0x6b40
jmp 0x15d6d
cmpl $0x0, -0x84(%rbp)
jne 0x15c73
jmp 0x15c37
movslq -0xfc(%rbp), %rax
cmpq -0x98(%rbp), %rax
jge 0x15c71
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rsi
leaq -0xb1(%rbp), %rdx
movl $0x1, %ecx
callq 0x8db0
movl -0xfc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xfc(%rbp)
jmp 0x15c37
jmp 0x15c73
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x108(%rbp), %rdx
movl -0x100(%rbp), %ecx
callq 0x8db0
movslq -0xfc(%rbp), %rax
cmpq -0x98(%rbp), %rax
jge 0x15cc7
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rsi
leaq -0xb1(%rbp), %rdx
movl $0x1, %ecx
callq 0x8db0
movl -0xfc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xfc(%rbp)
jmp 0x15c8d
movl -0x58(%rbp), %eax
addl -0x50(%rbp), %eax
movl %eax, -0x50(%rbp)
jmp 0x1508f
cmpl $0x0, -0x4c(%rbp)
je 0x15cef
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x30(%rbp), %rdx
movl -0x4c(%rbp), %ecx
callq 0x8db0
movq 0x3259a(%rip), %rax     # 0x48290
movq -0x70(%rbp), %rdi
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movq -0x68(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x15d93
jmp 0x15d0f
movq -0x10(%rbp), %rdi
movq -0x48(%rbp), %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x7990
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x15d5d
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0x7a10
movq -0x158(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
jmp 0x15d6d
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0x7a10
movq 0x3250f(%rip), %rax     # 0x48290
movq -0x70(%rbp), %rdi
xorl %ecx, %ecx
movl %ecx, %esi
callq *%rax
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x170, %rsp            # imm = 0x170
popq %rbp
retq