static int vble_unpack(VBLEContext *ctx, GetBitContext *gb)

{

    int i;

    static const uint8_t LUT[256] = {

        8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

    };



    /* Read all the lengths in first */

    for (i = 0; i < ctx->size; i++) {

        /* At most we need to read 9 bits total to get indices up to 8 */

        int val = show_bits(gb, 8);



        // read reverse unary

        if (val) {

            val = LUT[val];

            skip_bits(gb, val + 1);

            ctx->len[i] = val;

        } else {

            skip_bits(gb, 8);

            if (!get_bits1(gb))

                return -1;

            ctx->len[i] = 8;

        }

    }



    /* For any values that have length 0 */

    memset(ctx->val, 0, ctx->size);



    for (i = 0; i < ctx->size; i++) {

        /* Check we have enough bits left */

        if (get_bits_left(gb) < ctx->len[i])

            return -1;



        /* get_bits can't take a length of 0 */

        if (ctx->len[i])

            ctx->val[i] = (1 << ctx->len[i]) + get_bits(gb, ctx->len[i]) - 1;

    }



    return 0;

}

static int vble_unpack(VBLEContext *ctx, GetBitContext *gb)

{

    int i;

    static const uint8_t LUT[256] = {

        8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

    };



    

    for (i = 0; i < ctx->size; i++) {

        

        int val = show_bits(gb, 8);



        

        if (val) {

            val = LUT[val];

            skip_bits(gb, val + 1);

            ctx->len[i] = val;

        } else {

            skip_bits(gb, 8);

            if (!get_bits1(gb))

                return -1;

            ctx->len[i] = 8;

        }

    }



    

    memset(ctx->val, 0, ctx->size);



    for (i = 0; i < ctx->size; i++) {

        

        if (get_bits_left(gb) < ctx->len[i])

            return -1;



        

        if (ctx->len[i])

            ctx->val[i] = (1 << ctx->len[i]) + get_bits(gb, ctx->len[i]) - 1;

    }



    return 0;

}

static int FUNC_0(VBLEContext *VAR_0, GetBitContext *VAR_1)

{

    int VAR_2;

    static const uint8_t VAR_3[256] = {

        8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

        5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,

    };



    

    for (VAR_2 = 0; VAR_2 < VAR_0->size; VAR_2++) {

        

        int val = show_bits(VAR_1, 8);



        

        if (val) {

            val = VAR_3[val];

            skip_bits(VAR_1, val + 1);

            VAR_0->len[VAR_2] = val;

        } else {

            skip_bits(VAR_1, 8);

            if (!get_bits1(VAR_1))

                return -1;

            VAR_0->len[VAR_2] = 8;

        }

    }



    

    memset(VAR_0->val, 0, VAR_0->size);



    for (VAR_2 = 0; VAR_2 < VAR_0->size; VAR_2++) {

        

        if (get_bits_left(VAR_1) < VAR_0->len[VAR_2])

            return -1;



        

        if (VAR_0->len[VAR_2])

            VAR_0->val[VAR_2] = (1 << VAR_0->len[VAR_2]) + get_bits(VAR_1, VAR_0->len[VAR_2]) - 1;

    }



    return 0;

}

static int FUNC_0(VBLEContext *VAR_0, GetBitContext *VAR_1)
{ int VAR_2; static const uint8_t VAR_3[256] = { 8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
}; for (VAR_2 = 0; VAR_2 < VAR_0->size; VAR_2++) { int val = show_bits(VAR_1, 8); if (val) { val = VAR_3[val]; skip_bits(VAR_1, val + 1); VAR_0->len[VAR_2] = val; } else { skip_bits(VAR_1, 8); if (!get_bits1(VAR_1))
return -1; VAR_0->len[VAR_2] = 8; } } memset(VAR_0->val, 0, VAR_0->size); for (VAR_2 = 0; VAR_2 < VAR_0->size; VAR_2++) { if (get_bits_left(VAR_1) < VAR_0->len[VAR_2])
return -1; if (VAR_0->len[VAR_2])
VAR_0->val[VAR_2] = (1 << VAR_0->len[VAR_2]) + get_bits(VAR_1, VAR_0->len[VAR_2]) - 1; } return 0; }