{ "version": 3, "sources": [ "../node_modules/browserify/node_modules/browser-pack/_prelude.js", "../externals/xml2json.js", "../node_modules/codem-isoboxer/dist/iso_boxer.js", "../node_modules/fast-deep-equal/index.js", "../node_modules/html-entities/index.js", "../node_modules/html-entities/lib/html4-entities.js", "../node_modules/html-entities/lib/html5-entities.js", "../node_modules/html-entities/lib/xml-entities.js", "../node_modules/localforage/dist/localforage.js", "core/Debug.js", "core/EventBus.js", "core/FactoryMaker.js", "core/Settings.js", "core/Utils.js", "core/Version.js", "core/errors/Errors.js", "core/errors/ErrorsBase.js", "core/events/CoreEvents.js", "core/events/Events.js", "core/events/EventsBase.js", "dash/DashHandler.js", "dash/constants/DashConstants.js", "dash/controllers/RepresentationController.js", "dash/controllers/SegmentsController.js", "dash/models/DashManifestModel.js", "dash/parser/DashParser.js", "dash/parser/maps/CommonProperty.js", "dash/parser/maps/MapNode.js", "dash/parser/maps/RepresentationBaseValuesMap.js", "dash/parser/maps/SegmentValuesMap.js", "dash/parser/matchers/BaseMatcher.js", "dash/parser/matchers/DateTimeMatcher.js", "dash/parser/matchers/DurationMatcher.js", "dash/parser/matchers/NumericMatcher.js", "dash/parser/matchers/StringMatcher.js", "dash/parser/objectiron.js", "dash/utils/ListSegmentsGetter.js", "dash/utils/SegmentBaseGetter.js", "dash/utils/SegmentsUtils.js", "dash/utils/TemplateSegmentsGetter.js", "dash/utils/TimelineSegmentsGetter.js", "dash/vo/AdaptationSet.js", "dash/vo/BaseURL.js", "dash/vo/Event.js", "dash/vo/EventStream.js", "dash/vo/Mpd.js", "dash/vo/Period.js", "dash/vo/Representation.js", "dash/vo/Segment.js", "dash/vo/UTCTiming.js", "offline/OfflineDownload.js", "offline/OfflineStream.js", "offline/OfflineStreamProcessor.js", "offline/constants/OfflineConstants.js", "offline/controllers/OfflineController.js", "offline/controllers/OfflineStoreController.js", "offline/errors/OfflineErrors.js", "offline/events/OfflineEvents.js", "offline/index.js", "offline/net/IndexDBOfflineLoader.js", "offline/storage/IndexDBStore.js", "offline/utils/OfflineIndexDBManifestParser.js", "offline/utils/OfflineUrlUtils.js", "offline/vo/OfflineDownloadVo.js", "streaming/FragmentLoader.js", "streaming/MediaPlayerEvents.js", "streaming/constants/Constants.js", "streaming/models/CmcdModel.js", "streaming/models/FragmentModel.js", "streaming/net/FetchLoader.js", "streaming/net/HTTPLoader.js", "streaming/net/SchemeLoaderFactory.js", "streaming/net/URLLoader.js", "streaming/net/XHRLoader.js", "streaming/thumbnail/ThumbnailTracks.js", "streaming/utils/BoxParser.js", "streaming/utils/DefaultURLUtils.js", "streaming/utils/IsoFile.js", "streaming/utils/ObjectUtils.js", "streaming/utils/RequestModifier.js", "streaming/utils/URLUtils.js", "streaming/vo/DashJSError.js", "streaming/vo/FragmentRequest.js", "streaming/vo/HeadRequest.js", "streaming/vo/IsoBox.js", "streaming/vo/IsoBoxSearchInfo.js", "streaming/vo/ThumbnailTrackInfo.js", "streaming/vo/metrics/HTTPRequest.js" ], "names": [], "mappings": "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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBC/sFqB,YAAY;;;;4BACd,iBAAiB;;;;4BACX,gBAAgB;;;;AAEzC,IAAM,cAAc,GAAG,CAAC,CAAC;AACzB,IAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,IAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,IAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,IAAM,cAAc,GAAG,CAAC,CAAC;AACzB,IAAM,eAAe,GAAG,CAAC,CAAC;;;;;;;AAO1B,SAAS,KAAK,CAAC,MAAM,EAAE;;AAEnB,UAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AACtB,QAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAM,QAAQ,GAAG,2BAAS,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACjD,QAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAEjC,QAAM,KAAK,GAA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", "file": "generated.js", "sourceRoot": "", "sourcesContent": [ "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i/g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n else\n return str;\n }\n\n function unescapeXmlChars(str) {\n return str.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/'/g, \"'\").replace(/&/g, '&');\n }\n\n function checkInStdFiltersArrayForm(stdFiltersArrayForm, obj, name, path) {\n var idx = 0;\n for(; idx < stdFiltersArrayForm.length; idx++) {\n var filterPath = stdFiltersArrayForm[idx];\n if( typeof filterPath === \"string\" ) {\n if(filterPath == path)\n break;\n }\n else\n if( filterPath instanceof RegExp) {\n if(filterPath.test(path))\n break;\n }\n else\n if( typeof filterPath === \"function\") {\n if(filterPath(obj, name, path))\n break;\n }\n }\n return idx!=stdFiltersArrayForm.length;\n }\n\n function toArrayAccessForm(obj, childName, path) {\n switch(config.arrayAccessForm) {\n case \"property\":\n if(!(obj[childName] instanceof Array))\n obj[childName+\"_asArray\"] = [obj[childName]];\n else\n obj[childName+\"_asArray\"] = obj[childName];\n break;\n /*case \"none\":\n break;*/\n }\n\n if(!(obj[childName] instanceof Array) && config.arrayAccessFormPaths.length > 0) {\n if(checkInStdFiltersArrayForm(config.arrayAccessFormPaths, obj, childName, path)) {\n obj[childName] = [obj[childName]];\n }\n }\n }\n\n function fromXmlDateTime(prop) {\n // Implementation based up on http://stackoverflow.com/questions/8178598/xml-datetime-to-javascript-date-object\n // Improved to support full spec and optional parts\n var bits = prop.split(/[-T:+Z]/g);\n\n var d = new Date(bits[0], bits[1]-1, bits[2]);\n var secondBits = bits[5].split(\"\\.\");\n d.setHours(bits[3], bits[4], secondBits[0]);\n if(secondBits.length>1)\n d.setMilliseconds(secondBits[1]);\n\n // Get supplied time zone offset in minutes\n if(bits[6] && bits[7]) {\n var offsetMinutes = bits[6] * 60 + Number(bits[7]);\n var sign = /\\d\\d-\\d\\d:\\d\\d$/.test(prop)? '-' : '+';\n\n // Apply the sign\n offsetMinutes = 0 + (sign == '-'? -1 * offsetMinutes : offsetMinutes);\n\n // Apply offset and local timezone\n d.setMinutes(d.getMinutes() - offsetMinutes - d.getTimezoneOffset())\n }\n else\n if(prop.indexOf(\"Z\", prop.length - 1) !== -1) {\n d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()));\n }\n\n // d is now a local time equivalent to the supplied time\n return d;\n }\n\n function checkFromXmlDateTimePaths(value, childName, fullPath) {\n if(config.datetimeAccessFormPaths.length > 0) {\n var path = fullPath.split(\"\\.#\")[0];\n if(checkInStdFiltersArrayForm(config.datetimeAccessFormPaths, value, childName, path)) {\n return fromXmlDateTime(value);\n }\n else\n return value;\n }\n else\n return value;\n }\n\n function checkXmlElementsFilter(obj, childType, childName, childPath) {\n if( childType == DOMNodeTypes.ELEMENT_NODE && config.xmlElementsFilter.length > 0) {\n return checkInStdFiltersArrayForm(config.xmlElementsFilter, obj, childName, childPath);\n }\n else\n return true;\n }\n\n function parseDOMChildren( node, path ) {\n if(node.nodeType == DOMNodeTypes.DOCUMENT_NODE) {\n var result = new Object;\n var nodeChildren = node.childNodes;\n // Alternative for firstElementChild which is not supported in some environments\n for(var cidx=0; cidx 1 && result.__text!=null && config.skipEmptyTextNodesForObj) {\n if( (config.stripWhitespaces && result.__text==\"\") || (result.__text.trim()==\"\")) {\n delete result.__text;\n }\n }\n delete result.__cnt;\n\n if( config.enableToStringFunc && (result.__text!=null || result.__cdata!=null )) {\n result.toString = function() {\n return (this.__text!=null? this.__text:'')+( this.__cdata!=null ? this.__cdata:'');\n };\n }\n\n return result;\n }\n else\n if(node.nodeType == DOMNodeTypes.TEXT_NODE || node.nodeType == DOMNodeTypes.CDATA_SECTION_NODE) {\n return node.nodeValue;\n }\n }\n\n function startTag(jsonObj, element, attrList, closed) {\n var resultStr = \"<\"+ ( (jsonObj!=null && jsonObj.__prefix!=null)? (jsonObj.__prefix+\":\"):\"\") + element;\n if(attrList!=null) {\n for(var aidx = 0; aidx < attrList.length; aidx++) {\n var attrName = attrList[aidx];\n var attrVal = jsonObj[attrName];\n if(config.escapeMode)\n attrVal=escapeXmlChars(attrVal);\n resultStr+=\" \"+attrName.substr(config.attributePrefix.length)+\"=\";\n if(config.useDoubleQuotes)\n resultStr+='\"'+attrVal+'\"';\n else\n resultStr+=\"'\"+attrVal+\"'\";\n }\n }\n if(!closed)\n resultStr+=\">\";\n else\n resultStr+=\"/>\";\n return resultStr;\n }\n\n function endTag(jsonObj,elementName) {\n return \"\";\n }\n\n function endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n }\n\n function jsonXmlSpecialElem ( jsonObj, jsonObjField ) {\n if((config.arrayAccessForm==\"property\" && endsWith(jsonObjField.toString(),(\"_asArray\")))\n || jsonObjField.toString().indexOf(config.attributePrefix)==0\n || jsonObjField.toString().indexOf(\"__\")==0\n || (jsonObj[jsonObjField] instanceof Function) )\n return true;\n else\n return false;\n }\n\n function jsonXmlElemCount ( jsonObj ) {\n var elementsCnt = 0;\n if(jsonObj instanceof Object ) {\n for( var it in jsonObj ) {\n if(jsonXmlSpecialElem ( jsonObj, it) )\n continue;\n elementsCnt++;\n }\n }\n return elementsCnt;\n }\n\n function checkJsonObjPropertiesFilter(jsonObj, propertyName, jsonObjPath) {\n return config.jsonPropertiesFilter.length == 0\n || jsonObjPath==\"\"\n || checkInStdFiltersArrayForm(config.jsonPropertiesFilter, jsonObj, propertyName, jsonObjPath);\n }\n\n function parseJSONAttributes ( jsonObj ) {\n var attrList = [];\n if(jsonObj instanceof Object ) {\n for( var ait in jsonObj ) {\n if(ait.toString().indexOf(\"__\")== -1 && ait.toString().indexOf(config.attributePrefix)==0) {\n attrList.push(ait);\n }\n }\n }\n return attrList;\n }\n\n function parseJSONTextAttrs ( jsonTxtObj ) {\n var result =\"\";\n\n if(jsonTxtObj.__cdata!=null) {\n result+=\"\";\n }\n\n if(jsonTxtObj.__text!=null) {\n if(config.escapeMode)\n result+=escapeXmlChars(jsonTxtObj.__text);\n else\n result+=jsonTxtObj.__text;\n }\n return result;\n }\n\n function parseJSONTextObject ( jsonTxtObj ) {\n var result =\"\";\n\n if( jsonTxtObj instanceof Object ) {\n result+=parseJSONTextAttrs ( jsonTxtObj );\n }\n else\n if(jsonTxtObj!=null) {\n if(config.escapeMode)\n result+=escapeXmlChars(jsonTxtObj);\n else\n result+=jsonTxtObj;\n }\n\n return result;\n }\n\n function getJsonPropertyPath(jsonObjPath, jsonPropName) {\n if (jsonObjPath===\"\") {\n return jsonPropName;\n }\n else\n return jsonObjPath+\".\"+jsonPropName;\n }\n\n function parseJSONArray ( jsonArrRoot, jsonArrObj, attrList, jsonObjPath ) {\n var result = \"\";\n if(jsonArrRoot.length == 0) {\n result+=startTag(jsonArrRoot, jsonArrObj, attrList, true);\n }\n else {\n for(var arIdx = 0; arIdx < jsonArrRoot.length; arIdx++) {\n result+=startTag(jsonArrRoot[arIdx], jsonArrObj, parseJSONAttributes(jsonArrRoot[arIdx]), false);\n result+=parseJSONObject(jsonArrRoot[arIdx], getJsonPropertyPath(jsonObjPath,jsonArrObj));\n result+=endTag(jsonArrRoot[arIdx],jsonArrObj);\n }\n }\n return result;\n }\n\n function parseJSONObject ( jsonObj, jsonObjPath ) {\n var result = \"\";\n\n var elementsCnt = jsonXmlElemCount ( jsonObj );\n\n if(elementsCnt > 0) {\n for( var it in jsonObj ) {\n\n if(jsonXmlSpecialElem ( jsonObj, it) || (jsonObjPath!=\"\" && !checkJsonObjPropertiesFilter(jsonObj, it, getJsonPropertyPath(jsonObjPath,it))) )\n continue;\n\n var subObj = jsonObj[it];\n\n var attrList = parseJSONAttributes( subObj )\n\n if(subObj == null || subObj == undefined) {\n result+=startTag(subObj, it, attrList, true);\n }\n else\n if(subObj instanceof Object) {\n\n if(subObj instanceof Array) {\n result+=parseJSONArray( subObj, it, attrList, jsonObjPath );\n }\n else if(subObj instanceof Date) {\n result+=startTag(subObj, it, attrList, false);\n result+=subObj.toISOString();\n result+=endTag(subObj,it);\n }\n else {\n var subObjElementsCnt = jsonXmlElemCount ( subObj );\n if(subObjElementsCnt > 0 || subObj.__text!=null || subObj.__cdata!=null) {\n result+=startTag(subObj, it, attrList, false);\n result+=parseJSONObject(subObj, getJsonPropertyPath(jsonObjPath,it));\n result+=endTag(subObj,it);\n }\n else {\n result+=startTag(subObj, it, attrList, true);\n }\n }\n }\n else {\n result+=startTag(subObj, it, attrList, false);\n result+=parseJSONTextObject(subObj);\n result+=endTag(subObj,it);\n }\n }\n }\n result+=parseJSONTextObject(jsonObj);\n\n return result;\n }\n\n this.parseXmlString = function(xmlDocStr) {\n var isIEParser = window.ActiveXObject || \"ActiveXObject\" in window;\n if (xmlDocStr === undefined) {\n return null;\n }\n var xmlDoc;\n if (window.DOMParser) {\n var parser=new window.DOMParser();\n var parsererrorNS = null;\n try {\n xmlDoc = parser.parseFromString( xmlDocStr, \"text/xml\" );\n if(xmlDoc.getElementsByTagNameNS(\"*\", \"parsererror\").length > 0) {\n xmlDoc = null;\n }\n }\n catch(err) {\n xmlDoc = null;\n }\n }\n else {\n // IE :(\n if(xmlDocStr.indexOf(\"\") + 2 );\n }\n xmlDoc=new ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async=\"false\";\n xmlDoc.loadXML(xmlDocStr);\n }\n return xmlDoc;\n };\n\n this.asArray = function(prop) {\n if (prop === undefined || prop == null)\n return [];\n else\n if(prop instanceof Array)\n return prop;\n else\n return [prop];\n };\n\n this.toXmlDateTime = function(dt) {\n if(dt instanceof Date)\n return dt.toISOString();\n else\n if(typeof(dt) === 'number' )\n return new Date(dt).toISOString();\n else\n return null;\n };\n\n this.asDateTime = function(prop) {\n if(typeof(prop) == \"string\") {\n return fromXmlDateTime(prop);\n }\n else\n return prop;\n };\n\n this.xml2json = function (xmlDoc) {\n return parseDOMChildren ( xmlDoc );\n };\n\n this.xml_str2json = function (xmlDocStr) {\n var xmlDoc = this.parseXmlString(xmlDocStr);\n if(xmlDoc!=null)\n return this.xml2json(xmlDoc);\n else\n return null;\n };\n\n this.json2xml_str = function (jsonObj) {\n return parseJSONObject ( jsonObj, \"\" );\n };\n\n this.json2xml = function (jsonObj) {\n var xmlDocStr = this.json2xml_str (jsonObj);\n return this.parseXmlString(xmlDocStr);\n };\n\n this.getVersion = function () {\n return VERSION;\n };\n}\n\nexport default X2JS;\n", "/*! codem-isoboxer v0.3.6 https://github.com/madebyhiro/codem-isoboxer/blob/master/LICENSE.txt */\nvar ISOBoxer = {};\n\nISOBoxer.parseBuffer = function(arrayBuffer) {\n return new ISOFile(arrayBuffer).parse();\n};\n\nISOBoxer.addBoxProcessor = function(type, parser) {\n if (typeof type !== 'string' || typeof parser !== 'function') {\n return;\n }\n ISOBox.prototype._boxProcessors[type] = parser;\n};\n\nISOBoxer.createFile = function() {\n return new ISOFile();\n};\n\n// See ISOBoxer.append() for 'pos' parameter syntax\nISOBoxer.createBox = function(type, parent, pos) {\n var newBox = ISOBox.create(type);\n if (parent) {\n parent.append(newBox, pos);\n }\n return newBox;\n};\n\n// See ISOBoxer.append() for 'pos' parameter syntax\nISOBoxer.createFullBox = function(type, parent, pos) {\n var newBox = ISOBoxer.createBox(type, parent, pos);\n newBox.version = 0;\n newBox.flags = 0;\n return newBox;\n};\n\nISOBoxer.Utils = {};\nISOBoxer.Utils.dataViewToString = function(dataView, encoding) {\n var impliedEncoding = encoding || 'utf-8';\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder(impliedEncoding).decode(dataView);\n }\n var a = [];\n var i = 0;\n\n if (impliedEncoding === 'utf-8') {\n /* The following algorithm is essentially a rewrite of the UTF8.decode at\n http://bannister.us/weblog/2007/simple-base64-encodedecode-javascript/\n */\n\n while (i < dataView.byteLength) {\n var c = dataView.getUint8(i++);\n if (c < 0x80) {\n // 1-byte character (7 bits)\n } else if (c < 0xe0) {\n // 2-byte character (11 bits)\n c = (c & 0x1f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n } else if (c < 0xf0) {\n // 3-byte character (16 bits)\n c = (c & 0xf) << 12;\n c |= (dataView.getUint8(i++) & 0x3f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n } else {\n // 4-byte character (21 bits)\n c = (c & 0x7) << 18;\n c |= (dataView.getUint8(i++) & 0x3f) << 12;\n c |= (dataView.getUint8(i++) & 0x3f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n }\n a.push(String.fromCharCode(c));\n }\n } else { // Just map byte-by-byte (probably wrong)\n while (i < dataView.byteLength) {\n a.push(String.fromCharCode(dataView.getUint8(i++)));\n }\n }\n return a.join('');\n};\n\nISOBoxer.Utils.utf8ToByteArray = function(string) {\n // Only UTF-8 encoding is supported by TextEncoder\n var u, i;\n if (typeof TextEncoder !== 'undefined') {\n u = new TextEncoder().encode(string);\n } else {\n u = [];\n for (i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n if (c < 0x80) {\n u.push(c);\n } else if (c < 0x800) {\n u.push(0xC0 | (c >> 6));\n u.push(0x80 | (63 & c));\n } else if (c < 0x10000) {\n u.push(0xE0 | (c >> 12));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n } else {\n u.push(0xF0 | (c >> 18));\n u.push(0x80 | (63 & (c >> 12)));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n }\n }\n }\n return u;\n};\n\n// Method to append a box in the list of child boxes\n// The 'pos' parameter can be either:\n// - (number) a position index at which to insert the new box\n// - (string) the type of the box after which to insert the new box\n// - (object) the box after which to insert the new box\nISOBoxer.Utils.appendBox = function(parent, box, pos) {\n box._offset = parent._cursor.offset;\n box._root = (parent._root ? parent._root : parent);\n box._raw = parent._raw;\n box._parent = parent;\n\n if (pos === -1) {\n // The new box is a sub-box of the parent but not added in boxes array,\n // for example when the new box is set as an entry (see dref and stsd for example)\n return;\n }\n\n if (pos === undefined || pos === null) {\n parent.boxes.push(box);\n return;\n }\n\n var index = -1,\n type;\n\n if (typeof pos === \"number\") {\n index = pos;\n } else {\n if (typeof pos === \"string\") {\n type = pos;\n } else if (typeof pos === \"object\" && pos.type) {\n type = pos.type;\n } else {\n parent.boxes.push(box);\n return;\n }\n\n for (var i = 0; i < parent.boxes.length; i++) {\n if (type === parent.boxes[i].type) {\n index = i + 1;\n break;\n }\n }\n }\n parent.boxes.splice(index, 0, box);\n};\n\nif (typeof exports !== 'undefined') {\n exports.parseBuffer = ISOBoxer.parseBuffer;\n exports.addBoxProcessor = ISOBoxer.addBoxProcessor;\n exports.createFile = ISOBoxer.createFile;\n exports.createBox = ISOBoxer.createBox;\n exports.createFullBox = ISOBoxer.createFullBox;\n exports.Utils = ISOBoxer.Utils;\n}\n\nISOBoxer.Cursor = function(initialOffset) {\n this.offset = (typeof initialOffset == 'undefined' ? 0 : initialOffset);\n};\n\nvar ISOFile = function(arrayBuffer) {\n this._cursor = new ISOBoxer.Cursor();\n this.boxes = [];\n if (arrayBuffer) {\n this._raw = new DataView(arrayBuffer);\n }\n};\n\nISOFile.prototype.fetch = function(type) {\n var result = this.fetchAll(type, true);\n return (result.length ? result[0] : null);\n};\n\nISOFile.prototype.fetchAll = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n};\n\nISOFile.prototype.parse = function() {\n this._cursor.offset = 0;\n this.boxes = [];\n while (this._cursor.offset < this._raw.byteLength) {\n var box = ISOBox.parse(this);\n\n // Box could not be parsed\n if (typeof box.type === 'undefined') break;\n\n this.boxes.push(box);\n }\n return this;\n};\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n};\n\nISOFile.prototype.write = function() {\n\n var length = 0,\n i;\n\n for (i = 0; i < this.boxes.length; i++) {\n length += this.boxes[i].getLength(false);\n }\n\n var bytes = new Uint8Array(length);\n this._rawo = new DataView(bytes.buffer);\n this.bytes = bytes;\n this._cursor.offset = 0;\n\n for (i = 0; i < this.boxes.length; i++) {\n this.boxes[i].write();\n }\n\n return bytes.buffer;\n};\n\nISOFile.prototype.append = function(box, pos) {\n ISOBoxer.Utils.appendBox(this, box, pos);\n};\nvar ISOBox = function() {\n this._cursor = new ISOBoxer.Cursor();\n};\n\nISOBox.parse = function(parent) {\n var newBox = new ISOBox();\n newBox._offset = parent._cursor.offset;\n newBox._root = (parent._root ? parent._root : parent);\n newBox._raw = parent._raw;\n newBox._parent = parent;\n newBox._parseBox();\n parent._cursor.offset = newBox._raw.byteOffset + newBox._raw.byteLength;\n return newBox;\n};\n\nISOBox.create = function(type) {\n var newBox = new ISOBox();\n newBox.type = type;\n newBox.boxes = [];\n return newBox;\n};\n\nISOBox.prototype._boxContainers = ['dinf', 'edts', 'mdia', 'meco', 'mfra', 'minf', 'moof', 'moov', 'mvex', 'stbl', 'strk', 'traf', 'trak', 'tref', 'udta', 'vttc', 'sinf', 'schi', 'encv', 'enca'];\n\nISOBox.prototype._boxProcessors = {};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Generic read/write functions\n\nISOBox.prototype._procField = function (name, type, size) {\n if (this._parsing) {\n this[name] = this._readField(type, size);\n }\n else {\n this._writeField(type, size, this[name]);\n }\n};\n\nISOBox.prototype._procFieldArray = function (name, length, type, size) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name][i] = this._readField(type, size);\n }\n }\n else {\n for (i = 0; i < this[name].length; i++) {\n this._writeField(type, size, this[name][i]);\n }\n }\n};\n\nISOBox.prototype._procFullBox = function() {\n this._procField('version', 'uint', 8);\n this._procField('flags', 'uint', 24);\n};\n\nISOBox.prototype._procEntries = function(name, length, fn) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name].push({});\n fn.call(this, this[name][i]);\n }\n }\n else {\n for (i = 0; i < length; i++) {\n fn.call(this, this[name][i]);\n }\n }\n};\n\nISOBox.prototype._procSubEntries = function(entry, name, length, fn) {\n var i;\n if (this._parsing) {\n entry[name] = [];\n for (i = 0; i < length; i++) {\n entry[name].push({});\n fn.call(this, entry[name][i]);\n }\n }\n else {\n for (i = 0; i < length; i++) {\n fn.call(this, entry[name][i]);\n }\n }\n};\n\nISOBox.prototype._procEntryField = function (entry, name, type, size) {\n if (this._parsing) {\n entry[name] = this._readField(type, size);\n }\n else {\n this._writeField(type, size, entry[name]);\n }\n};\n\nISOBox.prototype._procSubBoxes = function(name, length) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name].push(ISOBox.parse(this));\n }\n }\n else {\n for (i = 0; i < length; i++) {\n if (this._rawo) {\n this[name][i].write();\n } else {\n this.size += this[name][i].getLength();\n }\n }\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Read/parse functions\n\nISOBox.prototype._readField = function(type, size) {\n switch (type) {\n case 'uint':\n return this._readUint(size);\n case 'int':\n return this._readInt(size);\n case 'template':\n return this._readTemplate(size);\n case 'string':\n return (size === -1) ? this._readTerminatedString() : this._readString(size);\n case 'data':\n return this._readData(size);\n case 'utf8':\n return this._readUTF8String();\n default:\n return -1;\n }\n};\n\nISOBox.prototype._readInt = function(size) {\n var result = null,\n offset = this._cursor.offset - this._raw.byteOffset;\n switch(size) {\n case 8:\n result = this._raw.getInt8(offset);\n break;\n case 16:\n result = this._raw.getInt16(offset);\n break;\n case 32:\n result = this._raw.getInt32(offset);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n var s1 = this._raw.getInt32(offset);\n var s2 = this._raw.getInt32(offset + 4);\n result = (s1 * Math.pow(2,32)) + s2;\n break;\n }\n this._cursor.offset += (size >> 3);\n return result;\n};\n\nISOBox.prototype._readUint = function(size) {\n var result = null,\n offset = this._cursor.offset - this._raw.byteOffset,\n s1, s2;\n switch(size) {\n case 8:\n result = this._raw.getUint8(offset);\n break;\n case 16:\n result = this._raw.getUint16(offset);\n break;\n case 24:\n s1 = this._raw.getUint16(offset);\n s2 = this._raw.getUint8(offset + 2);\n result = (s1 << 8) + s2;\n break;\n case 32:\n result = this._raw.getUint32(offset);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n s1 = this._raw.getUint32(offset);\n s2 = this._raw.getUint32(offset + 4);\n result = (s1 * Math.pow(2,32)) + s2;\n break;\n }\n this._cursor.offset += (size >> 3);\n return result;\n};\n\nISOBox.prototype._readString = function(length) {\n var str = '';\n for (var c = 0; c < length; c++) {\n var char = this._readUint(8);\n str += String.fromCharCode(char);\n }\n return str;\n};\n\nISOBox.prototype._readTemplate = function(size) {\n var pre = this._readUint(size / 2);\n var post = this._readUint(size / 2);\n return pre + (post / Math.pow(2, size / 2));\n};\n\nISOBox.prototype._readTerminatedString = function() {\n var str = '';\n while (this._cursor.offset - this._offset < this._raw.byteLength) {\n var char = this._readUint(8);\n if (char === 0) break;\n str += String.fromCharCode(char);\n }\n return str;\n};\n\nISOBox.prototype._readData = function(size) {\n var length = (size > 0) ? size : (this._raw.byteLength - (this._cursor.offset - this._offset));\n if (length > 0) {\n var data = new Uint8Array(this._raw.buffer, this._cursor.offset, length);\n\n this._cursor.offset += length;\n return data;\n }\n else {\n return null;\n }\n};\n\nISOBox.prototype._readUTF8String = function() {\n var length = this._raw.byteLength - (this._cursor.offset - this._offset);\n var data = null;\n if (length > 0) {\n data = new DataView(this._raw.buffer, this._cursor.offset, length);\n this._cursor.offset += length;\n }\n \n return data ? ISOBoxer.Utils.dataViewToString(data) : data;\n};\n\nISOBox.prototype._parseBox = function() {\n this._parsing = true;\n this._cursor.offset = this._offset;\n\n // return immediately if there are not enough bytes to read the header\n if (this._offset + 8 > this._raw.buffer.byteLength) {\n this._root._incomplete = true;\n return;\n }\n\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n switch(this.size) {\n case 0:\n this._raw = new DataView(this._raw.buffer, this._offset, (this._raw.byteLength - this._cursor.offset + 8));\n break;\n case 1:\n if (this._offset + this.size > this._raw.buffer.byteLength) {\n this._incomplete = true;\n this._root._incomplete = true;\n } else {\n this._raw = new DataView(this._raw.buffer, this._offset, this.largesize);\n }\n break;\n default:\n if (this._offset + this.size > this._raw.buffer.byteLength) {\n this._incomplete = true;\n this._root._incomplete = true;\n } else {\n this._raw = new DataView(this._raw.buffer, this._offset, this.size);\n }\n }\n\n // additional parsing\n if (!this._incomplete) {\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n if (this._boxContainers.indexOf(this.type) !== -1) {\n this._parseContainerBox();\n } else{\n // Unknown box => read and store box content\n this._data = this._readData();\n }\n }\n};\n\nISOBox.prototype._parseFullBox = function() {\n this.version = this._readUint(8);\n this.flags = this._readUint(24);\n};\n\nISOBox.prototype._parseContainerBox = function() {\n this.boxes = [];\n while (this._cursor.offset - this._raw.byteOffset < this._raw.byteLength) {\n this.boxes.push(ISOBox.parse(this));\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Write functions\n\nISOBox.prototype.append = function(box, pos) {\n ISOBoxer.Utils.appendBox(this, box, pos);\n};\n\nISOBox.prototype.getLength = function() {\n this._parsing = false;\n this._rawo = null;\n\n this.size = 0;\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n\n if (this._boxContainers.indexOf(this.type) !== -1) {\n for (var i = 0; i < this.boxes.length; i++) {\n this.size += this.boxes[i].getLength();\n }\n } \n\n if (this._data) {\n this._writeData(this._data);\n }\n\n return this.size;\n};\n\nISOBox.prototype.write = function() {\n this._parsing = false;\n this._cursor.offset = this._parent._cursor.offset;\n\n switch(this.size) {\n case 0:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, (this.parent._rawo.byteLength - this._cursor.offset));\n break;\n case 1:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, this.largesize);\n break;\n default:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, this.size);\n }\n\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n\n if (this._boxContainers.indexOf(this.type) !== -1) {\n for (var i = 0; i < this.boxes.length; i++) {\n this.boxes[i].write();\n }\n } \n\n if (this._data) {\n this._writeData(this._data);\n }\n\n this._parent._cursor.offset += this.size;\n\n return this.size;\n};\n\nISOBox.prototype._writeInt = function(size, value) {\n if (this._rawo) {\n var offset = this._cursor.offset - this._rawo.byteOffset;\n switch(size) {\n case 8:\n this._rawo.setInt8(offset, value);\n break;\n case 16:\n this._rawo.setInt16(offset, value);\n break;\n case 32:\n this._rawo.setInt32(offset, value);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n var s1 = Math.floor(value / Math.pow(2,32));\n var s2 = value - (s1 * Math.pow(2,32));\n this._rawo.setUint32(offset, s1);\n this._rawo.setUint32(offset + 4, s2);\n break;\n }\n this._cursor.offset += (size >> 3);\n } else {\n this.size += (size >> 3);\n }\n};\n\nISOBox.prototype._writeUint = function(size, value) {\n\n if (this._rawo) {\n var offset = this._cursor.offset - this._rawo.byteOffset,\n s1, s2;\n switch(size) {\n case 8:\n this._rawo.setUint8(offset, value);\n break;\n case 16:\n this._rawo.setUint16(offset, value);\n break;\n case 24:\n s1 = (value & 0xFFFF00) >> 8;\n s2 = (value & 0x0000FF);\n this._rawo.setUint16(offset, s1);\n this._rawo.setUint8(offset + 2, s2);\n break;\n case 32:\n this._rawo.setUint32(offset, value);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n s1 = Math.floor(value / Math.pow(2,32));\n s2 = value - (s1 * Math.pow(2,32));\n this._rawo.setUint32(offset, s1);\n this._rawo.setUint32(offset + 4, s2);\n break;\n }\n this._cursor.offset += (size >> 3);\n } else {\n this.size += (size >> 3);\n }\n};\n\nISOBox.prototype._writeString = function(size, str) {\n for (var c = 0; c < size; c++) {\n this._writeUint(8, str.charCodeAt(c));\n }\n};\n\nISOBox.prototype._writeTerminatedString = function(str) {\n if (str.length === 0) {\n return;\n }\n for (var c = 0; c < str.length; c++) {\n this._writeUint(8, str.charCodeAt(c));\n }\n this._writeUint(8, 0);\n};\n\nISOBox.prototype._writeTemplate = function(size, value) {\n var pre = Math.floor(value);\n var post = (value - pre) * Math.pow(2, size / 2);\n this._writeUint(size / 2, pre);\n this._writeUint(size / 2, post);\n};\n\nISOBox.prototype._writeData = function(data) {\n var i;\n //data to copy\n if (data) {\n if (this._rawo) {\n //Array and Uint8Array has also to be managed\n if (data instanceof Array) {\n var offset = this._cursor.offset - this._rawo.byteOffset;\n for (var i = 0; i < data.length; i++) {\n this._rawo.setInt8(offset + i, data[i]);\n }\n this._cursor.offset += data.length;\n } \n\n if (data instanceof Uint8Array) {\n this._root.bytes.set(data, this._cursor.offset);\n this._cursor.offset += data.length;\n }\n\n } else {\n //nothing to copy only size to compute\n this.size += data.length;\n }\n }\n};\n\nISOBox.prototype._writeUTF8String = function(string) {\n var u = ISOBoxer.Utils.utf8ToByteArray(string);\n if (this._rawo) {\n var dataView = new DataView(this._rawo.buffer, this._cursor.offset, u.length);\n for (var i = 0; i < u.length; i++) {\n dataView.setUint8(i, u[i]);\n }\n } else {\n this.size += u.length;\n }\n};\n\nISOBox.prototype._writeField = function(type, size, value) {\n switch (type) {\n case 'uint':\n this._writeUint(size, value);\n break;\n case 'int':\n this._writeInt(size, value);\n break;\n case 'template':\n this._writeTemplate(size, value);\n break;\n case 'string':\n if (size == -1) {\n this._writeTerminatedString(value);\n } else {\n this._writeString(size, value);\n }\n break;\n case 'data':\n this._writeData(value);\n break;\n case 'utf8':\n this._writeUTF8String(value);\n break;\n default:\n break;\n }\n};\n\n// ISO/IEC 14496-15:2014 - avc1 box\nISOBox.prototype._boxProcessors['avc1'] = ISOBox.prototype._boxProcessors['encv'] = function() {\n // SampleEntry fields\n this._procFieldArray('reserved1', 6, 'uint', 8);\n this._procField('data_reference_index', 'uint', 16);\n // VisualSampleEntry fields\n this._procField('pre_defined1', 'uint', 16);\n this._procField('reserved2', 'uint', 16);\n this._procFieldArray('pre_defined2', 3, 'uint', 32);\n this._procField('width', 'uint', 16);\n this._procField('height', 'uint', 16);\n this._procField('horizresolution', 'template', 32);\n this._procField('vertresolution', 'template', 32);\n this._procField('reserved3', 'uint', 32);\n this._procField('frame_count', 'uint', 16);\n this._procFieldArray('compressorname', 32,'uint', 8);\n this._procField('depth', 'uint', 16);\n this._procField('pre_defined3', 'int', 16);\n // AVCSampleEntry fields\n this._procField('config', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.7.2 Data Reference Box\nISOBox.prototype._boxProcessors['dref'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procSubBoxes('entries', this.entry_count);\n};\n\n// ISO/IEC 14496-12:2012 - 8.6.6 Edit List Box\nISOBox.prototype._boxProcessors['elst'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'segment_duration', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'media_time', 'int', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'media_rate_integer', 'int', 16);\n this._procEntryField(entry, 'media_rate_fraction', 'int', 16);\n });\n};\n\n// ISO/IEC 23009-1:2014 - 5.10.3.3 Event Message Box\nISOBox.prototype._boxProcessors['emsg'] = function() {\n this._procFullBox();\n if (this.version == 1) {\n this._procField('timescale', 'uint', 32);\n this._procField('presentation_time', 'uint', 64);\n this._procField('event_duration', 'uint', 32);\n this._procField('id', 'uint', 32);\n this._procField('scheme_id_uri', 'string', -1);\n this._procField('value', 'string', -1);\n } else {\n this._procField('scheme_id_uri', 'string', -1);\n this._procField('value', 'string', -1);\n this._procField('timescale', 'uint', 32);\n this._procField('presentation_time_delta', 'uint', 32);\n this._procField('event_duration', 'uint', 32);\n this._procField('id', 'uint', 32);\n }\n this._procField('message_data', 'data', -1);\n};\n// ISO/IEC 14496-12:2012 - 8.1.2 Free Space Box\nISOBox.prototype._boxProcessors['free'] = ISOBox.prototype._boxProcessors['skip'] = function() {\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.12.2 Original Format Box\nISOBox.prototype._boxProcessors['frma'] = function() {\n this._procField('data_format', 'uint', 32);\n};\n// ISO/IEC 14496-12:2012 - 4.3 File Type Box / 8.16.2 Segment Type Box\nISOBox.prototype._boxProcessors['ftyp'] =\nISOBox.prototype._boxProcessors['styp'] = function() {\n this._procField('major_brand', 'string', 4);\n this._procField('minor_version', 'uint', 32);\n var nbCompatibleBrands = -1;\n if (this._parsing) {\n nbCompatibleBrands = (this._raw.byteLength - (this._cursor.offset - this._raw.byteOffset)) / 4;\n }\n this._procFieldArray('compatible_brands', nbCompatibleBrands, 'string', 4);\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.3 Handler Reference Box\nISOBox.prototype._boxProcessors['hdlr'] = function() {\n this._procFullBox();\n this._procField('pre_defined', 'uint', 32);\n this._procField('handler_type', 'string', 4);\n this._procFieldArray('reserved', 3, 'uint', 32);\n this._procField('name', 'string', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.1.1 Media Data Box\nISOBox.prototype._boxProcessors['mdat'] = function() {\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.2 Media Header Box\nISOBox.prototype._boxProcessors['mdhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('timescale', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n if (!this._parsing && typeof this.language === 'string') {\n // In case of writing and language has been set as a string, then convert it into char codes array\n this.language = ((this.language.charCodeAt(0) - 0x60) << 10) |\n ((this.language.charCodeAt(1) - 0x60) << 5) |\n ((this.language.charCodeAt(2) - 0x60));\n }\n this._procField('language', 'uint', 16);\n if (this._parsing) {\n this.language = String.fromCharCode(((this.language >> 10) & 0x1F) + 0x60,\n ((this.language >> 5) & 0x1F) + 0x60,\n (this.language & 0x1F) + 0x60);\n }\n this._procField('pre_defined', 'uint', 16);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.2 Movie Extends Header Box\nISOBox.prototype._boxProcessors['mehd'] = function() {\n this._procFullBox();\n this._procField('fragment_duration', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.5 Movie Fragment Header Box\nISOBox.prototype._boxProcessors['mfhd'] = function() {\n this._procFullBox();\n this._procField('sequence_number', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.11 Movie Fragment Random Access Box\nISOBox.prototype._boxProcessors['mfro'] = function() {\n this._procFullBox();\n this._procField('mfra_size', 'uint', 32); // Called mfra_size to distinguish from the normal \"size\" attribute of a box\n};\n\n\n// ISO/IEC 14496-12:2012 - 8.5.2.2 mp4a box (use AudioSampleEntry definition and naming)\nISOBox.prototype._boxProcessors['mp4a'] = ISOBox.prototype._boxProcessors['enca'] = function() {\n // SampleEntry fields\n this._procFieldArray('reserved1', 6, 'uint', 8);\n this._procField('data_reference_index', 'uint', 16);\n // AudioSampleEntry fields\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procField('channelcount', 'uint', 16);\n this._procField('samplesize', 'uint', 16);\n this._procField('pre_defined', 'uint', 16);\n this._procField('reserved3', 'uint', 16);\n this._procField('samplerate', 'template', 32);\n // ESDescriptor fields\n this._procField('esds', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.2.2 Movie Header Box\nISOBox.prototype._boxProcessors['mvhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('timescale', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('rate', 'template', 32);\n this._procField('volume', 'template', 16);\n this._procField('reserved1', 'uint', 16);\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procFieldArray('matrix', 9, 'template', 32);\n this._procFieldArray('pre_defined', 6,'uint', 32);\n this._procField('next_track_ID', 'uint', 32);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Cue Payload Box.\nISOBox.prototype._boxProcessors['payl'] = function() {\n this._procField('cue_text', 'utf8');\n};\n\n//ISO/IEC 23001-7:2011 - 8.1 Protection System Specific Header Box\nISOBox.prototype._boxProcessors['pssh'] = function() {\n this._procFullBox();\n \n this._procFieldArray('SystemID', 16, 'uint', 8);\n this._procField('DataSize', 'uint', 32);\n this._procFieldArray('Data', this.DataSize, 'uint', 8);\n};\n// ISO/IEC 14496-12:2012 - 8.12.5 Scheme Type Box\nISOBox.prototype._boxProcessors['schm'] = function() {\n this._procFullBox();\n \n this._procField('scheme_type', 'uint', 32);\n this._procField('scheme_version', 'uint', 32);\n\n if (this.flags & 0x000001) {\n this._procField('scheme_uri', 'string', -1);\n }\n};\n// ISO/IEC 14496-12:2012 - 8.6.4.1 sdtp box \nISOBox.prototype._boxProcessors['sdtp'] = function() {\n this._procFullBox();\n\n var sample_count = -1;\n if (this._parsing) {\n sample_count = (this._raw.byteLength - (this._cursor.offset - this._raw.byteOffset));\n }\n\n this._procFieldArray('sample_dependency_table', sample_count, 'uint', 8);\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.3 Segment Index Box\nISOBox.prototype._boxProcessors['sidx'] = function() {\n this._procFullBox();\n this._procField('reference_ID', 'uint', 32);\n this._procField('timescale', 'uint', 32);\n this._procField('earliest_presentation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('first_offset', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('reserved', 'uint', 16);\n this._procField('reference_count', 'uint', 16);\n this._procEntries('references', this.reference_count, function(entry) {\n if (!this._parsing) {\n entry.reference = (entry.reference_type & 0x00000001) << 31;\n entry.reference |= (entry.referenced_size & 0x7FFFFFFF);\n entry.sap = (entry.starts_with_SAP & 0x00000001) << 31;\n entry.sap |= (entry.SAP_type & 0x00000003) << 28;\n entry.sap |= (entry.SAP_delta_time & 0x0FFFFFFF);\n }\n this._procEntryField(entry, 'reference', 'uint', 32);\n this._procEntryField(entry, 'subsegment_duration', 'uint', 32);\n this._procEntryField(entry, 'sap', 'uint', 32);\n if (this._parsing) {\n entry.reference_type = (entry.reference >> 31) & 0x00000001;\n entry.referenced_size = entry.reference & 0x7FFFFFFF;\n entry.starts_with_SAP = (entry.sap >> 31) & 0x00000001;\n entry.SAP_type = (entry.sap >> 28) & 0x00000007;\n entry.SAP_delta_time = (entry.sap & 0x0FFFFFFF);\n }\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.5.3 Sound Media Header Box\nISOBox.prototype._boxProcessors['smhd'] = function() {\n this._procFullBox();\n this._procField('balance', 'uint', 16);\n this._procField('reserved', 'uint', 16);\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.4 Subsegment Index Box\nISOBox.prototype._boxProcessors['ssix'] = function() {\n this._procFullBox();\n this._procField('subsegment_count', 'uint', 32);\n this._procEntries('subsegments', this.subsegment_count, function(subsegment) {\n this._procEntryField(subsegment, 'ranges_count', 'uint', 32);\n this._procSubEntries(subsegment, 'ranges', subsegment.ranges_count, function(range) {\n this._procEntryField(range, 'level', 'uint', 8);\n this._procEntryField(range, 'range_size', 'uint', 24);\n });\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.5.2 Sample Description Box\nISOBox.prototype._boxProcessors['stsd'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procSubBoxes('entries', this.entry_count);\n};\n\n// ISO/IEC 14496-12:2015 - 8.7.7 Sub-Sample Information Box\nISOBox.prototype._boxProcessors['subs'] = function () {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'sample_delta', 'uint', 32);\n this._procEntryField(entry, 'subsample_count', 'uint', 16);\n this._procSubEntries(entry, 'subsamples', entry.subsample_count, function(subsample) {\n this._procEntryField(subsample, 'subsample_size', 'uint', (this.version === 1) ? 32 : 16);\n this._procEntryField(subsample, 'subsample_priority', 'uint', 8);\n this._procEntryField(subsample, 'discardable', 'uint', 8);\n this._procEntryField(subsample, 'codec_specific_parameters', 'uint', 32);\n });\n });\n};\n\n//ISO/IEC 23001-7:2011 - 8.2 Track Encryption Box\nISOBox.prototype._boxProcessors['tenc'] = function() {\n this._procFullBox();\n\n this._procField('default_IsEncrypted', 'uint', 24);\n this._procField('default_IV_size', 'uint', 8);\n this._procFieldArray('default_KID', 16, 'uint', 8);\n };\n\n// ISO/IEC 14496-12:2012 - 8.8.12 Track Fragmnent Decode Time\nISOBox.prototype._boxProcessors['tfdt'] = function() {\n this._procFullBox();\n this._procField('baseMediaDecodeTime', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.7 Track Fragment Header Box\nISOBox.prototype._boxProcessors['tfhd'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n if (this.flags & 0x01) this._procField('base_data_offset', 'uint', 64);\n if (this.flags & 0x02) this._procField('sample_description_offset', 'uint', 32);\n if (this.flags & 0x08) this._procField('default_sample_duration', 'uint', 32);\n if (this.flags & 0x10) this._procField('default_sample_size', 'uint', 32);\n if (this.flags & 0x20) this._procField('default_sample_flags', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.10 Track Fragment Random Access Box\nISOBox.prototype._boxProcessors['tfra'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n if (!this._parsing) {\n this.reserved = 0;\n this.reserved |= (this.length_size_of_traf_num & 0x00000030) << 4;\n this.reserved |= (this.length_size_of_trun_num & 0x0000000C) << 2;\n this.reserved |= (this.length_size_of_sample_num & 0x00000003);\n }\n this._procField('reserved', 'uint', 32);\n if (this._parsing) {\n this.length_size_of_traf_num = (this.reserved & 0x00000030) >> 4;\n this.length_size_of_trun_num = (this.reserved & 0x0000000C) >> 2;\n this.length_size_of_sample_num = (this.reserved & 0x00000003);\n }\n this._procField('number_of_entry', 'uint', 32);\n this._procEntries('entries', this.number_of_entry, function(entry) {\n this._procEntryField(entry, 'time', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'moof_offset', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'traf_number', 'uint', (this.length_size_of_traf_num + 1) * 8);\n this._procEntryField(entry, 'trun_number', 'uint', (this.length_size_of_trun_num + 1) * 8);\n this._procEntryField(entry, 'sample_number', 'uint', (this.length_size_of_sample_num + 1) * 8);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.3.2 Track Header Box\nISOBox.prototype._boxProcessors['tkhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('track_ID', 'uint', 32);\n this._procField('reserved1', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procField('layer', 'uint', 16);\n this._procField('alternate_group', 'uint', 16);\n this._procField('volume', 'template', 16);\n this._procField('reserved3', 'uint', 16);\n this._procFieldArray('matrix', 9, 'template', 32);\n this._procField('width', 'template', 32);\n this._procField('height', 'template', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.3 Track Extends Box\nISOBox.prototype._boxProcessors['trex'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n this._procField('default_sample_description_index', 'uint', 32);\n this._procField('default_sample_duration', 'uint', 32);\n this._procField('default_sample_size', 'uint', 32);\n this._procField('default_sample_flags', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.8 Track Run Box\n// Note: the 'trun' box has a direct relation to the 'tfhd' box for defaults.\n// These defaults are not set explicitly here, but are left to resolve for the user.\nISOBox.prototype._boxProcessors['trun'] = function() {\n this._procFullBox();\n this._procField('sample_count', 'uint', 32);\n if (this.flags & 0x1) this._procField('data_offset', 'int', 32);\n if (this.flags & 0x4) this._procField('first_sample_flags', 'uint', 32);\n this._procEntries('samples', this.sample_count, function(sample) {\n if (this.flags & 0x100) this._procEntryField(sample, 'sample_duration', 'uint', 32);\n if (this.flags & 0x200) this._procEntryField(sample, 'sample_size', 'uint', 32);\n if (this.flags & 0x400) this._procEntryField(sample, 'sample_flags', 'uint', 32);\n if (this.flags & 0x800) this._procEntryField(sample, 'sample_composition_time_offset', (this.version === 1) ? 'int' : 'uint', 32);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.7.2 Data Reference Box\nISOBox.prototype._boxProcessors['url '] = ISOBox.prototype._boxProcessors['urn '] = function() {\n this._procFullBox();\n if (this.type === 'urn ') {\n this._procField('name', 'string', -1);\n }\n this._procField('location', 'string', -1);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Source Label Box\nISOBox.prototype._boxProcessors['vlab'] = function() {\n this._procField('source_label', 'utf8');\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.5.2 Video Media Header Box\nISOBox.prototype._boxProcessors['vmhd'] = function() {\n this._procFullBox();\n this._procField('graphicsmode', 'uint', 16);\n this._procFieldArray('opcolor', 3, 'uint', 16);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Configuration Box\nISOBox.prototype._boxProcessors['vttC'] = function() {\n this._procField('config', 'utf8');\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Empty Sample Box\nISOBox.prototype._boxProcessors['vtte'] = function() {\n // Nothing should happen here.\n};\n", "'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n var arrA = isArray(a)\n , arrB = isArray(b)\n , i\n , length\n , key;\n\n if (arrA && arrB) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n if (arrA != arrB) return false;\n\n var dateA = a instanceof Date\n , dateB = b instanceof Date;\n if (dateA != dateB) return false;\n if (dateA && dateB) return a.getTime() == b.getTime();\n\n var regexpA = a instanceof RegExp\n , regexpB = b instanceof RegExp;\n if (regexpA != regexpB) return false;\n if (regexpA && regexpB) return a.toString() == b.toString();\n\n var keys = keyList(a);\n length = keys.length;\n\n if (length !== keyList(b).length)\n return false;\n\n for (i = length; i-- !== 0;)\n if (!hasProp.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n return a!==a && b!==b;\n};\n", "module.exports = {\n XmlEntities: require(7),\n Html4Entities: require(5),\n Html5Entities: require(6),\n AllHtmlEntities: require(6)\n};\n", "var HTML_ALPHA = ['apos', 'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect', 'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr', 'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot', 'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest', 'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'Aelig', 'Ccedil', 'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml', 'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times', 'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig', 'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil', 'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml', 'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide', 'oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml', 'quot', 'amp', 'lt', 'gt', 'OElig', 'oelig', 'Scaron', 'scaron', 'Yuml', 'circ', 'tilde', 'ensp', 'emsp', 'thinsp', 'zwnj', 'zwj', 'lrm', 'rlm', 'ndash', 'mdash', 'lsquo', 'rsquo', 'sbquo', 'ldquo', 'rdquo', 'bdquo', 'dagger', 'Dagger', 'permil', 'lsaquo', 'rsaquo', 'euro', 'fnof', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigmaf', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'thetasym', 'upsih', 'piv', 'bull', 'hellip', 'prime', 'Prime', 'oline', 'frasl', 'weierp', 'image', 'real', 'trade', 'alefsym', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'crarr', 'lArr', 'uArr', 'rArr', 'dArr', 'hArr', 'forall', 'part', 'exist', 'empty', 'nabla', 'isin', 'notin', 'ni', 'prod', 'sum', 'minus', 'lowast', 'radic', 'prop', 'infin', 'ang', 'and', 'or', 'cap', 'cup', 'int', 'there4', 'sim', 'cong', 'asymp', 'ne', 'equiv', 'le', 'ge', 'sub', 'sup', 'nsub', 'sube', 'supe', 'oplus', 'otimes', 'perp', 'sdot', 'lceil', 'rceil', 'lfloor', 'rfloor', 'lang', 'rang', 'loz', 'spades', 'clubs', 'hearts', 'diams'];\nvar HTML_CODES = [39, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 34, 38, 60, 62, 338, 339, 352, 353, 376, 710, 732, 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, 402, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8226, 8230, 8242, 8243, 8254, 8260, 8472, 8465, 8476, 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830];\n\nvar alphaIndex = {};\nvar numIndex = {};\n\nvar i = 0;\nvar length = HTML_ALPHA.length;\nwhile (i < length) {\n var a = HTML_ALPHA[i];\n var c = HTML_CODES[i];\n alphaIndex[a] = String.fromCharCode(c);\n numIndex[c] = a;\n i++;\n}\n\n/**\n * @constructor\n */\nfunction Html4Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1).toLowerCase() === 'x' ?\n parseInt(entity.substr(2), 16) :\n parseInt(entity.substr(1));\n\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n } else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.decode = function(str) {\n return new Html4Entities().decode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var alpha = numIndex[str.charCodeAt(i)];\n result += alpha ? \"&\" + alpha + \";\" : str.charAt(i);\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encode = function(str) {\n return new Html4Entities().encode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var cc = str.charCodeAt(i);\n var alpha = numIndex[cc];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n } else if (cc < 32 || cc > 126) {\n result += \"&#\" + cc + \";\";\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonUTF = function(str) {\n return new Html4Entities().encodeNonUTF(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonASCII = function(str) {\n return new Html4Entities().encodeNonASCII(str);\n};\n\nmodule.exports = Html4Entities;\n", "var ENTITIES = [['Aacute', [193]], ['aacute', [225]], ['Abreve', [258]], ['abreve', [259]], ['ac', [8766]], ['acd', [8767]], ['acE', [8766, 819]], ['Acirc', [194]], ['acirc', [226]], ['acute', [180]], ['Acy', [1040]], ['acy', [1072]], ['AElig', [198]], ['aelig', [230]], ['af', [8289]], ['Afr', [120068]], ['afr', [120094]], ['Agrave', [192]], ['agrave', [224]], ['alefsym', [8501]], ['aleph', [8501]], ['Alpha', [913]], ['alpha', [945]], ['Amacr', [256]], ['amacr', [257]], ['amalg', [10815]], ['amp', [38]], ['AMP', [38]], ['andand', [10837]], ['And', [10835]], ['and', [8743]], ['andd', [10844]], ['andslope', [10840]], ['andv', [10842]], ['ang', [8736]], ['ange', [10660]], ['angle', [8736]], ['angmsdaa', [10664]], ['angmsdab', [10665]], ['angmsdac', [10666]], ['angmsdad', [10667]], ['angmsdae', [10668]], ['angmsdaf', [10669]], ['angmsdag', [10670]], ['angmsdah', [10671]], ['angmsd', [8737]], ['angrt', [8735]], ['angrtvb', [8894]], ['angrtvbd', [10653]], ['angsph', [8738]], ['angst', [197]], ['angzarr', [9084]], ['Aogon', [260]], ['aogon', [261]], ['Aopf', [120120]], ['aopf', [120146]], ['apacir', [10863]], ['ap', [8776]], ['apE', [10864]], ['ape', [8778]], ['apid', [8779]], ['apos', [39]], ['ApplyFunction', [8289]], ['approx', [8776]], ['approxeq', [8778]], ['Aring', [197]], ['aring', [229]], ['Ascr', [119964]], ['ascr', [119990]], ['Assign', [8788]], ['ast', [42]], ['asymp', [8776]], ['asympeq', [8781]], ['Atilde', [195]], ['atilde', [227]], ['Auml', [196]], ['auml', [228]], ['awconint', [8755]], ['awint', [10769]], ['backcong', [8780]], ['backepsilon', [1014]], ['backprime', [8245]], ['backsim', [8765]], ['backsimeq', [8909]], ['Backslash', [8726]], ['Barv', [10983]], ['barvee', [8893]], ['barwed', [8965]], ['Barwed', [8966]], ['barwedge', [8965]], ['bbrk', [9141]], ['bbrktbrk', [9142]], ['bcong', [8780]], ['Bcy', [1041]], ['bcy', [1073]], ['bdquo', [8222]], ['becaus', [8757]], ['because', [8757]], ['Because', [8757]], ['bemptyv', [10672]], ['bepsi', [1014]], ['bernou', [8492]], ['Bernoullis', [8492]], ['Beta', [914]], ['beta', [946]], ['beth', [8502]], ['between', [8812]], ['Bfr', [120069]], ['bfr', [120095]], ['bigcap', [8898]], ['bigcirc', [9711]], ['bigcup', [8899]], ['bigodot', [10752]], ['bigoplus', [10753]], ['bigotimes', [10754]], ['bigsqcup', [10758]], ['bigstar', [9733]], ['bigtriangledown', [9661]], ['bigtriangleup', [9651]], ['biguplus', [10756]], ['bigvee', [8897]], ['bigwedge', [8896]], ['bkarow', [10509]], ['blacklozenge', [10731]], ['blacksquare', [9642]], ['blacktriangle', [9652]], ['blacktriangledown', [9662]], ['blacktriangleleft', [9666]], ['blacktriangleright', [9656]], ['blank', [9251]], ['blk12', [9618]], ['blk14', [9617]], ['blk34', [9619]], ['block', [9608]], ['bne', [61, 8421]], ['bnequiv', [8801, 8421]], ['bNot', [10989]], ['bnot', [8976]], ['Bopf', [120121]], ['bopf', [120147]], ['bot', [8869]], ['bottom', [8869]], ['bowtie', [8904]], ['boxbox', [10697]], ['boxdl', [9488]], ['boxdL', [9557]], ['boxDl', [9558]], ['boxDL', [9559]], ['boxdr', [9484]], ['boxdR', [9554]], ['boxDr', [9555]], ['boxDR', [9556]], ['boxh', [9472]], ['boxH', [9552]], ['boxhd', [9516]], ['boxHd', [9572]], ['boxhD', [9573]], ['boxHD', [9574]], ['boxhu', [9524]], ['boxHu', [9575]], ['boxhU', [9576]], ['boxHU', [9577]], ['boxminus', [8863]], ['boxplus', [8862]], ['boxtimes', [8864]], ['boxul', [9496]], ['boxuL', [9563]], ['boxUl', [9564]], ['boxUL', [9565]], ['boxur', [9492]], ['boxuR', [9560]], ['boxUr', [9561]], ['boxUR', [9562]], ['boxv', [9474]], ['boxV', [9553]], ['boxvh', [9532]], ['boxvH', [9578]], ['boxVh', [9579]], ['boxVH', [9580]], ['boxvl', [9508]], ['boxvL', [9569]], ['boxVl', [9570]], ['boxVL', [9571]], ['boxvr', [9500]], ['boxvR', [9566]], ['boxVr', [9567]], ['boxVR', [9568]], ['bprime', [8245]], ['breve', [728]], ['Breve', [728]], ['brvbar', [166]], ['bscr', [119991]], ['Bscr', [8492]], ['bsemi', [8271]], ['bsim', [8765]], ['bsime', [8909]], ['bsolb', [10693]], ['bsol', [92]], ['bsolhsub', [10184]], ['bull', [8226]], ['bullet', [8226]], ['bump', [8782]], ['bumpE', [10926]], ['bumpe', [8783]], ['Bumpeq', [8782]], ['bumpeq', [8783]], ['Cacute', [262]], ['cacute', [263]], ['capand', [10820]], ['capbrcup', [10825]], ['capcap', [10827]], ['cap', [8745]], ['Cap', [8914]], ['capcup', [10823]], ['capdot', [10816]], ['CapitalDifferentialD', [8517]], ['caps', [8745, 65024]], ['caret', [8257]], ['caron', [711]], ['Cayleys', [8493]], ['ccaps', [10829]], ['Ccaron', [268]], ['ccaron', [269]], ['Ccedil', [199]], ['ccedil', [231]], ['Ccirc', [264]], ['ccirc', [265]], ['Cconint', [8752]], ['ccups', [10828]], ['ccupssm', [10832]], ['Cdot', [266]], ['cdot', [267]], ['cedil', [184]], ['Cedilla', [184]], ['cemptyv', [10674]], ['cent', [162]], ['centerdot', [183]], ['CenterDot', [183]], ['cfr', [120096]], ['Cfr', [8493]], ['CHcy', [1063]], ['chcy', [1095]], ['check', [10003]], ['checkmark', [10003]], ['Chi', [935]], ['chi', [967]], ['circ', [710]], ['circeq', [8791]], ['circlearrowleft', [8634]], ['circlearrowright', [8635]], ['circledast', [8859]], ['circledcirc', [8858]], ['circleddash', [8861]], ['CircleDot', [8857]], ['circledR', [174]], ['circledS', [9416]], ['CircleMinus', [8854]], ['CirclePlus', [8853]], ['CircleTimes', [8855]], ['cir', [9675]], ['cirE', [10691]], ['cire', [8791]], ['cirfnint', [10768]], ['cirmid', [10991]], ['cirscir', [10690]], ['ClockwiseContourIntegral', [8754]], ['clubs', [9827]], ['clubsuit', [9827]], ['colon', [58]], ['Colon', [8759]], ['Colone', [10868]], ['colone', [8788]], ['coloneq', [8788]], ['comma', [44]], ['commat', [64]], ['comp', [8705]], ['compfn', [8728]], ['complement', [8705]], ['complexes', [8450]], ['cong', [8773]], ['congdot', [10861]], ['Congruent', [8801]], ['conint', [8750]], ['Conint', [8751]], ['ContourIntegral', [8750]], ['copf', [120148]], ['Copf', [8450]], ['coprod', [8720]], ['Coproduct', [8720]], ['copy', [169]], ['COPY', [169]], ['copysr', [8471]], ['CounterClockwiseContourIntegral', [8755]], ['crarr', [8629]], ['cross', [10007]], ['Cross', [10799]], ['Cscr', [119966]], ['cscr', [119992]], ['csub', [10959]], ['csube', [10961]], ['csup', [10960]], ['csupe', [10962]], ['ctdot', [8943]], ['cudarrl', [10552]], ['cudarrr', [10549]], ['cuepr', [8926]], ['cuesc', [8927]], ['cularr', [8630]], ['cularrp', [10557]], ['cupbrcap', [10824]], ['cupcap', [10822]], ['CupCap', [8781]], ['cup', [8746]], ['Cup', [8915]], ['cupcup', [10826]], ['cupdot', [8845]], ['cupor', [10821]], ['cups', [8746, 65024]], ['curarr', [8631]], ['curarrm', [10556]], ['curlyeqprec', [8926]], ['curlyeqsucc', [8927]], ['curlyvee', [8910]], ['curlywedge', [8911]], ['curren', [164]], ['curvearrowleft', [8630]], ['curvearrowright', [8631]], ['cuvee', [8910]], ['cuwed', [8911]], ['cwconint', [8754]], ['cwint', [8753]], ['cylcty', [9005]], ['dagger', [8224]], ['Dagger', [8225]], ['daleth', [8504]], ['darr', [8595]], ['Darr', [8609]], ['dArr', [8659]], ['dash', [8208]], ['Dashv', [10980]], ['dashv', [8867]], ['dbkarow', [10511]], ['dblac', [733]], ['Dcaron', [270]], ['dcaron', [271]], ['Dcy', [1044]], ['dcy', [1076]], ['ddagger', [8225]], ['ddarr', [8650]], ['DD', [8517]], ['dd', [8518]], ['DDotrahd', [10513]], ['ddotseq', [10871]], ['deg', [176]], ['Del', [8711]], ['Delta', [916]], ['delta', [948]], ['demptyv', [10673]], ['dfisht', [10623]], ['Dfr', [120071]], ['dfr', [120097]], ['dHar', [10597]], ['dharl', [8643]], ['dharr', [8642]], ['DiacriticalAcute', [180]], ['DiacriticalDot', [729]], ['DiacriticalDoubleAcute', [733]], ['DiacriticalGrave', [96]], ['DiacriticalTilde', [732]], ['diam', [8900]], ['diamond', [8900]], ['Diamond', [8900]], ['diamondsuit', [9830]], ['diams', [9830]], ['die', [168]], ['DifferentialD', [8518]], ['digamma', [989]], ['disin', [8946]], ['div', [247]], ['divide', [247]], ['divideontimes', [8903]], ['divonx', [8903]], ['DJcy', [1026]], ['djcy', [1106]], ['dlcorn', [8990]], ['dlcrop', [8973]], ['dollar', [36]], ['Dopf', [120123]], ['dopf', [120149]], ['Dot', [168]], ['dot', [729]], ['DotDot', [8412]], ['doteq', [8784]], ['doteqdot', [8785]], ['DotEqual', [8784]], ['dotminus', [8760]], ['dotplus', [8724]], ['dotsquare', [8865]], ['doublebarwedge', [8966]], ['DoubleContourIntegral', [8751]], ['DoubleDot', [168]], ['DoubleDownArrow', [8659]], ['DoubleLeftArrow', [8656]], ['DoubleLeftRightArrow', [8660]], ['DoubleLeftTee', [10980]], ['DoubleLongLeftArrow', [10232]], ['DoubleLongLeftRightArrow', [10234]], ['DoubleLongRightArrow', [10233]], ['DoubleRightArrow', [8658]], ['DoubleRightTee', [8872]], ['DoubleUpArrow', [8657]], ['DoubleUpDownArrow', [8661]], ['DoubleVerticalBar', [8741]], ['DownArrowBar', [10515]], ['downarrow', [8595]], ['DownArrow', [8595]], ['Downarrow', [8659]], ['DownArrowUpArrow', [8693]], ['DownBreve', [785]], ['downdownarrows', [8650]], ['downharpoonleft', [8643]], ['downharpoonright', [8642]], ['DownLeftRightVector', [10576]], ['DownLeftTeeVector', [10590]], ['DownLeftVectorBar', [10582]], ['DownLeftVector', [8637]], ['DownRightTeeVector', [10591]], ['DownRightVectorBar', [10583]], ['DownRightVector', [8641]], ['DownTeeArrow', [8615]], ['DownTee', [8868]], ['drbkarow', [10512]], ['drcorn', [8991]], ['drcrop', [8972]], ['Dscr', [119967]], ['dscr', [119993]], ['DScy', [1029]], ['dscy', [1109]], ['dsol', [10742]], ['Dstrok', [272]], ['dstrok', [273]], ['dtdot', [8945]], ['dtri', [9663]], ['dtrif', [9662]], ['duarr', [8693]], ['duhar', [10607]], ['dwangle', [10662]], ['DZcy', [1039]], ['dzcy', [1119]], ['dzigrarr', [10239]], ['Eacute', [201]], ['eacute', [233]], ['easter', [10862]], ['Ecaron', [282]], ['ecaron', [283]], ['Ecirc', [202]], ['ecirc', [234]], ['ecir', [8790]], ['ecolon', [8789]], ['Ecy', [1069]], ['ecy', [1101]], ['eDDot', [10871]], ['Edot', [278]], ['edot', [279]], ['eDot', [8785]], ['ee', [8519]], ['efDot', [8786]], ['Efr', [120072]], ['efr', [120098]], ['eg', [10906]], ['Egrave', [200]], ['egrave', [232]], ['egs', [10902]], ['egsdot', [10904]], ['el', [10905]], ['Element', [8712]], ['elinters', [9191]], ['ell', [8467]], ['els', [10901]], ['elsdot', [10903]], ['Emacr', [274]], ['emacr', [275]], ['empty', [8709]], ['emptyset', [8709]], ['EmptySmallSquare', [9723]], ['emptyv', [8709]], ['EmptyVerySmallSquare', [9643]], ['emsp13', [8196]], ['emsp14', [8197]], ['emsp', [8195]], ['ENG', [330]], ['eng', [331]], ['ensp', [8194]], ['Eogon', [280]], ['eogon', [281]], ['Eopf', [120124]], ['eopf', [120150]], ['epar', [8917]], ['eparsl', [10723]], ['eplus', [10865]], ['epsi', [949]], ['Epsilon', [917]], ['epsilon', [949]], ['epsiv', [1013]], ['eqcirc', [8790]], ['eqcolon', [8789]], ['eqsim', [8770]], ['eqslantgtr', [10902]], ['eqslantless', [10901]], ['Equal', [10869]], ['equals', [61]], ['EqualTilde', [8770]], ['equest', [8799]], ['Equilibrium', [8652]], ['equiv', [8801]], ['equivDD', [10872]], ['eqvparsl', [10725]], ['erarr', [10609]], ['erDot', [8787]], ['escr', [8495]], ['Escr', [8496]], ['esdot', [8784]], ['Esim', [10867]], ['esim', [8770]], ['Eta', [919]], ['eta', [951]], ['ETH', [208]], ['eth', [240]], ['Euml', [203]], ['euml', [235]], ['euro', [8364]], ['excl', [33]], ['exist', [8707]], ['Exists', [8707]], ['expectation', [8496]], ['exponentiale', [8519]], ['ExponentialE', [8519]], ['fallingdotseq', [8786]], ['Fcy', [1060]], ['fcy', [1092]], ['female', [9792]], ['ffilig', [64259]], ['fflig', [64256]], ['ffllig', [64260]], ['Ffr', [120073]], ['ffr', [120099]], ['filig', [64257]], ['FilledSmallSquare', [9724]], ['FilledVerySmallSquare', [9642]], ['fjlig', [102, 106]], ['flat', [9837]], ['fllig', [64258]], ['fltns', [9649]], ['fnof', [402]], ['Fopf', [120125]], ['fopf', [120151]], ['forall', [8704]], ['ForAll', [8704]], ['fork', [8916]], ['forkv', [10969]], ['Fouriertrf', [8497]], ['fpartint', [10765]], ['frac12', [189]], ['frac13', [8531]], ['frac14', [188]], ['frac15', [8533]], ['frac16', [8537]], ['frac18', [8539]], ['frac23', [8532]], ['frac25', [8534]], ['frac34', [190]], ['frac35', [8535]], ['frac38', [8540]], ['frac45', [8536]], ['frac56', [8538]], ['frac58', [8541]], ['frac78', [8542]], ['frasl', [8260]], ['frown', [8994]], ['fscr', [119995]], ['Fscr', [8497]], ['gacute', [501]], ['Gamma', [915]], ['gamma', [947]], ['Gammad', [988]], ['gammad', [989]], ['gap', [10886]], ['Gbreve', [286]], ['gbreve', [287]], ['Gcedil', [290]], ['Gcirc', [284]], ['gcirc', [285]], ['Gcy', [1043]], ['gcy', [1075]], ['Gdot', [288]], ['gdot', [289]], ['ge', [8805]], ['gE', [8807]], ['gEl', [10892]], ['gel', [8923]], ['geq', [8805]], ['geqq', [8807]], ['geqslant', [10878]], ['gescc', [10921]], ['ges', [10878]], ['gesdot', [10880]], ['gesdoto', [10882]], ['gesdotol', [10884]], ['gesl', [8923, 65024]], ['gesles', [10900]], ['Gfr', [120074]], ['gfr', [120100]], ['gg', [8811]], ['Gg', [8921]], ['ggg', [8921]], ['gimel', [8503]], ['GJcy', [1027]], ['gjcy', [1107]], ['gla', [10917]], ['gl', [8823]], ['glE', [10898]], ['glj', [10916]], ['gnap', [10890]], ['gnapprox', [10890]], ['gne', [10888]], ['gnE', [8809]], ['gneq', [10888]], ['gneqq', [8809]], ['gnsim', [8935]], ['Gopf', [120126]], ['gopf', [120152]], ['grave', [96]], ['GreaterEqual', [8805]], ['GreaterEqualLess', [8923]], ['GreaterFullEqual', [8807]], ['GreaterGreater', [10914]], ['GreaterLess', [8823]], ['GreaterSlantEqual', [10878]], ['GreaterTilde', [8819]], ['Gscr', [119970]], ['gscr', [8458]], ['gsim', [8819]], ['gsime', [10894]], ['gsiml', [10896]], ['gtcc', [10919]], ['gtcir', [10874]], ['gt', [62]], ['GT', [62]], ['Gt', [8811]], ['gtdot', [8919]], ['gtlPar', [10645]], ['gtquest', [10876]], ['gtrapprox', [10886]], ['gtrarr', [10616]], ['gtrdot', [8919]], ['gtreqless', [8923]], ['gtreqqless', [10892]], ['gtrless', [8823]], ['gtrsim', [8819]], ['gvertneqq', [8809, 65024]], ['gvnE', [8809, 65024]], ['Hacek', [711]], ['hairsp', [8202]], ['half', [189]], ['hamilt', [8459]], ['HARDcy', [1066]], ['hardcy', [1098]], ['harrcir', [10568]], ['harr', [8596]], ['hArr', [8660]], ['harrw', [8621]], ['Hat', [94]], ['hbar', [8463]], ['Hcirc', [292]], ['hcirc', [293]], ['hearts', [9829]], ['heartsuit', [9829]], ['hellip', [8230]], ['hercon', [8889]], ['hfr', [120101]], ['Hfr', [8460]], ['HilbertSpace', [8459]], ['hksearow', [10533]], ['hkswarow', [10534]], ['hoarr', [8703]], ['homtht', [8763]], ['hookleftarrow', [8617]], ['hookrightarrow', [8618]], ['hopf', [120153]], ['Hopf', [8461]], ['horbar', [8213]], ['HorizontalLine', [9472]], ['hscr', [119997]], ['Hscr', [8459]], ['hslash', [8463]], ['Hstrok', [294]], ['hstrok', [295]], ['HumpDownHump', [8782]], ['HumpEqual', [8783]], ['hybull', [8259]], ['hyphen', [8208]], ['Iacute', [205]], ['iacute', [237]], ['ic', [8291]], ['Icirc', [206]], ['icirc', [238]], ['Icy', [1048]], ['icy', [1080]], ['Idot', [304]], ['IEcy', [1045]], ['iecy', [1077]], ['iexcl', [161]], ['iff', [8660]], ['ifr', [120102]], ['Ifr', [8465]], ['Igrave', [204]], ['igrave', [236]], ['ii', [8520]], ['iiiint', [10764]], ['iiint', [8749]], ['iinfin', [10716]], ['iiota', [8489]], ['IJlig', [306]], ['ijlig', [307]], ['Imacr', [298]], ['imacr', [299]], ['image', [8465]], ['ImaginaryI', [8520]], ['imagline', [8464]], ['imagpart', [8465]], ['imath', [305]], ['Im', [8465]], ['imof', [8887]], ['imped', [437]], ['Implies', [8658]], ['incare', [8453]], ['in', [8712]], ['infin', [8734]], ['infintie', [10717]], ['inodot', [305]], ['intcal', [8890]], ['int', [8747]], ['Int', [8748]], ['integers', [8484]], ['Integral', [8747]], ['intercal', [8890]], ['Intersection', [8898]], ['intlarhk', [10775]], ['intprod', [10812]], ['InvisibleComma', [8291]], ['InvisibleTimes', [8290]], ['IOcy', [1025]], ['iocy', [1105]], ['Iogon', [302]], ['iogon', [303]], ['Iopf', [120128]], ['iopf', [120154]], ['Iota', [921]], ['iota', [953]], ['iprod', [10812]], ['iquest', [191]], ['iscr', [119998]], ['Iscr', [8464]], ['isin', [8712]], ['isindot', [8949]], ['isinE', [8953]], ['isins', [8948]], ['isinsv', [8947]], ['isinv', [8712]], ['it', [8290]], ['Itilde', [296]], ['itilde', [297]], ['Iukcy', [1030]], ['iukcy', [1110]], ['Iuml', [207]], ['iuml', [239]], ['Jcirc', [308]], ['jcirc', [309]], ['Jcy', [1049]], ['jcy', [1081]], ['Jfr', [120077]], ['jfr', [120103]], ['jmath', [567]], ['Jopf', [120129]], ['jopf', [120155]], ['Jscr', [119973]], ['jscr', [119999]], ['Jsercy', [1032]], ['jsercy', [1112]], ['Jukcy', [1028]], ['jukcy', [1108]], ['Kappa', [922]], ['kappa', [954]], ['kappav', [1008]], ['Kcedil', [310]], ['kcedil', [311]], ['Kcy', [1050]], ['kcy', [1082]], ['Kfr', [120078]], ['kfr', [120104]], ['kgreen', [312]], ['KHcy', [1061]], ['khcy', [1093]], ['KJcy', [1036]], ['kjcy', [1116]], ['Kopf', [120130]], ['kopf', [120156]], ['Kscr', [119974]], ['kscr', [120000]], ['lAarr', [8666]], ['Lacute', [313]], ['lacute', [314]], ['laemptyv', [10676]], ['lagran', [8466]], ['Lambda', [923]], ['lambda', [955]], ['lang', [10216]], ['Lang', [10218]], ['langd', [10641]], ['langle', [10216]], ['lap', [10885]], ['Laplacetrf', [8466]], ['laquo', [171]], ['larrb', [8676]], ['larrbfs', [10527]], ['larr', [8592]], ['Larr', [8606]], ['lArr', [8656]], ['larrfs', [10525]], ['larrhk', [8617]], ['larrlp', [8619]], ['larrpl', [10553]], ['larrsim', [10611]], ['larrtl', [8610]], ['latail', [10521]], ['lAtail', [10523]], ['lat', [10923]], ['late', [10925]], ['lates', [10925, 65024]], ['lbarr', [10508]], ['lBarr', [10510]], ['lbbrk', [10098]], ['lbrace', [123]], ['lbrack', [91]], ['lbrke', [10635]], ['lbrksld', [10639]], ['lbrkslu', [10637]], ['Lcaron', [317]], ['lcaron', [318]], ['Lcedil', [315]], ['lcedil', [316]], ['lceil', [8968]], ['lcub', [123]], ['Lcy', [1051]], ['lcy', [1083]], ['ldca', [10550]], ['ldquo', [8220]], ['ldquor', [8222]], ['ldrdhar', [10599]], ['ldrushar', [10571]], ['ldsh', [8626]], ['le', [8804]], ['lE', [8806]], ['LeftAngleBracket', [10216]], ['LeftArrowBar', [8676]], ['leftarrow', [8592]], ['LeftArrow', [8592]], ['Leftarrow', [8656]], ['LeftArrowRightArrow', [8646]], ['leftarrowtail', [8610]], ['LeftCeiling', [8968]], ['LeftDoubleBracket', [10214]], ['LeftDownTeeVector', [10593]], ['LeftDownVectorBar', [10585]], ['LeftDownVector', [8643]], ['LeftFloor', [8970]], ['leftharpoondown', [8637]], ['leftharpoonup', [8636]], ['leftleftarrows', [8647]], ['leftrightarrow', [8596]], ['LeftRightArrow', [8596]], ['Leftrightarrow', [8660]], ['leftrightarrows', [8646]], ['leftrightharpoons', [8651]], ['leftrightsquigarrow', [8621]], ['LeftRightVector', [10574]], ['LeftTeeArrow', [8612]], ['LeftTee', [8867]], ['LeftTeeVector', [10586]], ['leftthreetimes', [8907]], ['LeftTriangleBar', [10703]], ['LeftTriangle', [8882]], ['LeftTriangleEqual', [8884]], ['LeftUpDownVector', [10577]], ['LeftUpTeeVector', [10592]], ['LeftUpVectorBar', [10584]], ['LeftUpVector', [8639]], ['LeftVectorBar', [10578]], ['LeftVector', [8636]], ['lEg', [10891]], ['leg', [8922]], ['leq', [8804]], ['leqq', [8806]], ['leqslant', [10877]], ['lescc', [10920]], ['les', [10877]], ['lesdot', [10879]], ['lesdoto', [10881]], ['lesdotor', [10883]], ['lesg', [8922, 65024]], ['lesges', [10899]], ['lessapprox', [10885]], ['lessdot', [8918]], ['lesseqgtr', [8922]], ['lesseqqgtr', [10891]], ['LessEqualGreater', [8922]], ['LessFullEqual', [8806]], ['LessGreater', [8822]], ['lessgtr', [8822]], ['LessLess', [10913]], ['lesssim', [8818]], ['LessSlantEqual', [10877]], ['LessTilde', [8818]], ['lfisht', [10620]], ['lfloor', [8970]], ['Lfr', [120079]], ['lfr', [120105]], ['lg', [8822]], ['lgE', [10897]], ['lHar', [10594]], ['lhard', [8637]], ['lharu', [8636]], ['lharul', [10602]], ['lhblk', [9604]], ['LJcy', [1033]], ['ljcy', [1113]], ['llarr', [8647]], ['ll', [8810]], ['Ll', [8920]], ['llcorner', [8990]], ['Lleftarrow', [8666]], ['llhard', [10603]], ['lltri', [9722]], ['Lmidot', [319]], ['lmidot', [320]], ['lmoustache', [9136]], ['lmoust', [9136]], ['lnap', [10889]], ['lnapprox', [10889]], ['lne', [10887]], ['lnE', [8808]], ['lneq', [10887]], ['lneqq', [8808]], ['lnsim', [8934]], ['loang', [10220]], ['loarr', [8701]], ['lobrk', [10214]], ['longleftarrow', [10229]], ['LongLeftArrow', [10229]], ['Longleftarrow', [10232]], ['longleftrightarrow', [10231]], ['LongLeftRightArrow', [10231]], ['Longleftrightarrow', [10234]], ['longmapsto', [10236]], ['longrightarrow', [10230]], ['LongRightArrow', [10230]], ['Longrightarrow', [10233]], ['looparrowleft', [8619]], ['looparrowright', [8620]], ['lopar', [10629]], ['Lopf', [120131]], ['lopf', [120157]], ['loplus', [10797]], ['lotimes', [10804]], ['lowast', [8727]], ['lowbar', [95]], ['LowerLeftArrow', [8601]], ['LowerRightArrow', [8600]], ['loz', [9674]], ['lozenge', [9674]], ['lozf', [10731]], ['lpar', [40]], ['lparlt', [10643]], ['lrarr', [8646]], ['lrcorner', [8991]], ['lrhar', [8651]], ['lrhard', [10605]], ['lrm', [8206]], ['lrtri', [8895]], ['lsaquo', [8249]], ['lscr', [120001]], ['Lscr', [8466]], ['lsh', [8624]], ['Lsh', [8624]], ['lsim', [8818]], ['lsime', [10893]], ['lsimg', [10895]], ['lsqb', [91]], ['lsquo', [8216]], ['lsquor', [8218]], ['Lstrok', [321]], ['lstrok', [322]], ['ltcc', [10918]], ['ltcir', [10873]], ['lt', [60]], ['LT', [60]], ['Lt', [8810]], ['ltdot', [8918]], ['lthree', [8907]], ['ltimes', [8905]], ['ltlarr', [10614]], ['ltquest', [10875]], ['ltri', [9667]], ['ltrie', [8884]], ['ltrif', [9666]], ['ltrPar', [10646]], ['lurdshar', [10570]], ['luruhar', [10598]], ['lvertneqq', [8808, 65024]], ['lvnE', [8808, 65024]], ['macr', [175]], ['male', [9794]], ['malt', [10016]], ['maltese', [10016]], ['Map', [10501]], ['map', [8614]], ['mapsto', [8614]], ['mapstodown', [8615]], ['mapstoleft', [8612]], ['mapstoup', [8613]], ['marker', [9646]], ['mcomma', [10793]], ['Mcy', [1052]], ['mcy', [1084]], ['mdash', [8212]], ['mDDot', [8762]], ['measuredangle', [8737]], ['MediumSpace', [8287]], ['Mellintrf', [8499]], ['Mfr', [120080]], ['mfr', [120106]], ['mho', [8487]], ['micro', [181]], ['midast', [42]], ['midcir', [10992]], ['mid', [8739]], ['middot', [183]], ['minusb', [8863]], ['minus', [8722]], ['minusd', [8760]], ['minusdu', [10794]], ['MinusPlus', [8723]], ['mlcp', [10971]], ['mldr', [8230]], ['mnplus', [8723]], ['models', [8871]], ['Mopf', [120132]], ['mopf', [120158]], ['mp', [8723]], ['mscr', [120002]], ['Mscr', [8499]], ['mstpos', [8766]], ['Mu', [924]], ['mu', [956]], ['multimap', [8888]], ['mumap', [8888]], ['nabla', [8711]], ['Nacute', [323]], ['nacute', [324]], ['nang', [8736, 8402]], ['nap', [8777]], ['napE', [10864, 824]], ['napid', [8779, 824]], ['napos', [329]], ['napprox', [8777]], ['natural', [9838]], ['naturals', [8469]], ['natur', [9838]], ['nbsp', [160]], ['nbump', [8782, 824]], ['nbumpe', [8783, 824]], ['ncap', [10819]], ['Ncaron', [327]], ['ncaron', [328]], ['Ncedil', [325]], ['ncedil', [326]], ['ncong', [8775]], ['ncongdot', [10861, 824]], ['ncup', [10818]], ['Ncy', [1053]], ['ncy', [1085]], ['ndash', [8211]], ['nearhk', [10532]], ['nearr', [8599]], ['neArr', [8663]], ['nearrow', [8599]], ['ne', [8800]], ['nedot', [8784, 824]], ['NegativeMediumSpace', [8203]], ['NegativeThickSpace', [8203]], ['NegativeThinSpace', [8203]], ['NegativeVeryThinSpace', [8203]], ['nequiv', [8802]], ['nesear', [10536]], ['nesim', [8770, 824]], ['NestedGreaterGreater', [8811]], ['NestedLessLess', [8810]], ['nexist', [8708]], ['nexists', [8708]], ['Nfr', [120081]], ['nfr', [120107]], ['ngE', [8807, 824]], ['nge', [8817]], ['ngeq', [8817]], ['ngeqq', [8807, 824]], ['ngeqslant', [10878, 824]], ['nges', [10878, 824]], ['nGg', [8921, 824]], ['ngsim', [8821]], ['nGt', [8811, 8402]], ['ngt', [8815]], ['ngtr', [8815]], ['nGtv', [8811, 824]], ['nharr', [8622]], ['nhArr', [8654]], ['nhpar', [10994]], ['ni', [8715]], ['nis', [8956]], ['nisd', [8954]], ['niv', [8715]], ['NJcy', [1034]], ['njcy', [1114]], ['nlarr', [8602]], ['nlArr', [8653]], ['nldr', [8229]], ['nlE', [8806, 824]], ['nle', [8816]], ['nleftarrow', [8602]], ['nLeftarrow', [8653]], ['nleftrightarrow', [8622]], ['nLeftrightarrow', [8654]], ['nleq', [8816]], ['nleqq', [8806, 824]], ['nleqslant', [10877, 824]], ['nles', [10877, 824]], ['nless', [8814]], ['nLl', [8920, 824]], ['nlsim', [8820]], ['nLt', [8810, 8402]], ['nlt', [8814]], ['nltri', [8938]], ['nltrie', [8940]], ['nLtv', [8810, 824]], ['nmid', [8740]], ['NoBreak', [8288]], ['NonBreakingSpace', [160]], ['nopf', [120159]], ['Nopf', [8469]], ['Not', [10988]], ['not', [172]], ['NotCongruent', [8802]], ['NotCupCap', [8813]], ['NotDoubleVerticalBar', [8742]], ['NotElement', [8713]], ['NotEqual', [8800]], ['NotEqualTilde', [8770, 824]], ['NotExists', [8708]], ['NotGreater', [8815]], ['NotGreaterEqual', [8817]], ['NotGreaterFullEqual', [8807, 824]], ['NotGreaterGreater', [8811, 824]], ['NotGreaterLess', [8825]], ['NotGreaterSlantEqual', [10878, 824]], ['NotGreaterTilde', [8821]], ['NotHumpDownHump', [8782, 824]], ['NotHumpEqual', [8783, 824]], ['notin', [8713]], ['notindot', [8949, 824]], ['notinE', [8953, 824]], ['notinva', [8713]], ['notinvb', [8951]], ['notinvc', [8950]], ['NotLeftTriangleBar', [10703, 824]], ['NotLeftTriangle', [8938]], ['NotLeftTriangleEqual', [8940]], ['NotLess', [8814]], ['NotLessEqual', [8816]], ['NotLessGreater', [8824]], ['NotLessLess', [8810, 824]], ['NotLessSlantEqual', [10877, 824]], ['NotLessTilde', [8820]], ['NotNestedGreaterGreater', [10914, 824]], ['NotNestedLessLess', [10913, 824]], ['notni', [8716]], ['notniva', [8716]], ['notnivb', [8958]], ['notnivc', [8957]], ['NotPrecedes', [8832]], ['NotPrecedesEqual', [10927, 824]], ['NotPrecedesSlantEqual', [8928]], ['NotReverseElement', [8716]], ['NotRightTriangleBar', [10704, 824]], ['NotRightTriangle', [8939]], ['NotRightTriangleEqual', [8941]], ['NotSquareSubset', [8847, 824]], ['NotSquareSubsetEqual', [8930]], ['NotSquareSuperset', [8848, 824]], ['NotSquareSupersetEqual', [8931]], ['NotSubset', [8834, 8402]], ['NotSubsetEqual', [8840]], ['NotSucceeds', [8833]], ['NotSucceedsEqual', [10928, 824]], ['NotSucceedsSlantEqual', [8929]], ['NotSucceedsTilde', [8831, 824]], ['NotSuperset', [8835, 8402]], ['NotSupersetEqual', [8841]], ['NotTilde', [8769]], ['NotTildeEqual', [8772]], ['NotTildeFullEqual', [8775]], ['NotTildeTilde', [8777]], ['NotVerticalBar', [8740]], ['nparallel', [8742]], ['npar', [8742]], ['nparsl', [11005, 8421]], ['npart', [8706, 824]], ['npolint', [10772]], ['npr', [8832]], ['nprcue', [8928]], ['nprec', [8832]], ['npreceq', [10927, 824]], ['npre', [10927, 824]], ['nrarrc', [10547, 824]], ['nrarr', [8603]], ['nrArr', [8655]], ['nrarrw', [8605, 824]], ['nrightarrow', [8603]], ['nRightarrow', [8655]], ['nrtri', [8939]], ['nrtrie', [8941]], ['nsc', [8833]], ['nsccue', [8929]], ['nsce', [10928, 824]], ['Nscr', [119977]], ['nscr', [120003]], ['nshortmid', [8740]], ['nshortparallel', [8742]], ['nsim', [8769]], ['nsime', [8772]], ['nsimeq', [8772]], ['nsmid', [8740]], ['nspar', [8742]], ['nsqsube', [8930]], ['nsqsupe', [8931]], ['nsub', [8836]], ['nsubE', [10949, 824]], ['nsube', [8840]], ['nsubset', [8834, 8402]], ['nsubseteq', [8840]], ['nsubseteqq', [10949, 824]], ['nsucc', [8833]], ['nsucceq', [10928, 824]], ['nsup', [8837]], ['nsupE', [10950, 824]], ['nsupe', [8841]], ['nsupset', [8835, 8402]], ['nsupseteq', [8841]], ['nsupseteqq', [10950, 824]], ['ntgl', [8825]], ['Ntilde', [209]], ['ntilde', [241]], ['ntlg', [8824]], ['ntriangleleft', [8938]], ['ntrianglelefteq', [8940]], ['ntriangleright', [8939]], ['ntrianglerighteq', [8941]], ['Nu', [925]], ['nu', [957]], ['num', [35]], ['numero', [8470]], ['numsp', [8199]], ['nvap', [8781, 8402]], ['nvdash', [8876]], ['nvDash', [8877]], ['nVdash', [8878]], ['nVDash', [8879]], ['nvge', [8805, 8402]], ['nvgt', [62, 8402]], ['nvHarr', [10500]], ['nvinfin', [10718]], ['nvlArr', [10498]], ['nvle', [8804, 8402]], ['nvlt', [60, 8402]], ['nvltrie', [8884, 8402]], ['nvrArr', [10499]], ['nvrtrie', [8885, 8402]], ['nvsim', [8764, 8402]], ['nwarhk', [10531]], ['nwarr', [8598]], ['nwArr', [8662]], ['nwarrow', [8598]], ['nwnear', [10535]], ['Oacute', [211]], ['oacute', [243]], ['oast', [8859]], ['Ocirc', [212]], ['ocirc', [244]], ['ocir', [8858]], ['Ocy', [1054]], ['ocy', [1086]], ['odash', [8861]], ['Odblac', [336]], ['odblac', [337]], ['odiv', [10808]], ['odot', [8857]], ['odsold', [10684]], ['OElig', [338]], ['oelig', [339]], ['ofcir', [10687]], ['Ofr', [120082]], ['ofr', [120108]], ['ogon', [731]], ['Ograve', [210]], ['ograve', [242]], ['ogt', [10689]], ['ohbar', [10677]], ['ohm', [937]], ['oint', [8750]], ['olarr', [8634]], ['olcir', [10686]], ['olcross', [10683]], ['oline', [8254]], ['olt', [10688]], ['Omacr', [332]], ['omacr', [333]], ['Omega', [937]], ['omega', [969]], ['Omicron', [927]], ['omicron', [959]], ['omid', [10678]], ['ominus', [8854]], ['Oopf', [120134]], ['oopf', [120160]], ['opar', [10679]], ['OpenCurlyDoubleQuote', [8220]], ['OpenCurlyQuote', [8216]], ['operp', [10681]], ['oplus', [8853]], ['orarr', [8635]], ['Or', [10836]], ['or', [8744]], ['ord', [10845]], ['order', [8500]], ['orderof', [8500]], ['ordf', [170]], ['ordm', [186]], ['origof', [8886]], ['oror', [10838]], ['orslope', [10839]], ['orv', [10843]], ['oS', [9416]], ['Oscr', [119978]], ['oscr', [8500]], ['Oslash', [216]], ['oslash', [248]], ['osol', [8856]], ['Otilde', [213]], ['otilde', [245]], ['otimesas', [10806]], ['Otimes', [10807]], ['otimes', [8855]], ['Ouml', [214]], ['ouml', [246]], ['ovbar', [9021]], ['OverBar', [8254]], ['OverBrace', [9182]], ['OverBracket', [9140]], ['OverParenthesis', [9180]], ['para', [182]], ['parallel', [8741]], ['par', [8741]], ['parsim', [10995]], ['parsl', [11005]], ['part', [8706]], ['PartialD', [8706]], ['Pcy', [1055]], ['pcy', [1087]], ['percnt', [37]], ['period', [46]], ['permil', [8240]], ['perp', [8869]], ['pertenk', [8241]], ['Pfr', [120083]], ['pfr', [120109]], ['Phi', [934]], ['phi', [966]], ['phiv', [981]], ['phmmat', [8499]], ['phone', [9742]], ['Pi', [928]], ['pi', [960]], ['pitchfork', [8916]], ['piv', [982]], ['planck', [8463]], ['planckh', [8462]], ['plankv', [8463]], ['plusacir', [10787]], ['plusb', [8862]], ['pluscir', [10786]], ['plus', [43]], ['plusdo', [8724]], ['plusdu', [10789]], ['pluse', [10866]], ['PlusMinus', [177]], ['plusmn', [177]], ['plussim', [10790]], ['plustwo', [10791]], ['pm', [177]], ['Poincareplane', [8460]], ['pointint', [10773]], ['popf', [120161]], ['Popf', [8473]], ['pound', [163]], ['prap', [10935]], ['Pr', [10939]], ['pr', [8826]], ['prcue', [8828]], ['precapprox', [10935]], ['prec', [8826]], ['preccurlyeq', [8828]], ['Precedes', [8826]], ['PrecedesEqual', [10927]], ['PrecedesSlantEqual', [8828]], ['PrecedesTilde', [8830]], ['preceq', [10927]], ['precnapprox', [10937]], ['precneqq', [10933]], ['precnsim', [8936]], ['pre', [10927]], ['prE', [10931]], ['precsim', [8830]], ['prime', [8242]], ['Prime', [8243]], ['primes', [8473]], ['prnap', [10937]], ['prnE', [10933]], ['prnsim', [8936]], ['prod', [8719]], ['Product', [8719]], ['profalar', [9006]], ['profline', [8978]], ['profsurf', [8979]], ['prop', [8733]], ['Proportional', [8733]], ['Proportion', [8759]], ['propto', [8733]], ['prsim', [8830]], ['prurel', [8880]], ['Pscr', [119979]], ['pscr', [120005]], ['Psi', [936]], ['psi', [968]], ['puncsp', [8200]], ['Qfr', [120084]], ['qfr', [120110]], ['qint', [10764]], ['qopf', [120162]], ['Qopf', [8474]], ['qprime', [8279]], ['Qscr', [119980]], ['qscr', [120006]], ['quaternions', [8461]], ['quatint', [10774]], ['quest', [63]], ['questeq', [8799]], ['quot', [34]], ['QUOT', [34]], ['rAarr', [8667]], ['race', [8765, 817]], ['Racute', [340]], ['racute', [341]], ['radic', [8730]], ['raemptyv', [10675]], ['rang', [10217]], ['Rang', [10219]], ['rangd', [10642]], ['range', [10661]], ['rangle', [10217]], ['raquo', [187]], ['rarrap', [10613]], ['rarrb', [8677]], ['rarrbfs', [10528]], ['rarrc', [10547]], ['rarr', [8594]], ['Rarr', [8608]], ['rArr', [8658]], ['rarrfs', [10526]], ['rarrhk', [8618]], ['rarrlp', [8620]], ['rarrpl', [10565]], ['rarrsim', [10612]], ['Rarrtl', [10518]], ['rarrtl', [8611]], ['rarrw', [8605]], ['ratail', [10522]], ['rAtail', [10524]], ['ratio', [8758]], ['rationals', [8474]], ['rbarr', [10509]], ['rBarr', [10511]], ['RBarr', [10512]], ['rbbrk', [10099]], ['rbrace', [125]], ['rbrack', [93]], ['rbrke', [10636]], ['rbrksld', [10638]], ['rbrkslu', [10640]], ['Rcaron', [344]], ['rcaron', [345]], ['Rcedil', [342]], ['rcedil', [343]], ['rceil', [8969]], ['rcub', [125]], ['Rcy', [1056]], ['rcy', [1088]], ['rdca', [10551]], ['rdldhar', [10601]], ['rdquo', [8221]], ['rdquor', [8221]], ['CloseCurlyDoubleQuote', [8221]], ['rdsh', [8627]], ['real', [8476]], ['realine', [8475]], ['realpart', [8476]], ['reals', [8477]], ['Re', [8476]], ['rect', [9645]], ['reg', [174]], ['REG', [174]], ['ReverseElement', [8715]], ['ReverseEquilibrium', [8651]], ['ReverseUpEquilibrium', [10607]], ['rfisht', [10621]], ['rfloor', [8971]], ['rfr', [120111]], ['Rfr', [8476]], ['rHar', [10596]], ['rhard', [8641]], ['rharu', [8640]], ['rharul', [10604]], ['Rho', [929]], ['rho', [961]], ['rhov', [1009]], ['RightAngleBracket', [10217]], ['RightArrowBar', [8677]], ['rightarrow', [8594]], ['RightArrow', [8594]], ['Rightarrow', [8658]], ['RightArrowLeftArrow', [8644]], ['rightarrowtail', [8611]], ['RightCeiling', [8969]], ['RightDoubleBracket', [10215]], ['RightDownTeeVector', [10589]], ['RightDownVectorBar', [10581]], ['RightDownVector', [8642]], ['RightFloor', [8971]], ['rightharpoondown', [8641]], ['rightharpoonup', [8640]], ['rightleftarrows', [8644]], ['rightleftharpoons', [8652]], ['rightrightarrows', [8649]], ['rightsquigarrow', [8605]], ['RightTeeArrow', [8614]], ['RightTee', [8866]], ['RightTeeVector', [10587]], ['rightthreetimes', [8908]], ['RightTriangleBar', [10704]], ['RightTriangle', [8883]], ['RightTriangleEqual', [8885]], ['RightUpDownVector', [10575]], ['RightUpTeeVector', [10588]], ['RightUpVectorBar', [10580]], ['RightUpVector', [8638]], ['RightVectorBar', [10579]], ['RightVector', [8640]], ['ring', [730]], ['risingdotseq', [8787]], ['rlarr', [8644]], ['rlhar', [8652]], ['rlm', [8207]], ['rmoustache', [9137]], ['rmoust', [9137]], ['rnmid', [10990]], ['roang', [10221]], ['roarr', [8702]], ['robrk', [10215]], ['ropar', [10630]], ['ropf', [120163]], ['Ropf', [8477]], ['roplus', [10798]], ['rotimes', [10805]], ['RoundImplies', [10608]], ['rpar', [41]], ['rpargt', [10644]], ['rppolint', [10770]], ['rrarr', [8649]], ['Rrightarrow', [8667]], ['rsaquo', [8250]], ['rscr', [120007]], ['Rscr', [8475]], ['rsh', [8625]], ['Rsh', [8625]], ['rsqb', [93]], ['rsquo', [8217]], ['rsquor', [8217]], ['CloseCurlyQuote', [8217]], ['rthree', [8908]], ['rtimes', [8906]], ['rtri', [9657]], ['rtrie', [8885]], ['rtrif', [9656]], ['rtriltri', [10702]], ['RuleDelayed', [10740]], ['ruluhar', [10600]], ['rx', [8478]], ['Sacute', [346]], ['sacute', [347]], ['sbquo', [8218]], ['scap', [10936]], ['Scaron', [352]], ['scaron', [353]], ['Sc', [10940]], ['sc', [8827]], ['sccue', [8829]], ['sce', [10928]], ['scE', [10932]], ['Scedil', [350]], ['scedil', [351]], ['Scirc', [348]], ['scirc', [349]], ['scnap', [10938]], ['scnE', [10934]], ['scnsim', [8937]], ['scpolint', [10771]], ['scsim', [8831]], ['Scy', [1057]], ['scy', [1089]], ['sdotb', [8865]], ['sdot', [8901]], ['sdote', [10854]], ['searhk', [10533]], ['searr', [8600]], ['seArr', [8664]], ['searrow', [8600]], ['sect', [167]], ['semi', [59]], ['seswar', [10537]], ['setminus', [8726]], ['setmn', [8726]], ['sext', [10038]], ['Sfr', [120086]], ['sfr', [120112]], ['sfrown', [8994]], ['sharp', [9839]], ['SHCHcy', [1065]], ['shchcy', [1097]], ['SHcy', [1064]], ['shcy', [1096]], ['ShortDownArrow', [8595]], ['ShortLeftArrow', [8592]], ['shortmid', [8739]], ['shortparallel', [8741]], ['ShortRightArrow', [8594]], ['ShortUpArrow', [8593]], ['shy', [173]], ['Sigma', [931]], ['sigma', [963]], ['sigmaf', [962]], ['sigmav', [962]], ['sim', [8764]], ['simdot', [10858]], ['sime', [8771]], ['simeq', [8771]], ['simg', [10910]], ['simgE', [10912]], ['siml', [10909]], ['simlE', [10911]], ['simne', [8774]], ['simplus', [10788]], ['simrarr', [10610]], ['slarr', [8592]], ['SmallCircle', [8728]], ['smallsetminus', [8726]], ['smashp', [10803]], ['smeparsl', [10724]], ['smid', [8739]], ['smile', [8995]], ['smt', [10922]], ['smte', [10924]], ['smtes', [10924, 65024]], ['SOFTcy', [1068]], ['softcy', [1100]], ['solbar', [9023]], ['solb', [10692]], ['sol', [47]], ['Sopf', [120138]], ['sopf', [120164]], ['spades', [9824]], ['spadesuit', [9824]], ['spar', [8741]], ['sqcap', [8851]], ['sqcaps', [8851, 65024]], ['sqcup', [8852]], ['sqcups', [8852, 65024]], ['Sqrt', [8730]], ['sqsub', [8847]], ['sqsube', [8849]], ['sqsubset', [8847]], ['sqsubseteq', [8849]], ['sqsup', [8848]], ['sqsupe', [8850]], ['sqsupset', [8848]], ['sqsupseteq', [8850]], ['square', [9633]], ['Square', [9633]], ['SquareIntersection', [8851]], ['SquareSubset', [8847]], ['SquareSubsetEqual', [8849]], ['SquareSuperset', [8848]], ['SquareSupersetEqual', [8850]], ['SquareUnion', [8852]], ['squarf', [9642]], ['squ', [9633]], ['squf', [9642]], ['srarr', [8594]], ['Sscr', [119982]], ['sscr', [120008]], ['ssetmn', [8726]], ['ssmile', [8995]], ['sstarf', [8902]], ['Star', [8902]], ['star', [9734]], ['starf', [9733]], ['straightepsilon', [1013]], ['straightphi', [981]], ['strns', [175]], ['sub', [8834]], ['Sub', [8912]], ['subdot', [10941]], ['subE', [10949]], ['sube', [8838]], ['subedot', [10947]], ['submult', [10945]], ['subnE', [10955]], ['subne', [8842]], ['subplus', [10943]], ['subrarr', [10617]], ['subset', [8834]], ['Subset', [8912]], ['subseteq', [8838]], ['subseteqq', [10949]], ['SubsetEqual', [8838]], ['subsetneq', [8842]], ['subsetneqq', [10955]], ['subsim', [10951]], ['subsub', [10965]], ['subsup', [10963]], ['succapprox', [10936]], ['succ', [8827]], ['succcurlyeq', [8829]], ['Succeeds', [8827]], ['SucceedsEqual', [10928]], ['SucceedsSlantEqual', [8829]], ['SucceedsTilde', [8831]], ['succeq', [10928]], ['succnapprox', [10938]], ['succneqq', [10934]], ['succnsim', [8937]], ['succsim', [8831]], ['SuchThat', [8715]], ['sum', [8721]], ['Sum', [8721]], ['sung', [9834]], ['sup1', [185]], ['sup2', [178]], ['sup3', [179]], ['sup', [8835]], ['Sup', [8913]], ['supdot', [10942]], ['supdsub', [10968]], ['supE', [10950]], ['supe', [8839]], ['supedot', [10948]], ['Superset', [8835]], ['SupersetEqual', [8839]], ['suphsol', [10185]], ['suphsub', [10967]], ['suplarr', [10619]], ['supmult', [10946]], ['supnE', [10956]], ['supne', [8843]], ['supplus', [10944]], ['supset', [8835]], ['Supset', [8913]], ['supseteq', [8839]], ['supseteqq', [10950]], ['supsetneq', [8843]], ['supsetneqq', [10956]], ['supsim', [10952]], ['supsub', [10964]], ['supsup', [10966]], ['swarhk', [10534]], ['swarr', [8601]], ['swArr', [8665]], ['swarrow', [8601]], ['swnwar', [10538]], ['szlig', [223]], ['Tab', [9]], ['target', [8982]], ['Tau', [932]], ['tau', [964]], ['tbrk', [9140]], ['Tcaron', [356]], ['tcaron', [357]], ['Tcedil', [354]], ['tcedil', [355]], ['Tcy', [1058]], ['tcy', [1090]], ['tdot', [8411]], ['telrec', [8981]], ['Tfr', [120087]], ['tfr', [120113]], ['there4', [8756]], ['therefore', [8756]], ['Therefore', [8756]], ['Theta', [920]], ['theta', [952]], ['thetasym', [977]], ['thetav', [977]], ['thickapprox', [8776]], ['thicksim', [8764]], ['ThickSpace', [8287, 8202]], ['ThinSpace', [8201]], ['thinsp', [8201]], ['thkap', [8776]], ['thksim', [8764]], ['THORN', [222]], ['thorn', [254]], ['tilde', [732]], ['Tilde', [8764]], ['TildeEqual', [8771]], ['TildeFullEqual', [8773]], ['TildeTilde', [8776]], ['timesbar', [10801]], ['timesb', [8864]], ['times', [215]], ['timesd', [10800]], ['tint', [8749]], ['toea', [10536]], ['topbot', [9014]], ['topcir', [10993]], ['top', [8868]], ['Topf', [120139]], ['topf', [120165]], ['topfork', [10970]], ['tosa', [10537]], ['tprime', [8244]], ['trade', [8482]], ['TRADE', [8482]], ['triangle', [9653]], ['triangledown', [9663]], ['triangleleft', [9667]], ['trianglelefteq', [8884]], ['triangleq', [8796]], ['triangleright', [9657]], ['trianglerighteq', [8885]], ['tridot', [9708]], ['trie', [8796]], ['triminus', [10810]], ['TripleDot', [8411]], ['triplus', [10809]], ['trisb', [10701]], ['tritime', [10811]], ['trpezium', [9186]], ['Tscr', [119983]], ['tscr', [120009]], ['TScy', [1062]], ['tscy', [1094]], ['TSHcy', [1035]], ['tshcy', [1115]], ['Tstrok', [358]], ['tstrok', [359]], ['twixt', [8812]], ['twoheadleftarrow', [8606]], ['twoheadrightarrow', [8608]], ['Uacute', [218]], ['uacute', [250]], ['uarr', [8593]], ['Uarr', [8607]], ['uArr', [8657]], ['Uarrocir', [10569]], ['Ubrcy', [1038]], ['ubrcy', [1118]], ['Ubreve', [364]], ['ubreve', [365]], ['Ucirc', [219]], ['ucirc', [251]], ['Ucy', [1059]], ['ucy', [1091]], ['udarr', [8645]], ['Udblac', [368]], ['udblac', [369]], ['udhar', [10606]], ['ufisht', [10622]], ['Ufr', [120088]], ['ufr', [120114]], ['Ugrave', [217]], ['ugrave', [249]], ['uHar', [10595]], ['uharl', [8639]], ['uharr', [8638]], ['uhblk', [9600]], ['ulcorn', [8988]], ['ulcorner', [8988]], ['ulcrop', [8975]], ['ultri', [9720]], ['Umacr', [362]], ['umacr', [363]], ['uml', [168]], ['UnderBar', [95]], ['UnderBrace', [9183]], ['UnderBracket', [9141]], ['UnderParenthesis', [9181]], ['Union', [8899]], ['UnionPlus', [8846]], ['Uogon', [370]], ['uogon', [371]], ['Uopf', [120140]], ['uopf', [120166]], ['UpArrowBar', [10514]], ['uparrow', [8593]], ['UpArrow', [8593]], ['Uparrow', [8657]], ['UpArrowDownArrow', [8645]], ['updownarrow', [8597]], ['UpDownArrow', [8597]], ['Updownarrow', [8661]], ['UpEquilibrium', [10606]], ['upharpoonleft', [8639]], ['upharpoonright', [8638]], ['uplus', [8846]], ['UpperLeftArrow', [8598]], ['UpperRightArrow', [8599]], ['upsi', [965]], ['Upsi', [978]], ['upsih', [978]], ['Upsilon', [933]], ['upsilon', [965]], ['UpTeeArrow', [8613]], ['UpTee', [8869]], ['upuparrows', [8648]], ['urcorn', [8989]], ['urcorner', [8989]], ['urcrop', [8974]], ['Uring', [366]], ['uring', [367]], ['urtri', [9721]], ['Uscr', [119984]], ['uscr', [120010]], ['utdot', [8944]], ['Utilde', [360]], ['utilde', [361]], ['utri', [9653]], ['utrif', [9652]], ['uuarr', [8648]], ['Uuml', [220]], ['uuml', [252]], ['uwangle', [10663]], ['vangrt', [10652]], ['varepsilon', [1013]], ['varkappa', [1008]], ['varnothing', [8709]], ['varphi', [981]], ['varpi', [982]], ['varpropto', [8733]], ['varr', [8597]], ['vArr', [8661]], ['varrho', [1009]], ['varsigma', [962]], ['varsubsetneq', [8842, 65024]], ['varsubsetneqq', [10955, 65024]], ['varsupsetneq', [8843, 65024]], ['varsupsetneqq', [10956, 65024]], ['vartheta', [977]], ['vartriangleleft', [8882]], ['vartriangleright', [8883]], ['vBar', [10984]], ['Vbar', [10987]], ['vBarv', [10985]], ['Vcy', [1042]], ['vcy', [1074]], ['vdash', [8866]], ['vDash', [8872]], ['Vdash', [8873]], ['VDash', [8875]], ['Vdashl', [10982]], ['veebar', [8891]], ['vee', [8744]], ['Vee', [8897]], ['veeeq', [8794]], ['vellip', [8942]], ['verbar', [124]], ['Verbar', [8214]], ['vert', [124]], ['Vert', [8214]], ['VerticalBar', [8739]], ['VerticalLine', [124]], ['VerticalSeparator', [10072]], ['VerticalTilde', [8768]], ['VeryThinSpace', [8202]], ['Vfr', [120089]], ['vfr', [120115]], ['vltri', [8882]], ['vnsub', [8834, 8402]], ['vnsup', [8835, 8402]], ['Vopf', [120141]], ['vopf', [120167]], ['vprop', [8733]], ['vrtri', [8883]], ['Vscr', [119985]], ['vscr', [120011]], ['vsubnE', [10955, 65024]], ['vsubne', [8842, 65024]], ['vsupnE', [10956, 65024]], ['vsupne', [8843, 65024]], ['Vvdash', [8874]], ['vzigzag', [10650]], ['Wcirc', [372]], ['wcirc', [373]], ['wedbar', [10847]], ['wedge', [8743]], ['Wedge', [8896]], ['wedgeq', [8793]], ['weierp', [8472]], ['Wfr', [120090]], ['wfr', [120116]], ['Wopf', [120142]], ['wopf', [120168]], ['wp', [8472]], ['wr', [8768]], ['wreath', [8768]], ['Wscr', [119986]], ['wscr', [120012]], ['xcap', [8898]], ['xcirc', [9711]], ['xcup', [8899]], ['xdtri', [9661]], ['Xfr', [120091]], ['xfr', [120117]], ['xharr', [10231]], ['xhArr', [10234]], ['Xi', [926]], ['xi', [958]], ['xlarr', [10229]], ['xlArr', [10232]], ['xmap', [10236]], ['xnis', [8955]], ['xodot', [10752]], ['Xopf', [120143]], ['xopf', [120169]], ['xoplus', [10753]], ['xotime', [10754]], ['xrarr', [10230]], ['xrArr', [10233]], ['Xscr', [119987]], ['xscr', [120013]], ['xsqcup', [10758]], ['xuplus', [10756]], ['xutri', [9651]], ['xvee', [8897]], ['xwedge', [8896]], ['Yacute', [221]], ['yacute', [253]], ['YAcy', [1071]], ['yacy', [1103]], ['Ycirc', [374]], ['ycirc', [375]], ['Ycy', [1067]], ['ycy', [1099]], ['yen', [165]], ['Yfr', [120092]], ['yfr', [120118]], ['YIcy', [1031]], ['yicy', [1111]], ['Yopf', [120144]], ['yopf', [120170]], ['Yscr', [119988]], ['yscr', [120014]], ['YUcy', [1070]], ['yucy', [1102]], ['yuml', [255]], ['Yuml', [376]], ['Zacute', [377]], ['zacute', [378]], ['Zcaron', [381]], ['zcaron', [382]], ['Zcy', [1047]], ['zcy', [1079]], ['Zdot', [379]], ['zdot', [380]], ['zeetrf', [8488]], ['ZeroWidthSpace', [8203]], ['Zeta', [918]], ['zeta', [950]], ['zfr', [120119]], ['Zfr', [8488]], ['ZHcy', [1046]], ['zhcy', [1078]], ['zigrarr', [8669]], ['zopf', [120171]], ['Zopf', [8484]], ['Zscr', [119989]], ['zscr', [120015]], ['zwj', [8205]], ['zwnj', [8204]]];\n\nvar alphaIndex = {};\nvar charIndex = {};\n\ncreateIndexes(alphaIndex, charIndex);\n\n/**\n * @constructor\n */\nfunction Html5Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1) === 'x' ?\n parseInt(entity.substr(2).toLowerCase(), 16) :\n parseInt(entity.substr(1));\n\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n } else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.decode = function(str) {\n return new Html5Entities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var charInfo = charIndex[str.charCodeAt(i)];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n } else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n result += str.charAt(i);\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encode = function(str) {\n return new Html5Entities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var charInfo = charIndex[c];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n } else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonUTF = function(str) {\n return new Html5Entities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonASCII = function(str) {\n return new Html5Entities().encodeNonASCII(str);\n };\n\n/**\n * @param {Object} alphaIndex Passed by reference.\n * @param {Object} charIndex Passed by reference.\n */\nfunction createIndexes(alphaIndex, charIndex) {\n var i = ENTITIES.length;\n var _results = [];\n while (i--) {\n var e = ENTITIES[i];\n var alpha = e[0];\n var chars = e[1];\n var chr = chars[0];\n var addChar = (chr < 32 || chr > 126) || chr === 62 || chr === 60 || chr === 38 || chr === 34 || chr === 39;\n var charInfo;\n if (addChar) {\n charInfo = charIndex[chr] = charIndex[chr] || {};\n }\n if (chars[1]) {\n var chr2 = chars[1];\n alphaIndex[alpha] = String.fromCharCode(chr) + String.fromCharCode(chr2);\n _results.push(addChar && (charInfo[chr2] = alpha));\n } else {\n alphaIndex[alpha] = String.fromCharCode(chr);\n _results.push(addChar && (charInfo[''] = alpha));\n }\n }\n}\n\nmodule.exports = Html5Entities;\n", "var ALPHA_INDEX = {\n '<': '<',\n '>': '>',\n '"': '\"',\n '&apos': '\\'',\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': '\\'',\n '&': '&'\n};\n\nvar CHAR_INDEX = {\n 60: 'lt',\n 62: 'gt',\n 34: 'quot',\n 39: 'apos',\n 38: 'amp'\n};\n\nvar CHAR_S_INDEX = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '&': '&'\n};\n\n/**\n * @constructor\n */\nfunction XmlEntities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/<|>|\"|'|&/g, function(s) {\n return CHAR_S_INDEX[s];\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encode = function(str) {\n return new XmlEntities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&#?[0-9a-zA-Z]+;?/g, function(s) {\n if (s.charAt(1) === '#') {\n var code = s.charAt(2).toLowerCase() === 'x' ?\n parseInt(s.substr(3), 16) :\n parseInt(s.substr(2));\n\n if (isNaN(code) || code < -32768 || code > 65535) {\n return '';\n }\n return String.fromCharCode(code);\n }\n return ALPHA_INDEX[s] || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.decode = function(str) {\n return new XmlEntities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var alpha = CHAR_INDEX[c];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonUTF = function(str) {\n return new XmlEntities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLenght = str.length;\n var result = '';\n var i = 0;\n while (i < strLenght) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonASCII = function(str) {\n return new XmlEntities().encodeNonASCII(str);\n };\n\nmodule.exports = XmlEntities;\n", "/*!\n localForage -- Offline Storage, Improved\n Version 1.7.3\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support (#5572)\n // since Safari 10.1 shipped with fetch, we can use that to detect it\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback retuns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = req.onblocked = function (err) {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(err);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from './EventBus';\nimport Events from './events/Events';\nimport FactoryMaker from './FactoryMaker';\n\nconst LOG_LEVEL_NONE = 0;\nconst LOG_LEVEL_FATAL = 1;\nconst LOG_LEVEL_ERROR = 2;\nconst LOG_LEVEL_WARNING = 3;\nconst LOG_LEVEL_INFO = 4;\nconst LOG_LEVEL_DEBUG = 5;\n\n/**\n * @module Debug\n * @param {object} config\n * @ignore\n */\nfunction Debug(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const settings = config.settings;\n\n const logFn = [];\n\n let instance,\n showLogTimestamp,\n showCalleeName,\n startTime;\n\n function setup() {\n showLogTimestamp = true;\n showCalleeName = true;\n startTime = new Date().getTime();\n\n if (typeof window !== 'undefined' && window.console) {\n logFn[LOG_LEVEL_FATAL] = getLogFn(window.console.error);\n logFn[LOG_LEVEL_ERROR] = getLogFn(window.console.error);\n logFn[LOG_LEVEL_WARNING] = getLogFn(window.console.warn);\n logFn[LOG_LEVEL_INFO] = getLogFn(window.console.info);\n logFn[LOG_LEVEL_DEBUG] = getLogFn(window.console.debug);\n }\n }\n\n function getLogFn(fn) {\n if (fn && fn.bind) {\n return fn.bind(window.console);\n }\n // if not define, return the default function for reporting logs\n return window.console.log.bind(window.console);\n }\n\n /**\n * Retrieves a logger which can be used to write logging information in browser console.\n * @param {object} instance Object for which the logger is created. It is used\n * to include calle object information in log messages.\n * @memberof module:Debug\n * @returns {Logger}\n * @instance\n */\n function getLogger(instance) {\n return {\n fatal: fatal.bind(instance),\n error: error.bind(instance),\n warn: warn.bind(instance),\n info: info.bind(instance),\n debug: debug.bind(instance)\n };\n }\n\n /**\n * Prepends a timestamp in milliseconds to each log message.\n * @param {boolean} value Set to true if you want to see a timestamp in each log message.\n * @default LOG_LEVEL_WARNING\n * @memberof module:Debug\n * @instance\n */\n function setLogTimestampVisible(value) {\n showLogTimestamp = value;\n }\n /**\n * Prepends the callee object name, and media type if available, to each log message.\n * @param {boolean} value Set to true if you want to see the callee object name and media type in each log message.\n * @default true\n * @memberof module:Debug\n * @instance\n */\n function setCalleeNameVisible(value) {\n showCalleeName = value;\n }\n\n function fatal(...params) {\n doLog(LOG_LEVEL_FATAL, this, ...params);\n }\n\n function error(...params) {\n doLog(LOG_LEVEL_ERROR, this, ...params);\n }\n\n function warn(...params) {\n doLog(LOG_LEVEL_WARNING, this, ...params);\n }\n\n function info(...params) {\n doLog(LOG_LEVEL_INFO, this, ...params);\n }\n\n function debug(...params) {\n doLog(LOG_LEVEL_DEBUG, this, ...params);\n }\n\n function doLog(level, _this, ...params) {\n let message = '';\n let logTime = null;\n\n if (showLogTimestamp) {\n logTime = new Date().getTime();\n message += '[' + (logTime - startTime) + ']';\n }\n\n if (showCalleeName && _this && _this.getClassName) {\n message += '[' + _this.getClassName() + ']';\n if (_this.getType) {\n message += '[' + _this.getType() + ']';\n }\n }\n\n if (message.length > 0) {\n message += ' ';\n }\n\n Array.apply(null, params).forEach(function (item) {\n message += item + ' ';\n });\n\n // log to console if the log level is high enough\n if (logFn[level] && settings.get().debug.logLevel >= level) {\n logFn[level](message);\n }\n\n // send log event regardless of log level\n eventBus.trigger(Events.LOG, {message: message, level: level});\n }\n\n instance = {\n getLogger: getLogger,\n setLogTimestampVisible: setLogTimestampVisible,\n setCalleeNameVisible: setCalleeNameVisible\n };\n\n setup();\n\n return instance;\n}\n\nDebug.__dashjs_factory_name = 'Debug';\n\nconst factory = FactoryMaker.getSingletonFactory(Debug);\nfactory.LOG_LEVEL_NONE = LOG_LEVEL_NONE;\nfactory.LOG_LEVEL_FATAL = LOG_LEVEL_FATAL;\nfactory.LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;\nfactory.LOG_LEVEL_WARNING = LOG_LEVEL_WARNING;\nfactory.LOG_LEVEL_INFO = LOG_LEVEL_INFO;\nfactory.LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG;\nFactoryMaker.updateSingletonFactory(Debug.__dashjs_factory_name, factory);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from './FactoryMaker';\n\nconst EVENT_PRIORITY_LOW = 0;\nconst EVENT_PRIORITY_HIGH = 5000;\n\nfunction EventBus() {\n\n let handlers = {};\n\n function on(type, listener, scope, priority = EVENT_PRIORITY_LOW) {\n\n if (!type) {\n throw new Error('event type cannot be null or undefined');\n }\n if (!listener || typeof (listener) !== 'function') {\n throw new Error('listener must be a function: ' + listener);\n }\n\n if (getHandlerIdx(type, listener, scope) >= 0) return;\n\n handlers[type] = handlers[type] || [];\n\n const handler = {\n callback: listener,\n scope: scope,\n priority: priority\n };\n\n const inserted = handlers[type].some((item , idx) => {\n if (item && priority > item.priority ) {\n handlers[type].splice(idx, 0, handler);\n return true;\n }\n });\n\n if (!inserted) {\n handlers[type].push(handler);\n }\n }\n\n function off(type, listener, scope) {\n if (!type || !listener || !handlers[type]) return;\n const idx = getHandlerIdx(type, listener, scope);\n if (idx < 0) return;\n handlers[type][idx] = null;\n }\n\n function trigger(type, payload) {\n if (!type || !handlers[type]) return;\n\n payload = payload || {};\n\n if (payload.hasOwnProperty('type')) throw new Error('\\'type\\' is a reserved word for event dispatching');\n\n payload.type = type;\n\n handlers[type] = handlers[type].filter((item) => item);\n handlers[type].forEach( handler => handler && handler.callback.call(handler.scope, payload) );\n }\n\n function getHandlerIdx(type, listener, scope) {\n\n let idx = -1;\n\n if (!handlers[type]) return idx;\n\n handlers[type].some( (item, index) => {\n if (item && item.callback === listener && (!scope || scope === item.scope)) {\n idx = index;\n return true;\n }\n });\n return idx;\n }\n\n function reset() {\n handlers = {};\n }\n\n const instance = {\n on: on,\n off: off,\n trigger: trigger,\n reset: reset\n };\n\n return instance;\n}\n\nEventBus.__dashjs_factory_name = 'EventBus';\nconst factory = FactoryMaker.getSingletonFactory(EventBus);\nfactory.EVENT_PRIORITY_LOW = EVENT_PRIORITY_LOW;\nfactory.EVENT_PRIORITY_HIGH = EVENT_PRIORITY_HIGH;\nFactoryMaker.updateSingletonFactory(EventBus.__dashjs_factory_name, factory);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @module FactoryMaker\n * @ignore\n */\nconst FactoryMaker = (function () {\n\n let instance;\n const singletonContexts = [];\n const singletonFactories = {};\n const classFactories = {};\n\n function extend(name, childInstance, override, context) {\n if (!context[name] && childInstance) {\n context[name] = {\n instance: childInstance,\n override: override\n };\n }\n }\n\n /**\n * Use this method from your extended object. this.factory is injected into your object.\n * this.factory.getSingletonInstance(this.context, 'VideoModel')\n * will return the video model for use in the extended object.\n *\n * @param {Object} context - injected into extended object as this.context\n * @param {string} className - string name found in all dash.js objects\n * with name __dashjs_factory_name Will be at the bottom. Will be the same as the object's name.\n * @returns {*} Context aware instance of specified singleton name.\n * @memberof module:FactoryMaker\n * @instance\n */\n function getSingletonInstance(context, className) {\n for (const i in singletonContexts) {\n const obj = singletonContexts[i];\n if (obj.context === context && obj.name === className) {\n return obj.instance;\n }\n }\n return null;\n }\n\n /**\n * Use this method to add an singleton instance to the system. Useful for unit testing to mock objects etc.\n *\n * @param {Object} context\n * @param {string} className\n * @param {Object} instance\n * @memberof module:FactoryMaker\n * @instance\n */\n function setSingletonInstance(context, className, instance) {\n for (const i in singletonContexts) {\n const obj = singletonContexts[i];\n if (obj.context === context && obj.name === className) {\n singletonContexts[i].instance = instance;\n return;\n }\n }\n singletonContexts.push({\n name: className,\n context: context,\n instance: instance\n });\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Factories storage Management\n\n /*------------------------------------------------------------------------------------------*/\n\n function getFactoryByName(name, factoriesArray) {\n return factoriesArray[name];\n }\n\n function updateFactory(name, factory, factoriesArray) {\n if (name in factoriesArray) {\n factoriesArray[name] = factory;\n }\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Class Factories Management\n\n /*------------------------------------------------------------------------------------------*/\n\n function updateClassFactory(name, factory) {\n updateFactory(name, factory, classFactories);\n }\n\n function getClassFactoryByName(name) {\n return getFactoryByName(name, classFactories);\n }\n\n function getClassFactory(classConstructor) {\n let factory = getFactoryByName(classConstructor.__dashjs_factory_name, classFactories);\n\n if (!factory) {\n factory = function (context) {\n if (context === undefined) {\n context = {};\n }\n return {\n create: function () {\n return merge(classConstructor, context, arguments);\n }\n };\n };\n\n classFactories[classConstructor.__dashjs_factory_name] = factory; // store factory\n }\n return factory;\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Singleton Factory MAangement\n\n /*------------------------------------------------------------------------------------------*/\n\n function updateSingletonFactory(name, factory) {\n updateFactory(name, factory, singletonFactories);\n }\n\n function getSingletonFactoryByName(name) {\n return getFactoryByName(name, singletonFactories);\n }\n\n function getSingletonFactory(classConstructor) {\n let factory = getFactoryByName(classConstructor.__dashjs_factory_name, singletonFactories);\n if (!factory) {\n factory = function (context) {\n let instance;\n if (context === undefined) {\n context = {};\n }\n return {\n getInstance: function () {\n // If we don't have an instance yet check for one on the context\n if (!instance) {\n instance = getSingletonInstance(context, classConstructor.__dashjs_factory_name);\n }\n // If there's no instance on the context then create one\n if (!instance) {\n instance = merge(classConstructor, context, arguments);\n singletonContexts.push({\n name: classConstructor.__dashjs_factory_name,\n context: context,\n instance: instance\n });\n }\n return instance;\n }\n };\n };\n singletonFactories[classConstructor.__dashjs_factory_name] = factory; // store factory\n }\n\n return factory;\n }\n\n function merge(classConstructor, context, args) {\n\n let classInstance;\n const className = classConstructor.__dashjs_factory_name;\n const extensionObject = context[className];\n\n if (extensionObject) {\n\n let extension = extensionObject.instance;\n\n if (extensionObject.override) { //Override public methods in parent but keep parent.\n\n classInstance = classConstructor.apply({context}, args);\n extension = extension.apply({\n context,\n factory: instance,\n parent: classInstance\n }, args);\n\n for (const prop in extension) {\n if (classInstance.hasOwnProperty(prop)) {\n classInstance[prop] = extension[prop];\n }\n }\n\n } else { //replace parent object completely with new object. Same as dijon.\n\n return extension.apply({\n context,\n factory: instance\n }, args);\n\n }\n } else {\n // Create new instance of the class\n classInstance = classConstructor.apply({context}, args);\n }\n\n // Add getClassName function to class instance prototype (used by Debug)\n classInstance.getClassName = function () {return className;};\n\n return classInstance;\n }\n\n instance = {\n extend: extend,\n getSingletonInstance: getSingletonInstance,\n setSingletonInstance: setSingletonInstance,\n getSingletonFactory: getSingletonFactory,\n getSingletonFactoryByName: getSingletonFactoryByName,\n updateSingletonFactory: updateSingletonFactory,\n getClassFactory: getClassFactory,\n getClassFactoryByName: getClassFactoryByName,\n updateClassFactory: updateClassFactory\n };\n\n return instance;\n\n}());\n\nexport default FactoryMaker;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from './FactoryMaker';\nimport Utils from './Utils.js';\nimport Debug from '../core/Debug';\nimport Constants from '../streaming/constants/Constants';\nimport {HTTPRequest} from '../streaming/vo/metrics/HTTPRequest';\n\n/** @module Settings\n * @description Define the configuration parameters of Dash.js MediaPlayer.\n * @see {@link module:Settings~PlayerSettings PlayerSettings} for further information about the supported configuration properties\n */\n\n\n/**\n * @typedef {Object} PlayerSettings\n * @property {module:Settings~DebugSettings} [debug] Debug related settings\n * @property {module:Settings~StreamingSettings} [streaming] Streaming related settings\n * @example\n *\n * // Full settings object\n * settings = {\n * debug: {\n * logLevel: Debug.LOG_LEVEL_WARNING\n * },\n * streaming: {\n * metricsMaxListDepth: 1000,\n * abandonLoadTimeout: 10000,\n * liveDelayFragmentCount: NaN,\n * liveDelay: null,\n * scheduleWhilePaused: true,\n * fastSwitchEnabled: false,\n * bufferPruningInterval: 10,\n * bufferToKeep: 20,\n * bufferAheadToKeep: 80,\n * jumpGaps: true,\n * smallGapLimit: 1.5,\n * stableBufferTime: 12,\n * bufferTimeAtTopQuality: 30,\n * bufferTimeAtTopQualityLongForm: 60,\n * longFormContentDurationThreshold: 600,\n * wallclockTimeUpdateInterval: 50,\n * lowLatencyEnabled: false,\n * keepProtectionMediaKeys: false,\n * useManifestDateHeaderTimeSource: true,\n * useSuggestedPresentationDelay: true,\n * useAppendWindowEnd: true,\n * manifestUpdateRetryInterval: 100,\n * liveCatchUpMinDrift: 0.02,\n * liveCatchUpMaxDrift: 0,\n * liveCatchUpPlaybackRate: 0.5,\n * lastBitrateCachingInfo: { enabled: true, ttl: 360000 },\n * lastMediaSettingsCachingInfo: { enabled: true, ttl: 360000 },\n * cacheLoadThresholds: { video: 50, audio: 5 },\n * retryIntervals: {\n * MPD: 500,\n * XLinkExpansion: 500,\n * InitializationSegment: 1000,\n * IndexSegment: 1000,\n * MediaSegment: 1000,\n * BitstreamSwitchingSegment: 1000,\n * other: 1000,\n * lowLatencyReductionFactor: 10\n * },\n * retryAttempts: {\n * MPD: 3,\n * XLinkExpansion: 1,\n * InitializationSegment: 3,\n * IndexSegment: 3,\n * MediaSegment: 3,\n * BitstreamSwitchingSegment: 3,\n * other: 3,\n * lowLatencyMultiplyFactor: 5\n * },\n * abr: {\n * movingAverageMethod: Constants.MOVING_AVERAGE_SLIDING_WINDOW,\n * ABRStrategy: Constants.ABR_STRATEGY_DYNAMIC,\n * bandwidthSafetyFactor: 0.9,\n * useDefaultABRRules: true,\n * useBufferOccupancyABR: false,\n * useDeadTimeLatency: true,\n * limitBitrateByPortal: false,\n * usePixelRatioInLimitBitrateByPortal: false,\n * maxBitrate: { audio: -1, video: -1 },\n * minBitrate: { audio: -1, video: -1 },\n * maxRepresentationRatio: { audio: 1, video: 1 },\n * initialBitrate: { audio: -1, video: -1 },\n * initialRepresentationRatio: { audio: -1, video: -1 },\n * autoSwitchBitrate: { audio: true, video: true }\n * },\n * cmcd: {\n * enabled: false,\n * sid: null,\n * cid: null,\n * did: null\n * }\n * }\n * }\n */\n\n\n/**\n * @typedef {Object} DebugSettings\n * @property {number} [logLevel=dashjs.Debug.LOG_LEVEL_WARNING]\n * Sets up the log level. The levels are cumulative. For example, if you set the log level\n * to dashjs.Debug.LOG_LEVEL_WARNING all warnings, errors and fatals will be logged. Possible values.\n *\n *
    \n *
  • dashjs.Debug.LOG_LEVEL_NONE
    \n * No message is written in the browser console.\n *\n *
  • dashjs.Debug.LOG_LEVEL_FATAL
    \n * Log fatal errors. An error is considered fatal when it causes playback to fail completely.\n *\n *
  • dashjs.Debug.LOG_LEVEL_ERROR
    \n * Log error messages.\n *\n *
  • dashjs.Debug.LOG_LEVEL_WARNING
    \n * Log warning messages.\n *\n *
  • dashjs.Debug.LOG_LEVEL_INFO
    \n * Log info messages.\n *\n *
  • dashjs.Debug.LOG_LEVEL_DEBUG
    \n * Log debug messages.\n *
\n */\n\n/**\n * @typedef {Object} AbrSettings\n * @property {string} [movingAverageMethod=\"slidingWindow\"]\n * Sets the moving average method used for smoothing throughput estimates. Valid methods are\n * \"slidingWindow\" and \"ewma\". The call has no effect if an invalid method is passed.\n *\n * The sliding window moving average method computes the average throughput using the last four segments downloaded.\n * If the stream is live (as opposed to VOD), then only the last three segments are used.\n * If wide variations in throughput are detected, the number of segments can be dynamically increased to avoid oscillations.\n *\n * The exponentially weighted moving average (EWMA) method computes the average using exponential smoothing.\n * Two separate estimates are maintained, a fast one with a three-second half life and a slow one with an eight-second half life.\n * The throughput estimate at any time is the minimum of the fast and slow estimates.\n * This allows a fast reaction to a bandwidth drop and prevents oscillations on bandwidth spikes.\n * @property {string} [ABRStrategy=\"abrDynamic\"] Returns the current ABR strategy being used: \"abrDynamic\", \"abrBola\" or \"abrThroughput\".\n * @property {number} [bandwidthSafetyFactor=0.9]\n * Standard ABR throughput rules multiply the throughput by this value. It should be between 0 and 1,\n * with lower values giving less rebuffering (but also lower quality).\n * @property {boolean} [useDefaultABRRules=true] Should the default ABR rules be used, or the custom ones added.\n * @property {boolean} [useBufferOccupancyABR=false] Whether to use the BOLA abr rule.\n * @property {boolean} [useDeadTimeLatency=true]\n * If true, only the download portion will be considered part of the download bitrate\n * and latency will be regarded as static. If false, the reciprocal of the whole\n * transfer time will be used.\n * @property {boolean} [limitBitrateByPortal=false] If true, the size of the video portal will limit the max chosen video resolution.\n * @property {boolean} [usePixelRatioInLimitBitrateByPortal=false]\n * Sets whether to take into account the device's pixel ratio when defining the portal dimensions.\n * Useful on, for example, retina displays.\n * @property {module:Settings~AudioVideoSettings} [maxBitrate={audio: -1, video: -1}] The maximum bitrate that the ABR algorithms will choose. Use NaN for no limit.\n * @property {module:Settings~AudioVideoSettings} [minBitrate={audio: -1, video: -1}] The minimum bitrate that the ABR algorithms will choose. Use NaN for no limit.\n * @property {module:Settings~AudioVideoSettings} [maxRepresentationRatio={audio: 1, video: 1}]\n * When switching multi-bitrate content (auto or manual mode) this property specifies the maximum representation allowed,\n * as a proportion of the size of the representation set.\n *\n * You can set or remove this cap at anytime before or during playback. To clear this setting you set the value to 1.\n *\n * If both this and maxAllowedBitrate are defined, maxAllowedBitrate is evaluated first, then maxAllowedRepresentation,\n * i.e. the lowest value from executing these rules is used.\n *\n * This feature is typically used to reserve higher representations for playback only when connected over a fast connection.\n * @property {module:Settings~AudioVideoSettings} [initialBitrate={audio: -1, video: -1}] Explicitly set the starting bitrate for audio or video\n * @property {module:Settings~AudioVideoSettings} [initialRepresentationRatio={audio: -1, video: -1}] Explicitly set the initial representation ratio. If initalBitrate is specified, this is ignored.\n * @property {module:Settings~AudioVideoSettings} [autoSwitchBitrate={audio: true, video: true}] Indicates whether the player should enable ABR algorithms to switch the bitrate.\n */\n\n/**\n * @typedef {Object} StreamingSettings\n * @property {number} [metricsMaxListDepth=1000] Maximum list depth of metrics.\n * @property {number} [abandonLoadTimeout=10000]\n * A timeout value in seconds, which during the ABRController will block switch-up events.\n * This will only take effect after an abandoned fragment event occurs.\n * @property {number} [liveDelayFragmentCount=NaN]\n * Changing this value will lower or increase live stream latency. The detected segment duration will be multiplied by this value\n * to define a time in seconds to delay a live stream from the live edge. Lowering this value will lower latency but may decrease\n * the player's ability to build a stable buffer.\n * @property {number} [liveDelay]\n *

Equivalent in seconds of setLiveDelayFragmentCount

\n *

Lowering this value will lower latency but may decrease the player's ability to build a stable buffer.

\n *

This value should be less than the manifest duration by a couple of segment durations to avoid playback issues

\n *

If set, this parameter will take precedence over setLiveDelayFragmentCount and manifest info

\n * @property {boolean} [scheduleWhilePaused=true]\n * Set to true if you would like dash.js to keep downloading fragments in the background\n * when the video element is paused.\n * @property {boolean} [fastSwitchEnabled=false]\n * When enabled, after an ABR up-switch in quality, instead of requesting and appending the next fragment\n * at the end of the current buffer range it is requested and appended closer to the current time\n * When enabled, The maximum time to render a higher quality is current time + (1.5 * fragment duration).\n *\n * Note, When ABR down-switch is detected, we appended the lower quality at the end of the buffer range to preserve the\n * higher quality media for as long as possible.\n *\n * If enabled, it should be noted there are a few cases when the client will not replace inside buffer range but rather\n * just append at the end. 1. When the buffer level is less than one fragment duration 2. The client\n * is in an Abandonment State due to recent fragment abandonment event.\n *\n * Known issues:\n * 1. In IE11 with auto switching off, if a user switches to a quality they can not download in time the\n * fragment may be appended in the same range as the playhead or even in the past, in IE11 it may cause a stutter\n * or stall in playback.\n * @property {number} [bufferPruningInterval=10] The interval of pruning buffer in sconds.\n * @property {number} [bufferToKeep=20]\n * This value influences the buffer pruning logic.\n * Allows you to modify the buffer that is kept in source buffer in seconds.\n * 0|-----------bufferToPrune-----------|-----bufferToKeep-----|currentTime|\n * @property {number} [bufferAheadToKeep=80]\n * This value influences the buffer pruning logic.\n * Allows you to modify the buffer ahead of current time position that is kept in source buffer in seconds.\n *
0|--------|currentTime|-----bufferAheadToKeep----|----bufferToPrune-----------|end|
\n * @property {boolean} [jumpGaps=true] Sets whether player should jump small gaps (discontinuities) in the buffer.\n * @property {number} [smallGapLimit=1.8] Time in seconds for a gap to be considered small.\n * @property {number} [stableBufferTime=12]\n * The time that the internal buffer target will be set to post startup/seeks (NOT top quality).\n *\n * When the time is set higher than the default you will have to wait longer\n * to see automatic bitrate switches but will have a larger buffer which\n * will increase stability.\n * @property {number} [bufferTimeAtTopQuality=30]\n * The time that the internal buffer target will be set to once playing the top quality.\n * If there are multiple bitrates in your adaptation, and the media is playing at the highest\n * bitrate, then we try to build a larger buffer at the top quality to increase stability\n * and to maintain media quality.\n * @property {number} [bufferTimeAtTopQualityLongForm=60] The time that the internal buffer target will be set to once playing the top quality for long form content.\n * @property {number} [longFormContentDurationThreshold=600]\n * The threshold which defines if the media is considered long form content.\n * This will directly affect the buffer targets when playing back at the top quality.\n * @property {number} [wallclockTimeUpdateInterval=50] How frequently the wallclockTimeUpdated internal event is triggered (in milliseconds).\n * @property {boolean} [lowLatencyEnabled=false] Enable or disable low latency mode\n * @property {boolean} [keepProtectionMediaKeys=false]\n * Set the value for the ProtectionController and MediaKeys life cycle. If true, the\n * ProtectionController and then created MediaKeys and MediaKeySessions will be preserved during\n * the MediaPlayer lifetime.\n * @property {boolean} [useManifestDateHeaderTimeSource=true]\n *

Allows you to enable the use of the Date Header, if exposed with CORS, as a timing source for live edge detection. The\n * use of the date header will happen only after the other timing source that take precedence fail or are omitted as described.\n * @property {boolean} [useSuggestedPresentationDelay=true]\n *

Set to true if you would like to override the default live delay and honor the SuggestedPresentationDelay attribute in by the manifest.

\n * @property {boolean} [useAppendWindowEnd=true]\n * Specifies if the appendWindowEnd attribute of the MSE SourceBuffers should be set according to content duration from manifest.\n * @property {number} [manifestUpdateRetryInterval=100]\n * For live streams, set the interval-frequency in milliseconds at which\n * dash.js will check if the current manifest is still processed before\n * downloading the next manifest once the minimumUpdatePeriod time has\n * @property {number} [liveCatchUpMinDrift=0.02]\n * Use this method to set the minimum latency deviation allowed before activating catch-up mechanism. In low latency mode,\n * when the difference between the measured latency and the target one,\n * as an absolute number, is higher than the one sets with this method, then dash.js increases/decreases\n * playback rate until target latency is reached.\n *\n * LowLatencyMinDrift should be provided in seconds, and it uses values between 0.0 and 0.5.\n *\n * Note: Catch-up mechanism is only applied when playing low latency live streams.\n * @property {number} [liveCatchUpMaxDrift=0]\n * Use this method to set the maximum latency deviation allowed before dash.js to do a seeking to live position. In low latency mode,\n * when the difference between the measured latency and the target one,\n * as an absolute number, is higher than the one sets with this method, then dash.js does a seek to live edge position minus\n * the target live delay.\n *\n * LowLatencyMaxDriftBeforeSeeking should be provided in seconds. If 0, then seeking operations won't be used for\n * fixing latency deviations.\n *\n * Note: Catch-up mechanism is only applied when playing low latency live streams.\n * @property {number} [liveCatchUpPlaybackRate=0.5]\n * Use this parameter to set the maximum catch up rate, as a percentage, for low latency live streams. In low latency mode,\n * when measured latency is higher/lower than the target one,\n * dash.js increases/decreases playback rate respectively up to (+/-) the percentage defined with this method until target is reached.\n *\n * Valid values for catch up rate are in range 0-0.5 (0-50%). Set it to 0 to turn off live catch up feature.\n *\n * Note: Catch-up mechanism is only applied when playing low latency live streams.\n * @property {number} [liveCatchupLatencyThreshold=NaN]\n * Use this parameter to set the maximum threshold for which live catch up is applied. For instance, if this value is set to 8 seconds,\n * then live catchup is only applied if the current live latency is equal or below 8 seconds. The reason behind this parameter is to avoid an increase\n * of the playback rate if the user seeks within the DVR window.\n *\n * If no value is specified this will be twice the maximum live delay. The maximum live delay is either specified in the manifest as part of a ServiceDescriptor or calculated the following:\n * maximumLiveDelay = targetDelay + liveCatchupMinDrift\n *\n * Note: Catch-up mechanism is only applied when playing low latency live streams.\n * @property {module:Settings~CachingInfoSettings} [lastBitrateCachingInfo={enabled: true, ttl: 360000}]\n * Set to false if you would like to disable the last known bit rate from being stored during playback and used\n * to set the initial bit rate for subsequent playback within the expiration window.\n *\n * The default expiration is one hour, defined in milliseconds. If expired, the default initial bit rate (closest to 1000 kbps) will be used\n * for that session and a new bit rate will be stored during that session.\n * @property {module:Settings~CachingInfoSettings} [lastMediaSettingsCachingInfo={enabled: true, ttl: 360000}]\n * Set to false if you would like to disable the last known lang for audio (or camera angle for video) from being stored during playback and used\n * to set the initial settings for subsequent playback within the expiration window.\n *\n * The default expiration is one hour, defined in milliseconds. If expired, the default settings will be used\n * for that session and a new settings will be stored during that session.\n * @property {module:Settings~AudioVideoSettings} [cacheLoadThresholds={video: 50, audio: 5}]\n * For a given media type, the threshold which defines if the response to a fragment\n * request is coming from browser cache or not.\n * @property {module:Settings~RequestTypeSettings} [retryIntervals] Time in milliseconds of which to reload a failed file load attempt. For low latency mode these values are divided by lowLatencyReductionFactor.\n * @property {module:Settings~RequestTypeSettings} [retryAttempts] Total number of retry attempts that will occur on a file load before it fails. For low latency mode these values are multiplied by lowLatencyMultiplyFactor.\n * @property {module:Settings~AbrSettings} abr Adaptive Bitrate algorithm related settings.\n * @property {module:Settings~CmcdSettings} cmcd Settings related to Common Media Client Data reporting.\n */\n\n/**\n * @typedef {Object} CachingInfoSettings\n * @property {boolean} [enable] Enable or disable the caching feature.\n * @property {number} [ttl] Time to live. A value defined in milliseconds representing how log to cache the settings for.\n */\n\n/**\n * @typedef {Object} module:Settings~AudioVideoSettings\n * @property {number|boolean} [audio] Configuration for audio media type of tracks.\n * @property {number|boolean} [video] Configuration for video media type of tracks.\n */\n\n/**\n * @typedef {Object} RequestTypeSettings\n * @property {number} [MPD] Manifest type of requests\n * @property {number} [XLinkExpansion] XLink expansion type of requests\n * @property {number} [InitializationSegment] Request to retrieve an initialization segment\n * @property {number} [IndexSegment] Request to retrieve an index segment (SegmentBase)\n * @property {number} [MediaSegment] Request to retrieve a media segment (video/audio/image/text chunk)\n * @property {number} [BitstreamSwitchingSegment] Bitrate stream switching type of request\n * @property {number} [other] Other type of request\n *\n */\n\n/**\n * @typedef {Object} module:Settings~CmcdSettings\n * @property {boolean} [enable=false] Enable or disable the CMCD reporting.\n * @property {string} [sid] GUID identifying the current playback session. Should be in UUID format. If not specified a UUID will be automatically generated.\n * @property {string} [cid] A unique string to identify the current content. If not specified it will be a hash of the MPD url.\n * @property {string} [did=dash.js-cmcd-default-id] A unique string identifying the current device.\n */\n\n\n/**\n * @class\n * @ignore\n */\nfunction Settings() {\n let instance;\n\n /**\n * @const {PlayerSettings} defaultSettings\n * @ignore\n */\n const defaultSettings = {\n debug: {\n logLevel: Debug.LOG_LEVEL_WARNING\n },\n streaming: {\n metricsMaxListDepth: 1000,\n abandonLoadTimeout: 10000,\n liveDelayFragmentCount: NaN,\n liveDelay: null,\n scheduleWhilePaused: true,\n fastSwitchEnabled: false,\n bufferPruningInterval: 10,\n bufferToKeep: 20,\n bufferAheadToKeep: 80,\n jumpGaps: true,\n smallGapLimit: 1.5,\n stableBufferTime: 12,\n bufferTimeAtTopQuality: 30,\n bufferTimeAtTopQualityLongForm: 60,\n longFormContentDurationThreshold: 600,\n wallclockTimeUpdateInterval: 50,\n lowLatencyEnabled: false,\n keepProtectionMediaKeys: false,\n useManifestDateHeaderTimeSource: true,\n useSuggestedPresentationDelay: true,\n useAppendWindowEnd: true,\n manifestUpdateRetryInterval: 100,\n liveCatchUpMinDrift: 0.02,\n liveCatchUpMaxDrift: 0,\n liveCatchUpPlaybackRate: 0.5,\n liveCatchupLatencyThreshold: NaN,\n lastBitrateCachingInfo: {enabled: true, ttl: 360000},\n lastMediaSettingsCachingInfo: {enabled: true, ttl: 360000},\n cacheLoadThresholds: {video: 50, audio: 5},\n retryIntervals: {\n [HTTPRequest.MPD_TYPE]: 500,\n [HTTPRequest.XLINK_EXPANSION_TYPE]: 500,\n [HTTPRequest.MEDIA_SEGMENT_TYPE]: 1000,\n [HTTPRequest.INIT_SEGMENT_TYPE]: 1000,\n [HTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE]: 1000,\n [HTTPRequest.INDEX_SEGMENT_TYPE]: 1000,\n [HTTPRequest.OTHER_TYPE]: 1000,\n lowLatencyReductionFactor: 10\n },\n retryAttempts: {\n [HTTPRequest.MPD_TYPE]: 3,\n [HTTPRequest.XLINK_EXPANSION_TYPE]: 1,\n [HTTPRequest.MEDIA_SEGMENT_TYPE]: 3,\n [HTTPRequest.INIT_SEGMENT_TYPE]: 3,\n [HTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE]: 3,\n [HTTPRequest.INDEX_SEGMENT_TYPE]: 3,\n [HTTPRequest.OTHER_TYPE]: 3,\n lowLatencyMultiplyFactor: 5\n },\n abr: {\n movingAverageMethod: Constants.MOVING_AVERAGE_SLIDING_WINDOW,\n ABRStrategy: Constants.ABR_STRATEGY_DYNAMIC,\n bandwidthSafetyFactor: 0.9,\n useDefaultABRRules: true,\n useBufferOccupancyABR: false,\n useDeadTimeLatency: true,\n limitBitrateByPortal: false,\n usePixelRatioInLimitBitrateByPortal: false,\n maxBitrate: {audio: -1, video: -1},\n minBitrate: {audio: -1, video: -1},\n maxRepresentationRatio: {audio: 1, video: 1},\n initialBitrate: {audio: -1, video: -1},\n initialRepresentationRatio: {audio: -1, video: -1},\n autoSwitchBitrate: {audio: true, video: true}\n },\n cmcd: {\n enabled: false,\n sid: null,\n cid: null,\n did: null\n }\n }\n };\n\n let settings = Utils.clone(defaultSettings);\n\n //Merge in the settings. If something exists in the new config that doesn't match the schema of the default config,\n //regard it as an error and log it.\n function mixinSettings(source, dest, path) {\n for (let n in source) {\n if (source.hasOwnProperty(n)) {\n if (dest.hasOwnProperty(n)) {\n if (typeof source[n] === 'object' && source[n] !== null) {\n mixinSettings(source[n], dest[n], path.slice() + n + '.');\n } else {\n dest[n] = Utils.clone(source[n]);\n }\n }\n }\n }\n }\n\n /**\n * Return the settings object. Don't copy/store this object, you won't get updates.\n * @func\n * @instance\n */\n function get() {\n return settings;\n }\n\n /**\n * @func\n * @instance\n * @param {object} settingsObj - This should be a partial object of the Settings.Schema type. That is, fields defined should match the path (e.g.\n * settingsObj.streaming.abr.autoSwitchBitrate.audio -> defaultSettings.streaming.abr.autoSwitchBitrate.audio). Where an element's path does\n * not match it is ignored, and a warning is logged.\n *\n * Use to change the settings object. Any new values defined will overwrite the settings and anything undefined will not change.\n * Implementers of new settings should add it in an approriate namespace to the defaultSettings object and give it a default value (that is not undefined).\n *\n */\n function update(settingsObj) {\n if (typeof settingsObj === 'object') {\n mixinSettings(settingsObj, settings, '');\n }\n }\n\n /**\n * Resets the settings object. Everything is set to its default value.\n * @func\n * @instance\n *\n */\n function reset() {\n settings = Utils.clone(defaultSettings);\n }\n\n instance = {\n get: get,\n update: update,\n reset: reset\n };\n\n return instance;\n}\n\n\nSettings.__dashjs_factory_name = 'Settings';\nlet factory = FactoryMaker.getSingletonFactory(Settings);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\n\nclass Utils {\n static mixin(dest, source, copy) {\n let s;\n let empty = {};\n if (dest) {\n for (let name in source) {\n if (source.hasOwnProperty(name)) {\n s = source[name];\n if (!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))) {\n if (typeof dest[name] === 'object' && dest[name] !== null) {\n dest[name] = Utils.mixin(dest[name], s, copy);\n } else {\n dest[name] = copy(s);\n }\n }\n }\n }\n }\n return dest;\n }\n\n static clone(src) {\n if (!src || typeof src !== 'object') {\n return src; // anything\n }\n let r;\n if (src instanceof Array) {\n // array\n r = [];\n for (let i = 0, l = src.length; i < l; ++i) {\n if (i in src) {\n r.push(Utils.clone(src[i]));\n }\n }\n } else {\n r = {};\n }\n return Utils.mixin(r, src, Utils.clone);\n }\n\n static addAditionalQueryParameterToUrl(url, params) {\n try {\n if (!params || params.length === 0) {\n return url;\n }\n\n let modifiedUrl = new URL(url);\n\n params.forEach((param) => {\n if (param.key && param.value) {\n modifiedUrl.searchParams.set(param.key, param.value);\n }\n });\n\n return modifiedUrl.href;\n\n\n } catch (e) {\n return url;\n }\n }\n\n static generateUuid() {\n let dt = new Date().getTime();\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n });\n return uuid;\n }\n\n static generateHashCode(string) {\n let hash = 0;\n\n if (string.length === 0) {\n return hash;\n }\n\n for (let i = 0; i < string.length; i++) {\n const chr = string.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0;\n }\n return hash;\n }\n}\n\nexport default Utils;\n", "const VERSION = '3.1.2';\nexport function getVersionString() {\n return VERSION;\n}\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ErrorsBase from './ErrorsBase';\n/**\n * Errors declaration\n * @class\n */\nclass Errors extends ErrorsBase {\n constructor () {\n super();\n /**\n * Error code returned when a manifest parsing error occurs\n */\n this.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE = 10;\n /**\n * Error code returned when a manifest loading error occurs\n */\n this.MANIFEST_LOADER_LOADING_FAILURE_ERROR_CODE = 11;\n /**\n * Error code returned when a xlink loading error occurs\n */\n this.XLINK_LOADER_LOADING_FAILURE_ERROR_CODE = 12;\n /**\n * Error code returned when the update of segments list has failed\n */\n this.SEGMENTS_UPDATE_FAILED_ERROR_CODE = 13;\n this.SEGMENTS_UNAVAILABLE_ERROR_CODE = 14;\n this.SEGMENT_BASE_LOADER_ERROR_CODE = 15;\n this.TIME_SYNC_FAILED_ERROR_CODE = 16;\n this.FRAGMENT_LOADER_LOADING_FAILURE_ERROR_CODE = 17;\n this.FRAGMENT_LOADER_NULL_REQUEST_ERROR_CODE = 18;\n this.URL_RESOLUTION_FAILED_GENERIC_ERROR_CODE = 19;\n this.APPEND_ERROR_CODE = 20;\n this.REMOVE_ERROR_CODE = 21;\n this.DATA_UPDATE_FAILED_ERROR_CODE = 22;\n /**\n * Error code returned when MediaSource is not supported by the browser\n */\n this.CAPABILITY_MEDIASOURCE_ERROR_CODE = 23;\n /**\n * Error code returned when Protected contents are not supported\n */\n this.CAPABILITY_MEDIAKEYS_ERROR_CODE = 24;\n\n this.DOWNLOAD_ERROR_ID_MANIFEST_CODE = 25;\n\n this.DOWNLOAD_ERROR_ID_SIDX_CODE = 26;\n this.DOWNLOAD_ERROR_ID_CONTENT_CODE = 27;\n\n this.DOWNLOAD_ERROR_ID_INITIALIZATION_CODE = 28;\n\n this.DOWNLOAD_ERROR_ID_XLINK_CODE = 29;\n\n this.MANIFEST_ERROR_ID_CODEC_CODE = 30;\n this.MANIFEST_ERROR_ID_PARSE_CODE = 31;\n\n /**\n * Error code returned when no stream (period) has been detected in the manifest\n */\n this.MANIFEST_ERROR_ID_NOSTREAMS_CODE = 32;\n /**\n * Error code returned when something wrong has append during subtitles parsing (TTML or VTT)\n */\n this.TIMED_TEXT_ERROR_ID_PARSE_CODE = 33;\n /**\n * Error code returned when a 'muxed' media type has been detected in the manifest. This type is not supported\n */\n this.MANIFEST_ERROR_ID_MULTIPLEXED_CODE = 34;\n /**\n * Error code returned when a media source type is not supported\n */\n this.MEDIASOURCE_TYPE_UNSUPPORTED_CODE = 35;\n\n this.MANIFEST_LOADER_PARSING_FAILURE_ERROR_MESSAGE = 'parsing failed for ';\n this.MANIFEST_LOADER_LOADING_FAILURE_ERROR_MESSAGE = 'Failed loading manifest: ';\n this.XLINK_LOADER_LOADING_FAILURE_ERROR_MESSAGE = 'Failed loading Xlink element: ';\n this.SEGMENTS_UPDATE_FAILED_ERROR_MESSAGE = 'Segments update failed';\n this.SEGMENTS_UNAVAILABLE_ERROR_MESSAGE = 'no segments are available yet';\n this.SEGMENT_BASE_LOADER_ERROR_MESSAGE = 'error loading segments';\n this.TIME_SYNC_FAILED_ERROR_MESSAGE = 'Failed to synchronize time';\n this.FRAGMENT_LOADER_NULL_REQUEST_ERROR_MESSAGE = 'request is null';\n this.URL_RESOLUTION_FAILED_GENERIC_ERROR_MESSAGE = 'Failed to resolve a valid URL';\n this.APPEND_ERROR_MESSAGE = 'chunk is not defined';\n this.REMOVE_ERROR_MESSAGE = 'buffer is not defined';\n this.DATA_UPDATE_FAILED_ERROR_MESSAGE = 'Data update failed';\n\n this.CAPABILITY_MEDIASOURCE_ERROR_MESSAGE = 'mediasource is not supported';\n this.CAPABILITY_MEDIAKEYS_ERROR_MESSAGE = 'mediakeys is not supported';\n this.TIMED_TEXT_ERROR_MESSAGE_PARSE = 'parsing error :';\n this.MEDIASOURCE_TYPE_UNSUPPORTED_MESSAGE = 'Error creating source buffer of type : ';\n }\n}\n\nlet errors = new Errors();\nexport default errors;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass ErrorsBase {\n extend (errors, config) {\n if (!errors) return;\n\n let override = config ? config.override : false;\n let publicOnly = config ? config.publicOnly : false;\n\n\n for (const err in errors) {\n if (!errors.hasOwnProperty(err) || (this[err] && !override)) continue;\n if (publicOnly && errors[err].indexOf('public_') === -1) continue;\n this[err] = errors[err];\n\n }\n }\n}\n\nexport default ErrorsBase;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from './EventsBase';\n\n/**\n * These are internal events that should not be needed at the player level.\n * If you find and event in here that you would like access to from MediaPlayer level\n * please add an issue at https://github.com/Dash-Industry-Forum/dash.js/issues/new\n * @class\n * @ignore\n */\nclass CoreEvents extends EventsBase {\n constructor () {\n super();\n this.BUFFERING_COMPLETED = 'bufferingCompleted';\n this.BUFFER_CLEARED = 'bufferCleared';\n this.BUFFER_LEVEL_UPDATED = 'bufferLevelUpdated';\n this.BYTES_APPENDED = 'bytesAppended';\n this.BYTES_APPENDED_END_FRAGMENT = 'bytesAppendedEndFragment';\n this.CHECK_FOR_EXISTENCE_COMPLETED = 'checkForExistenceCompleted';\n this.CURRENT_TRACK_CHANGED = 'currentTrackChanged';\n this.DATA_UPDATE_COMPLETED = 'dataUpdateCompleted';\n this.DATA_UPDATE_STARTED = 'dataUpdateStarted';\n this.INBAND_EVENTS = 'inbandEvents';\n this.INITIALIZATION_LOADED = 'initializationLoaded';\n this.INIT_FRAGMENT_LOADED = 'initFragmentLoaded';\n this.INIT_FRAGMENT_NEEDED = 'initFragmentNeeded';\n this.INTERNAL_MANIFEST_LOADED = 'internalManifestLoaded';\n this.ORIGINAL_MANIFEST_LOADED = 'originalManifestLoaded';\n this.LIVE_EDGE_SEARCH_COMPLETED = 'liveEdgeSearchCompleted';\n this.LOADING_COMPLETED = 'loadingCompleted';\n this.LOADING_PROGRESS = 'loadingProgress';\n this.LOADING_DATA_PROGRESS = 'loadingDataProgress';\n this.LOADING_ABANDONED = 'loadingAborted';\n this.MANIFEST_UPDATED = 'manifestUpdated';\n this.MEDIA_FRAGMENT_LOADED = 'mediaFragmentLoaded';\n this.MEDIA_FRAGMENT_NEEDED = 'mediaFragmentNeeded';\n this.QUOTA_EXCEEDED = 'quotaExceeded';\n this.REPRESENTATION_UPDATE_STARTED = 'representationUpdateStarted';\n this.REPRESENTATION_UPDATE_COMPLETED = 'representationUpdateCompleted';\n this.SEGMENTS_LOADED = 'segmentsLoaded';\n this.SERVICE_LOCATION_BLACKLIST_ADD = 'serviceLocationBlacklistAdd';\n this.SERVICE_LOCATION_BLACKLIST_CHANGED = 'serviceLocationBlacklistChanged';\n this.SOURCEBUFFER_REMOVE_COMPLETED = 'sourceBufferRemoveCompleted';\n this.STREAMS_COMPOSED = 'streamsComposed';\n this.STREAM_BUFFERING_COMPLETED = 'streamBufferingCompleted';\n this.STREAM_COMPLETED = 'streamCompleted';\n this.TEXT_TRACKS_QUEUE_INITIALIZED = 'textTracksQueueInitialized';\n this.TIME_SYNCHRONIZATION_COMPLETED = 'timeSynchronizationComplete';\n this.URL_RESOLUTION_FAILED = 'urlResolutionFailed';\n this.VIDEO_CHUNK_RECEIVED = 'videoChunkReceived';\n this.WALLCLOCK_TIME_UPDATED = 'wallclockTimeUpdated';\n this.XLINK_ELEMENT_LOADED = 'xlinkElementLoaded';\n this.XLINK_READY = 'xlinkReady';\n this.SEGMENTBASE_INIT_REQUEST_NEEDED = 'segmentBaseInitRequestNeeded';\n this.SEGMENTBASE_SEGMENTSLIST_REQUEST_NEEDED = 'segmentBaseSegmentsListRequestNeeded';\n this.SEEK_TARGET = 'seekTarget';\n this.DYNAMIC_STREAM_COMPLETED = 'dynamicStreamCompleted';\n }\n}\n\nexport default CoreEvents;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nimport CoreEvents from './CoreEvents';\nclass Events extends CoreEvents {\n}\nlet events = new Events();\nexport default events;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass EventsBase {\n extend (events, config) {\n if (!events) return;\n\n let override = config ? config.override : false;\n let publicOnly = config ? config.publicOnly : false;\n\n\n for (const evt in events) {\n if (!events.hasOwnProperty(evt) || (this[evt] && !override)) continue;\n if (publicOnly && events[evt].indexOf('public_') === -1) continue;\n this[evt] = events[evt];\n\n }\n }\n}\n\nexport default EventsBase;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FragmentRequest from '../streaming/vo/FragmentRequest';\nimport { HTTPRequest } from '../streaming/vo/metrics/HTTPRequest';\nimport FactoryMaker from '../core/FactoryMaker';\nimport {\n replaceIDForTemplate,\n unescapeDollarsInTemplate,\n replaceTokenForTemplate,\n getTimeBasedSegment\n} from './utils/SegmentsUtils';\n\nimport SegmentsController from './controllers/SegmentsController';\n\nfunction DashHandler(config) {\n\n config = config || {};\n const context = this.context;\n\n const eventBus = config.eventBus;\n const events = config.events;\n const debug = config.debug;\n const dashConstants = config.dashConstants;\n const urlUtils = config.urlUtils;\n const type = config.type;\n const streamInfo = config.streamInfo;\n\n const timelineConverter = config.timelineConverter;\n const dashMetrics = config.dashMetrics;\n const baseURLController = config.baseURLController;\n\n let instance,\n logger,\n segmentIndex,\n lastSegment,\n requestedTime,\n currentTime,\n isDynamicManifest,\n dynamicStreamCompleted,\n selectedMimeType,\n segmentsController;\n\n function setup() {\n logger = debug.getLogger(instance);\n resetInitialSettings();\n\n segmentsController = SegmentsController(context).create(config);\n\n eventBus.on(events.INITIALIZATION_LOADED, onInitializationLoaded, instance);\n eventBus.on(events.SEGMENTS_LOADED, onSegmentsLoaded, instance);\n eventBus.on(events.REPRESENTATION_UPDATE_STARTED, onRepresentationUpdateStarted, instance);\n eventBus.on(events.DYNAMIC_STREAM_COMPLETED, onDynamicStreamCompleted, instance);\n }\n\n function initialize(isDynamic) {\n isDynamicManifest = isDynamic;\n dynamicStreamCompleted = false;\n segmentsController.initialize(isDynamic);\n }\n\n function getType() {\n return type;\n }\n\n function getStreamInfo() {\n return streamInfo;\n }\n\n function setCurrentTime(value) {\n currentTime = value;\n }\n\n function getCurrentTime() {\n return currentTime;\n }\n\n function setCurrentIndex (value) {\n segmentIndex = value;\n }\n\n function getCurrentIndex () {\n return segmentIndex;\n }\n\n function resetIndex() {\n segmentIndex = -1;\n lastSegment = null;\n }\n\n function resetInitialSettings() {\n resetIndex();\n currentTime = 0;\n requestedTime = null;\n segmentsController = null;\n selectedMimeType = null;\n }\n\n function reset() {\n resetInitialSettings();\n\n eventBus.off(events.INITIALIZATION_LOADED, onInitializationLoaded, instance);\n eventBus.off(events.SEGMENTS_LOADED, onSegmentsLoaded, instance);\n eventBus.off(events.REPRESENTATION_UPDATE_STARTED, onRepresentationUpdateStarted, instance);\n eventBus.off(events.DYNAMIC_STREAM_COMPLETED, onDynamicStreamCompleted, instance);\n }\n\n function setRequestUrl(request, destination, representation) {\n const baseURL = baseURLController.resolve(representation.path);\n let url,\n serviceLocation;\n\n if (!baseURL || (destination === baseURL.url) || (!urlUtils.isRelative(destination))) {\n url = destination;\n } else {\n url = baseURL.url;\n serviceLocation = baseURL.serviceLocation;\n\n if (destination) {\n url = urlUtils.resolve(destination, url);\n }\n }\n\n if (urlUtils.isRelative(url)) {\n return false;\n }\n\n request.url = url;\n request.serviceLocation = serviceLocation;\n\n return true;\n }\n\n function generateInitRequest(mediaInfo, representation, mediaType) {\n const request = new FragmentRequest();\n const period = representation.adaptation.period;\n const presentationStartTime = period.start;\n\n request.mediaType = mediaType;\n request.type = HTTPRequest.INIT_SEGMENT_TYPE;\n request.range = representation.range;\n request.availabilityStartTime = timelineConverter.calcAvailabilityStartTimeFromPresentationTime(presentationStartTime, period.mpd, isDynamicManifest);\n request.availabilityEndTime = timelineConverter.calcAvailabilityEndTimeFromPresentationTime(presentationStartTime + period.duration, period.mpd, isDynamicManifest);\n request.quality = representation.index;\n request.mediaInfo = mediaInfo;\n request.representationId = representation.id;\n\n if (setRequestUrl(request, representation.initialization, representation)) {\n request.url = replaceTokenForTemplate(request.url, 'Bandwidth', representation.bandwidth);\n return request;\n }\n }\n\n function getInitRequest(mediaInfo, representation) {\n if (!representation) return null;\n const request = generateInitRequest(mediaInfo, representation, getType());\n return request;\n }\n\n function setMimeType(newMimeType) {\n selectedMimeType = newMimeType;\n }\n\n function setExpectedLiveEdge(liveEdge) {\n timelineConverter.setExpectedLiveEdge(liveEdge);\n dashMetrics.updateManifestUpdateInfo({presentationStartTime: liveEdge});\n }\n\n function onRepresentationUpdateStarted(eventObj) {\n if (eventObj.sender.getType() !== getType()) return;\n\n processRepresentation(eventObj.representation);\n }\n\n function processRepresentation(voRepresentation) {\n const hasInitialization = voRepresentation.hasInitialization();\n const hasSegments = voRepresentation.hasSegments();\n\n //if representation has initialization and segments information, REPRESENTATION_UPDATE_COMPLETED can be triggered immediately\n //otherwise, it means that a request has to be made to get initialization and/or segments informations\n if (hasInitialization && hasSegments) {\n eventBus.trigger(events.REPRESENTATION_UPDATE_COMPLETED, {sender: instance, representation: voRepresentation});\n } else {\n segmentsController.update(voRepresentation, getType(), selectedMimeType, hasInitialization, hasSegments);\n }\n }\n\n function getRequestForSegment(mediaInfo, segment) {\n if (segment === null || segment === undefined) {\n return null;\n }\n\n const request = new FragmentRequest();\n const representation = segment.representation;\n const bandwidth = representation.adaptation.period.mpd.manifest.Period_asArray[representation.adaptation.period.index].\n AdaptationSet_asArray[representation.adaptation.index].Representation_asArray[representation.index].bandwidth;\n let url = segment.media;\n\n url = replaceTokenForTemplate(url, 'Number', segment.replacementNumber);\n url = replaceTokenForTemplate(url, 'Time', segment.replacementTime);\n url = replaceTokenForTemplate(url, 'Bandwidth', bandwidth);\n url = replaceIDForTemplate(url, representation.id);\n url = unescapeDollarsInTemplate(url);\n\n request.mediaType = getType();\n request.type = HTTPRequest.MEDIA_SEGMENT_TYPE;\n request.range = segment.mediaRange;\n request.startTime = segment.presentationStartTime;\n request.duration = segment.duration;\n request.timescale = representation.timescale;\n request.availabilityStartTime = segment.availabilityStartTime;\n request.availabilityEndTime = segment.availabilityEndTime;\n request.wallStartTime = segment.wallStartTime;\n request.quality = representation.index;\n request.index = segment.availabilityIdx;\n request.mediaInfo = mediaInfo;\n request.adaptationIndex = representation.adaptation.index;\n request.representationId = representation.id;\n\n if (setRequestUrl(request, url, representation)) {\n return request;\n }\n }\n\n function isMediaFinished(representation) {\n let isFinished = false;\n\n if (!representation) return isFinished;\n\n if (!isDynamicManifest) {\n if (segmentIndex >= representation.availableSegmentsNumber) {\n isFinished = true;\n }\n } else {\n if (dynamicStreamCompleted) {\n isFinished = true;\n } else if (lastSegment) {\n const time = parseFloat((lastSegment.presentationStartTime - representation.adaptation.period.start).toFixed(5));\n const endTime = lastSegment.duration > 0 ? time + 1.5 * lastSegment.duration : time;\n const duration = representation.adaptation.period.duration;\n\n isFinished = endTime >= duration;\n }\n }\n\n return isFinished;\n }\n\n function getSegmentRequestForTime(mediaInfo, representation, time, options) {\n let request = null;\n\n if (!representation || !representation.segmentInfoType) {\n return request;\n }\n\n const idx = segmentIndex;\n const keepIdx = options ? options.keepIdx : false;\n const ignoreIsFinished = (options && options.ignoreIsFinished) ? true : false;\n\n if (requestedTime !== time) { // When playing at live edge with 0 delay we may loop back with same time and index until it is available. Reduces verboseness of logs.\n requestedTime = time;\n logger.debug('Getting the request for time : ' + time);\n }\n\n const segment = segmentsController.getSegmentByTime(representation, time);\n if (segment) {\n segmentIndex = segment.availabilityIdx;\n lastSegment = segment;\n logger.debug('Index for time ' + time + ' is ' + segmentIndex);\n request = getRequestForSegment(mediaInfo, segment);\n } else {\n const finished = !ignoreIsFinished ? isMediaFinished(representation) : false;\n if (finished) {\n request = new FragmentRequest();\n request.action = FragmentRequest.ACTION_COMPLETE;\n request.index = segmentIndex - 1;\n request.mediaType = type;\n request.mediaInfo = mediaInfo;\n logger.debug('Signal complete in getSegmentRequestForTime');\n }\n }\n\n if (keepIdx && idx >= 0) {\n segmentIndex = representation.segmentInfoType === dashConstants.SEGMENT_TIMELINE && isDynamicManifest ? segmentIndex : idx;\n }\n\n return request;\n }\n\n function getNextSegmentRequest(mediaInfo, representation) {\n let request = null;\n\n if (!representation || !representation.segmentInfoType) {\n return null;\n }\n\n requestedTime = null;\n\n const indexToRequest = segmentIndex + 1;\n logger.debug('Getting the next request at index: ' + indexToRequest);\n\n // check that there is a segment in this index\n const segment = segmentsController.getSegmentByIndex(representation, indexToRequest, lastSegment ? lastSegment.mediaStartTime : -1);\n if (!segment && isEndlessMedia(representation) && !dynamicStreamCompleted) {\n logger.debug('No segment found at index: ' + indexToRequest + '. Wait for next loop');\n return null;\n } else {\n if (segment) {\n request = getRequestForSegment(mediaInfo, segment);\n segmentIndex = segment.availabilityIdx;\n } else {\n if (isDynamicManifest) {\n segmentIndex = indexToRequest - 1;\n } else {\n segmentIndex = indexToRequest;\n }\n }\n }\n\n if (segment) {\n lastSegment = segment;\n } else {\n const finished = isMediaFinished(representation, segment);\n if (finished) {\n request = new FragmentRequest();\n request.action = FragmentRequest.ACTION_COMPLETE;\n request.index = segmentIndex - 1;\n request.mediaType = getType();\n request.mediaInfo = mediaInfo;\n logger.debug('Signal complete');\n }\n }\n\n return request;\n }\n\n function isEndlessMedia(representation) {\n return !isFinite(representation.adaptation.period.duration);\n }\n\n function onInitializationLoaded(e) {\n const representation = e.representation;\n if (!representation.segments) return;\n\n eventBus.trigger(events.REPRESENTATION_UPDATE_COMPLETED, {sender: this, representation: representation});\n }\n\n function onSegmentsLoaded(e) {\n if (e.error || (getType() !== e.mediaType)) return;\n\n const fragments = e.segments;\n const representation = e.representation;\n const segments = [];\n let count = 0;\n\n let i,\n len,\n s,\n seg;\n\n for (i = 0, len = fragments ? fragments.length : 0; i < len; i++) {\n s = fragments[i];\n\n seg = getTimeBasedSegment(\n timelineConverter,\n isDynamicManifest,\n representation,\n s.startTime,\n s.duration,\n s.timescale,\n s.media,\n s.mediaRange,\n count);\n\n if (seg) {\n segments.push(seg);\n seg = null;\n count++;\n }\n }\n\n if (segments.length > 0) {\n representation.segmentAvailabilityRange = {start: segments[0].presentationStartTime, end: segments[segments.length - 1].presentationStartTime};\n representation.availableSegmentsNumber = segments.length;\n representation.segments = segments;\n\n if (isDynamicManifest) {\n const lastSegment = segments[segments.length - 1];\n const liveEdge = lastSegment.presentationStartTime - 8;\n // the last segment is the Expected, not calculated, live edge.\n setExpectedLiveEdge(liveEdge);\n }\n }\n\n if (!representation.hasInitialization()) {\n return;\n }\n\n eventBus.trigger(events.REPRESENTATION_UPDATE_COMPLETED, {sender: this, representation: representation});\n }\n\n function onDynamicStreamCompleted() {\n logger.debug('Dynamic stream complete');\n dynamicStreamCompleted = true;\n }\n\n instance = {\n initialize: initialize,\n getType: getType, //need to be public in order to be used by logger\n getStreamInfo: getStreamInfo,\n getInitRequest: getInitRequest,\n getRequestForSegment: getRequestForSegment,\n getSegmentRequestForTime: getSegmentRequestForTime,\n getNextSegmentRequest: getNextSegmentRequest,\n setCurrentTime: setCurrentTime,\n getCurrentTime: getCurrentTime,\n setCurrentIndex: setCurrentIndex,\n getCurrentIndex: getCurrentIndex,\n isMediaFinished: isMediaFinished,\n reset: reset,\n resetIndex: resetIndex,\n setMimeType: setMimeType\n };\n\n setup();\n\n return instance;\n}\n\nDashHandler.__dashjs_factory_name = 'DashHandler';\nexport default FactoryMaker.getClassFactory(DashHandler);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Dash constants declaration\n * @class\n * @ignore\n */\nclass DashConstants {\n\n init() {\n this.BASE_URL = 'BaseURL';\n this.SEGMENT_BASE = 'SegmentBase';\n this.SEGMENT_TEMPLATE = 'SegmentTemplate';\n this.SEGMENT_LIST = 'SegmentList';\n this.SEGMENT_URL = 'SegmentURL';\n this.SEGMENT_TIMELINE = 'SegmentTimeline';\n this.SEGMENT_PROFILES = 'segmentProfiles';\n this.ADAPTATION_SET = 'AdaptationSet';\n this.REPRESENTATION = 'Representation';\n this.REPRESENTATION_INDEX = 'RepresentationIndex';\n this.SUB_REPRESENTATION = 'SubRepresentation';\n this.INITIALIZATION = 'Initialization';\n this.INITIALIZATION_MINUS = 'initialization';\n this.MPD = 'MPD';\n this.PERIOD = 'Period';\n this.ASSET_IDENTIFIER = 'AssetIdentifier';\n this.EVENT_STREAM = 'EventStream';\n this.ID = 'id';\n this.PROFILES = 'profiles';\n this.SERVICE_LOCATION = 'serviceLocation';\n this.RANGE = 'range';\n this.INDEX = 'index';\n this.MEDIA = 'media';\n this.BYTE_RANGE = 'byteRange';\n this.INDEX_RANGE = 'indexRange';\n this.MEDIA_RANGE = 'mediaRange';\n this.VALUE = 'value';\n this.CONTENT_TYPE = 'contentType';\n this.MIME_TYPE = 'mimeType';\n this.BITSTREAM_SWITCHING = 'BitstreamSwitching';\n this.BITSTREAM_SWITCHING_MINUS = 'bitstreamSwitching';\n this.CODECS = 'codecs';\n this.DEPENDENCY_ID = 'dependencyId';\n this.MEDIA_STREAM_STRUCTURE_ID = 'mediaStreamStructureId';\n this.METRICS = 'Metrics';\n this.METRICS_MINUS = 'metrics';\n this.REPORTING = 'Reporting';\n this.WIDTH = 'width';\n this.HEIGHT = 'height';\n this.SAR = 'sar';\n this.FRAMERATE = 'frameRate';\n this.AUDIO_SAMPLING_RATE = 'audioSamplingRate';\n this.MAXIMUM_SAP_PERIOD = 'maximumSAPPeriod';\n this.START_WITH_SAP = 'startWithSAP';\n this.MAX_PLAYOUT_RATE = 'maxPlayoutRate';\n this.CODING_DEPENDENCY = 'codingDependency';\n this.SCAN_TYPE = 'scanType';\n this.FRAME_PACKING = 'FramePacking';\n this.AUDIO_CHANNEL_CONFIGURATION = 'AudioChannelConfiguration';\n this.CONTENT_PROTECTION = 'ContentProtection';\n this.ESSENTIAL_PROPERTY = 'EssentialProperty';\n this.SUPPLEMENTAL_PROPERTY = 'SupplementalProperty';\n this.INBAND_EVENT_STREAM = 'InbandEventStream';\n this.ACCESSIBILITY = 'Accessibility';\n this.ROLE = 'Role';\n this.RATING = 'Rating';\n this.CONTENT_COMPONENT = 'ContentComponent';\n this.SUBSET = 'Subset';\n this.LANG = 'lang';\n this.VIEWPOINT = 'Viewpoint';\n this.ROLE_ASARRAY = 'Role_asArray';\n this.ACCESSIBILITY_ASARRAY = 'Accessibility_asArray';\n this.AUDIOCHANNELCONFIGURATION_ASARRAY = 'AudioChannelConfiguration_asArray';\n this.CONTENTPROTECTION_ASARRAY = 'ContentProtection_asArray';\n this.MAIN = 'main';\n this.DYNAMIC = 'dynamic';\n this.STATIC = 'static';\n this.MEDIA_PRESENTATION_DURATION = 'mediaPresentationDuration';\n this.MINIMUM_UPDATE_PERIOD = 'minimumUpdatePeriod';\n this.CODEC_PRIVATE_DATA = 'codecPrivateData';\n this.BANDWITH = 'bandwidth';\n this.SOURCE_URL = 'sourceURL';\n this.TIMESCALE = 'timescale';\n this.DURATION = 'duration';\n this.START_NUMBER = 'startNumber';\n this.PRESENTATION_TIME_OFFSET = 'presentationTimeOffset';\n this.AVAILABILITY_START_TIME = 'availabilityStartTime';\n this.AVAILABILITY_END_TIME = 'availabilityEndTime';\n this.TIMESHIFT_BUFFER_DEPTH = 'timeShiftBufferDepth';\n this.MAX_SEGMENT_DURATION = 'maxSegmentDuration';\n this.PRESENTATION_TIME = 'presentationTime';\n this.MIN_BUFFER_TIME = 'minBufferTime';\n this.MAX_SUBSEGMENT_DURATION = 'maxSubsegmentDuration';\n this.START = 'start';\n this.AVAILABILITY_TIME_OFFSET = 'availabilityTimeOffset';\n this.AVAILABILITY_TIME_COMPLETE = 'availabilityTimeComplete';\n this.CENC_DEFAULT_KID = 'cenc:default_KID';\n this.DVB_PRIORITY = 'dvb:priority';\n this.DVB_WEIGHT = 'dvb:weight';\n this.SUGGESTED_PRESENTATION_DELAY = 'suggestedPresentationDelay';\n this.SERVICE_DESCRIPTION = 'ServiceDescription';\n this.SERVICE_DESCRIPTION_SCOPE = 'Scope';\n this.SERVICE_DESCRIPTION_LATENCY = 'Latency';\n this.SERVICE_DESCRIPTION_PLAYBACK_RATE = 'PlaybackRate';\n }\n\n constructor () {\n this.init();\n }\n}\n\nlet constants = new DashConstants();\nexport default constants;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../../streaming/constants/Constants';\nimport DashJSError from '../../streaming/vo/DashJSError';\nimport FactoryMaker from '../../core/FactoryMaker';\n\nfunction RepresentationController(config) {\n\n config = config || {};\n const eventBus = config.eventBus;\n const events = config.events;\n const errors = config.errors;\n const abrController = config.abrController;\n const dashMetrics = config.dashMetrics;\n const playbackController = config.playbackController;\n const timelineConverter = config.timelineConverter;\n const type = config.type;\n const streamId = config.streamId;\n const dashConstants = config.dashConstants;\n\n let instance,\n realAdaptation,\n updating,\n voAvailableRepresentations,\n currentVoRepresentation;\n\n function setup() {\n resetInitialSettings();\n\n eventBus.on(events.QUALITY_CHANGE_REQUESTED, onQualityChanged, instance);\n eventBus.on(events.REPRESENTATION_UPDATE_COMPLETED, onRepresentationUpdated, instance);\n eventBus.on(events.WALLCLOCK_TIME_UPDATED, onWallclockTimeUpdated, instance);\n eventBus.on(events.MANIFEST_VALIDITY_CHANGED, onManifestValidityChanged, instance);\n }\n\n function checkConfig() {\n if (!abrController || !dashMetrics || !playbackController || !timelineConverter) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function getData() {\n return realAdaptation;\n }\n\n function isUpdating() {\n return updating;\n }\n\n function getCurrentRepresentation() {\n return currentVoRepresentation;\n }\n\n function resetInitialSettings() {\n realAdaptation = null;\n updating = true;\n voAvailableRepresentations = [];\n }\n\n function reset() {\n\n eventBus.off(events.QUALITY_CHANGE_REQUESTED, onQualityChanged, instance);\n eventBus.off(events.REPRESENTATION_UPDATE_COMPLETED, onRepresentationUpdated, instance);\n eventBus.off(events.WALLCLOCK_TIME_UPDATED, onWallclockTimeUpdated, instance);\n eventBus.off(events.MANIFEST_VALIDITY_CHANGED, onManifestValidityChanged, instance);\n\n resetInitialSettings();\n }\n\n function getType() {\n return type;\n }\n\n function getStreamId() {\n return streamId;\n }\n\n function updateData(newRealAdaptation, availableRepresentations, type, quality) {\n checkConfig();\n\n startDataUpdate();\n\n voAvailableRepresentations = availableRepresentations;\n\n currentVoRepresentation = getRepresentationForQuality(quality);\n realAdaptation = newRealAdaptation;\n\n if (type !== Constants.VIDEO && type !== Constants.AUDIO && type !== Constants.FRAGMENTED_TEXT) {\n endDataUpdate();\n return;\n }\n\n updateAvailabilityWindow(playbackController.getIsDynamic(), true);\n }\n\n function addRepresentationSwitch() {\n checkConfig();\n const now = new Date();\n const currentRepresentation = getCurrentRepresentation();\n const currentVideoTimeMs = playbackController.getTime() * 1000;\n if (currentRepresentation) {\n dashMetrics.addRepresentationSwitch(currentRepresentation.adaptation.type, now, currentVideoTimeMs, currentRepresentation.id);\n }\n }\n\n function getRepresentationForQuality(quality) {\n return quality === null || quality === undefined || quality >= voAvailableRepresentations.length ? null : voAvailableRepresentations[quality];\n }\n\n function getQualityForRepresentation(voRepresentation) {\n return voAvailableRepresentations.indexOf(voRepresentation);\n }\n\n function isAllRepresentationsUpdated() {\n for (let i = 0, ln = voAvailableRepresentations.length; i < ln; i++) {\n let segmentInfoType = voAvailableRepresentations[i].segmentInfoType;\n if (voAvailableRepresentations[i].segmentAvailabilityRange === null || !voAvailableRepresentations[i].hasInitialization() ||\n ((segmentInfoType === dashConstants.SEGMENT_BASE || segmentInfoType === dashConstants.BASE_URL) && !voAvailableRepresentations[i].segments)\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n function setExpectedLiveEdge(liveEdge) {\n timelineConverter.setExpectedLiveEdge(liveEdge);\n dashMetrics.updateManifestUpdateInfo({presentationStartTime: liveEdge});\n }\n\n function updateRepresentation(representation, isDynamic) {\n representation.segmentAvailabilityRange = timelineConverter.calcSegmentAvailabilityRange(representation, isDynamic);\n\n if ((representation.segmentAvailabilityRange.end < representation.segmentAvailabilityRange.start) && !representation.useCalculatedLiveEdgeTime) {\n let error = new DashJSError(errors.SEGMENTS_UNAVAILABLE_ERROR_CODE, errors.SEGMENTS_UNAVAILABLE_ERROR_MESSAGE, {availabilityDelay: representation.segmentAvailabilityRange.start - representation.segmentAvailabilityRange.end});\n endDataUpdate(error);\n return;\n }\n\n if (isDynamic) {\n setExpectedLiveEdge(representation.segmentAvailabilityRange.end);\n }\n }\n\n function updateAvailabilityWindow(isDynamic, notifyUpdate) {\n checkConfig();\n\n for (let i = 0, ln = voAvailableRepresentations.length; i < ln; i++) {\n updateRepresentation(voAvailableRepresentations[i], isDynamic);\n if (notifyUpdate) {\n eventBus.trigger(events.REPRESENTATION_UPDATE_STARTED, {\n sender: instance,\n representation: voAvailableRepresentations[i]\n });\n }\n }\n }\n\n function resetAvailabilityWindow() {\n voAvailableRepresentations.forEach(rep => {\n rep.segmentAvailabilityRange = null;\n });\n }\n\n function startDataUpdate() {\n updating = true;\n eventBus.trigger(events.DATA_UPDATE_STARTED, {sender: instance});\n }\n\n function endDataUpdate(error) {\n updating = false;\n let eventArg = {sender: instance, data: realAdaptation, currentRepresentation: currentVoRepresentation};\n if (error) {\n eventArg.error = error;\n }\n eventBus.trigger(events.DATA_UPDATE_COMPLETED, eventArg);\n }\n\n function postponeUpdate(postponeTimePeriod) {\n let delay = postponeTimePeriod;\n let update = function () {\n if (isUpdating()) return;\n\n startDataUpdate();\n\n // clear the segmentAvailabilityRange for all reps.\n // this ensures all are updated before the live edge search starts\n resetAvailabilityWindow();\n\n updateAvailabilityWindow(playbackController.getIsDynamic(), true);\n };\n eventBus.trigger(events.AST_IN_FUTURE, {delay: delay});\n setTimeout(update, delay);\n }\n\n function onRepresentationUpdated(e) {\n if (e.sender.getType() !== getType() || e.sender.getStreamInfo().id !== streamId || !isUpdating()) return;\n\n if (e.error) {\n endDataUpdate(e.error);\n return;\n }\n\n let streamInfo = e.sender.getStreamInfo();\n let r = e.representation;\n let manifestUpdateInfo = dashMetrics.getCurrentManifestUpdate();\n let alreadyAdded = false;\n let postponeTimePeriod = 0;\n let repInfo,\n err,\n repSwitch;\n\n if (r.adaptation.period.mpd.manifest.type === dashConstants.DYNAMIC && !r.adaptation.period.mpd.manifest.ignorePostponeTimePeriod) {\n // We must put things to sleep unless till e.g. the startTime calculation in ScheduleController.onLiveEdgeSearchCompleted fall after the segmentAvailabilityRange.start\n postponeTimePeriod = getRepresentationUpdatePostponeTimePeriod(r, streamInfo);\n }\n\n if (postponeTimePeriod > 0) {\n postponeUpdate(postponeTimePeriod);\n err = new DashJSError(errors.SEGMENTS_UPDATE_FAILED_ERROR_CODE, errors.SEGMENTS_UPDATE_FAILED_ERROR_MESSAGE);\n endDataUpdate(err);\n return;\n }\n\n if (manifestUpdateInfo) {\n for (let i = 0; i < manifestUpdateInfo.representationInfo.length; i++) {\n repInfo = manifestUpdateInfo.representationInfo[i];\n if (repInfo.index === r.index && repInfo.mediaType === getType()) {\n alreadyAdded = true;\n break;\n }\n }\n\n if (!alreadyAdded) {\n dashMetrics.addManifestUpdateRepresentationInfo(r, getType());\n }\n }\n\n if (isAllRepresentationsUpdated()) {\n abrController.setPlaybackQuality(getType(), streamInfo, getQualityForRepresentation(currentVoRepresentation));\n dashMetrics.updateManifestUpdateInfo({latency: currentVoRepresentation.segmentAvailabilityRange.end - playbackController.getTime()});\n\n repSwitch = dashMetrics.getCurrentRepresentationSwitch(getCurrentRepresentation().adaptation.type);\n\n if (!repSwitch) {\n addRepresentationSwitch();\n }\n endDataUpdate();\n }\n }\n\n function getRepresentationUpdatePostponeTimePeriod(representation, streamInfo) {\n try {\n const streamController = playbackController.getStreamController();\n const activeStreamInfo = streamController.getActiveStreamInfo();\n let startTimeAnchor = representation.segmentAvailabilityRange.start;\n\n if (activeStreamInfo && activeStreamInfo.id && activeStreamInfo.id !== streamInfo.id) {\n // We need to consider the currently playing period if a period switch is performed.\n startTimeAnchor = Math.min(playbackController.getTime(), startTimeAnchor);\n }\n\n let segmentAvailabilityTimePeriod = representation.segmentAvailabilityRange.end - startTimeAnchor;\n let liveDelay = playbackController.getLiveDelay();\n\n return (liveDelay - segmentAvailabilityTimePeriod) * 1000;\n } catch (e) {\n return 0;\n }\n }\n\n function onWallclockTimeUpdated(e) {\n if (e.isDynamic) {\n updateAvailabilityWindow(e.isDynamic);\n }\n }\n\n function onQualityChanged(e) {\n if (e.mediaType !== getType() || streamId !== e.streamInfo.id) return;\n\n currentVoRepresentation = getRepresentationForQuality(e.newQuality);\n addRepresentationSwitch();\n }\n\n function onManifestValidityChanged(e) {\n if (e.newDuration) {\n const representation = getCurrentRepresentation();\n if (representation && representation.adaptation.period) {\n const period = representation.adaptation.period;\n period.duration = e.newDuration;\n }\n }\n }\n\n instance = {\n getData: getData,\n isUpdating: isUpdating,\n updateData: updateData,\n updateRepresentation: updateRepresentation,\n getCurrentRepresentation: getCurrentRepresentation,\n getRepresentationForQuality: getRepresentationForQuality,\n getType: getType,\n getStreamId: getStreamId,\n reset: reset\n };\n\n setup();\n return instance;\n}\n\nRepresentationController.__dashjs_factory_name = 'RepresentationController';\nexport default FactoryMaker.getClassFactory(RepresentationController);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker';\nimport TimelineSegmentsGetter from '../utils/TimelineSegmentsGetter';\nimport TemplateSegmentsGetter from '../utils/TemplateSegmentsGetter';\nimport ListSegmentsGetter from '../utils/ListSegmentsGetter';\nimport SegmentBaseGetter from '../utils/SegmentBaseGetter';\n\nfunction SegmentsController(config) {\n config = config || {};\n\n const context = this.context;\n const events = config.events;\n const eventBus = config.eventBus;\n const dashConstants = config.dashConstants;\n\n let instance,\n getters;\n\n function setup() {\n getters = {};\n }\n\n function initialize(isDynamic) {\n getters[dashConstants.SEGMENT_TIMELINE] = TimelineSegmentsGetter(context).create(config, isDynamic);\n getters[dashConstants.SEGMENT_TEMPLATE] = TemplateSegmentsGetter(context).create(config, isDynamic);\n getters[dashConstants.SEGMENT_LIST] = ListSegmentsGetter(context).create(config, isDynamic);\n getters[dashConstants.SEGMENT_BASE] = SegmentBaseGetter(context).create(config, isDynamic);\n }\n\n function update(voRepresentation, type, mimeType, hasInitialization, hasSegments) {\n if (!hasInitialization) {\n eventBus.trigger(events.SEGMENTBASE_INIT_REQUEST_NEEDED, {mimeType: mimeType, representation: voRepresentation});\n }\n\n if (!hasSegments) {\n eventBus.trigger(events.SEGMENTBASE_SEGMENTSLIST_REQUEST_NEEDED, {mimeType: mimeType, mediaType: type, representation: voRepresentation});\n }\n }\n\n function getSegmentsGetter(representation) {\n return representation ? representation.segments ? getters[dashConstants.SEGMENT_BASE] : getters[representation.segmentInfoType] : null;\n }\n\n function getSegmentByIndex(representation, index, lastSegmentTime) {\n const getter = getSegmentsGetter(representation);\n return getter ? getter.getSegmentByIndex(representation, index, lastSegmentTime) : null;\n }\n\n function getSegmentByTime(representation, time) {\n const getter = getSegmentsGetter(representation);\n return getter ? getter.getSegmentByTime(representation, time) : null;\n }\n\n instance = {\n initialize: initialize,\n update: update,\n getSegmentByIndex: getSegmentByIndex,\n getSegmentByTime: getSegmentByTime\n };\n\n setup();\n\n return instance;\n}\n\nSegmentsController.__dashjs_factory_name = 'SegmentsController';\nconst factory = FactoryMaker.getClassFactory(SegmentsController);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../../streaming/constants/Constants';\nimport DashConstants from '../constants/DashConstants';\nimport Representation from '../vo/Representation';\nimport AdaptationSet from '../vo/AdaptationSet';\nimport Period from '../vo/Period';\nimport Mpd from '../vo/Mpd';\nimport UTCTiming from '../vo/UTCTiming';\nimport Event from '../vo/Event';\nimport BaseURL from '../vo/BaseURL';\nimport EventStream from '../vo/EventStream';\nimport ObjectUtils from '../../streaming/utils/ObjectUtils';\nimport URLUtils from '../../streaming/utils/URLUtils';\nimport FactoryMaker from '../../core/FactoryMaker';\nimport Debug from '../../core/Debug';\nimport DashJSError from '../../streaming/vo/DashJSError';\nimport Errors from '../../core/errors/Errors';\nimport { THUMBNAILS_SCHEME_ID_URIS } from '../../streaming/thumbnail/ThumbnailTracks';\n\nfunction DashManifestModel() {\n let instance,\n logger,\n errHandler,\n BASE64;\n\n const context = this.context;\n const urlUtils = URLUtils(context).getInstance();\n\n const isInteger = Number.isInteger || function (value) {\n return typeof value === 'number' &&\n isFinite(value) &&\n Math.floor(value) === value;\n };\n\n function setup () {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function getIsTypeOf(adaptation, type) {\n\n let i,\n len,\n representation,\n col,\n mimeTypeRegEx,\n codecs;\n let result = false;\n let found = false;\n\n if (!adaptation) {\n throw new Error('adaptation is not defined');\n }\n\n if (!type) {\n throw new Error('type is not defined');\n }\n\n if (adaptation.hasOwnProperty('ContentComponent_asArray')) {\n col = adaptation.ContentComponent_asArray;\n }\n\n mimeTypeRegEx = (type !== Constants.TEXT) ? new RegExp(type) : new RegExp('(vtt|ttml)');\n\n if (adaptation.Representation_asArray && adaptation.Representation_asArray.length && adaptation.Representation_asArray.length > 0) {\n let essentialProperties = getEssentialPropertiesForRepresentation(adaptation.Representation_asArray[0]);\n if (essentialProperties && essentialProperties.length > 0 && THUMBNAILS_SCHEME_ID_URIS.indexOf(essentialProperties[0].schemeIdUri) >= 0) {\n return type === Constants.IMAGE;\n }\n if (adaptation.Representation_asArray[0].hasOwnProperty(DashConstants.CODECS)) {\n // Just check the start of the codecs string\n codecs = adaptation.Representation_asArray[0].codecs;\n if (codecs.search(Constants.STPP) === 0 || codecs.search(Constants.WVTT) === 0) {\n return type === Constants.FRAGMENTED_TEXT;\n }\n }\n }\n\n if (col) {\n if (col.length > 1) {\n return (type === Constants.MUXED);\n } else if (col[0] && col[0].contentType === type) {\n result = true;\n found = true;\n }\n }\n\n if (adaptation.hasOwnProperty(DashConstants.MIME_TYPE)) {\n result = mimeTypeRegEx.test(adaptation.mimeType);\n found = true;\n }\n\n // couldn't find on adaptationset, so check a representation\n if (!found) {\n i = 0;\n len = adaptation.Representation_asArray && adaptation.Representation_asArray.length ? adaptation.Representation_asArray.length : 0;\n while (!found && i < len) {\n representation = adaptation.Representation_asArray[i];\n\n if (representation.hasOwnProperty(DashConstants.MIME_TYPE)) {\n result = mimeTypeRegEx.test(representation.mimeType);\n found = true;\n }\n\n i++;\n }\n }\n\n return result;\n }\n\n function getIsAudio(adaptation) {\n return getIsTypeOf(adaptation, Constants.AUDIO);\n }\n\n function getIsVideo(adaptation) {\n return getIsTypeOf(adaptation, Constants.VIDEO);\n }\n\n function getIsFragmentedText(adaptation) {\n return getIsTypeOf(adaptation, Constants.FRAGMENTED_TEXT);\n }\n\n function getIsMuxed(adaptation) {\n return getIsTypeOf(adaptation, Constants.MUXED);\n }\n\n function getIsImage(adaptation) {\n return getIsTypeOf(adaptation, Constants.IMAGE);\n }\n\n function getIsTextTrack(type) {\n return (type === 'text/vtt' || type === 'application/ttml+xml');\n }\n\n function getLanguageForAdaptation(adaptation) {\n let lang = '';\n\n if (adaptation && adaptation.hasOwnProperty(DashConstants.LANG)) {\n //Filter out any other characters not allowed according to RFC5646\n lang = adaptation.lang.replace(/[^A-Za-z0-9-]/g, '');\n }\n\n return lang;\n }\n\n function getViewpointForAdaptation(adaptation) {\n return adaptation && adaptation.hasOwnProperty(DashConstants.VIEWPOINT) ? adaptation.Viewpoint : null;\n }\n\n function getRolesForAdaptation(adaptation) {\n return adaptation && adaptation.hasOwnProperty(DashConstants.ROLE_ASARRAY) ? adaptation.Role_asArray : [];\n }\n\n function getAccessibilityForAdaptation(adaptation) {\n return adaptation && adaptation.hasOwnProperty(DashConstants.ACCESSIBILITY_ASARRAY) ? adaptation.Accessibility_asArray : [];\n }\n\n function getAudioChannelConfigurationForAdaptation(adaptation) {\n return adaptation && adaptation.hasOwnProperty(DashConstants.AUDIOCHANNELCONFIGURATION_ASARRAY) ? adaptation.AudioChannelConfiguration_asArray : [];\n }\n\n function getAudioChannelConfigurationForRepresentation(representation) {\n return representation && representation.hasOwnProperty(DashConstants.AUDIOCHANNELCONFIGURATION_ASARRAY) ? representation.AudioChannelConfiguration_asArray : [];\n }\n\n function getRepresentationSortFunction() {\n return (a, b) => a.bandwidth - b.bandwidth;\n }\n\n function processAdaptation(realAdaptation) {\n if (realAdaptation && Array.isArray(realAdaptation.Representation_asArray)) {\n realAdaptation.Representation_asArray.sort(getRepresentationSortFunction());\n }\n\n return realAdaptation;\n }\n\n function getRealAdaptations(manifest, periodIndex) {\n return manifest && manifest.Period_asArray && isInteger(periodIndex) ? manifest.Period_asArray[periodIndex] ? manifest.Period_asArray[periodIndex].AdaptationSet_asArray : [] : [];\n }\n\n function getAdaptationForId(id, manifest, periodIndex) {\n const realAdaptations = getRealAdaptations(manifest, periodIndex);\n let i,\n len;\n\n for (i = 0, len = realAdaptations.length; i < len; i++) {\n if (realAdaptations[i].hasOwnProperty(DashConstants.ID) && realAdaptations[i].id === id) {\n return realAdaptations[i];\n }\n }\n\n return null;\n }\n\n function getAdaptationForIndex(index, manifest, periodIndex) {\n const realAdaptations = getRealAdaptations(manifest, periodIndex);\n if (realAdaptations.length > 0 && isInteger(index)) {\n return realAdaptations[index];\n } else {\n return null;\n }\n }\n\n function getIndexForAdaptation(realAdaptation, manifest, periodIndex) {\n if (!realAdaptation) {\n return -1;\n }\n\n const realAdaptations = getRealAdaptations(manifest, periodIndex);\n\n for (let i = 0; i < realAdaptations.length; i++) {\n let objectUtils = ObjectUtils(context).getInstance();\n if (objectUtils.areEqual(realAdaptations[i], realAdaptation)) {\n return i;\n }\n }\n\n return -1;\n }\n\n function getAdaptationsForType(manifest, periodIndex, type) {\n const realAdaptations = getRealAdaptations(manifest, periodIndex);\n let i,\n len;\n const adaptations = [];\n\n for (i = 0, len = realAdaptations.length; i < len; i++) {\n if (getIsTypeOf(realAdaptations[i], type)) {\n adaptations.push(processAdaptation(realAdaptations[i]));\n }\n }\n\n return adaptations;\n }\n\n function getCodec(adaptation, representationId, addResolutionInfo) {\n let codec = null;\n\n if (adaptation && adaptation.Representation_asArray && adaptation.Representation_asArray.length > 0) {\n const representation = isInteger(representationId) && representationId >= 0 && representationId < adaptation.Representation_asArray.length ?\n adaptation.Representation_asArray[representationId] : adaptation.Representation_asArray[0];\n if (representation) {\n codec = representation.mimeType + ';codecs=\"' + representation.codecs + '\"';\n if (addResolutionInfo && representation.width !== undefined) {\n codec += ';width=\"' + representation.width + '\";height=\"' + representation.height + '\"';\n }\n }\n }\n\n // If the codec contains a profiles parameter we remove it. Otherwise it will cause problems when checking for codec capabilities of the platform\n if (codec) {\n codec = codec.replace(/\\sprofiles=[^;]*/g, '');\n }\n\n return codec;\n }\n\n function getMimeType(adaptation) {\n return adaptation && adaptation.Representation_asArray && adaptation.Representation_asArray.length > 0 ? adaptation.Representation_asArray[0].mimeType : null;\n }\n\n function getKID(adaptation) {\n if (!adaptation || !adaptation.hasOwnProperty(DashConstants.CENC_DEFAULT_KID)) {\n return null;\n }\n return adaptation[DashConstants.CENC_DEFAULT_KID];\n }\n\n function getLabelsForAdaptation(adaptation) {\n if (!adaptation || !Array.isArray(adaptation.Label_asArray)) {\n return [];\n }\n\n const labelArray = [];\n\n for (let i = 0; i < adaptation.Label_asArray.length; i++) {\n labelArray.push({\n lang: adaptation.Label_asArray[i].lang,\n text: adaptation.Label_asArray[i].__text || adaptation.Label_asArray[i]\n });\n }\n\n return labelArray;\n }\n\n function getContentProtectionData(adaptation) {\n if (!adaptation || !adaptation.hasOwnProperty(DashConstants.CONTENTPROTECTION_ASARRAY) || adaptation.ContentProtection_asArray.length === 0) {\n return null;\n }\n return adaptation.ContentProtection_asArray;\n }\n\n function getIsDynamic(manifest) {\n let isDynamic = false;\n if (manifest && manifest.hasOwnProperty('type')) {\n isDynamic = (manifest.type === DashConstants.DYNAMIC);\n }\n return isDynamic;\n }\n\n function hasProfile(manifest, profile) {\n let has = false;\n\n if (manifest && manifest.profiles && manifest.profiles.length > 0) {\n has = (manifest.profiles.indexOf(profile) !== -1);\n }\n\n return has;\n }\n\n function getDuration(manifest) {\n let mpdDuration;\n //@mediaPresentationDuration specifies the duration of the entire Media Presentation.\n //If the attribute is not present, the duration of the Media Presentation is unknown.\n if (manifest && manifest.hasOwnProperty(DashConstants.MEDIA_PRESENTATION_DURATION)) {\n mpdDuration = manifest.mediaPresentationDuration;\n } else if (manifest && manifest.type == 'dynamic') {\n mpdDuration = Number.POSITIVE_INFINITY;\n } else {\n mpdDuration = Number.MAX_SAFE_INTEGER || Number.MAX_VALUE;\n }\n\n return mpdDuration;\n }\n\n function getBandwidth(representation) {\n return representation && representation.bandwidth ? representation.bandwidth : NaN;\n }\n\n function getManifestUpdatePeriod(manifest, latencyOfLastUpdate = 0) {\n let delay = NaN;\n if (manifest && manifest.hasOwnProperty(DashConstants.MINIMUM_UPDATE_PERIOD)) {\n delay = manifest.minimumUpdatePeriod;\n }\n return isNaN(delay) ? delay : Math.max(delay - latencyOfLastUpdate, 1);\n }\n\n function getRepresentationCount(adaptation) {\n return adaptation && Array.isArray(adaptation.Representation_asArray) ? adaptation.Representation_asArray.length : 0;\n }\n\n function getBitrateListForAdaptation(realAdaptation) {\n const processedRealAdaptation = processAdaptation(realAdaptation);\n const realRepresentations = processedRealAdaptation && Array.isArray(processedRealAdaptation.Representation_asArray) ? processedRealAdaptation.Representation_asArray : [];\n\n return realRepresentations.map((realRepresentation) => {\n return {\n bandwidth: realRepresentation.bandwidth,\n width: realRepresentation.width || 0,\n height: realRepresentation.height || 0,\n scanType: realRepresentation.scanType || null,\n id: realRepresentation.id || null\n };\n });\n }\n\n function getEssentialPropertiesForRepresentation(realRepresentation) {\n if (!realRepresentation || ! realRepresentation.EssentialProperty_asArray || !realRepresentation.EssentialProperty_asArray.length) return null;\n\n return realRepresentation.EssentialProperty_asArray.map( (prop) => {\n return {\n schemeIdUri: prop.schemeIdUri,\n value: prop.value\n };\n });\n }\n\n function getRepresentationFor(index, adaptation) {\n return adaptation && adaptation.Representation_asArray && adaptation.Representation_asArray.length > 0 &&\n isInteger(index) ? adaptation.Representation_asArray[index] : null;\n }\n\n function getRealAdaptationFor(voAdaptation) {\n if (voAdaptation && voAdaptation.period && isInteger(voAdaptation.period.index)) {\n const periodArray = voAdaptation.period.mpd.manifest.Period_asArray[voAdaptation.period.index];\n if (periodArray && periodArray.AdaptationSet_asArray && isInteger(voAdaptation.index)) {\n return processAdaptation(periodArray.AdaptationSet_asArray[voAdaptation.index]);\n }\n }\n }\n\n function isLastRepeatAttributeValid(segmentTimeline) {\n let s = segmentTimeline.S_asArray[segmentTimeline.S_asArray.length - 1];\n return !s.hasOwnProperty('r') || s.r >= 0;\n }\n\n function getUseCalculatedLiveEdgeTimeForAdaptation(voAdaptation) {\n let realAdaptation = getRealAdaptationFor(voAdaptation);\n let realRepresentation = realAdaptation && Array.isArray(realAdaptation.Representation_asArray) ? realAdaptation.Representation_asArray[0] : null;\n let segmentInfo;\n if (realRepresentation) {\n if (realRepresentation.hasOwnProperty(DashConstants.SEGMENT_LIST)) {\n segmentInfo = realRepresentation.SegmentList;\n return segmentInfo.hasOwnProperty(DashConstants.SEGMENT_TIMELINE) ?\n isLastRepeatAttributeValid(segmentInfo.SegmentTimeline) :\n true;\n } else if (realRepresentation.hasOwnProperty(DashConstants.SEGMENT_TEMPLATE)) {\n segmentInfo = realRepresentation.SegmentTemplate;\n if (segmentInfo.hasOwnProperty(DashConstants.SEGMENT_TIMELINE)) {\n return isLastRepeatAttributeValid(segmentInfo.SegmentTimeline);\n }\n }\n }\n\n return false;\n }\n\n function getRepresentationsForAdaptation(voAdaptation) {\n const voRepresentations = [];\n const processedRealAdaptation = getRealAdaptationFor(voAdaptation);\n let segmentInfo,\n baseUrl;\n\n if (processedRealAdaptation && processedRealAdaptation.Representation_asArray) {\n // TODO: TO BE REMOVED. We should get just the baseUrl elements that affects to the representations\n // that we are processing. Making it works properly will require much further changes and given\n // parsing base Urls parameters is needed for our ultra low latency examples, we will\n // keep this \"tricky\" code until the real (and good) solution comes\n if (voAdaptation && voAdaptation.period && isInteger(voAdaptation.period.index)) {\n const baseUrls = getBaseURLsFromElement(voAdaptation.period.mpd.manifest);\n if (baseUrls) {\n baseUrl = baseUrls[0];\n }\n }\n for (let i = 0, len = processedRealAdaptation.Representation_asArray.length; i < len; ++i) {\n const realRepresentation = processedRealAdaptation.Representation_asArray[i];\n const voRepresentation = new Representation();\n voRepresentation.index = i;\n voRepresentation.adaptation = voAdaptation;\n\n if (realRepresentation.hasOwnProperty(DashConstants.ID)) {\n voRepresentation.id = realRepresentation.id;\n }\n if (realRepresentation.hasOwnProperty(DashConstants.CODECS)) {\n voRepresentation.codecs = realRepresentation.codecs;\n }\n if (realRepresentation.hasOwnProperty(DashConstants.CODEC_PRIVATE_DATA)) {\n voRepresentation.codecPrivateData = realRepresentation.codecPrivateData;\n }\n if (realRepresentation.hasOwnProperty(DashConstants.BANDWITH)) {\n voRepresentation.bandwidth = realRepresentation.bandwidth;\n }\n if (realRepresentation.hasOwnProperty(DashConstants.WIDTH)) {\n voRepresentation.width = realRepresentation.width;\n }\n if (realRepresentation.hasOwnProperty(DashConstants.HEIGHT)) {\n voRepresentation.height = realRepresentation.height;\n }\n if (realRepresentation.hasOwnProperty(DashConstants.SCAN_TYPE)) {\n voRepresentation.scanType = realRepresentation.scanType;\n }\n if (realRepresentation.hasOwnProperty(DashConstants.MAX_PLAYOUT_RATE)) {\n voRepresentation.maxPlayoutRate = realRepresentation.maxPlayoutRate;\n }\n\n if (realRepresentation.hasOwnProperty(DashConstants.SEGMENT_BASE)) {\n segmentInfo = realRepresentation.SegmentBase;\n voRepresentation.segmentInfoType = DashConstants.SEGMENT_BASE;\n } else if (realRepresentation.hasOwnProperty(DashConstants.SEGMENT_LIST)) {\n segmentInfo = realRepresentation.SegmentList;\n\n if (segmentInfo.hasOwnProperty(DashConstants.SEGMENT_TIMELINE)) {\n voRepresentation.segmentInfoType = DashConstants.SEGMENT_TIMELINE;\n voRepresentation.useCalculatedLiveEdgeTime = isLastRepeatAttributeValid(segmentInfo.SegmentTimeline);\n } else {\n voRepresentation.segmentInfoType = DashConstants.SEGMENT_LIST;\n voRepresentation.useCalculatedLiveEdgeTime = true;\n }\n } else if (realRepresentation.hasOwnProperty(DashConstants.SEGMENT_TEMPLATE)) {\n segmentInfo = realRepresentation.SegmentTemplate;\n\n if (segmentInfo.hasOwnProperty(DashConstants.SEGMENT_TIMELINE)) {\n voRepresentation.segmentInfoType = DashConstants.SEGMENT_TIMELINE;\n voRepresentation.useCalculatedLiveEdgeTime = isLastRepeatAttributeValid(segmentInfo.SegmentTimeline);\n } else {\n voRepresentation.segmentInfoType = DashConstants.SEGMENT_TEMPLATE;\n }\n\n if (segmentInfo.hasOwnProperty(DashConstants.INITIALIZATION_MINUS)) {\n voRepresentation.initialization = segmentInfo.initialization.split('$Bandwidth$')\n .join(realRepresentation.bandwidth).split('$RepresentationID$').join(realRepresentation.id);\n }\n } else {\n voRepresentation.segmentInfoType = DashConstants.BASE_URL;\n }\n\n voRepresentation.essentialProperties = getEssentialPropertiesForRepresentation(realRepresentation);\n\n if (segmentInfo) {\n if (segmentInfo.hasOwnProperty(DashConstants.INITIALIZATION)) {\n const initialization = segmentInfo.Initialization;\n\n if (initialization.hasOwnProperty(DashConstants.SOURCE_URL)) {\n voRepresentation.initialization = initialization.sourceURL;\n }\n\n if (initialization.hasOwnProperty(DashConstants.RANGE)) {\n voRepresentation.range = initialization.range;\n // initialization source url will be determined from\n // BaseURL when resolved at load time.\n }\n } else if (realRepresentation.hasOwnProperty(DashConstants.MIME_TYPE) && getIsTextTrack(realRepresentation.mimeType)) {\n voRepresentation.range = 0;\n }\n\n if (segmentInfo.hasOwnProperty(DashConstants.TIMESCALE)) {\n voRepresentation.timescale = segmentInfo.timescale;\n }\n if (segmentInfo.hasOwnProperty(DashConstants.DURATION)) {\n // TODO according to the spec @maxSegmentDuration specifies the maximum duration of any Segment in any Representation in the Media Presentation\n // It is also said that for a SegmentTimeline any @d value shall not exceed the value of MPD@maxSegmentDuration, but nothing is said about\n // SegmentTemplate @duration attribute. We need to find out if @maxSegmentDuration should be used instead of calculated duration if the the duration\n // exceeds @maxSegmentDuration\n voRepresentation.segmentDuration = segmentInfo.duration / voRepresentation.timescale;\n } else if (realRepresentation.hasOwnProperty(DashConstants.SEGMENT_TEMPLATE)) {\n segmentInfo = realRepresentation.SegmentTemplate;\n\n if (segmentInfo.hasOwnProperty(DashConstants.SEGMENT_TIMELINE)) {\n voRepresentation.segmentDuration = calcSegmentDuration(segmentInfo.SegmentTimeline) / voRepresentation.timescale;\n }\n }\n if (segmentInfo.hasOwnProperty(DashConstants.MEDIA)) {\n voRepresentation.media = segmentInfo.media;\n }\n if (segmentInfo.hasOwnProperty(DashConstants.START_NUMBER)) {\n voRepresentation.startNumber = segmentInfo.startNumber;\n }\n if (segmentInfo.hasOwnProperty(DashConstants.INDEX_RANGE)) {\n voRepresentation.indexRange = segmentInfo.indexRange;\n }\n if (segmentInfo.hasOwnProperty(DashConstants.PRESENTATION_TIME_OFFSET)) {\n voRepresentation.presentationTimeOffset = segmentInfo.presentationTimeOffset / voRepresentation.timescale;\n }\n if (segmentInfo.hasOwnProperty(DashConstants.AVAILABILITY_TIME_OFFSET)) {\n voRepresentation.availabilityTimeOffset = segmentInfo.availabilityTimeOffset;\n } else if (baseUrl && baseUrl.availabilityTimeOffset !== undefined) {\n voRepresentation.availabilityTimeOffset = baseUrl.availabilityTimeOffset;\n }\n if (segmentInfo.hasOwnProperty(DashConstants.AVAILABILITY_TIME_COMPLETE)) {\n voRepresentation.availabilityTimeComplete = segmentInfo.availabilityTimeComplete !== 'false';\n } else if (baseUrl && baseUrl.availabilityTimeComplete !== undefined) {\n voRepresentation.availabilityTimeComplete = baseUrl.availabilityTimeComplete;\n }\n }\n\n voRepresentation.MSETimeOffset = calcMSETimeOffset(voRepresentation);\n voRepresentation.path = [voAdaptation.period.index, voAdaptation.index, i];\n voRepresentations.push(voRepresentation);\n }\n }\n\n return voRepresentations;\n }\n\n function calcSegmentDuration(segmentTimeline) {\n let s0 = segmentTimeline.S_asArray[0];\n let s1 = segmentTimeline.S_asArray[1];\n return s0.hasOwnProperty('d') ? s0.d : (s1.t - s0.t);\n }\n\n function calcMSETimeOffset(representation) {\n // The MSEOffset is offset from AST for media. It is Period@start - presentationTimeOffset\n const presentationOffset = representation.presentationTimeOffset;\n const periodStart = representation.adaptation.period.start;\n return (periodStart - presentationOffset);\n }\n\n function getAdaptationsForPeriod(voPeriod) {\n const realPeriod = voPeriod && isInteger(voPeriod.index) ? voPeriod.mpd.manifest.Period_asArray[voPeriod.index] : null;\n const voAdaptations = [];\n let voAdaptationSet,\n realAdaptationSet,\n i;\n\n if (realPeriod && realPeriod.AdaptationSet_asArray) {\n for (i = 0; i < realPeriod.AdaptationSet_asArray.length; i++) {\n realAdaptationSet = realPeriod.AdaptationSet_asArray[i];\n voAdaptationSet = new AdaptationSet();\n if (realAdaptationSet.hasOwnProperty(DashConstants.ID)) {\n voAdaptationSet.id = realAdaptationSet.id;\n }\n voAdaptationSet.index = i;\n voAdaptationSet.period = voPeriod;\n\n if (getIsMuxed(realAdaptationSet)) {\n voAdaptationSet.type = Constants.MUXED;\n } else if (getIsAudio(realAdaptationSet)) {\n voAdaptationSet.type = Constants.AUDIO;\n } else if (getIsVideo(realAdaptationSet)) {\n voAdaptationSet.type = Constants.VIDEO;\n } else if (getIsFragmentedText(realAdaptationSet)) {\n voAdaptationSet.type = Constants.FRAGMENTED_TEXT;\n } else if (getIsImage(realAdaptationSet)) {\n voAdaptationSet.type = Constants.IMAGE;\n } else {\n voAdaptationSet.type = Constants.TEXT;\n }\n voAdaptations.push(voAdaptationSet);\n }\n }\n\n return voAdaptations;\n }\n\n function getRegularPeriods(mpd) {\n const isDynamic = mpd ? getIsDynamic(mpd.manifest) : false;\n const voPeriods = [];\n let realPreviousPeriod = null;\n let realPeriod = null;\n let voPreviousPeriod = null;\n let voPeriod = null;\n let len,\n i;\n\n for (i = 0, len = mpd && mpd.manifest && mpd.manifest.Period_asArray ? mpd.manifest.Period_asArray.length : 0; i < len; i++) {\n realPeriod = mpd.manifest.Period_asArray[i];\n\n // If the attribute @start is present in the Period, then the\n // Period is a regular Period and the PeriodStart is equal\n // to the value of this attribute.\n if (realPeriod.hasOwnProperty(DashConstants.START)) {\n voPeriod = new Period();\n voPeriod.start = realPeriod.start;\n }\n // If the @start attribute is absent, but the previous Period\n // element contains a @duration attribute then then this new\n // Period is also a regular Period. The start time of the new\n // Period PeriodStart is the sum of the start time of the previous\n // Period PeriodStart and the value of the attribute @duration\n // of the previous Period.\n else if (realPreviousPeriod !== null && realPreviousPeriod.hasOwnProperty(DashConstants.DURATION) && voPreviousPeriod !== null) {\n voPeriod = new Period();\n voPeriod.start = parseFloat((voPreviousPeriod.start + voPreviousPeriod.duration).toFixed(5));\n }\n // If (i) @start attribute is absent, and (ii) the Period element\n // is the first in the MPD, and (iii) the MPD@type is 'static',\n // then the PeriodStart time shall be set to zero.\n else if (i === 0 && !isDynamic) {\n voPeriod = new Period();\n voPeriod.start = 0;\n }\n\n // The Period extends until the PeriodStart of the next Period.\n // The difference between the PeriodStart time of a Period and\n // the PeriodStart time of the following Period.\n if (voPreviousPeriod !== null && isNaN(voPreviousPeriod.duration)) {\n if (voPeriod !== null) {\n voPreviousPeriod.duration = parseFloat((voPeriod.start - voPreviousPeriod.start).toFixed(5));\n } else {\n logger.warn('First period duration could not be calculated because lack of start and duration period properties. This will cause timing issues during playback');\n }\n }\n\n if (voPeriod !== null) {\n voPeriod.id = getPeriodId(realPeriod, i);\n voPeriod.index = i;\n voPeriod.mpd = mpd;\n\n if (realPeriod.hasOwnProperty(DashConstants.DURATION)) {\n voPeriod.duration = realPeriod.duration;\n }\n\n voPeriods.push(voPeriod);\n realPreviousPeriod = realPeriod;\n voPreviousPeriod = voPeriod;\n }\n\n realPeriod = null;\n voPeriod = null;\n }\n\n if (voPeriods.length === 0) {\n return voPeriods;\n }\n\n // The last Period extends until the end of the Media Presentation.\n // The difference between the PeriodStart time of the last Period\n // and the mpd duration\n if (voPreviousPeriod !== null && isNaN(voPreviousPeriod.duration)) {\n voPreviousPeriod.duration = parseFloat((getEndTimeForLastPeriod(voPreviousPeriod) - voPreviousPeriod.start).toFixed(5));\n }\n\n return voPeriods;\n }\n\n function getPeriodId(realPeriod, i) {\n if (!realPeriod) {\n throw new Error('Period cannot be null or undefined');\n }\n\n let id = Period.DEFAULT_ID + '_' + i;\n\n if (realPeriod.hasOwnProperty(DashConstants.ID) && realPeriod.id.length > 0 && realPeriod.id !== '__proto__') {\n id = realPeriod.id;\n }\n\n return id;\n }\n\n function getMpd(manifest) {\n const mpd = new Mpd();\n\n if (manifest) {\n mpd.manifest = manifest;\n\n if (manifest.hasOwnProperty(DashConstants.AVAILABILITY_START_TIME)) {\n mpd.availabilityStartTime = new Date(manifest.availabilityStartTime.getTime());\n } else {\n if (manifest.loadedTime) {\n mpd.availabilityStartTime = new Date(manifest.loadedTime.getTime());\n }\n }\n\n if (manifest.hasOwnProperty(DashConstants.AVAILABILITY_END_TIME)) {\n mpd.availabilityEndTime = new Date(manifest.availabilityEndTime.getTime());\n }\n\n if (manifest.hasOwnProperty(DashConstants.MINIMUM_UPDATE_PERIOD)) {\n mpd.minimumUpdatePeriod = manifest.minimumUpdatePeriod;\n }\n\n if (manifest.hasOwnProperty(DashConstants.MEDIA_PRESENTATION_DURATION)) {\n mpd.mediaPresentationDuration = manifest.mediaPresentationDuration;\n }\n\n if (manifest.hasOwnProperty(DashConstants.SUGGESTED_PRESENTATION_DELAY)) {\n mpd.suggestedPresentationDelay = manifest.suggestedPresentationDelay;\n }\n\n if (manifest.hasOwnProperty(DashConstants.TIMESHIFT_BUFFER_DEPTH)) {\n mpd.timeShiftBufferDepth = manifest.timeShiftBufferDepth;\n }\n\n if (manifest.hasOwnProperty(DashConstants.MAX_SEGMENT_DURATION)) {\n mpd.maxSegmentDuration = manifest.maxSegmentDuration;\n }\n }\n\n return mpd;\n }\n\n function checkConfig() {\n if (!errHandler || !errHandler.hasOwnProperty('error')) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function getEndTimeForLastPeriod(voPeriod) {\n checkConfig();\n const isDynamic = getIsDynamic(voPeriod.mpd.manifest);\n\n let periodEnd;\n if (voPeriod.mpd.manifest.mediaPresentationDuration) {\n periodEnd = voPeriod.mpd.manifest.mediaPresentationDuration;\n } else if (voPeriod.duration) {\n periodEnd = voPeriod.duration;\n } else if (isDynamic) {\n periodEnd = Number.POSITIVE_INFINITY;\n } else {\n errHandler.error(new DashJSError(Errors.MANIFEST_ERROR_ID_PARSE_CODE, 'Must have @mediaPresentationDuration on MPD or an explicit @duration on the last period.', voPeriod));\n }\n\n return periodEnd;\n }\n\n function getEventsForPeriod(period) {\n const manifest = period && period.mpd && period.mpd.manifest ? period.mpd.manifest : null;\n const periodArray = manifest ? manifest.Period_asArray : null;\n const eventStreams = periodArray && period && isInteger(period.index) ? periodArray[period.index].EventStream_asArray : null;\n const events = [];\n let i,\n j;\n\n if (eventStreams) {\n for (i = 0; i < eventStreams.length; i++) {\n const eventStream = new EventStream();\n eventStream.period = period;\n eventStream.timescale = 1;\n\n if (eventStreams[i].hasOwnProperty(Constants.SCHEME_ID_URI)) {\n eventStream.schemeIdUri = eventStreams[i].schemeIdUri;\n } else {\n throw new Error('Invalid EventStream. SchemeIdUri has to be set');\n }\n if (eventStreams[i].hasOwnProperty(DashConstants.TIMESCALE)) {\n eventStream.timescale = eventStreams[i].timescale;\n }\n if (eventStreams[i].hasOwnProperty(DashConstants.VALUE)) {\n eventStream.value = eventStreams[i].value;\n }\n for (j = 0; eventStreams[i].Event_asArray && j < eventStreams[i].Event_asArray.length; j++) {\n const event = new Event();\n event.presentationTime = 0;\n event.eventStream = eventStream;\n\n if (eventStreams[i].Event_asArray[j].hasOwnProperty(DashConstants.PRESENTATION_TIME)) {\n event.presentationTime = eventStreams[i].Event_asArray[j].presentationTime;\n const presentationTimeOffset = eventStream.presentationTimeOffset ? eventStream.presentationTimeOffset * eventStream.timescale : 0;\n event.calculatedPresentationTime = event.presentationTime + (period.start * eventStream.timescale) + presentationTimeOffset;\n }\n if (eventStreams[i].Event_asArray[j].hasOwnProperty(DashConstants.DURATION)) {\n event.duration = eventStreams[i].Event_asArray[j].duration;\n }\n if (eventStreams[i].Event_asArray[j].hasOwnProperty(DashConstants.ID)) {\n event.id = eventStreams[i].Event_asArray[j].id;\n }\n\n if (eventStreams[i].Event_asArray[j].Signal && eventStreams[i].Event_asArray[j].Signal.Binary) {\n // toString is used to manage both regular and namespaced tags\n event.messageData = BASE64.decodeArray(eventStreams[i].Event_asArray[j].Signal.Binary.toString());\n } else {\n // From Cor.1: 'NOTE: this attribute is an alternative\n // to specifying a complete XML element(s) in the Event.\n // It is useful when an event leans itself to a compact\n // string representation'.\n event.messageData =\n eventStreams[i].Event_asArray[j].messageData ||\n eventStreams[i].Event_asArray[j].__text;\n }\n\n events.push(event);\n }\n }\n }\n\n return events;\n }\n\n function getEventStreams(inbandStreams, representation) {\n const eventStreams = [];\n let i;\n\n if (!inbandStreams) return eventStreams;\n\n for (i = 0; i < inbandStreams.length; i++) {\n const eventStream = new EventStream();\n eventStream.timescale = 1;\n eventStream.representation = representation;\n\n if (inbandStreams[i].hasOwnProperty(Constants.SCHEME_ID_URI)) {\n eventStream.schemeIdUri = inbandStreams[i].schemeIdUri;\n } else {\n throw new Error('Invalid EventStream. SchemeIdUri has to be set');\n }\n if (inbandStreams[i].hasOwnProperty(DashConstants.TIMESCALE)) {\n eventStream.timescale = inbandStreams[i].timescale;\n }\n if (inbandStreams[i].hasOwnProperty(DashConstants.VALUE)) {\n eventStream.value = inbandStreams[i].value;\n }\n eventStreams.push(eventStream);\n }\n\n return eventStreams;\n }\n\n function getEventStreamForAdaptationSet(manifest, adaptation) {\n let inbandStreams,\n periodArray,\n adaptationArray;\n\n if (manifest && manifest.Period_asArray && adaptation && adaptation.period && isInteger(adaptation.period.index)) {\n periodArray = manifest.Period_asArray[adaptation.period.index];\n if (periodArray && periodArray.AdaptationSet_asArray && isInteger(adaptation.index)) {\n adaptationArray = periodArray.AdaptationSet_asArray[adaptation.index];\n if (adaptationArray) {\n inbandStreams = adaptationArray.InbandEventStream_asArray;\n }\n }\n }\n\n return getEventStreams(inbandStreams, null);\n }\n\n function getEventStreamForRepresentation(manifest, representation) {\n let inbandStreams,\n periodArray,\n adaptationArray,\n representationArray;\n\n if (manifest && manifest.Period_asArray && representation && representation.adaptation && representation.adaptation.period && isInteger(representation.adaptation.period.index)) {\n periodArray = manifest.Period_asArray[representation.adaptation.period.index];\n if (periodArray && periodArray.AdaptationSet_asArray && isInteger(representation.adaptation.index)) {\n adaptationArray = periodArray.AdaptationSet_asArray[representation.adaptation.index];\n if (adaptationArray && adaptationArray.Representation_asArray && isInteger(representation.index)) {\n representationArray = adaptationArray.Representation_asArray[representation.index];\n if (representationArray) {\n inbandStreams = representationArray.InbandEventStream_asArray;\n }\n }\n }\n }\n\n return getEventStreams(inbandStreams, representation);\n }\n\n function getUTCTimingSources(manifest) {\n const isDynamic = getIsDynamic(manifest);\n const hasAST = manifest ? manifest.hasOwnProperty(DashConstants.AVAILABILITY_START_TIME) : false;\n const utcTimingsArray = manifest ? manifest.UTCTiming_asArray : null;\n const utcTimingEntries = [];\n\n // do not bother synchronizing the clock unless MPD is live,\n // or it is static and has availabilityStartTime attribute\n if ((isDynamic || hasAST)) {\n if (utcTimingsArray) {\n // the order is important here - 23009-1 states that the order\n // in the manifest \"indicates relative preference, first having\n // the highest, and the last the lowest priority\".\n utcTimingsArray.forEach(function (utcTiming) {\n const entry = new UTCTiming();\n\n if (utcTiming.hasOwnProperty(Constants.SCHEME_ID_URI)) {\n entry.schemeIdUri = utcTiming.schemeIdUri;\n } else {\n // entries of type DescriptorType with no schemeIdUri\n // are meaningless. let's just ignore this entry and\n // move on.\n return;\n }\n\n // this is (incorrectly) interpreted as a number - schema\n // defines it as a string\n if (utcTiming.hasOwnProperty(DashConstants.VALUE)) {\n entry.value = utcTiming.value.toString();\n } else {\n // without a value, there's not a lot we can do with\n // this entry. let's just ignore this one and move on\n return;\n }\n\n // we're not interested in the optional id or any other\n // attributes which might be attached to the entry\n\n utcTimingEntries.push(entry);\n });\n }\n }\n\n return utcTimingEntries;\n }\n\n function getBaseURLsFromElement(node) {\n const baseUrls = [];\n // if node.BaseURL_asArray and node.baseUri are undefined entries\n // will be [undefined] which entries.some will just skip\n const entries = node.BaseURL_asArray || [node.baseUri];\n let earlyReturn = false;\n\n entries.some(entry => {\n if (entry) {\n const baseUrl = new BaseURL();\n let text = entry.__text || entry;\n\n if (urlUtils.isRelative(text)) {\n // it doesn't really make sense to have relative and\n // absolute URLs at the same level, or multiple\n // relative URLs at the same level, so assume we are\n // done from this level of the MPD\n earlyReturn = true;\n\n // deal with the specific case where the MPD@BaseURL\n // is specified and is relative. when no MPD@BaseURL\n // entries exist, that case is handled by the\n // [node.baseUri] in the entries definition.\n if (node.baseUri) {\n text = urlUtils.resolve(text, node.baseUri);\n }\n }\n\n baseUrl.url = text;\n\n // serviceLocation is optional, but we need it in order\n // to blacklist correctly. if it's not available, use\n // anything unique since there's no relationship to any\n // other BaseURL and, in theory, the url should be\n // unique so use this instead.\n if (entry.hasOwnProperty(DashConstants.SERVICE_LOCATION) &&\n entry.serviceLocation.length) {\n baseUrl.serviceLocation = entry.serviceLocation;\n } else {\n baseUrl.serviceLocation = text;\n }\n\n if (entry.hasOwnProperty(DashConstants.DVB_PRIORITY)) {\n baseUrl.dvb_priority = entry[DashConstants.DVB_PRIORITY];\n }\n\n if (entry.hasOwnProperty(DashConstants.DVB_WEIGHT)) {\n baseUrl.dvb_weight = entry[DashConstants.DVB_WEIGHT];\n }\n\n if (entry.hasOwnProperty(DashConstants.AVAILABILITY_TIME_OFFSET)) {\n baseUrl.availabilityTimeOffset = entry[DashConstants.AVAILABILITY_TIME_OFFSET];\n }\n\n if (entry.hasOwnProperty(DashConstants.AVAILABILITY_TIME_COMPLETE)) {\n baseUrl.availabilityTimeComplete = entry[DashConstants.AVAILABILITY_TIME_COMPLETE] !== 'false';\n }\n /* NOTE: byteRange currently unused\n */\n\n baseUrls.push(baseUrl);\n\n return earlyReturn;\n }\n });\n\n return baseUrls;\n }\n\n function getLocation(manifest) {\n if (manifest && manifest.hasOwnProperty(Constants.LOCATION)) {\n // for now, do not support multiple Locations -\n // just set Location to the first Location.\n manifest.Location = manifest.Location_asArray[0];\n\n return manifest.Location;\n }\n\n // may well be undefined\n return undefined;\n }\n\n function getSuggestedPresentationDelay(mpd) {\n return mpd && mpd.hasOwnProperty(DashConstants.SUGGESTED_PRESENTATION_DELAY) ? mpd.suggestedPresentationDelay : null;\n }\n\n function getAvailabilityStartTime(mpd) {\n return mpd && mpd.hasOwnProperty(DashConstants.AVAILABILITY_START_TIME) && mpd.availabilityStartTime !== null ? mpd.availabilityStartTime.getTime() : null;\n }\n\n function getServiceDescriptions(manifest) {\n const serviceDescriptions = [];\n if (manifest && manifest.hasOwnProperty(DashConstants.SERVICE_DESCRIPTION)) {\n for (const sd of manifest.ServiceDescription_asArray) {\n // Convert each of the properties defined in\n let id, schemeIdUri, latency, playbackRate;\n for (const prop in sd) {\n if (sd.hasOwnProperty(prop)) {\n if (prop === DashConstants.ID) {\n id = sd[prop];\n } else if (prop === DashConstants.SERVICE_DESCRIPTION_SCOPE) {\n schemeIdUri = sd[prop].schemeIdUri;\n } else if (prop === DashConstants.SERVICE_DESCRIPTION_LATENCY) {\n latency = {\n target: sd[prop].target,\n max: sd[prop].max,\n min: sd[prop].min\n };\n } else if (prop === DashConstants.SERVICE_DESCRIPTION_PLAYBACK_RATE) {\n playbackRate = {\n max: sd[prop].max,\n min: sd[prop].min\n };\n }\n }\n }\n // we have a ServiceDescription for low latency. Add it if it really has parameters defined\n if (schemeIdUri === Constants.SERVICE_DESCRIPTION_LL_SCHEME && (latency || playbackRate)) {\n serviceDescriptions.push({\n id,\n schemeIdUri,\n latency,\n playbackRate\n });\n }\n }\n }\n\n return serviceDescriptions;\n }\n\n function getSupplementalPropperties(adaptation) {\n const supplementalProperties = {};\n\n if (adaptation && adaptation.hasOwnProperty(DashConstants.SUPPLEMENTAL_PROPERTY)) {\n for (const sp of adaptation.SupplementalProperty_asArray) {\n if (sp.hasOwnProperty(Constants.SCHEME_ID_URI) && sp.hasOwnProperty(DashConstants.VALUE)) {\n supplementalProperties[sp[Constants.SCHEME_ID_URI]] = sp[DashConstants.VALUE];\n }\n }\n }\n return supplementalProperties;\n }\n\n function setConfig(config) {\n if (!config) return;\n\n if (config.errHandler) {\n errHandler = config.errHandler;\n }\n\n if (config.BASE64) {\n BASE64 = config.BASE64;\n }\n }\n\n instance = {\n getIsTypeOf: getIsTypeOf,\n getIsTextTrack: getIsTextTrack,\n getLanguageForAdaptation: getLanguageForAdaptation,\n getViewpointForAdaptation: getViewpointForAdaptation,\n getRolesForAdaptation: getRolesForAdaptation,\n getAccessibilityForAdaptation: getAccessibilityForAdaptation,\n getAudioChannelConfigurationForAdaptation: getAudioChannelConfigurationForAdaptation,\n getAudioChannelConfigurationForRepresentation: getAudioChannelConfigurationForRepresentation,\n getAdaptationForIndex: getAdaptationForIndex,\n getIndexForAdaptation: getIndexForAdaptation,\n getAdaptationForId: getAdaptationForId,\n getAdaptationsForType: getAdaptationsForType,\n getCodec: getCodec,\n getMimeType: getMimeType,\n getKID: getKID,\n getLabelsForAdaptation: getLabelsForAdaptation,\n getContentProtectionData: getContentProtectionData,\n getIsDynamic: getIsDynamic,\n hasProfile: hasProfile,\n getDuration: getDuration,\n getBandwidth: getBandwidth,\n getManifestUpdatePeriod: getManifestUpdatePeriod,\n getRepresentationCount: getRepresentationCount,\n getBitrateListForAdaptation: getBitrateListForAdaptation,\n getRepresentationFor: getRepresentationFor,\n getRepresentationsForAdaptation: getRepresentationsForAdaptation,\n getAdaptationsForPeriod: getAdaptationsForPeriod,\n getRegularPeriods: getRegularPeriods,\n getMpd: getMpd,\n getEventsForPeriod: getEventsForPeriod,\n getEventStreamForAdaptationSet: getEventStreamForAdaptationSet,\n getEventStreamForRepresentation: getEventStreamForRepresentation,\n getUTCTimingSources: getUTCTimingSources,\n getBaseURLsFromElement: getBaseURLsFromElement,\n getRepresentationSortFunction: getRepresentationSortFunction,\n getLocation: getLocation,\n getUseCalculatedLiveEdgeTimeForAdaptation: getUseCalculatedLiveEdgeTimeForAdaptation,\n getSuggestedPresentationDelay: getSuggestedPresentationDelay,\n getAvailabilityStartTime: getAvailabilityStartTime,\n getServiceDescriptions: getServiceDescriptions,\n getSupplementalPropperties: getSupplementalPropperties,\n setConfig: setConfig\n };\n\n setup();\n\n return instance;\n}\n\nDashManifestModel.__dashjs_factory_name = 'DashManifestModel';\nexport default FactoryMaker.getSingletonFactory(DashManifestModel);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker';\nimport ObjectIron from './objectiron';\nimport X2JS from '../../../externals/xml2json';\nimport StringMatcher from './matchers/StringMatcher';\nimport DurationMatcher from './matchers/DurationMatcher';\nimport DateTimeMatcher from './matchers/DateTimeMatcher';\nimport NumericMatcher from './matchers/NumericMatcher';\nimport RepresentationBaseValuesMap from './maps/RepresentationBaseValuesMap';\nimport SegmentValuesMap from './maps/SegmentValuesMap';\n\nfunction DashParser(config) {\n\n config = config || {};\n const context = this.context;\n const debug = config.debug;\n\n let instance,\n logger,\n matchers,\n converter,\n objectIron;\n\n function setup() {\n logger = debug.getLogger(instance);\n matchers = [\n new DurationMatcher(),\n new DateTimeMatcher(),\n new NumericMatcher(),\n new StringMatcher() // last in list to take precedence over NumericMatcher\n ];\n\n converter = new X2JS({\n escapeMode: false,\n attributePrefix: '',\n arrayAccessForm: 'property',\n emptyNodeForm: 'object',\n stripWhitespaces: false,\n enableToStringFunc: true,\n ignoreRoot: true,\n matchers: matchers\n });\n\n objectIron = ObjectIron(context).create({\n adaptationset: new RepresentationBaseValuesMap(),\n period: new SegmentValuesMap()\n });\n }\n\n function getMatchers() {\n return matchers;\n }\n\n function getIron() {\n return objectIron;\n }\n\n function parse(data) {\n let manifest;\n const startTime = window.performance.now();\n\n manifest = converter.xml_str2json(data);\n\n if (!manifest) {\n throw new Error('parsing the manifest failed');\n }\n\n const jsonTime = window.performance.now();\n objectIron.run(manifest);\n\n const ironedTime = window.performance.now();\n logger.info('Parsing complete: ( xml2json: ' + (jsonTime - startTime).toPrecision(3) + 'ms, objectiron: ' + (ironedTime - jsonTime).toPrecision(3) + 'ms, total: ' + ((ironedTime - startTime) / 1000).toPrecision(3) + 's)');\n\n manifest.protocol = 'DASH';\n\n return manifest;\n }\n\n instance = {\n parse: parse,\n getMatchers: getMatchers,\n getIron: getIron\n };\n\n setup();\n\n return instance;\n}\n\nDashParser.__dashjs_factory_name = 'DashParser';\nexport default FactoryMaker.getClassFactory(DashParser);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc a property belonging to a MapNode\n * @ignore\n */\n\nclass CommonProperty {\n constructor(name) {\n const getDefaultMergeForName =\n (n) => n && n.length && n.charAt(0) === n.charAt(0).toUpperCase();\n\n this._name = name;\n this._merge = getDefaultMergeForName(name);\n }\n\n get name() {\n return this._name;\n }\n\n get merge() {\n return this._merge;\n }\n}\n\nexport default CommonProperty;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc a node at some level in a ValueMap\n */\nimport CommonProperty from './CommonProperty';\n\nclass MapNode {\n constructor(name, properties, children) {\n this._name = name || '';\n this._properties = [];\n this._children = children || [];\n\n if (Array.isArray(properties)) {\n properties.forEach(p => {\n this._properties.push(new CommonProperty(p));\n });\n }\n }\n\n get name() {\n return this._name;\n }\n\n get children() {\n return this._children;\n }\n\n get properties() {\n return this._properties;\n }\n}\n\nexport default MapNode;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc a RepresentationBaseValuesMap type for input to objectiron\n */\nimport MapNode from './MapNode';\nimport DashConstants from '../../constants/DashConstants';\n\nclass RepresentationBaseValuesMap extends MapNode {\n constructor() {\n const commonProperties = [\n DashConstants.PROFILES, DashConstants.WIDTH, DashConstants.HEIGHT, DashConstants.SAR, DashConstants.FRAMERATE, DashConstants.AUDIO_SAMPLING_RATE, DashConstants.MIME_TYPE, DashConstants.SEGMENT_PROFILES, DashConstants.CODECS, DashConstants.MAXIMUM_SAP_PERIOD, DashConstants.START_WITH_SAP, DashConstants.MAX_PLAYOUT_RATE, DashConstants.CODING_DEPENDENCY, DashConstants.SCAN_TYPE, DashConstants.FRAME_PACKING, DashConstants.AUDIO_CHANNEL_CONFIGURATION, DashConstants.CONTENT_PROTECTION, DashConstants.ESSENTIAL_PROPERTY, DashConstants.SUPPLEMENTAL_PROPERTY, DashConstants.INBAND_EVENT_STREAM\n ];\n\n super(DashConstants.ADAPTATION_SET, commonProperties, [\n new MapNode(DashConstants.REPRESENTATION, commonProperties, [\n new MapNode(DashConstants.SUB_REPRESENTATION, commonProperties)\n ])\n ]);\n }\n}\n\nexport default RepresentationBaseValuesMap;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc a SegmentValuesMap type for input to objectiron\n */\nimport MapNode from './MapNode';\nimport DashConstants from '../../constants/DashConstants';\n\nclass SegmentValuesMap extends MapNode {\n constructor() {\n const commonProperties = [\n DashConstants.SEGMENT_BASE, DashConstants.SEGMENT_TEMPLATE, DashConstants.SEGMENT_LIST\n ];\n\n super(DashConstants.PERIOD, commonProperties, [\n new MapNode(DashConstants.ADAPTATION_SET, commonProperties, [\n new MapNode(DashConstants.REPRESENTATION, commonProperties)\n ])\n ]);\n }\n}\n\nexport default SegmentValuesMap;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n\n/**\n * @classdesc a base type for matching and converting types in manifest to\n * something more useful\n * @ignore\n */\nclass BaseMatcher {\n constructor(test, converter) {\n this._test = test;\n this._converter = converter;\n }\n\n get test() {\n return this._test;\n }\n\n get converter() {\n return this._converter;\n }\n}\n\nexport default BaseMatcher;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc matches and converts xs:datetime to Date\n */\nimport BaseMatcher from './BaseMatcher';\n\nconst SECONDS_IN_MIN = 60;\nconst MINUTES_IN_HOUR = 60;\nconst MILLISECONDS_IN_SECONDS = 1000;\n\nconst datetimeRegex = /^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2})(?::([0-9]*)(\\.[0-9]*)?)?(?:([+-])([0-9]{2})(?::?)([0-9]{2}))?/;\n\nclass DateTimeMatcher extends BaseMatcher {\n constructor() {\n super(\n attr => datetimeRegex.test(attr.value),\n str => {\n const match = datetimeRegex.exec(str);\n let utcDate;\n\n // If the string does not contain a timezone offset different browsers can interpret it either\n // as UTC or as a local time so we have to parse the string manually to normalize the given date value for\n // all browsers\n utcDate = Date.UTC(\n parseInt(match[1], 10),\n parseInt(match[2], 10) - 1, // months start from zero\n parseInt(match[3], 10),\n parseInt(match[4], 10),\n parseInt(match[5], 10),\n (match[6] && parseInt(match[6], 10) || 0),\n (match[7] && parseFloat(match[7]) * MILLISECONDS_IN_SECONDS) || 0);\n\n // If the date has timezone offset take it into account as well\n if (match[9] && match[10]) {\n const timezoneOffset = parseInt(match[9], 10) * MINUTES_IN_HOUR + parseInt(match[10], 10);\n utcDate += (match[8] === '+' ? -1 : +1) * timezoneOffset * SECONDS_IN_MIN * MILLISECONDS_IN_SECONDS;\n }\n\n return new Date(utcDate);\n }\n );\n }\n}\n\nexport default DateTimeMatcher;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc matches and converts xs:duration to seconds\n */\nimport BaseMatcher from './BaseMatcher';\nimport Constants from '../../../streaming/constants/Constants';\nimport DashConstants from '../../constants/DashConstants';\n\nconst durationRegex = /^([-])?P(([\\d.]*)Y)?(([\\d.]*)M)?(([\\d.]*)D)?T?(([\\d.]*)H)?(([\\d.]*)M)?(([\\d.]*)S)?/;\n\nconst SECONDS_IN_YEAR = 365 * 24 * 60 * 60;\nconst SECONDS_IN_MONTH = 30 * 24 * 60 * 60;\nconst SECONDS_IN_DAY = 24 * 60 * 60;\nconst SECONDS_IN_HOUR = 60 * 60;\nconst SECONDS_IN_MIN = 60;\n\nclass DurationMatcher extends BaseMatcher {\n constructor() {\n super(\n attr => {\n const attributeList = [\n DashConstants.MIN_BUFFER_TIME, DashConstants.MEDIA_PRESENTATION_DURATION,\n DashConstants.MINIMUM_UPDATE_PERIOD, DashConstants.TIMESHIFT_BUFFER_DEPTH, DashConstants.MAX_SEGMENT_DURATION,\n DashConstants.MAX_SUBSEGMENT_DURATION, DashConstants.SUGGESTED_PRESENTATION_DELAY, DashConstants.START,\n Constants.START_TIME, DashConstants.DURATION\n ];\n const len = attributeList.length;\n\n for (let i = 0; i < len; i++) {\n if (attr.nodeName === attributeList[i]) {\n return durationRegex.test(attr.value);\n }\n }\n\n return false;\n },\n str => {\n //str = \"P10Y10M10DT10H10M10.1S\";\n const match = durationRegex.exec(str);\n let result = (parseFloat(match[3] || 0) * SECONDS_IN_YEAR +\n parseFloat(match[5] || 0) * SECONDS_IN_MONTH +\n parseFloat(match[7] || 0) * SECONDS_IN_DAY +\n parseFloat(match[9] || 0) * SECONDS_IN_HOUR +\n parseFloat(match[11] || 0) * SECONDS_IN_MIN +\n parseFloat(match[13] || 0));\n\n if (match[1] !== undefined) {\n result = -result;\n }\n\n return result;\n }\n );\n }\n}\n\nexport default DurationMatcher;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Matches and converts xs:numeric to float\n */\nimport BaseMatcher from './BaseMatcher';\n\nconst numericRegex = /^[-+]?[0-9]+[.]?[0-9]*([eE][-+]?[0-9]+)?$/;\n\nclass NumericMatcher extends BaseMatcher {\n constructor() {\n super(\n attr => numericRegex.test(attr.value),\n str => parseFloat(str)\n );\n }\n}\n\nexport default NumericMatcher;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Matches and converts xs:string to string, but only for specific attributes on specific nodes\n */\nimport BaseMatcher from './BaseMatcher';\nimport DashConstants from '../../constants/DashConstants';\n\nclass StringMatcher extends BaseMatcher {\n constructor() {\n super(\n (attr, nodeName) => {\n const stringAttrsInElements = {\n [DashConstants.MPD]: [ DashConstants.ID, DashConstants.PROFILES ],\n [DashConstants.PERIOD]: [ DashConstants.ID ],\n [DashConstants.BASE_URL]: [ DashConstants.SERVICE_LOCATION, DashConstants.BYTE_RANGE ],\n [DashConstants.SEGMENT_BASE]: [ DashConstants.INDEX_RANGE ],\n [DashConstants.INITIALIZATION]: [ DashConstants.RANGE ],\n [DashConstants.REPRESENTATION_INDEX]: [ DashConstants.RANGE ],\n [DashConstants.SEGMENT_LIST]: [ DashConstants.INDEX_RANGE ],\n [DashConstants.BITSTREAM_SWITCHING]: [ DashConstants.RANGE ],\n [DashConstants.SEGMENT_URL]: [ DashConstants.MEDIA_RANGE, DashConstants.INDEX_RANGE ],\n [DashConstants.SEGMENT_TEMPLATE]: [ DashConstants.INDEX_RANGE, DashConstants.MEDIA, DashConstants.INDEX, DashConstants.INITIALIZATION_MINUS, DashConstants.BITSTREAM_SWITCHING_MINUS ],\n [DashConstants.ASSET_IDENTIFIER]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.EVENT_STREAM]: [ DashConstants.VALUE ],\n [DashConstants.ADAPTATION_SET]: [ DashConstants.PROFILES, DashConstants.MIME_TYPE, DashConstants.SEGMENT_PROFILES, DashConstants.CODECS, DashConstants.CONTENT_TYPE ],\n [DashConstants.FRAME_PACKING]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.AUDIO_CHANNEL_CONFIGURATION]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.CONTENT_PROTECTION]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.ESSENTIAL_PROPERTY]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.SUPPLEMENTAL_PROPERTY]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.INBAND_EVENT_STREAM]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.ACCESSIBILITY]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.ROLE]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.RATING]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.VIEWPOINT]: [ DashConstants.VALUE, DashConstants.ID ],\n [DashConstants.CONTENT_COMPONENT]: [ DashConstants.CONTENT_TYPE ],\n [DashConstants.REPRESENTATION]: [ DashConstants.ID, DashConstants.DEPENDENCY_ID, DashConstants.MEDIA_STREAM_STRUCTURE_ID ],\n [DashConstants.SUBSET]: [ DashConstants.ID ],\n [DashConstants.METRICS]: [ DashConstants.METRICS_MINUS ],\n [DashConstants.REPORTING]: [ DashConstants.VALUE, DashConstants.ID ]\n };\n if (stringAttrsInElements.hasOwnProperty(nodeName)) {\n let attrNames = stringAttrsInElements[nodeName];\n if (attrNames !== undefined) {\n return attrNames.indexOf(attr.name) >= 0;\n } else {\n return false;\n }\n }\n return false;\n },\n str => String(str)\n );\n }\n}\n\nexport default StringMatcher;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker';\n\nfunction ObjectIron(mappers) {\n\n function mergeValues(parentItem, childItem) {\n for (let name in parentItem) {\n if (!childItem.hasOwnProperty(name)) {\n childItem[name] = parentItem[name];\n }\n }\n }\n\n function mapProperties(properties, parent, child) {\n for (let i = 0, len = properties.length; i < len; ++i) {\n const property = properties[i];\n\n if (parent[property.name]) {\n if (child[property.name]) {\n // check to see if we should merge\n if (property.merge) {\n const parentValue = parent[property.name];\n const childValue = child[property.name];\n\n // complex objects; merge properties\n if (typeof parentValue === 'object' && typeof childValue === 'object') {\n mergeValues(parentValue, childValue);\n }\n // simple objects; merge them together\n else {\n child[property.name] = parentValue + childValue;\n }\n }\n } else {\n // just add the property\n child[property.name] = parent[property.name];\n }\n }\n }\n }\n\n function mapItem(item, node) {\n for (let i = 0, len = item.children.length; i < len; ++i) {\n const childItem = item.children[i];\n\n const array = node[childItem.name + '_asArray'];\n if (array) {\n for (let v = 0, len2 = array.length; v < len2; ++v) {\n const childNode = array[v];\n mapProperties(item.properties, node, childNode);\n mapItem(childItem, childNode);\n }\n }\n }\n }\n\n function run(source) {\n\n if (source === null || typeof source !== 'object') {\n return source;\n }\n\n if ('period' in mappers) {\n const periodMapper = mappers.period;\n const periods = source.Period_asArray;\n for (let i = 0, len = periods.length; i < len; ++i) {\n const period = periods[i];\n mapItem(periodMapper, period);\n\n if ('adaptationset' in mappers) {\n const adaptationSets = period.AdaptationSet_asArray;\n if (adaptationSets) {\n const adaptationSetMapper = mappers.adaptationset;\n for (let i = 0, len = adaptationSets.length; i < len; ++i) {\n mapItem(adaptationSetMapper, adaptationSets[i]);\n }\n }\n }\n }\n }\n\n return source;\n }\n\n return {\n run: run\n };\n}\n\n\nObjectIron.__dashjs_factory_name = 'ObjectIron';\nconst factory = FactoryMaker.getClassFactory(ObjectIron);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\nimport Constants from '../../streaming/constants/Constants';\n\nimport { getIndexBasedSegment } from './SegmentsUtils';\n\nfunction ListSegmentsGetter(config, isDynamic) {\n\n config = config || {};\n const timelineConverter = config.timelineConverter;\n\n let instance;\n\n function checkConfig() {\n if (!timelineConverter || !timelineConverter.hasOwnProperty('calcPeriodRelativeTimeFromMpdRelativeTime')) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function getSegmentByIndex(representation, index) {\n checkConfig();\n\n if (!representation) {\n return null;\n }\n\n const list = representation.adaptation.period.mpd.manifest.Period_asArray[representation.adaptation.period.index].\n AdaptationSet_asArray[representation.adaptation.index].Representation_asArray[representation.index].SegmentList;\n const len = list.SegmentURL_asArray.length;\n\n const start = representation.startNumber;\n let segment = null;\n if (index < len) {\n const s = list.SegmentURL_asArray[index];\n\n segment = getIndexBasedSegment(timelineConverter, isDynamic, representation, index);\n if (segment) {\n segment.replacementTime = (start + index - 1) * representation.segmentDuration;\n segment.media = s.media ? s.media : '';\n segment.mediaRange = s.mediaRange;\n segment.index = index;\n segment.indexRange = s.indexRange;\n }\n }\n\n representation.availableSegmentsNumber = len;\n\n return segment;\n }\n\n function getSegmentByTime(representation, requestedTime) {\n checkConfig();\n\n if (!representation) {\n return null;\n }\n\n const duration = representation.segmentDuration;\n\n if (isNaN(duration)) {\n return null;\n }\n\n const periodTime = timelineConverter.calcPeriodRelativeTimeFromMpdRelativeTime(representation, requestedTime);\n const index = Math.floor(periodTime / duration);\n\n return getSegmentByIndex(representation, index);\n }\n\n instance = {\n getSegmentByIndex: getSegmentByIndex,\n getSegmentByTime: getSegmentByTime\n };\n\n return instance;\n}\n\nListSegmentsGetter.__dashjs_factory_name = 'ListSegmentsGetter';\nconst factory = FactoryMaker.getClassFactory(ListSegmentsGetter);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\nimport Constants from '../../streaming/constants/Constants';\n\n\nfunction SegmentBaseGetter(config) {\n\n config = config || {};\n const timelineConverter = config.timelineConverter;\n\n let instance;\n\n function checkConfig() {\n if (!timelineConverter || !timelineConverter.hasOwnProperty('calcPeriodRelativeTimeFromMpdRelativeTime')) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function getSegmentByIndex(representation, index) {\n checkConfig();\n\n if (!representation) {\n return null;\n }\n\n const len = representation.segments ? representation.segments.length : -1;\n let seg;\n if (index < len) {\n seg = representation.segments[index];\n if (seg && seg.availabilityIdx === index) {\n return seg;\n }\n }\n\n for (let i = 0; i < len; i++) {\n seg = representation.segments[i];\n\n if (seg && seg.availabilityIdx === index) {\n return seg;\n }\n }\n\n return null;\n }\n\n function getSegmentByTime(representation, requestedTime) {\n checkConfig();\n\n const periodTime = timelineConverter.calcPeriodRelativeTimeFromMpdRelativeTime(representation, requestedTime);\n const index = getIndexByTime(representation, periodTime);\n\n return getSegmentByIndex(representation, index);\n }\n\n function getIndexByTime(representation, time) {\n if (!representation) {\n return -1;\n }\n\n const segments = representation.segments;\n const ln = segments ? segments.length : null;\n\n let idx = -1;\n let epsilon,\n frag,\n ft,\n fd,\n i;\n\n if (segments && ln > 0) {\n for (i = 0; i < ln; i++) {\n frag = segments[i];\n ft = frag.presentationStartTime;\n fd = frag.duration;\n\n epsilon = fd / 2;\n if ((time + epsilon) >= ft &&\n (time - epsilon) < (ft + fd)) {\n idx = frag.availabilityIdx;\n break;\n }\n }\n }\n\n return idx;\n }\n\n instance = {\n getSegmentByIndex: getSegmentByIndex,\n getSegmentByTime: getSegmentByTime\n };\n\n return instance;\n}\n\nSegmentBaseGetter.__dashjs_factory_name = 'SegmentBaseGetter';\nconst factory = FactoryMaker.getClassFactory(SegmentBaseGetter);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport Segment from './../vo/Segment';\n\nfunction zeroPadToLength(numStr, minStrLength) {\n while (numStr.length < minStrLength) {\n numStr = '0' + numStr;\n }\n return numStr;\n}\n\nfunction getNumberForSegment(segment, segmentIndex) {\n return segment.representation.startNumber + segmentIndex;\n}\n\nexport function unescapeDollarsInTemplate(url) {\n return url ? url.split('$$').join('$') : url;\n}\n\nexport function replaceIDForTemplate(url, value) {\n if (!value || !url || url.indexOf('$RepresentationID$') === -1) { return url; }\n let v = value.toString();\n return url.split('$RepresentationID$').join(v);\n}\n\nexport function replaceTokenForTemplate(url, token, value) {\n const formatTag = '%0';\n\n let startPos,\n endPos,\n formatTagPos,\n specifier,\n width,\n paddedValue;\n\n const tokenLen = token.length;\n const formatTagLen = formatTag.length;\n\n if (!url) {\n return url;\n }\n\n // keep looping round until all instances of have been\n // replaced. once that has happened, startPos below will be -1\n // and the completed url will be returned.\n while (true) {\n\n // check if there is a valid $...$ identifier\n // if not, return the url as is.\n startPos = url.indexOf('$' + token);\n if (startPos < 0) {\n return url;\n }\n\n // the next '$' must be the end of the identifier\n // if there isn't one, return the url as is.\n endPos = url.indexOf('$', startPos + tokenLen);\n if (endPos < 0) {\n return url;\n }\n\n // now see if there is an additional format tag suffixed to\n // the identifier within the enclosing '$' characters\n formatTagPos = url.indexOf(formatTag, startPos + tokenLen);\n if (formatTagPos > startPos && formatTagPos < endPos) {\n\n specifier = url.charAt(endPos - 1);\n width = parseInt(url.substring(formatTagPos + formatTagLen, endPos - 1), 10);\n\n // support the minimum specifiers required by IEEE 1003.1\n // (d, i , o, u, x, and X) for completeness\n switch (specifier) {\n // treat all int types as uint,\n // hence deliberate fallthrough\n case 'd':\n case 'i':\n case 'u':\n paddedValue = zeroPadToLength(value.toString(), width);\n break;\n case 'x':\n paddedValue = zeroPadToLength(value.toString(16), width);\n break;\n case 'X':\n paddedValue = zeroPadToLength(value.toString(16), width).toUpperCase();\n break;\n case 'o':\n paddedValue = zeroPadToLength(value.toString(8), width);\n break;\n default:\n return url;\n }\n } else {\n paddedValue = value;\n }\n\n url = url.substring(0, startPos) + paddedValue + url.substring(endPos + 1);\n }\n}\n\nfunction getSegment(representation, duration, presentationStartTime, mediaStartTime, availabilityStartTime,\n timelineConverter, presentationEndTime, isDynamic, index) {\n let seg = new Segment();\n\n seg.representation = representation;\n seg.duration = duration;\n seg.presentationStartTime = presentationStartTime;\n seg.mediaStartTime = mediaStartTime;\n seg.availabilityStartTime = availabilityStartTime;\n seg.availabilityEndTime = timelineConverter.calcAvailabilityEndTimeFromPresentationTime(presentationEndTime, representation.adaptation.period.mpd, isDynamic);\n seg.wallStartTime = timelineConverter.calcWallTimeForSegment(seg, isDynamic);\n seg.replacementNumber = getNumberForSegment(seg, index);\n seg.availabilityIdx = index;\n\n return seg;\n}\n\nfunction isSegmentAvailable(timelineConverter, representation, segment, isDynamic) {\n const periodEnd = timelineConverter.getPeriodEnd(representation, isDynamic);\n const periodRelativeEnd = timelineConverter.calcPeriodRelativeTimeFromMpdRelativeTime(representation, periodEnd);\n\n const segmentTime = timelineConverter.calcPeriodRelativeTimeFromMpdRelativeTime(representation, segment.presentationStartTime);\n if (segmentTime >= periodRelativeEnd) {\n if (isDynamic) {\n // segment is not available in current period, but it may be segment available in another period that current one (in DVR window)\n // if not (time > segmentAvailabilityRange.end), then return false\n if ( representation.segmentAvailabilityRange && segment.presentationStartTime >= representation.segmentAvailabilityRange.end) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getIndexBasedSegment(timelineConverter, isDynamic, representation, index) {\n let duration,\n presentationStartTime,\n presentationEndTime;\n\n duration = representation.segmentDuration;\n\n /*\n * From spec - If neither @duration attribute nor SegmentTimeline element is present, then the Representation\n * shall contain exactly one Media Segment. The MPD start time is 0 and the MPD duration is obtained\n * in the same way as for the last Media Segment in the Representation.\n */\n if (isNaN(duration)) {\n duration = representation.adaptation.period.duration;\n }\n\n presentationStartTime = parseFloat((representation.adaptation.period.start + (index * duration)).toFixed(5));\n presentationEndTime = parseFloat((presentationStartTime + duration).toFixed(5));\n\n const segment = getSegment(representation, duration, presentationStartTime,\n timelineConverter.calcMediaTimeFromPresentationTime(presentationStartTime, representation),\n timelineConverter.calcAvailabilityStartTimeFromPresentationTime(presentationStartTime, representation.adaptation.period.mpd, isDynamic),\n timelineConverter, presentationEndTime, isDynamic, index);\n\n if (!isSegmentAvailable(timelineConverter, representation, segment, isDynamic)) {\n return null;\n }\n\n return segment;\n}\n\nexport function getTimeBasedSegment(timelineConverter, isDynamic, representation, time, duration, fTimescale, url, range, index, tManifest) {\n const scaledTime = time / fTimescale;\n const scaledDuration = Math.min(duration / fTimescale, representation.adaptation.period.mpd.maxSegmentDuration);\n\n let presentationStartTime,\n presentationEndTime,\n seg;\n\n presentationStartTime = timelineConverter.calcPresentationTimeFromMediaTime(scaledTime, representation);\n presentationEndTime = presentationStartTime + scaledDuration;\n\n seg = getSegment(representation, scaledDuration, presentationStartTime,\n scaledTime,\n representation.adaptation.period.mpd.manifest.loadedTime,\n timelineConverter, presentationEndTime, isDynamic, index);\n\n if (!isSegmentAvailable(timelineConverter, representation, seg, isDynamic)) {\n return null;\n }\n\n seg.replacementTime = tManifest ? tManifest : time;\n\n url = replaceTokenForTemplate(url, 'Number', seg.replacementNumber);\n url = replaceTokenForTemplate(url, 'Time', seg.replacementTime);\n seg.media = url;\n seg.mediaRange = range;\n\n return seg;\n}\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\nimport Constants from '../../streaming/constants/Constants';\n\nimport { replaceTokenForTemplate, getIndexBasedSegment } from './SegmentsUtils';\n\nfunction TemplateSegmentsGetter(config, isDynamic) {\n config = config || {};\n const timelineConverter = config.timelineConverter;\n\n let instance;\n\n function checkConfig() {\n if (!timelineConverter || !timelineConverter.hasOwnProperty('calcPeriodRelativeTimeFromMpdRelativeTime')) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function getSegmentByIndex(representation, index) {\n checkConfig();\n\n if (!representation) {\n return null;\n }\n\n const template = representation.adaptation.period.mpd.manifest.Period_asArray[representation.adaptation.period.index].\n AdaptationSet_asArray[representation.adaptation.index].Representation_asArray[representation.index].SegmentTemplate;\n\n index = Math.max(index, 0);\n\n const seg = getIndexBasedSegment(timelineConverter, isDynamic, representation, index);\n if (seg) {\n seg.replacementTime = (index - 1) * representation.segmentDuration;\n\n let url = template.media;\n url = replaceTokenForTemplate(url, 'Number', seg.replacementNumber);\n url = replaceTokenForTemplate(url, 'Time', seg.replacementTime);\n seg.media = url;\n }\n\n const duration = representation.segmentDuration;\n const availabilityWindow = representation.segmentAvailabilityRange;\n if (isNaN(duration)) {\n representation.availableSegmentsNumber = 1;\n }\n else {\n representation.availableSegmentsNumber = Math.ceil((availabilityWindow.end - availabilityWindow.start) / duration);\n }\n\n return seg;\n }\n\n function getSegmentByTime(representation, requestedTime) {\n checkConfig();\n\n if (!representation) {\n return null;\n }\n\n const duration = representation.segmentDuration;\n\n if (isNaN(duration)) {\n return null;\n }\n\n const periodTime = timelineConverter.calcPeriodRelativeTimeFromMpdRelativeTime(representation, requestedTime);\n const index = Math.floor(periodTime / duration);\n\n return getSegmentByIndex(representation, index);\n }\n\n instance = {\n getSegmentByIndex: getSegmentByIndex,\n getSegmentByTime: getSegmentByTime\n };\n\n return instance;\n}\n\nTemplateSegmentsGetter.__dashjs_factory_name = 'TemplateSegmentsGetter';\nconst factory = FactoryMaker.getClassFactory(TemplateSegmentsGetter);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\nimport Constants from '../../streaming/constants/Constants';\n\nimport { getTimeBasedSegment } from './SegmentsUtils';\n\nfunction TimelineSegmentsGetter(config, isDynamic) {\n\n config = config || {};\n const timelineConverter = config.timelineConverter;\n\n let instance;\n\n function checkConfig() {\n if (!timelineConverter || !timelineConverter.hasOwnProperty('calcMediaTimeFromPresentationTime') ||\n !timelineConverter.hasOwnProperty('calcSegmentAvailabilityRange')) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function iterateSegments(representation, iterFunc) {\n const base = representation.adaptation.period.mpd.manifest.Period_asArray[representation.adaptation.period.index].\n AdaptationSet_asArray[representation.adaptation.index].Representation_asArray[representation.index].SegmentTemplate ||\n representation.adaptation.period.mpd.manifest.Period_asArray[representation.adaptation.period.index].\n AdaptationSet_asArray[representation.adaptation.index].Representation_asArray[representation.index].SegmentList;\n const timeline = base.SegmentTimeline;\n const list = base.SegmentURL_asArray;\n\n let time = 0;\n let scaledTime = 0;\n let availabilityIdx = -1;\n\n let fragments,\n frag,\n i,\n len,\n j,\n repeat,\n repeatEndTime,\n nextFrag,\n fTimescale;\n\n fTimescale = representation.timescale;\n fragments = timeline.S_asArray;\n\n let breakIterator = false;\n\n for (i = 0, len = fragments.length; i < len && !breakIterator; i++) {\n frag = fragments[i];\n repeat = 0;\n if (frag.hasOwnProperty('r')) {\n repeat = frag.r;\n }\n\n // For a repeated S element, t belongs only to the first segment\n if (frag.hasOwnProperty('t')) {\n time = frag.t;\n scaledTime = time / fTimescale;\n }\n\n // This is a special case: \"A negative value of the @r attribute of the S element indicates that the duration indicated in @d attribute repeats until the start of the next S element, the end of the Period or until the\n // next MPD update.\"\n if (repeat < 0) {\n nextFrag = fragments[i + 1];\n\n if (nextFrag && nextFrag.hasOwnProperty('t')) {\n repeatEndTime = nextFrag.t / fTimescale;\n } else {\n const availabilityEnd = representation.segmentAvailabilityRange ? representation.segmentAvailabilityRange.end : (timelineConverter.calcSegmentAvailabilityRange(representation, isDynamic).end);\n repeatEndTime = timelineConverter.calcMediaTimeFromPresentationTime(availabilityEnd, representation);\n representation.segmentDuration = frag.d / fTimescale;\n }\n\n repeat = Math.ceil((repeatEndTime - scaledTime) / (frag.d / fTimescale)) - 1;\n }\n\n for (j = 0; j <= repeat && !breakIterator; j++) {\n availabilityIdx++;\n\n breakIterator = iterFunc(time, scaledTime, base, list, frag, fTimescale, availabilityIdx, i);\n\n if (breakIterator) {\n representation.segmentDuration = frag.d / fTimescale;\n\n // check if there is at least one more segment\n if (j < repeat - 1 || i < len - 1) {\n availabilityIdx++;\n }\n }\n\n time += frag.d;\n scaledTime = time / fTimescale;\n }\n }\n\n representation.availableSegmentsNumber = availabilityIdx;\n }\n\n function getSegmentByIndex(representation, index, lastSegmentTime) {\n checkConfig();\n\n if (!representation) {\n return null;\n }\n\n let segment = null;\n let found = false;\n\n iterateSegments(representation, function (time, scaledTime, base, list, frag, fTimescale, availabilityIdx, i) {\n if (found || lastSegmentTime < 0) {\n let media = base.media;\n let mediaRange = frag.mediaRange;\n\n if (list) {\n media = list[i].media || '';\n mediaRange = list[i].mediaRange;\n }\n\n segment = getTimeBasedSegment(\n timelineConverter,\n isDynamic,\n representation,\n time,\n frag.d,\n fTimescale,\n media,\n mediaRange,\n availabilityIdx,\n frag.tManifest);\n\n return true;\n } else if (scaledTime >= lastSegmentTime - frag.d * 0.5 / fTimescale) { // same logic, if deviation is\n // 50% of segment duration, segment is found if scaledTime is greater than or equal to (startTime of previous segment - half of the previous segment duration)\n found = true;\n }\n\n return false;\n });\n\n return segment;\n }\n\n function getSegmentByTime(representation, requestedTime) {\n checkConfig();\n\n if (!representation) {\n return null;\n }\n\n if (requestedTime === undefined) {\n requestedTime = null;\n }\n\n let segment = null;\n const requiredMediaTime = timelineConverter.calcMediaTimeFromPresentationTime(requestedTime, representation);\n\n iterateSegments(representation, function (time, scaledTime, base, list, frag, fTimescale, availabilityIdx, i) {\n // In some cases when requiredMediaTime = actual end time of the last segment\n // it is possible that this time a bit exceeds the declared end time of the last segment.\n // in this case we still need to include the last segment in the segment list.\n if (requiredMediaTime < (scaledTime + (frag.d / fTimescale))) {\n let media = base.media;\n let mediaRange = frag.mediaRange;\n\n if (list) {\n media = list[i].media || '';\n mediaRange = list[i].mediaRange;\n }\n\n segment = getTimeBasedSegment(\n timelineConverter,\n isDynamic,\n representation,\n time,\n frag.d,\n fTimescale,\n media,\n mediaRange,\n availabilityIdx,\n frag.tManifest);\n\n return true;\n }\n\n return false;\n });\n\n return segment;\n }\n\n\n instance = {\n getSegmentByIndex: getSegmentByIndex,\n getSegmentByTime: getSegmentByTime\n };\n\n return instance;\n}\n\nTimelineSegmentsGetter.__dashjs_factory_name = 'TimelineSegmentsGetter';\nconst factory = FactoryMaker.getClassFactory(TimelineSegmentsGetter);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass AdaptationSet {\n constructor() {\n this.period = null;\n this.index = -1;\n this.type = null;\n }\n}\n\nexport default AdaptationSet;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\n\nconst DEFAULT_DVB_PRIORITY = 1;\nconst DEFAULT_DVB_WEIGHT = 1;\n\nclass BaseURL {\n constructor(url, serviceLocation, priority, weight) {\n this.url = url || '';\n this.serviceLocation = serviceLocation || url || '';\n\n // DVB extensions\n this.dvb_priority = priority || DEFAULT_DVB_PRIORITY;\n this.dvb_weight = weight || DEFAULT_DVB_WEIGHT;\n\n this.availabilityTimeOffset = 0;\n this.availabilityTimeComplete = true;\n\n /* currently unused:\n * byteRange,\n */\n }\n}\n\nBaseURL.DEFAULT_DVB_PRIORITY = DEFAULT_DVB_PRIORITY;\nBaseURL.DEFAULT_DVB_WEIGHT = DEFAULT_DVB_WEIGHT;\n\nexport default BaseURL;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Event {\n constructor() {\n this.duration = NaN;\n this.presentationTime = NaN;\n this.id = NaN;\n this.messageData = '';\n this.eventStream = null;\n this.presentationTimeDelta = NaN; // Specific EMSG Box parameter\n }\n}\n\nexport default Event;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass EventStream {\n constructor() {\n this.adaptionSet = null;\n this.representation = null;\n this.period = null;\n this.timescale = 1;\n this.value = '';\n this.schemeIdUri = '';\n }\n}\n\nexport default EventStream;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Mpd {\n constructor() {\n this.manifest = null;\n this.suggestedPresentationDelay = 0;\n this.availabilityStartTime = null;\n this.availabilityEndTime = Number.POSITIVE_INFINITY;\n this.timeShiftBufferDepth = Number.POSITIVE_INFINITY;\n this.maxSegmentDuration = Number.POSITIVE_INFINITY;\n this.minimumUpdatePeriod = NaN;\n this.mediaPresentationDuration = NaN;\n }\n}\n\nexport default Mpd;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Period {\n constructor() {\n this.id = null;\n this.index = -1;\n this.duration = NaN;\n this.start = NaN;\n this.mpd = null;\n }\n}\n\nPeriod.DEFAULT_ID = 'defaultId';\n\nexport default Period;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\n\nimport DashConstants from '../constants/DashConstants';\n\nclass Representation {\n constructor() {\n this.id = null;\n this.index = -1;\n this.adaptation = null;\n this.segmentInfoType = null;\n this.initialization = null;\n this.codecs = null;\n this.codecPrivateData = null;\n this.segmentDuration = NaN;\n this.timescale = 1;\n this.startNumber = 1;\n this.indexRange = null;\n this.range = null;\n this.presentationTimeOffset = 0;\n // Set the source buffer timeOffset to this\n this.MSETimeOffset = NaN;\n this.segmentAvailabilityRange = null;\n this.availableSegmentsNumber = 0;\n this.bandwidth = NaN;\n this.width = NaN;\n this.height = NaN;\n this.scanType = null;\n this.maxPlayoutRate = NaN;\n this.availabilityTimeOffset = 0;\n this.availabilityTimeComplete = true;\n }\n\n hasInitialization() {\n return (this.initialization !== null || this.range !== null);\n }\n\n hasSegments() {\n return this.segmentInfoType !== DashConstants.BASE_URL &&\n this.segmentInfoType !== DashConstants.SEGMENT_BASE &&\n !this.indexRange;\n }\n}\n\nexport default Representation;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Segment {\n constructor() {\n this.indexRange = null;\n this.index = null;\n this.mediaRange = null;\n this.media = null;\n this.duration = NaN;\n // this is the time that should be inserted into the media url\n this.replacementTime = null;\n // this is the number that should be inserted into the media url\n this.replacementNumber = NaN;\n // This is supposed to match the time encoded in the media Segment\n this.mediaStartTime = NaN;\n // When the source buffer timeOffset is set to MSETimeOffset this is the\n // time that will match the seekTarget and video.currentTime\n this.presentationStartTime = NaN;\n // Do not schedule this segment until\n this.availabilityStartTime = NaN;\n // Ignore and discard this segment after\n this.availabilityEndTime = NaN;\n // The index of the segment inside the availability window\n this.availabilityIdx = NaN;\n // For dynamic mpd's, this is the wall clock time that the video\n // element currentTime should be presentationStartTime\n this.wallStartTime = NaN;\n this.representation = null;\n }\n}\n\nexport default Segment;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass UTCTiming {\n constructor() {\n // UTCTiming is a DescriptorType and doesn't have any additional fields\n this.schemeIdUri = '';\n this.value = '';\n }\n}\n\nexport default UTCTiming;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport OfflineConstants from './constants/OfflineConstants';\nimport OfflineStream from './OfflineStream';\nimport OfflineIndexDBManifestParser from './utils/OfflineIndexDBManifestParser';\nimport OfflineErrors from './errors/OfflineErrors';\nimport DashParser from '../dash/parser/DashParser';\n\nfunction OfflineDownload(config) {\n config = config || {};\n\n const context = this.context;\n const manifestLoader = config.manifestLoader;\n const mediaPlayerModel = config.mediaPlayerModel;\n const abrController = config.abrController;\n const playbackController = config.playbackController;\n const adapter = config.adapter;\n const dashMetrics = config.dashMetrics;\n const timelineConverter = config.timelineConverter;\n const offlineStoreController = config.offlineStoreController;\n const manifestId = config.id;\n const eventBus = config.eventBus;\n const errHandler = config.errHandler;\n const events = config.events;\n const errors = config.errors;\n const settings = config.settings;\n const debug = config.debug;\n const manifestUpdater = config.manifestUpdater;\n const baseURLController = config.baseURLController;\n const constants = config.constants;\n const dashConstants = config.dashConstants;\n const urlUtils = config.urlUtils;\n\n let instance,\n logger,\n _manifestURL,\n _offlineURL,\n _xmlManifest,\n _streams,\n _manifest,\n _isDownloadingStatus,\n _isComposed,\n _representationsToUpdate,\n _indexDBManifestParser,\n _progressionById,\n _progression,\n _status;\n\n\n function setup() {\n logger = debug.getLogger(instance);\n manifestUpdater.initialize();\n _streams = [];\n _isDownloadingStatus = false;\n _isComposed = false;\n _progressionById = {};\n _progression = 0;\n _status = undefined;\n }\n\n function getId() {\n return manifestId;\n }\n\n function getOfflineUrl () {\n return _offlineURL;\n }\n\n function getManifestUrl () {\n return _manifestURL;\n }\n\n function getStatus () {\n return _status;\n }\n\n function setInitialState(state) {\n _offlineURL = state.url;\n _progression = state.progress;\n _manifestURL = state.originalUrl;\n _status = state.status;\n }\n\n /**\n * Download a stream, from url of manifest\n * @param {string} url\n * @instance\n */\n function downloadFromUrl(url) {\n _manifestURL = url;\n _offlineURL = `${OfflineConstants.OFFLINE_SCHEME}://${manifestId}`;\n _status = OfflineConstants.OFFLINE_STATUS_CREATED;\n setupOfflineEvents();\n let offlineManifest = {\n 'fragmentStore': manifestId,\n 'status': _status,\n 'manifestId': manifestId,\n 'url': _offlineURL,\n 'originalURL': url\n };\n return createOfflineManifest(offlineManifest);\n }\n\n function initDownload() {\n manifestLoader.load(_manifestURL);\n _isDownloadingStatus = true;\n }\n\n function setupOfflineEvents() {\n eventBus.on(events.MANIFEST_UPDATED, onManifestUpdated, instance);\n eventBus.on(events.ORIGINAL_MANIFEST_LOADED, onOriginalManifestLoaded, instance);\n setupIndexedDBEvents();\n }\n\n function setupIndexedDBEvents() {\n eventBus.on(events.ERROR, onError, instance);\n }\n\n function isDownloading() {\n return _isDownloadingStatus;\n }\n\n function onManifestUpdated(e) {\n if (_isComposed) {\n return;\n }\n if (!e.error) {\n try {\n _manifest = e.manifest;\n } catch (err) {\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: err.message,\n data: {\n id: manifestId,\n status: _status\n }\n });\n }\n }\n }\n\n function onDownloadingStarted(e) {\n if (e.id !== manifestId) {\n return;\n }\n if (!e.error && manifestId !== null) {\n _status = OfflineConstants.OFFLINE_STATUS_STARTED;\n offlineStoreController.setDownloadingStatus(manifestId, _status).then(function () {\n eventBus.trigger(events.OFFLINE_RECORD_STARTED, {id: manifestId, message: 'Downloading started for this stream !'});\n });\n } else {\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: 'Cannot start download ',\n data: {\n id: manifestId,\n status: _status,\n error: e.error\n }\n });\n }\n }\n\n function OnStreamProgression(stream, downloaded, available) {\n\n _progressionById[stream.getStreamInfo().id] = {\n downloaded,\n available\n };\n\n let segments = 0;\n let allSegments = 0;\n let waitForAllProgress;\n for (var property in _progressionById) {\n if (_progressionById.hasOwnProperty(property)) {\n if (_progressionById[property] === null) {\n waitForAllProgress = true;\n } else {\n segments += _progressionById[property].downloaded;\n allSegments += _progressionById[property].available;\n }\n }\n }\n\n if (!waitForAllProgress) {\n // all progression have been started, we can compute global progression\n _progression = segments / allSegments;\n\n // store progression\n offlineStoreController.getManifestById(manifestId)\n .then((item) => {\n item.progress = _progression;\n return updateOfflineManifest(item);\n });\n }\n }\n\n function onDownloadingFinished(e) {\n if (e.id !== manifestId) {\n return;\n }\n if (!e.error && manifestId !== null) {\n _status = OfflineConstants.OFFLINE_STATUS_FINISHED;\n offlineStoreController.setDownloadingStatus(manifestId, _status)\n .then(function () {\n eventBus.trigger(events.OFFLINE_RECORD_FINISHED, {id: manifestId, message: 'Downloading has been successfully completed for this stream !'});\n resetDownload();\n });\n } else {\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: 'Error finishing download ',\n data: {\n id: manifestId,\n status: _status,\n error: e.error\n }\n });\n }\n }\n\n function onManifestUpdateNeeded(e) {\n if (e.id !== manifestId) {\n return;\n }\n\n _representationsToUpdate = e.representations;\n\n if (_representationsToUpdate.length > 0) {\n _indexDBManifestParser.parse(_xmlManifest, _representationsToUpdate).then(function (parsedManifest) {\n if (parsedManifest !== null && manifestId !== null) {\n offlineStoreController.getManifestById(manifestId)\n .then((item) => {\n item.manifest = parsedManifest;\n return updateOfflineManifest(item);\n })\n .then( function () {\n for (let i = 0, ln = _streams.length; i < ln; i++) {\n _streams[i].startOfflineStreamProcessors();\n }\n });\n } else {\n throw 'falling parsing offline manifest';\n }\n }).catch(function (err) {\n throw err;\n });\n }\n }\n\n function composeStreams() {\n try {\n adapter.updatePeriods(_manifest);\n baseURLController.initialize(_manifest);\n const streamsInfo = adapter.getStreamsInfo();\n if (streamsInfo.length === 0) {\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: 'Cannot download - no streams',\n data: {\n id: manifestId,\n status: _status\n }\n });\n }\n for (let i = 0, ln = streamsInfo.length; i < ln; i++) {\n const streamInfo = streamsInfo[i];\n let stream = OfflineStream(context).create({\n id: manifestId,\n callbacks: {\n started: onDownloadingStarted,\n progression: OnStreamProgression,\n finished: onDownloadingFinished,\n updateManifestNeeded: onManifestUpdateNeeded\n },\n constants: constants,\n dashConstants: dashConstants,\n eventBus: eventBus,\n events: events,\n errors: errors,\n settings: settings,\n debug: debug,\n errHandler: errHandler,\n mediaPlayerModel: mediaPlayerModel,\n abrController: abrController,\n playbackController: playbackController,\n dashMetrics: dashMetrics,\n baseURLController: baseURLController,\n timelineConverter: timelineConverter,\n adapter: adapter,\n offlineStoreController: offlineStoreController\n });\n _streams.push(stream);\n\n // initialise stream and get downloadable representations\n stream.initialize(streamInfo);\n _progressionById[streamInfo.id] = null;\n }\n _isComposed = true;\n } catch (e) {\n logger.info(e);\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: e.message,\n data: {\n id: manifestId,\n status: _status,\n error: e.error\n }\n });\n }\n }\n\n function getMediaInfos() {\n _streams.forEach(stream => {\n stream.getMediaInfos();\n });\n }\n\n /**\n * Init databsse to store fragments\n * @param {number} manifestId\n * @instance\n */\n function createFragmentStore(manifestId) {\n return offlineStoreController.createFragmentStore(manifestId);\n }\n\n /**\n * Store in database the string representation of offline manifest (with only downloaded representations)\n * @param {object} offlineManifest\n * @instance\n */\n function createOfflineManifest(offlineManifest) {\n return offlineStoreController.createOfflineManifest(offlineManifest);\n }\n\n /**\n * Store in database the string representation of offline manifest (with only downloaded representations)\n * @param {object} offlineManifest\n * @instance\n */\n function updateOfflineManifest(offlineManifest) {\n return offlineStoreController.updateOfflineManifest(offlineManifest);\n }\n\n /**\n * Triggered when manifest is loaded from internet.\n * @param {Object[]} e\n */\n function onOriginalManifestLoaded(e) {\n // unregister form event\n eventBus.off(events.ORIGINAL_MANIFEST_LOADED, onOriginalManifestLoaded, instance);\n\n _xmlManifest = e.originalManifest;\n\n if (_manifest.type === dashConstants.DYNAMIC) {\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: 'Cannot handle DYNAMIC manifest',\n data: {\n id: manifestId,\n status: _status\n }\n });\n logger.error('Cannot handle DYNAMIC manifest');\n\n return;\n }\n\n if (_manifest.Period_asArray.length > 1) {\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: 'MultiPeriod manifest are not yet supported',\n data: {\n id: manifestId,\n status: _status\n }\n });\n logger.error('MultiPeriod manifest are not yet supported');\n\n return;\n }\n\n // save original manifest (for resume)\n\n // initialise offline streams\n composeStreams(_manifest);\n\n // get MediaInfos\n getMediaInfos();\n\n eventBus.trigger(events.STREAMS_COMPOSED);\n }\n\n function initializeAllMediasInfoList(selectedRepresentations) {\n for (let i = 0; i < _streams.length; i++) {\n _streams[i].initializeAllMediasInfoList(selectedRepresentations);\n }\n }\n\n function getSelectedRepresentations(mediaInfos) {\n let rep = {};\n rep[constants.VIDEO] = [];\n rep[constants.AUDIO] = [];\n rep[constants.TEXT] = [];\n rep[constants.FRAGMENTED_TEXT] = [];\n\n // selectedRepresentations.video.forEach(item => {\n // ret[constants.VIDEO].push(item.id);\n // });\n // selectedRepresentations.audio.forEach(item => {\n // ret[constants.AUDIO].push(item.id);\n // });\n // selectedRepresentations.text.forEach(item => {\n // ret[item.type].push(item.id);\n // });\n\n mediaInfos.forEach(mediaInfo => {\n mediaInfo.bitrateList.forEach(bitrate => {\n rep[mediaInfo.type].push(bitrate.id);\n });\n });\n return rep;\n }\n\n function startDownload(mediaInfos) {\n try {\n let rep = getSelectedRepresentations(mediaInfos);\n\n offlineStoreController.saveSelectedRepresentations(manifestId, rep)\n .then(() => {\n return createFragmentStore(manifestId);\n })\n .then(() => {\n return generateOfflineManifest(rep);\n })\n .then(function () {\n initializeAllMediasInfoList(rep);\n });\n } catch (err) {\n _status = OfflineConstants.OFFLINE_STATUS_ERROR;\n errHandler.error({\n code: OfflineErrors.OFFLINE_ERROR,\n message: err.message,\n data: {\n id: manifestId,\n status: _status\n }\n });\n }\n }\n\n /**\n * Create the parser used to convert original manifest in offline manifest\n * Creates a JSON object that will be stored in database\n * @param {Object[]} selectedRepresentations\n * @instance\n */\n function generateOfflineManifest(selectedRepresentations) {\n _indexDBManifestParser = OfflineIndexDBManifestParser(context).create({\n manifestId: manifestId,\n allMediaInfos: selectedRepresentations,\n debug: debug,\n dashConstants: dashConstants,\n constants: constants,\n urlUtils: urlUtils\n });\n\n return _indexDBManifestParser.parse(_xmlManifest).then(function (parsedManifest) {\n if (parsedManifest !== null) {\n return offlineStoreController.getManifestById(manifestId)\n .then((item) => {\n item.originalURL = _manifest.url;\n item.originalManifest = _xmlManifest;\n item.manifest = parsedManifest;\n return updateOfflineManifest(item);\n });\n } else {\n return Promise.reject('falling parsing offline manifest');\n }\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Stops downloading of fragments\n * @instance\n */\n function stopDownload() {\n if (manifestId !== null && isDownloading()) {\n for (let i = 0, ln = _streams.length; i < ln; i++) {\n _streams[i].stopOfflineStreamProcessors();\n }\n\n // remove streams\n _streams = [];\n\n _isComposed = false;\n\n _status = OfflineConstants.OFFLINE_STATUS_STOPPED;\n // update status\n offlineStoreController.setDownloadingStatus(manifestId, _status).then(function () {\n eventBus.trigger(events.OFFLINE_RECORD_STOPPED, {\n sender: this,\n id: manifestId,\n status: _status,\n message: 'Downloading has been stopped for this stream !'\n });\n _isDownloadingStatus = false;\n });\n }\n }\n\n /**\n * Delete an offline manifest (and all of its data)\n * @instance\n */\n function deleteDownload() {\n stopDownload();\n }\n\n /**\n * Resume download of a stream\n * @instance\n */\n function resumeDownload() {\n if (isDownloading()) {\n return;\n }\n\n _isDownloadingStatus = true;\n\n let selectedRepresentations;\n\n offlineStoreController.getManifestById(manifestId)\n .then((item) => {\n let parser = DashParser(context).create({debug: debug});\n _manifest = parser.parse(item.originalManifest);\n\n composeStreams(_manifest);\n\n selectedRepresentations = item.selected;\n\n eventBus.trigger(events.STREAMS_COMPOSED);\n\n return createFragmentStore(manifestId);\n }). then(() => {\n initializeAllMediasInfoList(selectedRepresentations);\n });\n }\n\n /**\n * Compute the progression of download\n * @instance\n */\n function getDownloadProgression() {\n return Math.round(_progression * 100);\n }\n\n /**\n * Reset events listeners\n * @instance\n */\n function resetDownload() {\n for (let i = 0, ln = _streams.length; i < ln; i++) {\n _streams[i].reset();\n }\n _indexDBManifestParser = null;\n _isDownloadingStatus = false;\n _streams = [];\n eventBus.off(events.MANIFEST_UPDATED, onManifestUpdated, instance);\n eventBus.off(events.ORIGINAL_MANIFEST_LOADED, onOriginalManifestLoaded, instance);\n resetIndexedDBEvents();\n }\n\n function onError(e) {\n if ( e.error.code === OfflineErrors.INDEXEDDB_QUOTA_EXCEED_ERROR ||\n e.error.code === OfflineErrors.INDEXEDDB_INVALID_STATE_ERROR ) {\n stopDownload();\n }\n }\n\n function resetIndexedDBEvents() {\n eventBus.on(events.ERROR, onError, instance);\n }\n\n /**\n * Reset\n * @instance\n */\n function reset() {\n if (isDownloading()) {\n resetDownload();\n }\n baseURLController.reset();\n manifestUpdater.reset();\n }\n\n instance = {\n reset: reset,\n getId: getId,\n getOfflineUrl: getOfflineUrl,\n getManifestUrl: getManifestUrl,\n getStatus: getStatus,\n setInitialState: setInitialState,\n initDownload: initDownload,\n downloadFromUrl: downloadFromUrl,\n startDownload: startDownload,\n stopDownload: stopDownload,\n resumeDownload: resumeDownload,\n deleteDownload: deleteDownload,\n getDownloadProgression: getDownloadProgression,\n isDownloading: isDownloading,\n resetDownload: resetDownload\n };\n\n setup();\n\n return instance;\n}\n\nOfflineDownload.__dashjs_factory_name = 'OfflineDownload';\nexport default dashjs.FactoryMaker.getClassFactory(OfflineDownload); /* jshint ignore:line */\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport OfflineStreamProcessor from './OfflineStreamProcessor';\n\n/**\n * Initialize and Manage Offline Stream for each type\n */\n/**\n * @class OfflineStream\n * @description Initialize and Manage Offline Stream for each type\n * @param {Object} config - dependences\n * @ignore\n */\nfunction OfflineStream(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;\n const events = config.events;\n const errors = config.errors;\n const constants = config.constants;\n const dashConstants = config.dashConstants;\n const settings = config.settings;\n const debug = config.debug;\n const errHandler = config.errHandler;\n const mediaPlayerModel = config.mediaPlayerModel;\n const abrController = config.abrController;\n const playbackController = config.playbackController;\n const adapter = config.adapter;\n const dashMetrics = config.dashMetrics;\n const baseURLController = config.baseURLController;\n const timelineConverter = config.timelineConverter;\n const offlineStoreController = config.offlineStoreController;\n const manifestId = config.id;\n const startedCb = config.callbacks && config.callbacks.started;\n const progressionCb = config.callbacks && config.callbacks.progression;\n const finishedCb = config.callbacks && config.callbacks.finished;\n const updateManifest = config.callbacks && config.callbacks.updateManifestNeeded;\n\n let instance,\n offlineStreamProcessors,\n startedOfflineStreamProcessors,\n finishedOfflineStreamProcessors,\n streamInfo,\n representationsToUpdate,\n allMediasInfosList,\n progressionById;\n\n function setup() {\n resetInitialSettings();\n }\n\n /**\n * Reset\n */\n function resetInitialSettings() {\n streamInfo = null;\n offlineStreamProcessors = [];\n startedOfflineStreamProcessors = 0;\n finishedOfflineStreamProcessors = 0;\n allMediasInfosList = [];\n representationsToUpdate = [];\n progressionById = {};\n }\n\n /**\n * Initialize offlinestream\n * @param {Object} initStreamInfo\n */\n function initialize(initStreamInfo) {\n streamInfo = initStreamInfo;\n eventBus.on(events.DATA_UPDATE_COMPLETED, onDataUpdateCompleted, this);\n }\n\n /**\n * Creates media infos list, so that user will be able to choose the representation he wants to download\n */\n function getMediaInfos() {\n let mediaInfos = adapter.getAllMediaInfoForType(streamInfo, constants.VIDEO);\n mediaInfos = mediaInfos.concat(adapter.getAllMediaInfoForType(streamInfo, constants.AUDIO));\n mediaInfos = mediaInfos.concat(adapter.getAllMediaInfoForType(streamInfo, constants.FRAGMENTED_TEXT));\n mediaInfos = mediaInfos.concat(adapter.getAllMediaInfoForType(streamInfo, constants.TEXT));\n\n // mediaInfos = mediaInfos.concat(adapter.getAllMediaInfoForType(streamInfo, constants.MUXED));\n // mediaInfos = mediaInfos.concat(adapter.getAllMediaInfoForType(streamInfo, constants.IMAGE));\n\n eventBus.trigger(events.OFFLINE_RECORD_LOADEDMETADATA, {\n id: manifestId,\n mediaInfos: mediaInfos\n });\n }\n\n /**\n * Initialize with choosen representations by user\n * @param {Object} mediasInfoList\n */\n function initializeAllMediasInfoList(mediasInfoList) {\n allMediasInfosList = mediasInfoList;\n initializeMedia(streamInfo);\n }\n\n /**\n * Initialize media for each type\n * @param {Object} streamInfo\n */\n function initializeMedia(streamInfo) {\n createOfflineStreamProcessorFor(constants.VIDEO,streamInfo);\n createOfflineStreamProcessorFor(constants.AUDIO,streamInfo);\n createOfflineStreamProcessorFor(constants.FRAGMENTED_TEXT,streamInfo);\n createOfflineStreamProcessorFor(constants.TEXT,streamInfo);\n\n createOfflineStreamProcessorFor(constants.MUXED,streamInfo);\n createOfflineStreamProcessorFor(constants.IMAGE,streamInfo);\n }\n\n function createOfflineStreamProcessorFor(type, streamInfo) {\n // filter mediaInfo according to choosen representation id\n let allMediaInfoForType = adapter.getAllMediaInfoForType(streamInfo, type);\n allMediaInfoForType.forEach((media) => {\n media.bitrateList = media.bitrateList.filter((bitrate) => {\n if (allMediasInfosList[type] && allMediasInfosList[type].indexOf(bitrate.id) !== -1) {\n return true;\n }\n return false;\n });\n });\n\n allMediaInfoForType = allMediaInfoForType.filter((media) => {\n return (media.bitrateList && media.bitrateList.length > 0);\n });\n\n // cration of an offline stream processor for each choosen representation\n allMediaInfoForType.forEach((mediaInfo) => {\n if (mediaInfo.bitrateList) {\n mediaInfo.bitrateList.forEach((bitrate) => {\n createStreamProcessor(mediaInfo, bitrate);\n });\n }\n });\n return allMediaInfoForType;\n }\n\n function createStreamProcessor (mediaInfo, bitrate) {\n\n let streamProcessor = OfflineStreamProcessor(context).create({\n id: manifestId,\n streamInfo: streamInfo,\n debug: debug,\n events: events,\n errors: errors,\n eventBus: eventBus,\n constants: constants,\n dashConstants: dashConstants,\n settings: settings,\n type: mediaInfo.type,\n mimeType: mediaInfo.mimeType,\n bitrate: bitrate,\n errHandler: errHandler,\n mediaPlayerModel: mediaPlayerModel,\n abrController: abrController,\n playbackController: playbackController,\n adapter: adapter,\n dashMetrics: dashMetrics,\n baseURLController: baseURLController,\n timelineConverter: timelineConverter,\n offlineStoreController: offlineStoreController,\n callbacks: {\n completed: onStreamCompleted,\n progression: onStreamProgression\n }\n });\n offlineStreamProcessors.push(streamProcessor);\n streamProcessor.initialize(mediaInfo);\n\n progressionById[bitrate.id] = null;\n }\n\n function onStreamCompleted() {\n finishedOfflineStreamProcessors++;\n if (finishedOfflineStreamProcessors === offlineStreamProcessors.length) {\n finishedCb({sender: this, id: manifestId, message: 'Downloading has been successfully completed for this stream !'});\n }\n }\n\n function onStreamProgression(streamProcessor, downloadedSegments, availableSegments ) {\n progressionById[streamProcessor.getRepresentationId()] = {\n downloadedSegments,\n availableSegments\n };\n\n let segments = 0;\n let allSegments = 0;\n let waitForAllProgress;\n for (var property in progressionById) {\n if (progressionById.hasOwnProperty(property)) {\n if (progressionById[property] === null) {\n waitForAllProgress = true;\n } else {\n segments += progressionById[property].downloadedSegments;\n allSegments += progressionById[property].availableSegments;\n }\n }\n }\n\n if (!waitForAllProgress && progressionCb) {\n // all progression have been started, we can compute global progression\n if (allSegments > 0) {\n progressionCb(instance, segments, allSegments);\n }\n }\n }\n\n function onDataUpdateCompleted(e) {\n let repCtrl = e.sender;\n if (!streamInfo || repCtrl.getStreamId() !== streamInfo.id) return;\n\n if (e.currentRepresentation.segments && e.currentRepresentation.segments.length > 0) {\n representationsToUpdate.push(e.currentRepresentation);\n }\n\n let sp;\n // data are ready fr stream processor, let's start download\n for (let i = 0; i < offlineStreamProcessors.length; i++ ) {\n if (offlineStreamProcessors[i].getRepresentationController().getType() === repCtrl.getType()) {\n sp = offlineStreamProcessors[i];\n break;\n }\n }\n\n if (sp) {\n checkIfAllOfflineStreamProcessorsStarted();\n }\n }\n\n function checkIfAllOfflineStreamProcessorsStarted() {\n startedOfflineStreamProcessors++;\n if (startedOfflineStreamProcessors === offlineStreamProcessors.length) {\n startedCb({sender: this, id: manifestId, message: 'Downloading started for this stream !'});\n\n if (representationsToUpdate.length > 0) {\n updateManifest({sender: this, id: manifestId, representations: representationsToUpdate });\n } else {\n startOfflineStreamProcessors();\n }\n }\n }\n\n function getStreamInfo() {\n return streamInfo;\n }\n\n function getStartTime() {\n return streamInfo ? streamInfo.start : NaN;\n }\n\n function getDuration() {\n return streamInfo ? streamInfo.duration : NaN;\n }\n\n /**\n * Stop offline stream processors\n */\n function stopOfflineStreamProcessors() {\n for (let i = 0; i < offlineStreamProcessors.length; i++) {\n offlineStreamProcessors[i].stop();\n }\n }\n\n /**\n * Start offline stream processors\n */\n function startOfflineStreamProcessors() {\n for (let i = 0; i < offlineStreamProcessors.length; i++) {\n offlineStreamProcessors[i].start();\n }\n }\n\n function deactivate() {\n let ln = offlineStreamProcessors ? offlineStreamProcessors.length : 0;\n for (let i = 0; i < ln; i++) {\n offlineStreamProcessors[i].removeExecutedRequestsBeforeTime(getStartTime() + getDuration());\n offlineStreamProcessors[i].reset();\n }\n }\n\n /**\n * Reset\n */\n function reset() {\n stopOfflineStreamProcessors();\n deactivate();\n resetInitialSettings();\n\n eventBus.off(events.DATA_UPDATE_COMPLETED, onDataUpdateCompleted, this);\n }\n\n instance = {\n initialize: initialize,\n getMediaInfos: getMediaInfos,\n initializeAllMediasInfoList: initializeAllMediasInfoList,\n getStreamInfo: getStreamInfo,\n stopOfflineStreamProcessors: stopOfflineStreamProcessors,\n startOfflineStreamProcessors: startOfflineStreamProcessors,\n reset: reset\n };\n\n setup();\n return instance;\n}\n\nOfflineStream.__dashjs_factory_name = 'OfflineStream';\nexport default dashjs.FactoryMaker.getClassFactory(OfflineStream); /* jshint ignore:line */\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport DashHandler from '../dash/DashHandler';\nimport RepresentationController from '../dash/controllers/RepresentationController';\nimport FragmentModel from '../streaming/models/FragmentModel';\nimport FragmentLoader from '../streaming/FragmentLoader';\nimport URLUtils from '../streaming/utils/URLUtils';\nimport RequestModifier from '../streaming/utils/RequestModifier';\n\n\nfunction OfflineStreamProcessor(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;\n const events = config.events;\n const errors = config.errors;\n const debug = config.debug;\n const constants = config.constants;\n const settings = config.settings;\n const dashConstants = config.dashConstants;\n const manifestId = config.id;\n const type = config.type;\n const streamInfo = config.streamInfo;\n const errHandler = config.errHandler;\n const mediaPlayerModel = config.mediaPlayerModel;\n const abrController = config.abrController;\n const playbackController = config.playbackController;\n const adapter = config.adapter;\n const dashMetrics = config.dashMetrics;\n const baseURLController = config.baseURLController;\n const timelineConverter = config.timelineConverter;\n const bitrate = config.bitrate;\n const offlineStoreController = config.offlineStoreController;\n const completedCb = config.callbacks && config.callbacks.completed;\n const progressCb = config.callbacks && config.callbacks.progression;\n\n let instance,\n logger,\n mediaInfo,\n indexHandler,\n representationController,\n fragmentModel,\n updating,\n downloadedSegments,\n isInitialized,\n isStopped;\n\n function setup() {\n resetInitialSettings();\n logger = debug.getLogger(instance);\n\n indexHandler = DashHandler(context).create({\n streamInfo: streamInfo,\n type: type,\n timelineConverter: timelineConverter,\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n baseURLController: baseURLController,\n errHandler: errHandler,\n settings: settings,\n // boxParser: boxParser,\n eventBus: eventBus,\n events: events,\n debug: debug,\n requestModifier: RequestModifier(context).getInstance(),\n dashConstants: dashConstants,\n constants: constants,\n urlUtils: URLUtils(context).getInstance()\n });\n\n representationController = RepresentationController(context).create({\n streamId: streamInfo.id,\n type: type,\n abrController: abrController,\n dashMetrics: dashMetrics,\n playbackController: playbackController,\n timelineConverter: timelineConverter,\n dashConstants: dashConstants,\n events: events,\n eventBus: eventBus,\n errors: errors\n });\n\n fragmentModel = FragmentModel(context).create({\n streamId: streamInfo.id,\n dashMetrics: dashMetrics,\n fragmentLoader: FragmentLoader(context).create({\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n errHandler: errHandler,\n requestModifier: RequestModifier(context).getInstance(),\n settings: settings,\n eventBus: eventBus,\n events: events,\n errors: errors,\n constants: constants,\n dashConstants: dashConstants,\n urlUtils: URLUtils(context).getInstance()\n }),\n debug: debug,\n eventBus: eventBus,\n events: events\n });\n\n eventBus.on(events.STREAM_COMPLETED, onStreamCompleted, instance);\n eventBus.on(events.FRAGMENT_LOADING_COMPLETED, onFragmentLoadingCompleted, instance);\n }\n\n function initialize(_mediaInfo) {\n mediaInfo = _mediaInfo;\n indexHandler.initialize(false);\n updateRepresentation(mediaInfo);\n }\n\n function isInitRequest(request) {\n return request.type === 'InitializationSegment';\n }\n\n function onFragmentLoadingCompleted(e) {\n if (e.sender !== fragmentModel) {\n return;\n }\n\n if (e.request !== null) {\n let isInit = isInitRequest(e.request);\n let suffix = isInit ? 'init' : e.request.index;\n let fragmentName = e.request.representationId + '_' + suffix;\n offlineStoreController.storeFragment(manifestId, fragmentName, e.response)\n .then(() => {\n if (!isInit) {\n // store current index and downloadedSegments number\n offlineStoreController.setRepresentationCurrentState(manifestId, e.request.representationId, {\n index: e.request.index,\n downloaded: downloadedSegments\n } );\n }\n });\n }\n\n if (e.error && e.request.serviceLocation && !isStopped) {\n fragmentModel.executeRequest(e.request);\n } else {\n downloadedSegments++;\n download();\n }\n }\n\n function onStreamCompleted(e) {\n if (e.fragmentModel !== fragmentModel) {\n return;\n }\n logger.info(`[${manifestId}] Stream is complete`);\n stop();\n completedCb();\n }\n\n function getRepresentationController () {\n return representationController;\n }\n\n function getRepresentationId() {\n return representationController.getCurrentRepresentation().id;\n }\n\n /**\n * Stops download of fragments\n * @memberof OfflineStreamProcessor#\n */\n function stop() {\n if (isStopped) {\n return;\n }\n isStopped = true;\n }\n\n\n function removeExecutedRequestsBeforeTime(time) {\n if (fragmentModel) {\n fragmentModel.removeExecutedRequestsBeforeTime(time);\n }\n }\n\n /**\n * Execute init request for the represenation\n * @memberof OfflineStreamProcessor#\n */\n function getInitRequest() {\n if (!representationController.getCurrentRepresentation()) {\n return null;\n }\n\n return indexHandler.getInitRequest(getMediaInfo(), representationController.getCurrentRepresentation());\n }\n\n /**\n * Get next request\n * @memberof OfflineStreamProcessor#\n */\n function getNextRequest() {\n return indexHandler.getNextSegmentRequest(getMediaInfo(), representationController.getCurrentRepresentation());\n }\n\n /**\n * Start download\n * @memberof OfflineStreamProcessor#\n */\n function start() {\n if (representationController) {\n if (!representationController.getCurrentRepresentation()) {\n throw new Error('Start denied to OfflineStreamProcessor');\n }\n isStopped = false;\n\n offlineStoreController.getRepresentationCurrentState(manifestId, representationController.getCurrentRepresentation().id)\n .then((state) => {\n if (state) {\n indexHandler.setCurrentIndex(state.index);\n downloadedSegments = state.downloaded;\n }\n download();\n }).catch(() => {\n // start from beginining\n download();\n });\n }\n }\n\n /**\n * Performs download of fragment according to type\n * @memberof OfflineStreamProcessor#\n */\n function download() {\n if (isStopped) {\n return;\n }\n\n if (isNaN(representationController.getCurrentRepresentation())) {\n let request = null;\n if (!isInitialized) {\n request = getInitRequest();\n isInitialized = true;\n } else {\n request = getNextRequest();\n\n // update progression : done here because availableSegmentsNumber is done in getNextRequest from dash handler\n updateProgression();\n }\n\n if (request) {\n logger.info(`[${manifestId}] download request : ${request.url}`);\n fragmentModel.executeRequest(request);\n } else {\n logger.info(`[${manifestId}] no request to be downloaded`);\n }\n }\n }\n\n /**\n * Update representation\n * @param {Object} mediaInfo - mediaInfo\n * @memberof OfflineStreamProcessor#\n */\n function updateRepresentation(mediaInfo) {\n updating = true;\n\n let voRepresentations = adapter.getVoRepresentations(mediaInfo);\n\n // get representation VO according to id.\n let quality = voRepresentations.findIndex((representation) => {\n return representation.id === bitrate.id;\n });\n\n if (type !== constants.VIDEO && type !== constants.AUDIO && type !== constants.TEXT && type !== constants.FRAGMENTED_TEXT) {\n updating = false;\n return;\n }\n\n representationController.updateData(null, voRepresentations, type, quality);\n }\n\n function isUpdating() {\n return updating;\n }\n\n function getType() {\n return type;\n }\n\n function getMediaInfo() {\n return mediaInfo;\n }\n\n function getAvailableSegmentsNumber() {\n return representationController.getCurrentRepresentation().availableSegmentsNumber + 1; // do not forget init segment\n }\n\n function updateProgression () {\n if (progressCb) {\n progressCb(instance, downloadedSegments, getAvailableSegmentsNumber());\n }\n }\n\n function resetInitialSettings() {\n isInitialized = false;\n downloadedSegments = 0;\n updating = false;\n }\n\n /**\n * Reset\n * @memberof OfflineStreamProcessor#\n */\n function reset() {\n resetInitialSettings();\n indexHandler.reset();\n\n eventBus.off(events.STREAM_COMPLETED, onStreamCompleted, instance);\n eventBus.off(events.FRAGMENT_LOADING_COMPLETED, onFragmentLoadingCompleted, instance);\n }\n\n instance = {\n initialize: initialize,\n getMediaInfo: getMediaInfo,\n getRepresentationController: getRepresentationController,\n removeExecutedRequestsBeforeTime: removeExecutedRequestsBeforeTime,\n getType: getType,\n getRepresentationId: getRepresentationId,\n isUpdating: isUpdating,\n start: start,\n stop: stop,\n getAvailableSegmentsNumber: getAvailableSegmentsNumber,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\nOfflineStreamProcessor.__dashjs_factory_name = 'OfflineStreamProcessor';\nconst factory = dashjs.FactoryMaker.getClassFactory(OfflineStreamProcessor); /* jshint ignore:line */\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Offline constants declaration\n * @class\n * @ignore\n */\nclass OfflineConstants {\n\n init() {\n this.OFFLINE_SCHEME = 'offline_indexeddb';\n this.OFFLINE_URL_REGEX = /^offline_indexeddb:\\/\\//i;\n this.OFFLINE_STATUS_CREATED = 'created';\n this.OFFLINE_STATUS_STARTED = 'started';\n this.OFFLINE_STATUS_STOPPED = 'stopped';\n this.OFFLINE_STATUS_FINISHED = 'finished';\n this.OFFLINE_STATUS_ERROR = 'error';\n }\n\n constructor () {\n this.init();\n }\n}\n\nlet constants = new OfflineConstants();\nexport default constants;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport OfflineConstants from '../constants/OfflineConstants';\nimport OfflineStoreController from './OfflineStoreController';\nimport OfflineDownload from '../OfflineDownload';\nimport IndexDBOfflineLoader from '../net/IndexDBOfflineLoader';\nimport OfflineUrlUtils from '../utils/OfflineUrlUtils';\nimport OfflineEvents from '../events/OfflineEvents';\nimport OfflineErrors from '../errors/OfflineErrors';\nimport OfflineRecord from '../vo/OfflineDownloadVo';\n\n/**\n * @module OfflineController\n * @param {Object} config - dependencies\n * @description Provides access to offline stream recording and playback functionality.\n */\nfunction OfflineController(config) {\n\n const context = this.context;\n const errHandler = config.errHandler;\n const events = config.events;\n const errors = config.errors;\n const settings = config.settings;\n const eventBus = config.eventBus;\n const debug = config.debug;\n const manifestLoader = config.manifestLoader;\n const manifestModel = config.manifestModel;\n const mediaPlayerModel = config.mediaPlayerModel;\n const abrController = config.abrController;\n const playbackController = config.playbackController;\n const dashMetrics = config.dashMetrics;\n const timelineConverter = config.timelineConverter;\n const adapter = config.adapter;\n const manifestUpdater = config.manifestUpdater;\n const baseURLController = config.baseURLController;\n const schemeLoaderFactory = config.schemeLoaderFactory;\n const constants = config.constants;\n const dashConstants = config.dashConstants;\n const urlUtils = config.urlUtils;\n\n let instance,\n downloads,\n logger,\n offlineStoreController,\n offlineUrlUtils;\n\n function setup() {\n logger = debug.getLogger(instance);\n offlineStoreController = OfflineStoreController(context).create({\n eventBus: config.eventBus,\n errHandler: errHandler\n });\n offlineUrlUtils = OfflineUrlUtils(context).getInstance();\n urlUtils.registerUrlRegex(offlineUrlUtils.getRegex(), offlineUrlUtils);\n schemeLoaderFactory.registerLoader(OfflineConstants.OFFLINE_SCHEME, IndexDBOfflineLoader);\n\n downloads = [];\n }\n\n /*\n ---------------------------------------------------------------------------\n DOWNLOAD LIST FUNCTIONS\n ---------------------------------------------------------------------------\n */\n function getDownloadFromId(id) {\n let download = downloads.find((item) => {\n return item.getId() === id;\n });\n return download;\n }\n\n function createDownloadFromId(id) {\n let download;\n download = getDownloadFromId(id);\n\n if (!download) {\n // create download controller\n download = OfflineDownload(context).create({\n id: id,\n eventBus: eventBus,\n events: events,\n errors: errors,\n settings: settings,\n manifestLoader: manifestLoader,\n manifestModel: manifestModel,\n mediaPlayerModel: mediaPlayerModel,\n manifestUpdater: manifestUpdater,\n baseURLController: baseURLController,\n abrController: abrController,\n playbackController: playbackController,\n adapter: adapter,\n dashMetrics: dashMetrics,\n timelineConverter: timelineConverter,\n errHandler: errHandler,\n offlineStoreController: offlineStoreController,\n debug: debug,\n constants: constants,\n dashConstants: dashConstants,\n urlUtils: urlUtils\n });\n\n downloads.push(download);\n }\n\n return download;\n }\n\n function createDownloadFromStorage(offline) {\n let download = getDownloadFromId(offline.manifestId);\n\n if (!download) {\n download = createDownloadFromId(offline.manifestId);\n let status = offline.status;\n if (status === OfflineConstants.OFFLINE_STATUS_STARTED) {\n status = OfflineConstants.OFFLINE_STATUS_STOPPED;\n }\n\n download.setInitialState({\n url: offline.url,\n progress: offline.progress,\n originalUrl: offline.originalURL,\n status: status\n });\n }\n\n return download;\n }\n\n function removeDownloadFromId(id) {\n return new Promise(function (resolve, reject) {\n let download = getDownloadFromId(id);\n let waitForStatusChanged = false;\n if (download) {\n //is download running?\n if (download.isDownloading()) {\n //register status changed event\n waitForStatusChanged = true;\n const downloadStopped = function () {\n eventBus.off(events.OFFLINE_RECORD_STOPPED, downloadStopped, instance);\n return offlineStoreController.deleteDownloadById(id).then(function () {\n resolve();\n }).catch(function (err) {\n reject(err);\n });\n };\n eventBus.on(events.OFFLINE_RECORD_STOPPED, downloadStopped, instance);\n }\n download.deleteDownload();\n let index = downloads.indexOf(download);\n downloads.splice(index, 1);\n }\n\n if (!waitForStatusChanged) {\n resolve();\n }\n });\n }\n\n function generateManifestId() {\n let timestamp = new Date().getTime();\n return timestamp;\n }\n\n /*\n ---------------------------------------------------------------------------\n\n OFFLINE CONTROLLER API\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Loads records from storage\n * This methods has to be called first, to be sure that all downloads have been loaded\n *\n * @return {Promise} asynchronously resolved\n * @memberof module:OfflineController\n */\n function loadRecordsFromStorage() {\n return new Promise(function (resolve, reject) {\n offlineStoreController.getAllManifests().then((items) => {\n items.manifests.forEach((offline) => {\n createDownloadFromStorage(offline);\n });\n\n resolve();\n }).catch((e) => {\n logger.error('Failed to load downloads ' + e);\n reject(e);\n });\n });\n }\n\n /**\n * Get all records from storage\n *\n * @return {Promise} asynchronously resolved with records\n * @memberof module:OfflineController\n * @instance\n */\n function getAllRecords() {\n let records = [];\n downloads.forEach((download) => {\n const record = new OfflineRecord();\n record.id = download.getId();\n record.progress = download.getDownloadProgression();\n record.url = download.getOfflineUrl();\n record.originalUrl = download.getManifestUrl();\n record.status = download.getStatus();\n records.push(record);\n });\n return records;\n }\n\n /**\n * Create a new content record in storage and download manifest from url\n *\n * @param {string} manifestURL - the content manifest url\n * @return {Promise} asynchronously resolved with record identifier\n * @memberof module:OfflineController\n * @instance\n */\n function createRecord(manifestURL) {\n return new Promise(function (resolve, reject) {\n let id = generateManifestId();\n\n // create download controller\n let download = createDownloadFromId(id);\n\n download.downloadFromUrl(manifestURL).then(() => {\n download.initDownload();\n resolve(id);\n })\n .catch((e) => {\n logger.error('Failed to download ' + e);\n removeDownloadFromId(id).then(function () {\n reject(e);\n });\n });\n });\n }\n\n /**\n * Start downloading the record with selected tracks representations\n *\n * @param {string} id - record identifier\n * @param {MediaInfo[]} mediaInfos - the selected tracks representations\n * @memberof module:OfflineController\n * @instance\n */\n function startRecord(id, mediaInfos) {\n let download = getDownloadFromId(id);\n if (download) {\n download.startDownload(mediaInfos);\n }\n }\n\n /**\n * Stop downloading of the record\n *\n * @param {string} id - record identifier\n * @memberof module:OfflineController\n * @instance\n */\n function stopRecord(id) {\n let download = getDownloadFromId(id);\n if (download) {\n download.stopDownload();\n }\n }\n\n /**\n * Resume downloading of the record\n *\n * @param {string} id - record identifier\n * @memberof module:OfflineController\n * @instance\n */\n function resumeRecord(id) {\n let download = getDownloadFromId(id);\n if (download) {\n download.resumeDownload();\n }\n }\n\n /**\n * Deletes a record from storage\n *\n * @param {string} id - record identifier\n * @memberof module:OfflineController\n * @instance\n */\n function deleteRecord(id) {\n return removeDownloadFromId(id).then(function () {\n return offlineStoreController.deleteDownloadById(id);\n });\n }\n\n\n /**\n * Get download progression of a record\n *\n * @param {string} id - record identifier\n * @return {number} percentage progression\n * @memberof module:OfflineController\n * @instance\n */\n function getRecordProgression(id) {\n let download = getDownloadFromId(id);\n if (download) {\n return download.getDownloadProgression();\n }\n return 0;\n }\n\n /**\n * Reset all records\n * @memberof module:OfflineController\n * @instance\n */\n function resetRecords() {\n downloads.forEach((download) => {\n download.resetDownload();\n });\n }\n\n /**\n * Reset\n * @instance\n */\n function reset() {\n resetRecords();\n schemeLoaderFactory.unregisterLoader(OfflineConstants.OFFLINE_SCHEME);\n }\n\n instance = {\n loadRecordsFromStorage: loadRecordsFromStorage,\n createRecord: createRecord,\n startRecord: startRecord,\n stopRecord: stopRecord,\n resumeRecord: resumeRecord,\n deleteRecord: deleteRecord,\n getRecordProgression: getRecordProgression,\n getAllRecords: getAllRecords,\n resetRecords: resetRecords,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nOfflineController.__dashjs_factory_name = 'OfflineController';\nconst factory = dashjs.FactoryMaker.getClassFactory(OfflineController); /* jshint ignore:line */\nfactory.events = OfflineEvents;\nfactory.errors = OfflineErrors;\ndashjs.FactoryMaker.updateClassFactory(OfflineController.__dashjs_factory_name, factory); /* jshint ignore:line */\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport IndexDBStore from '../storage/IndexDBStore';\nimport OfflineErrors from '../errors/OfflineErrors';\n\n/**\n * @class OfflineStoreController\n * @description This class manages database store\n * @param {object} config\n * @ignore\n */\nfunction OfflineStoreController(config) {\n\n config = config || {};\n const context = this.context;\n const errHandler = config.errHandler;\n\n let instance,\n indexDBStore;\n\n function setup() {\n indexDBStore = IndexDBStore(context).getInstance();\n }\n\n function createFragmentStore(manifestId, storeName) {\n try {\n indexDBStore.createFragmentStore(manifestId, storeName);\n } catch (err) {\n manageDOMError(err);\n }\n }\n\n function storeFragment(manifestId, fragmentId, fragmentData) {\n return indexDBStore.storeFragment(manifestId, fragmentId, fragmentData).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function createOfflineManifest(manifest) {\n return indexDBStore.storeManifest(manifest).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function updateOfflineManifest(manifest) {\n return indexDBStore.updateManifest(manifest).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function getManifestById(manifestId) {\n return indexDBStore.getManifestById(manifestId).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function saveSelectedRepresentations (manifestId, selected) {\n return indexDBStore.saveSelectedRepresentations(manifestId, selected).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function getCurrentHigherManifestId() {\n return indexDBStore.getCurrentHigherManifestId().catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function getAllManifests() {\n return indexDBStore.getAllManifests().catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function deleteDownloadById(manifestId) {\n return indexDBStore.deleteDownloadById(manifestId).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function setDownloadingStatus(manifestId, status) {\n return indexDBStore.setDownloadingStatus(manifestId, status).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function setRepresentationCurrentState(manifestId, representationId, state) {\n return indexDBStore.setRepresentationCurrentState(manifestId, representationId, state).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function getRepresentationCurrentState(manifestId, representationId) {\n return indexDBStore.getRepresentationCurrentState(manifestId, representationId).catch(function (err) {\n manageDOMError(err);\n });\n }\n\n function manageDOMError(err) {\n let error;\n if (err) {\n switch (err.name) {\n case 'QuotaExceededError':\n error = OfflineErrors.INDEXEDDB_QUOTA_EXCEED_ERROR;\n break;\n case 'InvalidStateError':\n error = OfflineErrors.INDEXEDDB_INVALID_STATE_ERROR;\n break;\n case 'NotFoundError':\n error = OfflineErrors.INDEXEDDB_NOT_FOUND_ERROR;\n break;\n case 'VersionError':\n error = OfflineErrors.INDEXEDDB_VERSION_ERROR;\n break;\n // TODO : Manage all DOM cases\n }\n\n // avoid importing DashJSError object from streaming\n errHandler.error({code: error, message: err.name, data: err});\n }\n }\n\n instance = {\n storeFragment: storeFragment,\n createOfflineManifest: createOfflineManifest,\n updateOfflineManifest: updateOfflineManifest,\n getManifestById: getManifestById,\n saveSelectedRepresentations: saveSelectedRepresentations,\n createFragmentStore: createFragmentStore,\n getCurrentHigherManifestId: getCurrentHigherManifestId,\n getAllManifests: getAllManifests,\n deleteDownloadById: deleteDownloadById,\n setDownloadingStatus: setDownloadingStatus,\n setRepresentationCurrentState: setRepresentationCurrentState,\n getRepresentationCurrentState: getRepresentationCurrentState\n };\n\n setup();\n\n return instance;\n}\n\nOfflineStoreController.__dashjs_factory_name = 'OfflineStoreController';\nexport default dashjs.FactoryMaker.getClassFactory(OfflineStoreController); /* jshint ignore:line */\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ErrorsBase from '../../core/errors/ErrorsBase';\n/**\n * Offline Errors declaration\n * @class\n */\nclass OfflineErrors extends ErrorsBase {\n constructor () {\n\n super();\n\n /**\n * Error code returned when an error occurs in offline module\n */\n this.OFFLINE_ERROR = 11000;\n\n // Based upon https://developer.mozilla.org/fr/docs/Web/API/DOMException\n this.INDEXEDDB_QUOTA_EXCEED_ERROR = 11001;\n this.INDEXEDDB_INVALID_STATE_ERROR = 11002;\n this.INDEXEDDB_NOT_READABLE_ERROR = 11003;\n this.INDEXEDDB_NOT_FOUND_ERROR = 11004;\n this.INDEXEDDB_NETWORK_ERROR = 11005;\n this.INDEXEDDB_DATA_ERROR = 11006;\n this.INDEXEDDB_TRANSACTION_INACTIVE_ERROR = 11007;\n this.INDEXEDDB_NOT_ALLOWED_ERROR = 11008;\n this.INDEXEDDB_NOT_SUPPORTED_ERROR = 11009;\n this.INDEXEDDB_VERSION_ERROR = 11010;\n this.INDEXEDDB_TIMEOUT_ERROR = 11011;\n this.INDEXEDDB_ABORT_ERROR = 11012;\n this.INDEXEDDB_UNKNOWN_ERROR = 11013;\n }\n}\n\nlet offlineErrors = new OfflineErrors();\nexport default offlineErrors;\n", "import EventsBase from './../../core/events/EventsBase';\n/**\n * These are offline events that should be sent to the player level.\n * @class\n */\nclass OfflineEvents extends EventsBase {\n constructor () {\n super();\n\n /**\n * Triggered when all mediaInfo has been loaded\n * @event OfflineEvents#OFFLINE_RECORD_LOADEDMETADATA\n */\n this.OFFLINE_RECORD_LOADEDMETADATA = 'public_offlineRecordLoadedmetadata';\n\n /**\n * Triggered when a record is initialized and download is started\n * @event OfflineEvents#OFFLINE_RECORD_STARTED\n */\n this.OFFLINE_RECORD_STARTED = 'public_offlineRecordStarted';\n\n /**\n * Triggered when the user stop downloading a record\n * @event OfflineEvents#OFFLINE_RECORD_STOPPED\n */\n this.OFFLINE_RECORD_STOPPED = 'public_offlineRecordStopped';\n\n /**\n * Triggered when all record has been downloaded\n * @event OfflineEvents#OFFLINE_RECORD_FINISHED\n */\n this.OFFLINE_RECORD_FINISHED = 'public_offlineRecordFinished';\n }\n}\n\nlet offlineEvents = new OfflineEvents();\nexport default offlineEvents;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport OfflineController from './controllers/OfflineController';\n\n// Shove both of these into the global scope\nvar context = (typeof window !== 'undefined' && window) || global;\n\nvar dashjs = context.dashjs;\nif (!dashjs) {\n dashjs = context.dashjs = {};\n}\n\ndashjs.OfflineController = OfflineController;\n\nexport default dashjs;\nexport { OfflineController };\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport IndexDBStore from '../storage/IndexDBStore';\n\nfunction IndexDBOfflineLoader(config) {\n config = config || {};\n const context = this.context;\n const urlUtils = config.urlUtils;\n const constants = config.constants;\n const dashConstants = config.dashConstants;\n\n let instance,\n indexDBStore;\n\n function setup() {\n indexDBStore = IndexDBStore(context).getInstance();\n }\n\n function getManifestId (url) {\n let myURL = urlUtils.removeHostname(url);\n var parts = myURL.split('/');\n return parts[0];\n }\n /**\n * Load manifest or fragment from indexeddb database\n * @param {object} config configuration of request\n */\n function load(config) {\n if (config.request) {\n let manifestId = getManifestId(config.request.url);\n if (manifestId % 1 === 0) {\n if (\n config.request.mediaType === constants.AUDIO ||\n config.request.mediaType === constants.VIDEO ||\n config.request.mediaType === constants.TEXT ||\n config.request.mediaType === constants.MUXED ||\n config.request.mediaType === constants.IMAGE ||\n config.request.mediaType === constants.FRAGMENTED_TEXT ||\n config.request.mediaType === constants.EMBEDDED_TEXT\n ) {\n let suffix = config.request.type === 'InitializationSegment' ? 'init' : config.request.index;\n let key = config.request.representationId + '_' + suffix;\n indexDBStore.getFragmentByKey(manifestId, key).then(function (fragment) {\n config.success(fragment, null, config.request.url, constants.ARRAY_BUFFER);\n }).catch(function (err) {\n config.error(err);\n });\n } else if (config.request.type === dashConstants.MPD) {\n indexDBStore.getManifestById(manifestId).then(function (item) {\n indexDBStore.createFragmentStore(item.fragmentStore);\n config.success(item.manifest, null, config.request.url, constants.XML);\n }).catch(function (err) {\n config.error(config.request, 404, err);\n });\n }\n } else {\n config.error(config.request, null, 'MediaType can not be found');\n }\n }\n }\n\n function abort() {\n // nothing to do\n }\n\n setup();\n\n instance = {\n load: load,\n abort: abort\n };\n\n return instance;\n}\n\nIndexDBOfflineLoader.__dashjs_factory_name = 'IndexDBOfflineLoader';\nconst factory = dashjs.FactoryMaker.getClassFactory(IndexDBOfflineLoader); /* jshint ignore:line */\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nconst localforage = require('localforage');\nconst entities = require('html-entities').XmlEntities;\n\n/**\n * @ignore\n */\nfunction IndexDBStore() {\n\n let instance,\n manifestStore,\n fragmentStores;\n\n function setup() {\n fragmentStores = {};\n\n if (typeof window === 'undefined') {\n return;\n }\n\n localforage.config({\n driver: localforage.INDEXEDDB,\n name: 'dash_offline_db'\n });\n\n manifestStore = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: 'dash_offline_db',\n version: 1.0,\n storeName: 'manifest'\n });\n }\n\n /////////////////////////////////////////\n //\n // GET/SET Methods\n //\n ////////////////////////////////////////\n\n /**\n * Creates an instance of localforage to store fragments in indexed db\n * @param {string} storeName\n * @instance\n */\n function createFragmentStore(storeName) {\n\n if (!fragmentStores[storeName]) {\n console.log('setStore ' + storeName);\n let fragmentStore = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: 'dash_offline_db',\n version: 1.0,\n storeName: storeName\n });\n fragmentStores[storeName] = fragmentStore;\n }\n }\n\n /**\n * Update download status\n * @param {number} manifestId\n * @param {string} newStatus\n * @returns {Promise} promise\n * @instance\n */\n function setDownloadingStatus(manifestId, newStatus) {\n return getManifestById(manifestId).then(function (item) {\n item.status = newStatus;\n return updateManifest(item).catch(function () {\n return Promise.reject('Cannot set status ' + newStatus + ' for this stream !');\n });\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Updat last downloaded fragment index for representationId\n * @param {number} manifestId - manifest id\n * @param {string} representationId - representation\n * @param {number} state - representation state\n * @returns {Promise} promise\n * @instance\n */\n function setRepresentationCurrentState(manifestId, representationId, state) {\n return getManifestById(manifestId).then(function (item) {\n if (!item.state) {\n item.state = {};\n }\n\n if (!item.state[representationId]) {\n item.state[representationId] = {\n index: -1,\n downloaded: 0\n };\n }\n\n item.state[representationId] = state;\n return updateManifest(item).catch(function () {\n return Promise.reject('Cannot set current index for represenation id ' + representationId);\n });\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns current downloaded segment index for representation\n * @param {number} manifestId - manifest id\n * @param {string} representationId - representation\n * @returns {Promise} promise\n * @instance\n */\n function getRepresentationCurrentState(manifestId, representationId) {\n return getManifestById(manifestId).then(function (item) {\n let state = {\n index: -1,\n downloaded: 0\n };\n if (item.state && item.state[representationId]) {\n state = item.state[representationId];\n }\n return Promise.resolve(state);\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a fragment from its key\n * @param {number} manifestId\n * @param {number} key\n * @returns {Promise} fragment\n * @instance\n */\n function getFragmentByKey(manifestId, key) {\n let fragmentStore = fragmentStores[manifestId];\n\n if (!fragmentStore) {\n return Promise.reject(new Error (`No fragment store found for manifest ${manifestId}`));\n }\n\n return fragmentStore.getItem(key).then(function (value) {\n return Promise.resolve(value);\n }).catch(function (err) {\n return Promise.reject(err);\n });\n\n }\n\n /**\n * Returns a manifest from its identifier\n * @param {number} id\n * @returns {Promise} {Object[]} manifests\n * @instance\n */\n function getManifestById(id) {\n return getAllManifests().then(function (array) {\n if (array) {\n let item = null;\n for (let i = 0; i < array.manifests.length; i++) {\n if (array.manifests[i].manifestId === parseInt(id)) {\n item = array.manifests[i];\n }\n }\n if (item !== null) {\n item.manifest = entities.decode(item.manifest);\n return Promise.resolve(item);\n } else {\n return Promise.reject('Cannot found manifest with this manifestId : ' + id);\n }\n } else {\n return Promise.reject('Any manifests stored in DB !');\n }\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns all offline manifests\n * @returns {Promise} {Object[]} manifests\n * @instance\n */\n function getAllManifests() {\n return manifestStore.getItem('manifest').then(function (array) {\n return Promise.resolve(array ? array : {\n 'manifests': []\n });\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Return higher manifest id\n * @returns {Promise} number\n * @instance\n */\n function getCurrentHigherManifestId() {\n return getAllManifests().then(function (array) {\n let higherManifestId = 0;\n if (array) {\n for (let i = 0; i < array.manifests.length; i++) {\n if (array.manifests[i].manifestId > higherManifestId) {\n higherManifestId = array.manifests[i].manifestId;\n }\n }\n return Promise.resolve(higherManifestId);\n } else {\n return Promise.resolve(higherManifestId);\n }\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Update manifest\n * @param {Object} manifest updated manifest\n * @returns {Promise} promise asynchronously resolved\n * @instance\n */\n function updateManifest(manifest) {\n return getAllManifests().then(function (array) {\n try {\n for (let i = 0; i < array.manifests.length; i++) {\n if (array.manifests[i].manifestId === manifest.manifestId) {\n array.manifests[i] = manifest;\n }\n }\n return manifestStore.setItem('manifest', array);\n } catch (err) {\n throw new Error('Any results found !');\n }\n });\n }\n\n /**\n * save selected representation by user\n * @param {Object} manifest updated manifest\n * @param {Object} selected selected representations\n * @returns {Promise} promise asynchronously resolved\n * @instance\n */\n function saveSelectedRepresentations(manifest, selected) {\n return getManifestById(manifest).then(function (item) {\n if (!item.selected) {\n item.selected = {};\n }\n\n item.selected = selected;\n return updateManifest(item).catch(function () {\n return Promise.reject('Cannot save selected representations');\n });\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Store a manifest in manifest array\n * @param {Object} manifest\n * @instance\n */\n function storeManifest(manifest) {\n return manifestStore.getItem('manifest').then(function (results) {\n let array = results ? results : {\n 'manifests': []\n };\n array.manifests.push(manifest);\n return manifestStore.setItem('manifest', array);\n });\n }\n\n /**\n * Store a fragment in fragment store\n * @param {number} manifestId\n * @param {number} fragmentId\n * @param {Object} fragmentData\n * @returns {Promise} promise asynchronously resolved\n * @instance\n */\n function storeFragment(manifestId, fragmentId, fragmentData) {\n let fragmentStore = fragmentStores[manifestId];\n\n if (!fragmentStore) {\n return Promise.reject(new Error (`No fragment store found for manifest ${manifestId}`));\n }\n\n return fragmentStore.setItem(fragmentId, fragmentData, function () {\n return Promise.resolve();\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /////////////////////////////////////////\n //\n // DROP Methods\n //\n ////////////////////////////////////////\n\n /**\n * Remove all manifest and fragment store\n * @returns {Promise} promise asynchronously resolved\n * @instance\n */\n function dropAll() {\n return localforage.clear().then(function () {\n return Promise.resolve();\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Remove framgent store given its name\n * @param {string} storeName\n * @instance\n */\n function dropFragmentStore(storeName) {\n localforage.dropInstance({\n driver: localforage.INDEXEDDB,\n name: 'dash_offline_db',\n version: 1.0,\n storeName: storeName\n }).then(function () {\n delete fragmentStores[storeName];\n }).catch(function (err) {\n console.log('dropFragmentStore failed ' + err);\n });\n return;\n }\n\n /**\n * Remove download given its id (fragmentStore + manifest entry in manifest array)\n * @param {number} manifestId\n * @returns {Promise} promise asynchronously resolved\n * @instance\n */\n function deleteDownloadById(manifestId) {\n return manifestStore.getItem('manifest').then(function (array) {\n if (array) {\n return deleteFragmentStore(manifestId).then(function () {\n for (let i = 0; i < array.manifests.length; i++) {\n if (array.manifests[i].manifestId === parseInt(manifestId)) {\n array.manifests.splice(i, 1);\n }\n }\n return manifestStore.setItem('manifest', array).then(function () {\n return Promise.resolve('This stream has been successfull removed !');\n }).catch(function () {\n return Promise.reject('An error occured when trying to delete this manifest');\n });\n });\n } else {\n return Promise.resolve('Nothing to delete !');\n }\n }).catch(function (err) {\n return Promise.reject(err);\n });\n }\n\n /**\n * Remove fragment store\n * @param {string} storeName\n * @returns {Promise} promise asynchronously resolved\n * @instance\n */\n function deleteFragmentStore(storeName) {\n localforage.createInstance({\n name: 'dash_offline_db',\n storeName: storeName\n });\n return localforage.dropInstance({\n name: 'dash_offline_db',\n storeName: storeName\n }).then(function () {\n delete fragmentStores[storeName];\n return Promise.resolve();\n }).catch(function (err) {\n console.log(err);\n return Promise.reject(err);\n });\n\n }\n\n\n setup();\n\n instance = {\n dropAll: dropAll,\n getFragmentByKey: getFragmentByKey,\n getManifestById: getManifestById,\n storeFragment: storeFragment,\n storeManifest: storeManifest,\n updateManifest: updateManifest,\n saveSelectedRepresentations: saveSelectedRepresentations,\n createFragmentStore: createFragmentStore,\n setDownloadingStatus: setDownloadingStatus,\n setRepresentationCurrentState: setRepresentationCurrentState,\n getRepresentationCurrentState: getRepresentationCurrentState,\n getCurrentHigherManifestId: getCurrentHigherManifestId,\n getAllManifests: getAllManifests,\n dropFragmentStore: dropFragmentStore,\n deleteDownloadById: deleteDownloadById\n };\n\n return instance;\n}\n\nIndexDBStore.__dashjs_factory_name = 'IndexDBStore';\nexport default dashjs.FactoryMaker.getSingletonFactory(IndexDBStore); /* jshint ignore:line */\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst Entities = require('html-entities').XmlEntities;\nconst OFFLINE_BASE_URL = 'offline_indexeddb://';\n\nfunction OfflineIndexDBManifestParser(config) {\n\n const manifestId = config.manifestId;\n const allMediaInfos = config.allMediaInfos;\n const urlUtils = config.urlUtils;\n const debug = config.debug;\n const dashConstants = config.dashConstants;\n const constants = config.constants;\n\n let instance,\n DOM,\n logger;\n\n\n function setup() {\n logger = debug.getLogger(instance);\n }\n\n /**\n * Parse XML manifest\n * @param {string} XMLDoc - xml manifest\n * @param {object} representation\n * @returns {Promise} a promise that will be resolved or rejected at the end of encoding process\n * @instance\n */\n function parse(XMLDoc, representation) {\n return new Promise(function (resolve, reject) {\n\n DOM = new DOMParser().parseFromString(XMLDoc, 'application/xml');\n let mpd = DOM.getElementsByTagName(dashConstants.MPD) ? DOM.getElementsByTagName(dashConstants.MPD) : null;\n\n for (let i = 0; i < mpd.length; i++) {\n if (mpd[i] !== null) {\n editBaseURLAttribute(mpd[i]);\n browsePeriods(mpd[i], representation);\n }\n }\n\n let manifestEncoded = encodeManifest(DOM);\n if (manifestEncoded !== '') {\n resolve(manifestEncoded);\n } else {\n reject('Encoded error');\n }\n });\n }\n\n /**\n * URL encode parsed manifest\n * @param {string} DOM\n * @returns {string} Url encoded XML\n * @instance\n */\n function encodeManifest(DOM) {\n logger.info('encodedManifest ' + new XMLSerializer().serializeToString(DOM));\n return new Entities().encode(new XMLSerializer().serializeToString(DOM));\n }\n\n /**\n * Update baseURL to point to local stored data P\n * @param {XML} currentMPD\n * @instance\n */\n function editBaseURLAttribute(currentMPD) {\n let basesURL,\n fragmentId,\n representationId;\n\n let url = `${OFFLINE_BASE_URL}${manifestId}/`;\n\n basesURL = currentMPD.getElementsByTagName(dashConstants.BASE_URL);\n\n if (basesURL.length === 0) {\n // add baseURL\n let element = DOM.createElement(dashConstants.BASE_URL);\n element.innerHTML = url;\n currentMPD.appendChild(element);\n }\n basesURL = currentMPD.getElementsByTagName(dashConstants.BASE_URL);\n for (let i = 0; i < basesURL.length; i++) {\n let parent = basesURL[i].parentNode;\n\n if (parent.nodeName === dashConstants.MPD) {\n basesURL[i].innerHTML = url;\n } else if (parent.nodeName === dashConstants.REPRESENTATION) {\n let adaptationsSet = parent.parentNode;\n if (adaptationsSet.nodeName == dashConstants.ADAPTATION_SET) {\n\n if (urlUtils.isHTTPS(basesURL[i].innerHTML) || urlUtils.isHTTPURL(basesURL[i].innerHTML)) {\n fragmentId = getFragmentId(basesURL[i].innerHTML);\n representationId = getBestRepresentationId(adaptationsSet);\n basesURL[i].innerHTML = url + representationId + '_' + fragmentId;\n } else if (basesURL[i].innerHTML === './') {\n basesURL[i].innerHTML = url;\n } else {\n fragmentId = getFragmentId(basesURL[i].innerHTML);\n representationId = getBestRepresentationId(adaptationsSet);\n basesURL[i].innerHTML = representationId + '_' + fragmentId;\n }\n }\n } else {\n basesURL[i].innerHTML = url;\n }\n }\n }\n\n /**\n * Browse periods\n * @param {XML} currentMPD\n * @param {Object} representation\n * @instance\n */\n function browsePeriods(currentMPD, representation) {\n let periods = currentMPD.getElementsByTagName(dashConstants.PERIOD);\n for (let j = 0; j < periods.length; j++) {\n browseAdaptationsSet(periods[j], representation);\n }\n }\n\n /**\n * Browse adapatation set to update data (delete those taht are not choosen by user ...)\n * @param {XML} currentPeriod\n * @param {Array} representationsToUpdate\n * @instance\n */\n function browseAdaptationsSet(currentPeriod, representationsToUpdate) {\n let adaptationsSet,\n currentAdaptationSet,\n currentAdaptationType,\n representations;\n\n adaptationsSet = currentPeriod.getElementsByTagName(dashConstants.ADAPTATION_SET);\n\n for (let i = adaptationsSet.length - 1; i >= 0; i--) {\n currentAdaptationSet = adaptationsSet[i];\n if (currentAdaptationSet) {\n currentAdaptationType = findAdaptationType(currentAdaptationSet);\n representations = findRepresentations(currentAdaptationSet);\n\n findAndKeepOnlySelectedRepresentations(currentAdaptationSet, representations, currentAdaptationType);\n\n representations = findRepresentations(currentAdaptationSet);\n\n deleteSegmentBase(currentAdaptationSet);\n\n if (representations.length === 0) {\n currentPeriod.removeChild(currentAdaptationSet);\n } else {\n //detect Segment list use case\n for (let i = 0; i < representations.length; i++) {\n let rep = representations[i];\n let segmentList = getSegmentList(rep);\n if (segmentList.length >= 1) {\n editSegmentListAttributes(segmentList, rep);\n }\n }\n\n let segmentTemplate = getSegmentTemplate(currentAdaptationSet);\n // segmentTemplate is defined, update attributes in order to be correctly played offline\n if (segmentTemplate.length >= 1) {\n editSegmentTemplateAttributes(segmentTemplate);\n }\n\n // detect SegmentBase use case => transfrom manifest to SegmentList in SegmentTemplate\n if (representationsToUpdate && representationsToUpdate.length > 0 ) {\n let selectedRep;\n for (let i = 0; i < representations.length; i++) {\n let rep = representations[i];\n for (let j = 0; representationsToUpdate && j < representationsToUpdate.length; j++) {\n if (representationsToUpdate[j].id === rep.id) {\n selectedRep = representationsToUpdate[j];\n break;\n }\n }\n }\n addSegmentTemplateAttributes(currentAdaptationSet, selectedRep);\n }\n }\n }\n }\n }\n\n /**\n * Returns type of adapation set\n * @param {XML} currentAdaptationSet\n * @returns {string|null} type\n * @instance\n */\n function findAdaptationType(currentAdaptationSet) {\n if (getIsMuxed(currentAdaptationSet)) {\n return constants.MUXED;\n } else if (getIsAudio(currentAdaptationSet)) {\n return constants.AUDIO;\n } else if (getIsVideo(currentAdaptationSet)) {\n return constants.VIDEO;\n } else if (getIsFragmentedText(currentAdaptationSet)) {\n return constants.FRAGMENTED_TEXT;\n } else if (getIsImage(currentAdaptationSet)) {\n return constants.IMAGE;\n }\n\n return constants.TEXT;\n }\n\n function getIsAudio(adaptation) {\n return getIsTypeOf(adaptation, constants.AUDIO);\n }\n\n function getIsVideo(adaptation) {\n return getIsTypeOf(adaptation, constants.VIDEO);\n }\n\n function getIsFragmentedText(adaptation) {\n return getIsTypeOf(adaptation, constants.FRAGMENTED_TEXT);\n }\n\n function getIsMuxed(adaptation) {\n return getIsTypeOf(adaptation, constants.MUXED);\n }\n\n function getIsImage(adaptation) {\n return getIsTypeOf(adaptation, constants.IMAGE);\n }\n\n // based upon DashManifestModel, but using DomParser\n function getIsTypeOf(adaptation, type) {\n\n if (!adaptation) {\n throw new Error('adaptation is not defined');\n }\n\n if (!type) {\n throw new Error('type is not defined');\n }\n\n // 1. check codecs for fragmented text\n if (isFragmentedTextCodecFound(adaptation)) {\n // fragmented text codec has been found for adaptation, let's check if tested type is fragmented text\n return type === constants.FRAGMENTED_TEXT;\n }\n\n // 2. test mime type\n return testMimeType(adaptation, type);\n }\n\n function testMimeType(adaptation, type) {\n let mimeTypeRegEx = (type !== constants.TEXT) ? new RegExp(type) : new RegExp('(vtt|ttml)');\n\n let mimeType = findMimeType(adaptation);\n if (mimeType) {\n return mimeTypeRegEx.test(mimeType);\n }\n\n // no mime type in adaptation, search in representation\n let representations = findRepresentations(adaptation);\n if (representations) {\n for (let i = 0; i < representations.length; i++) {\n let representation = representations[i];\n mimeType = findMimeType(representation);\n if (mimeType) {\n return mimeTypeRegEx.test(mimeType);\n }\n }\n }\n return false;\n }\n\n /**\n * Search for fragmented text codec in adaptation (STPP or WVTT)\n * @param {Object} adaptation\n */\n function isFragmentedTextCodecFound (adaptation) {\n let isFragmentedTextCodecFoundInTag = function (tag) {\n let codecs = tag.getAttribute(dashConstants.CODECS);\n if (codecs) {\n if (codecs.search(constants.STPP) === 0 ||\n codecs.search(constants.WVTT) === 0 ) {\n return true;\n }\n }\n return false;\n };\n\n if (isFragmentedTextCodecFoundInTag(adaptation)) {\n return true;\n }\n\n // check in representations\n let representations = findRepresentations(adaptation);\n if (representations && representations.length > 0) {\n\n if (isFragmentedTextCodecFoundInTag(representations[0])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns mime-type of xml tag\n * @param {Object} tag\n * @returns {string|null} mimeType\n * @instance\n */\n function findMimeType(tag) {\n return tag.getAttribute(dashConstants.MIME_TYPE);\n }\n\n /**\n * Returns representations of adaptation set\n * @param {XML} adaptation\n * @returns {XML} representations\n * @instance\n */\n function findRepresentations(adaptation) {\n return adaptation.getElementsByTagName(dashConstants.REPRESENTATION);\n }\n\n /**\n * Return segment template list of adaptations set\n * @param {XML} currentAdaptationSet\n * @returns {XML} representations\n * @instance\n */\n function getSegmentTemplate(currentAdaptationSet) {\n return currentAdaptationSet.getElementsByTagName(dashConstants.SEGMENT_TEMPLATE);\n }\n\n /**\n * Return segment list tags of adaptations set\n * @param {XML} tag\n * @returns {XML} representations\n * @instance\n */\n function getSegmentList(tag) {\n return tag.getElementsByTagName(dashConstants.SEGMENT_LIST);\n }\n\n function deleteSegmentBase(tag) {\n let elements = tag.getElementsByTagName(dashConstants.SEGMENT_BASE);\n for (let i = 0; i < elements.length; i++) {\n let segmentBase = elements[i];\n segmentBase.parentNode.removeChild(segmentBase);\n }\n }\n\n /**\n * @param {XML} segmentTemplate\n * @param {object} rep\n * @instance\n */\n function addSegmentTimelineElements(segmentTemplate, rep) {\n let S = DOM.createElement('S');\n if (rep && rep.segments) {\n let segmentTimelineElement = DOM.createElement(dashConstants.SEGMENT_TIMELINE);\n let changedDuration = getDurationChangeArray(rep);\n for (let i = 0; i < changedDuration.length; i++) {\n let repeatValue = i + 1 < changedDuration.length ? (changedDuration[i + 1] - changedDuration[i]) - 1 : 0;\n if (repeatValue > 1) {\n S.setAttribute('r', repeatValue);\n }\n S.setAttribute('d', rep.segments[changedDuration[i]].duration);\n segmentTimelineElement.appendChild(S);\n S = DOM.createElement('S');\n }\n segmentTemplate.appendChild(segmentTimelineElement);\n }\n }\n\n function getDurationChangeArray(rep) {\n let array = [];\n array.push(0);\n for (let i = 1; i < rep.segments.length; i++) {\n if (rep.segments[i - 1].duration !== rep.segments[i].duration) {\n array.push(i);\n }\n }\n return array;\n }\n\n /**\n * Update attributes of segment templates to match offline urls\n * @param {Array} segmentsTemplates\n * @instance\n */\n function editSegmentTemplateAttributes(segmentsTemplates) {\n for (let i = 0; i < segmentsTemplates.length; i++) {\n let media = segmentsTemplates[i].getAttribute(dashConstants.MEDIA);\n media = '$RepresentationID$_$Number$' + media.substring(media.indexOf('.'), media.length); //id + extension\n segmentsTemplates[i].setAttribute(dashConstants.START_NUMBER, '0');\n segmentsTemplates[i].setAttribute(dashConstants.MEDIA, media);\n segmentsTemplates[i].setAttribute(dashConstants.INITIALIZATION_MINUS,'$RepresentationID$_init');\n }\n }\n\n /**\n * Update attributes of segment list to match offline urls\n * @param {Array} segmentLists\n * @param {Object} representation\n * @instance\n */\n function editSegmentListAttributes(segmentLists, representation) {\n let repId = representation.getAttribute(dashConstants.ID);\n for (let i = 0; i < segmentLists.length; i++) {\n\n let segmentList = segmentLists[i];\n let initialisation = segmentList.getElementsByTagName(dashConstants.INITIALIZATION);\n if (initialisation) {\n let sourceURL = initialisation[0].getAttribute(dashConstants.SOURCE_URL);\n sourceURL = `${repId}_init`;\n initialisation[0].setAttribute(dashConstants.SOURCE_URL, sourceURL);\n }\n let segmentURLs = segmentList.getElementsByTagName(dashConstants.SEGMENT_URL);\n\n if (segmentURLs) {\n for (let j = 0; j < segmentURLs.length; j++) {\n let segmentUrl = segmentURLs[j];\n let media = segmentUrl.getAttribute(dashConstants.MEDIA);\n media = `${repId}_${j}`;\n segmentUrl.setAttribute(dashConstants.MEDIA, media);\n }\n }\n }\n }\n\n /**\n * @param {XML} adaptationSet\n * @param {object} rep\n * @instance\n */\n function addSegmentTemplateAttributes(adaptationSet, rep) {\n let segmentTemplateElement = DOM.createElement(dashConstants.SEGMENT_TEMPLATE);\n segmentTemplateElement.setAttribute(dashConstants.START_NUMBER, '0');\n segmentTemplateElement.setAttribute(dashConstants.MEDIA, '$RepresentationID$-$Time$');\n segmentTemplateElement.setAttribute(dashConstants.INITIALIZATION_MINUS,'$RepresentationID$_init');\n addSegmentTimelineElements(segmentTemplateElement, rep);\n adaptationSet.appendChild(segmentTemplateElement);\n }\n\n /**\n * Delete all representations except the one choosed by user\n * @param {XML} currentAdaptationSet\n * @param {XML} representations\n * @param {string} adaptationType\n * @instance\n */\n function findAndKeepOnlySelectedRepresentations(currentAdaptationSet, representations, adaptationType) {\n for ( var i = representations.length - 1; i >= 0; i--) {\n let representation = representations[i];\n let repId = representation.getAttribute(dashConstants.ID);\n if (allMediaInfos[adaptationType] && allMediaInfos[adaptationType].indexOf(repId) === -1) {\n // representation is not selected, remove it\n currentAdaptationSet.removeChild(representation);\n }\n }\n }\n\n // UTILS\n /**\n * Get id of first representation of adaptation set\n * @param {XMl} currentAdaptationSet\n * @returns {string} id\n * @instance\n */\n function getBestRepresentationId(currentAdaptationSet) {\n let bestRepresentation = currentAdaptationSet.getElementsByTagName(dashConstants.REPRESENTATION)[0];\n console.log(bestRepresentation.getAttribute(dashConstants.ID));\n return bestRepresentation.getAttribute(dashConstants.ID);\n }\n\n /**\n * Parse and returns fragments of offline url => xxxx://xxxx/fragmentId/\n * @param {string} url\n * @returns {string} fragmentId\n * @instance\n */\n function getFragmentId(url) {\n let idxFragId = url.lastIndexOf('/');\n //logger.warn('fragId : ' + url.substring(idxFragId + 1, url.length));\n return url.substring(idxFragId,url.length);\n }\n\n setup();\n\n instance = {\n parse: parse\n };\n\n return instance;\n}\nOfflineIndexDBManifestParser.__dashjs_factory_name = 'OfflineIndexDBManifestParser';\nexport default dashjs.FactoryMaker.getClassFactory(OfflineIndexDBManifestParser); /* jshint ignore:line */\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport OfflineConstants from '../constants/OfflineConstants';\n\nfunction OfflineUrlUtils() {\n\n function setup() {\n }\n\n function getRegex() {\n return OfflineConstants.OFFLINE_URL_REGEX;\n }\n\n /*\n * -------------------\n * SPECIFIC BEHAVIOUR\n * -------------------\n */\n function removeHostname(url) {\n return url.replace(/(^\\w+:|^)\\/\\//, '');\n }\n\n function isRelative() {\n return false;\n }\n\n function resolve(url, baseUrl) {\n if (baseUrl.charAt(baseUrl.length - 1 ) !== '/') {\n baseUrl = baseUrl.concat('/');\n }\n return baseUrl + url;\n }\n\n setup();\n const instance = {\n getRegex: getRegex,\n isRelative: isRelative,\n removeHostname: removeHostname,\n resolve: resolve\n };\n return instance;\n}\n\nOfflineUrlUtils.__dashjs_factory_name = 'OfflineUrlUtils';\nexport default dashjs.FactoryMaker.getSingletonFactory(OfflineUrlUtils); /* jshint ignore:line */\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass OfflineDownload {\n constructor() {\n this.id = null;\n this.url = null;\n this.originalUrl = null;\n this.status = null;\n this.progress = null;\n }\n}\n\nexport default OfflineDownload;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from './constants/Constants';\nimport URLLoader from './net/URLLoader';\nimport HeadRequest from './vo/HeadRequest';\nimport DashJSError from './vo/DashJSError';\nimport FactoryMaker from '../core/FactoryMaker';\n\nfunction FragmentLoader(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;\n const events = config.events;\n const urlUtils = config.urlUtils;\n const errors = config.errors;\n\n let instance,\n urlLoader;\n\n function setup() {\n urlLoader = URLLoader(context).create({\n errHandler: config.errHandler,\n errors: errors,\n dashMetrics: config.dashMetrics,\n mediaPlayerModel: config.mediaPlayerModel,\n requestModifier: config.requestModifier,\n useFetch: config.settings.get().streaming.lowLatencyEnabled,\n urlUtils: urlUtils,\n constants: Constants,\n boxParser: config.boxParser,\n dashConstants: config.dashConstants\n });\n }\n\n function checkForExistence(request) {\n const report = function (success) {\n eventBus.trigger(\n events.CHECK_FOR_EXISTENCE_COMPLETED, {\n request: request,\n exists: success\n }\n );\n };\n\n if (request) {\n let headRequest = new HeadRequest(request.url);\n urlLoader.load({\n request: headRequest,\n success: function () {\n report(true);\n },\n error: function () {\n report(false);\n }\n });\n } else {\n report(false);\n }\n }\n\n function load(request) {\n const report = function (data, error) {\n eventBus.trigger(events.LOADING_COMPLETED, {\n request: request,\n response: data || null,\n error: error || null,\n sender: instance\n });\n };\n\n if (request) {\n urlLoader.load({\n request: request,\n progress: function (event) {\n eventBus.trigger(events.LOADING_PROGRESS, {\n request: request,\n stream: event.stream\n });\n if (event.data) {\n eventBus.trigger(events.LOADING_DATA_PROGRESS, {\n request: request,\n response: event.data || null,\n error: null,\n sender: instance\n });\n }\n },\n success: function (data) {\n report(data);\n },\n error: function (request, statusText, errorText) {\n report(\n undefined,\n new DashJSError(\n errors.FRAGMENT_LOADER_LOADING_FAILURE_ERROR_CODE,\n errorText,\n statusText\n )\n );\n },\n abort: function (request) {\n if (request) {\n eventBus.trigger(events.LOADING_ABANDONED, {request: request, mediaType: request.mediaType, sender: instance});\n }\n }\n });\n } else {\n report(\n undefined,\n new DashJSError(\n errors.FRAGMENT_LOADER_NULL_REQUEST_ERROR_CODE,\n errors.FRAGMENT_LOADER_NULL_REQUEST_ERROR_MESSAGE\n )\n );\n }\n }\n\n function abort() {\n if (urlLoader) {\n urlLoader.abort();\n }\n }\n\n function reset() {\n if (urlLoader) {\n urlLoader.abort();\n urlLoader = null;\n }\n }\n\n instance = {\n checkForExistence: checkForExistence,\n load: load,\n abort: abort,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nFragmentLoader.__dashjs_factory_name = 'FragmentLoader';\nexport default FactoryMaker.getClassFactory(FragmentLoader);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../core/events/EventsBase';\n/**\n * @class\n * @implements EventsBase\n */\nclass MediaPlayerEvents extends EventsBase {\n\n /**\n * @description Public facing external events to be used when developing a player that implements dash.js.\n */\n constructor() {\n super();\n /**\n * Triggered when playback will not start yet\n * as the MPD's availabilityStartTime is in the future.\n * Check delay property in payload to determine time before playback will start.\n * @event MediaPlayerEvents#AST_IN_FUTURE\n */\n this.AST_IN_FUTURE = 'astInFuture';\n\n /**\n * Triggered when the video element's buffer state changes to stalled.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_EMPTY\n */\n this.BUFFER_EMPTY = 'bufferStalled';\n\n /**\n * Triggered when the video element's buffer state changes to loaded.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_LOADED\n */\n this.BUFFER_LOADED = 'bufferLoaded';\n\n /**\n * Triggered when the video element's buffer state changes, either stalled or loaded. Check payload for state.\n * @event MediaPlayerEvents#BUFFER_LEVEL_STATE_CHANGED\n */\n this.BUFFER_LEVEL_STATE_CHANGED = 'bufferStateChanged';\n\n /**\n * Triggered when there is an error from the element or MSE source buffer.\n * @event MediaPlayerEvents#ERROR\n */\n this.ERROR = 'error';\n /**\n * Triggered when a fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_COMPLETED\n */\n this.FRAGMENT_LOADING_COMPLETED = 'fragmentLoadingCompleted';\n\n /**\n * Triggered when a partial fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_PROGRESS\n */\n this.FRAGMENT_LOADING_PROGRESS = 'fragmentLoadingProgress';\n /**\n * Triggered when a fragment download has started.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_STARTED\n */\n this.FRAGMENT_LOADING_STARTED = 'fragmentLoadingStarted';\n\n /**\n * Triggered when a fragment download is abandoned due to detection of slow download base on the ABR abandon rule..\n * @event MediaPlayerEvents#FRAGMENT_LOADING_ABANDONED\n */\n this.FRAGMENT_LOADING_ABANDONED = 'fragmentLoadingAbandoned';\n\n /**\n * Triggered when {@link module:Debug} logger methods are called.\n * @event MediaPlayerEvents#LOG\n */\n this.LOG = 'log';\n\n //TODO refactor with internal event\n /**\n * Triggered when the manifest load is complete\n * @event MediaPlayerEvents#MANIFEST_LOADED\n */\n this.MANIFEST_LOADED = 'manifestLoaded';\n\n /**\n * Triggered anytime there is a change to the overall metrics.\n * @event MediaPlayerEvents#METRICS_CHANGED\n */\n this.METRICS_CHANGED = 'metricsChanged';\n\n /**\n * Triggered when an individual metric is added, updated or cleared.\n * @event MediaPlayerEvents#METRIC_CHANGED\n */\n this.METRIC_CHANGED = 'metricChanged';\n\n /**\n * Triggered every time a new metric is added.\n * @event MediaPlayerEvents#METRIC_ADDED\n */\n this.METRIC_ADDED = 'metricAdded';\n\n /**\n * Triggered every time a metric is updated.\n * @event MediaPlayerEvents#METRIC_UPDATED\n */\n this.METRIC_UPDATED = 'metricUpdated';\n\n /**\n * Triggered at the stream end of a period.\n * @event MediaPlayerEvents#PERIOD_SWITCH_COMPLETED\n */\n this.PERIOD_SWITCH_COMPLETED = 'periodSwitchCompleted';\n\n /**\n * Triggered when a new period starts.\n * @event MediaPlayerEvents#PERIOD_SWITCH_STARTED\n */\n this.PERIOD_SWITCH_STARTED = 'periodSwitchStarted';\n\n /**\n * Triggered when an ABR up /down switch is initiated; either by user in manual mode or auto mode via ABR rules.\n * @event MediaPlayerEvents#QUALITY_CHANGE_REQUESTED\n */\n this.QUALITY_CHANGE_REQUESTED = 'qualityChangeRequested';\n\n /**\n * Triggered when the new ABR quality is being rendered on-screen.\n * @event MediaPlayerEvents#QUALITY_CHANGE_RENDERED\n */\n this.QUALITY_CHANGE_RENDERED = 'qualityChangeRendered';\n\n /**\n * Triggered when the new track is being rendered.\n * @event MediaPlayerEvents#TRACK_CHANGE_RENDERED\n */\n this.TRACK_CHANGE_RENDERED = 'trackChangeRendered';\n\n /**\n * Triggered when the source is setup and ready.\n * @event MediaPlayerEvents#SOURCE_INITIALIZED\n */\n this.SOURCE_INITIALIZED = 'sourceInitialized';\n\n /**\n * Triggered when a stream (period) is being loaded\n * @event MediaPlayerEvents#STREAM_INITIALIZING\n */\n this.STREAM_INITIALIZING = 'streamInitializing';\n\n /**\n * Triggered when a stream (period) is loaded\n * @event MediaPlayerEvents#STREAM_INITIALIZED\n */\n this.STREAM_INITIALIZED = 'streamInitialized';\n\n /**\n * Triggered when the player has been reset.\n * @event MediaPlayerEvents#STREAM_TEARDOWN_COMPLETE\n */\n this.STREAM_TEARDOWN_COMPLETE = 'streamTeardownComplete';\n\n /**\n * Triggered once all text tracks detected in the MPD are added to the video element.\n * @event MediaPlayerEvents#TEXT_TRACKS_ADDED\n */\n this.TEXT_TRACKS_ADDED = 'allTextTracksAdded';\n\n /**\n * Triggered when a text track is added to the video element's TextTrackList\n * @event MediaPlayerEvents#TEXT_TRACK_ADDED\n */\n this.TEXT_TRACK_ADDED = 'textTrackAdded';\n\n /**\n * Triggered when a ttml chunk is parsed.\n * @event MediaPlayerEvents#TTML_PARSED\n */\n this.TTML_PARSED = 'ttmlParsed';\n\n /**\n * Triggered when a ttml chunk has to be parsed.\n * @event MediaPlayerEvents#TTML_TO_PARSE\n */\n this.TTML_TO_PARSE = 'ttmlToParse';\n\n /**\n * Triggered when a caption is rendered.\n * @event MediaPlayerEvents#CAPTION_RENDERED\n */\n this.CAPTION_RENDERED = 'captionRendered';\n\n /**\n * Triggered when the caption container is resized.\n * @event MediaPlayerEvents#CAPTION_CONTAINER_RESIZE\n */\n this.CAPTION_CONTAINER_RESIZE = 'captionContainerResize';\n\n /**\n * Sent when enough data is available that the media can be played,\n * at least for a couple of frames. This corresponds to the\n * HAVE_ENOUGH_DATA readyState.\n * @event MediaPlayerEvents#CAN_PLAY\n */\n this.CAN_PLAY = 'canPlay';\n\n /**\n * Sent when playback completes.\n * @event MediaPlayerEvents#PLAYBACK_ENDED\n */\n this.PLAYBACK_ENDED = 'playbackEnded';\n\n /**\n * Sent when an error occurs. The element's error\n * attribute contains more information.\n * @event MediaPlayerEvents#PLAYBACK_ERROR\n */\n this.PLAYBACK_ERROR = 'playbackError';\n\n /**\n * Sent when playback is not allowed (for example if user gesture is needed).\n * @event MediaPlayerEvents#PLAYBACK_NOT_ALLOWED\n */\n this.PLAYBACK_NOT_ALLOWED = 'playbackNotAllowed';\n\n /**\n * The media's metadata has finished loading; all attributes now\n * contain as much useful information as they're going to.\n * @event MediaPlayerEvents#PLAYBACK_METADATA_LOADED\n */\n this.PLAYBACK_METADATA_LOADED = 'playbackMetaDataLoaded';\n\n /**\n * Sent when playback is paused.\n * @event MediaPlayerEvents#PLAYBACK_PAUSED\n */\n this.PLAYBACK_PAUSED = 'playbackPaused';\n\n /**\n * Sent when the media begins to play (either for the first time, after having been paused,\n * or after ending and then restarting).\n *\n * @event MediaPlayerEvents#PLAYBACK_PLAYING\n */\n this.PLAYBACK_PLAYING = 'playbackPlaying';\n\n /**\n * Sent periodically to inform interested parties of progress downloading\n * the media. Information about the current amount of the media that has\n * been downloaded is available in the media element's buffered attribute.\n * @event MediaPlayerEvents#PLAYBACK_PROGRESS\n */\n this.PLAYBACK_PROGRESS = 'playbackProgress';\n\n /**\n * Sent when the playback speed changes.\n * @event MediaPlayerEvents#PLAYBACK_RATE_CHANGED\n */\n this.PLAYBACK_RATE_CHANGED = 'playbackRateChanged';\n\n /**\n * Sent when a seek operation completes.\n * @event MediaPlayerEvents#PLAYBACK_SEEKED\n */\n this.PLAYBACK_SEEKED = 'playbackSeeked';\n\n /**\n * Sent when a seek operation begins.\n * @event MediaPlayerEvents#PLAYBACK_SEEKING\n */\n this.PLAYBACK_SEEKING = 'playbackSeeking';\n\n /**\n * Sent when a seek operation has been asked.\n * @event MediaPlayerEvents#PLAYBACK_SEEK_ASKED\n */\n this.PLAYBACK_SEEK_ASKED = 'playbackSeekAsked';\n\n /**\n * Sent when the video element reports stalled\n * @event MediaPlayerEvents#PLAYBACK_STALLED\n */\n this.PLAYBACK_STALLED = 'playbackStalled';\n\n /**\n * Sent when playback of the media starts after having been paused;\n * that is, when playback is resumed after a prior pause event.\n *\n * @event MediaPlayerEvents#PLAYBACK_STARTED\n */\n this.PLAYBACK_STARTED = 'playbackStarted';\n\n /**\n * The time indicated by the element's currentTime attribute has changed.\n * @event MediaPlayerEvents#PLAYBACK_TIME_UPDATED\n */\n this.PLAYBACK_TIME_UPDATED = 'playbackTimeUpdated';\n\n /**\n * Sent when the media playback has stopped because of a temporary lack of data.\n *\n * @event MediaPlayerEvents#PLAYBACK_WAITING\n */\n this.PLAYBACK_WAITING = 'playbackWaiting';\n\n /**\n * Manifest validity changed - As a result of an MPD validity expiration event.\n * @event MediaPlayerEvents#MANIFEST_VALIDITY_CHANGED\n */\n this.MANIFEST_VALIDITY_CHANGED = 'manifestValidityChanged';\n }\n}\n\nlet mediaPlayerEvents = new MediaPlayerEvents();\nexport default mediaPlayerEvents;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Constants declaration\n * @class\n * @ignore\n * @hideconstructor\n */\nclass Constants {\n\n init () {\n /**\n * @constant {string} STREAM Stream media type. Mainly used to report metrics relative to the full stream\n * @memberof Constants#\n * @static\n */\n this.STREAM = 'stream';\n\n /**\n * @constant {string} VIDEO Video media type\n * @memberof Constants#\n * @static\n */\n this.VIDEO = 'video';\n\n /**\n * @constant {string} AUDIO Audio media type\n * @memberof Constants#\n * @static\n */\n this.AUDIO = 'audio';\n\n /**\n * @constant {string} TEXT Text media type\n * @memberof Constants#\n * @static\n */\n this.TEXT = 'text';\n\n /**\n * @constant {string} FRAGMENTED_TEXT Fragmented text media type\n * @memberof Constants#\n * @static\n */\n this.FRAGMENTED_TEXT = 'fragmentedText';\n\n /**\n * @constant {string} EMBEDDED_TEXT Embedded text media type\n * @memberof Constants#\n * @static\n */\n this.EMBEDDED_TEXT = 'embeddedText';\n\n /**\n * @constant {string} MUXED Muxed (video/audio in the same chunk) media type\n * @memberof Constants#\n * @static\n */\n this.MUXED = 'muxed';\n\n /**\n * @constant {string} IMAGE Image media type\n * @memberof Constants#\n * @static\n */\n this.IMAGE = 'image';\n\n /**\n * @constant {string} STPP STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.STPP = 'stpp';\n\n /**\n * @constant {string} TTML STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.TTML = 'ttml';\n\n /**\n * @constant {string} VTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.VTT = 'vtt';\n\n /**\n * @constant {string} WVTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.WVTT = 'wvtt';\n\n /**\n * @constant {string} ABR_STRATEGY_DYNAMIC Dynamic Adaptive bitrate algorithm\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_DYNAMIC = 'abrDynamic';\n\n /**\n * @constant {string} ABR_STRATEGY_BOLA Adaptive bitrate algorithm based on Bola (buffer level)\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_BOLA = 'abrBola';\n\n /**\n * @constant {string} ABR_STRATEGY_THROUGHPUT Adaptive bitrate algorithm based on throughput\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_THROUGHPUT = 'abrThroughput';\n\n /**\n * @constant {string} MOVING_AVERAGE_SLIDING_WINDOW Moving average sliding window\n * @memberof Constants#\n * @static\n */\n this.MOVING_AVERAGE_SLIDING_WINDOW = 'slidingWindow';\n\n /**\n * @constant {string} EWMA Exponential moving average\n * @memberof Constants#\n * @static\n */\n this.MOVING_AVERAGE_EWMA = 'ewma';\n\n /**\n * @constant {string} BAD_ARGUMENT_ERROR Invalid Arguments type of error\n * @memberof Constants#\n * @static\n */\n this.BAD_ARGUMENT_ERROR = 'Invalid Arguments';\n\n /**\n * @constant {string} MISSING_CONFIG_ERROR Missing ocnfiguration parameters type of error\n * @memberof Constants#\n * @static\n */\n this.MISSING_CONFIG_ERROR = 'Missing config parameter(s)';\n this.LOCATION = 'Location';\n this.INITIALIZE = 'initialize';\n this.TEXT_SHOWING = 'showing';\n this.TEXT_HIDDEN = 'hidden';\n this.CC1 = 'CC1';\n this.CC3 = 'CC3';\n this.UTF8 = 'utf-8';\n this.SCHEME_ID_URI = 'schemeIdUri';\n this.START_TIME = 'starttime';\n this.SERVICE_DESCRIPTION_LL_SCHEME = 'urn:dvb:dash:lowlatency:scope:2019';\n this.SUPPLEMENTAL_PROPERTY_LL_SCHEME = 'urn:dvb:dash:lowlatency:critical:2019';\n this.XML = 'XML';\n this.ARRAY_BUFFER = 'ArrayBuffer';\n }\n\n constructor () {\n this.init();\n }\n}\n\nconst constants = new Constants();\nexport default constants;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from '../../core/EventBus';\nimport MediaPlayerEvents from '../MediaPlayerEvents';\nimport FactoryMaker from '../../core/FactoryMaker';\nimport Debug from '../../core/Debug';\nimport Settings from '../../core/Settings';\nimport {HTTPRequest} from '../vo/metrics/HTTPRequest';\nimport DashManifestModel from '../../dash/models/DashManifestModel';\nimport Utils from '../../core/Utils';\nimport {getVersionString} from '../../core/Version';\n\nconst CMCD_REQUEST_FIELD_NAME = 'Common-Media-Client-Data';\nconst CMCD_VERSION = 1;\nconst DEFAULT_DEVICE_ID = `dash.js-v${getVersionString()}`;\nconst BUFFER_STATES = {\n DEFAULT: null,\n INITIALIZING: 1,\n SEEKING: 2,\n RISK: 3,\n EMPTY: 4\n};\nconst OBJECT_TYPES = {\n MANIFEST: 'm',\n AUDIO: 'a',\n VIDEO: 'v',\n INIT: 'i',\n CAPTION: 'c'\n};\nconst STREAMING_FORMATS = {\n DASH: 'd',\n MSS: 's'\n};\nconst STREAM_TYPES = {\n VOD: 'v',\n LIVE: 'l'\n};\n\nfunction CmcdModel() {\n\n let logger,\n dashManifestModel,\n instance,\n internalData,\n abrController,\n dashMetrics,\n playbackController;\n\n let context = this.context;\n let eventBus = EventBus(context).getInstance();\n let settings = Settings(context).getInstance();\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n dashManifestModel = DashManifestModel(context).getInstance();\n\n _resetInitialSettings();\n }\n\n function initialize() {\n eventBus.on(MediaPlayerEvents.PLAYBACK_RATE_CHANGED, _onPlaybackRateChanged, instance);\n eventBus.on(MediaPlayerEvents.MANIFEST_LOADED, _onManifestLoaded, instance);\n eventBus.on(MediaPlayerEvents.BUFFER_LEVEL_STATE_CHANGED, _onBufferLevelStateChanged, instance);\n }\n\n function setConfig(config) {\n if (!config) return;\n\n if (config.abrController) {\n abrController = config.abrController;\n }\n\n if (config.dashMetrics) {\n dashMetrics = config.dashMetrics;\n }\n\n if (config.playbackController) {\n playbackController = config.playbackController;\n }\n }\n\n function _resetInitialSettings() {\n internalData = {\n pr: 1,\n nor: null,\n st: null,\n sf: null,\n sid: `${Utils.generateUuid()}`,\n bs: {\n audio: BUFFER_STATES.INITIALIZING,\n video: BUFFER_STATES.INITIALIZING\n },\n cid: null,\n did: `${DEFAULT_DEVICE_ID}`\n\n };\n }\n\n function getQueryParameter(request) {\n try {\n if (settings.get().streaming.cmcd && settings.get().streaming.cmcd.enabled) {\n const cmcdData = _getCmcdData(request);\n const finalPayloadString = _buildFinalString(cmcdData);\n\n return {\n key: CMCD_REQUEST_FIELD_NAME,\n value: finalPayloadString\n };\n }\n\n return null;\n } catch (e) {\n return null;\n }\n }\n\n function _getCmcdData(request) {\n try {\n let cmcdData = null;\n\n if (request.type === HTTPRequest.MPD_TYPE) {\n _setDefaultContentId(request);\n return _getCmcdDataForMpd(request);\n } else if (request.type === HTTPRequest.MEDIA_SEGMENT_TYPE) {\n return _getCmcdDataForMediaSegment(request);\n } else if (request.type === HTTPRequest.INIT_SEGMENT_TYPE) {\n return _getCmcdDataForInitSegment(request);\n }\n\n return cmcdData;\n } catch (e) {\n return null;\n }\n }\n\n function _setDefaultContentId(request) {\n try {\n internalData.cid = `${Utils.generateHashCode(request.url)}`;\n } catch (e) {\n\n }\n }\n\n function _getCmcdDataForMpd() {\n const data = _getGenericCmcdData();\n\n data.ot = `${OBJECT_TYPES.MANIFEST}`;\n\n return data;\n }\n\n function _getCmcdDataForMediaSegment(request) {\n const data = _getGenericCmcdData();\n const encodedBitrate = _getBitrateByRequest(request);\n const d = _getObjectDurationByRequest(request);\n const ot = request.mediaType === 'video' ? `${OBJECT_TYPES.VIDEO}` : request.mediaType === 'audio' ? `${OBJECT_TYPES.AUDIO}` : request.mediaType === 'fragmentedText' ? `${OBJECT_TYPES.CAPTION}` : null;\n const mtp = _getMeasuredThroughputByType(request.mediaType);\n const dl = _getDeadlineByType(request.mediaType);\n const bs = _getBufferStateByRequest(request);\n\n if (encodedBitrate) {\n data.br = encodedBitrate;\n }\n\n if (ot) {\n data.ot = ot;\n }\n\n if (!isNaN(d)) {\n data.d = d;\n }\n\n if (!isNaN(mtp)) {\n data.mtp = mtp;\n }\n\n if (!isNaN(dl)) {\n data.dl = dl;\n }\n\n if (!isNaN(bs) && bs !== null) {\n data.bs = bs;\n }\n\n return data;\n }\n\n function _getCmcdDataForInitSegment() {\n const data = _getGenericCmcdData();\n\n data.ot = `${OBJECT_TYPES.INIT}`;\n\n return data;\n }\n\n function _getGenericCmcdData() {\n const data = {};\n\n data.v = CMCD_VERSION;\n data.sid = settings.get().streaming.cmcd.sid ? settings.get().streaming.cmcd.sid : internalData.sid;\n data.cid = settings.get().streaming.cmcd.cid ? settings.get().streaming.cmcd.cid : internalData.cid;\n data.did = settings.get().streaming.cmcd.did ? settings.get().streaming.cmcd.did : internalData.did;\n\n data.sid = `\"${data.sid}\"`;\n data.cid = `\"${data.cid}\"`;\n data.did = `\"${data.did}\"`;\n\n if (!isNaN(internalData.pr) && internalData.pr !== 1 && internalData.pr !== null) {\n data.pr = internalData.pr;\n }\n\n if (internalData.st) {\n data.st = internalData.st;\n }\n\n if (internalData.sf) {\n data.sf = internalData.sf;\n }\n\n return data;\n }\n\n function _getBitrateByRequest(request) {\n try {\n const quality = request.quality;\n const bitrateList = request.mediaInfo.bitrateList;\n\n return parseInt(bitrateList[quality].bandwidth / 1000);\n } catch (e) {\n return null;\n }\n }\n\n function _getObjectDurationByRequest(request) {\n try {\n return !isNaN(request.duration) ? Math.round(request.duration * 1000) : null;\n } catch (e) {\n return null;\n }\n }\n\n function _getMeasuredThroughputByType(mediaType) {\n try {\n return Math.round(abrController.getThroughputHistory().getSafeAverageThroughput(mediaType));\n } catch (e) {\n return null;\n }\n }\n\n function _getDeadlineByType(mediaType) {\n try {\n const playbackRate = internalData.pr;\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n\n if (!isNaN(playbackRate) && !isNaN(bufferLevel)) {\n return parseInt((bufferLevel / playbackRate) * 1000);\n }\n\n return null;\n } catch (e) {\n return null;\n }\n }\n\n function _getBufferStateByRequest(request) {\n try {\n const mediaType = request.mediaType;\n if (internalData.bs[mediaType] !== null) {\n return internalData.bs[mediaType];\n }\n\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n const duration = request.duration;\n if (bufferLevel < duration) {\n return BUFFER_STATES.RISK;\n }\n\n return BUFFER_STATES.DEFAULT;\n } catch (e) {\n\n }\n }\n\n function _onPlaybackRateChanged(data) {\n try {\n internalData.pr = data.playbackRate;\n } catch (e) {\n\n }\n }\n\n function _onManifestLoaded(data) {\n try {\n const isDynamic = dashManifestModel.getIsDynamic(data.data);\n const st = isDynamic ? `${STREAM_TYPES.LIVE}` : `${STREAM_TYPES.VOD}`;\n const sf = data.protocol && data.protocol === 'MSS' ? `${STREAMING_FORMATS.MSS}` : `${STREAMING_FORMATS.DASH}`;\n\n internalData.st = `${st}`;\n internalData.sf = `${sf}`;\n } catch (e) {\n }\n }\n\n function _onBufferLevelStateChanged(data) {\n try {\n if (data.state && data.mediaType) {\n let state = null;\n switch (data.state) {\n case MediaPlayerEvents.BUFFER_LOADED:\n state = BUFFER_STATES.DEFAULT;\n break;\n case MediaPlayerEvents.BUFFER_EMPTY:\n if (playbackController.isSeeking()) {\n state = BUFFER_STATES.SEEKING;\n }\n state = BUFFER_STATES.EMPTY;\n break;\n default:\n }\n internalData.bs[data.mediaType] = state;\n\n }\n } catch (e) {\n\n }\n }\n\n function _buildFinalString(cmcdData) {\n try {\n if (!cmcdData) {\n return null;\n }\n const keys = Object.keys(cmcdData);\n const length = keys.length;\n\n return keys.reduce((acc, key, index) => {\n acc += `${key}=${cmcdData[key]}`;\n if (index < length - 1) {\n acc += ',';\n }\n\n return acc;\n }, '');\n\n } catch (e) {\n return null;\n }\n }\n\n function reset() {\n eventBus.off(MediaPlayerEvents.PLAYBACK_RATE_CHANGED, _onPlaybackRateChanged, this);\n eventBus.off(MediaPlayerEvents.MANIFEST_LOADED, _onManifestLoaded, this);\n eventBus.off(MediaPlayerEvents.BUFFER_LEVEL_STATE_CHANGED, _onBufferLevelStateChanged, instance);\n\n _resetInitialSettings();\n }\n\n instance = {\n getQueryParameter,\n setConfig,\n reset,\n initialize\n };\n\n setup();\n\n return instance;\n}\n\nCmcdModel.__dashjs_factory_name = 'CmcdModel';\nexport default FactoryMaker.getSingletonFactory(CmcdModel);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\nimport FragmentRequest from '../vo/FragmentRequest';\n\nconst FRAGMENT_MODEL_LOADING = 'loading';\nconst FRAGMENT_MODEL_EXECUTED = 'executed';\nconst FRAGMENT_MODEL_CANCELED = 'canceled';\nconst FRAGMENT_MODEL_FAILED = 'failed';\n\nfunction FragmentModel(config) {\n\n config = config || {};\n const eventBus = config.eventBus;\n const events = config.events;\n const dashMetrics = config.dashMetrics;\n const fragmentLoader = config.fragmentLoader;\n const debug = config.debug;\n const streamId = config.streamId;\n\n let instance,\n logger,\n executedRequests,\n loadingRequests;\n\n function setup() {\n logger = debug.getLogger(instance);\n resetInitialSettings();\n eventBus.on(events.LOADING_COMPLETED, onLoadingCompleted, instance);\n eventBus.on(events.LOADING_DATA_PROGRESS, onLoadingInProgress, instance);\n eventBus.on(events.LOADING_ABANDONED, onLoadingAborted, instance);\n }\n\n function isFragmentLoaded(request) {\n const isEqualComplete = function (req1, req2) {\n return ((req1.action === FragmentRequest.ACTION_COMPLETE) && (req1.action === req2.action));\n };\n\n const isEqualMedia = function (req1, req2) {\n return !isNaN(req1.index) && (req1.startTime === req2.startTime) && (req1.adaptationIndex === req2.adaptationIndex) && (req1.type === req2.type);\n };\n\n const isEqualInit = function (req1, req2) {\n return isNaN(req1.index) && isNaN(req2.index) && (req1.quality === req2.quality);\n };\n\n const check = function (requests) {\n let isLoaded = false;\n\n requests.some(req => {\n if (isEqualMedia(request, req) || isEqualInit(request, req) || isEqualComplete(request, req)) {\n isLoaded = true;\n return isLoaded;\n }\n });\n return isLoaded;\n };\n\n if (!request) {\n return false;\n }\n\n return check(executedRequests);\n }\n\n function isFragmentLoadedOrPending(request) {\n let isLoaded = false;\n let i = 0;\n let req;\n\n // First, check if the fragment has already been loaded\n isLoaded = isFragmentLoaded(request);\n\n // Then, check if the fragment is about to be loeaded\n if (!isLoaded) {\n for (i = 0; i < loadingRequests.length; i++) {\n req = loadingRequests[i];\n if ((request.url === req.url) && (request.startTime === req.startTime)) {\n isLoaded = true;\n }\n }\n }\n\n return isLoaded;\n }\n\n /**\n *\n * Gets an array of {@link FragmentRequest} objects\n *\n * @param {Object} filter The object with properties by which the method filters the requests to be returned.\n * the only mandatory property is state, which must be a value from\n * other properties should match the properties of {@link FragmentRequest}. E.g.:\n * getRequests({state: FragmentModel.FRAGMENT_MODEL_EXECUTED, quality: 0}) - returns\n * all the requests from executedRequests array where requests.quality = filter.quality\n *\n * @returns {Array}\n * @memberof FragmentModel#\n */\n function getRequests(filter) {\n const states = filter ? filter.state instanceof Array ? filter.state : [filter.state] : [];\n\n let filteredRequests = [];\n states.forEach(state => {\n const requests = getRequestsForState(state);\n filteredRequests = filteredRequests.concat(filterRequests(requests, filter));\n });\n\n return filteredRequests;\n }\n\n function getRequestThreshold(req) {\n return isNaN(req.duration) ? 0.25 : Math.min(req.duration / 8, 0.5);\n }\n\n function removeExecutedRequestsBeforeTime(time) {\n executedRequests = executedRequests.filter(req => {\n const threshold = getRequestThreshold(req);\n return isNaN(req.startTime) || (time !== undefined ? req.startTime >= time - threshold : false);\n });\n }\n\n function removeExecutedRequestsAfterTime(time) {\n executedRequests = executedRequests.filter(req => {\n return isNaN(req.startTime) || (time !== undefined ? req.startTime < time : false);\n });\n }\n\n function removeExecutedRequestsInTimeRange(start, end) {\n if (end <= start + 0.5) {\n return;\n }\n\n executedRequests = executedRequests.filter(req => {\n const threshold = getRequestThreshold(req);\n return (isNaN(req.startTime) || req.startTime >= (end - threshold)) ||\n (isNaN(req.duration) || (req.startTime + req.duration) <= (start + threshold));\n });\n }\n\n // Remove requests that are not \"represented\" by any of buffered ranges\n function syncExecutedRequestsWithBufferedRange(bufferedRanges, streamDuration) {\n if (!bufferedRanges || bufferedRanges.length === 0) {\n removeExecutedRequestsBeforeTime();\n return;\n }\n\n let start = 0;\n for (let i = 0, ln = bufferedRanges.length; i < ln; i++) {\n removeExecutedRequestsInTimeRange(start, bufferedRanges.start(i));\n start = bufferedRanges.end(i);\n }\n if (streamDuration > 0) {\n removeExecutedRequestsInTimeRange(start, streamDuration);\n }\n }\n\n function abortRequests() {\n fragmentLoader.abort();\n loadingRequests = [];\n }\n\n function executeRequest(request) {\n switch (request.action) {\n case FragmentRequest.ACTION_COMPLETE:\n executedRequests.push(request);\n addSchedulingInfoMetrics(request, FRAGMENT_MODEL_EXECUTED);\n logger.debug('STREAM_COMPLETED');\n eventBus.trigger(events.STREAM_COMPLETED, {\n request: request\n });\n break;\n case FragmentRequest.ACTION_DOWNLOAD:\n addSchedulingInfoMetrics(request, FRAGMENT_MODEL_LOADING);\n loadingRequests.push(request);\n loadCurrentFragment(request);\n break;\n default:\n logger.warn('Unknown request action.');\n }\n }\n\n function loadCurrentFragment(request) {\n eventBus.trigger(events.FRAGMENT_LOADING_STARTED, {\n streamId: streamId,\n request: request\n });\n fragmentLoader.load(request);\n }\n\n function getRequestForTime(arr, time, threshold) {\n // loop through the executed requests and pick the one for which the playback interval matches the given time\n const lastIdx = arr.length - 1;\n for (let i = lastIdx; i >= 0; i--) {\n const req = arr[i];\n const start = req.startTime;\n const end = start + req.duration;\n threshold = !isNaN(threshold) ? threshold : getRequestThreshold(req);\n if ((!isNaN(start) && !isNaN(end) && ((time + threshold) >= start) && ((time - threshold) < end)) || (isNaN(start) && isNaN(time))) {\n return req;\n }\n }\n return null;\n }\n\n function filterRequests(arr, filter) {\n // for time use a specific filtration function\n if (filter.hasOwnProperty('time')) {\n return [getRequestForTime(arr, filter.time, filter.threshold)];\n }\n\n return arr.filter(request => {\n for (const prop in filter) {\n if (prop === 'state') continue;\n if (filter.hasOwnProperty(prop) && request[prop] != filter[prop]) return false;\n }\n\n return true;\n });\n }\n\n function getRequestsForState(state) {\n let requests;\n switch (state) {\n case FRAGMENT_MODEL_LOADING:\n requests = loadingRequests;\n break;\n case FRAGMENT_MODEL_EXECUTED:\n requests = executedRequests;\n break;\n default:\n requests = [];\n }\n return requests;\n }\n\n function addSchedulingInfoMetrics(request, state) {\n dashMetrics.addSchedulingInfo(request, state);\n dashMetrics.addRequestsQueue(request.mediaType, loadingRequests, executedRequests);\n }\n\n function onLoadingCompleted(e) {\n if (e.sender !== fragmentLoader) return;\n\n loadingRequests.splice(loadingRequests.indexOf(e.request), 1);\n\n if (e.response && !e.error) {\n executedRequests.push(e.request);\n }\n\n addSchedulingInfoMetrics(e.request, e.error ? FRAGMENT_MODEL_FAILED : FRAGMENT_MODEL_EXECUTED);\n\n eventBus.trigger(events.FRAGMENT_LOADING_COMPLETED, {\n request: e.request,\n response: e.response,\n error: e.error,\n sender: this\n });\n }\n\n function onLoadingInProgress(e) {\n if (e.sender !== fragmentLoader) return;\n\n eventBus.trigger(events.FRAGMENT_LOADING_PROGRESS, {\n request: e.request,\n response: e.response,\n error: e.error,\n sender: this\n });\n }\n\n function onLoadingAborted(e) {\n if (e.sender !== fragmentLoader) return;\n\n eventBus.trigger(events.FRAGMENT_LOADING_ABANDONED, { streamId: streamId, request: e.request, mediaType: e.mediaType });\n }\n\n function resetInitialSettings() {\n executedRequests = [];\n loadingRequests = [];\n }\n\n function reset() {\n eventBus.off(events.LOADING_COMPLETED, onLoadingCompleted, this);\n eventBus.off(events.LOADING_DATA_PROGRESS, onLoadingInProgress, this);\n eventBus.off(events.LOADING_ABANDONED, onLoadingAborted, this);\n\n if (fragmentLoader) {\n fragmentLoader.reset();\n }\n resetInitialSettings();\n }\n\n function addExecutedRequest(request) {\n executedRequests.push(request);\n }\n\n instance = {\n getRequests: getRequests,\n isFragmentLoaded: isFragmentLoaded,\n isFragmentLoadedOrPending: isFragmentLoadedOrPending,\n removeExecutedRequestsBeforeTime: removeExecutedRequestsBeforeTime,\n removeExecutedRequestsAfterTime: removeExecutedRequestsAfterTime,\n syncExecutedRequestsWithBufferedRange: syncExecutedRequestsWithBufferedRange,\n abortRequests: abortRequests,\n executeRequest: executeRequest,\n reset: reset,\n addExecutedRequest: addExecutedRequest\n };\n\n setup();\n return instance;\n}\n\nFragmentModel.__dashjs_factory_name = 'FragmentModel';\nconst factory = FactoryMaker.getClassFactory(FragmentModel);\nfactory.FRAGMENT_MODEL_LOADING = FRAGMENT_MODEL_LOADING;\nfactory.FRAGMENT_MODEL_EXECUTED = FRAGMENT_MODEL_EXECUTED;\nfactory.FRAGMENT_MODEL_CANCELED = FRAGMENT_MODEL_CANCELED;\nfactory.FRAGMENT_MODEL_FAILED = FRAGMENT_MODEL_FAILED;\nFactoryMaker.updateClassFactory(FragmentModel.__dashjs_factory_name, factory);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\n\n/**\n * @module FetchLoader\n * @ignore\n * @description Manages download of resources via HTTP using fetch.\n * @param {Object} cfg - dependencies from parent\n */\nfunction FetchLoader(cfg) {\n\n cfg = cfg || {};\n const requestModifier = cfg.requestModifier;\n const boxParser = cfg.boxParser;\n\n let instance;\n\n function load(httpRequest) {\n\n // Variables will be used in the callback functions\n const requestStartTime = new Date();\n const request = httpRequest.request;\n\n const headers = new Headers(); /*jshint ignore:line*/\n if (request.range) {\n headers.append('Range', 'bytes=' + request.range);\n }\n\n if (!request.requestStartDate) {\n request.requestStartDate = requestStartTime;\n }\n\n if (requestModifier) {\n // modifyRequestHeader expects a XMLHttpRequest object so,\n // to keep backward compatibility, we should expose a setRequestHeader method\n // TODO: Remove RequestModifier dependency on XMLHttpRequest object and define\n // a more generic way to intercept/modify requests\n requestModifier.modifyRequestHeader({\n setRequestHeader: function (header, value) {\n headers.append(header, value);\n }\n });\n }\n\n let abortController;\n if (typeof window.AbortController === 'function') {\n abortController = new AbortController(); /*jshint ignore:line*/\n httpRequest.abortController = abortController;\n abortController.signal.onabort = httpRequest.onabort;\n }\n\n const reqOptions = {\n method: httpRequest.method,\n headers: headers,\n credentials: httpRequest.withCredentials ? 'include' : undefined,\n signal: abortController ? abortController.signal : undefined\n };\n\n fetch(httpRequest.url, reqOptions).then(function (response) {\n if (!httpRequest.response) {\n httpRequest.response = {};\n }\n httpRequest.response.status = response.status;\n httpRequest.response.statusText = response.statusText;\n httpRequest.response.responseURL = response.url;\n\n if (!response.ok) {\n httpRequest.onerror();\n }\n\n let responseHeaders = '';\n for (const key of response.headers.keys()) {\n responseHeaders += key + ': ' + response.headers.get(key) + '\\r\\n';\n }\n httpRequest.response.responseHeaders = responseHeaders;\n\n if (!response.body) {\n // Fetch returning a ReadableStream response body is not currently supported by all browsers.\n // Browser compatibility: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\n // If it is not supported, returning the whole segment when it's ready (as xhr)\n return response.arrayBuffer().then(function (buffer) {\n httpRequest.response.response = buffer;\n const event = {\n loaded: buffer.byteLength,\n total: buffer.byteLength,\n stream: false\n };\n httpRequest.progress(event);\n httpRequest.onload();\n httpRequest.onend();\n return;\n });\n }\n\n const totalBytes = parseInt(response.headers.get('Content-Length'), 10);\n let bytesReceived = 0;\n let signaledFirstByte = false;\n let remaining = new Uint8Array();\n let offset = 0;\n\n httpRequest.reader = response.body.getReader();\n let downLoadedData = [];\n\n const processResult = function ({value, done}) {\n if (done) {\n if (remaining) {\n // If there is pending data, call progress so network metrics\n // are correctly generated\n // Same structure as https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/onprogress\n httpRequest.progress({\n loaded: bytesReceived,\n total: isNaN(totalBytes) ? bytesReceived : totalBytes,\n lengthComputable: true,\n time: calculateDownloadedTime(downLoadedData, bytesReceived),\n stream: true\n });\n\n httpRequest.response.response = remaining.buffer;\n }\n httpRequest.onload();\n httpRequest.onend();\n return;\n }\n\n if (value && value.length > 0) {\n remaining = concatTypedArray(remaining, value);\n bytesReceived += value.length;\n downLoadedData.push({\n ts: Date.now(),\n bytes: value.length\n });\n\n const boxesInfo = boxParser.findLastTopIsoBoxCompleted(['moov', 'mdat'], remaining, offset);\n if (boxesInfo.found) {\n const end = boxesInfo.lastCompletedOffset + boxesInfo.size;\n\n // If we are going to pass full buffer, avoid copying it and pass\n // complete buffer. Otherwise clone the part of the buffer that is completed\n // and adjust remaining buffer. A clone is needed because ArrayBuffer of a typed-array\n // keeps a reference to the original data\n let data;\n if (end === remaining.length) {\n data = remaining;\n remaining = new Uint8Array();\n } else {\n data = new Uint8Array(remaining.subarray(0, end));\n remaining = remaining.subarray(end);\n }\n\n // Announce progress but don't track traces. Throughput measures are quite unstable\n // when they are based in small amount of data\n httpRequest.progress({\n data: data.buffer,\n lengthComputable: false,\n noTrace: true\n });\n\n offset = 0;\n } else {\n offset = boxesInfo.lastCompletedOffset;\n\n // Call progress so it generates traces that will be later used to know when the first byte\n // were received\n if (!signaledFirstByte) {\n httpRequest.progress({\n lengthComputable: false,\n noTrace: true\n });\n signaledFirstByte = true;\n }\n }\n }\n read(httpRequest, processResult);\n };\n\n read(httpRequest, processResult);\n })\n .catch(function (e) {\n if (httpRequest.onerror) {\n httpRequest.onerror(e);\n }\n });\n }\n\n function read(httpRequest, processResult) {\n httpRequest.reader.read()\n .then(processResult)\n .catch(function (e) {\n if (httpRequest.onerror && httpRequest.response.status === 200) {\n // Error, but response code is 200, trigger error\n httpRequest.onerror(e);\n }\n });\n }\n\n function concatTypedArray(remaining, data) {\n if (remaining.length === 0) {\n return data;\n }\n const result = new Uint8Array(remaining.length + data.length);\n result.set(remaining);\n result.set(data, remaining.length);\n return result;\n }\n\n function abort(request) {\n if (request.abortController) {\n // For firefox and edge\n request.abortController.abort();\n } else if (request.reader) {\n // For Chrome\n try {\n request.reader.cancel();\n request.onabort();\n } catch (e) {\n // throw exceptions (TypeError) when reader was previously closed,\n // for example, because a network issue\n }\n }\n }\n\n function calculateDownloadedTime(datum, bytesReceived) {\n datum = datum.filter(data => data.bytes > ((bytesReceived / 4) / datum.length));\n if (datum.length > 1) {\n let time = 0;\n const avgTimeDistance = (datum[datum.length - 1].ts - datum[0].ts) / datum.length;\n datum.forEach((data, index) => {\n // To be counted the data has to be over a threshold\n const next = datum[index + 1];\n if (next) {\n const distance = next.ts - data.ts;\n time += distance < avgTimeDistance ? distance : 0;\n }\n });\n return time;\n }\n return null;\n }\n\n instance = {\n load: load,\n abort: abort,\n calculateDownloadedTime: calculateDownloadedTime\n };\n\n return instance;\n}\n\nFetchLoader.__dashjs_factory_name = 'FetchLoader';\n\nconst factory = FactoryMaker.getClassFactory(FetchLoader);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport XHRLoader from './XHRLoader';\nimport FetchLoader from './FetchLoader';\nimport {HTTPRequest} from '../vo/metrics/HTTPRequest';\nimport FactoryMaker from '../../core/FactoryMaker';\nimport DashJSError from '../vo/DashJSError';\nimport CmcdModel from '../models/CmcdModel';\nimport Utils from '../../core/Utils';\n\n/**\n * @module HTTPLoader\n * @ignore\n * @description Manages download of resources via HTTP.\n * @param {Object} cfg - dependancies from parent\n */\nfunction HTTPLoader(cfg) {\n\n cfg = cfg || {};\n\n const context = this.context;\n const errHandler = cfg.errHandler;\n const dashMetrics = cfg.dashMetrics;\n const mediaPlayerModel = cfg.mediaPlayerModel;\n const requestModifier = cfg.requestModifier;\n const boxParser = cfg.boxParser;\n const useFetch = cfg.useFetch || false;\n const errors = cfg.errors;\n\n let instance,\n requests,\n delayedRequests,\n retryRequests,\n downloadErrorToRequestTypeMap,\n cmcdModel;\n\n function setup() {\n requests = [];\n delayedRequests = [];\n retryRequests = [];\n cmcdModel = CmcdModel(context).getInstance();\n\n downloadErrorToRequestTypeMap = {\n [HTTPRequest.MPD_TYPE]: errors.DOWNLOAD_ERROR_ID_MANIFEST_CODE,\n [HTTPRequest.XLINK_EXPANSION_TYPE]: errors.DOWNLOAD_ERROR_ID_XLINK_CODE,\n [HTTPRequest.INIT_SEGMENT_TYPE]: errors.DOWNLOAD_ERROR_ID_INITIALIZATION_CODE,\n [HTTPRequest.MEDIA_SEGMENT_TYPE]: errors.DOWNLOAD_ERROR_ID_CONTENT_CODE,\n [HTTPRequest.INDEX_SEGMENT_TYPE]: errors.DOWNLOAD_ERROR_ID_CONTENT_CODE,\n [HTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE]: errors.DOWNLOAD_ERROR_ID_CONTENT_CODE,\n [HTTPRequest.OTHER_TYPE]: errors.DOWNLOAD_ERROR_ID_CONTENT_CODE\n };\n }\n\n function internalLoad(config, remainingAttempts) {\n const request = config.request;\n const traces = [];\n let firstProgress = true;\n let needFailureReport = true;\n let requestStartTime = new Date();\n let lastTraceTime = requestStartTime;\n let lastTraceReceivedCount = 0;\n let httpRequest;\n\n if (!requestModifier || !dashMetrics || !errHandler) {\n throw new Error('config object is not correct or missing');\n }\n\n const handleLoaded = function (success) {\n needFailureReport = false;\n\n request.requestStartDate = requestStartTime;\n request.requestEndDate = new Date();\n request.firstByteDate = request.firstByteDate || requestStartTime;\n\n if (!request.checkExistenceOnly) {\n dashMetrics.addHttpRequest(request, httpRequest.response ? httpRequest.response.responseURL : null,\n httpRequest.response ? httpRequest.response.status : null,\n httpRequest.response && httpRequest.response.getAllResponseHeaders ? httpRequest.response.getAllResponseHeaders() :\n httpRequest.response ? httpRequest.response.responseHeaders : [],\n success ? traces : null);\n\n if (request.type === HTTPRequest.MPD_TYPE) {\n dashMetrics.addManifestUpdate(request.type, request.requestStartDate, request.requestEndDate);\n }\n }\n };\n\n const onloadend = function () {\n if (requests.indexOf(httpRequest) === -1) {\n return;\n } else {\n requests.splice(requests.indexOf(httpRequest), 1);\n }\n\n if (needFailureReport) {\n handleLoaded(false);\n\n if (remainingAttempts > 0) {\n remainingAttempts--;\n let retryRequest = {config: config};\n retryRequests.push(retryRequest);\n retryRequest.timeout = setTimeout(function () {\n if (retryRequests.indexOf(retryRequest) === -1) {\n return;\n } else {\n retryRequests.splice(retryRequests.indexOf(retryRequest), 1);\n }\n internalLoad(config, remainingAttempts);\n }, mediaPlayerModel.getRetryIntervalsForType(request.type));\n } else {\n errHandler.error(new DashJSError(downloadErrorToRequestTypeMap[request.type], request.url + ' is not available', {\n request: request,\n response: httpRequest.response\n }));\n\n if (config.error) {\n config.error(request, 'error', httpRequest.response.statusText);\n }\n\n if (config.complete) {\n config.complete(request, httpRequest.response.statusText);\n }\n }\n }\n };\n\n const progress = function (event) {\n const currentTime = new Date();\n\n if (firstProgress) {\n firstProgress = false;\n if (!event.lengthComputable ||\n (event.lengthComputable && event.total !== event.loaded)) {\n request.firstByteDate = currentTime;\n }\n }\n\n if (event.lengthComputable) {\n request.bytesLoaded = event.loaded;\n request.bytesTotal = event.total;\n }\n\n if (!event.noTrace) {\n traces.push({\n s: lastTraceTime,\n d: event.time ? event.time : currentTime.getTime() - lastTraceTime.getTime(),\n b: [event.loaded ? event.loaded - lastTraceReceivedCount : 0]\n });\n\n lastTraceTime = currentTime;\n lastTraceReceivedCount = event.loaded;\n }\n\n if (config.progress && event) {\n config.progress(event);\n }\n };\n\n const onload = function () {\n if (httpRequest.response.status >= 200 && httpRequest.response.status <= 299) {\n handleLoaded(true);\n\n if (config.success) {\n config.success(httpRequest.response.response, httpRequest.response.statusText, httpRequest.response.responseURL);\n }\n\n if (config.complete) {\n config.complete(request, httpRequest.response.statusText);\n }\n }\n };\n\n const onabort = function () {\n if (config.abort) {\n config.abort(request);\n }\n };\n\n let loader;\n if (useFetch && window.fetch && request.responseType === 'arraybuffer' && request.type === HTTPRequest.MEDIA_SEGMENT_TYPE) {\n loader = FetchLoader(context).create({\n requestModifier: requestModifier,\n boxParser: boxParser\n });\n } else {\n loader = XHRLoader(context).create({\n requestModifier: requestModifier\n });\n }\n\n let modifiedUrl = requestModifier.modifyRequestURL(request.url);\n const additionalQueryParameter = _getAdditionalQueryParameter(request);\n modifiedUrl = Utils.addAditionalQueryParameterToUrl(modifiedUrl, additionalQueryParameter);\n const verb = request.checkExistenceOnly ? HTTPRequest.HEAD : HTTPRequest.GET;\n const withCredentials = mediaPlayerModel.getXHRWithCredentialsForType(request.type);\n\n\n httpRequest = {\n url: modifiedUrl,\n method: verb,\n withCredentials: withCredentials,\n request: request,\n onload: onload,\n onend: onloadend,\n onerror: onloadend,\n progress: progress,\n onabort: onabort,\n loader: loader\n };\n\n // Adds the ability to delay single fragment loading time to control buffer.\n let now = new Date().getTime();\n if (isNaN(request.delayLoadingTime) || now >= request.delayLoadingTime) {\n // no delay - just send\n requests.push(httpRequest);\n loader.load(httpRequest);\n } else {\n // delay\n let delayedRequest = {httpRequest: httpRequest};\n delayedRequests.push(delayedRequest);\n delayedRequest.delayTimeout = setTimeout(function () {\n if (delayedRequests.indexOf(delayedRequest) === -1) {\n return;\n } else {\n delayedRequests.splice(delayedRequests.indexOf(delayedRequest), 1);\n }\n try {\n requestStartTime = new Date();\n lastTraceTime = requestStartTime;\n requests.push(delayedRequest.httpRequest);\n loader.load(delayedRequest.httpRequest);\n } catch (e) {\n delayedRequest.httpRequest.onerror();\n }\n }, (request.delayLoadingTime - now));\n }\n }\n\n function _getAdditionalQueryParameter(request) {\n try {\n const additionalQueryParameter = [];\n const cmcdQueryParameter = cmcdModel.getQueryParameter(request);\n\n if (cmcdQueryParameter) {\n additionalQueryParameter.push(cmcdQueryParameter);\n }\n\n return additionalQueryParameter;\n } catch (e) {\n return [];\n }\n }\n\n /**\n * Initiates a download of the resource described by config.request\n * @param {Object} config - contains request (FragmentRequest or derived type), and callbacks\n * @memberof module:HTTPLoader\n * @instance\n */\n function load(config) {\n if (config.request) {\n internalLoad(\n config,\n mediaPlayerModel.getRetryAttemptsForType(\n config.request.type\n )\n );\n } else {\n if (config.error) {\n config.error(config.request, 'error');\n }\n }\n }\n\n /**\n * Aborts any inflight downloads\n * @memberof module:HTTPLoader\n * @instance\n */\n function abort() {\n retryRequests.forEach(t => {\n clearTimeout(t.timeout);\n // abort request in order to trigger LOADING_ABANDONED event\n if (t.config.request && t.config.abort) {\n t.config.abort(t.config.request);\n }\n });\n retryRequests = [];\n\n delayedRequests.forEach(x => clearTimeout(x.delayTimeout));\n delayedRequests = [];\n\n requests.forEach(x => {\n // abort will trigger onloadend which we don't want\n // when deliberately aborting inflight requests -\n // set them to undefined so they are not called\n x.onloadend = x.onerror = x.onprogress = undefined;\n x.loader.abort(x);\n });\n requests = [];\n }\n\n instance = {\n load: load,\n abort: abort\n };\n\n setup();\n\n return instance;\n}\n\nHTTPLoader.__dashjs_factory_name = 'HTTPLoader';\n\nconst factory = FactoryMaker.getClassFactory(HTTPLoader);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker';\nimport HTTPLoader from '../../streaming/net/HTTPLoader';\n\n/**\n * @module\n * @description Choose right url loader for scheme\n * @ignore\n */\nfunction SchemeLoaderFactory() {\n\n let instance;\n\n let schemeLoaderMap;\n\n function registerLoader(scheme, loader) {\n schemeLoaderMap[scheme] = loader;\n }\n\n function unregisterLoader(scheme) {\n if (schemeLoaderMap[scheme]) {\n delete schemeLoaderMap[scheme];\n }\n }\n\n function unregisterAllLoader() {\n schemeLoaderMap = {};\n }\n\n function getLoader(url) {\n\n // iterates through schemeLoaderMap to find a loader for the scheme\n for (var scheme in schemeLoaderMap) {\n if (schemeLoaderMap.hasOwnProperty(scheme) && url.startsWith(scheme)) {\n return schemeLoaderMap[scheme];\n }\n }\n\n return HTTPLoader;\n }\n\n function reset() {\n unregisterAllLoader();\n }\n\n function setup() {\n reset();\n }\n\n setup();\n\n instance = {\n getLoader: getLoader,\n registerLoader: registerLoader,\n unregisterLoader: unregisterLoader,\n unregisterAllLoader: unregisterAllLoader,\n reset: reset\n };\n\n return instance;\n}\n\nSchemeLoaderFactory.__dashjs_factory_name = 'SchemeLoaderFactory';\nconst factory = FactoryMaker.getSingletonFactory(SchemeLoaderFactory);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker';\nimport SchemeLoaderFactory from '../../streaming/net/SchemeLoaderFactory';\n\n/**\n * @class URLLoader\n * @description Call Offline Loader or Online Loader dependaing on URL\n * @param {Object} cfg - dependances\n * @ignore\n*/\nfunction URLLoader(cfg) {\n\n cfg = cfg || {};\n const context = this.context;\n\n let instance,\n schemeLoaderFactory,\n loader;\n\n schemeLoaderFactory = SchemeLoaderFactory(context).getInstance();\n\n function load(config) {\n\n let loaderFactory = schemeLoaderFactory.getLoader(config && config.request ? config.request.url : null);\n loader = loaderFactory(context).create({\n errHandler: cfg.errHandler,\n mediaPlayerModel: cfg.mediaPlayerModel,\n requestModifier: cfg.requestModifier,\n useFetch: cfg.useFetch || null,\n dashMetrics: cfg.dashMetrics,\n boxParser: cfg.boxParser ? cfg.boxParser : null,\n constants: cfg.constants ? cfg.constants : null,\n dashConstants: cfg.dashConstants ? cfg.dashConstants : null,\n urlUtils: cfg.urlUtils ? cfg.urlUtils : null,\n errors: cfg.errors\n });\n\n loader.load(config);\n }\n\n function abort() {\n if (loader) {\n loader.abort();\n }\n }\n instance = {\n load: load,\n abort: abort\n };\n\n return instance;\n\n}\nURLLoader.__dashjs_factory_name = 'URLLoader';\n\nconst factory = FactoryMaker.getClassFactory(URLLoader);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker';\n\n/**\n * @module XHRLoader\n * @ignore\n * @description Manages download of resources via HTTP.\n * @param {Object} cfg - dependencies from parent\n */\nfunction XHRLoader(cfg) {\n\n cfg = cfg || {};\n const requestModifier = cfg.requestModifier;\n\n let instance;\n\n function load(httpRequest) {\n\n // Variables will be used in the callback functions\n const requestStartTime = new Date();\n const request = httpRequest.request;\n\n let xhr = new XMLHttpRequest();\n xhr.open(httpRequest.method, httpRequest.url, true);\n\n if (request.responseType) {\n xhr.responseType = request.responseType;\n }\n\n if (request.range) {\n xhr.setRequestHeader('Range', 'bytes=' + request.range);\n }\n\n if (!request.requestStartDate) {\n request.requestStartDate = requestStartTime;\n }\n\n if (requestModifier) {\n xhr = requestModifier.modifyRequestHeader(xhr);\n }\n\n xhr.withCredentials = httpRequest.withCredentials;\n\n xhr.onload = httpRequest.onload;\n xhr.onloadend = httpRequest.onend;\n xhr.onerror = httpRequest.onerror;\n xhr.onprogress = httpRequest.progress;\n xhr.onabort = httpRequest.onabort;\n\n xhr.send();\n\n httpRequest.response = xhr;\n }\n\n function abort(request) {\n const x = request.response;\n x.onloadend = x.onerror = x.onprogress = undefined; //Ignore events from aborted requests.\n x.abort();\n }\n\n instance = {\n load: load,\n abort: abort\n };\n\n return instance;\n}\n\nXHRLoader.__dashjs_factory_name = 'XHRLoader';\n\nconst factory = FactoryMaker.getClassFactory(XHRLoader);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants';\nimport DashConstants from '../../dash/constants/DashConstants';\nimport FactoryMaker from '../../core/FactoryMaker';\nimport ThumbnailTrackInfo from '../vo/ThumbnailTrackInfo';\nimport URLUtils from '../../streaming/utils/URLUtils';\nimport { replaceIDForTemplate, getTimeBasedSegment } from '../../dash/utils/SegmentsUtils';\nimport Events from '../../core/events/Events';\nimport BoxParser from '../../streaming/utils/BoxParser';\nimport XHRLoader from '../../streaming/net/XHRLoader';\nimport DashHandler from '../../dash/DashHandler';\n\nexport const THUMBNAILS_SCHEME_ID_URIS = ['http://dashif.org/thumbnail_tile',\n 'http://dashif.org/guidelines/thumbnail_tile'];\n\nfunction ThumbnailTracks(config) {\n const context = this.context;\n const adapter = config.adapter;\n const baseURLController = config.baseURLController;\n const streamInfo = config.streamInfo;\n const timelineConverter = config.timelineConverter;\n const debug = config.debug;\n const eventBus = config.eventBus;\n const events = config.events;\n const dashConstants = config.dashConstants;\n\n const urlUtils = URLUtils(context).getInstance();\n\n let instance,\n tracks,\n indexHandler,\n currentTrackIndex,\n mediaInfo,\n loader,\n boxParser;\n\n function initialize() {\n reset();\n loader = XHRLoader(context).create({});\n boxParser = BoxParser(context).getInstance();\n\n indexHandler = DashHandler(context).create({\n timelineConverter: timelineConverter,\n baseURLController: baseURLController,\n debug: debug,\n eventBus: eventBus,\n events: events,\n dashConstants: dashConstants,\n urlUtils: urlUtils\n });\n\n // initialize controllers\n indexHandler.initialize(adapter ? adapter.getIsDynamic() : false);\n\n // parse representation and create tracks\n addTracks();\n }\n\n function normalizeSegments(fragments, representation) {\n const segments = [];\n let count = 0;\n\n let i,\n len,\n s,\n seg;\n\n for (i = 0, len = fragments.length; i < len; i++) {\n s = fragments[i];\n\n seg = getTimeBasedSegment(\n timelineConverter,\n adapter.getIsDynamic(),\n representation,\n s.startTime,\n s.duration,\n s.timescale,\n s.media,\n s.mediaRange,\n count);\n\n if (seg) {\n segments.push(seg);\n seg = null;\n count++;\n }\n }\n return segments;\n }\n\n function addTracks() {\n if (!streamInfo || !adapter) {\n return;\n }\n\n // Extract thumbnail tracks\n mediaInfo = adapter.getMediaInfoForType(streamInfo, Constants.IMAGE);\n if (!mediaInfo) {\n return;\n }\n\n const voReps = adapter.getVoRepresentations(mediaInfo);\n\n if (voReps && voReps.length > 0) {\n voReps.forEach((rep) => {\n if ((rep.segmentInfoType === DashConstants.SEGMENT_TEMPLATE && rep.segmentDuration > 0 && rep.media) ||\n rep.segmentInfoType === DashConstants.SEGMENT_TIMELINE) {\n createTrack(rep);\n }\n if (rep.segmentInfoType === DashConstants.SEGMENT_BASE) {\n createTrack(rep, true);\n }\n });\n }\n\n if (tracks.length > 0) {\n // Sort bitrates and select the lowest bitrate rendition\n tracks.sort((a, b) => a.bitrate - b.bitrate);\n currentTrackIndex = tracks.length - 1;\n }\n }\n\n function createTrack(representation, useSegmentBase) {\n const track = new ThumbnailTrackInfo();\n track.id = representation.id;\n track.bitrate = representation.bandwidth;\n track.width = representation.width;\n track.height = representation.height;\n track.tilesHor = 1;\n track.tilesVert = 1;\n\n if (representation.essentialProperties) {\n representation.essentialProperties.forEach((p) => {\n if (THUMBNAILS_SCHEME_ID_URIS.indexOf(p.schemeIdUri) >= 0 && p.value) {\n const vars = p.value.split('x');\n if (vars.length === 2 && !isNaN(vars[0]) && !isNaN(vars[1])) {\n track.tilesHor = parseInt(vars[0], 10);\n track.tilesVert = parseInt(vars[1], 10);\n }\n }\n });\n }\n\n if (useSegmentBase) {\n eventBus.trigger(Events.SEGMENTBASE_SEGMENTSLIST_REQUEST_NEEDED, {\n mimeType: mediaInfo.mimeType,\n mediaType: Constants.IMAGE,\n representation: representation,\n callback: function (segments, representation) {\n let cache = [];\n segments = normalizeSegments(segments, representation);\n track.segmentDuration = segments[0].duration; //assume all segments have the same duration\n track.readThumbnail = function (time, callback) {\n\n let cached = null;\n cache.some(el => {\n if (el.start <= time && el.end > time) {\n cached = el.url;\n return true;\n }\n });\n if (cached) {\n callback(cached);\n } else {\n segments.some((ss) => {\n if (ss.mediaStartTime <= time && ss.mediaStartTime + ss.duration > time) {\n const baseURL = baseURLController.resolve(representation.path);\n loader.load({\n method: 'get',\n url: baseURL.url,\n request: {\n range: ss.mediaRange,\n responseType: 'arraybuffer'\n },\n onload: function (e) {\n let info = boxParser.getSamplesInfo(e.target.response);\n let blob = new Blob( [ e.target.response.slice(info.sampleList[0].offset, info.sampleList[0].offset + info.sampleList[0].size) ], { type: 'image/jpeg' } );\n let imageUrl = window.URL.createObjectURL( blob );\n cache.push({\n start: ss.mediaStartTime,\n end: ss.mediaStartTime + ss.duration,\n url: imageUrl\n });\n if (callback)\n callback(imageUrl);\n }\n });\n return true;\n }\n });\n }\n };\n }\n });\n } else {\n track.startNumber = representation.startNumber;\n track.segmentDuration = representation.segmentDuration;\n track.timescale = representation.timescale;\n track.templateUrl = buildTemplateUrl(representation);\n }\n\n if (track.tilesHor > 0 && track.tilesVert > 0) {\n // Precalculate width and heigth per tile for perf reasons\n track.widthPerTile = track.width / track.tilesHor;\n track.heightPerTile = track.height / track.tilesVert;\n tracks.push(track);\n }\n }\n\n function buildTemplateUrl(representation) {\n const templateUrl = urlUtils.isRelative(representation.media) ?\n urlUtils.resolve(representation.media, baseURLController.resolve(representation.path).url) : representation.media;\n\n if (!templateUrl) {\n return '';\n }\n\n return replaceIDForTemplate(templateUrl, representation.id);\n }\n\n function getTracks() {\n return tracks;\n }\n\n function getCurrentTrackIndex() {\n return currentTrackIndex;\n }\n\n function getCurrentTrack() {\n if (currentTrackIndex < 0) {\n return null;\n }\n return tracks[currentTrackIndex];\n }\n\n function setTrackByIndex(index) {\n if (!tracks || tracks.length === 0) {\n return;\n }\n // select highest bitrate in case selected index is higher than bitrate list length\n if (index >= tracks.length) {\n index = tracks.length - 1;\n }\n currentTrackIndex = index;\n }\n\n function getThumbnailRequestForTime(time) {\n let currentVoRep;\n const voReps = adapter.getVoRepresentations(mediaInfo);\n for (let i = 0; i < voReps.length; i++) {\n if (tracks[currentTrackIndex].id === voReps[i].id) {\n currentVoRep = voReps[i];\n break;\n }\n }\n\n return indexHandler.getSegmentRequestForTime(mediaInfo, currentVoRep, time);\n }\n\n function reset() {\n tracks = [];\n currentTrackIndex = -1;\n mediaInfo = null;\n }\n\n instance = {\n initialize: initialize,\n getTracks: getTracks,\n reset: reset,\n setTrackByIndex: setTrackByIndex,\n getCurrentTrack: getCurrentTrack,\n getCurrentTrackIndex: getCurrentTrackIndex,\n getThumbnailRequestForTime: getThumbnailRequestForTime\n };\n\n initialize();\n\n return instance;\n}\n\nThumbnailTracks.__dashjs_factory_name = 'ThumbnailTracks';\nexport default FactoryMaker.getClassFactory(ThumbnailTracks);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport Debug from '../../core/Debug';\nimport IsoFile from './IsoFile';\nimport FactoryMaker from '../../core/FactoryMaker';\nimport ISOBoxer from 'codem-isoboxer';\n\nimport IsoBoxSearchInfo from '../vo/IsoBoxSearchInfo';\n\nfunction BoxParser(/*config*/) {\n\n let logger,\n instance;\n let context = this.context;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n /**\n * @param {ArrayBuffer} data\n * @returns {IsoFile|null}\n * @memberof BoxParser#\n */\n function parse(data) {\n if (!data) return null;\n\n if (data.fileStart === undefined) {\n data.fileStart = 0;\n }\n\n let parsedFile = ISOBoxer.parseBuffer(data);\n let dashIsoFile = IsoFile(context).create();\n\n dashIsoFile.setData(parsedFile);\n\n return dashIsoFile;\n }\n\n /**\n * From the list of type boxes to look for, returns the latest one that is fully completed (header + payload). This\n * method only looks into the list of top boxes and doesn't analyze nested boxes.\n * @param {string[]} types\n * @param {ArrayBuffer|uint8Array} buffer\n * @param {number} offset\n * @returns {IsoBoxSearchInfo}\n * @memberof BoxParser#\n */\n function findLastTopIsoBoxCompleted(types, buffer, offset) {\n if (offset === undefined) {\n offset = 0;\n }\n\n // 8 = size (uint32) + type (4 characters)\n if (!buffer || offset + 8 >= buffer.byteLength) {\n return new IsoBoxSearchInfo(0, false);\n }\n\n const data = (buffer instanceof ArrayBuffer) ? new Uint8Array(buffer) : buffer;\n let boxInfo;\n let lastCompletedOffset = 0;\n while (offset < data.byteLength) {\n const boxSize = parseUint32(data, offset);\n const boxType = parseIsoBoxType(data, offset + 4);\n\n if (boxSize === 0) {\n break;\n }\n\n if (offset + boxSize <= data.byteLength) {\n if (types.indexOf(boxType) >= 0) {\n boxInfo = new IsoBoxSearchInfo(offset, true, boxSize);\n } else {\n lastCompletedOffset = offset + boxSize;\n }\n }\n\n offset += boxSize;\n }\n\n if (!boxInfo) {\n return new IsoBoxSearchInfo(lastCompletedOffset, false);\n }\n\n return boxInfo;\n }\n\n function getSamplesInfo(ab) {\n if (!ab || ab.byteLength === 0) {\n return {sampleList: [], lastSequenceNumber: NaN, totalDuration: NaN, numSequences: NaN};\n }\n let isoFile = parse(ab);\n // zero or more moofs\n let moofBoxes = isoFile.getBoxes('moof');\n // exactly one mfhd per moof\n let mfhdBoxes = isoFile.getBoxes('mfhd');\n\n let sampleDuration,\n sampleCompositionTimeOffset,\n sampleCount,\n sampleSize,\n sampleDts,\n sampleList,\n sample,\n i, j, k, l, m, n,\n dataOffset,\n lastSequenceNumber,\n numSequences,\n totalDuration;\n\n numSequences = isoFile.getBoxes('moof').length;\n lastSequenceNumber = mfhdBoxes[mfhdBoxes.length - 1].sequence_number;\n sampleCount = 0;\n\n sampleList = [];\n let subsIndex = -1;\n let nextSubsSample = -1;\n for (l = 0; l < moofBoxes.length; l++) {\n let moofBox = moofBoxes[l];\n // zero or more trafs per moof\n let trafBoxes = moofBox.getChildBoxes('traf');\n for (j = 0; j < trafBoxes.length; j++) {\n let trafBox = trafBoxes[j];\n // exactly one tfhd per traf\n let tfhdBox = trafBox.getChildBox('tfhd');\n // zero or one tfdt per traf\n let tfdtBox = trafBox.getChildBox('tfdt');\n sampleDts = tfdtBox.baseMediaDecodeTime;\n // zero or more truns per traf\n let trunBoxes = trafBox.getChildBoxes('trun');\n // zero or more subs per traf\n let subsBoxes = trafBox.getChildBoxes('subs');\n for (k = 0; k < trunBoxes.length; k++) {\n let trunBox = trunBoxes[k];\n sampleCount = trunBox.sample_count;\n dataOffset = (tfhdBox.base_data_offset || 0) + (trunBox.data_offset || 0);\n\n for (i = 0; i < sampleCount; i++) {\n sample = trunBox.samples[i];\n sampleDuration = (sample.sample_duration !== undefined) ? sample.sample_duration : tfhdBox.default_sample_duration;\n sampleSize = (sample.sample_size !== undefined) ? sample.sample_size : tfhdBox.default_sample_size;\n sampleCompositionTimeOffset = (sample.sample_composition_time_offset !== undefined) ? sample.sample_composition_time_offset : 0;\n let sampleData = {\n 'dts': sampleDts,\n 'cts': (sampleDts + sampleCompositionTimeOffset),\n 'duration': sampleDuration,\n 'offset': moofBox.offset + dataOffset,\n 'size': sampleSize,\n 'subSizes': [sampleSize]\n };\n if (subsBoxes) {\n for (m = 0; m < subsBoxes.length; m++) {\n let subsBox = subsBoxes[m];\n if (subsIndex < (subsBox.entry_count - 1) && i > nextSubsSample) {\n subsIndex++;\n nextSubsSample += subsBox.entries[subsIndex].sample_delta;\n }\n if (i == nextSubsSample) {\n sampleData.subSizes = [];\n let entry = subsBox.entries[subsIndex];\n for (n = 0; n < entry.subsample_count; n++) {\n sampleData.subSizes.push(entry.subsamples[n].subsample_size);\n }\n }\n }\n }\n sampleList.push(sampleData);\n dataOffset += sampleSize;\n sampleDts += sampleDuration;\n }\n }\n totalDuration = sampleDts - tfdtBox.baseMediaDecodeTime;\n }\n }\n return {sampleList: sampleList, lastSequenceNumber: lastSequenceNumber, totalDuration: totalDuration, numSequences: numSequences};\n }\n\n function getMediaTimescaleFromMoov(ab) {\n let isoFile = parse(ab);\n let mdhdBox = isoFile ? isoFile.getBox('mdhd') : undefined;\n\n return mdhdBox ? mdhdBox.timescale : NaN;\n }\n\n function parseUint32(data, offset) {\n return data[offset + 3] >>> 0 |\n (data[offset + 2] << 8) >>> 0 |\n (data[offset + 1] << 16) >>> 0 |\n (data[offset] << 24) >>> 0;\n }\n\n function parseIsoBoxType(data, offset) {\n return String.fromCharCode(data[offset++]) +\n String.fromCharCode(data[offset++]) +\n String.fromCharCode(data[offset++]) +\n String.fromCharCode(data[offset]);\n }\n\n function findInitRange(data) {\n let initRange = null;\n let start,\n end;\n\n const isoFile = parse(data);\n\n if (!isoFile) {\n return initRange;\n }\n\n const ftyp = isoFile.getBox('ftyp');\n const moov = isoFile.getBox('moov');\n\n logger.debug('Searching for initialization.');\n\n if (moov && moov.isComplete) {\n start = ftyp ? ftyp.offset : moov.offset;\n end = moov.offset + moov.size - 1;\n initRange = start + '-' + end;\n\n logger.debug('Found the initialization. Range: ' + initRange);\n }\n\n return initRange;\n }\n\n instance = {\n parse: parse,\n findLastTopIsoBoxCompleted: findLastTopIsoBoxCompleted,\n getMediaTimescaleFromMoov: getMediaTimescaleFromMoov,\n getSamplesInfo: getSamplesInfo,\n findInitRange: findInitRange\n };\n\n setup();\n\n return instance;\n}\nBoxParser.__dashjs_factory_name = 'BoxParser';\nexport default FactoryMaker.getSingletonFactory(BoxParser);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\n\n/**\n * @module DefaultURLUtils\n * @description Provides utility functions for operating on URLs.\n * Initially this is simply a method to determine the Base URL of a URL, but\n * should probably include other things provided all over the place such as\n * determining whether a URL is relative/absolute, resolving two paths etc.\n * @ignore\n */\nfunction DefaultURLUtils() {\n\n let resolveFunction;\n\n const schemeRegex = /^[a-z][a-z0-9+\\-_.]*:/i;\n const httpUrlRegex = /^https?:\\/\\//i;\n const httpsUrlRegex = /^https:\\/\\//i;\n const originRegex = /^([a-z][a-z0-9+\\-_.]*:\\/\\/[^\\/]+)\\/?/i;\n\n /**\n * Resolves a url given an optional base url\n * Uses window.URL to do the resolution.\n *\n * @param {string} url\n * @param {string} [baseUrl]\n * @return {string}\n * @memberof module:DefaultURLUtils\n * @instance\n * @private\n */\n const nativeURLResolver = (url, baseUrl) => {\n try {\n return new window.URL(url, baseUrl).toString();\n } catch (e) {\n return url;\n }\n };\n\n /**\n * Resolves a url given an optional base url\n * Does not resolve ./, ../ etc but will do enough to construct something\n * which will satisfy XHR etc when window.URL is not available ie\n * IE11/node etc.\n *\n * @param {string} url\n * @param {string} [baseUrl]\n * @return {string}\n * @memberof module:DefaultURLUtils\n * @instance\n * @private\n */\n const dumbURLResolver = (url, baseUrl) => {\n let baseUrlParseFunc = parseBaseUrl;\n\n if (!baseUrl) {\n return url;\n }\n\n if (!isRelative(url)) {\n return url;\n }\n\n if (isPathAbsolute(url)) {\n baseUrlParseFunc = parseOrigin;\n }\n\n if (isSchemeRelative(url)) {\n baseUrlParseFunc = parseScheme;\n }\n\n const base = baseUrlParseFunc(baseUrl);\n const joinChar =\n base.charAt(base.length - 1) !== '/' &&\n url.charAt(0) !== '/' ?\n '/' : '';\n\n return [base, url].join(joinChar);\n };\n\n function setup() {\n try {\n const u = new window.URL('x', 'http://y'); //jshint ignore:line\n resolveFunction = nativeURLResolver;\n } catch (e) {\n // must be IE11/Node etc\n } finally {\n resolveFunction = resolveFunction || dumbURLResolver;\n }\n }\n\n /**\n * Returns a string that contains the Base URL of a URL, if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function parseBaseUrl(url) {\n const slashIndex = url.indexOf('/');\n const lastSlashIndex = url.lastIndexOf('/');\n\n if (slashIndex !== -1) {\n // if there is only '//'\n if (lastSlashIndex === slashIndex + 1) {\n return url;\n }\n\n if (url.indexOf('?') !== -1) {\n url = url.substring(0, url.indexOf('?'));\n }\n\n return url.substring(0, lastSlashIndex + 1);\n }\n\n return '';\n }\n\n /**\n * Returns a string that contains the scheme and origin of a URL,\n * if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function parseOrigin(url) {\n const matches = url.match(originRegex);\n\n if (matches) {\n return matches[1];\n }\n\n return '';\n }\n\n /**\n * Returns a string that contains the fragment of a URL without scheme,\n * if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function removeHostname(url) {\n let urlParts = /^(?:\\w+\\:\\/\\/)?([^\\/]+)(.*)$/.exec(url); //[1] = host / [2] = path\n return urlParts[2].substring(1);\n }\n\n /**\n * Returns a string that contains the scheme of a URL, if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function parseScheme(url) {\n const matches = url.match(schemeRegex);\n\n if (matches) {\n return matches[0];\n }\n\n return '';\n }\n\n /**\n * Determines whether the url is relative.\n * @return {boolean}\n * @param {string} url\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function isRelative(url) {\n return !schemeRegex.test(url);\n }\n\n /**\n * Determines whether the url is path-absolute.\n * @return {bool}\n * @param {string} url\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function isPathAbsolute(url) {\n return isRelative(url) && url.charAt(0) === '/';\n }\n\n /**\n * Determines whether the url is scheme-relative.\n * @return {bool}\n * @param {string} url\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function isSchemeRelative(url) {\n return url.indexOf('//') === 0;\n }\n\n /**\n * Determines whether the url is an HTTP-URL as defined in ISO/IEC\n * 23009-1:2014 3.1.15. ie URL with a fixed scheme of http or https\n * @return {bool}\n * @param {string} url\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function isHTTPURL(url) {\n return httpUrlRegex.test(url);\n }\n\n /**\n * Determines whether the supplied url has https scheme\n * @return {bool}\n * @param {string} url\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function isHTTPS(url) {\n return httpsUrlRegex.test(url);\n }\n\n /**\n * Resolves a url given an optional base url\n * @return {string}\n * @param {string} url\n * @param {string} [baseUrl]\n * @memberof module:DefaultURLUtils\n * @instance\n */\n function resolve(url, baseUrl) {\n return resolveFunction(url, baseUrl);\n }\n\n setup();\n\n const instance = {\n parseBaseUrl: parseBaseUrl,\n parseOrigin: parseOrigin,\n parseScheme: parseScheme,\n isRelative: isRelative,\n isPathAbsolute: isPathAbsolute,\n isSchemeRelative: isSchemeRelative,\n isHTTPURL: isHTTPURL,\n isHTTPS: isHTTPS,\n removeHostname: removeHostname,\n resolve: resolve\n };\n\n return instance;\n}\n\nDefaultURLUtils.__dashjs_factory_name = 'DefaultURLUtils';\nexport default FactoryMaker.getSingletonFactory(DefaultURLUtils);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport IsoBox from '../vo/IsoBox';\nimport FactoryMaker from '../../core/FactoryMaker';\n\nfunction IsoFile() {\n\n let instance,\n parsedIsoFile;\n\n /**\n * @param {string} type\n * @returns {IsoBox|null}\n * @memberof IsoFile#\n */\n function getBox(type) {\n if (!type || !parsedIsoFile || !parsedIsoFile.boxes || (parsedIsoFile.boxes.length === 0) || typeof parsedIsoFile.fetch !== 'function') return null;\n\n return convertToDashIsoBox(parsedIsoFile.fetch(type));\n }\n\n /**\n * @param {string} type\n * @returns {Array|null} array of {@link IsoBox}\n * @memberof IsoFile#\n */\n function getBoxes(type) {\n let boxes = [];\n\n if (!type || !parsedIsoFile || typeof parsedIsoFile.fetchAll !== 'function') {\n return boxes;\n }\n\n let boxData = parsedIsoFile.fetchAll(type);\n let box;\n\n for (let i = 0, ln = boxData.length; i < ln; i++) {\n box = convertToDashIsoBox(boxData[i]);\n\n if (box) {\n boxes.push(box);\n }\n }\n\n return boxes;\n }\n\n /**\n * @param {string} value\n * @memberof IsoFile#\n */\n function setData(value) {\n parsedIsoFile = value;\n }\n\n /**\n * @returns {IsoBox|null}\n * @memberof IsoFile#\n */\n function getLastBox() {\n if (!parsedIsoFile || !parsedIsoFile.boxes || !parsedIsoFile.boxes.length) return null;\n\n let type = parsedIsoFile.boxes[parsedIsoFile.boxes.length - 1].type;\n let boxes = getBoxes(type);\n\n return boxes.length > 0 ? boxes[boxes.length - 1] : null;\n }\n\n function convertToDashIsoBox(boxData) {\n if (!boxData) return null;\n\n let box = new IsoBox(boxData);\n\n if (boxData.hasOwnProperty('_incomplete')) {\n box.isComplete = !boxData._incomplete;\n }\n\n return box;\n }\n\n instance = {\n getBox: getBox,\n getBoxes: getBoxes,\n setData: setData,\n getLastBox: getLastBox\n };\n\n return instance;\n}\nIsoFile.__dashjs_factory_name = 'IsoFile';\nexport default FactoryMaker.getClassFactory(IsoFile);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\nimport deepEqual from 'fast-deep-equal';\n\n/**\n * @module ObjectUtils\n * @ignore\n * @description Provides utility functions for objects\n */\nfunction ObjectUtils() {\n\n let instance;\n\n /**\n * Returns true if objects are equal\n * @return {boolean}\n * @param {object} obj1\n * @param {object} obj2\n * @memberof module:ObjectUtils\n * @instance\n */\n function areEqual(obj1, obj2) {\n return deepEqual(obj1, obj2);\n }\n\n instance = {\n areEqual: areEqual\n };\n\n return instance;\n}\n\nObjectUtils.__dashjs_factory_name = 'ObjectUtils';\nexport default FactoryMaker.getSingletonFactory(ObjectUtils);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\n\nfunction RequestModifier() {\n\n let instance;\n\n function modifyRequestURL(url) {\n return url;\n }\n\n function modifyRequestHeader(request) {\n return request;\n }\n\n instance = {\n modifyRequestURL: modifyRequestURL,\n modifyRequestHeader: modifyRequestHeader\n };\n\n return instance;\n}\n\nRequestModifier.__dashjs_factory_name = 'RequestModifier';\nexport default FactoryMaker.getSingletonFactory(RequestModifier);\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker';\nimport DefaultURLUtils from './DefaultURLUtils';\n\n/**\n * @module URLUtils\n * @ignore\n * @description Provides utility functions for operating on URLs.\n * Initially this is simply a method to determine the Base URL of a URL, but\n * should probably include other things provided all over the place such as\n * determining whether a URL is relative/absolute, resolving two paths etc.\n */\nfunction URLUtils() {\n\n let instance;\n let defaultURLUtils;\n let regexUtils = [];\n const context = this.context;\n\n function getUtils(url) {\n let i;\n for (i = 0; i < regexUtils.length; i++) {\n let regex = regexUtils[i].regex;\n if (regex.test(url)) {\n return regexUtils[i].utils;\n }\n }\n return defaultURLUtils;\n }\n\n function setup() {\n defaultURLUtils = DefaultURLUtils(context).getInstance();\n }\n\n /**\n * Register a module to handle specific url.\n * @param {regex} regex - url regex\n * @param {object} utils - object that handles the regex\n * @memberof module:URLUtils\n * @instance\n */\n function registerUrlRegex(regex, utils) {\n regexUtils.push({regex: regex, utils: utils});\n }\n\n function internalCall(functionName, url, baseUrl) {\n let utils = getUtils(baseUrl || url);\n return utils && typeof (utils[functionName]) === 'function' ? utils[functionName](url, baseUrl) : defaultURLUtils[functionName](url, baseUrl);\n }\n\n /**\n * Returns a string that contains the Base URL of a URL, if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:URLUtils\n * @instance\n */\n function parseBaseUrl(url) {\n return internalCall('parseBaseUrl', url);\n }\n\n /**\n * Returns a string that contains the scheme and origin of a URL,\n * if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:URLUtils\n * @instance\n */\n function parseOrigin(url) {\n return internalCall('parseOrigin', url);\n }\n\n /**\n * Returns a string that contains the fragment of a URL without scheme,\n * if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:URLUtils\n * @instance\n */\n function removeHostname(url) {\n return internalCall('removeHostname', url);\n }\n\n /**\n * Returns a string that contains the scheme of a URL, if determinable.\n * @param {string} url - full url\n * @return {string}\n * @memberof module:URLUtils\n * @instance\n */\n function parseScheme(url) {\n return internalCall('parseScheme', url);\n }\n\n /**\n * Determines whether the url is relative.\n * @return {boolean}\n * @param {string} url\n * @memberof module:URLUtils\n * @instance\n */\n function isRelative(url) {\n return internalCall('isRelative', url);\n }\n\n /**\n * Determines whether the url is path-absolute.\n * @return {bool}\n * @param {string} url\n * @memberof module:URLUtils\n * @instance\n */\n function isPathAbsolute(url) {\n return internalCall('isPathAbsolute', url);\n }\n\n /**\n * Determines whether the url is scheme-relative.\n * @return {bool}\n * @param {string} url\n * @memberof module:URLUtils\n * @instance\n */\n function isSchemeRelative(url) {\n return internalCall('isSchemeRelative', url);\n }\n\n /**\n * Determines whether the url is an HTTP-URL as defined in ISO/IEC\n * 23009-1:2014 3.1.15. ie URL with a fixed scheme of http or https\n * @return {bool}\n * @param {string} url\n * @memberof module:URLUtils\n * @instance\n */\n function isHTTPURL(url) {\n return internalCall('isHTTPURL', url);\n }\n\n /**\n * Determines whether the supplied url has https scheme\n * @return {bool}\n * @param {string} url\n * @memberof module:URLUtils\n * @instance\n */\n function isHTTPS(url) {\n return internalCall('isHTTPS', url);\n }\n\n /**\n * Resolves a url given an optional base url\n * @return {string}\n * @param {string} url\n * @param {string} [baseUrl]\n * @memberof module:URLUtils\n * @instance\n */\n function resolve(url, baseUrl) {\n return internalCall('resolve', url, baseUrl);\n }\n\n setup();\n instance = {\n registerUrlRegex: registerUrlRegex,\n parseBaseUrl: parseBaseUrl,\n parseOrigin: parseOrigin,\n parseScheme: parseScheme,\n isRelative: isRelative,\n isPathAbsolute: isPathAbsolute,\n isSchemeRelative: isSchemeRelative,\n isHTTPURL: isHTTPURL,\n isHTTPS: isHTTPS,\n removeHostname: removeHostname,\n resolve: resolve\n };\n\n return instance;\n}\n\nURLUtils.__dashjs_factory_name = 'URLUtils';\nconst factory = FactoryMaker.getSingletonFactory(URLUtils);\nexport default factory;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass DashJSError {\n constructor(code, message, data) {\n this.code = code || null;\n this.message = message || null;\n this.data = data || null;\n }\n}\n\nexport default DashJSError;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport { HTTPRequest } from '../vo/metrics/HTTPRequest';\n\n/**\n * @class\n * @ignore\n */\nclass FragmentRequest {\n constructor(url) {\n this.action = FragmentRequest.ACTION_DOWNLOAD;\n this.startTime = NaN;\n this.mediaType = null;\n this.mediaInfo = null;\n this.type = null;\n this.duration = NaN;\n this.timescale = NaN;\n this.range = null;\n this.url = url || null;\n this.serviceLocation = null;\n this.requestStartDate = null;\n this.firstByteDate = null;\n this.requestEndDate = null;\n this.quality = NaN;\n this.index = NaN;\n this.availabilityStartTime = null;\n this.availabilityEndTime = null;\n this.wallStartTime = null;\n this.bytesLoaded = NaN;\n this.bytesTotal = NaN;\n this.delayLoadingTime = NaN;\n this.responseType = 'arraybuffer';\n this.representationId = null;\n }\n\n isInitializationRequest() {\n return (this.type && this.type === HTTPRequest.INIT_SEGMENT_TYPE);\n }\n\n setInfo(info) {\n this.type = info && info.init ? HTTPRequest.INIT_SEGMENT_TYPE : HTTPRequest.MEDIA_SEGMENT_TYPE;\n this.url = info && info.url ? info.url : null;\n this.range = info && info.range ? info.range.start + '-' + info.range.end : null;\n this.mediaType = info && info.mediaType ? info.mediaType : null;\n }\n}\n\nFragmentRequest.ACTION_DOWNLOAD = 'download';\nFragmentRequest.ACTION_COMPLETE = 'complete';\n\nexport default FragmentRequest;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nimport FragmentRequest from './FragmentRequest';\n\nclass HeadRequest extends FragmentRequest {\n constructor(url) {\n super(url);\n this.checkForExistenceOnly = true;\n }\n}\n\nexport default HeadRequest;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass IsoBox {\n constructor(boxData) {\n this.offset = boxData._offset;\n this.type = boxData.type;\n this.size = boxData.size;\n this.boxes = [];\n if (boxData.boxes) {\n for (let i = 0; i < boxData.boxes.length; i++) {\n this.boxes.push(new IsoBox(boxData.boxes[i]));\n }\n }\n this.isComplete = true;\n\n switch (boxData.type) {\n case 'sidx':\n this.timescale = boxData.timescale;\n this.earliest_presentation_time = boxData.earliest_presentation_time;\n this.first_offset = boxData.first_offset;\n this.references = boxData.references;\n if (boxData.references) {\n this.references = [];\n for (let i = 0; i < boxData.references.length; i++) {\n let reference = {\n reference_type: boxData.references[i].reference_type,\n referenced_size: boxData.references[i].referenced_size,\n subsegment_duration: boxData.references[i].subsegment_duration\n };\n this.references.push(reference);\n }\n }\n break;\n case 'emsg':\n this.id = boxData.id;\n this.value = boxData.value;\n this.timescale = boxData.timescale;\n this.scheme_id_uri = boxData.scheme_id_uri;\n this.presentation_time_delta = boxData.version === 1 ? boxData.presentation_time : boxData.presentation_time_delta;\n this.event_duration = boxData.event_duration;\n this.message_data = boxData.message_data;\n break;\n case 'mdhd':\n this.timescale = boxData.timescale;\n break;\n case 'mfhd':\n this.sequence_number = boxData.sequence_number;\n break;\n case 'subs':\n this.entry_count = boxData.entry_count;\n this.entries = boxData.entries;\n break;\n case 'tfhd':\n this.base_data_offset = boxData.base_data_offset;\n this.sample_description_index = boxData.sample_description_index;\n this.default_sample_duration = boxData.default_sample_duration;\n this.default_sample_size = boxData.default_sample_size;\n this.default_sample_flags = boxData.default_sample_flags;\n this.flags = boxData.flags;\n break;\n case 'tfdt':\n this.version = boxData.version;\n this.baseMediaDecodeTime = boxData.baseMediaDecodeTime;\n this.flags = boxData.flags;\n break;\n case 'trun':\n this.sample_count = boxData.sample_count;\n this.first_sample_flags = boxData.first_sample_flags;\n this.data_offset = boxData.data_offset;\n this.flags = boxData.flags;\n this.samples = boxData.samples;\n if (boxData.samples) {\n this.samples = [];\n for (let i = 0, ln = boxData.samples.length; i < ln; i++) {\n let sample = {\n sample_size: boxData.samples[i].sample_size,\n sample_duration: boxData.samples[i].sample_duration,\n sample_composition_time_offset: boxData.samples[i].sample_composition_time_offset\n };\n this.samples.push(sample);\n }\n }\n break;\n }\n\n }\n\n getChildBox(type) {\n for (let i = 0; i < this.boxes.length; i++) {\n if (this.boxes[i].type === type) {\n return this.boxes[i];\n }\n }\n }\n\n getChildBoxes(type) {\n let boxes = [];\n for (let i = 0; i < this.boxes.length; i++) {\n if (this.boxes[i].type === type) {\n boxes.push(this.boxes[i]);\n }\n }\n return boxes;\n }\n\n}\n\nexport default IsoBox;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass IsoBoxSearchInfo {\n constructor(lastCompletedOffset, found, size) {\n this.lastCompletedOffset = lastCompletedOffset;\n this.found = found;\n this.size = size;\n }\n}\n\nexport default IsoBoxSearchInfo;\n", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass ThumbnailTrackInfo {\n constructor() {\n this.bitrate = 0;\n this.width = 0;\n this.height = 0;\n this.tilesHor = 0;\n this.tilesVert = 0;\n this.widthPerTile = 0;\n this.heightPerTile = 0;\n this.startNumber = 0;\n this.segmentDuration = 0;\n this.timescale = 0;\n this.templateUrl = '';\n this.id = '';\n }\n}\n\nexport default ThumbnailTrackInfo;", "/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc This Object holds reference to the HTTPRequest for manifest, fragment and xlink loading.\n * Members which are not defined in ISO23009-1 Annex D should be prefixed by a _ so that they are ignored\n * by Metrics Reporting code.\n * @ignore\n */\nclass HTTPRequest {\n /**\n * @class\n */\n constructor() {\n /**\n * Identifier of the TCP connection on which the HTTP request was sent.\n * @public\n */\n this.tcpid = null;\n /**\n * This is an optional parameter and should not be included in HTTP request/response transactions for progressive download.\n * The type of the request:\n * - MPD\n * - XLink expansion\n * - Initialization Fragment\n * - Index Fragment\n * - Media Fragment\n * - Bitstream Switching Fragment\n * - other\n * @public\n */\n this.type = null;\n /**\n * The original URL (before any redirects or failures)\n * @public\n */\n this.url = null;\n /**\n * The actual URL requested, if different from above\n * @public\n */\n this.actualurl = null;\n /**\n * The contents of the byte-range-spec part of the HTTP Range header.\n * @public\n */\n this.range = null;\n /**\n * Real-Time | The real time at which the request was sent.\n * @public\n */\n this.trequest = null;\n /**\n * Real-Time | The real time at which the first byte of the response was received.\n * @public\n */\n this.tresponse = null;\n /**\n * The HTTP response code.\n * @public\n */\n this.responsecode = null;\n /**\n * The duration of the throughput trace intervals (ms), for successful requests only.\n * @public\n */\n this.interval = null;\n /**\n * Throughput traces, for successful requests only.\n * @public\n */\n this.trace = [];\n\n /**\n * Type of stream (\"audio\" | \"video\" etc..)\n * @public\n */\n this._stream = null;\n /**\n * Real-Time | The real time at which the request finished.\n * @public\n */\n this._tfinish = null;\n /**\n * The duration of the media requests, if available, in milliseconds.\n * @public\n */\n this._mediaduration = null;\n /**\n * The media segment quality\n * @public\n */\n this._quality = null;\n /**\n * all the response headers from request.\n * @public\n */\n this._responseHeaders = null;\n /**\n * The selected service location for the request. string.\n * @public\n */\n this._serviceLocation = null;\n }\n}\n\n/**\n * @classdesc This Object holds reference to the progress of the HTTPRequest.\n * @ignore\n */\nclass HTTPRequestTrace {\n /**\n * @class\n */\n constructor() {\n /**\n * Real-Time | Measurement stream start.\n * @public\n */\n this.s = null;\n /**\n * Measurement stream duration (ms).\n * @public\n */\n this.d = null;\n /**\n * List of integers counting the bytes received in each trace interval within the measurement stream.\n * @public\n */\n this.b = [];\n }\n}\n\nHTTPRequest.GET = 'GET';\nHTTPRequest.HEAD = 'HEAD';\nHTTPRequest.MPD_TYPE = 'MPD';\nHTTPRequest.XLINK_EXPANSION_TYPE = 'XLinkExpansion';\nHTTPRequest.INIT_SEGMENT_TYPE = 'InitializationSegment';\nHTTPRequest.INDEX_SEGMENT_TYPE = 'IndexSegment';\nHTTPRequest.MEDIA_SEGMENT_TYPE = 'MediaSegment';\nHTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE = 'BitstreamSwitchingSegment';\nHTTPRequest.OTHER_TYPE = 'other';\n\nexport { HTTPRequest, HTTPRequestTrace };\n" ] }