diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/CMakeLists.txt kodi-inputstream-adaptive-2.6.14+ds1/CMakeLists.txt --- kodi-inputstream-adaptive-2.6.7+ds1/CMakeLists.txt 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/CMakeLists.txt 2021-04-22 11:47:43.000000000 +0000 @@ -1,5 +1,6 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.10) project(inputstream.adaptive) +option(BUILD_TESTING "Build the testing tree." ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) @@ -41,6 +42,7 @@ src/log.h src/aes_decrypter.h src/ADTSReader.h + src/Iaes_decrypter.h src/md5.h src/WebmReader.h ) @@ -52,11 +54,13 @@ endif() include_directories(${INCLUDES} - ${KODI_INCLUDE_DIR} + ${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways (becomes done in future) lib/libbento4/Core lib/webm_parser/include ) +set(CMAKE_FIND_FRAMEWORK LAST) + include(FindEXPAT) find_package(EXPAT REQUIRED) include_directories(${EXPAT_INCLUDE_DIRS}) @@ -83,11 +87,7 @@ set(ADP_ADDITIONAL_BINARY $) endif() -if(CORE_SYSTEM_NAME STREQUAL android) - set(DECRYPTERPATH "special://xbmcbinaddons") -else() - set(DECRYPTERPATH "special://home/cdm") -endif() +set(DECRYPTERPATH "special://home/cdm") list(APPEND DEPLIBS bento4) list(APPEND DEPLIBS mpegts) @@ -97,20 +97,11 @@ include(CPack) -if(NOT CMAKE_CROSSCOMPILING) - #Tests - find_package( Threads ) - add_executable(Test_DashTree - src/parser/DASHTreeTest.cpp - src/parser/DASHTree.cpp - src/parser/PRProtectionParser.cpp - src/common/AdaptiveTree.cpp - src/helpers.cpp - src/oscompat.cpp - ) - target_link_libraries(Test_DashTree ${EXPAT_LIBRARIES} Threads::Threads) - +if(NOT CMAKE_CROSSCOMPILING AND BUILD_TESTING) + list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure") enable_testing() - - add_test(6play_live Test_DashTree "${CMAKE_SOURCE_DIR}/src/parser/testfiles/6play.mpd") -endif() \ No newline at end of file + include(FindGtest) + find_package(Gtest REQUIRED) + include_directories(${GTEST_INCLUDE_DIRS}) + add_subdirectory(src/test) +endif() diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/debian/changelog kodi-inputstream-adaptive-2.6.14+ds1/debian/changelog --- kodi-inputstream-adaptive-2.6.7+ds1/debian/changelog 2021-02-18 23:38:40.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/debian/changelog 2021-05-09 05:56:04.000000000 +0000 @@ -1,3 +1,12 @@ +kodi-inputstream-adaptive (2.6.14+ds1-1) unstable; urgency=medium + + * New upstream version 2.6.14+ds1 (Closes: #988862) + * Fix github links in d/watch + * Refresh patches + * Add libgtest-dev to build-dep + + -- Vasyl Gello Sun, 09 May 2021 05:56:04 +0000 + kodi-inputstream-adaptive (2.6.7+ds1-1) unstable; urgency=medium * New upstream version 2.6.7+ds1 diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/debian/control kodi-inputstream-adaptive-2.6.14+ds1/debian/control --- kodi-inputstream-adaptive-2.6.7+ds1/debian/control 2020-12-21 17:18:37.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/debian/control 2021-05-09 05:56:04.000000000 +0000 @@ -8,6 +8,7 @@ cmake, kodi-addons-dev (>= 2:19~), libexpat1-dev, + libgtest-dev (>= 1.10.0~), libwebm-dev, pkg-config Standards-Version: 4.5.1 diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/debian/patches/0002-Use-packaged-libwebm.patch kodi-inputstream-adaptive-2.6.14+ds1/debian/patches/0002-Use-packaged-libwebm.patch --- kodi-inputstream-adaptive-2.6.7+ds1/debian/patches/0002-Use-packaged-libwebm.patch 2021-02-18 23:38:40.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/debian/patches/0002-Use-packaged-libwebm.patch 2021-05-09 05:56:04.000000000 +0000 @@ -6,15 +6,15 @@ --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -54,7 +54,6 @@ +@@ -56,7 +56,6 @@ include_directories(${INCLUDES} - ${KODI_INCLUDE_DIR} + ${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways (becomes done in future) lib/libbento4/Core - lib/webm_parser/include ) - include(FindEXPAT) -@@ -62,6 +61,11 @@ + set(CMAKE_FIND_FRAMEWORK LAST) +@@ -66,6 +65,11 @@ include_directories(${EXPAT_INCLUDE_DIRS}) list(APPEND DEPLIBS ${EXPAT_LIBRARIES}) @@ -26,7 +26,7 @@ if(WIN32) add_definitions(-DXML_STATIC -D_CRT_NONSTDC_NO_DEPRECATE) list(APPEND DEPLIBS ws2_32) -@@ -73,8 +77,6 @@ +@@ -77,8 +81,6 @@ add_subdirectory(lib/mpegts) diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/debian/watch kodi-inputstream-adaptive-2.6.14+ds1/debian/watch --- kodi-inputstream-adaptive-2.6.7+ds1/debian/watch 2021-02-18 23:38:40.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/debian/watch 2021-05-09 05:56:04.000000000 +0000 @@ -5,4 +5,4 @@ repacksuffix=+ds1, \ dversionmangle=auto" \ https://github.com/xbmc/inputstream.adaptive/releases \ -/xbmc/inputstream.adaptive/archive/?(\d\S*)-[A-Z].*\.tar\.gz +/xbmc/inputstream.adaptive/archive/refs/tags/?(\d\S*)-[A-Z].*\.tar\.gz diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/FindGtest.cmake kodi-inputstream-adaptive-2.6.14+ds1/FindGtest.cmake --- kodi-inputstream-adaptive-2.6.7+ds1/FindGtest.cmake 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/FindGtest.cmake 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,52 @@ +#.rst: +# FindGtest +# -------- +# Finds the gtest library +# +# This will define the following variables:: +# +# GTEST_FOUND - system has gtest +# GTEST_INCLUDE_DIRS - the gtest include directories +# GTEST_LIBRARIES - the gtest libraries +# +# and the following imported targets: +# +# Gtest::Gtest - The gtest library + + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_GTEST gtest>=1.10.0 QUIET) + set(GTEST_VERSION ${PC_GTEST_VERSION}) +elseif(WIN32) + set(GTEST_VERSION 1.10.0) +endif() + +find_path(GTEST_INCLUDE_DIR NAMES gtest/gtest.h + PATHS ${PC_GTEST_INCLUDEDIR}) + +find_library(GTEST_LIBRARY_RELEASE NAMES gtest + PATHS ${PC_GTEST_LIBDIR}) +find_library(GTEST_LIBRARY_DEBUG NAMES gtestd + PATHS ${PC_GTEST_LIBDIR}) + +include(SelectLibraryConfigurations) +select_library_configurations(GTEST) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Gtest + REQUIRED_VARS GTEST_LIBRARY GTEST_INCLUDE_DIR + VERSION_VAR GTEST_VERSION) + +if(GTEST_FOUND) + set(GTEST_LIBRARIES ${GTEST_LIBRARY}) + set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) +endif() + +if(NOT TARGET Gtest::Gtest) + add_library(Gtest::Gtest UNKNOWN IMPORTED) + set_target_properties(Gtest::Gtest PROPERTIES + IMPORTED_LOCATION "${GTEST_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}") +endif() + +mark_as_advanced(GTEST_INCLUDE_DIR GTEST_LIBRARY) diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/.github/workflows/build.yml kodi-inputstream-adaptive-2.6.14+ds1/.github/workflows/build.yml --- kodi-inputstream-adaptive-2.6.7+ds1/.github/workflows/build.yml 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/.github/workflows/build.yml 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,48 @@ +name: Build and run tests +on: [push, pull_request] +env: + app_id: inputstream.adaptive + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-18.04 + CC: gcc + CXX: g++ + - os: ubuntu-18.04 + CC: clang + CXX: clang++ + - os: macos-10.15 + steps: + - name: Checkout Kodi repo + uses: actions/checkout@v2 + with: + repository: xbmc/xbmc + ref: master + path: xbmc + - name: Checkout inputstream.adaptive repo + uses: actions/checkout@v2 + with: + path: ${{ env.app_id }} + - name: Configure + env: + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} + run: | + cd ${app_id} && mkdir -p build && cd build + cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=${{ github.workspace }} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/xbmc/addons -DPACKAGE_ZIP=1 ${{ github.workspace }}/xbmc/cmake/addons + - name: Build + env: + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} + run: | + cd ${app_id}/build + make + - name: Run tests + run: | + cd ${app_id}/build/${app_id}-prefix/src/${app_id}-build + make CTEST_OUTPUT_ON_FAILURE=1 GTEST_COLOR=1 test diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/inputstream.adaptive/addon.xml.in kodi-inputstream-adaptive-2.6.14+ds1/inputstream.adaptive/addon.xml.in --- kodi-inputstream-adaptive-2.6.7+ds1/inputstream.adaptive/addon.xml.in 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/inputstream.adaptive/addon.xml.in 2021-04-22 11:47:43.000000000 +0000 @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -18,7 +18,41 @@ InputStream client for adaptive streams Cliente InputStream para flujo de datos adaptativos @PLATFORM@ - v2.6.7 (2021-02-10) + +v2.6.14 (2021-04-22) +- Don't overwrite manifest headers with stream headers +- Stream headers default to manifest headers +- ac3 is recognised separately to eac3 +- [DASH] time and number placeholders can be used simultaneously +- [DASH] manifest_update_parameter property defaults to 'full' for SegmentTimeline +- [DASH] pssh attribute in ContentProtection tag allowed without cenc namespace +- [DASH] support ttml subs where codec isn't specified + +v2.6.13 (2021-04-10) +- Fix Debian packaging + +v2.6.12 (2021-04-09) +- Remove Android specific decrypter search paths +- Move Android addon to binary addons repo + +v2.6.11 (2021-04-08) +- Fix ampersand in changelog causing issues from v2.6.9 and v2.6.10 + +v2.6.10 (2021-04-08) +- Fix release build + +v2.6.9 (2021-04-08) +- Fix MPD Timing (remove publishTime and presentationTimeOffset) +- [Dash] Correctly set timeshift_buffer (live) +- [Dash] Support fpsScale in AdaptationSets +- [Dash] Fix missing audio languages +- [DASH] Support ec-3 channel count (urn:mpeg:mpegB:cicp:ChannelConfiguration) + +v2.6.8 (2021-03-26) +- [Dash] Append / to baseurl if required +- Fix Base Domain (fixes uri=/path/) + +v2.6.7 (2021-02-10) - Fix build for ios/tvos - Use the full BaseUrl if it's a real url inside an AdaptationSet diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/Jenkinsfile kodi-inputstream-adaptive-2.6.14+ds1/Jenkinsfile --- kodi-inputstream-adaptive-2.6.7+ds1/Jenkinsfile 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/Jenkinsfile 2021-04-22 11:47:43.000000000 +0000 @@ -1 +1 @@ -buildPlugin(version: "Matrix", deploy: ['osx-x86_64', 'windows-i686', 'windows-x86_64', 'ubuntu-ppa']) +buildPlugin(version: "Matrix") diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/README.md kodi-inputstream-adaptive-2.6.14+ds1/README.md --- kodi-inputstream-adaptive-2.6.7+ds1/README.md 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/README.md 2021-04-22 11:47:43.000000000 +0000 @@ -1,4 +1,4 @@ -# inputstream.adaptive (2.6.6) +# inputstream.adaptive (2.6.14) This is an adaptive file addon for kodi's new InputStream Interface. @@ -9,12 +9,12 @@ ##### Examples: 1.) mpd dash example with one video and one audio stream -- Force inputstream.mpd using a property in strm file: #KODIPROP:inputstreamaddon=inputstream.adaptive +- Force inputstream.mpd using a property in strm file: #KODIPROP:inputstream=inputstream.adaptive - Select the tye of the manifest using a property in strm file: #KODIPROP:inputstream.adaptive.manifest_type=mpd - URL to paste into strm file: http://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live/mp4-live-mpd-AV-BS.mpd 2.) mpd dash example with one video and multiple audio streams -- Force inputstream.mpd using a Property in strm file: #KODIPROP:inputstreamaddon=inputstream.mpd +- Force inputstream.mpd using a Property in strm file: #KODIPROP:inputstream=inputstream.mpd - Select the tye of the manifest using a property in strm file: #KODIPROP:inputstream.adaptive.manifest_type=mpd - URL to paste into strm file: http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/client_manifest-events-multilang.mpd @@ -38,7 +38,6 @@ ##### TODO's: - Adaptive bitrate switching is prepared but currently not yet activated - Automatic / fixed video stream selection depending on max. visible display rect (some work has to be done at the inputstream interface). -- DASH implementation of periods (currently only the first period is considered) - There will be many dash mpd, smoothstream or hls manifest types currently not supported - must be extended. ##### Notes: diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/aes_decrypter.h kodi-inputstream-adaptive-2.6.14+ds1/src/aes_decrypter.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/aes_decrypter.h 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/aes_decrypter.h 2021-04-22 11:47:43.000000000 +0000 @@ -18,23 +18,30 @@ #pragma once +#include "Iaes_decrypter.h" + #include "Ap4Types.h" #include #include -class ATTRIBUTE_HIDDEN AESDecrypter +class ATTRIBUTE_HIDDEN AESDecrypter : public IAESDecrypter { public: - AESDecrypter(const std::string &licenseKey) : m_licenseKey(licenseKey) {}; + AESDecrypter(const std::string& licenseKey) : m_licenseKey(licenseKey){}; virtual ~AESDecrypter() = default; - void decrypt(const AP4_UI08 *aes_key, const AP4_UI08 *aes_iv, const AP4_UI08 *src, AP4_UI08 *dst, size_t dataSize); - std::string convertIV(const std::string &input); - void ivFromSequence(uint8_t *buffer, uint64_t sid); - const std::string &getLicenseKey() const { return m_licenseKey; }; - bool RenewLicense(const std::string &pluginUrl); + void decrypt(const AP4_UI08* aes_key, + const AP4_UI08* aes_iv, + const AP4_UI08* src, + AP4_UI08* dst, + size_t dataSize); + std::string convertIV(const std::string& input); + void ivFromSequence(uint8_t* buffer, uint64_t sid); + const std::string& getLicenseKey() const { return m_licenseKey; }; + bool RenewLicense(const std::string& pluginUrl); + private: std::string m_licenseKey; }; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveStream.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveStream.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveStream.cpp 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveStream.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -262,19 +262,15 @@ return true; } -void AdaptiveStream::ReplacePlacehoder(std::string& url, uint64_t index, uint64_t timeStamp) +void AdaptiveStream::ReplacePlaceholder(std::string& url, const std::string placeholder, uint64_t value) { - std::string::size_type lenReplace(7); - std::string::size_type np(url.find("$Number")); - uint64_t value(index); //StartNumber + std::string::size_type lenReplace(placeholder.length()); + std::string::size_type np(url.find(placeholder)); char rangebuf[128]; if (np == std::string::npos) - { - lenReplace = 5; - np = url.find("$Time"); - value = timeStamp; //Timestamp - } + return; + np += lenReplace; std::string::size_type npe(url.find('$', np)); @@ -333,7 +329,8 @@ else if (seg != ¤t_rep_->initialization_) //templated segment { download_url_ = current_rep_->segtpl_.media; - ReplacePlacehoder(download_url_, seg->range_end_, seg->range_begin_); + ReplacePlaceholder(download_url_, "$Number", seg->range_end_); + ReplacePlaceholder(download_url_, "$Time", seg->range_begin_); } else //templated initialization segment download_url_ = current_rep_->url_; @@ -344,7 +341,8 @@ seg != ¤t_rep_->initialization_) { download_url_ = current_rep_->segtpl_.media; - ReplacePlacehoder(download_url_, current_rep_->startNumber_, 0); + ReplacePlaceholder(download_url_, "$Number", current_rep_->startNumber_); + ReplacePlaceholder(download_url_, "$Time", 0); } else download_url_ = current_rep_->url_; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveStream.h kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveStream.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveStream.h 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveStream.h 2021-04-22 11:47:43.000000000 +0000 @@ -101,8 +101,7 @@ bool download_segment(); void worker(); int SecondsSinceUpdate() const; - static void ReplacePlacehoder(std::string &url, uint64_t index, uint64_t timeStamp); - + static void ReplacePlaceholder(std::string &url, const std::string placeholder, uint64_t value); struct THREADDATA { diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveTree.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveTree.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveTree.cpp 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveTree.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -47,7 +47,6 @@ , overallSeconds_(0) , stream_start_(0) , available_time_(0) - , publish_time_(0) , base_time_(0) , minPresentationOffset(0) , has_timeshift_buffer_(false) @@ -331,7 +330,7 @@ } base_url_.resize(paramPos + 1); - paramPos = base_url_.find("://", 0, 8); + paramPos = base_url_.find("://"); if (paramPos != std::string::npos) { base_domain_ = base_url_; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveTree.h kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveTree.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/common/AdaptiveTree.h 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/common/AdaptiveTree.h 2021-04-22 11:47:43.000000000 +0000 @@ -143,11 +143,10 @@ struct SegmentTemplate { - SegmentTemplate() : timescale(0), duration(0), presentationTimeOffset(0){}; + SegmentTemplate() : timescale(0), duration(0) {}; std::string initialization; std::string media; unsigned int timescale, duration; - uint64_t presentationTimeOffset; }; struct Representation @@ -426,7 +425,7 @@ uint32_t currentNode_; uint32_t segcount_; uint32_t initial_sequence_ = ~0UL; - uint64_t overallSeconds_, stream_start_, available_time_, publish_time_, base_time_; + uint64_t overallSeconds_, stream_start_, available_time_, base_time_; uint64_t minPresentationOffset; bool has_timeshift_buffer_, has_overall_seconds_; @@ -439,7 +438,7 @@ uint8_t adpChannelCount_, adp_pssh_set_; uint16_t adpwidth_, adpheight_; - uint32_t adpfpsRate_; + uint32_t adpfpsRate_, adpfpsScale_; float adpaspect_; ContainerType adpContainerType_; bool adp_timelined_, period_timelined_; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/helpers.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/helpers.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/helpers.cpp 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/helpers.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -529,3 +529,13 @@ headerMap[trimcp(b->substr(0, pos))] = url_decode(trimcp(b->substr(pos+1))); } } + +int endswith(const char* in, const char* suffix) +{ + int l1 = strlen(suffix); + int l2 = strlen(in); + if (l1 > l2) + return 0; + + return strcmp(suffix, in + (l2 - l1)) == 0; +} diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/helpers.h kodi-inputstream-adaptive-2.6.14+ds1/src/helpers.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/helpers.h 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/helpers.h 2021-04-22 11:47:43.000000000 +0000 @@ -47,6 +47,7 @@ char* KIDtoUUID(const uint8_t* kid, char* dst); bool create_ism_license(std::string key, std::string license_data, std::vector& init_data); void parseheader(std::map& headerMap, const std::string& headerString); +int endswith(const char* in, const char* suffix); extern bool preReleaseFeatures; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/Iaes_decrypter.h kodi-inputstream-adaptive-2.6.14+ds1/src/Iaes_decrypter.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/Iaes_decrypter.h 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/Iaes_decrypter.h 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,24 @@ +#pragma once + +#include "Ap4Types.h" + +#include + +class IAESDecrypter +{ +public: + virtual ~IAESDecrypter() {}; + + virtual void decrypt(const AP4_UI08* aes_key, + const AP4_UI08* aes_iv, + const AP4_UI08* src, + AP4_UI08* dst, + size_t dataSize) = 0; + virtual std::string convertIV(const std::string& input) = 0; + virtual void ivFromSequence(uint8_t* buffer, uint64_t sid) = 0; + virtual const std::string& getLicenseKey() const = 0; + virtual bool RenewLicense(const std::string& pluginUrl) = 0; + +private: + std::string m_licenseKey; +}; \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/main.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/main.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/main.cpp 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/main.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -1304,7 +1304,10 @@ case AP4_OTI_DTS_MASTER_AUDIO: case AP4_OTI_DTS_EXPRESS_AUDIO: info.SetCodecName("dca"); + break; case AP4_OTI_AC3_AUDIO: + info.SetCodecName("ac3"); + break; case AP4_OTI_EAC3_AUDIO: info.SetCodecName("eac3"); break; @@ -2137,14 +2140,8 @@ kodihost->SetLibraryPath(kodi::vfs::TranslateSpecialProtocol(specialpath).c_str()); std::vector searchPaths(2); -#ifdef ANDROID - searchPaths[0] = getenv("KODI_ANDROID_LIBS") - ? getenv("KODI_ANDROID_LIBS") - : kodi::vfs::TranslateSpecialProtocol("special://xbmcbinaddons/"); -#else searchPaths[0] = kodi::vfs::TranslateSpecialProtocol("special://xbmcbinaddons/inputstream.adaptive/"); -#endif searchPaths[1] = kodi::GetAddonInfo("path"); std::vector items; @@ -2689,7 +2686,9 @@ stream.info_.SetCodecName("aac"); else if (rep->codecs_.find("dts") == 0) stream.info_.SetCodecName("dca"); - else if (rep->codecs_.find("ec-3") == 0 || rep->codecs_.find("ac-3") == 0) + else if (rep->codecs_.find("ac-3") == 0) + stream.info_.SetCodecName("ac3"); + else if (rep->codecs_.find("ec-3") == 0) stream.info_.SetCodecName("eac3"); else if (rep->codecs_.find("avc") == 0 || rep->codecs_.find("h264") == 0) stream.info_.SetCodecName("h264"); @@ -3359,7 +3358,6 @@ prop.second.c_str()); parseheader(manh, prop.second); medh = manh; - mpd_url = mpd_url.substr(0, mpd_url.find("|")); } else if (prop.first == "inputstream.adaptive.original_audio_language") { @@ -3401,6 +3399,9 @@ mpd_url = mpd_url.substr(0, posHeader); } + if (medh.empty()) + medh = manh; + kodihost->SetProfilePath(props.GetProfileFolder()); m_session = std::shared_ptr(new Session(manifest, mpd_url.c_str(), mfup, lt, lk, ld, lsc, diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/DASHTree.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/parser/DASHTree.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/DASHTree.cpp 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/DASHTree.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -54,13 +54,6 @@ static const char* CONTENTPROTECTION_TAG = "ContentProtection"; -static const char* ltranslate(const char* in) -{ - if (strlen(in) == 2 || strlen(in) == 3 || (strlen(in) > 3 && in[2] == '-')) - return in; - return "unk"; -} - DASHTree::DASHTree() { } @@ -79,7 +72,8 @@ } if (schemeIdUri && value) { - if (strcmp(schemeIdUri, "urn:mpeg:dash:23003:3:audio_channel_configuration:2011") == 0) + if (strcmp(schemeIdUri, "urn:mpeg:dash:23003:3:audio_channel_configuration:2011") == 0 || + strcmp(schemeIdUri, "urn:mpeg:mpegB:cicp:ChannelConfiguration") == 0) return atoi(value); else if (strcmp(schemeIdUri, "urn:dolby:dash:audio_channel_configuration:2011") == 0 || strcmp(schemeIdUri, "tag:dolby.com,2014:dash:audio_channel_configuration:2011") == 0) @@ -107,8 +101,6 @@ tpl.duration = atoi((const char*)*(attr + 1)); else if (strcmp((const char*)*attr, "media") == 0) tpl.media = (const char*)*(attr + 1); - else if (strcmp((const char*)*attr, "presentationTimeOffset") == 0) - tpl.presentationTimeOffset = atoll((const char*)*(attr + 1)); else if (strcmp((const char*)*attr, "startNumber") == 0) startNumber = atoi((const char*)*(attr + 1)); else if (strcmp((const char*)*attr, "initialization") == 0) @@ -123,6 +115,8 @@ { if (!tpl.media.empty() && tpl.media[0] == '/') tpl.media = baseDomain + tpl.media; + else if (!baseURL.empty() && baseURL.back() != '/') + tpl.media = baseURL + '/' + tpl.media; else tpl.media = baseURL + tpl.media; } @@ -132,6 +126,8 @@ { if (!tpl.initialization.empty() && tpl.initialization[0] == '/') tpl.initialization = baseDomain + tpl.initialization; + else if (!baseURL.empty() && baseURL.back() != '/') + tpl.initialization = baseURL + '/' + tpl.initialization; else tpl.initialization = baseURL + tpl.initialization; } @@ -208,7 +204,7 @@ else urnFound = stricmp(dash->supportedKeySystem_.c_str(), (const char*)*(attr + 1)) == 0; } - else if (strcmp((const char*)*attr, "cenc:default_KID") == 0) + else if (endswith((const char*)*attr, "default_KID")) defaultKID = (const char*)*(attr + 1); attr += 2; } @@ -403,7 +399,7 @@ } else if (dash->currentNode_ & MPDNODE_CONTENTPROTECTION) { - if (strcmp(el, "cenc:pssh") == 0) + if (endswith(el, "pssh")) dash->currentNode_ |= MPDNODE_PSSH; else if (strcmp(el, "widevine:license") == 0) { @@ -559,6 +555,9 @@ { dash->currentNode_ |= MPDNODE_SEGMENTTIMELINE; dash->adp_timelined_ = true; + + if (dash->update_parameter_.empty() && dash->has_timeshift_buffer_) + dash->update_parameter_ = "full"; } } else if (dash->currentNode_ & MPDNODE_SEGMENTDURATIONS) @@ -569,7 +568,7 @@ } else if (dash->currentNode_ & MPDNODE_CONTENTPROTECTION) { - if (strcmp(el, "cenc:pssh") == 0) + if (endswith(el, "pssh")) dash->currentNode_ |= MPDNODE_PSSH; else if (strcmp(el, "widevine:license") == 0) { @@ -663,6 +662,7 @@ dash->current_representation_->width_ = dash->adpwidth_; dash->current_representation_->height_ = dash->adpheight_; dash->current_representation_->fpsRate_ = dash->adpfpsRate_; + dash->current_representation_->fpsScale_ = dash->adpfpsScale_; dash->current_representation_->aspect_ = dash->adpaspect_; dash->current_representation_->containerType_ = dash->adpContainerType_; @@ -685,9 +685,12 @@ dash->current_representation_->samplingRate_ = static_cast(atoi((const char*)*(attr + 1))); else if (strcmp((const char*)*attr, "frameRate") == 0) + { + dash->current_representation_->fpsScale_ = 1; sscanf((const char*)*(attr + 1), "%" SCNu32 "/%" SCNu32, &dash->current_representation_->fpsRate_, &dash->current_representation_->fpsScale_); + } else if (strcmp((const char*)*attr, "id") == 0) dash->current_representation_->id = (const char*)*(attr + 1); else if (strcmp((const char*)*attr, "codecPrivateData") == 0) @@ -707,7 +710,8 @@ else if (strncmp(dash->current_adaptationset_->mimeType_.c_str(), "audio", 5) == 0) dash->current_adaptationset_->type_ = DASHTree::AUDIO; else if (strncmp(dash->current_adaptationset_->mimeType_.c_str(), "application", - 11) == 0) + 11) == 0 || + strncmp(dash->current_adaptationset_->mimeType_.c_str(), "text", 4) == 0) dash->current_adaptationset_->type_ = DASHTree::SUBTITLE; } if (strstr(dash->current_adaptationset_->mimeType_.c_str(), "/webm")) @@ -719,6 +723,28 @@ attr += 2; } + if (dash->current_representation_->codecs_.empty()) + { + if (dash->current_adaptationset_->mimeType_ == "text/vtt") + dash->current_representation_->codecs_ = "wvtt"; + else if (dash->current_adaptationset_->mimeType_ == "application/ttml+xml") + dash->current_representation_->codecs_ = "ttml"; + } + + if (dash->current_adaptationset_->type_ != DASHTree::SUBTITLE) + { + if (dash->current_representation_->codecs_ == "wvtt") + { + dash->current_adaptationset_->type_ = DASHTree::SUBTITLE; + dash->current_adaptationset_->mimeType_ = "text/vtt"; + } + else if (dash->current_representation_->codecs_ == "ttml") + { + dash->current_adaptationset_->type_ = DASHTree::SUBTITLE; + dash->current_adaptationset_->mimeType_ = "application/ttml+xml"; + } + } + if (dash->current_adaptationset_->type_ == DASHTree::SUBTITLE && (dash->current_adaptationset_->mimeType_ == "application/ttml+xml" || dash->current_adaptationset_->mimeType_ == "text/vtt")) @@ -729,14 +755,6 @@ dash->current_representation_->containerType_ = AdaptiveTree::CONTAINERTYPE_TEXT; } - if (dash->current_adaptationset_->type_ != DASHTree::SUBTITLE && - dash->current_representation_->codecs_ == "wvtt") - dash->current_adaptationset_->type_ = DASHTree::SUBTITLE; - - if (dash->current_adaptationset_->mimeType_ == "text/vtt" && - dash->current_representation_->codecs_.empty()) - dash->current_representation_->codecs_ = "wvtt"; - dash->current_representation_->segtpl_ = dash->current_adaptationset_->segtpl_; if (!dash->current_adaptationset_->segtpl_.media.empty()) { @@ -854,6 +872,7 @@ dash->adpwidth_ = 0; dash->adpheight_ = 0; dash->adpfpsRate_ = 0; + dash->adpfpsScale_ = 1; dash->adpaspect_ = 0.0f; dash->adp_pssh_set_ = 0; dash->adpContainerType_ = AdaptiveTree::CONTAINERTYPE_MP4; @@ -882,7 +901,7 @@ else if (strcmp((const char*)*attr, "group") == 0) dash->current_adaptationset_->group_ = (const char*)*(attr + 1); else if (strcmp((const char*)*attr, "lang") == 0) - dash->current_adaptationset_->language_ = ltranslate((const char*)*(attr + 1)); + dash->current_adaptationset_->language_ = (const char*)*(attr + 1); else if (strcmp((const char*)*attr, "mimeType") == 0) dash->current_adaptationset_->mimeType_ = (const char*)*(attr + 1); else if (strcmp((const char*)*attr, "name") == 0) @@ -894,7 +913,9 @@ else if (strcmp((const char*)*attr, "height") == 0) dash->adpheight_ = static_cast(atoi((const char*)*(attr + 1))); else if (strcmp((const char*)*attr, "frameRate") == 0) - dash->adpfpsRate_ = static_cast(atoi((const char*)*(attr + 1))); + sscanf((const char*)*(attr + 1), "%" SCNu32 "/%" SCNu32, + &dash->adpfpsRate_, + &dash->adpfpsScale_); else if (strcmp((const char*)*attr, "par") == 0) { int w, h; @@ -1002,12 +1023,11 @@ else if (strcmp(el, "MPD") == 0) { const char *mpt(0), *tsbd(0); - bool bStatic(false); dash->firstStartNumber_ = 0; dash->overallSeconds_ = 0; - dash->stream_start_ = time(0); + dash->stream_start_ = dash->GetNowTime(); dash->mpd_url_ = dash->base_url_; for (; *attr;) @@ -1015,11 +1035,11 @@ if (strcmp((const char*)*attr, "mediaPresentationDuration") == 0) { mpt = (const char*)*(attr + 1); - bStatic = true; } - else if (strcmp((const char*)*attr, "type") == 0) + else if (strcmp((const char*)*attr, "type") == 0 && + strcmp((const char*)*(attr + 1), "dynamic") == 0) { - bStatic = strcmp((const char*)*(attr + 1), "static") == 0; + dash->has_timeshift_buffer_ = true; } else if (strcmp((const char*)*attr, "timeShiftBufferDepth") == 0) { @@ -1028,10 +1048,6 @@ } else if (strcmp((const char*)*attr, "availabilityStartTime") == 0) dash->available_time_ = getTime((const char*)*(attr + 1)); - else if (strcmp((const char*)*attr, "publishTime") == 0) - dash->publish_time_ = getTime((const char*)*(attr + 1)); - else if (strcmp((const char*)*attr, "testTime") == 0) - dash->stream_start_ = getTime((const char*)*(attr + 1)); else if (strcmp((const char*)*attr, "minimumUpdatePeriod") == 0) { uint64_t dur(0); @@ -1043,15 +1059,11 @@ if (!mpt) mpt = tsbd; - dash->has_timeshift_buffer_ = !bStatic; AddDuration(mpt, dash->overallSeconds_, 1); dash->has_overall_seconds_ = dash->overallSeconds_ > 0; uint64_t overallsecs(dash->overallSeconds_ ? dash->overallSeconds_ + 60 : 86400); - if (!dash->base_time_ && dash->publish_time_ && dash->available_time_ && - dash->publish_time_ - dash->available_time_ > overallsecs) - dash->base_time_ = dash->publish_time_ - dash->available_time_ - overallsecs; dash->minPresentationOffset = ~0ULL; dash->currentNode_ |= MPDNODE_MPD; @@ -1149,7 +1161,7 @@ { if (dash->currentNode_ & MPDNODE_PSSH) { - if (strcmp(el, "cenc:pssh") == 0) + if (endswith(el, "pssh")) { dash->current_pssh_ = dash->strXMLText_; dash->currentNode_ &= ~MPDNODE_PSSH; @@ -1240,14 +1252,9 @@ if (!timeBased && dash->has_timeshift_buffer_ && tpl.duration) { - // get the closest time to calculate start_number - uint64_t calc_time = - dash->publish_time_ ? dash->publish_time_ : dash->stream_start_; - uint64_t sample_time = tpl.presentationTimeOffset - ? tpl.presentationTimeOffset / tpl.timescale - : dash->current_period_->start_ / 1000; + uint64_t sample_time = dash->current_period_->start_ / 1000; - seg.range_end_ += (static_cast(calc_time - dash->available_time_ - + seg.range_end_ += (static_cast(dash->stream_start_ - dash->available_time_ - overallSeconds - sample_time)) * tpl.timescale / tpl.duration + 1; @@ -1348,7 +1355,7 @@ { if (dash->currentNode_ & MPDNODE_PSSH) { - if (strcmp(el, "cenc:pssh") == 0) + if (endswith(el, "pssh")) { dash->current_pssh_ = dash->strXMLText_; dash->currentNode_ &= ~MPDNODE_PSSH; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/DASHTree.h kodi-inputstream-adaptive-2.6.14+ds1/src/parser/DASHTree.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/DASHTree.h 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/DASHTree.h 2021-04-22 11:47:43.000000000 +0000 @@ -36,6 +36,7 @@ Representation* rep, StreamType type) override; + virtual uint64_t GetNowTime() { return time(0); }; void SetUpdateInterval(uint32_t interval) { updateInterval_ = interval; }; uint64_t pts_helper_, timeline_time_; uint32_t firstStartNumber_; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/DASHTreeTest.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/parser/DASHTreeTest.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/DASHTreeTest.cpp 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/DASHTreeTest.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,209 +0,0 @@ -/* - * Copyright (C) 2020 peak3d - * http://www.peak3d.de - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * . - * - */ - -#include "DASHTree.h" -#include "../log.h" -#include -#include -#include - -std::string testfile; - -void Log(const LogLevel loglevel, const char* format, ...) -{ -} - -void print_hex_string(std::ostream& os, std::string const str) -{ - std::ios_base::fmtflags f( os.flags() ); - - os << "{"; - - for (auto f : str) - { - os << " 0x" << std::hex << std::setw(2) - << std::setfill('0') << static_cast(f & 0x00FF); - } - - os << " }"; - - os.flags( f ); -} - -bool adaptive::AdaptiveTree::download(const char* url, - const std::map& manifestHeaders, - void* opaque, - bool scanEffectiveURL) -{ - FILE* f = fopen(testfile.c_str(), "rb"); - if (!f) - return false; - - // read the file - static const unsigned int CHUNKSIZE = 16384; - char buf[CHUNKSIZE]; - size_t nbRead; - - while ((nbRead = fread(buf, 1, CHUNKSIZE, f)) > 0 && ~nbRead && write_data(buf, nbRead, opaque)) - ; - - fclose(f); - - SortTree(); - - return nbRead == 0; -} - -int main(int argc, char** argv) -{ - if (argc < 2) - { - printf("Usage: )"); - exit(1); - } - - adaptive::DASHTree tree; - //only widevine supported for this test - tree.supportedKeySystem_ = "urn:uuid:EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"; - - testfile = argv[1]; - if (!tree.open("", "")) - { - printf("open() failed %s", argv[1]); - exit(1); - } - - //Write the raw structure of the tree - std::stringstream sstreamCur; - sstreamCur << "Root: available_time_: " << tree.available_time_ - << ", base_time_: " << tree.base_time_ << ", firstStartNumber_: " << tree.firstStartNumber_ - << ", has_overall_seconds_: " << tree.has_overall_seconds_ - << ", has_timeshift_buffer_:" << tree.has_timeshift_buffer_ - << ", publish_time_: " << tree.publish_time_ << ", stream_start_: " << tree.stream_start_ - << ", #periods: " << tree.periods_.size() << "\n"; - - for (const adaptive::AdaptiveTree::Period* period : tree.periods_) - { - sstreamCur << "Period: base_url_: " << period->base_url_ << ", duration_ : " << period->duration_ - << ", encryptionState_: " << period->encryptionState_ << ", id_: " << period->id_ - << ", included_types_: " << period->included_types_ - << ", need_secure_decoder_:" << period->need_secure_decoder_ - << ", start_: " << period->start_ << ", startNumber_: " << period->startNumber_ - << ", startPTS_: " << period->startPTS_ << ", #psshsets: " << period->psshSets_.size() - << ", #adaptationSets: " << period->adaptationSets_.size() << "\n"; - for (const adaptive::AdaptiveTree::Period::PSSH pssh : period->psshSets_) - { - sstreamCur << "\tPSSH: defaultKID_: "; - - print_hex_string(sstreamCur, pssh.defaultKID_); - - sstreamCur << ", iv: "; - - print_hex_string(sstreamCur, pssh.iv); - - sstreamCur << ", media_: " << pssh.media_ << ", pssh_: " << pssh.pssh_ << "\n"; - } - for (const adaptive::AdaptiveTree::AdaptationSet* adp : period->adaptationSets_) - { - sstreamCur << "\tADP: audio_track_id_: " << adp->audio_track_id_ - << ", base_url_: " << adp->base_url_ << ", codecs_: " << adp->codecs_ - << ", default_: " << adp->default_ << ", duration_: " << adp->duration_ - << ", forced_: " << adp->forced_ << ", group_: " << adp->group_ - << ", id_: " << adp->id_ << ", impaired_: " << adp->impaired_ - << ", language_: " << adp->language_ << ", mimeType_: " << adp->mimeType_ - << ", name_: " << adp->name_ << ", original_: " << adp->original_ - << ", startNumber_: " << adp->startNumber_ << ", startPTS_: " << adp->startPTS_ - << ", type_: " << adp->type_ - << ", #segment_durations_: " << adp->segment_durations_.size() - << ", #representations_: " << adp->representations_.size() << "\n"; - sstreamCur << "\t\tSegTpl: duration: " << adp->segtpl_.duration - << ", initialization: " << adp->segtpl_.initialization - << ", media: " << adp->segtpl_.media - << ", presentationTimeOffset: " << adp->segtpl_.presentationTimeOffset - << ", timescale:" << adp->segtpl_.timescale << "\n"; - sstreamCur << "\t\t\tSegment durations:"; - for (const uint32_t dur : adp->segment_durations_.data) - sstreamCur << ", " << dur; - sstreamCur << "\n"; - - for (const adaptive::AdaptiveTree::Representation* rep : adp->representations_) - { - sstreamCur << "\t\t\tRep: aspect_: " << rep->aspect_ << ", bandwidth_ : " << rep->bandwidth_ - << ", channelCount_ : " << static_cast(rep->channelCount_) << ", codecs_ : " << rep->codecs_ - << ", codec_private_data_ : " << rep->codec_private_data_ - << ", containerType_ : " << static_cast(rep->containerType_) << ", duration_ : " << rep->duration_ - << ", flags_ : " << rep->flags_ << ", fpsRate_ : " << rep->fpsRate_ - << ", fpsScale_ : " << rep->fpsScale_ << ", hdcpVersion_ : " << rep->hdcpVersion_ - << ", height_ : " << rep->height_ << ", id : " << rep->id - << ", indexRangeMax_ : " << rep->indexRangeMax_ << ", indexRangeMin_ : " << rep->indexRangeMin_ - << ", nalLengthSize_ : " << static_cast(rep->nalLengthSize_) << ", pssh_set_ : " << rep->pssh_set_ - << ", ptsOffset_ : " << rep->ptsOffset_ << ", samplingRate_ : " << rep->samplingRate_ - << ", source_url_ : " << rep->source_url_ << ", startNumber_ : " << rep->startNumber_ - << ", timescale_ : " << rep->timescale_ << ", timescale_ext_ : " << rep->timescale_ext_ - << ", timescale_int_ : " << rep->timescale_int_ << ", url_ : " << rep->url_ - << ", width_ : " << rep->width_ << "\n"; - sstreamCur << "\t\t\t\tSegTpl: duration: " << rep->segtpl_.duration - << ", initialization: " << rep->segtpl_.initialization - << ", media: " << rep->segtpl_.media - << ", presentationTimeOffset: " << rep->segtpl_.presentationTimeOffset - << ", timescale:" << rep->segtpl_.timescale << "\n"; - sstreamCur << "\t\t\t\tInit: pssh_set_: " << rep->initialization_.pssh_set_ - << std::hex << ", range_begin_: 0x" << rep->initialization_.range_begin_ - << ", range_end_: 0x" << rep->initialization_.range_end_ - << std::dec << ", startPTS_: " << rep->initialization_.startPTS_ - << ", url:" << (rep->initialization_.url ? rep->initialization_.url : "NULL") - << "\n"; - for (const adaptive::AdaptiveTree::Segment &seg : rep->segments_.data) - { - sstreamCur << "\t\t\t\tSeg: pssh_set_: " << seg.pssh_set_ << std::hex - << ", range_begin_: 0x" << seg.range_begin_ << ", range_end_: 0x" - << seg.range_end_ << std::dec << ", startPTS_: " << seg.startPTS_ - << ", url:" << (seg.url ? seg.url : "NULL") << "\n"; - } - } - } - } - - // Write current test results to _generated - std::string fn_current = argv[1]; - fn_current += "_current"; - - FILE* f_current = fopen(fn_current.c_str(), "wb"); - if (!f_current) - { - printf("cannot create %s", fn_current.c_str()); - exit(1); - } - fwrite(sstreamCur.str().c_str(), 1, sstreamCur.str().size(), f_current); - fclose(f_current); - - // Read the file _target which contains the valid results - std::string fn_target = argv[1]; - fn_target += "_target"; - std::stringstream sstreamTgt; - - std::ifstream streamTarget(fn_target, std::ios::in | std::ios::binary); - if (!streamTarget.is_open()) - { - printf("cannot read %s", fn_target.c_str()); - exit(1); - } - sstreamTgt << streamTarget.rdbuf(); - - return sstreamTgt.str() == sstreamCur.str() ? 0 : -1; -} diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/HLSTree.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/parser/HLSTree.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/HLSTree.cpp 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/HLSTree.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -18,7 +18,7 @@ #include "HLSTree.h" -#include "../aes_decrypter.h" +#include "../Iaes_decrypter.h" #include "../helpers.h" #include "../log.h" diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/HLSTree.h kodi-inputstream-adaptive-2.6.14+ds1/src/parser/HLSTree.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/HLSTree.h 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/HLSTree.h 2021-04-22 11:47:43.000000000 +0000 @@ -25,7 +25,7 @@ #include -class AESDecrypter; +class IAESDecrypter; namespace adaptive { @@ -41,7 +41,7 @@ ENCRYPTIONTYPE_WIDEVINE = 3, ENCRYPTIONTYPE_UNKNOWN = 4, }; - HLSTree(AESDecrypter* decrypter) : AdaptiveTree(), m_decrypter(decrypter){}; + HLSTree(IAESDecrypter* decrypter) : AdaptiveTree(), m_decrypter(decrypter){}; virtual ~HLSTree(); virtual bool open(const std::string& url, const std::string& manifestUpdateParam) override; @@ -89,7 +89,7 @@ std::map m_extGroups; bool m_refreshPlayList = true; uint8_t m_segmentIntervalSec = 4; - AESDecrypter *m_decrypter; + IAESDecrypter *m_decrypter; std::stringstream manifest_stream; bool m_hasDiscontSeq = false; uint32_t m_discontSeq = 0; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/6play.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/6play.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/6play.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/6play.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - - - AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - - - - - - AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - - - AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - - - - - - AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - - - AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - - - - - - AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - - - AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - - - - - - - AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBlADAAYgBaAGsAWgBYAFgAaQB6AEcAZwBmAEUAaABuAC8AMABPAEIANQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AUABrADkAawB3AFMAcgBEAEIAcgBBAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQAwAGIAWgBrAFoAWABYAGkAegBHAGcAZgBFAGgAbgAvADAATwBCADUAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AFAAawA5AGsAdwBTAHIARABCAHIAQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - - - AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQkdlGe9eVMYugfEhn/0OB5xoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - - - - - - - - - - - - - - - AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBlADAAYgBaAGsAWgBYAFgAaQB6AEcAZwBmAEUAaABuAC8AMABPAEIANQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AUABrADkAawB3AFMAcgBEAEIAcgBBAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQAwAGIAWgBrAFoAWABYAGkAegBHAGcAZgBFAGgAbgAvADAATwBCADUAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AFAAawA5AGsAdwBTAHIARABCAHIAQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - - - AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQkdlGe9eVMYugfEhn/0OB5xoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - - - - - - - - - - - - - - - AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBlADAAYgBaAGsAWgBYAFgAaQB6AEcAZwBmAEUAaABuAC8AMABPAEIANQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AUABrADkAawB3AFMAcgBEAEIAcgBBAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQAwAGIAWgBrAFoAWABYAGkAegBHAGcAZgBFAGgAbgAvADAATwBCADUAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AFAAawA5AGsAdwBTAHIARABCAHIAQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - - - AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQkdlGe9eVMYugfEhn/0OB5xoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - - - - - - - - - - - - - - diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/6play.mpd_target kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/6play.mpd_target --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/6play.mpd_target 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/6play.mpd_target 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ -Root: available_time_: 6, base_time_: 1591531051, firstStartNumber_: 0, has_overall_seconds_: 1, has_timeshift_buffer_:1, publish_time_: 1591531195, stream_start_: 1591531201, #periods: 1 -Period: base_url_: , duration_ : 7020000, encryptionState_: 3, id_: 0, included_types_: 0, need_secure_decoder_:0, start_: 1588628086000, startNumber_: 1, startPTS_: 0, #psshsets: 3, #adaptationSets: 4 - PSSH: defaultKID_: { }, iv: { }, media_: 0, pssh_: - PSSH: defaultKID_: { 0x93 0x4b 0xc7 0xc6 0xa0 0x29 0x3d 0x5b 0x9e 0x26 0x1a 0x73 0x24 0x77 0x75 0x03 }, iv: { }, media_: 1, pssh_: AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - PSSH: defaultKID_: { 0x91 0xd9 0x46 0x7b 0xd7 0x95 0x31 0x8b 0xa0 0x7c 0x48 0x67 0xff 0x43 0x81 0xe7 }, iv: { }, media_: 2, pssh_: AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQkdlGe9eVMYugfEhn/0OB5xoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== - ADP: audio_track_id_: , base_url_: , codecs_: , default_: 0, duration_: 0, forced_: 0, group_: , id_: 1, impaired_: 0, language_: unk, mimeType_: video/mp4, name_: , original_: 0, startNumber_: 487050, startPTS_: 263007000000, type_: 1, #segment_durations_: 13, #representations_: 4 - SegTpl: duration: 0, initialization: $RepresentationID$/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, media: $RepresentationID$/segment_$Number$.m4s, presentationTimeOffset: 1738747575, timescale:90000 - Segment durations:, 540000, 540000, 540000, 540000, 540000, 540000, 540000, 540000, 540000, 540000, 540000, 540000, 540000 - Rep: aspect_: 0, bandwidth_ : 300000, channelCount_ : 0, codecs_ : avc1.42001e, codec_private_data_ : , containerType_ : 2, duration_ : 0, flags_ : 14, fpsRate_ : 25, fpsScale_ : 1, hdcpVersion_ : 0, height_ : 224, id : videosd-400x224, indexRangeMax_ : 0, indexRangeMin_ : 0, nalLengthSize_ : 0, pssh_set_ : 1, ptsOffset_ : 0, samplingRate_ : 0, source_url_ : , startNumber_ : 487050, timescale_ : 90000, timescale_ext_ : 100, timescale_int_ : 9, url_ : videosd-400x224/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, width_ : 400 - SegTpl: duration: 540000, initialization: videosd-400x224/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, media: videosd-400x224/segment_$Number$.m4s, presentationTimeOffset: 1738747575, timescale:90000 - Init: pssh_set_: 0, range_begin_: 0x0, range_end_: 0xffffffffffffffff, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c7055c0, range_end_: 0x76e8a, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c789320, range_end_: 0x76e8b, startPTS_: 540000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c80d080, range_end_: 0x76e8c, startPTS_: 1080000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c890de0, range_end_: 0x76e8d, startPTS_: 1620000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c914b40, range_end_: 0x76e8e, startPTS_: 2160000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c9988a0, range_end_: 0x76e8f, startPTS_: 2700000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ca1c600, range_end_: 0x76e90, startPTS_: 3240000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3caa0360, range_end_: 0x76e91, startPTS_: 3780000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cb240c0, range_end_: 0x76e92, startPTS_: 4320000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cba7e20, range_end_: 0x76e93, startPTS_: 4860000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cc2bb80, range_end_: 0x76e94, startPTS_: 5400000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ccaf8e0, range_end_: 0x76e95, startPTS_: 5940000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cd33640, range_end_: 0x76e96, startPTS_: 6480000, url:NULL - Rep: aspect_: 0, bandwidth_ : 800000, channelCount_ : 0, codecs_ : avc1.42001e, codec_private_data_ : , containerType_ : 2, duration_ : 0, flags_ : 14, fpsRate_ : 25, fpsScale_ : 1, hdcpVersion_ : 0, height_ : 360, id : videosd-640x360, indexRangeMax_ : 0, indexRangeMin_ : 0, nalLengthSize_ : 0, pssh_set_ : 1, ptsOffset_ : 0, samplingRate_ : 0, source_url_ : , startNumber_ : 487050, timescale_ : 90000, timescale_ext_ : 100, timescale_int_ : 9, url_ : videosd-640x360/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, width_ : 640 - SegTpl: duration: 540000, initialization: videosd-640x360/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, media: videosd-640x360/segment_$Number$.m4s, presentationTimeOffset: 1738747575, timescale:90000 - Init: pssh_set_: 0, range_begin_: 0x0, range_end_: 0xffffffffffffffff, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c7055c0, range_end_: 0x76e8a, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c789320, range_end_: 0x76e8b, startPTS_: 540000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c80d080, range_end_: 0x76e8c, startPTS_: 1080000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c890de0, range_end_: 0x76e8d, startPTS_: 1620000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c914b40, range_end_: 0x76e8e, startPTS_: 2160000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c9988a0, range_end_: 0x76e8f, startPTS_: 2700000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ca1c600, range_end_: 0x76e90, startPTS_: 3240000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3caa0360, range_end_: 0x76e91, startPTS_: 3780000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cb240c0, range_end_: 0x76e92, startPTS_: 4320000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cba7e20, range_end_: 0x76e93, startPTS_: 4860000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cc2bb80, range_end_: 0x76e94, startPTS_: 5400000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ccaf8e0, range_end_: 0x76e95, startPTS_: 5940000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cd33640, range_end_: 0x76e96, startPTS_: 6480000, url:NULL - Rep: aspect_: 0, bandwidth_ : 1500000, channelCount_ : 0, codecs_ : avc1.42001e, codec_private_data_ : , containerType_ : 2, duration_ : 0, flags_ : 14, fpsRate_ : 25, fpsScale_ : 1, hdcpVersion_ : 0, height_ : 404, id : videosd-720x404, indexRangeMax_ : 0, indexRangeMin_ : 0, nalLengthSize_ : 0, pssh_set_ : 1, ptsOffset_ : 0, samplingRate_ : 0, source_url_ : , startNumber_ : 487050, timescale_ : 90000, timescale_ext_ : 100, timescale_int_ : 9, url_ : videosd-720x404/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, width_ : 720 - SegTpl: duration: 540000, initialization: videosd-720x404/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, media: videosd-720x404/segment_$Number$.m4s, presentationTimeOffset: 1738747575, timescale:90000 - Init: pssh_set_: 0, range_begin_: 0x0, range_end_: 0xffffffffffffffff, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c7055c0, range_end_: 0x76e8a, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c789320, range_end_: 0x76e8b, startPTS_: 540000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c80d080, range_end_: 0x76e8c, startPTS_: 1080000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c890de0, range_end_: 0x76e8d, startPTS_: 1620000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c914b40, range_end_: 0x76e8e, startPTS_: 2160000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c9988a0, range_end_: 0x76e8f, startPTS_: 2700000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ca1c600, range_end_: 0x76e90, startPTS_: 3240000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3caa0360, range_end_: 0x76e91, startPTS_: 3780000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cb240c0, range_end_: 0x76e92, startPTS_: 4320000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cba7e20, range_end_: 0x76e93, startPTS_: 4860000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cc2bb80, range_end_: 0x76e94, startPTS_: 5400000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ccaf8e0, range_end_: 0x76e95, startPTS_: 5940000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cd33640, range_end_: 0x76e96, startPTS_: 6480000, url:NULL - Rep: aspect_: 0, bandwidth_ : 2100000, channelCount_ : 0, codecs_ : avc1.64001f, codec_private_data_ : , containerType_ : 2, duration_ : 0, flags_ : 14, fpsRate_ : 25, fpsScale_ : 1, hdcpVersion_ : 0, height_ : 540, id : videosd-960x540, indexRangeMax_ : 0, indexRangeMin_ : 0, nalLengthSize_ : 0, pssh_set_ : 1, ptsOffset_ : 0, samplingRate_ : 0, source_url_ : , startNumber_ : 487050, timescale_ : 90000, timescale_ext_ : 100, timescale_int_ : 9, url_ : videosd-960x540/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, width_ : 960 - SegTpl: duration: 540000, initialization: videosd-960x540/init.mp4?id=8c1bbb709229e110fbb0d1e544266504, media: videosd-960x540/segment_$Number$.m4s, presentationTimeOffset: 1738747575, timescale:90000 - Init: pssh_set_: 0, range_begin_: 0x0, range_end_: 0xffffffffffffffff, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c7055c0, range_end_: 0x76e8a, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c789320, range_end_: 0x76e8b, startPTS_: 540000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c80d080, range_end_: 0x76e8c, startPTS_: 1080000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c890de0, range_end_: 0x76e8d, startPTS_: 1620000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c914b40, range_end_: 0x76e8e, startPTS_: 2160000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3c9988a0, range_end_: 0x76e8f, startPTS_: 2700000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ca1c600, range_end_: 0x76e90, startPTS_: 3240000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3caa0360, range_end_: 0x76e91, startPTS_: 3780000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cb240c0, range_end_: 0x76e92, startPTS_: 4320000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cba7e20, range_end_: 0x76e93, startPTS_: 4860000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cc2bb80, range_end_: 0x76e94, startPTS_: 5400000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3ccaf8e0, range_end_: 0x76e95, startPTS_: 5940000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x3d3cd33640, range_end_: 0x76e96, startPTS_: 6480000, url:NULL - ADP: audio_track_id_: , base_url_: , codecs_: , default_: 1, duration_: 7020000, forced_: 0, group_: , id_: 21, impaired_: 0, language_: fre, mimeType_: audio/mp4, name_: , original_: 0, startNumber_: 487050, startPTS_: 140270400000, type_: 2, #segment_durations_: 13, #representations_: 1 - SegTpl: duration: 0, initialization: $RepresentationID$/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, media: $RepresentationID$/segment_$Number$.m4s, presentationTimeOffset: 927332040, timescale:48000 - Segment durations:, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000 - Rep: aspect_: 0, bandwidth_ : 96000, channelCount_ : 2, codecs_ : mp4a.40.2, codec_private_data_ : , containerType_ : 2, duration_ : 7020000, flags_ : 14, fpsRate_ : 0, fpsScale_ : 1, hdcpVersion_ : 0, height_ : 0, id : audio-fre-96000, indexRangeMax_ : 0, indexRangeMin_ : 0, nalLengthSize_ : 0, pssh_set_ : 2, ptsOffset_ : 0, samplingRate_ : 48000, source_url_ : , startNumber_ : 487050, timescale_ : 48000, timescale_ext_ : 1000, timescale_int_ : 48, url_ : audio-fre-96000/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, width_ : 0 - SegTpl: duration: 288000, initialization: audio-fre-96000/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, media: audio-fre-96000/segment_$Number$.m4s, presentationTimeOffset: 927332040, timescale:48000 - Init: pssh_set_: 0, range_begin_: 0x0, range_end_: 0xffffffffffffffff, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8c47200, range_end_: 0x76e8a, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8c8d700, range_end_: 0x76e8b, startPTS_: 288000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8cd3c00, range_end_: 0x76e8c, startPTS_: 576000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8d1a100, range_end_: 0x76e8d, startPTS_: 864000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8d60600, range_end_: 0x76e8e, startPTS_: 1152000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8da6b00, range_end_: 0x76e8f, startPTS_: 1440000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8ded000, range_end_: 0x76e90, startPTS_: 1728000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8e33500, range_end_: 0x76e91, startPTS_: 2016000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8e79a00, range_end_: 0x76e92, startPTS_: 2304000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8ebff00, range_end_: 0x76e93, startPTS_: 2592000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f06400, range_end_: 0x76e94, startPTS_: 2880000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f4c900, range_end_: 0x76e95, startPTS_: 3168000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f92e00, range_end_: 0x76e96, startPTS_: 3456000, url:NULL - ADP: audio_track_id_: , base_url_: , codecs_: , default_: 1, duration_: 7020000, forced_: 0, group_: , id_: 23, impaired_: 0, language_: qaa, mimeType_: audio/mp4, name_: , original_: 0, startNumber_: 487050, startPTS_: 140270400000, type_: 2, #segment_durations_: 13, #representations_: 1 - SegTpl: duration: 0, initialization: $RepresentationID$/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, media: $RepresentationID$/segment_$Number$.m4s, presentationTimeOffset: 927332040, timescale:48000 - Segment durations:, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000 - Rep: aspect_: 0, bandwidth_ : 96000, channelCount_ : 2, codecs_ : mp4a.40.2, codec_private_data_ : , containerType_ : 2, duration_ : 7020000, flags_ : 14, fpsRate_ : 0, fpsScale_ : 1, hdcpVersion_ : 0, height_ : 0, id : audio-original-96000, indexRangeMax_ : 0, indexRangeMin_ : 0, nalLengthSize_ : 0, pssh_set_ : 2, ptsOffset_ : 0, samplingRate_ : 48000, source_url_ : , startNumber_ : 487050, timescale_ : 48000, timescale_ext_ : 1000, timescale_int_ : 48, url_ : audio-original-96000/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, width_ : 0 - SegTpl: duration: 288000, initialization: audio-original-96000/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, media: audio-original-96000/segment_$Number$.m4s, presentationTimeOffset: 927332040, timescale:48000 - Init: pssh_set_: 0, range_begin_: 0x0, range_end_: 0xffffffffffffffff, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8c47200, range_end_: 0x76e8a, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8c8d700, range_end_: 0x76e8b, startPTS_: 288000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8cd3c00, range_end_: 0x76e8c, startPTS_: 576000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8d1a100, range_end_: 0x76e8d, startPTS_: 864000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8d60600, range_end_: 0x76e8e, startPTS_: 1152000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8da6b00, range_end_: 0x76e8f, startPTS_: 1440000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8ded000, range_end_: 0x76e90, startPTS_: 1728000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8e33500, range_end_: 0x76e91, startPTS_: 2016000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8e79a00, range_end_: 0x76e92, startPTS_: 2304000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8ebff00, range_end_: 0x76e93, startPTS_: 2592000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f06400, range_end_: 0x76e94, startPTS_: 2880000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f4c900, range_end_: 0x76e95, startPTS_: 3168000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f92e00, range_end_: 0x76e96, startPTS_: 3456000, url:NULL - ADP: audio_track_id_: , base_url_: , codecs_: , default_: 1, duration_: 7020000, forced_: 0, group_: , id_: 22, impaired_: 0, language_: qad, mimeType_: audio/mp4, name_: , original_: 0, startNumber_: 487050, startPTS_: 140270400000, type_: 2, #segment_durations_: 13, #representations_: 1 - SegTpl: duration: 0, initialization: $RepresentationID$/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, media: $RepresentationID$/segment_$Number$.m4s, presentationTimeOffset: 927332040, timescale:48000 - Segment durations:, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000, 288000 - Rep: aspect_: 0, bandwidth_ : 96000, channelCount_ : 2, codecs_ : mp4a.40.2, codec_private_data_ : , containerType_ : 2, duration_ : 7020000, flags_ : 14, fpsRate_ : 0, fpsScale_ : 1, hdcpVersion_ : 0, height_ : 0, id : audio-fre-audiodesc-96000, indexRangeMax_ : 0, indexRangeMin_ : 0, nalLengthSize_ : 0, pssh_set_ : 2, ptsOffset_ : 0, samplingRate_ : 48000, source_url_ : , startNumber_ : 487050, timescale_ : 48000, timescale_ext_ : 1000, timescale_int_ : 48, url_ : audio-fre-audiodesc-96000/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, width_ : 0 - SegTpl: duration: 288000, initialization: audio-fre-audiodesc-96000/init.mp4?id=6abdc8cb40bd1bbb600ae08523354d9d, media: audio-fre-audiodesc-96000/segment_$Number$.m4s, presentationTimeOffset: 927332040, timescale:48000 - Init: pssh_set_: 0, range_begin_: 0x0, range_end_: 0xffffffffffffffff, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8c47200, range_end_: 0x76e8a, startPTS_: 0, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8c8d700, range_end_: 0x76e8b, startPTS_: 288000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8cd3c00, range_end_: 0x76e8c, startPTS_: 576000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8d1a100, range_end_: 0x76e8d, startPTS_: 864000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8d60600, range_end_: 0x76e8e, startPTS_: 1152000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8da6b00, range_end_: 0x76e8f, startPTS_: 1440000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8ded000, range_end_: 0x76e90, startPTS_: 1728000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8e33500, range_end_: 0x76e91, startPTS_: 2016000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8e79a00, range_end_: 0x76e92, startPTS_: 2304000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8ebff00, range_end_: 0x76e93, startPTS_: 2592000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f06400, range_end_: 0x76e94, startPTS_: 2880000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f4c900, range_end_: 0x76e95, startPTS_: 3168000, url:NULL - Seg: pssh_set_: 0, range_begin_: 0x20a8f92e00, range_end_: 0x76e96, startPTS_: 3456000, url:NULL diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template_30min.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template_30min.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template_30min.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template_30min.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - - Media Presentation Description from DASH-IF live simulator - - http://livesim.dashif.org/livesim/sts_1591654591/sid_8737f209/start_1800/testpic_2s/ - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template_30min.strm kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template_30min.strm --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template_30min.strm 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template_30min.strm 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#KODIPROP:inputstreamaddon=inputstream.adaptive -#KODIPROP:inputstream=inputstream.adaptive -#KODIPROP:inputstream.adaptive.manifest_type=mpd -#KODIPROP:mimetype=application/dash+xml -http://livesim.dashif.org/livesim/start_1800/testpic_2s/Manifest.mpd \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - - Media Presentation Description from DASH-IF live simulator - - http://livesim.dashif.org/livesim/sts_1591642463/sid_049301ca/testpic_2s/ - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template.strm kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template.strm --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_Number-template.strm 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_Number-template.strm 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#KODIPROP:inputstreamaddon=inputstream.adaptive -#KODIPROP:inputstream=inputstream.adaptive -#KODIPROP:inputstream.adaptive.manifest_type=mpd -#KODIPROP:mimetype=application/dash+xml -http://livesim.dashif.org/livesim/testpic_2s/Manifest.mpd \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_SegmentTimeline.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_SegmentTimeline.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_SegmentTimeline.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_SegmentTimeline.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ - - - - Media Presentation Description from DASH-IF live simulator - - http://livesim.dashif.org/livesim/sts_1591653816/sid_3801e658/segtimeline_1/testpic_2s/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_SegmentTimeline.strm kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_SegmentTimeline.strm --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Basic_SegmentTimeline.strm 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Basic_SegmentTimeline.strm 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#KODIPROP:inputstreamaddon=inputstream.adaptive -#KODIPROP:inputstream=inputstream.adaptive -#KODIPROP:inputstream.adaptive.manifest_type=mpd -#KODIPROP:mimetype=application/dash+xml -http://livesim.dashif.org/livesim/segtimeline_1/testpic_2s/Manifest.mpd \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/DisneyNow.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/DisneyNow.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/DisneyNow.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/DisneyNow.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,411 +0,0 @@ - - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZGQ4N2Q0MzRmMWEyNDE1OTkxMzcwZmU1MzgyZmUzMjUaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIATgBOAFMASAAzAGEATAB4AFcAVQBHAFIATgB3AC8AbABPAEMALwBqAEoAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBOAE4AUwBIADMAYQBMAHgAVwBVAEcAUgBOAHcALwBsAE8AQwAvAGoASgBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgMDdhZjQyN2I4ODczNDliN2FhZWM3M2NmMjY0M2IzYzkaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAZQAwAEsAdgBCADMATwBJAHQAMABtAHEANwBIAFAAUABKAGsATwB6AHkAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBlADAASwB2AEIAMwBPAEkAdAAwAG0AcQA3AEgAUABQAEoAawBPAHoAeQBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZjZlMzdhNWY0OTY3NDllZGE1NTM0MmI3NWFhNmZiZTAaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAWAAzAHIAagA5AG0AZABKADcAVQBtAGwAVQAwAEsAMwBXAHEAYgA3ADQAQQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBYADMAcgBqADkAbQBkAEoANwBVAG0AbABVADAASwAzAFcAcQBiADcANABBAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZGQ4N2Q0MzRmMWEyNDE1OTkxMzcwZmU1MzgyZmUzMjUaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIATgBOAFMASAAzAGEATAB4AFcAVQBHAFIATgB3AC8AbABPAEMALwBqAEoAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBOAE4AUwBIADMAYQBMAHgAVwBVAEcAUgBOAHcALwBsAE8AQwAvAGoASgBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgMDdhZjQyN2I4ODczNDliN2FhZWM3M2NmMjY0M2IzYzkaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAZQAwAEsAdgBCADMATwBJAHQAMABtAHEANwBIAFAAUABKAGsATwB6AHkAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBlADAASwB2AEIAMwBPAEkAdAAwAG0AcQA3AEgAUABQAEoAawBPAHoAeQBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZjZlMzdhNWY0OTY3NDllZGE1NTM0MmI3NWFhNmZiZTAaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAWAAzAHIAagA5AG0AZABKADcAVQBtAGwAVQAwAEsAMwBXAHEAYgA3ADQAQQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBYADMAcgBqADkAbQBkAEoANwBVAG0AbABVADAASwAzAFcAcQBiADcANABBAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZGQ4N2Q0MzRmMWEyNDE1OTkxMzcwZmU1MzgyZmUzMjUaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIATgBOAFMASAAzAGEATAB4AFcAVQBHAFIATgB3AC8AbABPAEMALwBqAEoAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBOAE4AUwBIADMAYQBMAHgAVwBVAEcAUgBOAHcALwBsAE8AQwAvAGoASgBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgMDdhZjQyN2I4ODczNDliN2FhZWM3M2NmMjY0M2IzYzkaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAZQAwAEsAdgBCADMATwBJAHQAMABtAHEANwBIAFAAUABKAGsATwB6AHkAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBlADAASwB2AEIAMwBPAEkAdAAwAG0AcQA3AEgAUABQAEoAawBPAHoAeQBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZjZlMzdhNWY0OTY3NDllZGE1NTM0MmI3NWFhNmZiZTAaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAWAAzAHIAagA5AG0AZABKADcAVQBtAGwAVQAwAEsAMwBXAHEAYgA3ADQAQQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBYADMAcgBqADkAbQBkAEoANwBVAG0AbABVADAASwAzAFcAcQBiADcANABBAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZGQ4N2Q0MzRmMWEyNDE1OTkxMzcwZmU1MzgyZmUzMjUaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIATgBOAFMASAAzAGEATAB4AFcAVQBHAFIATgB3AC8AbABPAEMALwBqAEoAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBOAE4AUwBIADMAYQBMAHgAVwBVAEcAUgBOAHcALwBsAE8AQwAvAGoASgBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgMDdhZjQyN2I4ODczNDliN2FhZWM3M2NmMjY0M2IzYzkaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAZQAwAEsAdgBCADMATwBJAHQAMABtAHEANwBIAFAAUABKAGsATwB6AHkAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBlADAASwB2AEIAMwBPAEkAdAAwAG0AcQA3AEgAUABQAEoAawBPAHoAeQBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - AAAAk3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHMIARIgZjZlMzdhNWY0OTY3NDllZGE1NTM0MmI3NWFhNmZiZTAaBHZkbXMiRzhlMzhmODkyOTViYzQ5N2ZhYmUxMGQyNzJmMDg4OGE1X2F1c2UyXzEwMjA2ZjRjN2ZhNDQ3ODI4ZTIyNDhlNGE5ZDkwMDJh - - - - - AAAEinBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABGo8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAyAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBUAFIAIgAgAFYAQQBMAFUARQA9ACIAWAAzAHIAagA5AG0AZABKADcAVQBtAGwAVQAwAEsAMwBXAHEAYgA3ADQAQQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AYwBvAG4AdABlAG4AdAAtAGEAdQBzAGUAMgAuAHUAcABsAHkAbgBrAC4AYwBvAG0ALwBwAHIAPwBiAD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwB2AD0AOABlADMAOABmADgAOQAyADkANQBiAGMANAA5ADcAZgBhAGIAZQAxADAAZAAyADcAMgBmADAAOAA4ADgAYQA1ACYAYQBtAHAAOwBwAGIAcwA9ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMATwBOAFQARQBOAFQAXwBJAEQAPgA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAPAAvAEMATwBOAFQARQBOAFQAXwBJAEQAPgA8AEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4AYQB1AHMAZQAyADwALwBDAE8ATgBUAEUATgBUAF8AWgBPAE4ARQA+ADwAUABCAFMAPgAxADAAMgAwADYAZgA0AGMANwBmAGEANAA0ADcAOAAyADgAZQAyADIANAA4AGUANABhADkAZAA5ADAAMAAyAGEAPAAvAFAAQgBTAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== - dAQAAAEAAQBqBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADIALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAFQAUgAiACAAVgBBAEwAVQBFAD0AIgBYADMAcgBqADkAbQBkAEoANwBVAG0AbABVADAASwAzAFcAcQBiADcANABBAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBjAG8AbgB0AGUAbgB0AC0AYQB1AHMAZQAyAC4AdQBwAGwAeQBuAGsALgBjAG8AbQAvAHAAcgA/AGIAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHYAPQA4AGUAMwA4AGYAOAA5ADIAOQA1AGIAYwA0ADkANwBmAGEAYgBlADEAMABkADIANwAyAGYAMAA4ADgAOABhADUAJgBhAG0AcAA7AHAAYgBzAD0AMQAwADIAMAA2AGYANABjADcAZgBhADQANAA3ADgAMgA4AGUAMgAyADQAOABlADQAYQA5AGQAOQAwADAAMgBhADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBPAE4AVABFAE4AVABfAEkARAA+ADgAZQAzADgAZgA4ADkAMgA5ADUAYgBjADQAOQA3AGYAYQBiAGUAMQAwAGQAMgA3ADIAZgAwADgAOAA4AGEANQA8AC8AQwBPAE4AVABFAE4AVABfAEkARAA+ADwAQwBPAE4AVABFAE4AVABfAFoATwBOAEUAPgBhAHUAcwBlADIAPAAvAEMATwBOAFQARQBOAFQAXwBaAE8ATgBFAD4APABQAEIAUwA+ADEAMAAyADAANgBmADQAYwA3AGYAYQA0ADQANwA4ADIAOABlADIAMgA0ADgAZQA0AGEAOQBkADkAMAAwADIAYQA8AC8AUABCAFMAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - - - https://x-disney-datg-stgec.uplynk.com/ausw/slices/8e3/21885d134fa441488df8e1d7acee8c66/8e38f89295bc497fabe10d272f0888a5/ - - - - - \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Periods_1.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Periods_1.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Periods_1.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Periods_1.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ - - - - Media Presentation Description from DASH-IF live simulator - - https://livesim.dashif.org/livesim/sts_1591792401/sid_61fca6ec/periods_1/testpic_2s/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Periods_1.strm kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Periods_1.strm --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Periods_1.strm 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Periods_1.strm 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#KODIPROP:inputstreamaddon=inputstream.adaptive -#KODIPROP:inputstream=inputstream.adaptive -#KODIPROP:inputstream.adaptive.manifest_type=mpd -#KODIPROP:mimetype=application/dash+xml -https://livesim.dashif.org/livesim/periods_1/testpic_2s/Manifest.mpd \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_1_explicit.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_1_explicit.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_1_explicit.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_1_explicit.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - - Media Presentation Description from DASH-IF live simulator - - http://livesim.dashif.org/livesim/sts_1591687056/sid_4e83ea2b/snr_1/testpic_2s/ - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_1_explicit.strm kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_1_explicit.strm --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_1_explicit.strm 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_1_explicit.strm 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#KODIPROP:inputstreamaddon=inputstream.adaptive -#KODIPROP:inputstream=inputstream.adaptive -#KODIPROP:inputstream.adaptive.manifest_type=mpd -#KODIPROP:mimetype=application/dash+xml -http://livesim.dashif.org/livesim/snr_1/testpic_2s/Manifest.mpd \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_200.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_200.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_200.mpd 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_200.mpd 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - - Media Presentation Description from DASH-IF live simulator - - http://livesim.dashif.org/livesim/sts_1591655480/sid_44bedc8d/snr_200/testpic_2s/ - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_200.strm kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_200.strm --- kodi-inputstream-adaptive-2.6.7+ds1/src/parser/testfiles/Startnumber_200.strm 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/parser/testfiles/Startnumber_200.strm 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#KODIPROP:inputstreamaddon=inputstream.adaptive -#KODIPROP:inputstream=inputstream.adaptive -#KODIPROP:inputstream.adaptive.manifest_type=mpd -#KODIPROP:mimetype=application/dash+xml -http://livesim.dashif.org/livesim/snr_200/testpic_2s/Manifest.mpd \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/CMakeLists.txt kodi-inputstream-adaptive-2.6.14+ds1/src/test/CMakeLists.txt --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/CMakeLists.txt 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,22 @@ +set(BINARY Test${CMAKE_PROJECT_NAME}) + +find_package( Threads ) + +add_executable(${BINARY} + TestMain.cpp + TestDASHTree.cpp + TestHLSTree.cpp + TestHelper.cpp + ../parser/DASHTree.cpp + ../parser/HLSTree.cpp + ../parser/PRProtectionParser.cpp + ../common/AdaptiveStream.cpp + ../common/AdaptiveTree.cpp + ../helpers.cpp + ../oscompat.cpp + ) + +target_link_libraries(${BINARY} PRIVATE ${EXPAT_LIBRARIES} ${GTEST_LIBRARIES} Threads::Threads ${CMAKE_DL_LIBS}) + +set(TEST_DATA_DIR "${CMAKE_SOURCE_DIR}/src/test/manifests") +add_test(NAME manifest_tests COMMAND ${BINARY} "${TEST_DATA_DIR}") diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/1a2v_master.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/1a2v_master.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/1a2v_master.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/1a2v_master.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_aud_low",NAME="audio_0",DEFAULT=YES,URI="stream_0/out.m3u8" +#EXT-X-STREAM-INF:BANDWIDTH=1170400,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2",AUDIO="group_aud_low" +stream_1/out.m3u8 + +#EXT-X-STREAM-INF:BANDWIDTH=774400,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2",AUDIO="group_aud_low" +stream_2/out.m3u8 diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/1v_master.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/1v_master.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/1v_master.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/1v_master.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,4 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2119734,CODECS="avc1.77.31, mp4a.40.2",RESOLUTION=960x540 +ts_aes_uriwithslash_chunklist.m3u8 diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/fmp4_noenc_a_stream_0.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/fmp4_noenc_a_stream_0.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/fmp4_noenc_a_stream_0.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/fmp4_noenc_a_stream_0.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,179 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:2 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-MAP:URI="init_0.m4s" +#EXTINF:2.005333, +seg_000.m4s +#EXTINF:2.005333, +seg_001.m4s +#EXTINF:2.005333, +seg_002.m4s +#EXTINF:1.984000, +seg_003.m4s +#EXTINF:2.005333, +seg_004.m4s +#EXTINF:2.005333, +seg_005.m4s +#EXTINF:2.005333, +seg_006.m4s +#EXTINF:1.984000, +seg_007.m4s +#EXTINF:2.005333, +seg_008.m4s +#EXTINF:2.005333, +seg_009.m4s +#EXTINF:2.005333, +seg_010.m4s +#EXTINF:1.984000, +seg_011.m4s +#EXTINF:2.005333, +seg_012.m4s +#EXTINF:2.005333, +seg_013.m4s +#EXTINF:2.005333, +seg_014.m4s +#EXTINF:1.984000, +seg_015.m4s +#EXTINF:2.005333, +seg_016.m4s +#EXTINF:2.005333, +seg_017.m4s +#EXTINF:2.005333, +seg_018.m4s +#EXTINF:1.984000, +seg_019.m4s +#EXTINF:2.005333, +seg_020.m4s +#EXTINF:2.005333, +seg_021.m4s +#EXTINF:2.005333, +seg_022.m4s +#EXTINF:1.984000, +seg_023.m4s +#EXTINF:2.005333, +seg_024.m4s +#EXTINF:2.005333, +seg_025.m4s +#EXTINF:2.005333, +seg_026.m4s +#EXTINF:1.984000, +seg_027.m4s +#EXTINF:2.005333, +seg_028.m4s +#EXTINF:2.005333, +seg_029.m4s +#EXTINF:2.005333, +seg_030.m4s +#EXTINF:1.984000, +seg_031.m4s +#EXTINF:2.005333, +seg_032.m4s +#EXTINF:2.005333, +seg_033.m4s +#EXTINF:2.005333, +seg_034.m4s +#EXTINF:1.984000, +seg_035.m4s +#EXTINF:2.005333, +seg_036.m4s +#EXTINF:2.005333, +seg_037.m4s +#EXTINF:2.005333, +seg_038.m4s +#EXTINF:1.984000, +seg_039.m4s +#EXTINF:2.005333, +seg_040.m4s +#EXTINF:2.005333, +seg_041.m4s +#EXTINF:2.005333, +seg_042.m4s +#EXTINF:1.984000, +seg_043.m4s +#EXTINF:2.005333, +seg_044.m4s +#EXTINF:2.005333, +seg_045.m4s +#EXTINF:2.005333, +seg_046.m4s +#EXTINF:1.984000, +seg_047.m4s +#EXTINF:2.005333, +seg_048.m4s +#EXTINF:2.005333, +seg_049.m4s +#EXTINF:2.005333, +seg_050.m4s +#EXTINF:1.984000, +seg_051.m4s +#EXTINF:2.005333, +seg_052.m4s +#EXTINF:2.005333, +seg_053.m4s +#EXTINF:2.005333, +seg_054.m4s +#EXTINF:1.984000, +seg_055.m4s +#EXTINF:2.005333, +seg_056.m4s +#EXTINF:2.005333, +seg_057.m4s +#EXTINF:2.005333, +seg_058.m4s +#EXTINF:1.984000, +seg_059.m4s +#EXTINF:2.005333, +seg_060.m4s +#EXTINF:2.005333, +seg_061.m4s +#EXTINF:2.005333, +seg_062.m4s +#EXTINF:1.984000, +seg_063.m4s +#EXTINF:2.005333, +seg_064.m4s +#EXTINF:2.005333, +seg_065.m4s +#EXTINF:2.005333, +seg_066.m4s +#EXTINF:1.984000, +seg_067.m4s +#EXTINF:2.005333, +seg_068.m4s +#EXTINF:2.005333, +seg_069.m4s +#EXTINF:2.005333, +seg_070.m4s +#EXTINF:1.984000, +seg_071.m4s +#EXTINF:2.005333, +seg_072.m4s +#EXTINF:2.005333, +seg_073.m4s +#EXTINF:2.005333, +seg_074.m4s +#EXTINF:1.984000, +seg_075.m4s +#EXTINF:2.005333, +seg_076.m4s +#EXTINF:2.005333, +seg_077.m4s +#EXTINF:2.005333, +seg_078.m4s +#EXTINF:1.984000, +seg_079.m4s +#EXTINF:2.005333, +seg_080.m4s +#EXTINF:2.005333, +seg_081.m4s +#EXTINF:2.005333, +seg_082.m4s +#EXTINF:1.984000, +seg_083.m4s +#EXTINF:2.005333, +seg_084.m4s +#EXTINF:0.874667, +seg_085.m4s +#EXT-X-ENDLIST diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_1.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_1.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_1.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_1.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,95 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:10 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-MAP:URI="init_1.m4s" +#EXTINF:8.400000, +seg_000.m4s +#EXTINF:4.560000, +seg_001.m4s +#EXTINF:3.120000, +seg_002.m4s +#EXTINF:5.640000, +seg_003.m4s +#EXTINF:1.880000, +seg_004.m4s +#EXTINF:2.160000, +seg_005.m4s +#EXTINF:2.080000, +seg_006.m4s +#EXTINF:4.400000, +seg_007.m4s +#EXTINF:9.800000, +seg_008.m4s +#EXTINF:1.680000, +seg_009.m4s +#EXTINF:8.320000, +seg_010.m4s +#EXTINF:4.160000, +seg_011.m4s +#EXTINF:8.760000, +seg_012.m4s +#EXTINF:5.280000, +seg_013.m4s +#EXTINF:2.920000, +seg_014.m4s +#EXTINF:2.600000, +seg_015.m4s +#EXTINF:3.400000, +seg_016.m4s +#EXTINF:10.000000, +seg_017.m4s +#EXTINF:9.520000, +seg_018.m4s +#EXTINF:2.720000, +seg_019.m4s +#EXTINF:6.920000, +seg_020.m4s +#EXTINF:4.800000, +seg_021.m4s +#EXTINF:1.480000, +seg_022.m4s +#EXTINF:1.000000, +seg_023.m4s +#EXTINF:2.920000, +seg_024.m4s +#EXTINF:1.800000, +seg_025.m4s +#EXTINF:1.520000, +seg_026.m4s +#EXTINF:6.600000, +seg_027.m4s +#EXTINF:1.600000, +seg_028.m4s +#EXTINF:2.760000, +seg_029.m4s +#EXTINF:5.440000, +seg_030.m4s +#EXTINF:3.400000, +seg_031.m4s +#EXTINF:2.840000, +seg_032.m4s +#EXTINF:2.480000, +seg_033.m4s +#EXTINF:1.040000, +seg_034.m4s +#EXTINF:1.200000, +seg_035.m4s +#EXTINF:2.920000, +seg_036.m4s +#EXTINF:4.360000, +seg_037.m4s +#EXTINF:1.720000, +seg_038.m4s +#EXTINF:1.560000, +seg_039.m4s +#EXTINF:1.400000, +seg_040.m4s +#EXTINF:2.760000, +seg_041.m4s +#EXTINF:2.160000, +seg_042.m4s +#EXTINF:4.760000, +seg_043.m4s +#EXT-X-ENDLIST diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_2.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_2.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_2.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/fmp4_noenc_v_stream_2.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,95 @@ +#EXTM3U +#EXT-X-VERSION:7 +#EXT-X-TARGETDURATION:10 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-MAP:URI="init_2.m4s" +#EXTINF:8.400000, +seg_000.m4s +#EXTINF:4.560000, +seg_001.m4s +#EXTINF:3.120000, +seg_002.m4s +#EXTINF:5.640000, +seg_003.m4s +#EXTINF:1.880000, +seg_004.m4s +#EXTINF:2.160000, +seg_005.m4s +#EXTINF:2.080000, +seg_006.m4s +#EXTINF:4.400000, +seg_007.m4s +#EXTINF:9.800000, +seg_008.m4s +#EXTINF:1.680000, +seg_009.m4s +#EXTINF:8.320000, +seg_010.m4s +#EXTINF:4.160000, +seg_011.m4s +#EXTINF:8.760000, +seg_012.m4s +#EXTINF:5.280000, +seg_013.m4s +#EXTINF:2.920000, +seg_014.m4s +#EXTINF:2.600000, +seg_015.m4s +#EXTINF:3.400000, +seg_016.m4s +#EXTINF:10.000000, +seg_017.m4s +#EXTINF:9.520000, +seg_018.m4s +#EXTINF:2.720000, +seg_019.m4s +#EXTINF:6.920000, +seg_020.m4s +#EXTINF:4.800000, +seg_021.m4s +#EXTINF:1.480000, +seg_022.m4s +#EXTINF:1.000000, +seg_023.m4s +#EXTINF:2.920000, +seg_024.m4s +#EXTINF:1.800000, +seg_025.m4s +#EXTINF:1.520000, +seg_026.m4s +#EXTINF:6.600000, +seg_027.m4s +#EXTINF:1.600000, +seg_028.m4s +#EXTINF:2.760000, +seg_029.m4s +#EXTINF:5.440000, +seg_030.m4s +#EXTINF:3.400000, +seg_031.m4s +#EXTINF:2.840000, +seg_032.m4s +#EXTINF:2.480000, +seg_033.m4s +#EXTINF:1.040000, +seg_034.m4s +#EXTINF:1.200000, +seg_035.m4s +#EXTINF:2.920000, +seg_036.m4s +#EXTINF:4.360000, +seg_037.m4s +#EXTINF:1.720000, +seg_038.m4s +#EXTINF:1.560000, +seg_039.m4s +#EXTINF:1.400000, +seg_040.m4s +#EXTINF:2.760000, +seg_041.m4s +#EXTINF:2.160000, +seg_042.m4s +#EXTINF:4.760000, +seg_043.m4s +#EXT-X-ENDLIST diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/redirect_absolute_1v_master.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/redirect_absolute_1v_master.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/redirect_absolute_1v_master.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/redirect_absolute_1v_master.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-INDEPENDENT-SEGMENTS +#EXT-X-STREAM-INF:BANDWIDTH=582476,AVERAGE-BANDWIDTH=581432,RESOLUTION=480x270,FRAME-RATE=25.000,CODECS="avc1.42C015,mp4a.40.2" +https://bit.ly/abcd diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/ts_aes_keyuriabsolute_stream_0.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/ts_aes_keyuriabsolute_stream_0.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/ts_aes_keyuriabsolute_stream_0.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/ts_aes_keyuriabsolute_stream_0.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-TARGETDURATION:12 +#EXT-X-MEDIA-SEQUENCE:80 +#EXT-X-KEY:METHOD=AES-128,URI="https://foo.bar/hls/key/key.php?stream=stream_name" +#EXTINF:9.966, +media-abc_80.ts +#EXTINF:9.967, +media-abc_81.ts +#EXTINF:9.567, +media-abc_82.ts +#EXTINF:10.8, +media-abc_83.ts +#EXTINF:9.033, +media-abc_84.ts +#EXTINF:10.0, +media-abc_85.ts diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/ts_aes_keyurirelative_stream_0.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/ts_aes_keyurirelative_stream_0.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/ts_aes_keyurirelative_stream_0.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/ts_aes_keyurirelative_stream_0.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-TARGETDURATION:12 +#EXT-X-MEDIA-SEQUENCE:80 +#EXT-X-KEY:METHOD=AES-128,URI="../../key/key.php?stream=stream_name" +#EXTINF:9.966, +media-abc_80.ts +#EXTINF:9.967, +media-abc_81.ts +#EXTINF:9.567, +media-abc_82.ts +#EXTINF:10.8, +media-abc_83.ts +#EXTINF:9.033, +media-abc_84.ts +#EXTINF:10.0, +media-abc_85.ts diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/ts_aes_keyuriwithslash_stream_0.m3u8 kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/ts_aes_keyuriwithslash_stream_0.m3u8 --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/hls/ts_aes_keyuriwithslash_stream_0.m3u8 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/hls/ts_aes_keyuriwithslash_stream_0.m3u8 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,18 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-TARGETDURATION:12 +#EXT-X-MEDIA-SEQUENCE:80 +#EXT-X-KEY:METHOD=AES-128,URI="/hls/key/key.php?stream=stream_name" +#EXTINF:9.966, +media-abc_80.ts +#EXTINF:9.967, +media-abc_81.ts +#EXTINF:9.567, +media-abc_82.ts +#EXTINF:10.8, +media-abc_83.ts +#EXTINF:9.033, +media-abc_84.ts +#EXTINF:10.0, +media-abc_85.ts diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/fps_scale_adaptset.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/fps_scale_adaptset.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/fps_scale_adaptset.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/fps_scale_adaptset.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,61 @@ + + + + + + video/23.98p/r0/vid01.mp4 + + + + + + + + video/23.98p/r0/vid02.mp4 + + + + + + + + video/23.98p/r0/vid03.mp4 + + + + + + + + video/23.98p/r0/vid04.mp4 + + + + + + + + video/23.98p/r0/vid05.mp4 + + + + + + + + video/23.98p/r0/vid05.mp4 + + + + + + + + video/23.98p/r0/vid05.mp4 + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/placeholders.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/placeholders.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/placeholders.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/placeholders.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/pssh_default_kid.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/pssh_default_kid.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/pssh_default_kid.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/pssh_default_kid.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + + + v/v30_cenc.mp4 + + + + + + + ABCDEFGH + + + + + + v/v31_cenc.mp4 + + + + + + + HGFEDCBA + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segmentbase.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segmentbase.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segmentbase.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segmentbase.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,24 @@ + + + + + + audio/program/en-US/2.0/r0/aac-128k.mp4 + + + + + + + + + + video/23.98p/r0/vid10.mp4 + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtimeline_live_ast.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtimeline_live_ast.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtimeline_live_ast.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtimeline_live_ast.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== + + + + + + AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== + + + + + + AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== + + + + + + AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB4AHMAZABMAGsAeQBtAGcAVwB6ADIAZQBKAGgAcAB6AEoASABkADEAQQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBUAGwALwBUAEUAQgAvAFcAZQBRAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AeABzAGQATABrAHkAbQBnAFcAegAyAGUASgBoAHAAegBKAEgAZAAxAEEAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AEYAVABsAC8AVABFAEIALwBXAGUAUQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQk0vHxqApPVueJhpzJHd1AxoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== + + + + + + + AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBlADAAYgBaAGsAWgBYAFgAaQB6AEcAZwBmAEUAaABuAC8AMABPAEIANQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AUABrADkAawB3AFMAcgBEAEIAcgBBAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQAwAGIAWgBrAFoAWABYAGkAegBHAGcAZgBFAGgAbgAvADAATwBCADUAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AFAAawA5AGsAdwBTAHIARABCAHIAQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQkdlGe9eVMYugfEhn/0OB5xoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== + + + + + + + + + + + + + + + AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBlADAAYgBaAGsAWgBYAFgAaQB6AEcAZwBmAEUAaABuAC8AMABPAEIANQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AUABrADkAawB3AFMAcgBEAEIAcgBBAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQAwAGIAWgBrAFoAWABYAGkAegBHAGcAZgBFAGgAbgAvADAATwBCADUAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AFAAawA5AGsAdwBTAHIARABCAHIAQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQkdlGe9eVMYugfEhn/0OB5xoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== + + + + + + + + + + + + + + + AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBlADAAYgBaAGsAWgBYAFgAaQB6AEcAZwBmAEUAaABuAC8AMABPAEIANQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AUABrADkAawB3AFMAcgBEAEIAcgBBAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQAwAGIAWgBrAFoAWABYAGkAegBHAGcAZgBFAGgAbgAvADAATwBCADUAdwA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AFAAawA5AGsAdwBTAHIARABCAHIAQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + AAAAbXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAE0IARIQkdlGe9eVMYugfEhn/0OB5xoIY2FzdGxhYnMiJGV5SmhjM05sZEVsa0lqb2laR0Z6YUdObGJtTmZUVFlpZlE9PTIHZGVmYXVsdA== + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtimeline_live_pd.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtimeline_live_pd.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtimeline_live_pd.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtimeline_live_pd.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtimeline_vod.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtimeline_vod.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtimeline_vod.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtimeline_vod.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_baseurlinmpd.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_baseurlinmpd.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_baseurlinmpd.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_baseurlinmpd.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,18 @@ + + + https://foo.bar/mpd/ + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_baseurl_noslashs.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_baseurl_noslashs.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_baseurl_noslashs.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_baseurl_noslashs.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,23 @@ + + + + https://foo.bar/guid.ism/dash + + + + + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_noslash_baseurl_slash.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_noslash_baseurl_slash.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_noslash_baseurl_slash.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_noslash_baseurl_slash.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,23 @@ + + + + https://foo.bar/guid.ism/dash/ + + + + + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_old_publish_time.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_old_publish_time.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_old_publish_time.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_old_publish_time.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,47 @@ + + + https://d15umi5iaezxgx.cloudfront.net/OUT/DASH/ + + + + + AAAEMHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABBAQBAAAAQABAAYEPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABhADcALgBwAHIAbwBkAC4AYwBvAG4AYQB4AC4AYwBsAG8AdQBkAC8AYwB4AHAAbABhAHkAcgBlAGEAZAB5AC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABMAFUASQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAYQA3AC4AcAByAG8AZAAuAGMAbwBuAGEAeAAuAGMAbABvAHUAZAAvAGMAeABwAGwAYQB5AHIAZQBhAGQAeQAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAFUASQBfAFUAUgBMAD4APABLAEkARAA+AEkAWABNAEYAMgB5AEwASgBKAFUAeQBuAHoATgBkAGQAawBSADMAUgAvAEEAPQA9ADwALwBLAEkARAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBvAG4AdABlAG4AdABSAGUAZgA+ADgAZgA5ADUAZAA0ADAAYQAtADcANwBmAGIALQA0ADYAMAAwAC0AOABmADUAOAAtADAAOABmAGUAOAA4ADMANwA2AGEAMwA5ADwALwBDAG8AbgB0AGUAbgB0AFIAZQBmAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEMASABFAEMASwBTAFUATQA+AFoAegBMAGYAUQBFAFgAOABTADQAOAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + EAQAAAEAAQAGBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAYQA3AC4AcAByAG8AZAAuAGMAbwBuAGEAeAAuAGMAbABvAHUAZAAvAGMAeABwAGwAYQB5AHIAZQBhAGQAeQAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGEANwAuAHAAcgBvAGQALgBjAG8AbgBhAHgALgBjAGwAbwB1AGQALwBjAHgAcABsAGEAeQByAGUAYQBkAHkALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABVAEkAXwBVAFIATAA+ADwASwBJAEQAPgBJAFgATQBGADIAeQBMAEoASgBVAHkAbgB6AE4AZABkAGsAUgAzAFIALwBBAD0APQA8AC8ASwBJAEQAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMAbwBuAHQAZQBuAHQAUgBlAGYAPgA4AGYAOQA1AGQANAAwAGEALQA3ADcAZgBiAC0ANAA2ADAAMAAtADgAZgA1ADgALQAwADgAZgBlADgAOAAzADcANgBhADMAOQA8AC8AQwBvAG4AdABlAG4AdABSAGUAZgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APABDAEgARQBDAEsAUwBVAE0APgBaAHoATABmAFEARQBYADgAUwA0ADgAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA= + + + + AAAAYXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEEIARIQ2wVzIckiTCWnzNddkR3R/BoFQ29uYXgiJDhmOTVkNDBhLTc3ZmItNDYwMC04ZjU4LTA4ZmU4ODM3NmEzOQ== + + + + + + + + + + + + + + + + + + + AAAEMHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABBAQBAAAAQABAAYEPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABhADcALgBwAHIAbwBkAC4AYwBvAG4AYQB4AC4AYwBsAG8AdQBkAC8AYwB4AHAAbABhAHkAcgBlAGEAZAB5AC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABMAFUASQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAYQA3AC4AcAByAG8AZAAuAGMAbwBuAGEAeAAuAGMAbABvAHUAZAAvAGMAeABwAGwAYQB5AHIAZQBhAGQAeQAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAFUASQBfAFUAUgBMAD4APABLAEkARAA+AEkAWABNAEYAMgB5AEwASgBKAFUAeQBuAHoATgBkAGQAawBSADMAUgAvAEEAPQA9ADwALwBLAEkARAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwAQwBvAG4AdABlAG4AdABSAGUAZgA+ADgAZgA5ADUAZAA0ADAAYQAtADcANwBmAGIALQA0ADYAMAAwAC0AOABmADUAOAAtADAAOABmAGUAOAA4ADMANwA2AGEAMwA5ADwALwBDAG8AbgB0AGUAbgB0AFIAZQBmAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEMASABFAEMASwBTAFUATQA+AFoAegBMAGYAUQBFAFgAOABTADQAOAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + EAQAAAEAAQAGBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAYQA3AC4AcAByAG8AZAAuAGMAbwBuAGEAeAAuAGMAbABvAHUAZAAvAGMAeABwAGwAYQB5AHIAZQBhAGQAeQAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGEANwAuAHAAcgBvAGQALgBjAG8AbgBhAHgALgBjAGwAbwB1AGQALwBjAHgAcABsAGEAeQByAGUAYQBkAHkALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABVAEkAXwBVAFIATAA+ADwASwBJAEQAPgBJAFgATQBGADIAeQBMAEoASgBVAHkAbgB6AE4AZABkAGsAUgAzAFIALwBBAD0APQA8AC8ASwBJAEQAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AEMAbwBuAHQAZQBuAHQAUgBlAGYAPgA4AGYAOQA1AGQANAAwAGEALQA3ADcAZgBiAC0ANAA2ADAAMAAtADgAZgA1ADgALQAwADgAZgBlADgAOAAzADcANgBhADMAOQA8AC8AQwBvAG4AdABlAG4AdABSAGUAZgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APABDAEgARQBDAEsAUwBVAE0APgBaAHoATABmAFEARQBYADgAUwA0ADgAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA= + + + + AAAAYXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEEIARIQ2wVzIckiTCWnzNddkR3R/BoFQ29uYXgiJDhmOTVkNDBhLTc3ZmItNDYwMC04ZjU4LTA4ZmU4ODM3NmEzOQ== + + + + + + \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_pto.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_pto.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_pto.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_pto.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_noslash.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_noslash.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_noslash.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_noslash.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,23 @@ + + + + https://foo.bar/guid.ism/dash + + + + + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_slash.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_slash.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_slash.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/segtpl_slash_baseurl_slash.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,23 @@ + + + + https://foo.bar/guid.ism/dash/ + + + + + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/subtitles.mpd kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/subtitles.mpd --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/manifests/mpd/subtitles.mpd 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/manifests/mpd/subtitles.mpd 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,92 @@ + + + + + + ED_720_4M_MPEG2_video_init.mp4 + + + + + + + English_track.xml + + + + + + English_track.xml + + + + + + English_track.xml + + + + + + English_track.xml + + + + + + English_track.vtt + + + + + + English_track.vtt + + + + + + English_track.vtt + + + + + + English_track.vtt + + + + + + English_track.vtt + + + + + + + + English_track.xml + + + + + + + + + + + + + + + + + + + + + + + diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestDASHTree.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestDASHTree.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestDASHTree.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestDASHTree.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,406 @@ +#include "TestHelper.h" + +#include + + +class DASHTreeTest : public ::testing::Test +{ +protected: + void SetUp() override + { + tree = new DASHTestTree; + tree->supportedKeySystem_ = "urn:uuid:EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"; + } + + void TearDown() override + { + testHelper::effectiveUrl.clear(); + delete tree; + tree = nullptr; + } + + void OpenTestFile(std::string testfilename, std::string url, std::string manifestHeaders) + { + SetFileName(testHelper::testFile, testfilename); + if (!tree->open(url, manifestHeaders)) + { + printf("open() failed"); + exit(1); + } + } + + DASHTestTree* tree; +}; + +class DASHTreeAdaptiveStreamTest : public DASHTreeTest +{ +protected: + void SetUp() override + { + testHelper::lastDownloadUrl.clear(); + DASHTreeTest::SetUp(); + videoStream = new TestAdaptiveStream(*tree, adaptive::AdaptiveTree::StreamType::VIDEO); + } + + void TearDown() override + { + delete videoStream; + videoStream = nullptr; + DASHTreeTest::TearDown(); + } + + void ReadSegments(TestAdaptiveStream* stream, + uint32_t bytesToRead, + uint32_t reads, + bool clearUrls = true) + { + // Rudimentary simulation of running a stream and consuming segment data. + // Normally AdaptiveStream::read is called from a sample reader for the exact + // amount of bytes needed to supply the next sample until the segment is + // exhausted. Here our segments are a fixed size (16 bytes) and for testing we can + // optimally call to read 1 segment per AdaptiveStream::read + + if (clearUrls) + downloadedUrls.clear(); + + for (unsigned int i = 0; i < reads; i++) + if (stream->read(buf, bytesToRead)) + downloadedUrls.push_back(testHelper::lastDownloadUrl); + else + break; + } + + TestAdaptiveStream* videoStream; + std::vector downloadedUrls; + std::map mediaHeaders; + unsigned char buf[16]; +}; + + +TEST_F(DASHTreeTest, CalculateBaseURL) +{ + // No BaseURL tags + OpenTestFile("mpd/segtpl.mpd", "https://foo.bar/mpd/test.mpd", ""); + EXPECT_EQ(tree->base_url_, "https://foo.bar/mpd/"); +} + +TEST_F(DASHTreeTest, CalculateBaseDomain) +{ + OpenTestFile("mpd/segtpl.mpd", "https://foo.bar/mpd/test.mpd", ""); + + EXPECT_EQ(tree->base_domain_, "https://foo.bar"); +} + +TEST_F(DASHTreeTest, CalculateEffectiveUrlFromRedirect) +{ + // like base_url_, effective_url_ should be path, not including filename + testHelper::effectiveUrl = "https://foo.bar/mpd/stream.mpd"; + OpenTestFile("mpd/segtpl.mpd", "https://bit.ly/abcd", ""); + + EXPECT_EQ(tree->effective_url_, "https://foo.bar/mpd/"); +} + +TEST_F(DASHTreeTest, CalculateBaseURLFromBaseURLTag) +{ + OpenTestFile("mpd/segtpl_baseurlinmpd.mpd", "https://bit.ly/abcd", ""); + EXPECT_EQ(tree->current_period_->base_url_, "https://foo.bar/mpd/"); +} + +TEST_F(DASHTreeTest, CalculateSegTplWithNoSlashs) +{ + // BaseURL inside period with no trailing slash, uses segtpl, media/init doesn't start with slash + OpenTestFile("mpd/segtpl_baseurl_noslashs.mpd", "https://foo.bar/initialpath/test.mpd", ""); + + adaptive::AdaptiveTree::SegmentTemplate segtpl = + tree->periods_[0]->adaptationSets_[0]->representations_[0]->segtpl_; + + EXPECT_EQ(segtpl.initialization, "https://foo.bar/guid.ism/dash/media-video=66000.dash"); + EXPECT_EQ(segtpl.media, "https://foo.bar/guid.ism/dash/media-video=66000-$Number$.m4s"); +} + +TEST_F(DASHTreeTest, CalculateSegTplWithMediaInitSlash) +{ + // BaseURL inside period with no trailing slash, uses segtpl, media/init starts with slash + OpenTestFile("mpd/segtpl_slash_baseurl_noslash.mpd", "https://foo.bar/initialpath/test.mpd", ""); + + adaptive::AdaptiveTree::SegmentTemplate segtpl = + tree->periods_[0]->adaptationSets_[0]->representations_[0]->segtpl_; + + EXPECT_EQ(segtpl.initialization, "https://foo.bar/media-video=66000.dash"); + EXPECT_EQ(segtpl.media, "https://foo.bar/media-video=66000-$Number$.m4s"); +} + +TEST_F(DASHTreeTest, CalculateSegTplWithBaseURLSlash) +{ + // BaseURL inside period with trailing slash, uses segtpl, media/init doesn't start with slash + OpenTestFile("mpd/segtpl_noslash_baseurl_slash.mpd", "https://foo.bar/initialpath/test.mpd", ""); + + adaptive::AdaptiveTree::SegmentTemplate segtpl = + tree->periods_[0]->adaptationSets_[0]->representations_[0]->segtpl_; + + EXPECT_EQ(segtpl.initialization, "https://foo.bar/guid.ism/dash/media-video=66000.dash"); + EXPECT_EQ(segtpl.media, "https://foo.bar/guid.ism/dash/media-video=66000-$Number$.m4s"); +} + +TEST_F(DASHTreeTest, CalculateSegTplWithBaseURLAndMediaInitSlash) +{ + // BaseURL inside period with trailing slash, uses segtpl, media/init starts with slash + OpenTestFile("mpd/segtpl_slash_baseurl_slash.mpd", "https://foo.bar/initialpath/test.mpd", ""); + + adaptive::AdaptiveTree::SegmentTemplate segtpl = + tree->periods_[0]->adaptationSets_[0]->representations_[0]->segtpl_; + + EXPECT_EQ(segtpl.initialization, "https://foo.bar/media-video=66000.dash"); + EXPECT_EQ(segtpl.media, "https://foo.bar/media-video=66000-$Number$.m4s"); +} + +TEST_F(DASHTreeTest, CalculateBaseURLInRepRangeBytes) +{ + // Byteranged indexing + OpenTestFile("mpd/segmentbase.mpd", "https://foo.bar/test.mpd", ""); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[0]->representations_[0]->url_, + "https://foo.bar/video/23.98p/r0/vid10.mp4"); +} + +TEST_F(DASHTreeTest, CalculateCorrectSegmentNumbersFromSegmentTimeline) +{ + // SegmentTimeline, availabilityStartTime is greater than epoch + OpenTestFile("mpd/segtimeline_live_ast.mpd", "", ""); + + adaptive::SPINCACHE segments = + tree->periods_[0]->adaptationSets_[0]->representations_[0]->segments_; + + EXPECT_EQ(segments.size(), 13); + EXPECT_EQ(segments[0]->range_end_, 487050); + EXPECT_EQ(segments[12]->range_end_, 487062); +} + +TEST_F(DASHTreeTest, CalculateCorrectSegmentNumbersFromSegmentTemplateWithPTO) +{ + tree->mock_time = 1617223929L; + + OpenTestFile("mpd/segtpl_pto.mpd", "", ""); + + adaptive::SPINCACHE segments = + tree->periods_[0]->adaptationSets_[0]->representations_[0]->segments_; + + EXPECT_EQ(segments.size(), 451); + EXPECT_EQ(segments[0]->range_end_, 404305525); + EXPECT_EQ(segments[450]->range_end_, 404305975); +} + +TEST_F(DASHTreeTest, CalculateCorrectSegmentNumbersFromSegmentTemplateWithOldPublishTime) +{ + tree->mock_time = 1617229334L; + + OpenTestFile("mpd/segtpl_old_publish_time.mpd", "", ""); + + adaptive::SPINCACHE segments = + tree->periods_[0]->adaptationSets_[0]->representations_[0]->segments_; + + EXPECT_EQ(segments.size(), 31); + EXPECT_EQ(segments[0]->range_end_, 603272); + EXPECT_EQ(segments[30]->range_end_, 603302); +} + +TEST_F(DASHTreeTest, CalculateLiveWithPresentationDuration) +{ + OpenTestFile("mpd/segtimeline_live_pd.mpd", "", ""); + EXPECT_EQ(tree->has_timeshift_buffer_, true); +} + +TEST_F(DASHTreeTest, CalculateStaticWithPresentationDuration) +{ + OpenTestFile("mpd/segtpl_slash_baseurl_slash.mpd", "", ""); + EXPECT_EQ(tree->has_timeshift_buffer_, false); +} + +TEST_F(DASHTreeTest, CalculateCorrectFpsScaleFromAdaptionSet) +{ + OpenTestFile("mpd/fps_scale_adaptset.mpd", "", ""); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[0]->representations_[0]->fpsRate_, 24000); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[0]->representations_[0]->fpsScale_, 1001); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[1]->representations_[0]->fpsRate_, 30); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[1]->representations_[0]->fpsScale_, 1); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[2]->representations_[0]->fpsRate_, 25); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[2]->representations_[0]->fpsScale_, 1); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[3]->representations_[0]->fpsRate_, 25000); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[3]->representations_[0]->fpsScale_, 1000); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[4]->representations_[0]->fpsRate_, 25); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[4]->representations_[0]->fpsScale_, 1); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[5]->representations_[0]->fpsRate_, 30); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[5]->representations_[0]->fpsScale_, 1); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[6]->representations_[0]->fpsRate_, 25000); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[6]->representations_[0]->fpsScale_, 1000); +} + +TEST_F(DASHTreeAdaptiveStreamTest, replacePlaceHolders) +{ + OpenTestFile("mpd/placeholders.mpd", "https://foo.bar/placeholders.mpd", ""); + + videoStream->prepare_stream(tree->current_period_->adaptationSets_[0], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/videosd-400x224/segment_487050.m4s"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/videosd-400x224/segment_487054.m4s"); + + videoStream->prepare_stream(tree->current_period_->adaptationSets_[1], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/videosd-400x224/segment_00487050.m4s"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/videosd-400x224/segment_00487054.m4s"); + + videoStream->prepare_stream(tree->current_period_->adaptationSets_[2], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/videosd-400x224/segment_263007000000.m4s"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/videosd-400x224/segment_263009160000.m4s"); + + videoStream->prepare_stream(tree->current_period_->adaptationSets_[3], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/videosd-400x224/segment_00263007000000"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/videosd-400x224/segment_00263009160000"); + + videoStream->prepare_stream(tree->current_period_->adaptationSets_[4], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/videosd-400x224/segment_487050.m4s?t=263007000000"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/videosd-400x224/segment_487054.m4s?t=263009160000"); + + videoStream->prepare_stream(tree->current_period_->adaptationSets_[5], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/videosd-400x224/segment_00487050.m4s?t=00263007000000"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/videosd-400x224/segment_00487054.m4s?t=00263009160000"); + + videoStream->prepare_stream(tree->current_period_->adaptationSets_[6], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/videosd-400x224/segment.m4s"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/videosd-400x224/segment.m4s"); +} + +TEST_F(DASHTreeTest, updateParameterLiveSegmentTimeline) +{ + OpenTestFile("mpd/segtimeline_live_pd.mpd", "", ""); + EXPECT_EQ(tree->update_parameter_, "full"); +} + +TEST_F(DASHTreeTest, updateParameterProvidedLiveSegmentTimeline) +{ + tree->update_parameter_ = "ABC"; + OpenTestFile("mpd/segtimeline_live_pd.mpd", "", ""); + EXPECT_EQ(tree->update_parameter_, "ABC"); +} + +TEST_F(DASHTreeTest, updateParameterVODSegmentTimeline) +{ + OpenTestFile("mpd/segtimeline_vod.mpd", "", ""); + EXPECT_EQ(tree->update_parameter_, ""); +} + +TEST_F(DASHTreeTest, updateParameterLiveSegmentTemplate) +{ + OpenTestFile("mpd/segtpl_pto.mpd", "", ""); + EXPECT_EQ(tree->update_parameter_, ""); +} + +TEST_F(DASHTreeTest, updateParameterVODSegmentTemplate) +{ + OpenTestFile("mpd/segtpl_baseurl_noslashs.mpd", "", ""); + EXPECT_EQ(tree->update_parameter_, ""); +} + +TEST_F(DASHTreeTest, CalculatePsshDefaultKid) +{ + OpenTestFile("mpd/pssh_default_kid.mpd", "", ""); + + EXPECT_EQ(tree->periods_[0]->psshSets_[1].pssh_, "ABCDEFGH"); + EXPECT_EQ(tree->periods_[0]->psshSets_[1].defaultKID_.length(), 16); + + EXPECT_EQ(tree->periods_[0]->psshSets_[2].pssh_, "HGFEDCBA"); + EXPECT_EQ(tree->periods_[0]->psshSets_[2].defaultKID_.length(), 16); +} + +TEST_F(DASHTreeAdaptiveStreamTest, subtitles) +{ + OpenTestFile("mpd/subtitles.mpd", "https://foo.bar/subtitles.mpd", ""); + + // Required as gtest can not access the hidden attribute directly in EXPECT_EQ + static const uint16_t SUBTITLESTREAM = DASHTestTree::Representation::SUBTITLESTREAM; + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[1]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[1]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[1]->representations_[0]->codecs_, "ttml"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[2]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[2]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[2]->representations_[0]->codecs_, "ttml"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[3]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[3]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[3]->representations_[0]->codecs_, "ttml"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[4]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[4]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[4]->representations_[0]->codecs_, "ttml"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[5]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[5]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[5]->representations_[0]->codecs_, "wvtt"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[6]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[6]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[6]->representations_[0]->codecs_, "wvtt"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[7]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[7]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[7]->representations_[0]->codecs_, "wvtt"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[8]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[8]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[8]->representations_[0]->codecs_, "wvtt"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[9]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[9]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[9]->representations_[0]->codecs_, "my_codec"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[10]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[10]->representations_[0]->flags_, SUBTITLESTREAM); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[10]->representations_[0]->codecs_, "ttml"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[11]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[11]->mimeType_, "application/mp4"); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[11]->representations_[0]->codecs_, "stpp"); + videoStream->prepare_stream(tree->periods_[0]->adaptationSets_[11], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/11/0001.m4s"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/11/0005.m4s"); + + EXPECT_EQ(tree->periods_[0]->adaptationSets_[12]->type_, DASHTestTree::SUBTITLE); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[12]->mimeType_, "application/mp4"); + EXPECT_EQ(tree->periods_[0]->adaptationSets_[12]->representations_[0]->codecs_, "stpp.ttml.im1t"); + videoStream->prepare_stream(tree->periods_[0]->adaptationSets_[12], 0, 0, 0, 0, 0, 0, 0, + mediaHeaders); + videoStream->start_stream(~0, 0, 0, true); + ReadSegments(videoStream, 16, 5); + EXPECT_EQ(downloadedUrls[0], "https://foo.bar/tears-of-steel-multiple-subtitles-12-0.dash"); + EXPECT_EQ(downloadedUrls.back(), "https://foo.bar/tears-of-steel-multiple-subtitles-12-16000.dash"); +} diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestHelper.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestHelper.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestHelper.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestHelper.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,85 @@ +#include "TestHelper.h" + +std::string testHelper::testFile; +std::string testHelper::effectiveUrl; +std::string testHelper::lastDownloadUrl; + +void Log(const LogLevel loglevel, const char* format, ...){} + +std::string GetEnv(const std::string& var) +{ + const char* val = std::getenv(var.c_str()); + if (val == nullptr) + return ""; + else + return val; +} + +void SetFileName(std::string& file, std::string name) +{ + file = GetEnv("DATADIR") + "/" + name; +} + +bool adaptive::AdaptiveTree::download(const char* url, + const std::map& manifestHeaders, + void* opaque, + bool scanEffectiveURL) +{ + FILE* f = fopen(testHelper::testFile.c_str(), "rb"); + if (!f) + return false; + + if (scanEffectiveURL && !testHelper::effectiveUrl.empty()) + SetEffectiveURL(testHelper::effectiveUrl); + + // read the file + static const unsigned int CHUNKSIZE = 16384; + char buf[CHUNKSIZE]; + size_t nbRead; + + while ((nbRead = fread(buf, 1, CHUNKSIZE, f)) > 0 && ~nbRead && write_data(buf, nbRead, opaque)) + ; + + fclose(f); + + SortTree(); + return nbRead == 0; +} + +bool TestAdaptiveStream::download(const char* url, + const std::map& mediaHeaders) +{ + testHelper::lastDownloadUrl = url; + size_t nbRead = ~0UL; + std::stringstream ss("Sixteen bytes!!!"); + + char buf[16]; + size_t nbReadOverall = 0; + while ((nbRead = ss.readsome(buf, 16)) > 0 && ~nbRead && write_data(buf, nbRead)) + nbReadOverall += nbRead; + + if (!nbReadOverall) + { + return false; + } + + return nbRead == 0; +} + +void AESDecrypter::decrypt(const AP4_UI08* aes_key, + const AP4_UI08* aes_iv, + const AP4_UI08* src, + AP4_UI08* dst, + size_t dataSize){} + +std::string AESDecrypter::convertIV(const std::string& input) +{ + std::string result; + return result; +} + +void AESDecrypter::ivFromSequence(uint8_t* buffer, uint64_t sid){} + +bool AESDecrypter::RenewLicense(const std::string& pluginUrl){return false;} + +DASHTestTree::DASHTestTree(){} diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestHelper.h kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestHelper.h --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestHelper.h 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestHelper.h 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,56 @@ +#include "../Iaes_decrypter.h" +#include "../log.h" +#include "../common/AdaptiveStream.h" +#include "../parser/DASHTree.h" +#include "../parser/HLSTree.h" + +std::string GetEnv(const std::string& var); +void SetFileName(std::string& file, const std::string name); +void Log(const LogLevel loglevel, const char* format, ...); + +class testHelper +{ +public: + static std::string testFile; + static std::string effectiveUrl; + static std::string lastDownloadUrl; +}; + +class TestAdaptiveStream : public adaptive::AdaptiveStream +{ +public: + TestAdaptiveStream(adaptive::AdaptiveTree& tree, adaptive::AdaptiveTree::StreamType type) + : adaptive::AdaptiveStream(tree, type){}; + +protected: + virtual bool download(const char* url, + const std::map& mediaHeaders) override; +}; + +class AESDecrypter : public IAESDecrypter +{ +public: + AESDecrypter(const std::string& licenseKey) : m_licenseKey(licenseKey){}; + virtual ~AESDecrypter() = default; + + void decrypt(const AP4_UI08* aes_key, + const AP4_UI08* aes_iv, + const AP4_UI08* src, + AP4_UI08* dst, + size_t dataSize); + std::string convertIV(const std::string& input); + void ivFromSequence(uint8_t* buffer, uint64_t sid); + const std::string& getLicenseKey() const { return m_licenseKey; }; + bool RenewLicense(const std::string& pluginUrl); + +private: + std::string m_licenseKey; +}; + +class DASHTestTree : public adaptive::DASHTree +{ +public: + uint64_t mock_time = 10000000L; + DASHTestTree(); + uint64_t GetNowTime() override { return mock_time; } +}; diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestHLSTree.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestHLSTree.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestHLSTree.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestHLSTree.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,268 @@ +#include "TestHelper.h" +#include + + +class HLSTreeTest : public ::testing::Test +{ +protected: + void SetUp() override + { + tree = new adaptive::HLSTree(new AESDecrypter(std::string())); + tree->supportedKeySystem_ = "urn:uuid:EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"; + } + + void TearDown() override + { + testHelper::effectiveUrl.clear(); + delete tree; + tree = nullptr; + } + + void OpenTestFileMaster(std::string testfilename, std::string url, std::string manifestHeaders) + { + SetFileName(testHelper::testFile, testfilename); + if (!tree->open(url, manifestHeaders)) + { + printf("open() failed"); + exit(1); + } + } + + adaptive::HLSTree::PREPARE_RESULT OpenTestFileVariant(std::string testfilename, + std::string url, + adaptive::AdaptiveTree::Period* per, + adaptive::AdaptiveTree::AdaptationSet* adp, + adaptive::AdaptiveTree::Representation* rep) + { + if (!url.empty()) + rep->source_url_ = url; + SetFileName(testHelper::testFile, testfilename); + return tree->prepareRepresentation(per, adp, rep); + } + adaptive::HLSTree* tree; +}; + + + +TEST_F(HLSTreeTest, CalculateSourceUrl) +{ + OpenTestFileMaster("hls/1a2v_master.m3u8", "https://foo.bar/master.m3u8?param=foo", ""); + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/fmp4_noenc_v_stream_2.m3u8", "https://foo.bar/stream_2/out.m3u8", + tree->current_period_, tree->current_adaptationset_, tree->current_representation_); + + std::string rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + EXPECT_EQ(tree->base_url_, "https://foo.bar/"); + EXPECT_EQ(rep_url, "https://foo.bar/stream_2/out.m3u8"); +} + + +TEST_F(HLSTreeTest, CalculateSourceUrlFromRedirectedMasterRelativeUri) +{ + testHelper::effectiveUrl = "https://foo.bar/master.m3u8"; + + OpenTestFileMaster("hls/1a2v_master.m3u8", "https://baz.qux/master.m3u8", ""); + + std::string rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + + EXPECT_EQ(rep_url, "https://foo.bar/stream_2/out.m3u8"); + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/fmp4_noenc_v_stream_2.m3u8", "https://foo.bar/stream_2/out.m3u8", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + // base_url_ should never change after opening stream regardless of redirects + EXPECT_EQ(tree->base_url_, "https://baz.qux/"); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(rep_url, "https://foo.bar/stream_2/out.m3u8"); +} + + +TEST_F(HLSTreeTest, CalculateSourceUrlFromRedirectedVariantAbsoluteUri) +{ + OpenTestFileMaster("hls/redirect_absolute_1v_master.m3u8", "https://baz.qux/master.m3u8", ""); + + std::string rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + + EXPECT_EQ(rep_url, "https://bit.ly/abcd"); + + testHelper::effectiveUrl = "https://foo.bar/stream_2/out.m3u8"; + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/fmp4_noenc_v_stream_2.m3u8", "https://bit.ly/abcd", + tree->current_period_, tree->current_adaptationset_, tree->current_representation_); + + rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + EXPECT_EQ(tree->base_url_, "https://baz.qux/"); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(rep_url, "https://bit.ly/abcd"); +} + + +TEST_F(HLSTreeTest, CalculateSourceUrlFromRedirectedMasterAndRedirectedVariantAbsoluteUri) +{ + testHelper::effectiveUrl = "https://baz.qux/master.m3u8"; + + OpenTestFileMaster("hls/redirect_absolute_1v_master.m3u8", "https://link.to/1234", ""); + + std::string rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + + EXPECT_EQ(rep_url, "https://bit.ly/abcd"); + + testHelper::effectiveUrl = "https://foo.bar/stream_2/out.m3u8"; + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/fmp4_noenc_v_stream_2.m3u8", "https://bit.ly/abcd", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + EXPECT_EQ(tree->base_url_, "https://link.to/"); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(rep_url, "https://bit.ly/abcd"); +} + + +TEST_F(HLSTreeTest, + CalculateSourceUrlFromRedirectedMasterAndRedirectedVariantAbsoluteUriSameDomains) +{ + GTEST_SKIP(); + testHelper::effectiveUrl = "https://baz.qux/master.m3u8"; + + OpenTestFileMaster("hls/redirect_absolute_1v_master.m3u8", "https://bit.ly/1234", ""); + + std::string rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + + EXPECT_EQ(rep_url, "https://bit.ly/abcd"); + + testHelper::effectiveUrl = "https://foo.bar/stream_2/out.m3u8"; + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/fmp4_noenc_v_stream_2.m3u8", "https://bit.ly/abcd", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + rep_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0]->representations_[0]->source_url_); + EXPECT_EQ(tree->base_url_, "https://bit.ly/"); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(rep_url, "https://bit.ly/abcd"); +} + + + +TEST_F(HLSTreeTest, OpenVariant) +{ + OpenTestFileMaster("hls/1a2v_master.m3u8", "https://foo.bar/master.m3u8", ""); + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/fmp4_noenc_v_stream_2.m3u8", "https://foo.bar/stream_2.m3u8", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(tree->base_url_, "https://foo.bar/"); +} + + +TEST_F(HLSTreeTest, ParseKeyUriStartingWithSlash) +{ + OpenTestFileMaster("hls/1v_master.m3u8", + "https://foo.bar/hls/video/stream_name/master.m3u8", ""); + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/ts_aes_keyuriwithslash_stream_0.m3u8", + "https://foo.bar/hls/video/stream_name/chunklist.m3u8", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + std::string pssh_url = tree->BuildDownloadUrl(tree->current_period_->psshSets_[1].pssh_); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(tree->base_url_, "https://foo.bar/hls/video/stream_name/"); + EXPECT_EQ(pssh_url, + "https://foo.bar/hls/key/key.php?stream=stream_name"); +} + +TEST_F(HLSTreeTest, ParseKeyUriStartingWithSlashFromRedirect) +{ + testHelper::effectiveUrl = "https://foo.bar/hls/video/stream_name/master.m3u8"; + + OpenTestFileMaster("hls/1v_master.m3u8", "https://baz.qux/hls/video/stream_name/master.m3u8", + ""); + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/ts_aes_keyuriwithslash_stream_0.m3u8", + "https://foo.bar/hls/video/stream_name/chunklist.m3u8", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + std::string pssh_url = tree->BuildDownloadUrl(tree->current_period_->psshSets_[1].pssh_); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(tree->base_url_, "https://baz.qux/hls/video/stream_name/"); + EXPECT_EQ(pssh_url, + "https://foo.bar/hls/key/key.php?stream=stream_name"); +} + + +TEST_F(HLSTreeTest, ParseKeyUriAbsolute) +{ + OpenTestFileMaster("hls/1v_master.m3u8", + "https://foo.bar/hls/video/stream_name/master.m3u8", ""); + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/ts_aes_keyuriabsolute_stream_0.m3u8", + "https://foo.bar/hls/video/stream_name/chunklist.m3u8", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(tree->base_url_, "https://foo.bar/hls/video/stream_name/"); + EXPECT_EQ(tree->current_period_->psshSets_[1].pssh_, + "https://foo.bar/hls/key/key.php?stream=stream_name"); +} + + +TEST_F(HLSTreeTest, ParseKeyUriRelative) +{ + OpenTestFileMaster("hls/1v_master.m3u8", "https://foo.bar/hls/video/stream_name/master.m3u8", + ""); + + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/ts_aes_keyurirelative_stream_0.m3u8", + "https://foo.bar/hls/video/stream_name/chunklist.m3u8", tree->current_period_, + tree->current_adaptationset_, tree->current_representation_); + + std::string pssh_url = tree->BuildDownloadUrl(tree->current_period_->psshSets_[1].pssh_); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(tree->base_url_, "https://foo.bar/hls/video/stream_name/"); + EXPECT_EQ(pssh_url, + "https://foo.bar/hls/video/stream_name/../../key/key.php?stream=stream_name"); +} + + +TEST_F(HLSTreeTest, ParseKeyUriRelativeFromRedirect) +{ + testHelper::effectiveUrl = "https://foo.bar/hls/video/stream_name/master.m3u8"; + + OpenTestFileMaster("hls/1v_master.m3u8", + "https://baz.qux/hls/video/stream_name/master.m3u8", ""); + std::string var_download_url = tree->BuildDownloadUrl( + tree->current_period_->adaptationSets_[0] + ->representations_[0] + ->source_url_); // https://baz.qux/hls/video/stream_name/ts_aes_uriwithslash_chunklist.m3u8 + adaptive::HLSTree::PREPARE_RESULT res = OpenTestFileVariant( + "hls/ts_aes_keyurirelative_stream_0.m3u8", + var_download_url, + tree->current_period_, + tree->current_adaptationset_, + tree->current_representation_); + + std::string pssh_url = tree->BuildDownloadUrl(tree->current_period_->psshSets_[1].pssh_); + EXPECT_EQ(res, adaptive::HLSTree::PREPARE_RESULT_OK); + EXPECT_EQ(tree->base_url_, "https://baz.qux/hls/video/stream_name/"); + EXPECT_EQ(pssh_url, + "https://foo.bar/hls/video/stream_name/../../key/key.php?stream=stream_name"); +} diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestMain.cpp kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestMain.cpp --- kodi-inputstream-adaptive-2.6.7+ds1/src/test/TestMain.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/src/test/TestMain.cpp 2021-04-22 11:47:43.000000000 +0000 @@ -0,0 +1,13 @@ +#include "gtest/gtest.h" + +int main(int argc, char** argv) +{ + ::testing::InitGoogleTest(&argc, argv); + std::vector args(argv + 1, argv + argc); +#ifdef _WIN32 + _putenv_s("DATADIR", args[0].c_str()); +#else + setenv("DATADIR", args[0].c_str(), 1); +#endif + return RUN_ALL_TESTS(); +} diff -Nru kodi-inputstream-adaptive-2.6.7+ds1/.travis.yml kodi-inputstream-adaptive-2.6.14+ds1/.travis.yml --- kodi-inputstream-adaptive-2.6.7+ds1/.travis.yml 2021-02-10 20:23:12.000000000 +0000 +++ kodi-inputstream-adaptive-2.6.14+ds1/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -language: cpp - -# -# Define the build matrix -# -# Travis defaults to building on Ubuntu Precise when building on -# Linux. We need Trusty in order to get up to date versions of -# cmake and g++. -# -env: - global: - - app_id=inputstream.adaptive - -matrix: - include: - - os: linux - dist: xenial - sudo: required - compiler: gcc - - os: linux - dist: xenial - sudo: required - compiler: clang - - os: osx - osx_image: xcode10.2 - -# -# The addon source is automatically checked out in $TRAVIS_BUILD_DIR, -# we'll put the Kodi source on the same level -# -before_script: - - cd $TRAVIS_BUILD_DIR/.. - - git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git -b master - - cd ${app_id} && mkdir build && cd build - - cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons - -script: make