// Path: parser/src/main/java/io/lindstrom/mpd/data/descriptor/Descriptor.java
// @JsonTypeInfo(
//         use = JsonTypeInfo.Id.NAME,
//         property = "schemeIdUri",
//         include = JsonTypeInfo.As.EXISTING_PROPERTY,
//         visible = true,
//         defaultImpl = GenericDescriptor.class)
// @JsonSubTypes({
//         @JsonSubTypes.Type(value = Role.class, name = Role.SCHEME_ID_URI),
//         @JsonSubTypes.Type(value = Mp4Protection.class, name = Mp4Protection.SCHEME_ID_URI),
//         @JsonSubTypes.Type(value = PlayReadyContentProtection.class, name = PlayReadyContentProtection.SCHEME_ID_URI),
//         @JsonSubTypes.Type(value = WidewineProtection.class, name = WidewineProtection.SCHEME_ID_URI)
// })
// public abstract class Descriptor {
//     @JacksonXmlProperty(isAttribute = true)
//     protected final String schemeIdUri;
// 
//     @JacksonXmlProperty(isAttribute = true)
//     protected final String id;
// 
//     protected Descriptor(String schemeIdUri, String id) {
//         this.schemeIdUri = schemeIdUri;
//         this.id = id;
//     }
// 
//     public String getSchemeIdUri() {
//         return schemeIdUri;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     @JsonIgnore
//     public abstract String getValue();
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof Descriptor)) return false;
//         Descriptor that = (Descriptor) o;
//         return Objects.equals(schemeIdUri, that.schemeIdUri) &&
//                 Objects.equals(id, that.id);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(schemeIdUri, id);
//     }
// }
// 
// Path: parser/src/main/java/io/lindstrom/mpd/support/Utils.java
// public class Utils {
//     public static <T> List<T> unmodifiableList(List<T> list) {
//         if (list == null) {
//             return List.of();
//         } else {
//             return List.copyOf(list);
//         }
//     }
// 
//     @SafeVarargs
//     public static <T> List<T> varargsToList(T head, T ...tail) {
//         if (tail.length == 0) {
//             return List.of(head);
//         } else {
//             List<T> list = new ArrayList<>();
//             list.add(head);
//             list.addAll(List.of(tail));
//             return List.copyOf(list);
//         }
//     }
// }


import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import io.lindstrom.mpd.data.descriptor.Descriptor;
import io.lindstrom.mpd.support.Utils;
import java.util.List;
import java.util.Objects;
    private final String dependencyId;

    @JacksonXmlProperty(isAttribute = true)
    private final String mediaStreamStructureId;

    private Representation(List<Descriptor> framePackings, List<Descriptor> audioChannelConfigurations, List<Descriptor> contentProtections, List<Descriptor> essentialProperties, List<Descriptor> supplementalProperties, List<EventStream> inbandEventStreams, String profiles, Long width, Long height, Ratio sar, FrameRate frameRate, String audioSamplingRate, String mimeType, String segmentProfiles, String codecs, Double maximumSAPPeriod, Long startWithSAP, Double maxPlayoutRate, Boolean codingDependency, VideoScanType scanType, List<BaseURL> baseURLs, List<SubRepresentation> subRepresentations, SegmentBase segmentBase, SegmentList segmentList, SegmentTemplate segmentTemplate, String id, long bandwidth, Long qualityRanking, String dependencyId, String mediaStreamStructureId) {
        super(framePackings, audioChannelConfigurations, contentProtections, essentialProperties, supplementalProperties, inbandEventStreams, profiles, width, height, sar, frameRate, audioSamplingRate, mimeType, segmentProfiles, codecs, maximumSAPPeriod, startWithSAP, maxPlayoutRate, codingDependency, scanType);
        this.baseURLs = baseURLs;
        this.subRepresentations = subRepresentations;
        this.segmentBase = segmentBase;
        this.segmentList = segmentList;
        this.segmentTemplate = segmentTemplate;
        this.id = id;
        this.bandwidth = bandwidth;
        this.qualityRanking = qualityRanking;
        this.dependencyId = dependencyId;
        this.mediaStreamStructureId = mediaStreamStructureId;
    }

    @SuppressWarnings("unused")
    private Representation() {
        this.baseURLs = null;
        this.subRepresentations = null;
        this.segmentBase = null;
        this.segmentList = null;
        this.segmentTemplate = null;
        this.id = null;
        this.bandwidth = 0;
        this.qualityRanking = null;
        this.dependencyId = null;
// Path: parser/src/main/java/io/lindstrom/mpd/data/descriptor/Descriptor.java
// @JsonTypeInfo(
//         use = JsonTypeInfo.Id.NAME,
//         property = "schemeIdUri",
//         include = JsonTypeInfo.As.EXISTING_PROPERTY,
//         visible = true,
//         defaultImpl = GenericDescriptor.class)
// @JsonSubTypes({
//         @JsonSubTypes.Type(value = Role.class, name = Role.SCHEME_ID_URI),
//         @JsonSubTypes.Type(value = Mp4Protection.class, name = Mp4Protection.SCHEME_ID_URI),
//         @JsonSubTypes.Type(value = PlayReadyContentProtection.class, name = PlayReadyContentProtection.SCHEME_ID_URI),
//         @JsonSubTypes.Type(value = WidewineProtection.class, name = WidewineProtection.SCHEME_ID_URI)
// })
// public abstract class Descriptor {
//     @JacksonXmlProperty(isAttribute = true)
//     protected final String schemeIdUri;
// 
//     @JacksonXmlProperty(isAttribute = true)
//     protected final String id;
// 
//     protected Descriptor(String schemeIdUri, String id) {
//         this.schemeIdUri = schemeIdUri;
//         this.id = id;
//     }
// 
//     public String getSchemeIdUri() {
//         return schemeIdUri;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     @JsonIgnore
//     public abstract String getValue();
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof Descriptor)) return false;
//         Descriptor that = (Descriptor) o;
//         return Objects.equals(schemeIdUri, that.schemeIdUri) &&
//                 Objects.equals(id, that.id);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(schemeIdUri, id);
//     }
// }
// 
// Path: parser/src/main/java/io/lindstrom/mpd/support/Utils.java
// public class Utils {
//     public static <T> List<T> unmodifiableList(List<T> list) {
//         if (list == null) {
//             return List.of();
//         } else {
//             return List.copyOf(list);
//         }
//     }
// 
//     @SafeVarargs
//     public static <T> List<T> varargsToList(T head, T ...tail) {
//         if (tail.length == 0) {
//             return List.of(head);
//         } else {
//             List<T> list = new ArrayList<>();
//             list.add(head);
//             list.addAll(List.of(tail));
//             return List.copyOf(list);
//         }
//     }
// }


// Path: parser/src/main/java/io/lindstrom/mpd/data/Representation.java
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import io.lindstrom.mpd.data.descriptor.Descriptor;
import io.lindstrom.mpd.support.Utils;
import java.util.List;
import java.util.Objects;

    private final String dependencyId;

    @JacksonXmlProperty(isAttribute = true)
    private final String mediaStreamStructureId;

    private Representation(List<Descriptor> framePackings, List<Descriptor> audioChannelConfigurations, List<Descriptor> contentProtections, List<Descriptor> essentialProperties, List<Descriptor> supplementalProperties, List<EventStream> inbandEventStreams, String profiles, Long width, Long height, Ratio sar, FrameRate frameRate, String audioSamplingRate, String mimeType, String segmentProfiles, String codecs, Double maximumSAPPeriod, Long startWithSAP, Double maxPlayoutRate, Boolean codingDependency, VideoScanType scanType, List<BaseURL> baseURLs, List<SubRepresentation> subRepresentations, SegmentBase segmentBase, SegmentList segmentList, SegmentTemplate segmentTemplate, String id, long bandwidth, Long qualityRanking, String dependencyId, String mediaStreamStructureId) {
        super(framePackings, audioChannelConfigurations, contentProtections, essentialProperties, supplementalProperties, inbandEventStreams, profiles, width, height, sar, frameRate, audioSamplingRate, mimeType, segmentProfiles, codecs, maximumSAPPeriod, startWithSAP, maxPlayoutRate, codingDependency, scanType);
        this.baseURLs = baseURLs;
        this.subRepresentations = subRepresentations;
        this.segmentBase = segmentBase;
        this.segmentList = segmentList;
        this.segmentTemplate = segmentTemplate;
        this.id = id;
        this.bandwidth = bandwidth;
        this.qualityRanking = qualityRanking;
        this.dependencyId = dependencyId;
        this.mediaStreamStructureId = mediaStreamStructureId;
    }

    @SuppressWarnings("unused")
    private Representation() {
        this.baseURLs = null;
        this.subRepresentations = null;
        this.segmentBase = null;
        this.segmentList = null;
        this.segmentTemplate = null;
        this.id = null;
        this.bandwidth = 0;
        this.qualityRanking = null;
        this.dependencyId = null;
        this.mediaStreamStructureId = null;