static int decode_info_header(NUTContext *nut){
    AVFormatContext *s= nut->avf;
    ByteIOContext *bc = s->pb;
    uint64_t tmp;
    unsigned int stream_id_plus1, chapter_start, chapter_len, count;
    int chapter_id, i;
    int64_t value, end;
    char name[256], str_value[1024], type_str[256];
    const char *type;
    end= get_packetheader(nut, bc, 1, INFO_STARTCODE);
    end += url_ftell(bc);
    GET_V(stream_id_plus1, tmp <= s->nb_streams)
    chapter_id   = get_s(bc);
    chapter_start= ff_get_v(bc);
    chapter_len  = ff_get_v(bc);
    count        = ff_get_v(bc);
    for(i=0; i<count; i++){
        get_str(bc, name, sizeof(name));
        value= get_s(bc);
        if(value == -1){
            type= "UTF-8";
            get_str(bc, str_value, sizeof(str_value));
        }else if(value == -2){
            get_str(bc, type_str, sizeof(type_str));
            type= type_str;
            get_str(bc, str_value, sizeof(str_value));
        }else if(value == -3){
            type= "s";
            value= get_s(bc);
        }else if(value == -4){
            type= "t";
            value= ff_get_v(bc);
        }else if(value < -4){
            type= "r";
            get_s(bc);
        }else{
            type= "v";
        }
        if (stream_id_plus1 < 0 || stream_id_plus1 > s->nb_streams) {
            av_log(s, AV_LOG_ERROR, "invalid stream id for info packet\n");
            continue;
        }
        if(chapter_id==0 && !strcmp(type, "UTF-8")){
            if     (!strcmp(name, "Author"))
                av_strlcpy(s->author   , str_value, sizeof(s->author));
            else if(!strcmp(name, "Title"))
                av_strlcpy(s->title    , str_value, sizeof(s->title));
            else if(!strcmp(name, "Copyright"))
                av_strlcpy(s->copyright, str_value, sizeof(s->copyright));
            else if(!strcmp(name, "Description"))
                av_strlcpy(s->comment  , str_value, sizeof(s->comment));
            else if(!strcmp(name, "Disposition"))
                set_disposition_bits(s, str_value, stream_id_plus1 - 1);
        }
    }
    if(skip_reserved(bc, end) || get_checksum(bc)){
        av_log(s, AV_LOG_ERROR, "info header checksum mismatch\n");
        return -1;
    }
    return 0;
}
['static int decode_info_header(NUTContext *nut){\n    AVFormatContext *s= nut->avf;\n    ByteIOContext *bc = s->pb;\n    uint64_t tmp;\n    unsigned int stream_id_plus1, chapter_start, chapter_len, count;\n    int chapter_id, i;\n    int64_t value, end;\n    char name[256], str_value[1024], type_str[256];\n    const char *type;\n    end= get_packetheader(nut, bc, 1, INFO_STARTCODE);\n    end += url_ftell(bc);\n    GET_V(stream_id_plus1, tmp <= s->nb_streams)\n    chapter_id   = get_s(bc);\n    chapter_start= ff_get_v(bc);\n    chapter_len  = ff_get_v(bc);\n    count        = ff_get_v(bc);\n    for(i=0; i<count; i++){\n        get_str(bc, name, sizeof(name));\n        value= get_s(bc);\n        if(value == -1){\n            type= "UTF-8";\n            get_str(bc, str_value, sizeof(str_value));\n        }else if(value == -2){\n            get_str(bc, type_str, sizeof(type_str));\n            type= type_str;\n            get_str(bc, str_value, sizeof(str_value));\n        }else if(value == -3){\n            type= "s";\n            value= get_s(bc);\n        }else if(value == -4){\n            type= "t";\n            value= ff_get_v(bc);\n        }else if(value < -4){\n            type= "r";\n            get_s(bc);\n        }else{\n            type= "v";\n        }\n        if (stream_id_plus1 < 0 || stream_id_plus1 > s->nb_streams) {\n            av_log(s, AV_LOG_ERROR, "invalid stream id for info packet\\n");\n            continue;\n        }\n        if(chapter_id==0 && !strcmp(type, "UTF-8")){\n            if     (!strcmp(name, "Author"))\n                av_strlcpy(s->author   , str_value, sizeof(s->author));\n            else if(!strcmp(name, "Title"))\n                av_strlcpy(s->title    , str_value, sizeof(s->title));\n            else if(!strcmp(name, "Copyright"))\n                av_strlcpy(s->copyright, str_value, sizeof(s->copyright));\n            else if(!strcmp(name, "Description"))\n                av_strlcpy(s->comment  , str_value, sizeof(s->comment));\n            else if(!strcmp(name, "Disposition"))\n                set_disposition_bits(s, str_value, stream_id_plus1 - 1);\n        }\n    }\n    if(skip_reserved(bc, end) || get_checksum(bc)){\n        av_log(s, AV_LOG_ERROR, "info header checksum mismatch\\n");\n        return -1;\n    }\n    return 0;\n}']