{"version":3,"file":"dash.all.min.js","mappings":"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,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,SAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,MAEN,CACElmC,KAAM,cACNkmC,GAAI,WAEN,CACElmC,KAAM,cACNkmC,GAAI,WAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,SACNkmC,GAAI,OAEN,CACElmC,KAAM,YACNkmC,GAAI,MAEN,CACElmC,KAAM,aACNkmC,GAAI,MAEN,CACElmC,KAAM,WACNkmC,GAAI,OAEN,CACElmC,KAAM,KACNkmC,GAAI,WAEN,CACElmC,KAAM,MACNkmC,GAAI,SAEN,CACElmC,KAAM,KACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,KACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,KACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,SAEN,CACElmC,KAAM,MACNkmC,GAAI,SAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,WAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,OAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,MACNkmC,GAAI,MAEN,CACElmC,KAAM,aACNkmC,GAAI,UAEN,C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AAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,MAAO,SACP5tE,MAAO,OAETimC,GAAI,CACF2nC,MAAO,SACP5tE,MAAO,OAGX,CACED,KAAM,CACJ6tE,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IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,eACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJ,UAAW,aACX,QAAS,aACT,QAAS,aACT,QAAS,aACTC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLz+I,GAAI,aACJ0+I,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLhnK,IAAK,cACLinK,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLlkJ,IAAK,cACLmkJ,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLjjJ,GAAI,aACJkjJ,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLn0D,GAAI,aACJo0D,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL5+K,IAAK,cACL6+K,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,eACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,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IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLx7L,IAAK,cACLy7L,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL/6K,IAAK,cACLg7K,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL91K,IAAK,cACL+1K,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,eACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL3yK,GAAI,aACJ4yK,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLpzK,GAAI,aACJqzK,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJ,UAAW,aACXC,IAAK,cACLC,IAAK,cACLh+J,IAAK,cACL/vC,IAAK,cACLguM,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,cACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLr2L,IAAK,cACLs2L,IAAK,cACLC,IAAK,cACLruK,GAAI,aACJsuK,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACL9lM,IAAK,cACL+lM,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJ,UAAW,aACXC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLz0K,GAAI,aACJ00K,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLvpF,IAAK,cACLwpF,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL1jL,IAAK,cACL2jL,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL/pH,IAAK,cACLgqH,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK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AY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ9vN,IAAK,cACL+vN,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJ,QAAS,aACT,UAAW,aACX,QAAS,aACT,QAAS,aACT,QAAS,aACTC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,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AAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL93K,GAAI,aACJ+3K,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLxyP,GAAI,aACJyyP,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL57O,IAAK,cACL67O,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,SAAU,cACVC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,SAAU,cACV,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL92P,IAAK,cACL+2P,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLjlQ,IAAK,cACLklQ,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IA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AAK,cACLC,IAAK,cACLC,IAAK,cACL9rP,IAAK,cACL+rP,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL35J,IAAK,cACL45J,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cAC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LC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,I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C,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL/oR,IAAK,cACLgpR,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC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AK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,eACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,c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AAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL3hS,GAAI,aACJ4hS,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,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LC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL9zS,GAAI,aACJ+zS,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IA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Z,SAAU,cACV,WAAY,cACZ,cAAe,cACf,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,cACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,SAAU,aACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,cACf,cAAe,cACf,cAAe,cACf,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,cAAe,cACf,SAAU,cACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,cAAe,cACf,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,SAAU,cACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,WAAY,aAC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AAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,cACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZ,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,cACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,SAAU,cACV,WAAY,cACZC,IAAK,cACLxtN,IAAK,cACLytN,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,eACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,GAAI,aACJ,QAAS,aACT,QAAS,aACT,UAAW,aACX,QAAS,aACT,QAAS,aACT,UAAW,aACX,UAAW,aACX,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACTC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACL,WAAY,cACZC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLC,IAAK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","sources":["webpack://dashjs/webpack/universalModuleDefinition","webpack://dashjs/./node_modules/base64-js/index.js","webpack://dashjs/./node_modules/buffer/index.js","webpack://dashjs/./node_modules/codem-isoboxer/dist/iso_boxer.js","webpack://dashjs/./node_modules/events/events.js","webpack://dashjs/./node_modules/fast-deep-equal/index.js","webpack://dashjs/./node_modules/ieee754/index.js","webpack://dashjs/./node_modules/imsc/node_modules/sax/lib/sax.js","webpack://dashjs/./node_modules/imsc/src/main/js/doc.js","webpack://dashjs/./node_modules/imsc/src/main/js/html.js","webpack://dashjs/./node_modules/imsc/src/main/js/isd.js","webpack://dashjs/./node_modules/imsc/src/main/js/main.js","webpack://dashjs/./node_modules/imsc/src/main/js/names.js","webpack://dashjs/./node_modules/imsc/src/main/js/styles.js","webpack://dashjs/./node_modules/imsc/src/main/js/utils.js","webpack://dashjs/./node_modules/inherits/inherits_browser.js","webpack://dashjs/./node_modules/path-browserify/index.js","webpack://dashjs/./node_modules/stream-browserify/index.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js","webpack://dashjs/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://dashjs/./node_modules/string_decoder/lib/string_decoder.js","webpack://dashjs/./node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://dashjs/./node_modules/ua-parser-js/src/ua-parser.js","webpack://dashjs/./node_modules/util-deprecate/browser.js","webpack://dashjs/./index_mediaplayerOnly.js","webpack://dashjs/./src/core/Debug.js","webpack://dashjs/./src/core/EventBus.js","webpack://dashjs/./src/core/FactoryMaker.js","webpack://dashjs/./src/core/Settings.js","webpack://dashjs/./src/core/Utils.js","webpack://dashjs/./src/core/Version.js","webpack://dashjs/./src/core/errors/ErrorsBase.js","webpack://dashjs/./src/core/events/CoreEvents.js","webpack://dashjs/./src/core/events/Events.js","webpack://dashjs/./src/core/events/EventsBase.js","webpack://dashjs/./src/dash/constants/DashConstants.js","webpack://dashjs/./src/dash/vo/UTCTiming.js","webpack://dashjs/../../../src/cta/608/CaptionsLogger.ts","webpack://dashjs/../../../src/cta/608/VerboseLevel.ts","webpack://dashjs/../../../src/cta/608/PenState.ts","webpack://dashjs/../../../src/cta/608/StyledUnicodeChar.ts","webpack://dashjs/../../../../src/cta/608/utils/NR_COLS.ts","webpack://dashjs/../../../../src/cta/608/utils/specialCea608CharsCodes.ts","webpack://dashjs/../../../../src/cta/608/utils/getCharForByte.ts","webpack://dashjs/../../../src/cta/608/Row.ts","webpack://dashjs/../../../../src/cta/608/utils/NR_ROWS.ts","webpack://dashjs/../../../src/cta/608/CaptionScreen.ts","webpack://dashjs/../../../src/cta/608/Cta608Channel.ts","webpack://dashjs/../../../../src/cta/608/utils/backgroundColors.ts","webpack://dashjs/../../../../src/cta/608/utils/hasCmdRepeated.ts","webpack://dashjs/../../../../src/cta/608/utils/numArrayToHexArray.ts","webpack://dashjs/../../../../src/cta/608/utils/rowsHighCh1.ts","webpack://dashjs/../../../../src/cta/608/utils/rowsHighCh2.ts","webpack://dashjs/../../../../src/cta/608/utils/rowsLowCh1.ts","webpack://dashjs/../../../../src/cta/608/utils/rowsLowCh2.ts","webpack://dashjs/../../../../src/cta/608/utils/setLastCmd.ts","webpack://dashjs/../../../src/cta/608/Cta608Parser.ts","webpack://dashjs/../../../../src/cta/608/utils/createCmdHistory.ts","webpack://dashjs/./src/streaming/constants/MetricsConstants.js","webpack://dashjs/./src/streaming/controllers/PlaybackController.js","webpack://dashjs/./src/streaming/vo/FragmentRequest.js","webpack://dashjs/./src/streaming/models/FragmentModel.js","webpack://dashjs/./src/core/errors/Errors.js","webpack://dashjs/./src/streaming/SourceBufferSink.js","webpack://dashjs/./src/streaming/PreBufferSink.js","webpack://dashjs/./src/streaming/utils/InitCache.js","webpack://dashjs/./src/streaming/controllers/BufferController.js","webpack://dashjs/./src/streaming/text/NotFragmentedTextBufferController.js","webpack://dashjs/./src/streaming/controllers/ScheduleController.js","webpack://dashjs/./src/dash/vo/Segment.js","webpack://dashjs/./src/dash/utils/SegmentsUtils.js","webpack://dashjs/./src/dash/controllers/RepresentationController.js","webpack://dashjs/./src/dash/DashHandler.js","webpack://dashjs/./src/streaming/utils/DefaultURLUtils.js","webpack://dashjs/./src/streaming/utils/URLUtils.js","webpack://dashjs/./src/streaming/vo/metrics/PlayList.js","webpack://dashjs/./src/dash/utils/TimelineSegmentsGetter.js","webpack://dashjs/./src/dash/utils/TemplateSegmentsGetter.js","webpack://dashjs/./src/dash/utils/ListSegmentsGetter.js","webpack://dashjs/./src/dash/utils/SegmentBaseGetter.js","webpack://dashjs/./src/dash/controllers/SegmentsController.js","webpack://dashjs/./src/streaming/utils/TimeUtils.js","webpack://dashjs/./src/streaming/vo/MediaInfoSelectionInput.js","webpack://dashjs/./src/streaming/StreamProcessor.js","webpack://dashjs/./src/streaming/vo/DataChunk.js","webpack://dashjs/./src/streaming/net/XHRLoader.js","webpack://dashjs/./src/streaming/net/FetchLoader.js","webpack://dashjs/./src/dash/vo/AdaptationSet.js","webpack://dashjs/./src/dash/vo/BaseURL.js","webpack://dashjs/./src/dash/vo/DescriptorType.js","webpack://dashjs/./src/dash/vo/CMCDParameters.js","webpack://dashjs/./src/dash/vo/ClientDataReporting.js","webpack://dashjs/./src/dash/vo/ContentProtection.js","webpack://dashjs/./src/dash/vo/ContentSteering.js","webpack://dashjs/./src/dash/vo/Event.js","webpack://dashjs/./src/dash/vo/EventStream.js","webpack://dashjs/./src/dash/vo/Mpd.js","webpack://dashjs/./src/dash/vo/MpdLocation.js","webpack://dashjs/./src/dash/vo/PatchLocation.js","webpack://dashjs/./src/dash/vo/Period.js","webpack://dashjs/./src/dash/vo/ProducerReferenceTime.js","webpack://dashjs/./src/dash/vo/Representation.js","webpack://dashjs/./src/dash/models/DashManifestModel.js","webpack://dashjs/../../src/cmcd/CMCD_PARAM.ts","webpack://dashjs/../../src/cta/CmObjectType.ts","webpack://dashjs/../../src/cmcd/CmcdObjectType.ts","webpack://dashjs/../../src/cmcd/CmcdStreamType.ts","webpack://dashjs/../../src/cta/CmStreamType.ts","webpack://dashjs/../../src/cmcd/CmcdStreamingFormat.ts","webpack://dashjs/../../src/cta/CmStreamingFormat.ts","webpack://dashjs/../../src/structuredfield/SfItem.ts","webpack://dashjs/../../../src/structuredfield/utils/DICT.ts","webpack://dashjs/../../../src/structuredfield/utils/throwError.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeError.ts","webpack://dashjs/../../src/structuredfield/SfToken.ts","webpack://dashjs/../../../src/structuredfield/utils/BARE_ITEM.ts","webpack://dashjs/../../../src/structuredfield/utils/BOOLEAN.ts","webpack://dashjs/../../../src/structuredfield/utils/BYTES.ts","webpack://dashjs/../../../src/structuredfield/utils/INTEGER.ts","webpack://dashjs/../../../src/structuredfield/utils/isInvalidInt.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeInteger.ts","webpack://dashjs/../../src/utils/roundToEven.ts","webpack://dashjs/../../../src/structuredfield/utils/DECIMAL.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeDecimal.ts","webpack://dashjs/../../../src/structuredfield/utils/STRING.ts","webpack://dashjs/../../../src/structuredfield/utils/STRING_REGEX.ts","webpack://dashjs/../../../src/cta/utils/symbolToStr.ts","webpack://dashjs/../../../src/structuredfield/utils/TOKEN.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeToken.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeBareItem.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeString.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeBoolean.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeDate.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeByteSequence.ts","webpack://dashjs/../../src/utils/base64encode.ts","webpack://dashjs/../../../src/structuredfield/utils/KEY.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeKey.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeParams.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeItem.ts","webpack://dashjs/../../src/cmcd/CmcdFormatters.ts","webpack://dashjs/../../src/utils/urlToRelativePath.ts","webpack://dashjs/../../src/cmcd/encodeCmcd.ts","webpack://dashjs/../../src/structuredfield/encodeSfDict.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeDict.ts","webpack://dashjs/../../../src/structuredfield/serialize/serializeInnerList.ts","webpack://dashjs/../../../src/cmcd/utils/processCmcd.ts","webpack://dashjs/../../../src/cta/utils/isValid.ts","webpack://dashjs/../../../src/cta/utils/isTokenField.ts","webpack://dashjs/../../src/cmcd/CMCD_OBJECT.ts","webpack://dashjs/../../src/cmcd/CmcdHeaderField.ts","webpack://dashjs/../../src/cmcd/CMCD_REQUEST.ts","webpack://dashjs/../../src/cmcd/CMCD_SESSION.ts","webpack://dashjs/../../src/cmcd/CMCD_STATUS.ts","webpack://dashjs/../../src/cmcd/CmcdHeaderMap.ts","webpack://dashjs/./src/streaming/models/CmcdModel.js","webpack://dashjs/../../src/cmcd/toCmcdHeaders.ts","webpack://dashjs/../../src/cmsd/CMSD_DYNAMIC.ts","webpack://dashjs/../../src/cmsd/CMSD_STATIC.ts","webpack://dashjs/../../src/cmsd/CmsdObjectType.ts","webpack://dashjs/../../../src/structuredfield/parse/parseError.ts","webpack://dashjs/../../../src/structuredfield/utils/LIST.ts","webpack://dashjs/../../../src/structuredfield/parse/ParsedValue.ts","webpack://dashjs/../../../src/structuredfield/utils/INNER.ts","webpack://dashjs/../../../src/structuredfield/utils/DATE.ts","webpack://dashjs/../../../src/structuredfield/utils/INTEGER_DECIMAL.ts","webpack://dashjs/../../../src/structuredfield/parse/parseIntegerOrDecimal.ts","webpack://dashjs/../../../src/structuredfield/parse/parseBareItem.ts","webpack://dashjs/../../../src/structuredfield/parse/parseString.ts","webpack://dashjs/../../../src/structuredfield/parse/parseBoolean.ts","webpack://dashjs/../../../src/structuredfield/parse/parseByteSequence.ts","webpack://dashjs/../../src/utils/base64decode.ts","webpack://dashjs/../../../src/structuredfield/parse/parseToken.ts","webpack://dashjs/../../../src/structuredfield/parse/parseDate.ts","webpack://dashjs/../../../src/structuredfield/parse/parseKey.ts","webpack://dashjs/../../../src/structuredfield/parse/parseParameters.ts","webpack://dashjs/../../../src/structuredfield/parse/parseItem.ts","webpack://dashjs/../../../src/structuredfield/parse/parseItemOrInnerList.ts","webpack://dashjs/../../../src/structuredfield/parse/parseInnerList.ts","webpack://dashjs/./src/streaming/models/CmsdModel.js","webpack://dashjs/../../src/cmsd/decodeCmsdStatic.ts","webpack://dashjs/../../src/structuredfield/decodeSfDict.ts","webpack://dashjs/../../../src/structuredfield/parse/parseDict.ts","webpack://dashjs/../../src/cmsd/decodeCmsdDynamic.ts","webpack://dashjs/../../src/structuredfield/decodeSfList.ts","webpack://dashjs/../../../src/structuredfield/parse/parseList.ts","webpack://dashjs/./src/streaming/controllers/CommonAccessTokenController.js","webpack://dashjs/./src/streaming/controllers/ClientDataReportingController.js","webpack://dashjs/./src/streaming/controllers/ExtUrlQueryInfoController.js","webpack://dashjs/./src/streaming/vo/CommonMediaRequest.js","webpack://dashjs/./src/streaming/vo/CommonMediaResponse.js","webpack://dashjs/./src/streaming/net/HTTPLoader.js","webpack://dashjs/./src/streaming/net/SchemeLoaderFactory.js","webpack://dashjs/./src/streaming/net/URLLoader.js","webpack://dashjs/./src/streaming/vo/HeadRequest.js","webpack://dashjs/./src/streaming/FragmentLoader.js","webpack://dashjs/./src/streaming/controllers/FragmentController.js","webpack://dashjs/./src/streaming/vo/Thumbnail.js","webpack://dashjs/./src/streaming/vo/ThumbnailTrackInfo.js","webpack://dashjs/./src/streaming/vo/IsoBox.js","webpack://dashjs/./src/streaming/utils/IsoFile.js","webpack://dashjs/./src/streaming/vo/IsoBoxSearchInfo.js","webpack://dashjs/./src/streaming/utils/BoxParser.js","webpack://dashjs/./src/streaming/thumbnail/ThumbnailTracks.js","webpack://dashjs/./src/streaming/thumbnail/ThumbnailController.js","webpack://dashjs/./src/streaming/controllers/BlacklistController.js","webpack://dashjs/./src/streaming/Stream.js","webpack://dashjs/./src/dash/vo/ContentSteeringRequest.js","webpack://dashjs/./src/dash/vo/ContentSteeringResponse.js","webpack://dashjs/./src/dash/controllers/ContentSteeringController.js","webpack://dashjs/./src/streaming/utils/LocationSelector.js","webpack://dashjs/./src/streaming/ManifestUpdater.js","webpack://dashjs/./src/streaming/controllers/TimeSyncController.js","webpack://dashjs/./src/streaming/controllers/MediaSourceController.js","webpack://dashjs/./src/streaming/controllers/EventController.js","webpack://dashjs/./src/streaming/constants/ConformanceViolationConstants.js","webpack://dashjs/./src/streaming/controllers/StreamController.js","webpack://dashjs/./src/streaming/controllers/GapController.js","webpack://dashjs/./src/streaming/controllers/CatchupController.js","webpack://dashjs/./src/dash/controllers/ServiceDescriptionController.js","webpack://dashjs/./node_modules/bcp-47/lib/stringify.js","webpack://dashjs/./node_modules/is-alphabetical/index.js","webpack://dashjs/./node_modules/is-decimal/index.js","webpack://dashjs/./node_modules/is-alphanumerical/index.js","webpack://dashjs/./node_modules/bcp-47/lib/regular.js","webpack://dashjs/./node_modules/bcp-47/lib/normal.js","webpack://dashjs/./node_modules/bcp-47/lib/parse.js","webpack://dashjs/./node_modules/bcp-47-match/index.js","webpack://dashjs/./node_modules/bcp-47-normalize/lib/matches.js","webpack://dashjs/./node_modules/bcp-47-normalize/lib/fields.js","webpack://dashjs/./node_modules/bcp-47-normalize/lib/many.js","webpack://dashjs/./node_modules/bcp-47-normalize/lib/likely.js","webpack://dashjs/./node_modules/bcp-47-normalize/lib/index.js","webpack://dashjs/./src/streaming/controllers/MediaController.js","webpack://dashjs/./src/streaming/models/BaseURLTreeModel.js","webpack://dashjs/./src/streaming/utils/baseUrlResolution/DVBSelector.js","webpack://dashjs/./src/streaming/utils/baseUrlResolution/BasicSelector.js","webpack://dashjs/./src/streaming/utils/baseUrlResolution/ContentSteeringSelector.js","webpack://dashjs/./src/streaming/utils/BaseURLSelector.js","webpack://dashjs/./src/streaming/controllers/BaseURLController.js","webpack://dashjs/./src/streaming/vo/TextRequest.js","webpack://dashjs/./src/streaming/XlinkLoader.js","webpack://dashjs/./src/streaming/controllers/XlinkController.js","webpack://dashjs/./src/dash/parser/objectiron.js","webpack://dashjs/./src/dash/parser/matchers/BaseMatcher.js","webpack://dashjs/./src/dash/parser/matchers/DurationMatcher.js","webpack://dashjs/./src/dash/parser/matchers/DateTimeMatcher.js","webpack://dashjs/./src/dash/parser/matchers/NumericMatcher.js","webpack://dashjs/./src/dash/parser/matchers/LangMatcher.js","webpack://dashjs/./src/dash/parser/maps/CommonProperty.js","webpack://dashjs/./src/dash/parser/maps/MapNode.js","webpack://dashjs/./src/dash/parser/maps/RepresentationBaseValuesMap.js","webpack://dashjs/./src/dash/parser/maps/SegmentValuesMap.js","webpack://dashjs/./externals/tXml.js","webpack://dashjs/./src/dash/parser/DashParser.js","webpack://dashjs/./src/streaming/ManifestLoader.js","webpack://dashjs/./src/streaming/utils/ErrorHandler.js","webpack://dashjs/./src/streaming/utils/CapabilitiesFilter.js","webpack://dashjs/./src/streaming/vo/URIFragmentData.js","webpack://dashjs/./src/streaming/models/URIFragmentModel.js","webpack://dashjs/./src/streaming/models/ManifestModel.js","webpack://dashjs/./src/streaming/models/MediaPlayerModel.js","webpack://dashjs/./src/streaming/rules/SwitchRequest.js","webpack://dashjs/./src/streaming/rules/abr/ThroughputRule.js","webpack://dashjs/./src/streaming/rules/abr/InsufficientBufferRule.js","webpack://dashjs/./src/streaming/rules/abr/AbandonRequestsRule.js","webpack://dashjs/./src/streaming/rules/abr/DroppedFramesRule.js","webpack://dashjs/./src/streaming/rules/abr/SwitchHistoryRule.js","webpack://dashjs/./src/streaming/rules/abr/BolaRule.js","webpack://dashjs/./src/streaming/rules/abr/L2ARule.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LearningAbrController.js","webpack://dashjs/./src/streaming/rules/abr/lolp/QoeInfo.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LoLpQoEEvaluator.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LoLpWeightSelector.js","webpack://dashjs/./src/streaming/rules/abr/lolp/LoLpRule.js","webpack://dashjs/./src/streaming/rules/abr/ABRRulesCollection.js","webpack://dashjs/./src/streaming/rules/RulesContext.js","webpack://dashjs/./src/streaming/rules/SwitchRequestHistory.js","webpack://dashjs/./src/streaming/rules/DroppedFramesHistory.js","webpack://dashjs/./src/streaming/controllers/AbrController.js","webpack://dashjs/./src/streaming/models/VideoModel.js","webpack://dashjs/./src/streaming/utils/DOMStorage.js","webpack://dashjs/./src/dash/SegmentBaseLoader.js","webpack://dashjs/./src/streaming/utils/EBMLParser.js","webpack://dashjs/./src/dash/WebmSegmentBaseLoader.js","webpack://dashjs/./src/dash/controllers/SegmentBaseController.js","webpack://dashjs/./src/dash/vo/MediaInfo.js","webpack://dashjs/./src/dash/vo/StreamInfo.js","webpack://dashjs/./src/dash/vo/ManifestInfo.js","webpack://dashjs/./src/dash/vo/SimpleXPath.js","webpack://dashjs/./src/dash/vo/PatchOperation.js","webpack://dashjs/./src/dash/models/PatchManifestModel.js","webpack://dashjs/../../src/utils/utf8ArrayToStr.ts","webpack://dashjs/../../../src/id3/util/utf8.ts","webpack://dashjs/../../../src/id3/util/decodeId3Frame.ts","webpack://dashjs/../../../src/id3/util/decodeId3PrivFrame.ts","webpack://dashjs/../../../src/id3/util/decodeId3UrlFrame.ts","webpack://dashjs/../../../src/id3/util/decodeId3ImageFrame.ts","webpack://dashjs/../../../src/id3/util/toArrayBuffer.ts","webpack://dashjs/../../../src/id3/util/decodeId3TextFrame.ts","webpack://dashjs/../../../src/id3/util/readId3Size.ts","webpack://dashjs/../../../src/id3/util/getId3FrameData.ts","webpack://dashjs/../../../src/id3/util/isId3Footer.ts","webpack://dashjs/../../../src/id3/util/isId3Header.ts","webpack://dashjs/./src/dash/DashAdapter.js","webpack://dashjs/../../src/id3/getId3Frames.ts","webpack://dashjs/./src/dash/utils/Round10.js","webpack://dashjs/./src/streaming/vo/MetricsList.js","webpack://dashjs/./src/streaming/vo/metrics/RepresentationSwitch.js","webpack://dashjs/./src/streaming/vo/metrics/BufferLevel.js","webpack://dashjs/./src/streaming/vo/metrics/BufferState.js","webpack://dashjs/./src/streaming/vo/metrics/DVRInfo.js","webpack://dashjs/./src/streaming/vo/metrics/DroppedFrames.js","webpack://dashjs/./src/streaming/vo/metrics/ManifestUpdate.js","webpack://dashjs/./src/streaming/vo/metrics/SchedulingInfo.js","webpack://dashjs/./src/streaming/vo/metrics/RequestsQueue.js","webpack://dashjs/./src/streaming/models/MetricsModel.js","webpack://dashjs/./src/dash/DashMetrics.js","webpack://dashjs/./src/dash/utils/TimelineConverter.js","webpack://dashjs/./externals/base64.js","webpack://dashjs/./src/streaming/vo/TextTrackInfo.js","webpack://dashjs/./src/streaming/text/EmbeddedTextHtmlRender.js","webpack://dashjs/../../../../src/cta/608/utils/seiHelpers.ts","webpack://dashjs/../../../src/cta/608/extractCta608DataFromSample.ts","webpack://dashjs/./src/streaming/text/TextSourceBuffer.js","webpack://dashjs/./src/streaming/text/TextTracks.js","webpack://dashjs/./src/streaming/utils/VTTParser.js","webpack://dashjs/./src/streaming/utils/VttCustomRenderingParser.js","webpack://dashjs/./src/streaming/utils/TTMLParser.js","webpack://dashjs/./src/streaming/text/DVBFonts.js","webpack://dashjs/./src/streaming/text/TextController.js","webpack://dashjs/./src/streaming/models/ThroughputModel.js","webpack://dashjs/./src/streaming/controllers/ThroughputController.js","webpack://dashjs/./src/streaming/MediaPlayer.js","webpack://dashjs/./src/streaming/MediaPlayerEvents.js","webpack://dashjs/./src/streaming/constants/Constants.js","webpack://dashjs/./src/streaming/constants/ProtectionConstants.js","webpack://dashjs/./src/streaming/metrics/vo/DVBErrors.js","webpack://dashjs/./src/streaming/metrics/utils/DVBErrorsTranslator.js","webpack://dashjs/./src/streaming/metrics/controllers/RangeController.js","webpack://dashjs/./src/streaming/metrics/utils/MetricSerialiser.js","webpack://dashjs/./src/streaming/metrics/utils/RNG.js","webpack://dashjs/./src/streaming/metrics/reporting/reporters/DVBReporting.js","webpack://dashjs/./src/streaming/metrics/reporting/ReportingFactory.js","webpack://dashjs/./src/streaming/metrics/controllers/ReportingController.js","webpack://dashjs/./src/streaming/metrics/utils/HandlerHelpers.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/BufferLevelHandler.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/DVBErrorsHandler.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/HttpListHandler.js","webpack://dashjs/./src/streaming/metrics/metrics/handlers/GenericMetricHandler.js","webpack://dashjs/./src/streaming/metrics/metrics/MetricsHandlerFactory.js","webpack://dashjs/./src/streaming/metrics/controllers/MetricsHandlersController.js","webpack://dashjs/./src/streaming/metrics/controllers/MetricsController.js","webpack://dashjs/./src/streaming/metrics/vo/Metrics.js","webpack://dashjs/./src/streaming/metrics/vo/Range.js","webpack://dashjs/./src/streaming/metrics/vo/Reporting.js","webpack://dashjs/./src/streaming/metrics/utils/ManifestParsing.js","webpack://dashjs/./src/streaming/metrics/controllers/MetricsCollectionController.js","webpack://dashjs/./src/streaming/metrics/MetricsReporting.js","webpack://dashjs/./src/streaming/metrics/MetricsReportingEvents.js","webpack://dashjs/./src/streaming/models/CustomParametersModel.js","webpack://dashjs/./src/streaming/protection/CommonEncryption.js","webpack://dashjs/./src/streaming/protection/vo/MediaCapability.js","webpack://dashjs/./src/streaming/protection/vo/KeySystemConfiguration.js","webpack://dashjs/./src/streaming/protection/vo/LicenseRequest.js","webpack://dashjs/./src/streaming/protection/vo/LicenseResponse.js","webpack://dashjs/./src/streaming/protection/controllers/ProtectionController.js","webpack://dashjs/./src/streaming/protection/vo/KeyPair.js","webpack://dashjs/./src/streaming/protection/vo/ClearKeyKeySet.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemClearKey.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemW3CClearKey.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemWidevine.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemPlayReady.js","webpack://dashjs/./src/streaming/protection/servers/DRMToday.js","webpack://dashjs/./src/streaming/protection/servers/PlayReady.js","webpack://dashjs/./src/streaming/protection/servers/Widevine.js","webpack://dashjs/./src/streaming/protection/servers/ClearKey.js","webpack://dashjs/./src/streaming/protection/vo/KeySystemMetadata.js","webpack://dashjs/./src/streaming/protection/controllers/ProtectionKeyController.js","webpack://dashjs/./src/streaming/protection/vo/NeedKey.js","webpack://dashjs/./src/streaming/protection/vo/KeyMessage.js","webpack://dashjs/./src/streaming/protection/vo/KeySystemAccess.js","webpack://dashjs/./src/streaming/protection/models/DefaultProtectionModel.js","webpack://dashjs/./src/streaming/protection/models/ProtectionModel_3Feb2014.js","webpack://dashjs/./src/streaming/protection/models/ProtectionModel_01b.js","webpack://dashjs/./src/streaming/protection/Protection.js","webpack://dashjs/./src/streaming/protection/ProtectionEvents.js","webpack://dashjs/./src/streaming/protection/errors/ProtectionErrors.js","webpack://dashjs/./src/streaming/utils/Capabilities.js","webpack://dashjs/./src/streaming/utils/CustomTimeRanges.js","webpack://dashjs/./src/streaming/utils/ObjectUtils.js","webpack://dashjs/./src/streaming/utils/SupervisorTools.js","webpack://dashjs/./src/streaming/vo/DashJSError.js","webpack://dashjs/./src/streaming/vo/metrics/HTTPRequest.js","webpack://dashjs/webpack/bootstrap","webpack://dashjs/webpack/runtime/amd options","webpack://dashjs/webpack/runtime/define property getters","webpack://dashjs/webpack/runtime/global","webpack://dashjs/webpack/runtime/hasOwnProperty shorthand","webpack://dashjs/./src/streaming/MediaPlayerFactory.js","webpack://dashjs/./index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dashjs\"] = factory();\n\telse\n\t\troot[\"dashjs\"] = factory();\n})(self, function() {\nreturn ","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/*! codem-isoboxer v0.3.10 https://github.com/madebyhiro/codem-isoboxer/blob/master/LICENSE.txt */\nvar ISOBoxer = {};\n\nISOBoxer.parseBuffer = function(arrayBuffer) {\n return new ISOFile(arrayBuffer).parse();\n};\n\nISOBoxer.addBoxProcessor = function(type, parser) {\n if (typeof type !== 'string' || typeof parser !== 'function') {\n return;\n }\n ISOBox.prototype._boxProcessors[type] = parser;\n};\n\nISOBoxer.createFile = function() {\n return new ISOFile();\n};\n\n// See ISOBoxer.append() for 'pos' parameter syntax\nISOBoxer.createBox = function(type, parent, pos) {\n var newBox = ISOBox.create(type);\n if (parent) {\n parent.append(newBox, pos);\n }\n return newBox;\n};\n\n// See ISOBoxer.append() for 'pos' parameter syntax\nISOBoxer.createFullBox = function(type, parent, pos) {\n var newBox = ISOBoxer.createBox(type, parent, pos);\n newBox.version = 0;\n newBox.flags = 0;\n return newBox;\n};\n\nISOBoxer.Utils = {};\nISOBoxer.Utils.dataViewToString = function(dataView, encoding) {\n var impliedEncoding = encoding || 'utf-8';\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder(impliedEncoding).decode(dataView);\n }\n var a = [];\n var i = 0;\n\n if (impliedEncoding === 'utf-8') {\n /* The following algorithm is essentially a rewrite of the UTF8.decode at\n http://bannister.us/weblog/2007/simple-base64-encodedecode-javascript/\n */\n\n while (i < dataView.byteLength) {\n var c = dataView.getUint8(i++);\n if (c < 0x80) {\n // 1-byte character (7 bits)\n } else if (c < 0xe0) {\n // 2-byte character (11 bits)\n c = (c & 0x1f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n } else if (c < 0xf0) {\n // 3-byte character (16 bits)\n c = (c & 0xf) << 12;\n c |= (dataView.getUint8(i++) & 0x3f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n } else {\n // 4-byte character (21 bits)\n c = (c & 0x7) << 18;\n c |= (dataView.getUint8(i++) & 0x3f) << 12;\n c |= (dataView.getUint8(i++) & 0x3f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n }\n a.push(String.fromCharCode(c));\n }\n } else { // Just map byte-by-byte (probably wrong)\n while (i < dataView.byteLength) {\n a.push(String.fromCharCode(dataView.getUint8(i++)));\n }\n }\n return a.join('');\n};\n\nISOBoxer.Utils.utf8ToByteArray = function(string) {\n // Only UTF-8 encoding is supported by TextEncoder\n var u, i;\n if (typeof TextEncoder !== 'undefined') {\n u = new TextEncoder().encode(string);\n } else {\n u = [];\n for (i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n if (c < 0x80) {\n u.push(c);\n } else if (c < 0x800) {\n u.push(0xC0 | (c >> 6));\n u.push(0x80 | (63 & c));\n } else if (c < 0x10000) {\n u.push(0xE0 | (c >> 12));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n } else {\n u.push(0xF0 | (c >> 18));\n u.push(0x80 | (63 & (c >> 12)));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n }\n }\n }\n return u;\n};\n\n// Method to append a box in the list of child boxes\n// The 'pos' parameter can be either:\n// - (number) a position index at which to insert the new box\n// - (string) the type of the box after which to insert the new box\n// - (object) the box after which to insert the new box\nISOBoxer.Utils.appendBox = function(parent, box, pos) {\n box._offset = parent._cursor.offset;\n box._root = (parent._root ? parent._root : parent);\n box._raw = parent._raw;\n box._parent = parent;\n\n if (pos === -1) {\n // The new box is a sub-box of the parent but not added in boxes array,\n // for example when the new box is set as an entry (see dref and stsd for example)\n return;\n }\n\n if (pos === undefined || pos === null) {\n parent.boxes.push(box);\n return;\n }\n\n var index = -1,\n type;\n\n if (typeof pos === \"number\") {\n index = pos;\n } else {\n if (typeof pos === \"string\") {\n type = pos;\n } else if (typeof pos === \"object\" && pos.type) {\n type = pos.type;\n } else {\n parent.boxes.push(box);\n return;\n }\n\n for (var i = 0; i < parent.boxes.length; i++) {\n if (type === parent.boxes[i].type) {\n index = i + 1;\n break;\n }\n }\n }\n parent.boxes.splice(index, 0, box);\n};\n\nif (typeof exports !== 'undefined') {\n exports.parseBuffer = ISOBoxer.parseBuffer;\n exports.addBoxProcessor = ISOBoxer.addBoxProcessor;\n exports.createFile = ISOBoxer.createFile;\n exports.createBox = ISOBoxer.createBox;\n exports.createFullBox = ISOBoxer.createFullBox;\n exports.Utils = ISOBoxer.Utils;\n}\n\nISOBoxer.Cursor = function(initialOffset) {\n this.offset = (typeof initialOffset == 'undefined' ? 0 : initialOffset);\n};\n\nvar ISOFile = function(arrayBuffer) {\n this._cursor = new ISOBoxer.Cursor();\n this.boxes = [];\n if (arrayBuffer) {\n this._raw = new DataView(arrayBuffer);\n }\n};\n\nISOFile.prototype.fetch = function(type) {\n var result = this.fetchAll(type, true);\n return (result.length ? result[0] : null);\n};\n\nISOFile.prototype.fetchAll = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n};\n\nISOFile.prototype.parse = function() {\n this._cursor.offset = 0;\n this.boxes = [];\n while (this._cursor.offset < this._raw.byteLength) {\n var box = ISOBox.parse(this);\n\n // Box could not be parsed\n if (typeof box.type === 'undefined') break;\n\n this.boxes.push(box);\n }\n return this;\n};\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n};\n\nISOFile.prototype.write = function() {\n\n var length = 0,\n i;\n\n for (i = 0; i < this.boxes.length; i++) {\n length += this.boxes[i].getLength(false);\n }\n\n var bytes = new Uint8Array(length);\n this._rawo = new DataView(bytes.buffer);\n this.bytes = bytes;\n this._cursor.offset = 0;\n\n for (i = 0; i < this.boxes.length; i++) {\n this.boxes[i].write();\n }\n\n return bytes.buffer;\n};\n\nISOFile.prototype.append = function(box, pos) {\n ISOBoxer.Utils.appendBox(this, box, pos);\n};\nvar ISOBox = function() {\n this._cursor = new ISOBoxer.Cursor();\n};\n\nISOBox.parse = function(parent) {\n var newBox = new ISOBox();\n newBox._offset = parent._cursor.offset;\n newBox._root = (parent._root ? parent._root : parent);\n newBox._raw = parent._raw;\n newBox._parent = parent;\n newBox._parseBox();\n parent._cursor.offset = newBox._raw.byteOffset + newBox._raw.byteLength;\n return newBox;\n};\n\nISOBox.create = function(type) {\n var newBox = new ISOBox();\n newBox.type = type;\n newBox.boxes = [];\n return newBox;\n};\n\nISOBox.prototype._boxContainers = ['dinf', 'edts', 'mdia', 'meco', 'mfra', 'minf', 'moof', 'moov', 'mvex', 'stbl', 'strk', 'traf', 'trak', 'tref', 'udta', 'vttc', 'sinf', 'schi', 'encv', 'enca','meta','grpl','prsl'];\n\nISOBox.prototype._boxProcessors = {};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Generic read/write functions\n\nISOBox.prototype._procField = function (name, type, size) {\n if (this._parsing) {\n this[name] = this._readField(type, size);\n }\n else {\n this._writeField(type, size, this[name]);\n }\n};\n\nISOBox.prototype._procFieldArray = function (name, length, type, size) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name][i] = this._readField(type, size);\n }\n }\n else {\n for (i = 0; i < this[name].length; i++) {\n this._writeField(type, size, this[name][i]);\n }\n }\n};\n\nISOBox.prototype._procFullBox = function() {\n this._procField('version', 'uint', 8);\n this._procField('flags', 'uint', 24);\n};\n\nISOBox.prototype._procEntries = function(name, length, fn) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name].push({});\n fn.call(this, this[name][i]);\n }\n }\n else {\n for (i = 0; i < length; i++) {\n fn.call(this, this[name][i]);\n }\n }\n};\n\nISOBox.prototype._procSubEntries = function(entry, name, length, fn) {\n var i;\n if (this._parsing) {\n entry[name] = [];\n for (i = 0; i < length; i++) {\n entry[name].push({});\n fn.call(this, entry[name][i]);\n }\n }\n else {\n for (i = 0; i < length; i++) {\n fn.call(this, entry[name][i]);\n }\n }\n};\n\nISOBox.prototype._procEntryField = function (entry, name, type, size) {\n if (this._parsing) {\n entry[name] = this._readField(type, size);\n }\n else {\n this._writeField(type, size, entry[name]);\n }\n};\n\nISOBox.prototype._procSubBoxes = function(name, length) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name].push(ISOBox.parse(this));\n }\n }\n else {\n for (i = 0; i < length; i++) {\n if (this._rawo) {\n this[name][i].write();\n } else {\n this.size += this[name][i].getLength();\n }\n }\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Read/parse functions\n\nISOBox.prototype._readField = function(type, size) {\n switch (type) {\n case 'uint':\n return this._readUint(size);\n case 'int':\n return this._readInt(size);\n case 'template':\n return this._readTemplate(size);\n case 'string':\n return (size === -1) ? this._readTerminatedString() : this._readString(size);\n case 'data':\n return this._readData(size);\n case 'utf8':\n return this._readUTF8String();\n case 'utf8string':\n return this._readUTF8TerminatedString();\n default:\n return -1;\n }\n};\n\nISOBox.prototype._readInt = function(size) {\n var result = null,\n offset = this._cursor.offset - this._raw.byteOffset;\n switch(size) {\n case 8:\n result = this._raw.getInt8(offset);\n break;\n case 16:\n result = this._raw.getInt16(offset);\n break;\n case 32:\n result = this._raw.getInt32(offset);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n var s1 = this._raw.getInt32(offset);\n var s2 = this._raw.getInt32(offset + 4);\n result = (s1 * Math.pow(2,32)) + s2;\n break;\n }\n this._cursor.offset += (size >> 3);\n return result;\n};\n\nISOBox.prototype._readUint = function(size) {\n var result = null,\n offset = this._cursor.offset - this._raw.byteOffset,\n s1, s2;\n switch(size) {\n case 8:\n result = this._raw.getUint8(offset);\n break;\n case 16:\n result = this._raw.getUint16(offset);\n break;\n case 24:\n s1 = this._raw.getUint16(offset);\n s2 = this._raw.getUint8(offset + 2);\n result = (s1 << 8) + s2;\n break;\n case 32:\n result = this._raw.getUint32(offset);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n s1 = this._raw.getUint32(offset);\n s2 = this._raw.getUint32(offset + 4);\n result = (s1 * Math.pow(2,32)) + s2;\n break;\n }\n this._cursor.offset += (size >> 3);\n return result;\n};\n\nISOBox.prototype._readString = function(length) {\n var str = '';\n for (var c = 0; c < length; c++) {\n var char = this._readUint(8);\n str += String.fromCharCode(char);\n }\n return str;\n};\n\nISOBox.prototype._readTemplate = function(size) {\n var pre = this._readUint(size / 2);\n var post = this._readUint(size / 2);\n return pre + (post / Math.pow(2, size / 2));\n};\n\nISOBox.prototype._readTerminatedString = function() {\n var str = '';\n while (this._cursor.offset - this._offset < this._raw.byteLength) {\n var char = this._readUint(8);\n if (char === 0) break;\n str += String.fromCharCode(char);\n }\n return str;\n};\n\nISOBox.prototype._readData = function(size) {\n var length = (size > 0) ? size : (this._raw.byteLength - (this._cursor.offset - this._offset));\n if (length > 0) {\n var data = new Uint8Array(this._raw.buffer, this._cursor.offset, length);\n\n this._cursor.offset += length;\n return data;\n }\n else {\n return null;\n }\n};\n\nISOBox.prototype._readUTF8String = function() {\n var length = this._raw.byteLength - (this._cursor.offset - this._offset);\n var data = null;\n if (length > 0) {\n data = new DataView(this._raw.buffer, this._cursor.offset, length);\n this._cursor.offset += length;\n }\n \n return data ? ISOBoxer.Utils.dataViewToString(data) : data;\n};\n\nISOBox.prototype._readUTF8TerminatedString = function() {\n var length = this._raw.byteLength - (this._cursor.offset - this._offset);\n var data = null;\n if (length > 0) {\n data = new DataView(this._raw.buffer, this._cursor.offset, length);\n\n var l;\n for (l=0; l this._raw.buffer.byteLength) {\n this._root._incomplete = true;\n return;\n }\n\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n switch(this.size) {\n case 0:\n // Size zero indicates last box in the file. Consume remaining buffer.\n this._raw = new DataView(this._raw.buffer, this._offset);\n break;\n case 1:\n if (this._offset + this.size > this._raw.buffer.byteLength) {\n this._incomplete = true;\n this._root._incomplete = true;\n } else {\n this._raw = new DataView(this._raw.buffer, this._offset, this.largesize);\n }\n break;\n default:\n if (this._offset + this.size > this._raw.buffer.byteLength) {\n this._incomplete = true;\n this._root._incomplete = true;\n } else {\n this._raw = new DataView(this._raw.buffer, this._offset, this.size);\n }\n }\n\n // additional parsing\n if (!this._incomplete) {\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n if (this._boxContainers.indexOf(this.type) !== -1) {\n this._parseContainerBox();\n } else{\n // Unknown box => read and store box content\n this._data = this._readData();\n }\n }\n};\n\nISOBox.prototype._parseFullBox = function() {\n this.version = this._readUint(8);\n this.flags = this._readUint(24);\n};\n\nISOBox.prototype._parseContainerBox = function() {\n this.boxes = [];\n while (this._cursor.offset - this._raw.byteOffset < this._raw.byteLength) {\n this.boxes.push(ISOBox.parse(this));\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Write functions\n\nISOBox.prototype.append = function(box, pos) {\n ISOBoxer.Utils.appendBox(this, box, pos);\n};\n\nISOBox.prototype.getLength = function() {\n this._parsing = false;\n this._rawo = null;\n\n this.size = 0;\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n\n if (this._boxContainers.indexOf(this.type) !== -1) {\n for (var i = 0; i < this.boxes.length; i++) {\n this.size += this.boxes[i].getLength();\n }\n } \n\n if (this._data) {\n this._writeData(this._data);\n }\n\n return this.size;\n};\n\nISOBox.prototype.write = function() {\n this._parsing = false;\n this._cursor.offset = this._parent._cursor.offset;\n\n switch(this.size) {\n case 0:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, (this.parent._rawo.byteLength - this._cursor.offset));\n break;\n case 1:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, this.largesize);\n break;\n default:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, this.size);\n }\n\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n\n if (this._boxContainers.indexOf(this.type) !== -1) {\n for (var i = 0; i < this.boxes.length; i++) {\n this.boxes[i].write();\n }\n } \n\n if (this._data) {\n this._writeData(this._data);\n }\n\n this._parent._cursor.offset += this.size;\n\n return this.size;\n};\n\nISOBox.prototype._writeInt = function(size, value) {\n if (this._rawo) {\n var offset = this._cursor.offset - this._rawo.byteOffset;\n switch(size) {\n case 8:\n this._rawo.setInt8(offset, value);\n break;\n case 16:\n this._rawo.setInt16(offset, value);\n break;\n case 32:\n this._rawo.setInt32(offset, value);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n var s1 = Math.floor(value / Math.pow(2,32));\n var s2 = value - (s1 * Math.pow(2,32));\n this._rawo.setUint32(offset, s1);\n this._rawo.setUint32(offset + 4, s2);\n break;\n }\n this._cursor.offset += (size >> 3);\n } else {\n this.size += (size >> 3);\n }\n};\n\nISOBox.prototype._writeUint = function(size, value) {\n\n if (this._rawo) {\n var offset = this._cursor.offset - this._rawo.byteOffset,\n s1, s2;\n switch(size) {\n case 8:\n this._rawo.setUint8(offset, value);\n break;\n case 16:\n this._rawo.setUint16(offset, value);\n break;\n case 24:\n s1 = (value & 0xFFFF00) >> 8;\n s2 = (value & 0x0000FF);\n this._rawo.setUint16(offset, s1);\n this._rawo.setUint8(offset + 2, s2);\n break;\n case 32:\n this._rawo.setUint32(offset, value);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n s1 = Math.floor(value / Math.pow(2,32));\n s2 = value - (s1 * Math.pow(2,32));\n this._rawo.setUint32(offset, s1);\n this._rawo.setUint32(offset + 4, s2);\n break;\n }\n this._cursor.offset += (size >> 3);\n } else {\n this.size += (size >> 3);\n }\n};\n\nISOBox.prototype._writeString = function(size, str) {\n for (var c = 0; c < size; c++) {\n this._writeUint(8, str.charCodeAt(c));\n }\n};\n\nISOBox.prototype._writeTerminatedString = function(str) {\n if (str.length === 0) {\n return;\n }\n for (var c = 0; c < str.length; c++) {\n this._writeUint(8, str.charCodeAt(c));\n }\n this._writeUint(8, 0);\n};\n\nISOBox.prototype._writeTemplate = function(size, value) {\n var pre = Math.floor(value);\n var post = (value - pre) * Math.pow(2, size / 2);\n this._writeUint(size / 2, pre);\n this._writeUint(size / 2, post);\n};\n\nISOBox.prototype._writeData = function(data) {\n var i;\n //data to copy\n if (data) {\n if (this._rawo) {\n //Array and Uint8Array has also to be managed\n if (data instanceof Array) {\n var offset = this._cursor.offset - this._rawo.byteOffset;\n for (var i = 0; i < data.length; i++) {\n this._rawo.setInt8(offset + i, data[i]);\n }\n this._cursor.offset += data.length;\n } \n\n if (data instanceof Uint8Array) {\n this._root.bytes.set(data, this._cursor.offset);\n this._cursor.offset += data.length;\n }\n\n } else {\n //nothing to copy only size to compute\n this.size += data.length;\n }\n }\n};\n\nISOBox.prototype._writeUTF8String = function(string) {\n var u = ISOBoxer.Utils.utf8ToByteArray(string);\n if (this._rawo) {\n var dataView = new DataView(this._rawo.buffer, this._cursor.offset, u.length);\n for (var i = 0; i < u.length; i++) {\n dataView.setUint8(i, u[i]);\n }\n } else {\n this.size += u.length;\n }\n};\n\nISOBox.prototype._writeField = function(type, size, value) {\n switch (type) {\n case 'uint':\n this._writeUint(size, value);\n break;\n case 'int':\n this._writeInt(size, value);\n break;\n case 'template':\n this._writeTemplate(size, value);\n break;\n case 'string':\n if (size == -1) {\n this._writeTerminatedString(value);\n } else {\n this._writeString(size, value);\n }\n break;\n case 'data':\n this._writeData(value);\n break;\n case 'utf8':\n this._writeUTF8String(value);\n break;\n default:\n break;\n }\n};\n\n// ISO/IEC 14496-12:202x - 12.2.8 Audio rendering indication box\nISOBox.prototype._boxProcessors['ardi'] = function() {\n this._procFullBox();\n this._procField('audio_rendering_indication', 'uint', 8);\n};\n\n// ISO/IEC 14496-15:2014 - avc1/2/3/4, hev1, hvc1, encv\nISOBox.prototype._boxProcessors['avc1'] =\nISOBox.prototype._boxProcessors['avc2'] =\nISOBox.prototype._boxProcessors['avc3'] =\nISOBox.prototype._boxProcessors['avc4'] =\nISOBox.prototype._boxProcessors['hvc1'] =\nISOBox.prototype._boxProcessors['hev1'] =\nISOBox.prototype._boxProcessors['encv'] = function() {\n // SampleEntry fields\n this._procFieldArray('reserved1', 6, 'uint', 8);\n this._procField('data_reference_index', 'uint', 16);\n // VisualSampleEntry fields\n this._procField('pre_defined1', 'uint', 16);\n this._procField('reserved2', 'uint', 16);\n this._procFieldArray('pre_defined2', 3, 'uint', 32);\n this._procField('width', 'uint', 16);\n this._procField('height', 'uint', 16);\n this._procField('horizresolution', 'template', 32);\n this._procField('vertresolution', 'template', 32);\n this._procField('reserved3', 'uint', 32);\n this._procField('frame_count', 'uint', 16);\n this._procFieldArray('compressorname', 32,'uint', 8);\n this._procField('depth', 'uint', 16);\n this._procField('pre_defined3', 'int', 16);\n // Codec-specific fields\n this._procField('config', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.6.1.3 Composition Time To Sample Box\nISOBox.prototype._boxProcessors['ctts'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'sample_count', 'uint', 32);\n this._procEntryField(entry, 'sample_offset', (this.version === 1) ? 'int' : 'uint', 32);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.7.2 Data Reference Box\nISOBox.prototype._boxProcessors['dref'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procSubBoxes('entries', this.entry_count);\n};\n\n// ISO/IEC 14496-12:202x - 8.4.6 Extended language tag\nISOBox.prototype._boxProcessors['elng'] = function() {\n this._procFullBox();\n this._procField('extended_language', 'utf8string');\n};\n\n// ISO/IEC 14496-12:2012 - 8.6.6 Edit List Box\nISOBox.prototype._boxProcessors['elst'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'segment_duration', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'media_time', 'int', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'media_rate_integer', 'int', 16);\n this._procEntryField(entry, 'media_rate_fraction', 'int', 16);\n });\n};\n\n// ISO/IEC 23009-1:2014 - 5.10.3.3 Event Message Box\nISOBox.prototype._boxProcessors['emsg'] = function() {\n this._procFullBox();\n if (this.version == 1) {\n this._procField('timescale', 'uint', 32);\n this._procField('presentation_time', 'uint', 64);\n this._procField('event_duration', 'uint', 32);\n this._procField('id', 'uint', 32);\n this._procField('scheme_id_uri', 'string', -1);\n this._procField('value', 'string', -1);\n } else {\n this._procField('scheme_id_uri', 'string', -1);\n this._procField('value', 'string', -1);\n this._procField('timescale', 'uint', 32);\n this._procField('presentation_time_delta', 'uint', 32);\n this._procField('event_duration', 'uint', 32);\n this._procField('id', 'uint', 32);\n }\n this._procField('message_data', 'data', -1);\n};\n// ISO/IEC 14496-12:2012 - 8.1.2 Free Space Box\nISOBox.prototype._boxProcessors['free'] = ISOBox.prototype._boxProcessors['skip'] = function() {\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.12.2 Original Format Box\nISOBox.prototype._boxProcessors['frma'] = function() {\n this._procField('data_format', 'uint', 32);\n};\n// ISO/IEC 14496-12:2012 - 4.3 File Type Box / 8.16.2 Segment Type Box\nISOBox.prototype._boxProcessors['ftyp'] =\nISOBox.prototype._boxProcessors['styp'] = function() {\n this._procField('major_brand', 'string', 4);\n this._procField('minor_version', 'uint', 32);\n var nbCompatibleBrands = -1;\n if (this._parsing) {\n nbCompatibleBrands = (this._raw.byteLength - (this._cursor.offset - this._raw.byteOffset)) / 4;\n }\n this._procFieldArray('compatible_brands', nbCompatibleBrands, 'string', 4);\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.3 Handler Reference Box\nISOBox.prototype._boxProcessors['hdlr'] = function() {\n this._procFullBox();\n this._procField('pre_defined', 'uint', 32);\n this._procField('handler_type', 'string', 4);\n this._procFieldArray('reserved', 3, 'uint', 32);\n this._procField('name', 'string', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 9.1.4.1 Identified media data box\nISOBox.prototype._boxProcessors['imda'] = function() {\n this._procField('imda_identifier', 'uint', 32);\n // until the end of the box\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:202x - 8.10.4 Track kind box\nISOBox.prototype._boxProcessors['kind'] = function() {\n this._procFullBox();\n\n this._procField('schemeURI', 'utf8string');\n this._procField('value', 'utf8string');\n};\n\n// ISO/IEC 14496-12:202x - 8.10.5 Label box\nISOBox.prototype._boxProcessors['labl'] = function() {\n this._procFullBox();\n this.is_group_label = (this.flags & 0x1) != 0;\n this._procField('label_id', 'uint', 16);\n this._procField('language', 'utf8string');\n this._procField('label', 'utf8string');\n};\n\n// ISO/IEC 14496-12:2012 - 8.1.1 Media Data Box\nISOBox.prototype._boxProcessors['mdat'] = function() {\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.2 Media Header Box\nISOBox.prototype._boxProcessors['mdhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('timescale', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n if (!this._parsing && typeof this.language === 'string') {\n // In case of writing and language has been set as a string, then convert it into char codes array\n this.language = ((this.language.charCodeAt(0) - 0x60) << 10) |\n ((this.language.charCodeAt(1) - 0x60) << 5) |\n ((this.language.charCodeAt(2) - 0x60));\n }\n this._procField('language', 'uint', 16);\n if (this._parsing) {\n this.language = String.fromCharCode(((this.language >> 10) & 0x1F) + 0x60,\n ((this.language >> 5) & 0x1F) + 0x60,\n (this.language & 0x1F) + 0x60);\n }\n this._procField('pre_defined', 'uint', 16);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.2 Movie Extends Header Box\nISOBox.prototype._boxProcessors['mehd'] = function() {\n this._procFullBox();\n this._procField('fragment_duration', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:202x - 8.11.1 Meta box\nISOBox.prototype._boxProcessors['meta'] = function() {\n this._procFullBox();\n\n /* rest of the boxes will be read by _parseContainerBox */\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.5 Movie Fragment Header Box\nISOBox.prototype._boxProcessors['mfhd'] = function() {\n this._procFullBox();\n this._procField('sequence_number', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.11 Movie Fragment Random Access Box\nISOBox.prototype._boxProcessors['mfro'] = function() {\n this._procFullBox();\n this._procField('mfra_size', 'uint', 32); // Called mfra_size to distinguish from the normal \"size\" attribute of a box\n};\n\n\n// ISO/IEC 14496-12:2012 - 8.5.2.2 mp4a box (use AudioSampleEntry definition and naming)\nISOBox.prototype._boxProcessors['mp4a'] = ISOBox.prototype._boxProcessors['enca'] = function() {\n // SampleEntry fields\n this._procFieldArray('reserved1', 6, 'uint', 8);\n this._procField('data_reference_index', 'uint', 16);\n // AudioSampleEntry fields\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procField('channelcount', 'uint', 16);\n this._procField('samplesize', 'uint', 16);\n this._procField('pre_defined', 'uint', 16);\n this._procField('reserved3', 'uint', 16);\n this._procField('samplerate', 'template', 32);\n // ESDescriptor fields\n this._procField('esds', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.2.2 Movie Header Box\nISOBox.prototype._boxProcessors['mvhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('timescale', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('rate', 'template', 32);\n this._procField('volume', 'template', 16);\n this._procField('reserved1', 'uint', 16);\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procFieldArray('matrix', 9, 'template', 32);\n this._procFieldArray('pre_defined', 6,'uint', 32);\n this._procField('next_track_ID', 'uint', 32);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Cue Payload Box.\nISOBox.prototype._boxProcessors['payl'] = function() {\n this._procField('cue_text', 'utf8');\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.5 Producer Reference Time\nISOBox.prototype._boxProcessors['prft'] = function() {\n this._procFullBox();\n this._procField('reference_track_ID', 'uint', 32);\n this._procField('ntp_timestamp_sec', 'uint', 32);\n this._procField('ntp_timestamp_frac', 'uint', 32);\n this._procField('media_time', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:202x - 8.18.4.1 Preselection group box\nISOBox.prototype._boxProcessors['prsl'] = function() {\n this._procFullBox();\n this._procField('group_id', 'uint', 32);\n this._procField('num_entities_in_group', 'uint', 32);\n this._procEntries('entities', this.num_entities_in_group, function(entry) {\n this._procEntryField(entry, 'entity_id', 'uint', 32);\n });\n if (this.flags & 0x1000) this._procField('preselection_tag', 'utf8string');\n if (this.flags & 0x2000) this._procField('selection_priority', 'uint', 8);\n if (this.flags & 0x4000) this._procField('interleaving_tag', 'utf8string');\n\n /* rest of the boxes will be read by _parseContainerBox */\n};\n\n//ISO/IEC 23001-7:2011 - 8.1 Protection System Specific Header Box\nISOBox.prototype._boxProcessors['pssh'] = function() {\n this._procFullBox();\n \n this._procFieldArray('SystemID', 16, 'uint', 8);\n this._procField('DataSize', 'uint', 32);\n this._procFieldArray('Data', this.DataSize, 'uint', 8);\n};\n// ISO/IEC 14496-12:2012 - 8.12.5 Scheme Type Box\nISOBox.prototype._boxProcessors['schm'] = function() {\n this._procFullBox();\n \n this._procField('scheme_type', 'uint', 32);\n this._procField('scheme_version', 'uint', 32);\n\n if (this.flags & 0x000001) {\n this._procField('scheme_uri', 'string', -1);\n }\n};\n// ISO/IEC 14496-12:2012 - 8.6.4.1 sdtp box \nISOBox.prototype._boxProcessors['sdtp'] = function() {\n this._procFullBox();\n\n var sample_count = -1;\n if (this._parsing) {\n sample_count = (this._raw.byteLength - (this._cursor.offset - this._raw.byteOffset));\n }\n\n this._procFieldArray('sample_dependency_table', sample_count, 'uint', 8);\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.3 Segment Index Box\nISOBox.prototype._boxProcessors['sidx'] = function() {\n this._procFullBox();\n this._procField('reference_ID', 'uint', 32);\n this._procField('timescale', 'uint', 32);\n this._procField('earliest_presentation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('first_offset', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('reserved', 'uint', 16);\n this._procField('reference_count', 'uint', 16);\n this._procEntries('references', this.reference_count, function(entry) {\n if (!this._parsing) {\n entry.reference = (entry.reference_type & 0x00000001) << 31;\n entry.reference |= (entry.referenced_size & 0x7FFFFFFF);\n entry.sap = (entry.starts_with_SAP & 0x00000001) << 31;\n entry.sap |= (entry.SAP_type & 0x00000003) << 28;\n entry.sap |= (entry.SAP_delta_time & 0x0FFFFFFF);\n }\n this._procEntryField(entry, 'reference', 'uint', 32);\n this._procEntryField(entry, 'subsegment_duration', 'uint', 32);\n this._procEntryField(entry, 'sap', 'uint', 32);\n if (this._parsing) {\n entry.reference_type = (entry.reference >> 31) & 0x00000001;\n entry.referenced_size = entry.reference & 0x7FFFFFFF;\n entry.starts_with_SAP = (entry.sap >> 31) & 0x00000001;\n entry.SAP_type = (entry.sap >> 28) & 0x00000007;\n entry.SAP_delta_time = (entry.sap & 0x0FFFFFFF);\n }\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.5.3 Sound Media Header Box\nISOBox.prototype._boxProcessors['smhd'] = function() {\n this._procFullBox();\n this._procField('balance', 'uint', 16);\n this._procField('reserved', 'uint', 16);\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.4 Subsegment Index Box\nISOBox.prototype._boxProcessors['ssix'] = function() {\n this._procFullBox();\n this._procField('subsegment_count', 'uint', 32);\n this._procEntries('subsegments', this.subsegment_count, function(subsegment) {\n this._procEntryField(subsegment, 'ranges_count', 'uint', 32);\n this._procSubEntries(subsegment, 'ranges', subsegment.ranges_count, function(range) {\n this._procEntryField(range, 'level', 'uint', 8);\n this._procEntryField(range, 'range_size', 'uint', 24);\n });\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.5.2 Sample Description Box\nISOBox.prototype._boxProcessors['stsd'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procSubBoxes('entries', this.entry_count);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Cue Settings Box.\nISOBox.prototype._boxProcessors['sttg'] = function() {\n this._procField('settings', 'utf8');\n};\n\n// ISO/IEC 14496-12:2012 - 8.6.1.2 Decoding Time To Sample Box\nISOBox.prototype._boxProcessors['stts'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'sample_count', 'uint', 32);\n this._procEntryField(entry, 'sample_delta', 'uint', 32);\n });\n};\n\n// ISO/IEC 14496-12:2015 - 8.7.7 Sub-Sample Information Box\nISOBox.prototype._boxProcessors['subs'] = function () {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'sample_delta', 'uint', 32);\n this._procEntryField(entry, 'subsample_count', 'uint', 16);\n this._procSubEntries(entry, 'subsamples', entry.subsample_count, function(subsample) {\n this._procEntryField(subsample, 'subsample_size', 'uint', (this.version === 1) ? 32 : 16);\n this._procEntryField(subsample, 'subsample_priority', 'uint', 8);\n this._procEntryField(subsample, 'discardable', 'uint', 8);\n this._procEntryField(subsample, 'codec_specific_parameters', 'uint', 32);\n });\n });\n};\n\n//ISO/IEC 23001-7:2011 - 8.2 Track Encryption Box\nISOBox.prototype._boxProcessors['tenc'] = function() {\n this._procFullBox();\n\n this._procField('default_IsEncrypted', 'uint', 24);\n this._procField('default_IV_size', 'uint', 8);\n this._procFieldArray('default_KID', 16, 'uint', 8);\n };\n\n// ISO/IEC 14496-12:2012 - 8.8.12 Track Fragmnent Decode Time\nISOBox.prototype._boxProcessors['tfdt'] = function() {\n this._procFullBox();\n this._procField('baseMediaDecodeTime', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.7 Track Fragment Header Box\nISOBox.prototype._boxProcessors['tfhd'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n if (this.flags & 0x01) this._procField('base_data_offset', 'uint', 64);\n if (this.flags & 0x02) this._procField('sample_description_offset', 'uint', 32);\n if (this.flags & 0x08) this._procField('default_sample_duration', 'uint', 32);\n if (this.flags & 0x10) this._procField('default_sample_size', 'uint', 32);\n if (this.flags & 0x20) this._procField('default_sample_flags', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.10 Track Fragment Random Access Box\nISOBox.prototype._boxProcessors['tfra'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n if (!this._parsing) {\n this.reserved = 0;\n this.reserved |= (this.length_size_of_traf_num & 0x00000030) << 4;\n this.reserved |= (this.length_size_of_trun_num & 0x0000000C) << 2;\n this.reserved |= (this.length_size_of_sample_num & 0x00000003);\n }\n this._procField('reserved', 'uint', 32);\n if (this._parsing) {\n this.length_size_of_traf_num = (this.reserved & 0x00000030) >> 4;\n this.length_size_of_trun_num = (this.reserved & 0x0000000C) >> 2;\n this.length_size_of_sample_num = (this.reserved & 0x00000003);\n }\n this._procField('number_of_entry', 'uint', 32);\n this._procEntries('entries', this.number_of_entry, function(entry) {\n this._procEntryField(entry, 'time', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'moof_offset', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'traf_number', 'uint', (this.length_size_of_traf_num + 1) * 8);\n this._procEntryField(entry, 'trun_number', 'uint', (this.length_size_of_trun_num + 1) * 8);\n this._procEntryField(entry, 'sample_number', 'uint', (this.length_size_of_sample_num + 1) * 8);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.3.2 Track Header Box\nISOBox.prototype._boxProcessors['tkhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('track_ID', 'uint', 32);\n this._procField('reserved1', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procField('layer', 'uint', 16);\n this._procField('alternate_group', 'uint', 16);\n this._procField('volume', 'template', 16);\n this._procField('reserved3', 'uint', 16);\n this._procFieldArray('matrix', 9, 'template', 32);\n this._procField('width', 'template', 32);\n this._procField('height', 'template', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.3 Track Extends Box\nISOBox.prototype._boxProcessors['trex'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n this._procField('default_sample_description_index', 'uint', 32);\n this._procField('default_sample_duration', 'uint', 32);\n this._procField('default_sample_size', 'uint', 32);\n this._procField('default_sample_flags', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.8 Track Run Box\n// Note: the 'trun' box has a direct relation to the 'tfhd' box for defaults.\n// These defaults are not set explicitly here, but are left to resolve for the user.\nISOBox.prototype._boxProcessors['trun'] = function() {\n this._procFullBox();\n this._procField('sample_count', 'uint', 32);\n if (this.flags & 0x1) this._procField('data_offset', 'int', 32);\n if (this.flags & 0x4) this._procField('first_sample_flags', 'uint', 32);\n this._procEntries('samples', this.sample_count, function(sample) {\n if (this.flags & 0x100) this._procEntryField(sample, 'sample_duration', 'uint', 32);\n if (this.flags & 0x200) this._procEntryField(sample, 'sample_size', 'uint', 32);\n if (this.flags & 0x400) this._procEntryField(sample, 'sample_flags', 'uint', 32);\n if (this.flags & 0x800) this._procEntryField(sample, 'sample_composition_time_offset', (this.version === 1) ? 'int' : 'uint', 32);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.7.2 Data Reference Box\nISOBox.prototype._boxProcessors['url '] = ISOBox.prototype._boxProcessors['urn '] = function() {\n this._procFullBox();\n if (this.type === 'urn ') {\n this._procField('name', 'string', -1);\n }\n this._procField('location', 'string', -1);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Source Label Box\nISOBox.prototype._boxProcessors['vlab'] = function() {\n this._procField('source_label', 'utf8');\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.5.2 Video Media Header Box\nISOBox.prototype._boxProcessors['vmhd'] = function() {\n this._procFullBox();\n this._procField('graphicsmode', 'uint', 16);\n this._procFieldArray('opcolor', 3, 'uint', 16);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Configuration Box\nISOBox.prototype._boxProcessors['vttC'] = function() {\n this._procField('config', 'utf8');\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Empty Sample Box\nISOBox.prototype._boxProcessors['vtte'] = function() {\n // Nothing should happen here.\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n",";(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // character classes and tokens\n var whitespace = '\\r\\n\\t '\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var number = '0124356789'\n var letter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\n // (Letter | \"_\" | \":\")\n var quote = '\\'\"'\n var attribEnd = whitespace + '>'\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // turn all the string character sets into character class objects.\n whitespace = charClass(whitespace)\n number = charClass(number)\n letter = charClass(letter)\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040\\.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040\\.\\d-]/\n\n quote = charClass(quote)\n attribEnd = charClass(attribEnd)\n\n function charClass (str) {\n return str.split('').reduce(function (s, c) {\n s[c] = true\n return s\n }, {})\n }\n\n function isRegExp (c) {\n return Object.prototype.toString.call(c) === '[object RegExp]'\n }\n\n function is (charclass, c) {\n return isRegExp(charclass) ? !!c.match(charclass) : charclass[c]\n }\n\n function not (charclass, c) {\n return !is(charclass, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // \n SCRIPT: S++, // ', pos);\n children = [S.slice(start, pos)];\n pos += 9;\n } else if (tagName == \"style\") {\n var start = pos + 1;\n pos = S.indexOf('', pos);\n children = [S.slice(start, pos)];\n pos += 8;\n } else if (NoChildNodes.indexOf(tagName) === -1) {\n pos++;\n // dash.js - BEGIN\n // Add parent to parseChildren()\n children = parseChildren(tagName, node);\n // dash.js - END\n } else {\n pos++\n }\n } else {\n pos++;\n }\n // dash.js - BEGIN\n node.__children = children;\n return node;\n // dash.js - END\n }\n\n /**\n * is parsing a string, that starts with a char and with the same usually ' or \"\n */\n\n function parseString() {\n var startChar = S[pos];\n var startpos = pos + 1;\n pos = S.indexOf(startChar, startpos)\n return S.slice(startpos, pos);\n }\n\n /**\n *\n */\n function findElements() {\n var r = new RegExp('\\\\s' + options.attrName + '\\\\s*=[\\'\"]' + options.attrValue + '[\\'\"]').exec(S)\n if (r) {\n return r.index;\n } else {\n return -1;\n }\n }\n\n var out = null;\n if (options.attrValue !== undefined) {\n options.attrName = options.attrName || 'id';\n var out = [];\n\n while ((pos = findElements()) !== -1) {\n pos = S.lastIndexOf('<', pos);\n if (pos !== -1) {\n out.push(parseNode());\n }\n S = S.substr(pos);\n pos = 0;\n }\n } else if (options.parseNode) {\n out = parseNode()\n } else {\n out = parseChildren('');\n }\n\n if (options.filter) {\n out = filter(out, options.filter);\n }\n\n if (options.simplify) {\n return simplify(Array.isArray(out) ? out : [out]);\n }\n\n if (options.setPos) {\n out.pos = pos;\n }\n\n return out;\n}\n\n/**\n * transform the DomObject to an object that is like the object of PHP`s simple_xmp_load_*() methods.\n * this format helps you to write that is more likely to keep your program working, even if there a small changes in the XML schema.\n * be aware, that it is not possible to reproduce the original xml from a simplified version, because the order of elements is not saved.\n * therefore your program will be more flexible and easier to read.\n *\n * @param {tNode[]} children the childrenList\n */\nexport function simplify(children) {\n var out = {};\n if (!children.length) {\n return '';\n }\n\n if (children.length === 1 && typeof children[0] == 'string') {\n return children[0];\n }\n // map each object\n children.forEach(function(child) {\n if (typeof child !== 'object') {\n return;\n }\n if (!out[child.tagName])\n out[child.tagName] = [];\n var kids = simplify(child.children);\n out[child.tagName].push(kids);\n if (Object.keys(child.attributes).length && typeof kids !== 'string') {\n kids._attributes = child.attributes;\n }\n });\n\n for (var i in out) {\n if (out[i].length == 1) {\n out[i] = out[i][0];\n }\n }\n\n return out;\n};\n\n\n/**\n * similar to simplify, but lost less\n *\n * @param {tNode[]} children the childrenList\n */\nexport function simplifyLostLess(children, parentAttributes = {}) {\n var out = {};\n if (!children.length) {\n return out;\n }\n\n if (children.length === 1 && typeof children[0] == 'string') {\n return Object.keys(parentAttributes).length ? {\n _attributes: parentAttributes,\n value: children[0]\n } : children[0];\n }\n // map each object\n children.forEach(function(child) {\n if (typeof child !== 'object') {\n return;\n }\n if (!out[child.tagName])\n out[child.tagName] = [];\n var kids = simplifyLostLess(child.children || [], child.attributes);\n out[child.tagName].push(kids);\n if (Object.keys(child.attributes).length) {\n kids._attributes = child.attributes;\n }\n });\n\n return out;\n};\n\n/**\n * behaves the same way as Array.filter, if the filter method return true, the element is in the resultList\n * @params children{Array} the children of a node\n * @param f{function} the filter method\n */\nexport function filter(children, f, dept = 0, path = '') {\n var out = [];\n children.forEach(function(child, i) {\n if (typeof(child) === 'object' && f(child, i, dept, path)) out.push(child);\n if (child.children) {\n var kids = filter(child.children, f, dept + 1, (path ? path + '.' : '') + i + '.' + child.tagName);\n out = out.concat(kids);\n }\n });\n return out;\n};\n\n/**\n * stringify a previously parsed string object.\n * this is useful,\n * 1. to remove whitespace\n * 2. to recreate xml data, with some changed data.\n * @param {tNode} O the object to Stringify\n */\nexport function stringify(O) {\n var out = '';\n\n function writeChildren(O) {\n if (O) {\n for (var i = 0; i < O.length; i++) {\n if (typeof O[i] == 'string') {\n out += O[i].trim();\n } else {\n writeNode(O[i]);\n }\n }\n }\n }\n\n function writeNode(N) {\n out += \"<\" + N.tagName;\n for (var i in N.attributes) {\n if (N.attributes[i] === null) {\n out += ' ' + i;\n } else if (N.attributes[i].indexOf('\"') === -1) {\n out += ' ' + i + '=\"' + N.attributes[i].trim() + '\"';\n } else {\n out += ' ' + i + \"='\" + N.attributes[i].trim() + \"'\";\n }\n }\n if (N.tagName[0] === '?') {\n out += '?>';\n return;\n }\n out += '>';\n writeChildren(N.children);\n out += '';\n }\n writeChildren(O);\n\n return out;\n};\n\n\n/**\n * use this method to read the text content, of some node.\n * It is great if you have mixed content like:\n * this text has some big text and a link\n * @return {string}\n */\nexport function toContentString(tDom) {\n if (Array.isArray(tDom)) {\n var out = '';\n tDom.forEach(function(e) {\n out += ' ' + toContentString(e);\n out = out.trim();\n });\n return out;\n } else if (typeof tDom === 'object') {\n return toContentString(tDom.children)\n } else {\n return ' ' + tDom;\n }\n};\n\nexport function getElementById(S, id, simplified) {\n var out = parse(S, {\n attrValue: id\n });\n return simplified ? tXml.simplify(out) : out[0];\n};\n\nexport function getElementsByClassName(S, classname, simplified) {\n const out = parse(S, {\n attrName: 'class',\n attrValue: '[a-zA-Z0-9- ]*' + classname + '[a-zA-Z0-9- ]*'\n });\n return simplified ? tXml.simplify(out) : out;\n};\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport DashConstants from '../constants/DashConstants.js';\nimport ObjectIron from './objectiron.js';\nimport DurationMatcher from './matchers/DurationMatcher.js';\nimport DateTimeMatcher from './matchers/DateTimeMatcher.js';\nimport NumericMatcher from './matchers/NumericMatcher.js';\nimport LangMatcher from './matchers/LangMatcher.js';\nimport RepresentationBaseValuesMap from './maps/RepresentationBaseValuesMap.js';\nimport SegmentValuesMap from './maps/SegmentValuesMap.js';\nimport * as tXml from '../../../externals/tXml.js';\n\n// List of node that shall be represented as arrays\nconst arrayNodes = [\n DashConstants.PERIOD,\n DashConstants.BASE_URL,\n DashConstants.ADAPTATION_SET,\n DashConstants.REPRESENTATION,\n DashConstants.CONTENT_PROTECTION,\n DashConstants.ROLE,\n DashConstants.ACCESSIBILITY,\n DashConstants.AUDIO_CHANNEL_CONFIGURATION,\n DashConstants.CONTENT_COMPONENT,\n DashConstants.ESSENTIAL_PROPERTY,\n DashConstants.LABEL,\n DashConstants.S,\n DashConstants.SEGMENT_URL,\n DashConstants.EVENT,\n DashConstants.EVENT_STREAM,\n DashConstants.LOCATION,\n DashConstants.SERVICE_DESCRIPTION,\n DashConstants.SUPPLEMENTAL_PROPERTY,\n DashConstants.METRICS,\n DashConstants.REPORTING,\n DashConstants.PATCH_LOCATION,\n DashConstants.REPLACE,\n DashConstants.ADD,\n DashConstants.REMOVE,\n DashConstants.UTC_TIMING,\n DashConstants.INBAND_EVENT_STREAM,\n DashConstants.PRODUCER_REFERENCE_TIME,\n DashConstants.CONTENT_STEERING\n];\n\nfunction DashParser(config) {\n\n config = config || {};\n const context = this.context;\n const debug = config.debug;\n\n let instance,\n logger,\n matchers,\n objectIron;\n\n function setup() {\n logger = debug.getLogger(instance);\n matchers = [\n new DurationMatcher(),\n new DateTimeMatcher(),\n new NumericMatcher(),\n new LangMatcher()\n ];\n\n objectIron = ObjectIron(context).create({\n adaptationset: new RepresentationBaseValuesMap(),\n period: new SegmentValuesMap()\n });\n }\n\n function getIron() {\n return objectIron;\n }\n\n function parse(data) {\n let manifest;\n const startTime = window.performance.now();\n\n manifest = parseXml(data);\n\n if (!manifest) {\n throw new Error('failed to parse the manifest');\n }\n\n // handle full MPD and Patch ironing separately\n if (manifest.Patch) {\n manifest = manifest.Patch; // drop root reference\n // apply iron to patch operations individually\n if (manifest.add) {\n manifest.add.forEach((operand) => objectIron.run(operand));\n }\n if (manifest.replace) {\n manifest.replace.forEach((operand) => objectIron.run(operand));\n }\n // note that we don't need to iron remove as they contain no children\n } else {\n manifest = manifest.MPD; // drop root reference\n objectIron.run(manifest);\n }\n\n const parsedTime = window.performance.now();\n logger.info('Parsing complete: ' + (parsedTime - startTime).toPrecision(3) + 'ms');\n\n manifest.protocol = 'DASH';\n\n return manifest;\n }\n\n\n function parseXml(data) {\n try {\n let root = tXml.parse(data, {\n parseNode: true,\n attrMatchers: matchers,\n nodesAsArray: arrayNodes\n });\n let ret = {};\n // If root element is xml node, then get first child node as root\n if (root.tagName.toLowerCase().indexOf('xml') !== -1) {\n for (let key in root) {\n if (Array.isArray(root[key])) {\n ret[key] = root[key][0];\n break;\n } else if (typeof root[key] === 'object') {\n ret[key] = root[key];\n break;\n }\n }\n } else {\n ret[root.tagName] = root;\n delete root.tagName;\n }\n return ret;\n } catch (e) {\n return null;\n }\n }\n\n instance = {\n getIron: getIron,\n parseXml: parseXml,\n parse: parse\n };\n\n setup();\n\n return instance;\n}\n\nDashParser.__dashjs_factory_name = 'DashParser';\nexport default FactoryMaker.getClassFactory(DashParser);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from './constants/Constants.js';\nimport DashConstants from '../dash/constants/DashConstants.js';\nimport XlinkController from './controllers/XlinkController.js';\nimport URLLoader from './net/URLLoader.js';\nimport URLUtils from './utils/URLUtils.js';\nimport TextRequest from './vo/TextRequest.js';\nimport DashJSError from './vo/DashJSError.js';\nimport {HTTPRequest} from './vo/metrics/HTTPRequest.js';\nimport EventBus from '../core/EventBus.js';\nimport Events from '../core/events/Events.js';\nimport Errors from '../core/errors/Errors.js';\nimport FactoryMaker from '../core/FactoryMaker.js';\nimport DashParser from '../dash/parser/DashParser.js';\n\nfunction ManifestLoader(config) {\n\n config = config || {};\n const context = this.context;\n const debug = config.debug;\n const settings = config.settings;\n const eventBus = EventBus(context).getInstance();\n const urlUtils = URLUtils(context).getInstance();\n\n let instance,\n logger,\n urlLoader,\n xlinkController,\n parser;\n\n let mssHandler = config.mssHandler;\n let errHandler = config.errHandler;\n\n function setup() {\n logger = debug.getLogger(instance);\n eventBus.on(Events.XLINK_READY, onXlinkReady, instance);\n\n urlLoader = URLLoader(context).create({\n errHandler: config.errHandler,\n dashMetrics: config.dashMetrics,\n mediaPlayerModel: config.mediaPlayerModel,\n urlUtils: urlUtils,\n constants: Constants,\n dashConstants: DashConstants,\n errors: Errors,\n requestTimeout: config.settings.get().streaming.manifestRequestTimeout\n });\n\n xlinkController = XlinkController(context).create({\n errHandler: errHandler,\n dashMetrics: config.dashMetrics,\n mediaPlayerModel: config.mediaPlayerModel,\n settings: config.settings\n });\n\n parser = null;\n }\n\n function onXlinkReady(event) {\n eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, { manifest: event.manifest });\n }\n\n function createParser(data) {\n let parser = null;\n // Analyze manifest content to detect protocol and select appropriate parser\n if (data.indexOf('SmoothStreamingMedia') > -1) {\n //do some business to transform it into a Dash Manifest\n if (mssHandler) {\n parser = mssHandler.createMssParser();\n mssHandler.createMssFragmentProcessor();\n mssHandler.registerEvents();\n }\n return parser;\n } else if (data.indexOf('MPD') > -1 || data.indexOf('Patch') > -1) {\n return DashParser(context).create({ debug: debug });\n } else {\n return parser;\n }\n }\n\n function load(url, serviceLocation = null, queryParams = null) {\n\n const requestStartDate = new Date();\n const request = new TextRequest(url, HTTPRequest.MPD_TYPE);\n\n if (serviceLocation) {\n request.serviceLocation = serviceLocation;\n }\n\n if (queryParams) {\n request.queryParams = queryParams;\n }\n\n if (!request.startDate) {\n request.startDate = requestStartDate;\n }\n\n eventBus.trigger(\n Events.MANIFEST_LOADING_STARTED, {\n request\n }\n );\n\n urlLoader.load({\n request: request,\n success: function (data, textStatus, responseURL) {\n // Manage situations in which success is called after calling reset\n if (!xlinkController) {\n return;\n }\n\n let actualUrl,\n baseUri,\n manifest;\n\n // Handle redirects for the MPD - as per RFC3986 Section 5.1.3\n // also handily resolves relative MPD URLs to absolute\n if (responseURL && responseURL !== url) {\n baseUri = urlUtils.parseBaseUrl(responseURL);\n actualUrl = responseURL;\n } else {\n // usually this case will be caught and resolved by\n // responseURL above but it is not available for IE11 and Edge/12 and Edge/13\n // baseUri must be absolute for BaseURL resolution later\n if (urlUtils.isRelative(url)) {\n url = urlUtils.resolve(url, window.location.href);\n }\n\n baseUri = urlUtils.parseBaseUrl(url);\n }\n\n // A response of no content implies in-memory is properly up to date\n if (textStatus == 'No Content') {\n eventBus.trigger(\n Events.INTERNAL_MANIFEST_LOADED, {\n manifest: null\n }\n );\n return;\n }\n\n // Create parser according to manifest type\n if (parser === null) {\n parser = createParser(data);\n }\n\n if (parser === null) {\n eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, {\n manifest: null,\n error: new DashJSError(\n Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE,\n Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_MESSAGE + `${url}`\n )\n });\n return;\n }\n\n // init xlinkcontroller with created parser\n xlinkController.setParser(parser);\n\n try {\n manifest = parser.parse(data);\n } catch (e) {\n eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, {\n manifest: null,\n error: new DashJSError(\n Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE,\n Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_MESSAGE + `${url}`\n )\n });\n return;\n }\n\n if (manifest) {\n manifest.url = actualUrl || url;\n\n // URL from which the MPD was originally retrieved (MPD updates will not change this value)\n if (!manifest.originalUrl) {\n manifest.originalUrl = manifest.url;\n }\n\n // If there is a mismatch between the manifest's specified duration and the total duration of all periods,\n // and the specified duration is greater than the total duration of all periods,\n // overwrite the manifest's duration attribute. This is a patch for if a manifest is generated incorrectly.\n if (settings &&\n settings.get().streaming.enableManifestDurationMismatchFix &&\n manifest.mediaPresentationDuration &&\n manifest.Period.length > 1) {\n const sumPeriodDurations = manifest.Period.reduce((totalDuration, period) => totalDuration + period.duration, 0);\n if (!isNaN(sumPeriodDurations) && manifest.mediaPresentationDuration > sumPeriodDurations) {\n logger.warn('Media presentation duration greater than duration of all periods. Setting duration to total period duration');\n manifest.mediaPresentationDuration = sumPeriodDurations;\n }\n }\n\n manifest.baseUri = baseUri;\n manifest.loadedTime = new Date();\n xlinkController.resolveManifestOnLoad(manifest);\n\n eventBus.trigger(Events.ORIGINAL_MANIFEST_LOADED, { originalManifest: data });\n } else {\n eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, {\n manifest: null,\n error: new DashJSError(\n Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE,\n Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_MESSAGE + `${url}`\n )\n });\n }\n },\n error: function (request, statusText, errorText) {\n eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, {\n manifest: null,\n error: new DashJSError(\n Errors.MANIFEST_LOADER_LOADING_FAILURE_ERROR_CODE,\n Errors.MANIFEST_LOADER_LOADING_FAILURE_ERROR_MESSAGE + `${url}, ${errorText}`\n )\n });\n }\n });\n }\n\n function reset() {\n eventBus.off(Events.XLINK_READY, onXlinkReady, instance);\n\n if (mssHandler) {\n mssHandler.reset();\n }\n\n if (xlinkController) {\n xlinkController.reset();\n xlinkController = null;\n }\n\n if (urlLoader) {\n urlLoader.abort();\n urlLoader = null;\n }\n }\n\n instance = {\n load: load,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nManifestLoader.__dashjs_factory_name = 'ManifestLoader';\n\nconst factory = FactoryMaker.getClassFactory(ManifestLoader);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\n/**\n * @module ErrorHandler\n * @ignore\n */\nfunction ErrorHandler() {\n\n let instance;\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n\n /**\n * @param {object} err DashJSError with code, message and data attributes\n * @memberof module:ErrorHandler\n */\n function error(err) {\n eventBus.trigger(Events.ERROR, { error: err });\n }\n instance = {\n error: error\n };\n\n return instance;\n}\n\nErrorHandler.__dashjs_factory_name = 'ErrorHandler';\nexport default FactoryMaker.getSingletonFactory(ErrorHandler);\n","import FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\nimport Constants from '../constants/Constants.js';\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport DashConstants from '../../dash/constants/DashConstants.js';\n\nfunction CapabilitiesFilter() {\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n\n let instance,\n adapter,\n capabilities,\n settings,\n customParametersModel,\n protectionController,\n logger;\n\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function setConfig(config) {\n if (!config) {\n return;\n }\n\n if (config.adapter) {\n adapter = config.adapter;\n }\n\n if (config.capabilities) {\n capabilities = config.capabilities;\n }\n\n if (config.settings) {\n settings = config.settings;\n }\n\n if (config.protectionController) {\n protectionController = config.protectionController;\n }\n\n if (config.customParametersModel) {\n customParametersModel = config.customParametersModel;\n }\n\n }\n\n function filterUnsupportedFeatures(manifest) {\n return new Promise((resolve) => {\n const mediaTypesToCheck = [Constants.VIDEO, Constants.AUDIO];\n const promises = [];\n\n // We determine all the configurations we need to check. Each unique configuration should only be checked once.\n // This is important especially for large multiperiod MPDs. A redundant configuration check can lead to increased processing time.\n mediaTypesToCheck.forEach(mediaType => {\n const configurationsToCheck = _getConfigurationsToCheck(manifest, mediaType);\n configurationsToCheck.forEach(basicConfiguration => {\n promises.push(capabilities.runCodecSupportCheck(basicConfiguration, mediaType));\n })\n })\n\n\n Promise.allSettled(promises)\n .then(() => {\n mediaTypesToCheck.forEach((mediaType) => {\n _filterUnsupportedCodecs(mediaType, manifest)\n })\n\n if (settings.get().streaming.capabilities.filterUnsupportedEssentialProperties) {\n _filterUnsupportedEssentialProperties(manifest);\n }\n return _applyCustomFilters(manifest);\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n logger.error(e);\n resolve();\n });\n });\n }\n\n\n function _filterUnsupportedCodecs(type, manifest) {\n if (!manifest || !manifest.Period || manifest.Period.length === 0) {\n return\n }\n\n manifest.Period\n .forEach((period) => {\n _filterUnsupportedAdaptationSetsOfPeriod(period, type);\n })\n }\n\n function _filterUnsupportedAdaptationSetsOfPeriod(period, type) {\n if (!period || !period.AdaptationSet || period.AdaptationSet.length === 0) {\n return;\n }\n\n period.AdaptationSet = period.AdaptationSet.filter((as) => {\n if (adapter.getIsTypeOf(as, type)) {\n _filterUnsupportedRepresentationsOfAdaptation(as, type);\n }\n const supported = as.Representation && as.Representation.length > 0;\n if (!supported) {\n eventBus.trigger(Events.ADAPTATION_SET_REMOVED_NO_CAPABILITIES, {\n adaptationSet: as\n });\n logger.warn(`[CapabilitiesFilter] AdaptationSet with ID ${as.id ? as.id : 'undefined'} and codec ${as.codecs ? as.codecs : 'undefined'} has been removed because of no supported Representation`);\n }\n\n return supported;\n })\n }\n\n function _filterUnsupportedRepresentationsOfAdaptation(as, type) {\n if (!as.Representation || as.Representation.length === 0) {\n return;\n }\n\n as.Representation = as.Representation.filter((rep, i) => {\n const codec = adapter.getCodec(as, i, false);\n const isMainCodecSupported = _isCodecSupported(type, rep, codec);\n\n let isSupplementalCodecSupported = _isSupplementalCodecSupported(rep, type);\n if (isSupplementalCodecSupported) {\n logger.debug(`[CapabilitiesFilter] Codec supported. Upgrading codecs string of Representation with ID ${rep.id}`);\n rep.codecs = rep[DashConstants.SUPPLEMENTAL_CODECS]\n }\n\n if (!isMainCodecSupported && !isSupplementalCodecSupported) {\n logger.warn(`[CapabilitiesFilter] Codec ${codec} not supported. Removing Representation with ID ${rep.id}`);\n }\n\n return isMainCodecSupported || isSupplementalCodecSupported;\n });\n }\n\n function _isSupplementalCodecSupported(rep, type) {\n let isSupplementalCodecSupported = false;\n const supplementalCodecs = adapter.getSupplementalCodecs(rep);\n\n if (supplementalCodecs.length > 0) {\n if (supplementalCodecs.length > 1) {\n logger.warn(`[CapabilitiesFilter] Multiple supplemental codecs not supported; using the first in list`);\n }\n const supplementalCodec = supplementalCodecs[0];\n isSupplementalCodecSupported = _isCodecSupported(type, rep, supplementalCodec);\n }\n\n return isSupplementalCodecSupported\n }\n\n function _isCodecSupported(type, rep, codec) {\n const config = _createConfiguration(type, rep, codec);\n\n return capabilities.isCodecSupportedBasedOnTestedConfigurations(config, type);\n }\n\n function _getConfigurationsToCheck(manifest, type) {\n if (!manifest || !manifest.Period || manifest.Period.length === 0) {\n return [];\n }\n\n const configurationsSet = new Set();\n const configurations = [];\n\n manifest.Period.forEach((period) => {\n period.AdaptationSet.forEach((as) => {\n if (adapter.getIsTypeOf(as, type)) {\n as.Representation.forEach((rep, i) => {\n const codec = adapter.getCodec(as, i, false);\n _processCodecToCheck(type, rep, codec, configurationsSet, configurations);\n\n const supplementalCodecs = adapter.getSupplementalCodecs(rep)\n if (supplementalCodecs.length > 0) {\n _processCodecToCheck(type, rep, supplementalCodecs[0], configurationsSet, configurations);\n }\n });\n }\n });\n });\n\n return configurations;\n }\n\n function _processCodecToCheck(type, rep, codec, configurationsSet, configurations) {\n const config = _createConfiguration(type, rep, codec);\n const configString = JSON.stringify(config);\n\n if (!configurationsSet.has(configString)) {\n configurationsSet.add(configString);\n configurations.push(config);\n }\n }\n\n function _createConfiguration(type, rep, codec) {\n let config = null;\n switch (type) {\n case Constants.VIDEO:\n config = _createVideoConfiguration(rep, codec);\n break;\n case Constants.AUDIO:\n config = _createAudioConfiguration(rep, codec);\n break;\n default:\n return config;\n }\n\n return _addGenericAttributesToConfig(rep, config);\n }\n\n function _createVideoConfiguration(rep, codec) {\n let config = {\n codec: codec,\n width: rep.width || null,\n height: rep.height || null,\n framerate: rep.frameRate || null,\n bitrate: rep.bandwidth || null,\n isSupported: true\n }\n if (settings.get().streaming.capabilities.filterVideoColorimetryEssentialProperties) {\n Object.assign(config, _convertHDRColorimetryToConfig(rep));\n }\n let colorimetrySupported = config.isSupported;\n\n if (settings.get().streaming.capabilities.filterHDRMetadataFormatEssentialProperties) {\n Object.assign(config, _convertHDRMetadataFormatToConfig(rep));\n }\n let metadataFormatSupported = config.isSupported;\n\n if (!colorimetrySupported || !metadataFormatSupported) {\n config.isSupported = false; // restore this flag as it may got overridden by 2nd Object.assign\n }\n\n return config;\n }\n\n function _convertHDRColorimetryToConfig(representation) {\n let cfg = {\n colorGamut: null,\n transferFunction: null,\n isSupported: true\n };\n\n for (const prop of representation.EssentialProperty || []) {\n\n // note: MCA does not reflect a parameter related to 'urn:mpeg:mpegB:cicp:VideoFullRangeFlag'\n\n // translate ColourPrimaries signaling into capability queries\n if (prop.schemeIdUri === Constants.COLOUR_PRIMARIES_SCHEME_ID_URI && ['1', '5', '6', '7'].includes(prop.value.toString())) {\n cfg.colorGamut = Constants.MEDIA_CAPABILITIES_API.COLORGAMUT.SRGB;\n } else if (prop.schemeIdUri === Constants.COLOUR_PRIMARIES_SCHEME_ID_URI && ['11', '12'].includes(prop.value.toString())) {\n cfg.colorGamut = Constants.MEDIA_CAPABILITIES_API.COLORGAMUT.P3;\n } else if (prop.schemeIdUri === Constants.COLOUR_PRIMARIES_SCHEME_ID_URI && ['9'].includes(prop.value.toString())) {\n cfg.colorGamut = Constants.MEDIA_CAPABILITIES_API.COLORGAMUT.REC2020;\n } else if (prop.schemeIdUri === Constants.COLOUR_PRIMARIES_SCHEME_ID_URI && ['2'].includes(prop.value.toString())) {\n cfg.colorGamut = null;\n } else if (prop.schemeIdUri === Constants.COLOUR_PRIMARIES_SCHEME_ID_URI) {\n cfg.isSupported = false;\n }\n\n // translate TransferCharacteristics signaling into capability queries\n if (prop.schemeIdUri === Constants.TRANSFER_CHARACTERISTICS_SCHEME_ID_URI && ['1', '6', '13', '14', '15'].includes(prop.value.toString())) {\n cfg.transferFunction = Constants.MEDIA_CAPABILITIES_API.TRANSFERFUNCTION.SRGB;\n } else if (prop.schemeIdUri === Constants.TRANSFER_CHARACTERISTICS_SCHEME_ID_URI && ['16'].includes(prop.value.toString())) {\n cfg.transferFunction = Constants.MEDIA_CAPABILITIES_API.TRANSFERFUNCTION.PQ;\n } else if (prop.schemeIdUri === Constants.TRANSFER_CHARACTERISTICS_SCHEME_ID_URI && ['18'].includes(prop.value.toString())) {\n cfg.transferFunction = Constants.MEDIA_CAPABILITIES_API.TRANSFERFUNCTION.HLG;\n } else if (prop.schemeIdUri === Constants.TRANSFER_CHARACTERISTICS_SCHEME_ID_URI && ['2'].includes(prop.value.toString())) {\n cfg.transferFunction = null;\n } else if (prop.schemeIdUri === Constants.TRANSFER_CHARACTERISTICS_SCHEME_ID_URI) {\n cfg.isSupported = false;\n }\n }\n\n return cfg;\n }\n\n function _convertHDRMetadataFormatToConfig(representation) {\n let cfg = {\n isSupported: true,\n hdrMetadataType: null\n };\n\n for (const prop of representation.EssentialProperty || []) {\n // translate hdrMetadataType signaling into capability queries\n if (prop.schemeIdUri === Constants.HDR_METADATA_FORMAT_SCHEME_ID_URI && prop.value === Constants.HDR_METADATA_FORMAT_VALUES.ST2094_10) {\n cfg.hdrMetadataType = Constants.MEDIA_CAPABILITIES_API.HDR_METADATATYPE.SMPTE_ST_2094_10;\n } else if (prop.schemeIdUri === Constants.HDR_METADATA_FORMAT_SCHEME_ID_URI && prop.value === Constants.HDR_METADATA_FORMAT_VALUES.SL_HDR2) {\n cfg.hdrMetadataType = Constants.MEDIA_CAPABILITIES_API.HDR_METADATATYPE.SLHDR2; // Note: This is not specified by W3C\n } else if (prop.schemeIdUri === Constants.HDR_METADATA_FORMAT_SCHEME_ID_URI && prop.value === Constants.HDR_METADATA_FORMAT_VALUES.ST2094_40) {\n cfg.hdrMetadataType = Constants.MEDIA_CAPABILITIES_API.HDR_METADATATYPE.SMPTE_ST_2094_40;\n } else if (prop.schemeIdUri === Constants.HDR_METADATA_FORMAT_SCHEME_ID_URI) {\n cfg.isSupported = false;\n }\n }\n\n return cfg;\n }\n\n function _createAudioConfiguration(rep, codec) {\n const samplerate = rep.audioSamplingRate || null;\n const bitrate = rep.bandwidth || null;\n\n return {\n codec,\n bitrate,\n samplerate,\n isSupported: true\n };\n }\n\n function _addGenericAttributesToConfig(rep, config) {\n if (rep && rep[DashConstants.CONTENT_PROTECTION] && rep[DashConstants.CONTENT_PROTECTION].length > 0) {\n config.keySystemsMetadata = protectionController.getSupportedKeySystemMetadataFromContentProtection(rep[DashConstants.CONTENT_PROTECTION])\n }\n return config\n }\n\n function _filterUnsupportedEssentialProperties(manifest) {\n\n if (!manifest || !manifest.Period || manifest.Period.length === 0) {\n return;\n }\n\n manifest.Period.forEach((period) => {\n period.AdaptationSet = period.AdaptationSet.filter((as) => {\n\n if (!as.Representation || as.Representation.length === 0) {\n return true;\n }\n\n const adaptationSetEssentialProperties = adapter.getEssentialPropertiesForAdaptationSet(as);\n const doesSupportEssentialProperties = _doesSupportEssentialProperties(adaptationSetEssentialProperties);\n\n if (!doesSupportEssentialProperties) {\n return false;\n }\n\n as.Representation = as.Representation.filter((rep) => {\n const essentialProperties = adapter.getEssentialPropertiesForRepresentation(rep);\n return _doesSupportEssentialProperties(essentialProperties);\n });\n\n return as.Representation && as.Representation.length > 0;\n });\n });\n }\n\n function _doesSupportEssentialProperties(essentialProperties) {\n if (!essentialProperties || essentialProperties.length === 0) {\n return true\n }\n\n let i = 0;\n while (i < essentialProperties.length) {\n if (!capabilities.supportsEssentialProperty(essentialProperties[i])) {\n logger.debug('[Stream] EssentialProperty not supported: ' + essentialProperties[i].schemeIdUri);\n return false;\n }\n i += 1;\n }\n\n return true\n }\n\n function _applyCustomFilters(manifest) {\n if (!manifest || !manifest.Period || manifest.Period.length === 0) {\n return Promise.resolve();\n }\n\n const promises = [];\n manifest.Period.forEach((period) => {\n promises.push(_applyCustomFiltersAdaptationSetsOfPeriod(period));\n });\n\n return Promise.all(promises);\n }\n\n function _applyCustomFiltersAdaptationSetsOfPeriod(period) {\n return new Promise((resolve) => {\n\n if (!period || !period.AdaptationSet || period.AdaptationSet.length === 0) {\n resolve();\n return;\n }\n\n const promises = [];\n period.AdaptationSet.forEach((as) => {\n promises.push(_applyCustomFiltersRepresentationsOfAdaptation(as));\n });\n\n Promise.all(promises)\n .then(() => {\n period.AdaptationSet = period.AdaptationSet.filter((as) => {\n return as.Representation && as.Representation.length > 0;\n });\n resolve();\n })\n .catch(() => {\n resolve();\n });\n });\n\n }\n\n function _applyCustomFiltersRepresentationsOfAdaptation(as) {\n return new Promise((resolve) => {\n\n if (!as.Representation || as.Representation.length === 0) {\n resolve();\n return;\n }\n\n const promises = [];\n as.Representation.forEach((rep) => {\n promises.push(_applyCustomFiltersRepresentation(rep));\n });\n\n Promise.all(promises)\n .then((supported) => {\n as.Representation = as.Representation.filter((rep, i) => {\n let isReprSupported = supported[i].every((s) => {\n return s\n });\n if (!isReprSupported) {\n logger.debug('[Stream] Representation ' + rep.id + ' has been removed because of unsupported CustomFilter');\n }\n return isReprSupported;\n });\n resolve();\n })\n .catch((err) => {\n logger.warn('[Stream] at least one promise rejected in CustomFilter with error: ', err);\n resolve();\n });\n });\n\n }\n\n function _applyCustomFiltersRepresentation(rep) {\n const promises = [];\n const customCapabilitiesFilters = customParametersModel.getCustomCapabilitiesFilters();\n\n if (!customCapabilitiesFilters || customCapabilitiesFilters.length === 0) {\n promises.push(Promise.resolve(true));\n } else {\n customCapabilitiesFilters.forEach(customFilter => {\n promises.push(new Promise(resolve => resolve(customFilter(rep))));\n });\n }\n\n return Promise.all(promises)\n }\n\n instance = {\n setConfig,\n filterUnsupportedFeatures,\n };\n\n setup();\n\n return instance;\n}\n\nCapabilitiesFilter.__dashjs_factory_name = 'CapabilitiesFilter';\nexport default FactoryMaker.getSingletonFactory(CapabilitiesFilter);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass URIFragmentData {\n constructor() {\n this.t = null;\n this.xywh = null;\n this.track = null;\n this.id = null;\n this.s = null;\n this.r = null;\n }\n}\n\nexport default URIFragmentData;\n\n/*\n From Spec http://www.w3.org/TR/media-frags/\n\n temporal (t) - This dimension denotes a specific time range in the original media, such as \"starting at second 10, continuing until second 20\";\n spatial (xywh) - this dimension denotes a specific range of pixels in the original media, such as \"a rectangle with size (100,100) with its top-left at coordinate (10,10)\";\n Media fragments support also addressing the media along two additional dimensions (in the advanced version defined in Media Fragments 1.0 URI (advanced)):\n track (track) - this dimension denotes one or more tracks in the original media, such as \"the english audio and the video track\";\n id (id) - this dimension denotes a named temporal fragment within the original media, such as \"chapter 2\", and can be seen as a convenient way of specifying a temporal fragment.\n\n\n ## Note\n Akamai is purposing to add #s=X to the ISO standard.\n - (X) Value would be a start time to seek to at startup instead of starting at 0 or live edge\n - Allows for seeking back before the start time unlike a temporal clipping.\n*/","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport URIFragmentData from '../vo/URIFragmentData.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\n/**\n * Model class managing URI fragments.\n * @ignore\n */\nfunction URIFragmentModel() {\n\n let instance,\n URIFragmentDataVO;\n\n /**\n * @param {string} uri The URI to parse for fragment extraction\n * @memberof module:URIFragmentModel\n * @instance\n */\n function initialize(uri) {\n URIFragmentDataVO = new URIFragmentData();\n\n if (!uri) {\n return null;\n }\n\n const hashIndex = uri.indexOf('#');\n if (hashIndex !== -1) {\n const fragments = uri.substr(hashIndex + 1).split('&');\n for (let i = 0, len = fragments.length; i < len; ++i) {\n const fragment = fragments[i];\n const equalIndex = fragment.indexOf('=');\n if (equalIndex !== -1) {\n const key = fragment.substring(0, equalIndex);\n if (URIFragmentDataVO.hasOwnProperty(key)) {\n URIFragmentDataVO[key] = fragment.substr(equalIndex + 1);\n }\n }\n }\n }\n }\n\n /**\n * @returns {URIFragmentData} Object containing supported URI fragments\n * @memberof module:URIFragmentModel\n * @instance\n */\n function getURIFragmentData() {\n return URIFragmentDataVO;\n }\n\n instance = {\n initialize: initialize,\n getURIFragmentData: getURIFragmentData\n };\n\n return instance;\n}\n\nURIFragmentModel.__dashjs_factory_name = 'URIFragmentModel';\nexport default FactoryMaker.getSingletonFactory(URIFragmentModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\nfunction ManifestModel() {\n\n let context = this.context;\n let eventBus = EventBus(context).getInstance();\n\n let instance,\n manifest;\n\n function getValue() {\n return manifest;\n }\n\n function setValue(value) {\n manifest = value;\n if (value) {\n eventBus.trigger(Events.MANIFEST_LOADED, { data: value });\n }\n }\n\n instance = {\n getValue: getValue,\n setValue: setValue\n };\n\n return instance;\n}\n\nManifestModel.__dashjs_factory_name = 'ManifestModel';\nexport default FactoryMaker.getSingletonFactory(ManifestModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Debug from '../../core/Debug.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Settings from '../../core/Settings.js';\n\nconst CATCHUP_PLAYBACK_RATE_MAX_LIMIT = 1;\nconst CATCHUP_PLAYBACK_RATE_MIN_LIMIT = -0.5;\nconst DEFAULT_CATCHUP_MAX_DRIFT = 12;\nconst DEFAULT_CATCHUP_PLAYBACK_RATE_MAX = 0.5;\nconst DEFAULT_CATCHUP_PLAYBACK_RATE_MIN = -0.5;\nconst DEFAULT_MIN_BUFFER_TIME = 12;\nconst DEFAULT_MIN_BUFFER_TIME_FAST_SWITCH = 20;\nconst LOW_LATENCY_MULTIPLY_FACTOR = 5;\nconst LOW_LATENCY_REDUCTION_FACTOR = 10;\n\n\n/**\n * We use this model as a wrapper/proxy between Settings.js and classes that are using parameters from Settings.js.\n * In some cases we require additional logic to be applied and the settings might need to be adjusted before being used.\n * @class\n * @ignore\n * @constructor\n */\nfunction MediaPlayerModel() {\n\n let instance,\n logger,\n playbackController,\n serviceDescriptionController;\n\n const context = this.context;\n const settings = Settings(context).getInstance();\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function setConfig(config) {\n if (config.playbackController) {\n playbackController = config.playbackController;\n }\n if (config.serviceDescriptionController) {\n serviceDescriptionController = config.serviceDescriptionController;\n }\n }\n\n /**\n * Checks the supplied min playback rate is a valid vlaue and within supported limits\n * @param {number} rate - Supplied min playback rate\n * @param {boolean} log - wether to shown warning or not\n * @returns {number} corrected min playback rate\n */\n function _checkMinPlaybackRate(rate, log) {\n if (isNaN(rate)) {\n return 0;\n }\n if (rate > 0) {\n if (log) {\n logger.warn(`Supplied minimum playback rate is a positive value when it should be negative or 0. The supplied rate will not be applied and set to 0: 100% playback speed.`)\n }\n return 0;\n }\n if (rate < CATCHUP_PLAYBACK_RATE_MIN_LIMIT) {\n if (log) {\n logger.warn(`Supplied minimum playback rate is out of range and will be limited to ${CATCHUP_PLAYBACK_RATE_MIN_LIMIT}: ${CATCHUP_PLAYBACK_RATE_MIN_LIMIT * 100}% playback speed.`);\n }\n return CATCHUP_PLAYBACK_RATE_MIN_LIMIT;\n }\n return rate;\n };\n\n /**\n * Checks the supplied max playback rate is a valid vlaue and within supported limits\n * @param {number} rate - Supplied max playback rate\n * @param {boolean} log - wether to shown warning or not\n * @returns {number} corrected max playback rate\n */\n function _checkMaxPlaybackRate(rate, log) {\n if (isNaN(rate)) {\n return 0;\n }\n if (rate < 0) {\n if (log) {\n logger.warn(`Supplied maximum playback rate is a negative value when it should be negative or 0. The supplied rate will not be applied and set to 0: 100% playback speed.`)\n }\n return 0;\n }\n if (rate > CATCHUP_PLAYBACK_RATE_MAX_LIMIT) {\n if (log) {\n logger.warn(`Supplied maximum playback rate is out of range and will be limited to ${CATCHUP_PLAYBACK_RATE_MAX_LIMIT}: ${(1 + CATCHUP_PLAYBACK_RATE_MAX_LIMIT) * 100}% playback speed.`);\n }\n return CATCHUP_PLAYBACK_RATE_MAX_LIMIT;\n }\n return rate;\n };\n\n /**\n * Returns the maximum drift allowed before applying a seek back to the live edge when the catchup mode is enabled\n * @return {number}\n */\n function getCatchupMaxDrift() {\n if (!isNaN(settings.get().streaming.liveCatchup.maxDrift) && settings.get().streaming.liveCatchup.maxDrift >= 0) {\n return settings.get().streaming.liveCatchup.maxDrift;\n }\n\n const serviceDescriptionSettings = serviceDescriptionController.getServiceDescriptionSettings();\n if (serviceDescriptionSettings && serviceDescriptionSettings.liveCatchup && !isNaN(serviceDescriptionSettings.liveCatchup.maxDrift) && serviceDescriptionSettings.liveCatchup.maxDrift >= 0) {\n return serviceDescriptionSettings.liveCatchup.maxDrift;\n }\n\n return DEFAULT_CATCHUP_MAX_DRIFT;\n }\n\n /**\n * Returns the minimum and maximum playback rates to be used when applying the catchup mechanism\n * If only one of the min/max values has been set then the other will default to 0 (no playback rate change).\n * @return {number}\n */\n function getCatchupPlaybackRates(log) {\n const settingsPlaybackRate = settings.get().streaming.liveCatchup.playbackRate;\n\n if (!isNaN(settingsPlaybackRate.min) || !isNaN(settingsPlaybackRate.max)) {\n return {\n min: _checkMinPlaybackRate(settingsPlaybackRate.min, log),\n max: _checkMaxPlaybackRate(settingsPlaybackRate.max, log),\n }\n }\n\n const serviceDescriptionSettings = serviceDescriptionController.getServiceDescriptionSettings();\n if (serviceDescriptionSettings && serviceDescriptionSettings.liveCatchup && (!isNaN(serviceDescriptionSettings.liveCatchup.playbackRate.min) || !isNaN(serviceDescriptionSettings.liveCatchup.playbackRate.max))) {\n const sdPlaybackRate = serviceDescriptionSettings.liveCatchup.playbackRate;\n return {\n min: _checkMinPlaybackRate(sdPlaybackRate.min, log),\n max: _checkMaxPlaybackRate(sdPlaybackRate.max, log),\n }\n }\n\n return {\n min: DEFAULT_CATCHUP_PLAYBACK_RATE_MIN,\n max: DEFAULT_CATCHUP_PLAYBACK_RATE_MAX\n }\n }\n\n /**\n * Returns whether the catchup mode is activated via the settings or internally in the PlaybackController\n * @return {boolean}\n */\n function getCatchupModeEnabled() {\n if (settings.get().streaming.liveCatchup.enabled !== null) {\n return settings.get().streaming.liveCatchup.enabled;\n }\n\n return playbackController.getInitialCatchupModeActivated();\n }\n\n /**\n * Returns the min,max or initial bitrate for a specific media type.\n * @param {string} field\n * @param {string} mediaType\n */\n function getAbrBitrateParameter(field, mediaType) {\n try {\n const setting = settings.get().streaming.abr[field][mediaType];\n if (!isNaN(setting) && setting !== -1) {\n return setting;\n }\n\n const serviceDescriptionSettings = serviceDescriptionController.getServiceDescriptionSettings();\n if (serviceDescriptionSettings && serviceDescriptionSettings[field] && !isNaN(serviceDescriptionSettings[field][mediaType])) {\n return serviceDescriptionSettings[field][mediaType];\n }\n\n return -1;\n } catch (e) {\n return -1;\n }\n }\n\n /**\n * Returns the initial buffer level taking the stable buffer time into account\n * @return {number}\n */\n function getInitialBufferLevel() {\n const initialBufferLevel = settings.get().streaming.buffer.initialBufferLevel;\n\n if (isNaN(initialBufferLevel) || initialBufferLevel < 0) {\n return 0;\n }\n\n return Math.min(getBufferTimeDefault(), initialBufferLevel);\n }\n\n /**\n * Returns the stable buffer time taking the live delay into account\n * @return {number}\n */\n function getBufferTimeDefault() {\n const bufferTimeDefault = getBufferTimeDefaultUnadjusted();\n const liveDelay = playbackController.getLiveDelay();\n\n return !isNaN(liveDelay) && liveDelay > 0 ? Math.min(bufferTimeDefault, liveDelay) : bufferTimeDefault;\n }\n\n /**\n * Returns the stable buffer\n * @return {number}\n */\n function getBufferTimeDefaultUnadjusted() {\n return settings.get().streaming.buffer.bufferTimeDefault > 0 ? settings.get().streaming.buffer.bufferTimeDefault : getFastSwitchEnabled() ? DEFAULT_MIN_BUFFER_TIME_FAST_SWITCH : DEFAULT_MIN_BUFFER_TIME;\n }\n\n /**\n * Returns the number of retry attempts for a specific media type\n * @param type\n * @return {number}\n */\n function getRetryAttemptsForType(type) {\n const lowLatencyMultiplyFactor = !isNaN(settings.get().streaming.retryAttempts.lowLatencyMultiplyFactor) ? settings.get().streaming.retryAttempts.lowLatencyMultiplyFactor : LOW_LATENCY_MULTIPLY_FACTOR;\n\n return playbackController.getLowLatencyModeEnabled() ? settings.get().streaming.retryAttempts[type] * lowLatencyMultiplyFactor : settings.get().streaming.retryAttempts[type];\n }\n\n /**\n * Returns the retry interval for a specific media type\n * @param type\n * @return {number}\n */\n function getRetryIntervalsForType(type) {\n const lowLatencyReductionFactor = !isNaN(settings.get().streaming.retryIntervals.lowLatencyReductionFactor) ? settings.get().streaming.retryIntervals.lowLatencyReductionFactor : LOW_LATENCY_REDUCTION_FACTOR;\n\n return playbackController.getLowLatencyModeEnabled() ? settings.get().streaming.retryIntervals[type] / lowLatencyReductionFactor : settings.get().streaming.retryIntervals[type];\n }\n\n /**\n * Returns whether the fast switch mode is defined in the settings options. If not we enable it by default but only for non low-latency playback.\n * @return {boolean}\n */\n function getFastSwitchEnabled() {\n if (settings.get().streaming.buffer.fastSwitchEnabled !== null) {\n return settings.get().streaming.buffer.fastSwitchEnabled;\n }\n\n return !playbackController.getLowLatencyModeEnabled();\n }\n\n function reset() {\n }\n\n instance = {\n getCatchupMaxDrift,\n getCatchupModeEnabled,\n getBufferTimeDefault,\n getBufferTimeDefaultUnadjusted,\n getFastSwitchEnabled,\n getInitialBufferLevel,\n getRetryAttemptsForType,\n getRetryIntervalsForType,\n getCatchupPlaybackRates,\n getAbrBitrateParameter,\n setConfig,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nMediaPlayerModel.__dashjs_factory_name = 'MediaPlayerModel';\nexport default FactoryMaker.getSingletonFactory(MediaPlayerModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\nconst NO_CHANGE = null;\nconst PRIORITY = {\n DEFAULT: 0.5,\n STRONG: 1,\n WEAK: 0\n};\n\nfunction SwitchRequest(rep, reas, prio, r) {\n\n let instance,\n representation,\n priority,\n reason,\n rule;\n\n // check priority value\n function getPriority(p) {\n let ret = PRIORITY.DEFAULT;\n\n // check that p is one of declared priority value\n if (p === PRIORITY.DEFAULT || p === PRIORITY.STRONG || p === PRIORITY.WEAK) {\n ret = p;\n }\n return ret;\n }\n\n // init attributes\n representation = (rep === undefined) ? NO_CHANGE : rep;\n priority = getPriority(prio);\n reason = (reas === undefined) ? null : reas;\n rule = r === undefined ? null : r;\n\n instance = {\n representation,\n reason,\n rule,\n priority\n };\n\n return instance;\n}\n\nSwitchRequest.__dashjs_factory_name = 'SwitchRequest';\nconst factory = FactoryMaker.getClassFactory(SwitchRequest);\nfactory.NO_CHANGE = NO_CHANGE;\nfactory.PRIORITY = PRIORITY;\nFactoryMaker.updateClassFactory(SwitchRequest.__dashjs_factory_name, factory);\n\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport SwitchRequest from '../SwitchRequest.js';\nimport MetricsConstants from '../../constants/MetricsConstants.js';\nimport Debug from '../../../core/Debug.js';\n\nfunction ThroughputRule(config) {\n\n config = config || {};\n const context = this.context;\n const dashMetrics = config.dashMetrics;\n\n let instance,\n logger;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function getSwitchRequest(rulesContext) {\n try {\n const switchRequest = SwitchRequest(context).create();\n switchRequest.rule = this.getClassName();\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const currentBufferState = dashMetrics.getCurrentBufferState(mediaType);\n const scheduleController = rulesContext.getScheduleController();\n const abrController = rulesContext.getAbrController();\n const streamInfo = rulesContext.getStreamInfo();\n const streamId = streamInfo ? streamInfo.id : null;\n const isDynamic = streamInfo && streamInfo.manifestInfo ? streamInfo.manifestInfo.isDynamic : null;\n const throughputController = rulesContext.getThroughputController();\n const throughput = throughputController.getSafeAverageThroughput(mediaType);\n const latency = throughputController.getAverageLatency(mediaType);\n\n if (isNaN(throughput) || !currentBufferState) {\n return switchRequest;\n }\n\n if (abrController.getAbandonmentStateFor(streamId, mediaType) === MetricsConstants.ALLOW_LOAD) {\n if (currentBufferState.state === MetricsConstants.BUFFER_LOADED || isDynamic) {\n switchRequest.representation = abrController.getOptimalRepresentationForBitrate(mediaInfo, throughput, true);\n switchRequest.reason = {\n throughput,\n latency,\n message:`[ThroughputRule]: Switching to Representation with bitrate ${switchRequest.representation ? switchRequest.representation.bitrateInKbit : 'n/a'} kbit/s. Throughput: ${throughput}`\n };\n scheduleController.setTimeToLoadDelay(0);\n }\n }\n\n return switchRequest;\n } catch (e) {\n logger.error(e);\n return SwitchRequest(context).create();\n }\n }\n\n function reset() {\n // no persistent information to reset\n }\n\n instance = {\n getSwitchRequest,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nThroughputRule.__dashjs_factory_name = 'ThroughputRule';\nexport default FactoryMaker.getClassFactory(ThroughputRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from '../../../core/EventBus.js';\nimport Events from '../../../core/events/Events.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport Debug from '../../../core/Debug.js';\nimport SwitchRequest from '../SwitchRequest.js';\nimport Constants from '../../constants/Constants.js';\nimport MetricsConstants from '../../constants/MetricsConstants.js';\nimport MediaPlayerEvents from '../../MediaPlayerEvents.js';\nimport Settings from '../../../core/Settings.js';\n\nfunction InsufficientBufferRule(config) {\n\n config = config || {};\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const dashMetrics = config.dashMetrics;\n const settings = Settings(context).getInstance();\n\n let instance,\n logger,\n bufferStateDict;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n _resetInitialSettings();\n eventBus.on(MediaPlayerEvents.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.on(Events.BYTES_APPENDED_END_FRAGMENT, _onBytesAppended, instance);\n }\n\n\n /**\n * If a BUFFER_EMPTY event happens, then InsufficientBufferRule returns switchRequest. Quality=0 until BUFFER_LOADED happens.\n * Otherwise, InsufficientBufferRule gives a maximum bitrate depending on throughput and bufferLevel such that\n * a whole fragment can be downloaded before the buffer runs out, subject to a conservative safety factor of 0.5.\n * If the bufferLevel is low, then InsufficientBufferRule avoids rebuffering risk.\n * If the bufferLevel is high, then InsufficientBufferRule give a high MaxIndex allowing other rules to take over.\n * @param rulesContext\n * @return {object}\n */\n function getSwitchRequest(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n switchRequest.rule = this.getClassName();\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getMediaType')) {\n return switchRequest;\n }\n\n const mediaType = rulesContext.getMediaType();\n const currentBufferState = dashMetrics.getCurrentBufferState(mediaType);\n const voRepresentation = rulesContext.getRepresentation();\n const fragmentDuration = voRepresentation.fragmentDuration;\n const scheduleController = rulesContext.getScheduleController();\n const playbackController = scheduleController.getPlaybackController();\n\n if (!_shouldExecuteRule(playbackController, mediaType, fragmentDuration)) {\n return switchRequest;\n }\n\n const mediaInfo = rulesContext.getMediaInfo();\n const abrController = rulesContext.getAbrController();\n if (currentBufferState && currentBufferState.state === MetricsConstants.BUFFER_EMPTY) {\n logger.debug('[' + mediaType + '] Switch to index 0; buffer is empty.');\n switchRequest.representation = abrController.getOptimalRepresentationForBitrate(mediaInfo, 0, true);\n switchRequest.reason = {\n message: '[InsufficientBufferRule]: Switching to lowest Representation because buffer is empty'\n };\n } else {\n const throughputController = rulesContext.getThroughputController();\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n const throughput = throughputController.getAverageThroughput(mediaType, null, NaN);\n const safeThroughput = throughput * settings.get().streaming.abr.rules.insufficientBufferRule.parameters.throughputSafetyFactor;\n const bitrate = safeThroughput * bufferLevel / fragmentDuration\n\n if (isNaN(bitrate) || bitrate <= 0) {\n return switchRequest\n }\n\n switchRequest.representation = abrController.getOptimalRepresentationForBitrate(mediaInfo, bitrate, true);\n switchRequest.reason = {\n message: '[InsufficientBufferRule]: Limiting maximum bitrate to avoid a buffer underrun.',\n bitrate\n };\n }\n\n return switchRequest;\n }\n\n function _shouldExecuteRule(playbackController, mediaType, fragmentDuration) {\n const lowLatencyEnabled = playbackController.getLowLatencyModeEnabled();\n return !lowLatencyEnabled && bufferStateDict[mediaType].ignoreCount <= 0 && fragmentDuration;\n }\n\n function _resetInitialSettings() {\n const segmentIgnoreCount = settings.get().streaming.abr.rules.insufficientBufferRule.parameters.segmentIgnoreCount\n bufferStateDict = {};\n bufferStateDict[Constants.VIDEO] = { ignoreCount: segmentIgnoreCount };\n bufferStateDict[Constants.AUDIO] = { ignoreCount: segmentIgnoreCount };\n }\n\n function _onPlaybackSeeking() {\n _resetInitialSettings();\n }\n\n function _onBytesAppended(e) {\n if (!isNaN(e.startTime) && (e.mediaType === Constants.AUDIO || e.mediaType === Constants.VIDEO)) {\n if (bufferStateDict[e.mediaType].ignoreCount > 0) {\n bufferStateDict[e.mediaType].ignoreCount--;\n }\n }\n }\n\n function reset() {\n _resetInitialSettings();\n eventBus.off(MediaPlayerEvents.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.off(Events.BYTES_APPENDED_END_FRAGMENT, _onBytesAppended, instance);\n }\n\n instance = {\n getSwitchRequest,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nInsufficientBufferRule.__dashjs_factory_name = 'InsufficientBufferRule';\nexport default FactoryMaker.getClassFactory(InsufficientBufferRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport SwitchRequest from '../SwitchRequest.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport Debug from '../../../core/Debug.js';\nimport Settings from '../../../core/Settings.js';\n\nfunction AbandonRequestsRule(config) {\n\n config = config || {};\n const mediaPlayerModel = config.mediaPlayerModel;\n const dashMetrics = config.dashMetrics;\n const context = this.context;\n const settings = Settings(context).getInstance();\n\n let instance,\n logger,\n abandonDict;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n reset();\n }\n\n\n function shouldAbandon(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n switchRequest.rule = this.getClassName();\n\n try {\n if (!rulesContext) {\n return switchRequest\n }\n const request = rulesContext.getCurrentRequest();\n\n if (!isNaN(request.index)) {\n\n // In case we abandoned already or do not have enough information to proceed we return here\n if (request.firstByteDate === null || abandonDict.hasOwnProperty(request.index)) {\n return switchRequest;\n }\n\n // Do not abandon if the buffer level is larger than the stable time\n const stableBufferTime = mediaPlayerModel.getBufferTimeDefault();\n const mediaType = rulesContext.getMediaType();\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n if (bufferLevel > stableBufferTime) {\n return switchRequest;\n }\n\n // Activate rule once we have enough samples, the initial startup time has elapsed and the download is not finished yet\n const elapsedTimeSinceFirstByteInMs = Date.now() - request.firstByteDate.getTime();\n if (request.traces.length >= settings.get().streaming.abr.rules.abandonRequestsRule.parameters.minThroughputSamplesThreshold &&\n elapsedTimeSinceFirstByteInMs > settings.get().streaming.abr.rules.abandonRequestsRule.parameters.minSegmentDownloadTimeThresholdInMs &&\n request.bytesLoaded < request.bytesTotal) {\n return _getSwitchRequest(rulesContext, request, switchRequest);\n }\n }\n\n return switchRequest;\n } catch (e) {\n logger.error(e);\n return switchRequest\n }\n }\n\n function _getSwitchRequest(rulesContext, request, switchRequest) {\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n\n // Use the traces of the request to derive the mean throughput. We ignore the first entries as they contain the latency of the request.\n const downloadedBytes = request.traces.reduce((prev, curr) => prev + curr.b[0], 0) - request.traces[0].b[0];\n const downloadTimeInMs = Math.max(request.traces.reduce((prev, curr) => prev + curr.d, 0) - request.traces[0].d, 1);\n const throughputInKbit = Math.round((8 * downloadedBytes) / downloadTimeInMs)\n const estimatedTimeOfDownloadInSeconds = Number((request.bytesTotal * 8 / throughputInKbit) / 1000).toFixed(2);\n\n // We do not abandon if the estimated download time is below a constant multiple of the segment duration, or if we are on the lowest quality anyway.\n const representation = rulesContext.getRepresentation();\n const abrController = rulesContext.getAbrController();\n if (estimatedTimeOfDownloadInSeconds < request.duration * settings.get().streaming.abr.rules.abandonRequestsRule.parameters.abandonDurationMultiplier || abrController.isPlayingAtLowestQuality(representation)) {\n return switchRequest;\n }\n\n if (!abandonDict.hasOwnProperty(request.index)) {\n const abrController = rulesContext.getAbrController();\n const remainingBytesToDownload = request.bytesTotal - request.bytesLoaded;\n const optimalRepresentationForBitrate = abrController.getOptimalRepresentationForBitrate(mediaInfo, throughputInKbit, true);\n const currentRequestedRepresentation = request.representation;\n const totalBytesForOptimalRepresentation = request.bytesTotal * optimalRepresentationForBitrate.bitrateInKbit / currentRequestedRepresentation.bitrateInKbit;\n\n if (remainingBytesToDownload > totalBytesForOptimalRepresentation) {\n switchRequest.representation = optimalRepresentationForBitrate;\n switchRequest.reason = {\n throughputInKbit,\n message: `[AbandonRequestRule][${mediaType} is asking to abandon and switch to quality to ${optimalRepresentationForBitrate.absoluteIndex}. The measured bandwidth was ${throughputInKbit} kbit/s`\n }\n abandonDict[request.index] = true;\n }\n }\n\n return switchRequest\n }\n\n function reset() {\n abandonDict = {};\n }\n\n instance = {\n shouldAbandon,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nAbandonRequestsRule.__dashjs_factory_name = 'AbandonRequestsRule';\nexport default FactoryMaker.getClassFactory(AbandonRequestsRule);\n","import FactoryMaker from '../../../core/FactoryMaker.js';\nimport SwitchRequest from '../SwitchRequest.js';\nimport Settings from '../../../core/Settings.js';\n\nfunction DroppedFramesRule() {\n\n const context = this.context;\n const settings = Settings(context).getInstance();\n let instance;\n\n function getSwitchRequest(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n switchRequest.rule = this.getClassName();\n\n if (!rulesContext || !rulesContext.hasOwnProperty('getDroppedFramesHistory')) {\n return switchRequest;\n }\n\n const droppedFramesHistory = rulesContext.getDroppedFramesHistory();\n if (!droppedFramesHistory) {\n return switchRequest\n }\n const streamId = rulesContext.getStreamInfo().id;\n const mediaInfo = rulesContext.getMediaInfo();\n const abrController = rulesContext.getAbrController();\n const droppedFramesHistoryData = droppedFramesHistory.getFrameHistory(streamId);\n\n if (!droppedFramesHistoryData || Object.keys(droppedFramesHistoryData).length === 0) {\n return switchRequest;\n }\n\n let droppedFrames = 0;\n let totalFrames = 0;\n const representations = abrController.getPossibleVoRepresentationsFilteredBySettings(mediaInfo, true);\n let newRepresentation = null;\n\n //No point in measuring dropped frames for the first index.\n for (let i = 1; i < representations.length; i++) {\n const currentRepresentation = representations[i];\n if (currentRepresentation && droppedFramesHistoryData[currentRepresentation.id]) {\n droppedFrames = droppedFramesHistoryData[currentRepresentation.id].droppedVideoFrames;\n totalFrames = droppedFramesHistoryData[currentRepresentation.id].totalVideoFrames;\n\n if (totalFrames > settings.get().streaming.abr.rules.droppedFramesRule.parameters.minimumSampleSize && droppedFrames / totalFrames > settings.get().streaming.abr.rules.droppedFramesRule.parameters.droppedFramesPercentageThreshold) {\n newRepresentation = representations[i - 1];\n break;\n }\n }\n }\n if (newRepresentation) {\n switchRequest.representation = newRepresentation;\n switchRequest.reason = {\n droppedFrames,\n message: `[DroppedFramesRule]: Switching to index ${newRepresentation.absoluteIndex}. Dropped Frames: ${droppedFrames}, Total Frames: ${totalFrames}`\n };\n }\n\n return switchRequest;\n }\n\n instance = {\n getSwitchRequest\n };\n\n return instance;\n}\n\nDroppedFramesRule.__dashjs_factory_name = 'DroppedFramesRule';\nexport default FactoryMaker.getClassFactory(DroppedFramesRule);\n","import FactoryMaker from '../../../core/FactoryMaker.js';\nimport SwitchRequest from '../SwitchRequest.js';\nimport Settings from '../../../core/Settings.js';\n\nfunction SwitchHistoryRule() {\n\n const context = this.context;\n const settings = Settings(context).getInstance();\n let instance;\n\n function getSwitchRequest(rulesContext) {\n const switchRequest = SwitchRequest(context).create();\n switchRequest.rule = this.getClassName();\n\n if (!rulesContext) {\n return switchRequest;\n }\n\n const streamId = rulesContext.getStreamInfo().id;\n const mediaType = rulesContext.getMediaType();\n const switchRequestHistory = rulesContext ? rulesContext.getSwitchRequestHistory() : null;\n const switchRequests = switchRequestHistory ? switchRequestHistory.getSwitchRequests(streamId, mediaType) : {};\n const abrController = rulesContext.getAbrController();\n const mediaInfo = rulesContext.getMediaInfo();\n const representations = abrController.getPossibleVoRepresentationsFilteredBySettings(mediaInfo, true);\n let drops = 0;\n let noDrops = 0;\n\n for (let i = 0; i < representations.length; i++) {\n const currentPossibleRepresentation = representations[i];\n if (currentPossibleRepresentation && switchRequests[currentPossibleRepresentation.id]) {\n drops += switchRequests[currentPossibleRepresentation.id].drops;\n noDrops += switchRequests[currentPossibleRepresentation.id].noDrops;\n\n if (drops + noDrops >= settings.get().streaming.abr.rules.switchHistoryRule.parameters.sampleSize && (drops / noDrops > settings.get().streaming.abr.rules.switchHistoryRule.parameters.switchPercentageThreshold)) {\n switchRequest.representation = (i > 0 && switchRequests[currentPossibleRepresentation.id].drops > 0) ? representations[i - 1] : currentPossibleRepresentation;\n switchRequest.reason = {\n drops: drops,\n noDrops: noDrops,\n message: `[SwitchHistoryRule]: Switch to index: ${switchRequest.representation.absoluteIndex} samples: ${(drops + noDrops)} drops: ${drops}`\n };\n break;\n }\n }\n }\n\n return switchRequest;\n }\n\n instance = {\n getSwitchRequest\n };\n\n\n\n return instance;\n}\n\n\nSwitchHistoryRule.__dashjs_factory_name = 'SwitchHistoryRule';\nexport default FactoryMaker.getClassFactory(SwitchHistoryRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2016, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n// For a description of the BOLA adaptive bitrate (ABR) algorithm, see http://arxiv.org/abs/1601.06748\n\nimport MetricsConstants from '../../constants/MetricsConstants.js';\nimport SwitchRequest from '../SwitchRequest.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport {HTTPRequest} from '../../vo/metrics/HTTPRequest.js';\nimport EventBus from '../../../core/EventBus.js';\nimport Events from '../../../core/events/Events.js';\nimport Debug from '../../../core/Debug.js';\nimport MediaPlayerEvents from '../../MediaPlayerEvents.js';\nimport Constants from '../../constants/Constants.js';\nimport AbrController from '../../controllers/AbrController.js';\n\n// BOLA_STATE_ONE_BITRATE : If there is only one bitrate (or initialization failed), always return NO_CHANGE.\n// BOLA_STATE_STARTUP : Set placeholder buffer such that we download fragments at most recently measured throughput.\n// BOLA_STATE_STEADY : Buffer primed, we switch to steady operation.\n// TODO: add BOLA_STATE_SEEK and tune BOLA behavior on seeking\nconst BOLA_STATE_ONE_BITRATE = 'BOLA_STATE_ONE_BITRATE';\nconst BOLA_STATE_STARTUP = 'BOLA_STATE_STARTUP';\nconst BOLA_STATE_STEADY = 'BOLA_STATE_STEADY';\n\nconst MINIMUM_BUFFER_S = 10; // BOLA should never add artificial delays if buffer is less than MINIMUM_BUFFER_S.\nconst MINIMUM_BUFFER_PER_BITRATE_LEVEL_S = 2;\n// E.g. if there are 5 bitrates, BOLA switches to top bitrate at buffer = 10 + 5 * 2 = 20s.\n// If Schedule Controller does not allow buffer to reach that level, it can be achieved through the placeholder buffer level.\n\nconst PLACEHOLDER_BUFFER_DECAY = 0.99; // Make sure placeholder buffer does not stick around too long.\n\nfunction BolaRule(config) {\n\n config = config || {};\n const context = this.context;\n\n const dashMetrics = config.dashMetrics;\n const mediaPlayerModel = config.mediaPlayerModel;\n const eventBus = EventBus(context).getInstance();\n const abrController = AbrController(context).getInstance();\n\n let instance,\n logger,\n bolaStateDict;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n resetInitialSettings();\n eventBus.on(MediaPlayerEvents.BUFFER_EMPTY, _onBufferEmpty, instance);\n eventBus.on(MediaPlayerEvents.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.on(MediaPlayerEvents.METRIC_ADDED, _onMetricAdded, instance);\n eventBus.on(MediaPlayerEvents.QUALITY_CHANGE_REQUESTED, _onQualityChangeRequested, instance);\n eventBus.on(MediaPlayerEvents.FRAGMENT_LOADING_ABANDONED, _onFragmentLoadingAbandoned, instance);\n eventBus.on(Events.MEDIA_FRAGMENT_LOADED, _onMediaFragmentLoaded, instance);\n eventBus.on(Events.SETTING_UPDATED_MAX_BITRATE, _onMinMaxBitrateUpdated, instance);\n eventBus.on(Events.SETTING_UPDATED_MIN_BITRATE, _onMinMaxBitrateUpdated, instance);\n }\n\n /**\n * If the buffer is empty, we don't want the placeholder buffer to artificially raise BOLA quality\n * @param {object} e\n * @private\n */\n function _onBufferEmpty(e) {\n const mediaType = e.mediaType;\n const streamId = e.streamId;\n // if audio buffer runs empty (due to track switch for example) then reset placeholder buffer only for audio (to avoid decrease video BOLA quality)\n const stateDict = mediaType === Constants.AUDIO ? [Constants.AUDIO] : bolaStateDict[streamId];\n for (const mediaType in stateDict) {\n if (bolaStateDict[streamId] && bolaStateDict[streamId].hasOwnProperty(mediaType) && bolaStateDict[streamId][mediaType].state === BOLA_STATE_STEADY) {\n bolaStateDict[streamId][mediaType].placeholderBuffer = 0;\n }\n }\n }\n\n /**\n * Clear BOLA parameters for each media type once we seek. By setting to BOLA_STATE_STARTUP we use the throughput to get the possible quality.\n * @private\n */\n function _onPlaybackSeeking(e) {\n // TODO: 1. Verify what happens if we seek mid-fragment.\n // TODO: 2. If e.g. we have 10s fragments and seek, we might want to download the first fragment at a lower quality to restart playback quickly.\n const streamId = e.streamId\n for (const mediaType in bolaStateDict[streamId]) {\n if (bolaStateDict[streamId].hasOwnProperty(mediaType)) {\n const bolaState = bolaStateDict[streamId][mediaType];\n if (bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n bolaState.state = BOLA_STATE_STARTUP;\n _clearBolaStateOnSeek(bolaState);\n }\n }\n }\n }\n\n function _clearBolaStateOnSeek(bolaState) {\n bolaState.placeholderBuffer = 0;\n bolaState.mostAdvancedSegmentStart = NaN;\n bolaState.lastSegmentWasReplacement = false;\n bolaState.lastSegmentStart = NaN;\n bolaState.lastSegmentDurationS = NaN;\n bolaState.lastSegmentRequestTimeMs = NaN;\n bolaState.lastSegmentFinishTimeMs = NaN;\n }\n\n /**\n * Handle situations in which the downloaded quality differs from what the BOLA algorithm recommended\n * @param e\n * @private\n */\n function _onMetricAdded(e) {\n try {\n if (e && e.metric === MetricsConstants.HTTP_REQUEST && e.value && e.value.type === HTTPRequest.MEDIA_SEGMENT_TYPE && e.value.trace && e.value.trace.length) {\n const bolaState = bolaStateDict[e.value._streamId] && bolaStateDict[e.value._streamId][e.mediaType] ? bolaStateDict[e.value._streamId][e.mediaType] : null;\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n bolaState.lastSegmentRequestTimeMs = e.value.trequest.getTime();\n bolaState.lastSegmentFinishTimeMs = e.value._tfinish.getTime();\n _checkNewSegment(bolaState, e.mediaType);\n }\n }\n } catch (e) {\n logger.error(e);\n }\n }\n\n /**\n * When a new segment is downloaded, we get two notifications: onMediaFragmentLoaded() and onMetricAdded(). It is\n * possible that the quality for the downloaded segment was lower (not higher) than the quality indicated by BOLA.\n * This might happen because of other rules such as the DroppedFramesRule. When this happens, we trim the\n * placeholder buffer to make BOLA more stable. This mechanism also avoids inflating the buffer when BOLA itself\n * decides not to increase the quality to avoid oscillations.\n *\n * We should also check for replacement segments (fast switching). In this case, a segment is downloaded but does\n * not grow the actual buffer. Fast switching might cause the buffer to deplete, causing BOLA to drop the bitrate.\n * We avoid this by growing the placeholder buffer.\n * @param bolaState\n * @param mediaType\n */\n function _checkNewSegment(bolaState, mediaType) {\n if (!isNaN(bolaState.lastSegmentStart) && !isNaN(bolaState.lastSegmentRequestTimeMs) && !isNaN(bolaState.placeholderBuffer)) {\n bolaState.placeholderBuffer *= PLACEHOLDER_BUFFER_DECAY;\n\n // Find what maximum buffer corresponding to last segment was, and ensure placeholder is not relatively larger.\n if (!isNaN(bolaState.lastSegmentFinishTimeMs)) {\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n const bufferAtLastSegmentRequest = bufferLevel + 0.001 * (bolaState.lastSegmentFinishTimeMs - bolaState.lastSegmentRequestTimeMs); // estimate\n const maxEffectiveBufferForLastSegment = _maxBufferLevelForRepresentation(bolaState, bolaState.currentRepresentation);\n const maxPlaceholderBuffer = Math.max(0, maxEffectiveBufferForLastSegment - bufferAtLastSegmentRequest);\n bolaState.placeholderBuffer = Math.min(maxPlaceholderBuffer, bolaState.placeholderBuffer);\n }\n\n // then see if we should grow placeholder buffer\n if (bolaState.lastSegmentWasReplacement && !isNaN(bolaState.lastSegmentDurationS)) {\n // compensate for segments that were downloaded but did not grow the buffer\n bolaState.placeholderBuffer += bolaState.lastSegmentDurationS;\n }\n\n bolaState.lastSegmentStart = NaN;\n bolaState.lastSegmentRequestTimeMs = NaN;\n }\n }\n\n /**\n * Useful to store change requests when abandoning a download.\n * @param e\n * @private\n */\n function _onQualityChangeRequested(e) {\n if (e && bolaStateDict[e.streamId] && bolaStateDict[e.streamId][e.mediaType]) {\n const bolaState = bolaStateDict[e.streamId][e.mediaType];\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n bolaState.currentRepresentation = e.newRepresentation;\n }\n }\n }\n\n /**\n *\n * @param rulesContext\n * @returns {{}}\n * @private\n */\n function _getInitialBolaState(rulesContext) {\n const initialState = {};\n const mediaInfo = rulesContext.getMediaInfo();\n const representations = abrController.getPossibleVoRepresentationsFilteredBySettings(mediaInfo, true);\n const bitrates = representations.map(r => r.bandwidth);\n let utilities = bitrates.map(b => Math.log(b));\n utilities = utilities.map(u => u - utilities[0] + 1); // normalize\n const bufferTimeDefault = mediaPlayerModel.getBufferTimeDefault();\n const params = _calculateBolaParameters(bufferTimeDefault, representations, utilities);\n\n // only happens when there is only one bitrate level\n if (!params) {\n initialState.state = BOLA_STATE_ONE_BITRATE;\n } else {\n initialState.state = BOLA_STATE_STARTUP;\n initialState.representations = representations;\n initialState.utilities = utilities;\n initialState.bufferTimeDefault = bufferTimeDefault;\n initialState.Vp = params.Vp;\n initialState.gp = params.gp;\n initialState.currentRepresentation = null;\n _clearBolaStateOnSeek(initialState);\n }\n\n return initialState;\n }\n\n /**\n * NOTE: in live streaming, the real buffer level can drop below minimumBufferS, but BOLA should not stick to lowest bitrate by using a placeholder buffer level\n * @param bufferTimeDefault\n * @param representations\n * @param utilities\n * @returns {{gp: number, Vp: number}|null}\n * @private\n */\n function _calculateBolaParameters(bufferTimeDefault, representations, utilities) {\n const highestUtilityIndex = utilities.reduce((highestIndex, u, uIndex) => (u > utilities[highestIndex] ? uIndex : highestIndex), 0);\n\n // if highestUtilityIndex === 0, then always use lowest bitrate\n if (highestUtilityIndex === 0) {\n return null;\n }\n\n const bufferTime = Math.max(bufferTimeDefault, MINIMUM_BUFFER_S + MINIMUM_BUFFER_PER_BITRATE_LEVEL_S * representations.length);\n\n // TODO: Investigate if following can be better if utilities are not the default Math.log utilities.\n // If using Math.log utilities, we can choose Vp and gp to always prefer bitrates[0] at minimumBufferS and bitrates[max] at bufferTarget.\n // (Vp * (utility + gp) - bufferLevel) / bitrate has the maxima described when:\n // Vp * (utilities[0] + gp - 1) === minimumBufferS and Vp * (utilities[max] + gp - 1) === bufferTarget\n // giving:\n const gp = (utilities[highestUtilityIndex] - 1) / (bufferTime / MINIMUM_BUFFER_S - 1);\n const Vp = MINIMUM_BUFFER_S / gp;\n // note that expressions for gp and Vp assume utilities[0] === 1, which is true because of normalization\n\n return { gp: gp, Vp: Vp };\n }\n\n /**\n * If the buffer target is changed (can this happen mid-stream?), then adjust BOLA parameters accordingly.\n * @param bolaState\n * @param mediaType\n * @private\n */\n function _checkBolaStateBufferTimeDefault(bolaState, mediaType) {\n const bufferTimeDefault = mediaPlayerModel.getBufferTimeDefault();\n if (bolaState.bufferTimeDefault !== bufferTimeDefault) {\n const params = _calculateBolaParameters(bufferTimeDefault, bolaState.representations, bolaState.utilities);\n if (params.Vp !== bolaState.Vp || params.gp !== bolaState.gp) {\n // correct placeholder buffer using two criteria:\n // 1. do not change effective buffer level at effectiveBufferLevel === MINIMUM_BUFFER_S ( === Vp * gp )\n // 2. scale placeholder buffer by Vp subject to offset indicated in 1.\n\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n let effectiveBufferLevel = bufferLevel + bolaState.placeholderBuffer;\n\n effectiveBufferLevel -= MINIMUM_BUFFER_S;\n effectiveBufferLevel *= params.Vp / bolaState.Vp;\n effectiveBufferLevel += MINIMUM_BUFFER_S;\n\n bolaState.bufferTimeDefault = bufferTimeDefault;\n bolaState.Vp = params.Vp;\n bolaState.gp = params.gp;\n bolaState.placeholderBuffer = Math.max(0, effectiveBufferLevel - bufferLevel);\n }\n }\n }\n\n /**\n * The core idea of BOLA.\n * @param bolaState\n * @param bufferLevel\n * @returns {Representation}\n * @private\n */\n function _getRepresentationFromBufferLevel(bolaState, bufferLevel) {\n const bitrateCount = bolaState.representations.length;\n let quality = NaN;\n let score = NaN;\n for (let i = 0; i < bitrateCount; ++i) {\n let s = (bolaState.Vp * (bolaState.utilities[i] - 1 + bolaState.gp) - bufferLevel) / bolaState.representations[i].bandwidth;\n if (isNaN(score) || s >= score) {\n score = s;\n quality = i;\n }\n }\n return bolaState.representations[quality];\n }\n\n /**\n * Maximum buffer level which prefers to download at quality rather than wait\n * @param bolaState\n * @param representation\n * @returns {number}\n * @private\n */\n function _maxBufferLevelForRepresentation(bolaState, representation) {\n return bolaState.Vp * (bolaState.utilities[representation.absoluteIndex] + bolaState.gp);\n }\n\n\n /**\n * The placeholder buffer increases the effective buffer that is used to calculate the bitrate.\n * There are two main reasons we might want to increase the placeholder buffer:\n *\n * 1. When a segment finishes downloading, we would expect to get a call on getSwitchRequest() regarding the quality for\n * the next segment. However, there might be a delay before the next call. E.g. when streaming live content, the\n * next segment might not be available yet. If the call to getSwitchRequest() does happens after a delay, we don't\n * want the delay to change the BOLA decision - we only want to factor download time to decide on bitrate level.\n *\n * 2. It is possible to get a call to getSwitchRequest() without having a segment download. The buffer target in dash.js\n * is different for top-quality segments and lower-quality segments. If getSwitchRequest() returns a lower-than-top\n * quality, then the buffer controller might decide not to download a segment. When dash.js is ready for the next\n * segment, getSwitchRequest() will be called again. We don't want this extra delay to factor in the bitrate decision.\n * @param bolaState\n * @param mediaType\n * @private\n */\n function _updatePlaceholderBuffer(bolaState, mediaType) {\n const nowMs = Date.now();\n\n if (!isNaN(bolaState.lastSegmentFinishTimeMs)) {\n // compensate for non-bandwidth-derived delays, e.g., live streaming availability, buffer controller\n const delay = 0.001 * (nowMs - bolaState.lastSegmentFinishTimeMs);\n bolaState.placeholderBuffer += Math.max(0, delay);\n } else if (!isNaN(bolaState.lastCallTimeMs)) {\n // no download after last call, compensate for delay between calls\n const delay = 0.001 * (nowMs - bolaState.lastCallTimeMs);\n bolaState.placeholderBuffer += Math.max(0, delay);\n }\n\n bolaState.lastCallTimeMs = nowMs;\n bolaState.lastSegmentStart = NaN;\n bolaState.lastSegmentRequestTimeMs = NaN;\n bolaState.lastSegmentFinishTimeMs = NaN;\n\n _checkBolaStateBufferTimeDefault(bolaState, mediaType);\n }\n\n function _onMediaFragmentLoaded(e) {\n if (e && e.chunk && e.chunk.representation.mediaInfo && bolaStateDict[e.streamId]) {\n const bolaState = bolaStateDict[e.streamId][e.chunk.representation.mediaInfo.type];\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n const start = e.chunk.start;\n if (isNaN(bolaState.mostAdvancedSegmentStart) || start > bolaState.mostAdvancedSegmentStart) {\n bolaState.mostAdvancedSegmentStart = start;\n bolaState.lastSegmentWasReplacement = false;\n } else {\n bolaState.lastSegmentWasReplacement = true;\n }\n\n bolaState.lastSegmentStart = start;\n bolaState.lastSegmentDurationS = e.chunk.duration;\n bolaState.currentRepresentation = e.chunk.representation;\n _checkNewSegment(bolaState, e.chunk.representation.mediaInfo.type);\n }\n }\n }\n\n /**\n * We need to reset the Bola State once the min/max bitrate settings have been updated. Otherwise, the utility function works on outdated values\n * @private\n */\n function _onMinMaxBitrateUpdated() {\n resetInitialSettings()\n }\n\n\n /**\n * The minimum buffer level that would cause BOLA to choose target quality rather than a lower bitrate\n * @param bolaState\n * @param representation\n * @returns {number}\n * @private\n */\n function _minBufferLevelForRepresentation(bolaState, representation) {\n const absoluteIndex = representation.absoluteIndex\n const qBitrate = representation.bandwidth;\n const qUtility = bolaState.utilities[absoluteIndex];\n\n let min = 0;\n\n // for each bitrate less than bitrates[absoluteIndex], BOLA should prefer quality (unless other bitrate has higher utility)\n for (let i = absoluteIndex - 1; i >= 0; --i) {\n if (bolaState.utilities[i] < bolaState.utilities[absoluteIndex]) {\n const iBitrate = bolaState.representations[i].bandwidth;\n const iUtility = bolaState.utilities[i];\n\n const level = bolaState.Vp * (bolaState.gp + (qBitrate * iUtility - iBitrate * qUtility) / (qBitrate - iBitrate));\n min = Math.max(min, level); // we want min to be small but at least level(i) for all i\n }\n }\n return min;\n }\n\n /**\n *\n * @param e\n * @private\n */\n function _onFragmentLoadingAbandoned(e) {\n if (e && bolaStateDict[e.streamId]) {\n const bolaState = bolaStateDict[e.streamId][e.mediaType];\n if (bolaState && bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n // deflate placeholderBuffer - note that we want to be conservative when abandoning\n const bufferLevel = dashMetrics.getCurrentBufferLevel(e.mediaType);\n let wantEffectiveBufferLevel;\n if (bolaState.currentRepresentation.absoluteIndex > 0) {\n // deflate to point where BOLA just chooses newQuality over newQuality-1\n wantEffectiveBufferLevel = _minBufferLevelForRepresentation(bolaState, bolaState.currentRepresentation);\n } else {\n wantEffectiveBufferLevel = MINIMUM_BUFFER_S;\n }\n const maxPlaceholderBuffer = Math.max(0, wantEffectiveBufferLevel - bufferLevel);\n bolaState.placeholderBuffer = Math.min(bolaState.placeholderBuffer, maxPlaceholderBuffer);\n }\n }\n }\n\n function handleNewMediaInfo(newMediaInfo) {\n if (!newMediaInfo || !newMediaInfo.streamInfo || !newMediaInfo.type) {\n return\n }\n if (bolaStateDict[newMediaInfo.streamInfo.id] && bolaStateDict[newMediaInfo.streamInfo.id][newMediaInfo.type]) {\n delete bolaStateDict[newMediaInfo.streamInfo.id][newMediaInfo.type];\n }\n }\n\n /**\n * At startup we decide on the best quality based on the throughput. The placeholderBuffer is adjusted accordingly.\n * @param switchRequest\n * @param rulesContext\n * @param bolaState\n * @private\n */\n function _handleBolaStateStartup(switchRequest, rulesContext, bolaState) {\n const mediaType = rulesContext.getMediaType();\n const throughputController = rulesContext.getThroughputController();\n const safeThroughput = throughputController.getSafeAverageThroughput(mediaType);\n\n if (isNaN(safeThroughput)) {\n return\n }\n\n const mediaInfo = rulesContext.getMediaInfo();\n const representation = abrController.getOptimalRepresentationForBitrate(mediaInfo, safeThroughput, true);\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n switchRequest.representation = representation;\n switchRequest.reason.throughput = safeThroughput;\n bolaState.placeholderBuffer = Math.max(0, _minBufferLevelForRepresentation(bolaState, representation) - bufferLevel);\n bolaState.currentRepresentation = representation;\n\n if (!isNaN(bolaState.lastSegmentDurationS) && bufferLevel >= bolaState.lastSegmentDurationS) {\n bolaState.state = BOLA_STATE_STEADY;\n }\n }\n\n /**\n *\n * @param switchRequest\n * @param rulesContext\n * @param bolaState\n * @private\n */\n function _handleBolaStateSteady(switchRequest, rulesContext, bolaState) {\n const mediaType = rulesContext.getMediaType();\n const throughputController = rulesContext.getThroughputController();\n const mediaInfo = rulesContext.getMediaInfo();\n const safeThroughput = throughputController.getSafeAverageThroughput(mediaType);\n const scheduleController = rulesContext.getScheduleController();\n _updatePlaceholderBuffer(bolaState, mediaType);\n\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType);\n // NB: The placeholder buffer is added to bufferLevel to come up with a bitrate.\n // This might lead BOLA to be too optimistic and to choose a bitrate that would lead to rebuffering -\n // if the real buffer bufferLevel runs out, the placeholder buffer cannot prevent rebuffering.\n // However, the InsufficientBufferRule takes care of this scenario.\n let representation = _getRepresentationFromBufferLevel(bolaState, bufferLevel + bolaState.placeholderBuffer);\n\n // we want to avoid oscillations\n // We implement the \"BOLA-O\" variant: when network bandwidth lies between two encoded bitrate levels, stick to the lowest level.\n const representationForThroughput = abrController.getOptimalRepresentationForBitrate(mediaInfo, safeThroughput, true);\n if (representation.absoluteIndex > bolaState.currentRepresentation.absoluteIndex && representation.absoluteIndex > representationForThroughput.absoluteIndex) {\n // only intervene if we are trying to *increase* quality to an *unsustainable* level\n // we are only avoid oscillations - do not drop below last quality\n representation = representationForThroughput.absoluteIndex > bolaState.currentRepresentation.absoluteIndex ? representationForThroughput : bolaState.currentRepresentation;\n }\n\n // We do not want to overfill buffer with low quality chunks.\n // Note that there will be no delay if buffer level is below MINIMUM_BUFFER_S, probably even with some margin higher than MINIMUM_BUFFER_S.\n let delayS = Math.max(0, bufferLevel + bolaState.placeholderBuffer - _maxBufferLevelForRepresentation(bolaState, representation));\n\n // First reduce placeholder buffer, then tell schedule controller to pause.\n if (delayS <= bolaState.placeholderBuffer) {\n bolaState.placeholderBuffer -= delayS;\n delayS = 0;\n } else {\n delayS -= bolaState.placeholderBuffer;\n bolaState.placeholderBuffer = 0;\n\n if (!abrController.isPlayingAtTopQuality(representation)) {\n // At top quality, allow schedule controller to decide how far to fill buffer.\n scheduleController.setTimeToLoadDelay(1000 * delayS);\n } else {\n delayS = 0;\n }\n }\n\n switchRequest.representation = representation;\n switchRequest.reason.throughput = safeThroughput;\n switchRequest.reason.bufferLevel = bufferLevel;\n switchRequest.reason.placeholderBuffer = bolaState.placeholderBuffer;\n switchRequest.reason.delay = delayS;\n bolaState.currentRepresentation = representation;\n }\n\n /**\n * Bad state we should not have arrived here. Try to recover.\n * @param switchRequest\n * @param rulesContext\n * @param bolaState\n */\n function _handleBolaStateBad(switchRequest, rulesContext, bolaState) {\n logger.debug('BOLA ABR rule invoked in bad state.');\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const throughputController = rulesContext.getThroughputController();\n const safeThroughput = throughputController.getSafeAverageThroughput(mediaType);\n switchRequest.representation = abrController.getOptimalRepresentationForBitrate(mediaInfo, safeThroughput, true);\n switchRequest.reason.state = bolaState.state;\n switchRequest.reason.throughput = safeThroughput;\n bolaState.state = BOLA_STATE_STARTUP;\n _clearBolaStateOnSeek(bolaState);\n }\n\n function getSwitchRequest(rulesContext) {\n try {\n const switchRequest = SwitchRequest(context).create();\n\n const scheduleController = rulesContext.getScheduleController();\n scheduleController.setTimeToLoadDelay(0);\n\n switchRequest.rule = this.getClassName();\n switchRequest.reason = switchRequest.reason || {};\n\n const bolaState = _getBolaState(rulesContext);\n switchRequest.reason.state = bolaState.state;\n\n switch (bolaState.state) {\n case BOLA_STATE_ONE_BITRATE:\n break;\n case BOLA_STATE_STARTUP:\n _handleBolaStateStartup(switchRequest, rulesContext, bolaState);\n break;\n case BOLA_STATE_STEADY:\n _handleBolaStateSteady(switchRequest, rulesContext, bolaState)\n break;\n default:\n _handleBolaStateBad(switchRequest, rulesContext, bolaState)\n break;\n }\n\n return switchRequest;\n } catch (e) {\n logger.error(e);\n return SwitchRequest(context).create();\n }\n }\n\n function _getBolaState(rulesContext) {\n const mediaType = rulesContext.getMediaType();\n const streamId = rulesContext.getStreamInfo().id;\n if (!bolaStateDict[streamId]) {\n bolaStateDict = {};\n bolaStateDict[streamId] = {};\n }\n let bolaState = bolaStateDict[streamId][mediaType];\n if (!bolaState) {\n bolaState = _getInitialBolaState(rulesContext);\n bolaStateDict[streamId][mediaType] = bolaState;\n } else if (bolaState.state !== BOLA_STATE_ONE_BITRATE) {\n _checkBolaStateBufferTimeDefault(bolaState, mediaType);\n }\n return bolaState;\n }\n\n function resetInitialSettings() {\n bolaStateDict = {};\n }\n\n function reset() {\n resetInitialSettings();\n\n eventBus.off(MediaPlayerEvents.BUFFER_EMPTY, _onBufferEmpty, instance);\n eventBus.off(MediaPlayerEvents.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.off(MediaPlayerEvents.METRIC_ADDED, _onMetricAdded, instance);\n eventBus.off(MediaPlayerEvents.QUALITY_CHANGE_REQUESTED, _onQualityChangeRequested, instance);\n eventBus.off(MediaPlayerEvents.FRAGMENT_LOADING_ABANDONED, _onFragmentLoadingAbandoned, instance);\n eventBus.off(Events.MEDIA_FRAGMENT_LOADED, _onMediaFragmentLoaded, instance);\n eventBus.off(Events.SETTING_UPDATED_MAX_BITRATE, _onMinMaxBitrateUpdated, instance);\n eventBus.off(Events.SETTING_UPDATED_MIN_BITRATE, _onMinMaxBitrateUpdated, instance);\n }\n\n instance = {\n getSwitchRequest,\n handleNewMediaInfo,\n reset\n };\n\n setup();\n return instance;\n}\n\nBolaRule.__dashjs_factory_name = 'BolaRule';\nexport default FactoryMaker.getClassFactory(BolaRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2020, Unified Streaming.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n// For a description of the Learn2Adapt-LowLatency (L2A-LL) bitrate adaptation algorithm, see https://github.com/unifiedstreaming/Learn2Adapt-LowLatency/blob/master/Online_learning_for_bitrate_adaptation_in_low_latency_live_streaming_CR.pdf\n\nimport MetricsConstants from '../../constants/MetricsConstants.js';\nimport SwitchRequest from '../SwitchRequest.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport {HTTPRequest} from '../../vo/metrics/HTTPRequest.js';\nimport EventBus from '../../../core/EventBus.js';\nimport Events from '../../../core/events/Events.js';\nimport Debug from '../../../core/Debug.js';\nimport Constants from '../../constants/Constants.js';\n\nconst L2A_STATE_ONE_BITRATE = 'L2A_STATE_ONE_BITRATE'; // If there is only one bitrate (or initialization failed), always return NO_CHANGE.\nconst L2A_STATE_STARTUP = 'L2A_STATE_STARTUP'; // Set placeholder buffer such that we download fragments at most recently measured throughput.\nconst L2A_STATE_STEADY = 'L2A_STATE_STEADY'; // Buffer primed, we switch to steady operation.\nconst HORIZON = 4; // Optimization horizon (The amount of steps required to achieve convergence)\nconst VL = Math.pow(HORIZON, 0.99);// Cautiousness parameter, used to control aggressiveness of the bitrate decision process.\nconst REACT = 2;\n\nfunction L2ARule(config) {\n config = config || {};\n const context = this.context;\n\n const dashMetrics = config.dashMetrics;\n const eventBus = EventBus(context).getInstance();\n\n let instance,\n l2AStateDict,\n l2AParameterDict,\n logger;\n\n /**\n * Setup function to initialize L2ARule\n */\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n _resetInitialSettings();\n\n eventBus.on(Events.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.on(Events.MEDIA_FRAGMENT_LOADED, _onMediaFragmentLoaded, instance);\n eventBus.on(Events.METRIC_ADDED, _onMetricAdded, instance);\n }\n\n /**\n * Sets the initial state of the algorithm. Calls the initialize function for the paramteters.\n * @param {object} rulesContext\n * @return {object} initialState\n * @private\n */\n function _getInitialL2AState(rulesContext) {\n const initialState = {};\n const mediaInfo = rulesContext.getMediaInfo();\n\n initialState.state = L2A_STATE_STARTUP;\n initialState.currentRepresentation = null;\n\n _initializeL2AParameters(mediaInfo);\n _clearL2AStateOnSeek(initialState);\n\n return initialState;\n }\n\n /**\n * Initializes the parameters of the algorithm. This will be done once for each media type.\n * @param {object} mediaInfo\n * @private\n */\n function _initializeL2AParameters(mediaInfo) {\n\n if (!mediaInfo || !mediaInfo.type) {\n return;\n }\n l2AParameterDict[mediaInfo.type] = {};\n l2AParameterDict[mediaInfo.type].w = []; //Vector of probabilities associated with bitrate decisions\n l2AParameterDict[mediaInfo.type].prev_w = []; //Vector of probabilities associated with bitrate decisions calculated in the previous step\n l2AParameterDict[mediaInfo.type].Q = 0; //Initialization of Lagrangian multiplier (This keeps track of the buffer displacement)\n l2AParameterDict[mediaInfo.type].segment_request_start_s = 0;\n l2AParameterDict[mediaInfo.type].segment_download_finish_s = 0;\n l2AParameterDict[mediaInfo.type].B_target = 1.5; //Target buffer level\n }\n\n\n /**\n * Clears the state object\n * @param {object} l2AState\n * @private\n */\n function _clearL2AStateOnSeek(l2AState) {\n l2AState.placeholderBuffer = 0;\n l2AState.mostAdvancedSegmentStart = NaN;\n l2AState.lastSegmentWasReplacement = false;\n l2AState.lastSegmentStart = NaN;\n l2AState.lastSegmentDurationS = NaN;\n l2AState.lastSegmentRequestTimeMs = NaN;\n l2AState.lastSegmentFinishTimeMs = NaN;\n l2AState.lastSegmentUrl = '';\n }\n\n\n /**\n * Returns the state object for a fiven media type. If the state object is not yet defined _getInitialL2AState is called\n * @param {object} rulesContext\n * @return {object} l2AState\n * @private\n */\n function _getL2AState(rulesContext) {\n const mediaType = rulesContext.getMediaType();\n let l2AState = l2AStateDict[mediaType];\n\n if (!l2AState) {\n l2AState = _getInitialL2AState(rulesContext);\n l2AStateDict[mediaType] = l2AState;\n }\n\n return l2AState;\n }\n\n /**\n * Event handler for the seeking event.\n * @private\n */\n function _onPlaybackSeeking() {\n for (const mediaType in l2AStateDict) {\n if (l2AStateDict.hasOwnProperty(mediaType)) {\n const l2aState = l2AStateDict[mediaType];\n if (l2aState.state !== L2A_STATE_ONE_BITRATE) {\n l2aState.state = L2A_STATE_STARTUP;\n _clearL2AStateOnSeek(l2aState);\n }\n }\n }\n }\n\n /**\n * Event handler for the mediaFragmentLoaded event\n * @param {object} e\n * @private\n */\n function _onMediaFragmentLoaded(e) {\n if (e && e.chunk && e.chunk.representation && e.chunk.representation.mediaInfo) {\n const l2AState = l2AStateDict[e.chunk.representation.mediaInfo.type];\n const l2AParameters = l2AParameterDict[e.chunk.representation.mediaInfo.type];\n\n if (l2AState && l2AState.state !== L2A_STATE_ONE_BITRATE) {\n const start = e.chunk.start;\n if (isNaN(l2AState.mostAdvancedSegmentStart) || start > l2AState.mostAdvancedSegmentStart) {\n l2AState.mostAdvancedSegmentStart = start;\n l2AState.lastSegmentWasReplacement = false;\n } else {\n l2AState.lastSegmentWasReplacement = true;\n }\n\n l2AState.lastSegmentStart = start;\n l2AState.lastSegmentDurationS = e.chunk.duration;\n l2AState.currentRepresentation = e.chunk.representation;\n\n _checkNewSegment(l2AState, l2AParameters);\n }\n }\n }\n\n /**\n * Event handler for the metricAdded event\n * @param {object} e\n * @private\n */\n function _onMetricAdded(e) {\n if (e && e.metric === MetricsConstants.HTTP_REQUEST && e.value && e.value.type === HTTPRequest.MEDIA_SEGMENT_TYPE && e.value.trace && e.value.trace.length) {\n const l2AState = l2AStateDict[e.mediaType];\n const l2AParameters = l2AParameterDict[e.mediaType];\n\n if (l2AState && l2AState.state !== L2A_STATE_ONE_BITRATE) {\n l2AState.lastSegmentRequestTimeMs = e.value.trequest.getTime();\n l2AState.lastSegmentFinishTimeMs = e.value._tfinish.getTime();\n _checkNewSegment(l2AState, l2AParameters);\n }\n }\n }\n\n /**\n * When a new metric has been added or a media fragment has been loaded the state is adjusted accordingly\n * @param {object} L2AState\n * @param {object} l2AParameters\n * @private\n */\n function _checkNewSegment(L2AState, l2AParameters) {\n if (!isNaN(L2AState.lastSegmentStart) && !isNaN(L2AState.lastSegmentRequestTimeMs)) {\n l2AParameters.segment_request_start_s = 0.001 * L2AState.lastSegmentRequestTimeMs;\n l2AParameters.segment_download_finish_s = 0.001 * L2AState.lastSegmentFinishTimeMs;\n L2AState.lastSegmentStart = NaN;\n L2AState.lastSegmentRequestTimeMs = NaN;\n }\n }\n\n\n /**\n * Dot multiplication of two arrays\n * @param {array} arr1\n * @param {array} arr2\n * @return {number} sumdot\n * @private\n */\n\n function _dotmultiplication(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return -1;\n }\n let sumdot = 0;\n for (let i = 0; i < arr1.length; i++) {\n sumdot = sumdot + arr1[i] * arr2[i];\n }\n return sumdot;\n }\n\n /**\n * Project an n-dim vector y to the simplex Dn\n * Dn = { x : x n-dim, 1 >= x >= 0, sum(x) = 1}\n * Algorithm is explained at http://arxiv.org/abs/1101.6081\n * @param {array} arr\n * @return {array}\n */\n function euclideanProjection(arr) {\n const m = arr.length;\n let bget = false;\n let arr2 = [];\n for (let ii = 0; ii < m; ++ii) {\n arr2[ii] = arr[ii];\n }\n let s = arr.sort(function (a, b) {\n return b - a;\n });\n let tmpsum = 0;\n let tmax = 0;\n let x = [];\n for (let ii = 0; ii < m - 1; ++ii) {\n tmpsum = tmpsum + s[ii];\n tmax = (tmpsum - 1) / (ii + 1);\n if (tmax >= s[ii + 1]) {\n bget = true;\n break;\n }\n }\n if (!bget) {\n tmax = (tmpsum + s[m - 1] - 1) / m;\n }\n for (let ii = 0; ii < m; ++ii) {\n x[ii] = Math.max(arr2[ii] - tmax, 0);\n }\n return x;\n }\n\n /**\n *\n * @param rulesContext\n * @param switchRequest\n * @param l2AState\n * @private\n */\n function _handleStartupState(rulesContext, switchRequest, l2AState) {\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const throughputController = rulesContext.getThroughputController();\n const safeThroughput = throughputController.getSafeAverageThroughput(mediaType);\n\n if (isNaN(safeThroughput)) {\n // still starting up - not enough information\n return switchRequest;\n }\n\n const abrController = rulesContext.getAbrController();\n const representation = abrController.getOptimalRepresentationForBitrate(mediaInfo, safeThroughput, true);//During strat-up phase abr.controller is responsible for bitrate decisions.\n const bufferLevel = dashMetrics.getCurrentBufferLevel(mediaType, true);\n const l2AParameter = l2AParameterDict[mediaType];\n const possibleRepresentations = abrController.getPossibleVoRepresentationsFilteredBySettings(mediaInfo, true);\n\n switchRequest.representation = representation;\n switchRequest.reason.throughput = safeThroughput;\n l2AState.currentRepresentation = representation;\n\n if (!isNaN(l2AState.lastSegmentDurationS) && bufferLevel >= l2AParameter.B_target) {\n l2AState.state = L2A_STATE_STEADY;\n l2AParameter.Q = VL;// Initialization of Q langrangian multiplier\n // Update of probability vector w, to be used in main adaptation logic of L2A below (steady state)\n for (let i = 0; i < possibleRepresentations.length; ++i) {\n const rep = possibleRepresentations[i];\n if (rep.id === l2AState.currentRepresentation.id) {\n l2AParameter.prev_w[i] = 1;\n } else {\n l2AParameter.prev_w[i] = 0;\n }\n }\n }\n }\n\n function _handleSteadyState(rulesContext, switchRequest, l2AState) {\n let diff1 = []; //Used to calculate the difference between consecutive decisions (w-w_prev)\n const throughputController = rulesContext.getThroughputController();\n const mediaType = rulesContext.getMediaType();\n let lastThroughput = throughputController.getAverageThroughput(mediaType, Constants.THROUGHPUT_CALCULATION_MODES.ARITHMETIC_MEAN, 1);\n let currentHttpRequest = dashMetrics.getCurrentHttpRequest(mediaType);\n let selectedRepresentation = null;\n const l2AParameter = l2AParameterDict[mediaType];\n\n //To avoid division with 0 (avoid infinity) in case of an absolute network outage\n if (lastThroughput < 1) {\n lastThroughput = 1;\n }\n\n // Note that for SegmentBase addressing the request url does not change.\n // As this is not relevant for low latency streaming at this point the check below is sufficient\n if (currentHttpRequest.url === l2AState.lastSegmentUrl ||\n currentHttpRequest.type === HTTPRequest.INIT_SEGMENT_TYPE) {\n // No change to inputs or init segment so use previously calculated quality\n selectedRepresentation = l2AState.currentRepresentation;\n\n } else { // Recalculate Q\n let V = l2AState.lastSegmentDurationS;\n let sign = 1;\n\n //Main adaptation logic of L2A-LL\n const abrController = rulesContext.getAbrController();\n const mediaInfo = rulesContext.getMediaInfo();\n const possibleRepresentations = abrController.getPossibleVoRepresentationsFilteredBySettings(mediaInfo, true);\n const videoModel = rulesContext.getVideoModel();\n let currentPlaybackRate = videoModel.getPlaybackRate();\n const alpha = Math.max(Math.pow(HORIZON, 1), VL * Math.sqrt(HORIZON));// Step size, used for gradient descent exploration granularity\n for (let i = 0; i < possibleRepresentations.length; ++i) {\n const rep = possibleRepresentations[i];\n\n // In this case buffer would deplete, leading to a stall, which increases latency and thus the particular probability of selection of bitrate[i] should be decreased.\n if (currentPlaybackRate * rep.bitrateInKbit > lastThroughput) {\n sign = -1;\n }\n\n // The objective of L2A is to minimize the overall latency=request-response time + buffer length after download+ potential stalling (if buffer less than chunk downlad time)\n l2AParameter.w[i] = l2AParameter.prev_w[i] + sign * (V / (2 * alpha)) * ((l2AParameter.Q + VL) * (currentPlaybackRate * rep.bitrateInKbit / lastThroughput));//Lagrangian descent\n }\n\n // Apply euclidean projection on w to ensure w expresses a probability distribution\n l2AParameter.w = euclideanProjection(l2AParameter.w);\n\n for (let i = 0; i < possibleRepresentations.length; ++i) {\n diff1[i] = l2AParameter.w[i] - l2AParameter.prev_w[i];\n l2AParameter.prev_w[i] = l2AParameter.w[i];\n }\n\n // Lagrangian multiplier Q calculation:\n const bitrates = possibleRepresentations.map((rep) => {\n return rep.bandwidth;\n })\n l2AParameter.Q = Math.max(0, l2AParameter.Q - V + V * currentPlaybackRate * ((_dotmultiplication(bitrates, l2AParameter.prev_w) + _dotmultiplication(bitrates, diff1)) / lastThroughput));\n\n // Quality is calculated as argmin of the absolute difference between available bitrates (bitrates[i]) and bitrate estimation (dotmultiplication(w,bitrates)).\n let temp = [];\n for (let i = 0; i < bitrates.length; ++i) {\n temp[i] = Math.abs(bitrates[i] - _dotmultiplication(l2AParameter.w, bitrates));\n }\n\n // Quality is calculated based on the probability distribution w (the output of L2A)\n const absoluteIndex = temp.indexOf(Math.min(...temp));\n selectedRepresentation = abrController.getRepresentationByAbsoluteIndex(absoluteIndex, mediaInfo, true);\n\n // We employ a cautious -stepwise- ascent\n if (selectedRepresentation.absoluteIndex > l2AState.currentRepresentation.absoluteIndex) {\n if (bitrates[l2AState.currentRepresentation.absoluteIndex + 1] <= lastThroughput) {\n selectedRepresentation = abrController.getRepresentationByAbsoluteIndex(l2AState.currentRepresentation.absoluteIndex + 1, mediaInfo, true);\n }\n }\n\n // Provision against bitrate over-estimation, by re-calibrating the Lagrangian multiplier Q, to be taken into account for the next chunk\n if (selectedRepresentation.bitrateInKbit >= lastThroughput) {\n l2AParameter.Q = REACT * Math.max(VL, l2AParameter.Q);\n }\n l2AState.lastSegmentUrl = currentHttpRequest.url;\n }\n switchRequest.representation = selectedRepresentation;\n l2AState.currentRepresentation = switchRequest.representation;\n }\n\n function _handleErrorState(rulesContext, switchRequest, l2AState) {\n const abrController = rulesContext.getAbrController();\n const mediaInfo = rulesContext.getMediaInfo();\n const mediaType = rulesContext.getMediaType();\n const throughputController = rulesContext.getThroughputController();\n const safeThroughput = throughputController.getSafeAverageThroughput(mediaType);\n\n switchRequest.representation = abrController.getOptimalRepresentationForBitrate(mediaInfo, safeThroughput, true);//During strat-up phase abr.controller is responsible for bitrate decisions.\n switchRequest.reason.throughput = safeThroughput;\n l2AState.state = L2A_STATE_STARTUP;\n _clearL2AStateOnSeek(l2AState);\n }\n\n /**\n * Returns a switch request object indicating which quality is to be played\n * @param {object} rulesContext\n * @return {object}\n */\n function getSwitchRequest(rulesContext) {\n try {\n const switchRequest = SwitchRequest(context).create();\n switchRequest.rule = this.getClassName();\n const mediaType = rulesContext.getMediaType();\n const scheduleController = rulesContext.getScheduleController();\n\n switchRequest.reason = switchRequest.reason || {};\n\n // L2A decides bitrate only for video. Audio to be included in decision process in a later stage\n if ((mediaType === Constants.AUDIO)) {\n return switchRequest;\n }\n\n scheduleController.setTimeToLoadDelay(0);\n\n const l2AState = _getL2AState(rulesContext);\n const l2AParameter = l2AParameterDict[mediaType];\n if (!l2AParameter) {\n return switchRequest;\n }\n\n switchRequest.reason.state = l2AState.state;\n\n switch (l2AState.state) {\n case L2A_STATE_ONE_BITRATE:\n break;\n case L2A_STATE_STARTUP:\n _handleStartupState(rulesContext, switchRequest, l2AState);\n break;\n case L2A_STATE_STEADY:\n _handleSteadyState(rulesContext, switchRequest, l2AState);\n break;\n default:\n _handleErrorState(rulesContext, switchRequest, l2AState)\n }\n return switchRequest;\n } catch (e) {\n logger.error(e);\n return SwitchRequest(context).create();\n }\n }\n\n /**\n * Reset objects to their initial state\n * @private\n */\n function _resetInitialSettings() {\n l2AStateDict = {};\n l2AParameterDict = {};\n }\n\n /**\n * Reset the rule\n */\n function reset() {\n _resetInitialSettings();\n eventBus.off(Events.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n eventBus.off(Events.MEDIA_FRAGMENT_LOADED, _onMediaFragmentLoaded, instance);\n eventBus.off(Events.METRIC_ADDED, _onMetricAdded, instance);\n }\n\n instance = {\n getSwitchRequest,\n reset\n };\n\n setup();\n return instance;\n}\n\nL2ARule.__dashjs_factory_name = 'L2ARule';\nexport default FactoryMaker.getClassFactory(L2ARule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\n\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\nimport Debug from '../../../../core/Debug.js';\n\nconst WEIGHT_SELECTION_MODES = {\n MANUAL: 'manual_weight_selection',\n RANDOM: 'random_weight_selection',\n DYNAMIC: 'dynamic_weight_selection'\n};\n\nfunction LearningAbrController() {\n const context = this.context;\n\n let instance,\n logger,\n somBitrateNeurons,\n bitrateNormalizationFactor,\n latencyNormalizationFactor,\n minBitrate,\n weights,\n sortedCenters,\n weightSelectionMode;\n\n /**\n * Setup the class\n */\n function _setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n _resetInitialSettings();\n }\n\n /**\n * Reset all values\n */\n function reset() {\n _resetInitialSettings();\n }\n\n /**\n * Reset to initial settings\n * @private\n */\n function _resetInitialSettings() {\n somBitrateNeurons = null;\n bitrateNormalizationFactor = 1;\n latencyNormalizationFactor = 100;\n minBitrate = 0;\n weights = null;\n sortedCenters = null;\n weightSelectionMode = WEIGHT_SELECTION_MODES.DYNAMIC;\n }\n\n /**\n * Returns the maximum throughput\n * @return {number}\n * @private\n */\n function _getMaxThroughput() {\n let maxThroughput = 0;\n\n if (somBitrateNeurons) {\n for (let i = 0; i < somBitrateNeurons.length; i++) {\n let neuron = somBitrateNeurons[i];\n if (neuron.state.throughput > maxThroughput) {\n maxThroughput = neuron.state.throughput;\n }\n }\n }\n\n return maxThroughput;\n }\n\n /**\n *\n * @param {array} w\n * @return {number}\n * @private\n */\n function _getMagnitude(w) {\n const magnitude = w.map((x) => (Math.pow(x, 2))).reduce((sum, now) => sum + now);\n\n return Math.sqrt(magnitude);\n }\n\n /**\n *\n * @param {array} a\n * @param {array} b\n * @param {array} w\n * @return {number}\n * @private\n */\n function _getDistance(a, b, w) {\n let sum = a\n .map((x, i) => (w[i] * (Math.pow(x - b[i], 2)))) // square the difference*w\n .reduce((sum, now) => sum + now); // sum\n let sign = (sum < 0) ? -1 : 1;\n\n return sign * Math.sqrt(Math.abs(sum));\n }\n\n /**\n *\n * @param {object} a\n * @param {object} b\n * @return {number}\n * @private\n */\n function _getNeuronDistance(a, b) {\n let aState = [a.state.throughput, a.state.latency, a.state.rebuffer, a.state.switch];\n let bState = [b.state.throughput, b.state.latency, b.state.rebuffer, b.state.switch];\n\n return _getDistance(aState, bState, [1, 1, 1, 1]);\n }\n\n /**\n *\n * @param {object} winnerNeuron\n * @param {array} somElements\n * @param {array} x\n * @private\n */\n function _updateNeurons(winnerNeuron, x) {\n for (let i = 0; i < somBitrateNeurons.length; i++) {\n let somNeuron = somBitrateNeurons[i];\n let sigma = 0.1;\n const neuronDistance = _getNeuronDistance(somNeuron, winnerNeuron);\n let neighbourHood = Math.exp(-1 * Math.pow(neuronDistance, 2) / (2 * Math.pow(sigma, 2)));\n _updateNeuronState(somNeuron, x, neighbourHood);\n }\n }\n\n /**\n *\n * @param {object} neuron\n * @param {array} x\n * @param {object} neighbourHood\n * @private\n */\n function _updateNeuronState(neuron, x, neighbourHood) {\n let state = neuron.state;\n let w = [0.01, 0.01, 0.01, 0.01]; // learning rate\n\n state.throughput = state.throughput + (x[0] - state.throughput) * w[0] * neighbourHood;\n state.latency = state.latency + (x[1] - state.latency) * w[1] * neighbourHood;\n state.rebuffer = state.rebuffer + (x[2] - state.rebuffer) * w[2] * neighbourHood;\n state.switch = state.switch + (x[3] - state.switch) * w[3] * neighbourHood;\n }\n\n /**\n *\n * @param {object} currentNeuron\n * @param {number} currentThroughput\n * @return {object}\n * @private\n */\n function _getDownShiftNeuron(currentNeuron, currentThroughput) {\n let maxSuitableBitrate = 0;\n let result = currentNeuron;\n\n if (somBitrateNeurons) {\n for (let i = 0; i < somBitrateNeurons.length; i++) {\n let n = somBitrateNeurons[i];\n if (n.representation.bandwidth < currentNeuron.representation.bandwidth && n.representation.bandwidth > maxSuitableBitrate && currentThroughput > n.representation.bandwidth) {\n // possible downshiftable neuron\n maxSuitableBitrate = n.representation.bandwidth;\n result = n;\n }\n }\n }\n\n return result;\n }\n\n /**\n *\n * @param {object} abrController\n * @param {object} mediaInfo\n * @param {number} throughput\n * @param {number} latency\n * @param {number} currentBufferLevel\n * @param {number} playbackRate\n * @param {object} currentRepresentation\n * @param {object} dynamicWeightsSelector\n * @return {null|*}\n */\n function getNextQuality(abrController, mediaInfo, throughput, latency, currentBufferLevel, playbackRate, currentRepresentation, dynamicWeightsSelector) {\n // For Dynamic Weights Selector\n let currentLatency = latency;\n let currentThroughput = throughput;\n\n _setSomBitrateNeurons(mediaInfo, abrController);\n // normalize throughput\n let throughputNormalized = throughput / bitrateNormalizationFactor;\n // saturate values higher than 1\n if (throughputNormalized > 1) {\n throughputNormalized = _getMaxThroughput();\n }\n // normalize latency\n latency = latency / latencyNormalizationFactor;\n\n const targetLatency = 0;\n const targetRebufferLevel = 0;\n // 10K + video encoding is the recommended throughput\n const throughputDelta = 10000;\n\n let currentNeuron = somBitrateNeurons.find(entry => entry.representation.id === currentRepresentation.id);\n let downloadTime = (currentNeuron.representation.bandwidth * dynamicWeightsSelector.getSegmentDuration()) / currentThroughput;\n let rebuffer = Math.max(0, (downloadTime - currentBufferLevel));\n\n // check buffer for possible stall\n if (currentBufferLevel - downloadTime < dynamicWeightsSelector.getMinBuffer()) {\n logger.debug(`Buffer is low for bitrate= ${currentNeuron.representation.bandwidth} downloadTime=${downloadTime} currentBuffer=${currentBufferLevel} rebuffer=${rebuffer}`);\n return _getDownShiftNeuron(currentNeuron, currentThroughput).representation;\n }\n\n switch (weightSelectionMode) {\n case WEIGHT_SELECTION_MODES.MANUAL:\n _manualWeightSelection();\n break;\n case WEIGHT_SELECTION_MODES.RANDOM:\n _randomWeightSelection();\n break;\n case WEIGHT_SELECTION_MODES.DYNAMIC:\n _dynamicWeightSelection(dynamicWeightsSelector, currentLatency, currentBufferLevel, rebuffer, currentThroughput, playbackRate);\n break;\n default:\n _dynamicWeightSelection(dynamicWeightsSelector, currentLatency, currentBufferLevel, rebuffer, currentThroughput, playbackRate);\n\n }\n\n let minDistance = null;\n let targetRepresentation = null;\n let winnerNeuron = null;\n\n for (let i = 0; i < somBitrateNeurons.length; i++) {\n let somNeuron = somBitrateNeurons[i];\n let somNeuronState = somNeuron.state;\n let somData = [somNeuronState.throughput,\n somNeuronState.latency,\n somNeuronState.rebuffer,\n somNeuronState.switch];\n\n let distanceWeights = weights.slice();\n let nextBuffer = dynamicWeightsSelector.getNextBufferWithBitrate(somNeuron.representation.bandwidth, currentBufferLevel, currentThroughput);\n let isBufferLow = nextBuffer < dynamicWeightsSelector.getMinBuffer();\n if (isBufferLow) {\n logger.debug(`Buffer is low for bitrate=${somNeuron.representation.bandwidth} downloadTime=${downloadTime} currentBuffer=${currentBufferLevel} nextBuffer=${nextBuffer}`);\n }\n // special condition downshift immediately\n if (somNeuron.representation.bandwidth > throughput - throughputDelta || isBufferLow) {\n if (somNeuron.representation.bandwidth !== minBitrate) {\n // encourage to pick smaller bitrates throughputWeight=100\n distanceWeights[0] = 100;\n }\n }\n\n // calculate the distance with the target\n let distance = _getDistance(somData, [throughputNormalized, targetLatency, targetRebufferLevel, 0], distanceWeights);\n if (minDistance === null || distance < minDistance) {\n minDistance = distance;\n targetRepresentation = somNeuron.representation;\n winnerNeuron = somNeuron;\n }\n }\n\n // update current neuron and the neighbourhood with the calculated QoE\n // will punish current if it is not picked\n let bitrateSwitch = Math.abs(currentNeuron.representation.bandwidth - winnerNeuron.representation.bandwidth) / bitrateNormalizationFactor;\n _updateNeurons(currentNeuron, [throughputNormalized, latency, rebuffer, bitrateSwitch]);\n\n // update bmu and neighbours with targetQoE=1, targetLatency=0\n _updateNeurons(winnerNeuron, [throughputNormalized, targetLatency, targetRebufferLevel, bitrateSwitch]);\n\n return targetRepresentation;\n }\n\n /**\n * Option 1: Manual weights\n * @private\n */\n function _manualWeightSelection() {\n let throughputWeight = 0.4;\n let latencyWeight = 0.4;\n let bufferWeight = 0.4;\n let switchWeight = 0.4;\n\n weights = [throughputWeight, latencyWeight, bufferWeight, switchWeight]; // throughput, latency, buffer, switch\n }\n\n /**\n * Option 2: Random (Xavier) weights\n * @private\n */\n function _randomWeightSelection() {\n weights = _getXavierWeights(somBitrateNeurons.length, 4);\n }\n\n /**\n * Dynamic Weight Selector weights\n * @param {object} dynamicWeightsSelector\n * @param {array} somElements\n * @param {number} currentLatency\n * @param {number} currentBuffer\n * @param {number} rebuffer\n * @param {number} currentThroughput\n * @param {number} playbackRate\n * @private\n */\n function _dynamicWeightSelection(dynamicWeightsSelector, currentLatency, currentBuffer, rebuffer, currentThroughput, playbackRate) {\n if (!weights) {\n weights = sortedCenters[sortedCenters.length - 1];\n }\n // Dynamic Weights Selector (step 2/2: find weights)\n let weightVector = dynamicWeightsSelector.findWeightVector(somBitrateNeurons, currentLatency, currentBuffer, rebuffer, currentThroughput, playbackRate);\n if (weightVector !== null && weightVector !== -1) { // null: something went wrong, -1: constraints not met\n weights = weightVector;\n }\n }\n\n /**\n *\n * @param {number }neuronCount\n * @param {number }weightCount\n * @return {array}\n * @private\n */\n function _getXavierWeights(neuronCount, weightCount) {\n let W = [];\n let upperBound = Math.sqrt((2 / neuronCount));\n\n for (let i = 0; i < weightCount; i++) {\n W.push(Math.random() * upperBound);\n }\n\n weights = W;\n\n return weights;\n }\n\n /**\n *\n * @param {object} mediaInfo\n * @param abrController\n * @return {array}\n * @private\n */\n function _setSomBitrateNeurons(mediaInfo, abrController) {\n if (!somBitrateNeurons) {\n somBitrateNeurons = [];\n const possibleRepresentations = abrController.getPossibleVoRepresentationsFilteredBySettings(mediaInfo, true);\n const bitrateList = possibleRepresentations.map((r) => r.bandwidth);\n minBitrate = Math.min(...bitrateList);\n bitrateNormalizationFactor = _getMagnitude(bitrateList);\n\n possibleRepresentations.forEach((rep) => {\n let neuron = {\n representation: rep,\n state: {\n // normalize throughputs\n throughput: rep.bandwidth / bitrateNormalizationFactor,\n latency: 0,\n rebuffer: 0,\n switch: 0\n }\n };\n somBitrateNeurons.push(neuron);\n })\n\n sortedCenters = _getInitialKmeansPlusPlusCenters(somBitrateNeurons);\n }\n\n return somBitrateNeurons;\n }\n\n /**\n *\n * @param {number} size\n * @return {array}\n * @private\n */\n function _getRandomData(size) {\n let dataArray = [];\n\n for (let i = 0; i < size; i++) {\n let data = [\n Math.random() * _getMaxThroughput(), //throughput\n Math.random(), //latency\n Math.random(), //buffersize\n Math.random() //switch\n ];\n dataArray.push(data);\n }\n\n return dataArray;\n }\n\n /**\n *\n * @param {array} somBitrateNeurons\n * @return {array}\n * @private\n */\n function _getInitialKmeansPlusPlusCenters(somBitrateNeurons) {\n let centers = [];\n let randomDataSet = _getRandomData(Math.pow(somBitrateNeurons.length, 2));\n centers.push(randomDataSet[0]);\n let distanceWeights = [1, 1, 1, 1];\n\n for (let k = 1; k < somBitrateNeurons.length; k++) {\n let nextPoint = null;\n let maxDistance = null;\n for (let i = 0; i < randomDataSet.length; i++) {\n let currentPoint = randomDataSet[i];\n let minDistance = null;\n for (let j = 0; j < centers.length; j++) {\n let distance = _getDistance(currentPoint, centers[j], distanceWeights);\n if (minDistance === null || distance < minDistance) {\n minDistance = distance;\n }\n }\n if (maxDistance === null || minDistance > maxDistance) {\n nextPoint = currentPoint;\n maxDistance = minDistance;\n }\n }\n centers.push(nextPoint);\n }\n\n // find the least similar center\n let maxDistance = null;\n let leastSimilarIndex = null;\n for (let i = 0; i < centers.length; i++) {\n let distance = 0;\n for (let j = 0; j < centers.length; j++) {\n if (i === j) {\n continue;\n }\n distance += _getDistance(centers[i], centers[j], distanceWeights);\n }\n if (maxDistance === null || distance > maxDistance) {\n maxDistance = distance;\n leastSimilarIndex = i;\n }\n }\n\n // move centers to sortedCenters\n let sortedCenters = [];\n sortedCenters.push(centers[leastSimilarIndex]);\n centers.splice(leastSimilarIndex, 1);\n while (centers.length > 0) {\n let minDistance = null;\n let minIndex = null;\n for (let i = 0; i < centers.length; i++) {\n let distance = _getDistance(sortedCenters[0], centers[i], distanceWeights);\n if (minDistance === null || distance < minDistance) {\n minDistance = distance;\n minIndex = i;\n }\n }\n sortedCenters.push(centers[minIndex]);\n centers.splice(minIndex, 1);\n }\n\n return sortedCenters;\n }\n\n instance = {\n getNextQuality,\n reset\n };\n\n _setup();\n return instance;\n}\n\nLearningAbrController.__dashjs_factory_name = 'LearningAbrController';\nexport default FactoryMaker.getClassFactory(LearningAbrController);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\nclass QoeInfo {\n\n constructor() {\n // Type e.g. 'segment'\n this.type = null;\n\n // Store lastBitrate for calculation of bitrateSwitchWSum\n this.lastBitrate = null;\n\n // Weights for each Qoe factor\n this.weights = {};\n this.weights.bitrateReward = null;\n this.weights.bitrateSwitchPenalty = null;\n this.weights.rebufferPenalty = null;\n this.weights.latencyPenalty = null;\n this.weights.playbackSpeedPenalty = null;\n\n // Weighted Sum for each Qoe factor\n this.bitrateWSum = 0;// kbps\n this.bitrateSwitchWSum = 0;// kbps\n this.rebufferWSum = 0;// seconds\n this.latencyWSum = 0;// seconds\n this.playbackSpeedWSum = 0;// e.g. 0.95, 1.0, 1.05\n\n // Store total Qoe value based on current Weighted Sum values\n this.totalQoe = 0;\n }\n}\n\nexport default QoeInfo;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\nimport QoeInfo from './QoeInfo.js';\n\nfunction LoLpQoeEvaluator() {\n\n let instance,\n voPerSegmentQoeInfo,\n segmentDuration,\n maxBitrateKbps,\n minBitrateKbps;\n\n function _setup() {\n _resetInitialSettings();\n }\n\n function _resetInitialSettings() {\n voPerSegmentQoeInfo = null;\n segmentDuration = null;\n maxBitrateKbps = null;\n minBitrateKbps = null;\n }\n\n function setupPerSegmentQoe(sDuration, maxBrKbps, minBrKbps) {\n // Set up Per Segment QoeInfo\n voPerSegmentQoeInfo = _createQoeInfo('segment', sDuration, maxBrKbps, minBrKbps);\n segmentDuration = sDuration;\n maxBitrateKbps = maxBrKbps;\n minBitrateKbps = minBrKbps;\n }\n\n function _createQoeInfo(fragmentType, fragmentDuration, maxBitrateKbps, minBitrateKbps) {\n /*\n * [Weights][Source: Abdelhak Bentaleb, 2020 (last updated: 30 Mar 2020)]\n * bitrateReward: segment duration, e.g. 0.5s\n * bitrateSwitchPenalty: 0.02s or 1s if the bitrate switch is too important\n * rebufferPenalty: max encoding bitrate, e.g. 1000kbps\n * latencyPenalty: if L ≤ 1.1 seconds then = min encoding bitrate * 0.05, otherwise = max encoding bitrate * 0.1\n * playbackSpeedPenalty: min encoding bitrate, e.g. 200kbps\n */\n\n // Create new QoeInfo object\n let qoeInfo = new QoeInfo();\n qoeInfo.type = fragmentType;\n\n // Set weight: bitrateReward\n // set some safe value, else consider throwing error\n if (!fragmentDuration) {\n qoeInfo.weights.bitrateReward = 1;\n } else {\n qoeInfo.weights.bitrateReward = fragmentDuration;\n }\n\n // Set weight: bitrateSwitchPenalty\n // qoeInfo.weights.bitrateSwitchPenalty = 0.02;\n qoeInfo.weights.bitrateSwitchPenalty = 1;\n\n // Set weight: rebufferPenalty\n // set some safe value, else consider throwing error\n if (!maxBitrateKbps) {\n qoeInfo.weights.rebufferPenalty = 1000;\n } else {\n qoeInfo.weights.rebufferPenalty = maxBitrateKbps;\n }\n\n // Set weight: latencyPenalty\n qoeInfo.weights.latencyPenalty = [];\n qoeInfo.weights.latencyPenalty.push({ threshold: 1.1, penalty: (minBitrateKbps * 0.05) });\n qoeInfo.weights.latencyPenalty.push({ threshold: 100000000, penalty: (maxBitrateKbps * 0.1) });\n\n // Set weight: playbackSpeedPenalty\n if (!minBitrateKbps) {\n qoeInfo.weights.playbackSpeedPenalty = 200;\n } // set some safe value, else consider throwing error\n else {\n qoeInfo.weights.playbackSpeedPenalty = minBitrateKbps;\n }\n\n return qoeInfo;\n }\n\n function logSegmentMetrics(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed) {\n if (voPerSegmentQoeInfo) {\n _logMetricsInQoeInfo(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed, voPerSegmentQoeInfo);\n }\n }\n\n function _logMetricsInQoeInfo(bitrate, rebufferTime, latency, playbackSpeed, qoeInfo) {\n // Update: bitrate Weighted Sum value\n qoeInfo.bitrateWSum += (qoeInfo.weights.bitrateReward * bitrate);\n\n // Update: bitrateSwitch Weighted Sum value\n if (qoeInfo.lastBitrate) {\n qoeInfo.bitrateSwitchWSum += (qoeInfo.weights.bitrateSwitchPenalty * Math.abs(bitrate - qoeInfo.lastBitrate));\n }\n qoeInfo.lastBitrate = bitrate;\n\n // Update: rebuffer Weighted Sum value\n qoeInfo.rebufferWSum += (qoeInfo.weights.rebufferPenalty * rebufferTime);\n\n // Update: latency Weighted Sum value\n for (let i = 0; i < qoeInfo.weights.latencyPenalty.length; i++) {\n let latencyRange = qoeInfo.weights.latencyPenalty[i];\n if (latency <= latencyRange.threshold) {\n qoeInfo.latencyWSum += (latencyRange.penalty * latency);\n break;\n }\n }\n\n // Update: playbackSpeed Weighted Sum value\n qoeInfo.playbackSpeedWSum += (qoeInfo.weights.playbackSpeedPenalty * Math.abs(1 - playbackSpeed));\n\n // Update: Total Qoe value\n qoeInfo.totalQoe = qoeInfo.bitrateWSum - qoeInfo.bitrateSwitchWSum - qoeInfo.rebufferWSum - qoeInfo.latencyWSum - qoeInfo.playbackSpeedWSum;\n }\n\n // Returns current Per Segment QoeInfo\n function getPerSegmentQoe() {\n return voPerSegmentQoeInfo;\n }\n\n // For one-time use only\n // Returns totalQoe based on a single set of metrics.\n function calculateSingleUseQoe(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed) {\n let singleUseQoeInfo = null;\n\n if (segmentDuration && maxBitrateKbps && minBitrateKbps) {\n singleUseQoeInfo = _createQoeInfo('segment', segmentDuration, maxBitrateKbps, minBitrateKbps);\n }\n\n if (singleUseQoeInfo) {\n _logMetricsInQoeInfo(segmentBitrate, segmentRebufferTime, currentLatency, currentPlaybackSpeed, singleUseQoeInfo);\n return singleUseQoeInfo.totalQoe;\n } else {\n // Something went wrong..\n return 0;\n }\n }\n\n function reset() {\n _resetInitialSettings();\n }\n\n instance = {\n setupPerSegmentQoe,\n logSegmentMetrics,\n getPerSegmentQoe,\n calculateSingleUseQoe,\n reset\n };\n\n _setup();\n\n return instance;\n}\n\nLoLpQoeEvaluator.__dashjs_factory_name = 'LoLpQoeEvaluator';\nexport default FactoryMaker.getClassFactory(LoLpQoeEvaluator);\n\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\n\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\n\nfunction LoLpWeightSelector(config) {\n let targetLatency = config.targetLatency;\n let bufferMin = config.bufferMin;\n let segmentDuration = config.segmentDuration;\n let qoeEvaluator = config.qoeEvaluator;\n let instance,\n valueList,\n weightTypeCount,\n weightOptions,\n previousLatency;\n\n /**\n *\n * @private\n */\n function _setup() {\n _resetInitialSettings();\n }\n\n /**\n *\n * @private\n */\n function _resetInitialSettings() {\n valueList = [0.2, 0.4, 0.6, 0.8, 1];\n weightTypeCount = 4;\n weightOptions = _getPermutations(valueList, weightTypeCount);\n previousLatency = 0;\n }\n\n /**\n * Next, at each segment boundary, ABR to input current neurons and target state (only used in Method II) to find the desired weight vector\n * @param {array} neurons\n * @param {number} currentLatency\n * @param {number} currentBuffer\n * @param {number} currentRebuffer\n * @param {number} currentThroughput\n * @param {number} playbackRate\n * @return {number|null}\n * @private\n */\n function findWeightVector(neurons, currentLatency, currentBuffer, currentRebuffer, currentThroughput, playbackRate) {\n let maxQoE = null;\n let winnerWeights = null;\n let winnerBitrate = null;\n let deltaLatency = Math.abs(currentLatency - previousLatency);\n\n // For each neuron, m\n neurons.forEach((neuron) => {\n\n // For each possible weight vector, z\n // E.g. For [ throughput, latency, buffer, playbackRate, QoE ]\n // Possible weightVector = [ 0.2, 0.4, 0.2, 0, 0.2 ]\n weightOptions.forEach((weightVector) => {\n\n // Apply weightVector to neuron, compute utility and determine winnerWeights\n // Method I: Utility based on QoE given current state\n\n let weightsObj = {\n throughput: weightVector[0],\n latency: weightVector[1],\n buffer: weightVector[2],\n switch: weightVector[3]\n };\n\n let downloadTime = (neuron.representation.bandwidth * segmentDuration) / currentThroughput;\n let nextBuffer = getNextBuffer(currentBuffer, downloadTime);\n let rebuffer = Math.max(0.00001, (downloadTime - nextBuffer));\n let wt;\n if (weightsObj.buffer === 0) {\n wt = 10;\n } else {\n wt = (1 / weightsObj.buffer);\n }\n let weightedRebuffer = wt * rebuffer;\n\n if (weightsObj.latency === 0) {\n wt = 10;\n } else {\n wt = (1 / weightsObj.latency); // inverse the weight because wt and latency should have positive relationship, i.e., higher latency = higher wt\n }\n let weightedLatency = wt * neuron.state.latency;\n\n let totalQoE = qoeEvaluator.calculateSingleUseQoe(neuron.representation.bandwidth, weightedRebuffer, weightedLatency, playbackRate);\n if ((maxQoE === null || totalQoE > maxQoE) && _checkConstraints(currentLatency, nextBuffer, deltaLatency)) {\n maxQoE = totalQoE;\n winnerWeights = weightVector;\n winnerBitrate = neuron.representation.bandwidth;\n }\n });\n });\n\n // winnerWeights was found, check if constraints are satisfied\n if (winnerWeights === null && winnerBitrate === null) {\n winnerWeights = -1;\n }\n\n previousLatency = currentLatency;\n return winnerWeights;\n }\n\n /**\n *\n * @param {number} nextLatency\n * @param {number} nextBuffer\n * @param {number} deltaLatency\n * @return {boolean}\n * @private\n */\n function _checkConstraints(nextLatency, nextBuffer, deltaLatency) {\n // A1\n // disabled till we find a better way of estimating latency\n // fails for all with current value\n if (nextLatency > targetLatency + deltaLatency) {\n return false;\n }\n\n return nextBuffer >= bufferMin;\n }\n\n /**\n *\n * @param {array} list\n * @param {number} length\n * @return {*}\n * @private\n */\n function _getPermutations(list, length) {\n // Copy initial values as arrays\n let perm = list.map(function (val) {\n return [val];\n });\n // Our permutation generator\n let generate = function (perm, length, currLen) {\n // Reached desired length\n if (currLen === length) {\n return perm;\n }\n // For each existing permutation\n let len = perm.length;\n for (let i = 0; i < len; i++) {\n let currPerm = perm.shift();\n // Create new permutation\n for (let k = 0; k < list.length; k++) {\n perm.push(currPerm.concat(list[k]));\n }\n }\n // Recurse\n return generate(perm, length, currLen + 1);\n };\n // Start with size 1 because of initial values\n return generate(perm, length, 1);\n }\n\n /**\n *\n * @return {number}\n */\n function getMinBuffer() {\n return bufferMin;\n }\n\n /**\n *\n * @return {number}\n */\n function getSegmentDuration() {\n return segmentDuration;\n }\n\n /**\n *\n * @param {number} bitrateToDownload\n * @param {number} currentBuffer\n * @param {number} currentThroughput\n * @return {number}\n */\n function getNextBufferWithBitrate(bitrateToDownload, currentBuffer, currentThroughput) {\n let downloadTime = (bitrateToDownload * segmentDuration) / currentThroughput;\n return getNextBuffer(currentBuffer, downloadTime);\n }\n\n /**\n *\n * @param {number} currentBuffer\n * @param {number} downloadTime\n * @return {number}\n */\n function getNextBuffer(currentBuffer, downloadTime) {\n const segmentDuration = getSegmentDuration();\n let nextBuffer;\n if (downloadTime > segmentDuration) {\n nextBuffer = currentBuffer - segmentDuration;\n } else {\n nextBuffer = currentBuffer + segmentDuration - downloadTime;\n }\n return nextBuffer;\n }\n\n instance = {\n getMinBuffer,\n getSegmentDuration,\n getNextBufferWithBitrate,\n getNextBuffer,\n findWeightVector\n };\n\n _setup();\n\n return instance;\n}\n\nLoLpWeightSelector.__dashjs_factory_name = 'LoLpWeightSelector';\nexport default FactoryMaker.getClassFactory(LoLpWeightSelector);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Authors:\n * Abdelhak Bentaleb | National University of Singapore | bentaleb@comp.nus.edu.sg\n * Mehmet N. Akcay | Ozyegin University | necmettin.akcay@ozu.edu.tr\n * May Lim | National University of Singapore | maylim@comp.nus.edu.sg\n */\n\nimport Debug from '../../../../core/Debug.js';\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\nimport LearningAbrController from './LearningAbrController.js';\nimport LoLpQoeEvaluator from './LoLpQoEEvaluator.js';\nimport SwitchRequest from '../../SwitchRequest.js';\nimport MetricsConstants from '../../../constants/MetricsConstants.js';\nimport LoLpWeightSelector from './LoLpWeightSelector.js';\nimport Constants from '../../../constants/Constants.js';\n\nconst DWS_TARGET_LATENCY = 1.5;\nconst DWS_BUFFER_MIN = 0.3;\n\nfunction LoLPRule(config) {\n\n config = config || {};\n\n let dashMetrics = config.dashMetrics;\n let context = this.context;\n\n let logger,\n instance,\n learningController,\n qoeEvaluator;\n\n function _setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n learningController = LearningAbrController(context).create();\n qoeEvaluator = LoLpQoeEvaluator(context).create();\n }\n\n function getSwitchRequest(rulesContext) {\n try {\n let switchRequest = SwitchRequest(context).create();\n switchRequest.rule = this.getClassName();\n let mediaType = rulesContext.getMediaInfo().type;\n let abrController = rulesContext.getAbrController();\n const streamInfo = rulesContext.getStreamInfo();\n let currentRepresentation = rulesContext.getRepresentation();\n const mediaInfo = rulesContext.getMediaInfo();\n const bufferStateVO = dashMetrics.getCurrentBufferState(mediaType);\n const scheduleController = rulesContext.getScheduleController();\n const currentBufferLevel = dashMetrics.getCurrentBufferLevel(mediaType, true);\n const playbackController = scheduleController.getPlaybackController();\n let latency = playbackController.getCurrentLiveLatency();\n\n if ((mediaType === Constants.AUDIO)) {\n return switchRequest;\n }\n\n if (!latency) {\n latency = 0;\n }\n\n const playbackRate = playbackController.getPlaybackRate();\n const throughputController = rulesContext.getThroughputController();\n const throughput = throughputController.getSafeAverageThroughput(mediaType);\n logger.debug(`Throughput ${Math.round(throughput)} kbps`);\n\n if (isNaN(throughput) || !bufferStateVO) {\n return switchRequest;\n }\n\n if (abrController.getAbandonmentStateFor(streamInfo.id, mediaType) === MetricsConstants.ABANDON_LOAD) {\n return switchRequest;\n }\n\n // QoE parameters\n const possibleRepresentations = abrController.getPossibleVoRepresentationsFilteredBySettings(mediaInfo, true);\n let bandwidths = possibleRepresentations.map(r => r.bandwidth);\n let segmentDuration = rulesContext.getRepresentation().fragmentDuration;\n let minBitrateKbps = Math.min(...bandwidths) / 1000.0; // min bitrate level\n let maxBitrateKbps = Math.max(...bandwidths) / 1000.0; // max bitrate level\n\n // Learning rule pre-calculations\n let currentBitrate = currentRepresentation.bandwidth;\n let currentBitrateKbps = currentBitrate / 1000.0;\n let httpRequest = dashMetrics.getCurrentHttpRequest(mediaType, true);\n let lastFragmentDownloadTime = (httpRequest.tresponse.getTime() - httpRequest.trequest.getTime()) / 1000;\n let segmentRebufferTime = lastFragmentDownloadTime > segmentDuration ? lastFragmentDownloadTime - segmentDuration : 0;\n qoeEvaluator.setupPerSegmentQoe(segmentDuration, maxBitrateKbps, minBitrateKbps);\n qoeEvaluator.logSegmentMetrics(currentBitrateKbps, segmentRebufferTime, latency, playbackRate);\n\n /*\n * Dynamic Weights Selector (step 1/2: initialization)\n */\n let dynamicWeightsSelector = LoLpWeightSelector(context).create({\n targetLatency: DWS_TARGET_LATENCY,\n bufferMin: DWS_BUFFER_MIN,\n segmentDuration,\n qoeEvaluator\n });\n\n /*\n * Select next quality\n */\n switchRequest.representation = learningController.getNextQuality(\n abrController,\n mediaInfo,\n throughput * 1000,\n latency,\n currentBufferLevel,\n playbackRate,\n currentRepresentation,\n dynamicWeightsSelector\n );\n switchRequest.reason = { throughput: throughput, latency: latency };\n switchRequest.priority = SwitchRequest.PRIORITY.STRONG;\n\n scheduleController.setTimeToLoadDelay(0);\n\n return switchRequest;\n } catch (e) {\n throw e;\n }\n }\n\n /**\n * Reset objects to their initial state\n * @private\n */\n function _resetInitialSettings() {\n learningController.reset();\n qoeEvaluator.reset();\n }\n\n /**\n * Reset the rule\n */\n function reset() {\n _resetInitialSettings();\n }\n\n instance = {\n getSwitchRequest,\n reset\n };\n\n _setup();\n\n return instance;\n}\n\nLoLPRule.__dashjs_factory_name = 'LoLPRule';\nexport default FactoryMaker.getClassFactory(LoLPRule);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ThroughputRule from './ThroughputRule.js';\nimport InsufficientBufferRule from './InsufficientBufferRule.js';\nimport AbandonRequestsRule from './AbandonRequestsRule.js';\nimport DroppedFramesRule from './DroppedFramesRule.js';\nimport SwitchHistoryRule from './SwitchHistoryRule.js';\nimport BolaRule from './BolaRule.js';\nimport L2ARule from './L2ARule.js';\nimport LoLPRule from './lolp/LoLpRule.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport SwitchRequest from '../SwitchRequest.js';\nimport EventBus from '../../../core/EventBus.js';\nimport Events from '../../../core/events/Events.js';\nimport Constants from '../../constants/Constants.js';\n\n\nfunction ABRRulesCollection(config) {\n\n config = config || {};\n const context = this.context;\n\n const mediaPlayerModel = config.mediaPlayerModel;\n const customParametersModel = config.customParametersModel;\n const dashMetrics = config.dashMetrics;\n const settings = config.settings;\n const eventBus = EventBus(context).getInstance();\n\n let instance,\n qualitySwitchRules,\n abandonFragmentRules,\n shouldUseBolaRuleByMediaType;\n\n function initialize() {\n qualitySwitchRules = [];\n abandonFragmentRules = [];\n shouldUseBolaRuleByMediaType = {};\n _updateRules();\n\n eventBus.on(Events.SETTING_UPDATED_ABR_ACTIVE_RULES, _onAbrSettingsActiveRulesUpdated, instance);\n }\n\n /**\n * Adds and removes rules to/from the respective rules arrays\n * @private\n */\n function _updateRules() {\n let qualitySwitchRulesList = Object.values(Constants.QUALITY_SWITCH_RULES)\n qualitySwitchRulesList.forEach((ruleName) => {\n qualitySwitchRules = _handleRuleUpdate(ruleName, qualitySwitchRules)\n })\n\n let abandonFragmentRulesList = Object.values(Constants.ABANDON_FRAGMENT_RULES)\n abandonFragmentRulesList.forEach((ruleName) => {\n abandonFragmentRules = _handleRuleUpdate(ruleName, abandonFragmentRules)\n })\n\n // add custom ABR rules if any\n const customRules = customParametersModel.getAbrCustomRules();\n customRules.forEach(function (rule) {\n if (rule.type === Constants.RULES_TYPES.QUALITY_SWITCH_RULES) {\n qualitySwitchRules.push(rule.rule(context).create());\n }\n\n if (rule.type === Constants.RULES_TYPES.ABANDON_FRAGMENT_RULES) {\n abandonFragmentRulesList.push(rule.rule(context).create());\n }\n });\n\n // If we still got no rule for quality switch use Throughput and Bola\n if (qualitySwitchRules.length === 0) {\n qualitySwitchRules.push(\n BolaRule(context).create({\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n settings: settings\n })\n );\n qualitySwitchRules.push(\n ThroughputRule(context).create({\n dashMetrics: dashMetrics\n })\n );\n }\n }\n\n function _handleRuleUpdate(ruleName, rulesCollection) {\n // we use camel case in the settings while the rules start with a capital latter. Not ideal but convert between these formats\n const attribute = ruleName.charAt(0).toLowerCase() + ruleName.slice(1);\n if (settings.get().streaming.abr.rules[attribute].active && !_arrayContainsRule(rulesCollection, ruleName)) {\n rulesCollection.push(\n _createRuleInstance(ruleName)\n );\n\n return rulesCollection\n } else if (!settings.get().streaming.abr.rules[attribute].active) {\n return _removeRuleFromArray(rulesCollection, ruleName)\n }\n\n return rulesCollection\n }\n\n function _createRuleInstance(rule) {\n switch (rule) {\n case Constants.QUALITY_SWITCH_RULES.BOLA_RULE:\n return BolaRule(context).create({\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n settings: settings\n })\n case Constants.QUALITY_SWITCH_RULES.THROUGHPUT_RULE:\n return ThroughputRule(context).create({\n dashMetrics: dashMetrics\n })\n case Constants.QUALITY_SWITCH_RULES.INSUFFICIENT_BUFFER_RULE:\n return InsufficientBufferRule(context).create({\n dashMetrics: dashMetrics,\n settings\n })\n case Constants.QUALITY_SWITCH_RULES.SWITCH_HISTORY_RULE:\n return SwitchHistoryRule(context).create()\n case Constants.QUALITY_SWITCH_RULES.DROPPED_FRAMES_RULE:\n return DroppedFramesRule(context).create()\n case Constants.QUALITY_SWITCH_RULES.LEARN_TO_ADAPT_RULE:\n return L2ARule(context).create({\n dashMetrics: dashMetrics,\n settings: settings\n })\n case Constants.QUALITY_SWITCH_RULES.LOL_PLUS_RULE:\n return LoLPRule(context).create({\n dashMetrics: dashMetrics\n })\n case Constants.ABANDON_FRAGMENT_RULES.ABANDON_REQUEST_RULE:\n return AbandonRequestsRule(context).create({\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n settings: settings\n })\n\n }\n }\n\n function _arrayContainsRule(arr, ruleName) {\n return arr.filter((rule) => {\n return rule.getClassName() === ruleName\n }).length > 0\n }\n\n function _removeRuleFromArray(arr, ruleName) {\n return arr.filter((rule) => {\n return rule.getClassName() !== ruleName\n })\n }\n\n function _getRulesWithChange(srArray) {\n return srArray.filter(sr => sr.representation !== SwitchRequest.NO_CHANGE);\n }\n\n /**\n *\n * @param {array} srArray\n * @return {object} SwitchRequest\n */\n function getMinSwitchRequest(srArray) {\n const values = {};\n let newSwitchReq = null;\n let i,\n len,\n currentSwitchRequest;\n\n if (srArray.length === 0) {\n return;\n }\n\n values[SwitchRequest.PRIORITY.STRONG] = null;\n values[SwitchRequest.PRIORITY.WEAK] = null;\n values[SwitchRequest.PRIORITY.DEFAULT] = null;\n\n for (i = 0, len = srArray.length; i < len; i += 1) {\n currentSwitchRequest = srArray[i];\n if (currentSwitchRequest.representation !== SwitchRequest.NO_CHANGE) {\n // We only use the new quality in case the bitrate is lower than the already saved one or if no new quality has been selected for the respective priority\n if (values[currentSwitchRequest.priority] === null ||\n (values[currentSwitchRequest.priority].representation !== SwitchRequest.NO_CHANGE && currentSwitchRequest.representation.bitrateInKbit < values[currentSwitchRequest.priority].representation.bitrateInKbit)) {\n values[currentSwitchRequest.priority] = currentSwitchRequest;\n }\n }\n }\n\n if (values[SwitchRequest.PRIORITY.WEAK] && values[SwitchRequest.PRIORITY.WEAK].representation !== SwitchRequest.NO_CHANGE) {\n newSwitchReq = values[SwitchRequest.PRIORITY.WEAK];\n }\n\n if (values[SwitchRequest.PRIORITY.DEFAULT] && values[SwitchRequest.PRIORITY.DEFAULT].representation !== SwitchRequest.NO_CHANGE) {\n newSwitchReq = values[SwitchRequest.PRIORITY.DEFAULT];\n }\n\n if (values[SwitchRequest.PRIORITY.STRONG] && values[SwitchRequest.PRIORITY.STRONG].representation !== SwitchRequest.NO_CHANGE) {\n newSwitchReq = values[SwitchRequest.PRIORITY.STRONG];\n }\n\n return newSwitchReq\n }\n\n function getBestPossibleSwitchRequest(rulesContext) {\n if (!rulesContext) {\n return SwitchRequest(context).create()\n }\n // Only Throughput or Bola are active at the same time.\n const activeQualitySwitchRules = qualitySwitchRules.filter((rule) => {\n const ruleName = rule.getClassName();\n\n if (ruleName !== Constants.QUALITY_SWITCH_RULES.BOLA_RULE && ruleName !== Constants.QUALITY_SWITCH_RULES.THROUGHPUT_RULE) {\n return true\n }\n const mediaType = rulesContext.getMediaType();\n\n return (shouldUseBolaRuleByMediaType[mediaType] && ruleName === Constants.QUALITY_SWITCH_RULES.BOLA_RULE) || (!shouldUseBolaRuleByMediaType[mediaType] && ruleName === Constants.QUALITY_SWITCH_RULES.THROUGHPUT_RULE)\n })\n const switchRequestArray = activeQualitySwitchRules.map(rule => rule.getSwitchRequest(rulesContext));\n const activeRules = _getRulesWithChange(switchRequestArray);\n const maxQuality = getMinSwitchRequest(activeRules);\n\n return maxQuality || SwitchRequest(context).create();\n }\n\n function shouldAbandonFragment(rulesContext) {\n if (!rulesContext) {\n return SwitchRequest(context).create()\n }\n const abandonRequestArray = abandonFragmentRules.map(rule => rule.shouldAbandon(rulesContext));\n const activeRules = _getRulesWithChange(abandonRequestArray);\n const shouldAbandon = getMinSwitchRequest(activeRules);\n\n if (shouldAbandon) {\n shouldAbandon.reason.forceAbandon = true\n }\n\n return shouldAbandon || SwitchRequest(context).create();\n }\n\n function reset() {\n [qualitySwitchRules, abandonFragmentRules].forEach(rules => {\n if (rules && rules.length) {\n rules.forEach(rule => rule.reset && rule.reset());\n }\n });\n qualitySwitchRules = [];\n abandonFragmentRules = [];\n shouldUseBolaRuleByMediaType = {}\n eventBus.off(Events.SETTING_UPDATED_ABR_ACTIVE_RULES, _onAbrSettingsActiveRulesUpdated, instance);\n }\n\n function clearDataForStream(streamId) {\n [qualitySwitchRules, abandonFragmentRules].forEach(rules => {\n if (rules && rules.length) {\n rules.forEach(rule => rule.clearDataForStream && typeof rule.clearDataForStream === 'function' && rule.clearDataForStream(streamId));\n }\n });\n }\n\n function getQualitySwitchRules() {\n return qualitySwitchRules;\n }\n\n function getAbandonFragmentRules() {\n return abandonFragmentRules\n }\n\n function setBolaState(mediaType, value) {\n shouldUseBolaRuleByMediaType[mediaType] = value\n }\n\n function getBolaState(mediaType) {\n return shouldUseBolaRuleByMediaType[mediaType]\n }\n\n function _onAbrSettingsActiveRulesUpdated() {\n _updateRules()\n }\n\n function handleNewMediaInfo(newMediaInfo) {\n qualitySwitchRules.forEach(rule => rule.handleNewMediaInfo && rule.handleNewMediaInfo(newMediaInfo));\n abandonFragmentRules.forEach(rule => rule.handleNewMediaInfo && rule.handleNewMediaInfo(newMediaInfo));\n }\n\n instance = {\n clearDataForStream,\n getAbandonFragmentRules,\n getBestPossibleSwitchRequest,\n getBolaState,\n getMinSwitchRequest,\n getQualitySwitchRules,\n handleNewMediaInfo,\n initialize,\n reset,\n setBolaState,\n shouldAbandonFragment,\n };\n\n return instance;\n}\n\nABRRulesCollection.__dashjs_factory_name = 'ABRRulesCollection';\nconst factory = FactoryMaker.getClassFactory(ABRRulesCollection);\nFactoryMaker.updateSingletonFactory(ABRRulesCollection.__dashjs_factory_name, factory);\n\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\nfunction RulesContext(config) {\n\n config = config || {};\n let instance;\n const abrController = config.abrController;\n const throughputController = config.throughputController;\n const switchRequestHistory = config.switchRequestHistory;\n const droppedFramesHistory = config.droppedFramesHistory;\n const currentRequest = config.currentRequest;\n const scheduleController = config.streamProcessor ? config.streamProcessor.getScheduleController() : null;\n const voRepresentation = config.streamProcessor ? config.streamProcessor.getRepresentation() : null;\n const videoModel = config.videoModel ? config.videoModel : null;\n\n function getMediaType() {\n const mediaInfo = getMediaInfo();\n return mediaInfo ? mediaInfo.type : null;\n }\n\n function getStreamInfo() {\n const mediaInfo = getMediaInfo();\n return mediaInfo ? mediaInfo.streamInfo : null;\n }\n\n function getMediaInfo() {\n return voRepresentation ? voRepresentation.mediaInfo : null;\n }\n\n function getRepresentation() {\n return voRepresentation;\n }\n\n function getScheduleController() {\n return scheduleController;\n }\n\n function getAbrController() {\n return abrController;\n }\n\n function getThroughputController() {\n return throughputController;\n }\n\n function getSwitchRequestHistory() {\n return switchRequestHistory;\n }\n\n function getVideoModel() {\n return videoModel;\n }\n\n function getDroppedFramesHistory() {\n return droppedFramesHistory;\n }\n\n function getCurrentRequest() {\n return currentRequest;\n }\n\n instance = {\n getAbrController,\n getCurrentRequest,\n getDroppedFramesHistory,\n getMediaInfo,\n getMediaType,\n getRepresentation,\n getScheduleController,\n getStreamInfo,\n getSwitchRequestHistory,\n getThroughputController,\n getVideoModel,\n };\n\n return instance;\n}\n\nRulesContext.__dashjs_factory_name = 'RulesContext';\nexport default FactoryMaker.getClassFactory(RulesContext);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Settings from '../../core/Settings.js';\n\nfunction SwitchRequestHistory() {\n let switchRequests = {};\n let switchRequestHistory = {};\n const context = this.context;\n const settings = Settings(context).getInstance();\n\n function push(switchRequest) {\n const currentRepresentation = switchRequest.currentRepresentation;\n const newRepresentation = switchRequest.newRepresentation;\n\n // Don`t compare quality switches between different periods or different AdaptationSets\n if (currentRepresentation.mediaInfo.streamInfo.id !== newRepresentation.mediaInfo.streamInfo.id || newRepresentation.mediaInfo.id !== currentRepresentation.mediaInfo.id) {\n return;\n }\n\n const streamId = currentRepresentation.mediaInfo.streamInfo.id;\n if (!switchRequests[streamId]) {\n _initializeForStream(streamId)\n }\n\n const mediaType = currentRepresentation.mediaInfo.type;\n if (!switchRequests[streamId][mediaType]) {\n _initializeForMediaType(streamId, mediaType);\n }\n\n const currentRepresentationId = switchRequest.currentRepresentation.id\n if (!switchRequests[streamId][mediaType][currentRepresentationId]) {\n _initializeForRepresentation(streamId, mediaType, currentRepresentationId);\n }\n\n // Set switch details\n let indexDiff = switchRequest.newRepresentation.absoluteIndex - switchRequest.currentRepresentation.absoluteIndex;\n let drop = (indexDiff < 0) ? 1 : 0;\n let dropSize = drop ? -indexDiff : 0;\n let noDrop = drop ? 0 : 1;\n\n // Update running totals\n switchRequests[streamId][mediaType][switchRequest.currentRepresentation.id].drops += drop;\n switchRequests[streamId][mediaType][switchRequest.currentRepresentation.id].dropSize += dropSize;\n switchRequests[streamId][mediaType][switchRequest.currentRepresentation.id].noDrops += noDrop;\n\n // Save to history\n switchRequestHistory[streamId][mediaType].push({\n id: switchRequest.currentRepresentation.id,\n noDrop: noDrop,\n drop: drop,\n dropSize: dropSize\n });\n\n // Remove outdated entries from history\n const removedHistorySample = _adjustSwitchRequestHistory(streamId, mediaType);\n\n // Adjust current values based on the removed sample\n if (removedHistorySample) {\n _adjustSwitchRequestDrops(streamId, mediaType, removedHistorySample)\n }\n\n }\n\n function _initializeForStream(streamId) {\n switchRequests[streamId] = {};\n switchRequestHistory[streamId] = {};\n }\n\n function _initializeForMediaType(streamId, mediaType) {\n switchRequests[streamId][mediaType] = {};\n switchRequestHistory[streamId][mediaType] = [];\n }\n\n function _initializeForRepresentation(streamId, mediaType, representationId) {\n switchRequests[streamId][mediaType][representationId] = {\n noDrops: 0,\n drops: 0,\n dropSize: 0\n };\n }\n\n function _adjustSwitchRequestHistory(streamId, mediaType) {\n // Shift the earliest switch off srHistory and readjust to keep depth of running totals constant\n if (switchRequestHistory[streamId][mediaType].length > settings.get().streaming.abr.rules.switchHistoryRule.parameters.sampleSize) {\n return switchRequestHistory[streamId][mediaType].shift();\n }\n\n return null\n }\n\n function _adjustSwitchRequestDrops(streamId, mediaType, removedHistorySample) {\n switchRequests[streamId][mediaType][removedHistorySample.id].drops -= removedHistorySample.drop;\n switchRequests[streamId][mediaType][removedHistorySample.id].dropSize -= removedHistorySample.dropSize;\n switchRequests[streamId][mediaType][removedHistorySample.id].noDrops -= removedHistorySample.noDrop;\n }\n\n function getSwitchRequests(streamId, mediaType) {\n if (streamId === null || typeof streamId === 'undefined'\n || mediaType === null || typeof mediaType === 'undefined'\n || !switchRequests[streamId] || !switchRequests[streamId][mediaType]) {\n return {}\n }\n\n return switchRequests[streamId][mediaType];\n }\n\n function clearForStream(streamId) {\n delete switchRequests[streamId];\n delete switchRequestHistory[streamId];\n }\n\n function reset() {\n switchRequests = {};\n switchRequestHistory = {};\n }\n\n return {\n clearForStream,\n getSwitchRequests,\n push,\n reset\n };\n}\n\nSwitchRequestHistory.__dashjs_factory_name = 'SwitchRequestHistory';\nconst factory = FactoryMaker.getClassFactory(SwitchRequestHistory);\nexport default factory;\n","import FactoryMaker from '../../core/FactoryMaker.js';\n\nfunction DroppedFramesHistory() {\n\n let values = {};\n let lastDroppedFrames = {};\n let lastTotalFrames = {};\n\n function push(streamId, representationId, playbackQuality) {\n\n if (!representationId) {\n return;\n }\n\n if (!values[streamId]) {\n _initializeForStream(streamId);\n }\n\n let droppedVideoFrames = playbackQuality && playbackQuality.droppedVideoFrames ? playbackQuality.droppedVideoFrames : 0;\n let totalVideoFrames = playbackQuality && playbackQuality.totalVideoFrames ? playbackQuality.totalVideoFrames : 0;\n\n let intervalDroppedFrames = droppedVideoFrames - lastDroppedFrames[streamId];\n lastDroppedFrames[streamId] = droppedVideoFrames;\n\n let intervalTotalFrames = totalVideoFrames - lastTotalFrames[streamId];\n lastTotalFrames[streamId] = totalVideoFrames;\n\n const current = values[streamId];\n if (!current[representationId]) {\n current[representationId] = {\n droppedVideoFrames: intervalDroppedFrames,\n totalVideoFrames: intervalTotalFrames\n };\n } else {\n current[representationId].droppedVideoFrames += intervalDroppedFrames;\n current[representationId].totalVideoFrames += intervalTotalFrames;\n }\n\n }\n\n function _initializeForStream(streamId) {\n values[streamId] = [];\n lastDroppedFrames[streamId] = 0;\n lastTotalFrames[streamId] = 0;\n }\n\n function getFrameHistory(streamId) {\n return values[streamId];\n }\n\n function clearForStream(streamId) {\n delete values[streamId];\n delete lastDroppedFrames[streamId];\n delete lastTotalFrames[streamId];\n }\n\n function reset() {\n values = {};\n lastDroppedFrames = {};\n lastTotalFrames = {};\n }\n\n return {\n clearForStream,\n getFrameHistory,\n push,\n reset\n };\n}\n\nDroppedFramesHistory.__dashjs_factory_name = 'DroppedFramesHistory';\nconst factory = FactoryMaker.getClassFactory(DroppedFramesHistory);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport ABRRulesCollection from '../rules/abr/ABRRulesCollection.js';\nimport Constants from '../constants/Constants.js';\nimport MetricsConstants from '../constants/MetricsConstants.js';\nimport FragmentModel from '../models/FragmentModel.js';\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport RulesContext from '../rules/RulesContext.js';\nimport SwitchRequest from '../rules/SwitchRequest.js';\nimport SwitchRequestHistory from '../rules/SwitchRequestHistory.js';\nimport DroppedFramesHistory from '../rules/DroppedFramesHistory.js';\nimport Debug from '../../core/Debug.js';\nimport MediaPlayerEvents from '../MediaPlayerEvents.js';\n\nconst DEFAULT_VIDEO_BITRATE = 1000;\nconst DEFAULT_BITRATE = 100;\n\nfunction AbrController() {\n\n const context = this.context;\n const debug = Debug(context).getInstance();\n const eventBus = EventBus(context).getInstance();\n\n let instance,\n logger,\n abrRulesCollection,\n streamController,\n capabilities,\n streamProcessorDict,\n abandonmentStateDict,\n abandonmentTimeout,\n windowResizeEventCalled,\n adapter,\n videoModel,\n mediaPlayerModel,\n customParametersModel,\n cmsdModel,\n domStorage,\n playbackRepresentationId,\n switchRequestHistory,\n droppedFramesHistory,\n throughputController,\n dashMetrics,\n settings;\n\n function setup() {\n logger = debug.getLogger(instance);\n resetInitialSettings();\n }\n\n /**\n * Initialize everything that is not period specific. We only have one instance of the ABR Controller for all periods.\n */\n function initialize() {\n droppedFramesHistory = DroppedFramesHistory(context).create();\n switchRequestHistory = SwitchRequestHistory(context).create();\n abrRulesCollection = ABRRulesCollection(context).create({\n dashMetrics,\n customParametersModel,\n mediaPlayerModel,\n settings\n });\n abrRulesCollection.initialize();\n\n eventBus.on(MediaPlayerEvents.QUALITY_CHANGE_RENDERED, _onQualityChangeRendered, instance);\n eventBus.on(MediaPlayerEvents.METRIC_ADDED, _onMetricAdded, instance);\n eventBus.on(Events.LOADING_PROGRESS, _onFragmentLoadProgress, instance);\n }\n\n /**\n * Whenever a StreamProcessor is created it is added to the list of streamProcessorDict\n * In addition, the corresponding objects for this object and its stream id are created\n * @param {object} type\n * @param {object} streamProcessor\n */\n function registerStreamType(type, streamProcessor) {\n const streamId = streamProcessor.getStreamInfo().id;\n\n if (!streamProcessorDict[streamId]) {\n streamProcessorDict[streamId] = {};\n }\n streamProcessorDict[streamId][type] = streamProcessor;\n\n if (!abandonmentStateDict[streamId]) {\n abandonmentStateDict[streamId] = {};\n }\n abandonmentStateDict[streamId][type] = {};\n abandonmentStateDict[streamId][type].state = MetricsConstants.ALLOW_LOAD;\n\n // Do not change current value if it has been set before\n const currentState = abrRulesCollection.getBolaState(type)\n if (currentState === undefined) {\n abrRulesCollection.setBolaState(type, settings.get().streaming.abr.rules.bolaRule.active && !_shouldApplyDynamicAbrStrategy());\n }\n\n }\n\n /**\n * Remove all parameters that belong to a specific period\n * @param {string} streamId\n * @param {string} type\n */\n function unRegisterStreamType(streamId, type) {\n try {\n if (streamProcessorDict[streamId] && streamProcessorDict[streamId][type]) {\n delete streamProcessorDict[streamId][type];\n }\n\n if (abandonmentStateDict[streamId] && abandonmentStateDict[streamId][type]) {\n delete abandonmentStateDict[streamId][type];\n }\n\n } catch (e) {\n\n }\n }\n\n function resetInitialSettings() {\n abandonmentStateDict = {};\n streamProcessorDict = {};\n\n if (windowResizeEventCalled === undefined) {\n windowResizeEventCalled = false;\n }\n if (droppedFramesHistory) {\n droppedFramesHistory.reset();\n }\n\n if (switchRequestHistory) {\n switchRequestHistory.reset();\n }\n\n playbackRepresentationId = undefined;\n droppedFramesHistory = undefined;\n switchRequestHistory = undefined;\n clearTimeout(abandonmentTimeout);\n abandonmentTimeout = null;\n }\n\n function reset() {\n\n resetInitialSettings();\n\n eventBus.off(MediaPlayerEvents.QUALITY_CHANGE_RENDERED, _onQualityChangeRendered, instance);\n eventBus.off(MediaPlayerEvents.METRIC_ADDED, _onMetricAdded, instance);\n eventBus.off(Events.LOADING_PROGRESS, _onFragmentLoadProgress, instance);\n\n if (abrRulesCollection) {\n abrRulesCollection.reset();\n }\n }\n\n function setConfig(config) {\n if (!config) {\n return;\n }\n\n if (config.streamController) {\n streamController = config.streamController;\n }\n if (config.throughputController) {\n throughputController = config.throughputController;\n }\n if (config.domStorage) {\n domStorage = config.domStorage;\n }\n if (config.mediaPlayerModel) {\n mediaPlayerModel = config.mediaPlayerModel;\n }\n if (config.customParametersModel) {\n customParametersModel = config.customParametersModel;\n }\n if (config.cmsdModel) {\n cmsdModel = config.cmsdModel\n }\n if (config.dashMetrics) {\n dashMetrics = config.dashMetrics;\n }\n if (config.adapter) {\n adapter = config.adapter;\n }\n if (config.videoModel) {\n videoModel = config.videoModel;\n }\n if (config.settings) {\n settings = config.settings;\n }\n if (config.capabilities) {\n capabilities = config.capabilities;\n }\n }\n\n function getOptimalRepresentationForBitrate(mediaInfo, bitrateInKbit, includeCompatibleMediaInfos = true) {\n const possibleVoRepresentations = getPossibleVoRepresentationsFilteredBySettings(mediaInfo, includeCompatibleMediaInfos);\n\n if (!possibleVoRepresentations || possibleVoRepresentations.length === 0) {\n return null;\n }\n\n // If bitrate should be as small as possible return the Representation with the lowest bitrate\n const smallestRepresentation = possibleVoRepresentations.reduce((a, b) => {\n return a.bandwidth < b.bandwidth ? a : b;\n })\n if (bitrateInKbit <= 0) {\n return smallestRepresentation\n }\n\n // Get all Representations that have lower or equal bitrate than our target bitrate\n const targetRepresentations = possibleVoRepresentations.filter((rep) => {\n return rep.bitrateInKbit <= bitrateInKbit\n });\n\n if (!targetRepresentations || targetRepresentations.length === 0) {\n return smallestRepresentation\n }\n\n return targetRepresentations.reduce((max, curr) => {\n return (curr.absoluteIndex > max.absoluteIndex) ? curr : max;\n })\n\n }\n\n function getRepresentationByAbsoluteIndex(absoluteIndex, mediaInfo, includeCompatibleMediaInfos = true) {\n if (isNaN(absoluteIndex) || absoluteIndex < 0) {\n return null;\n }\n\n const possibleVoRepresentations = getPossibleVoRepresentationsFilteredBySettings(mediaInfo, includeCompatibleMediaInfos);\n\n return possibleVoRepresentations.find((rep) => {\n return rep.absoluteIndex === absoluteIndex\n })\n }\n\n function getPossibleVoRepresentations(mediaInfo, includeCompatibleMediaInfos = true) {\n return _getPossibleVoRepresentations(mediaInfo, includeCompatibleMediaInfos)\n }\n\n function getPossibleVoRepresentationsFilteredBySettings(mediaInfo, includeCompatibleMediaInfos = true) {\n let voRepresentations = _getPossibleVoRepresentations(mediaInfo, includeCompatibleMediaInfos);\n\n // Filter the list of options based on the provided settings\n voRepresentations = _filterByAllowedSettings(voRepresentations)\n\n return voRepresentations;\n }\n\n function _getPossibleVoRepresentations(mediaInfo, includeCompatibleMediaInfos) {\n let voRepresentations = [];\n if (!mediaInfo) {\n return voRepresentations;\n }\n\n const mediaInfos = _getPossibleMediaInfos(mediaInfo)\n mediaInfos.forEach((mediaInfo) => {\n let currentVoRepresentations = adapter.getVoRepresentations(mediaInfo);\n\n if (currentVoRepresentations && currentVoRepresentations.length > 0) {\n voRepresentations = voRepresentations.concat(currentVoRepresentations)\n }\n })\n\n // Now sort by quality (usually simply by bitrate)\n voRepresentations = _sortRepresentationsByQuality(voRepresentations);\n\n // Add an absolute index\n voRepresentations.forEach((rep, index) => {\n rep.absoluteIndex = index\n })\n\n // Filter the Representations in case we do not want to include compatible Media Infos\n // We can not apply the filter before otherwise the absolute index would be wrong\n // Also ignore Representations with a key ID that is not usable\n\n voRepresentations = voRepresentations.filter((representation) => {\n const isMediaInfoAllowed = includeCompatibleMediaInfos ? true : adapter.areMediaInfosEqual(representation.mediaInfo, mediaInfo);\n const areKeyIdsUsable =\n representation && representation.mediaInfo ? capabilities.areKeyIdsUsable(representation.mediaInfo) : true;\n return isMediaInfoAllowed && areKeyIdsUsable\n })\n\n return voRepresentations\n }\n\n function _getPossibleMediaInfos(mediaInfo) {\n try {\n const possibleMediaInfos = [];\n\n if (mediaInfo) {\n possibleMediaInfos.push(mediaInfo);\n }\n\n // If AS switching is disabled return only the current MediaInfo\n if (!settings.get().streaming.abr.enableSupplementalPropertyAdaptationSetSwitching\n || !mediaInfo.adaptationSetSwitchingCompatibleIds\n || mediaInfo.adaptationSetSwitchingCompatibleIds.length === 0) {\n return possibleMediaInfos\n }\n\n // Otherwise add everything that is compatible\n const mediaInfoArr = streamProcessorDict[mediaInfo.streamInfo.id][mediaInfo.type].getAllMediaInfos()\n const compatibleMediaInfos = mediaInfoArr.filter((entry) => {\n return mediaInfo.adaptationSetSwitchingCompatibleIds.includes(entry.id)\n })\n\n return possibleMediaInfos.concat(compatibleMediaInfos);\n } catch (e) {\n return [mediaInfo]\n }\n }\n\n /**\n * @param {Representation[]} voRepresentations\n * @return {Representation[]}\n */\n function _filterByAllowedSettings(voRepresentations) {\n try {\n voRepresentations = _filterByPossibleBitrate(voRepresentations);\n voRepresentations = _filterByPortalSize(voRepresentations);\n voRepresentations = _filterByCmsdMaxBitrate(voRepresentations);\n\n return voRepresentations;\n } catch (e) {\n logger.error(e);\n return voRepresentations\n }\n }\n\n /**\n * Returns all RepresentationInfo objects that have at least one bitrate that fulfills the constraint\n * @param {Representation[]} voRepresentations\n * @return {Representation[]}\n */\n function _filterByPossibleBitrate(voRepresentations) {\n try {\n const filteredArray = voRepresentations.filter((voRepresentation) => {\n const type = voRepresentation.mediaInfo.type;\n const representationBitrate = voRepresentation.bitrateInKbit;\n const maxBitrate = mediaPlayerModel.getAbrBitrateParameter('maxBitrate', type);\n const minBitrate = mediaPlayerModel.getAbrBitrateParameter('minBitrate', type);\n\n if (maxBitrate > -1 && representationBitrate > maxBitrate) {\n return false;\n }\n\n return !(minBitrate > -1 && representationBitrate < minBitrate);\n })\n\n if (filteredArray.length > 0) {\n return filteredArray\n }\n\n return voRepresentations\n } catch (e) {\n logger.error(e);\n return voRepresentations\n }\n }\n\n /**\n * @param {Representation[]} voRepresentations\n * @return {Representation[]}\n * @private\n */\n function _filterByPortalSize(voRepresentations) {\n try {\n if (!settings.get().streaming.abr.limitBitrateByPortal) {\n return voRepresentations;\n }\n\n const { elementWidth } = videoModel.getVideoElementSize();\n\n const filteredArray = voRepresentations.filter((voRepresentation) => {\n return voRepresentation.mediaInfo.type !== Constants.VIDEO || voRepresentation.width <= elementWidth;\n })\n\n if (filteredArray.length > 0) {\n return filteredArray\n }\n\n return voRepresentations\n } catch (e) {\n logger.error(e);\n return voRepresentations\n }\n }\n\n /**\n * @param {Representation[]} voRepresentations\n * @return {Representation[]}\n */\n function _filterByCmsdMaxBitrate(voRepresentations) {\n try {\n // Check CMSD max suggested bitrate only for video segments\n if (!settings.get().streaming.cmsd.enabled || !settings.get().streaming.cmsd.abr.applyMb) {\n return voRepresentations\n }\n\n const filteredArray = voRepresentations.filter((voRepresentation) => {\n const type = voRepresentation.mediaInfo.type;\n let maxCmsdBitrate = cmsdModel.getMaxBitrate(type);\n\n if (type !== Constants.VIDEO || maxCmsdBitrate < 0) {\n return true\n }\n // Subtract audio bitrate\n const streamId = voRepresentation.mediaInfo.streamInfo.id;\n const streamProcessor = streamProcessorDict[streamId][Constants.AUDIO];\n const representation = streamProcessor.getRepresentation();\n const audioBitrate = representation.bitrateInKbit;\n maxCmsdBitrate -= audioBitrate ? audioBitrate : 0;\n return voRepresentation.bitrateInKbit <= maxCmsdBitrate\n })\n\n if (filteredArray.length > 0) {\n return filteredArray\n }\n\n return voRepresentations\n } catch (e) {\n logger.error(e);\n return voRepresentations\n }\n }\n\n function _sortRepresentationsByQuality(voRepresentations) {\n if (_shouldSortByQualityRankingAttribute(voRepresentations)) {\n voRepresentations = _sortByQualityRankingAttribute(voRepresentations)\n } else {\n voRepresentations = _sortByDefaultParameters(voRepresentations)\n }\n\n return voRepresentations\n }\n\n function _shouldSortByQualityRankingAttribute(voRepresentations) {\n let firstMediaInfo = null;\n const filteredRepresentations = voRepresentations.filter((rep) => {\n if (!firstMediaInfo) {\n firstMediaInfo = rep.mediaInfo;\n }\n return !isNaN(rep.qualityRanking) && adapter.areMediaInfosEqual(firstMediaInfo, rep.mediaInfo);\n })\n\n return filteredRepresentations.length === voRepresentations.length\n }\n\n function _sortByQualityRankingAttribute(voRepresentations) {\n voRepresentations.sort((a, b) => {\n return b.qualityRanking - a.qualityRanking;\n })\n\n return voRepresentations\n }\n\n\n function _sortByDefaultParameters(voRepresentations) {\n voRepresentations.sort((a, b) => {\n\n // In case both Representations are coming from the same MediaInfo then choose the one with the highest resolution and highest bitrate\n if (adapter.areMediaInfosEqual(a.mediaInfo, b.mediaInfo)) {\n if (!isNaN(a.pixelsPerSecond) && !isNaN(b.pixelsPerSecond) && a.pixelsPerSecond !== b.pixelsPerSecond) {\n return a.pixelsPerSecond - b.pixelsPerSecond\n } else {\n return a.bandwidth - b.bandwidth\n }\n }\n\n // In case the Representations are coming from different MediaInfos they might have different codecs. The bandwidth is not a good indicator, use bits per pixel instead\n else {\n if (!isNaN(a.pixelsPerSecond) && !isNaN(b.pixelsPerSecond) && a.pixelsPerSecond !== b.pixelsPerSecond) {\n return a.pixelsPerSecond - b.pixelsPerSecond\n } else if (!isNaN(a.bitsPerPixel) && !isNaN(b.bitsPerPixel)) {\n return b.bitsPerPixel - a.bitsPerPixel\n } else {\n return a.bandwidth - b.bandwidth\n }\n }\n })\n\n return voRepresentations\n }\n\n\n /**\n * While fragment loading is in progress we check if we might need to abort the request\n * @param {object} e\n * @private\n */\n function _onFragmentLoadProgress(e) {\n const type = e.request.mediaType;\n const streamId = e.streamId;\n\n if (!type || !streamId || !streamProcessorDict[streamId] || !settings.get().streaming.abr.autoSwitchBitrate[type]) {\n return;\n }\n\n const streamProcessor = streamProcessorDict[streamId][type];\n if (!streamProcessor) {\n return;\n }\n\n const rulesContext = RulesContext(context).create({\n abrController: instance,\n streamProcessor,\n currentRequest: e.request,\n throughputController,\n adapter,\n videoModel\n });\n const switchRequest = abrRulesCollection.shouldAbandonFragment(rulesContext);\n\n if (switchRequest && switchRequest.representation !== SwitchRequest.NO_CHANGE) {\n _onSegmentDownloadShouldBeAbandoned(e, streamId, type, streamProcessor, switchRequest);\n }\n }\n\n function _onSegmentDownloadShouldBeAbandoned(e, streamId, type, streamProcessor, switchRequest) {\n const fragmentModel = streamProcessor.getFragmentModel();\n const request = fragmentModel.getRequests({\n state: FragmentModel.FRAGMENT_MODEL_LOADING,\n index: e.request.index\n })[0];\n if (request) {\n const targetAbandonmentStateDict = _getAbandonmentStateDictFor(streamId, type);\n\n if (targetAbandonmentStateDict) {\n targetAbandonmentStateDict.state = MetricsConstants.ABANDON_LOAD;\n }\n switchRequestHistory.reset();\n setPlaybackQuality(type, streamController.getActiveStreamInfo(), switchRequest.representation, switchRequest.reason);\n\n clearTimeout(abandonmentTimeout);\n abandonmentTimeout = setTimeout(\n () => {\n if (targetAbandonmentStateDict) {\n abandonmentStateDict[streamId][type].state = MetricsConstants.ALLOW_LOAD;\n }\n abandonmentTimeout = null;\n },\n settings.get().streaming.abandonLoadTimeout\n );\n }\n }\n\n /**\n * Update dropped frames history when the quality was changed\n * @param {object} e\n * @private\n */\n function _onQualityChangeRendered(e) {\n if (e.mediaType === Constants.VIDEO) {\n if (playbackRepresentationId !== undefined) {\n droppedFramesHistory.push(e.streamId, playbackRepresentationId, videoModel.getPlaybackQuality());\n }\n playbackRepresentationId = e.newRepresentation.id;\n }\n }\n\n /**\n * When the buffer level is updated we check if we need to change the ABR strategy\n * @param e\n * @private\n */\n function _onMetricAdded(e) {\n if (_shouldApplyDynamicAbrStrategy()\n && e.metric === MetricsConstants.BUFFER_LEVEL\n && (e.mediaType === Constants.AUDIO || e.mediaType === Constants.VIDEO)) {\n _updateDynamicAbrStrategy(e.mediaType, 0.001 * e.value.level);\n }\n }\n\n /**\n * Returns the initial bitrate for a specific media type\n * @param {string} type\n * @returns {number} A value of the initial bitrate, kbps\n * @memberof AbrController#\n */\n function getInitialBitrateFor(type) {\n\n if (type === Constants.TEXT) {\n return NaN;\n }\n\n let configBitrate = mediaPlayerModel.getAbrBitrateParameter('initialBitrate', type);\n if (configBitrate > 0) {\n return configBitrate;\n }\n\n let savedBitrate = NaN;\n if (domStorage && domStorage.hasOwnProperty('getSavedBitrateSettings')) {\n savedBitrate = domStorage.getSavedBitrateSettings(type);\n }\n if (!isNaN(savedBitrate)) {\n return savedBitrate\n }\n\n const averageThroughput = throughputController.getAverageThroughput(type);\n if (!isNaN(averageThroughput) && averageThroughput > 0) {\n return averageThroughput\n }\n\n return (type === Constants.VIDEO) ? DEFAULT_VIDEO_BITRATE : DEFAULT_BITRATE;\n }\n\n /**\n * This function is called by the scheduleControllers to check if the quality should be changed.\n * Consider this the main entry point for the ABR decision logic\n * @param {string} type\n * @param {string} streamId\n */\n function checkPlaybackQuality(type, streamId) {\n try {\n if (!type || !streamProcessorDict || !streamProcessorDict[streamId] || !streamProcessorDict[streamId][type]) {\n return false;\n }\n\n if (droppedFramesHistory) {\n const playbackQuality = videoModel.getPlaybackQuality();\n if (playbackQuality) {\n droppedFramesHistory.push(streamId, playbackRepresentationId, playbackQuality);\n }\n }\n\n if (!settings.get().streaming.abr.autoSwitchBitrate[type]) {\n return false;\n }\n\n const streamProcessor = streamProcessorDict[streamId][type];\n const currentRepresentation = streamProcessor.getRepresentation();\n const rulesContext = RulesContext(context).create({\n abrController: instance,\n throughputController,\n switchRequestHistory,\n droppedFramesHistory,\n streamProcessor,\n adapter,\n videoModel\n });\n const switchRequest = abrRulesCollection.getBestPossibleSwitchRequest(rulesContext);\n\n if (!switchRequest || !switchRequest.representation) {\n return false;\n }\n\n let newRepresentation = switchRequest.representation;\n switchRequestHistory.push({\n currentRepresentation,\n newRepresentation\n });\n\n if (newRepresentation.id !== currentRepresentation.id && (abandonmentStateDict[streamId][type].state === MetricsConstants.ALLOW_LOAD || newRepresentation.absoluteIndex < currentRepresentation.absoluteIndex)) {\n _changeQuality(currentRepresentation, newRepresentation, switchRequest.reason);\n return true;\n }\n\n return false;\n } catch (e) {\n logger.error(e);\n return false;\n }\n }\n\n /**\n * Sets the new playback quality. Starts from index 0.\n * If the index of the new quality is the same as the old one changeQuality will not be called.\n * @param {string} type\n * @param {object} streamInfo\n * @param {Representation} representation\n * @param {string} reason\n * @param {string} rule\n */\n function setPlaybackQuality(type, streamInfo, representation, reason = {}) {\n if (!streamInfo || !streamInfo.id || !type || !streamProcessorDict || !streamProcessorDict[streamInfo.id] || !streamProcessorDict[streamInfo.id][type] || !representation) {\n return;\n }\n\n const streamProcessor = streamProcessorDict[streamInfo.id][type];\n const currentRepresentation = streamProcessor.getRepresentation();\n\n\n if (!currentRepresentation || representation.id !== currentRepresentation.id) {\n _changeQuality(currentRepresentation, representation, reason);\n }\n }\n\n /**\n *\n * @param {string} streamId\n * @param {type} type\n * @return {*|null}\n */\n function getAbandonmentStateFor(streamId, type) {\n return abandonmentStateDict[streamId] && abandonmentStateDict[streamId][type] ? abandonmentStateDict[streamId][type].state : null;\n }\n\n function _getAbandonmentStateDictFor(streamId, type) {\n return abandonmentStateDict[streamId] && abandonmentStateDict[streamId][type] ? abandonmentStateDict[streamId][type] : null;\n\n }\n\n\n /**\n * Changes the internal qualityDict values according to the new quality\n * @param {Representation} oldRepresentation\n * @param {Representation} newRepresentation\n * @param {string} reason\n * @private\n */\n function _changeQuality(oldRepresentation, newRepresentation, reason) {\n const streamId = newRepresentation.mediaInfo.streamInfo.id;\n const type = newRepresentation.mediaInfo.type;\n if (type && streamProcessorDict[streamId] && streamProcessorDict[streamId][type]) {\n const streamInfo = streamProcessorDict[streamId][type].getStreamInfo();\n const bufferLevel = dashMetrics.getCurrentBufferLevel(type);\n const isAdaptationSetSwitch = oldRepresentation !== null && !adapter.areMediaInfosEqual(oldRepresentation.mediaInfo, newRepresentation.mediaInfo);\n\n const oldBitrate = oldRepresentation ? oldRepresentation.bitrateInKbit : 0;\n logger.info(`[AbrController]: Switching quality in period ${streamId} for media type ${type}. Switch from bitrate ${oldBitrate} to bitrate ${newRepresentation.bitrateInKbit}. Current buffer level: ${bufferLevel}. Reason:` + (reason ? JSON.stringify(reason) : '/'));\n\n eventBus.trigger(Events.QUALITY_CHANGE_REQUESTED,\n {\n oldRepresentation: oldRepresentation,\n newRepresentation: newRepresentation,\n reason,\n streamInfo,\n mediaType: type,\n isAdaptationSetSwitch\n },\n { streamId: streamInfo.id, mediaType: type }\n );\n const bitrate = throughputController.getAverageThroughput(type);\n if (!isNaN(bitrate)) {\n domStorage.setSavedBitrateSettings(type, bitrate);\n }\n }\n }\n\n\n /**\n * If both BOLA and Throughput Rule are active we switch dynamically between both of them\n * @returns {boolean}\n * @private\n */\n function _shouldApplyDynamicAbrStrategy() {\n return settings.get().streaming.abr.rules.bolaRule.active && settings.get().streaming.abr.rules.throughputRule.active\n }\n\n /**\n * Switch between BOLA and ThroughputRule\n * @param mediaType\n * @param bufferLevel\n * @private\n */\n function _updateDynamicAbrStrategy(mediaType, bufferLevel) {\n try {\n const bufferTimeDefault = mediaPlayerModel.getBufferTimeDefault();\n const switchOnThreshold = bufferTimeDefault;\n const switchOffThreshold = 0.5 * bufferTimeDefault;\n\n const isUsingBolaRule = abrRulesCollection.getBolaState(mediaType)\n const shouldUseBolaRule = bufferLevel >= (isUsingBolaRule ? switchOffThreshold : switchOnThreshold); // use hysteresis to avoid oscillating rules\n abrRulesCollection.setBolaState(mediaType, shouldUseBolaRule);\n\n if (shouldUseBolaRule !== isUsingBolaRule) {\n if (shouldUseBolaRule) {\n logger.info('[' + mediaType + '] switching from throughput to buffer occupancy ABR rule (buffer: ' + bufferLevel.toFixed(3) + ').');\n } else {\n logger.info('[' + mediaType + '] switching from buffer occupancy to throughput ABR rule (buffer: ' + bufferLevel.toFixed(3) + ').');\n }\n }\n } catch (e) {\n logger.error(e);\n }\n }\n\n /**\n * Checks if the provided Representation has the lowest possible quality\n * @param representation\n * @returns {boolean}\n */\n function isPlayingAtLowestQuality(representation) {\n const voRepresentations = getPossibleVoRepresentationsFilteredBySettings(representation.mediaInfo, true);\n\n return voRepresentations[0].id === representation.id\n }\n\n /**\n * Checks if the provided Representation has the highest possible quality\n * @param representation\n * @returns {boolean}\n */\n function isPlayingAtTopQuality(representation) {\n if (!representation) {\n return true;\n }\n const voRepresentations = getPossibleVoRepresentationsFilteredBySettings(representation.mediaInfo, true);\n\n return voRepresentations[voRepresentations.length - 1].id === representation.id;\n }\n\n function setWindowResizeEventCalled(value) {\n windowResizeEventCalled = value;\n }\n\n function clearDataForStream(streamId) {\n if (droppedFramesHistory) {\n droppedFramesHistory.clearForStream(streamId);\n }\n if (streamProcessorDict[streamId]) {\n delete streamProcessorDict[streamId];\n }\n if (switchRequestHistory) {\n switchRequestHistory.clearForStream(streamId);\n }\n if (abandonmentStateDict[streamId]) {\n delete abandonmentStateDict[streamId];\n }\n\n abrRulesCollection.clearDataForStream(streamId);\n }\n\n function handleNewMediaInfo(newMediaInfo) {\n abrRulesCollection.handleNewMediaInfo(newMediaInfo);\n }\n\n\n instance = {\n checkPlaybackQuality,\n clearDataForStream,\n getAbandonmentStateFor,\n getInitialBitrateFor,\n getOptimalRepresentationForBitrate,\n getPossibleVoRepresentations,\n getPossibleVoRepresentationsFilteredBySettings,\n getRepresentationByAbsoluteIndex,\n handleNewMediaInfo,\n initialize,\n isPlayingAtLowestQuality,\n isPlayingAtTopQuality,\n registerStreamType,\n reset,\n setConfig,\n setPlaybackQuality,\n setWindowResizeEventCalled,\n unRegisterStreamType,\n };\n\n setup();\n\n return instance;\n}\n\nAbrController.__dashjs_factory_name = 'AbrController';\nconst factory = FactoryMaker.getSingletonFactory(AbrController);\nFactoryMaker.updateSingletonFactory(AbrController.__dashjs_factory_name, factory);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport Debug from '../../core/Debug.js';\nimport Constants from '../constants/Constants.js';\nimport Settings from '../../core/Settings.js';\n\n\nconst READY_STATES_TO_EVENT_NAMES = new Map([\n [Constants.VIDEO_ELEMENT_READY_STATES.HAVE_METADATA, 'loadedmetadata'],\n [Constants.VIDEO_ELEMENT_READY_STATES.HAVE_CURRENT_DATA, 'loadeddata'],\n [Constants.VIDEO_ELEMENT_READY_STATES.HAVE_FUTURE_DATA, 'canplay'],\n [Constants.VIDEO_ELEMENT_READY_STATES.HAVE_ENOUGH_DATA, 'canplaythrough']\n]);\n\nfunction VideoModel() {\n\n let instance,\n logger,\n settings,\n element,\n _currentTime,\n setCurrentTimeReadyStateFunction,\n resumeReadyStateFunction,\n TTMLRenderingDiv,\n vttRenderingDiv,\n previousPlaybackRate,\n timeout;\n\n const VIDEO_MODEL_WRONG_ELEMENT_TYPE = 'element is not video or audio DOM type!';\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const stalledStreams = [];\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n settings = Settings(context).getInstance();\n _currentTime = NaN;\n }\n\n function initialize() {\n eventBus.on(Events.PLAYBACK_PLAYING, onPlaying, this);\n }\n\n function reset() {\n clearTimeout(timeout);\n eventBus.off(Events.PLAYBACK_PLAYING, onPlaying, this);\n stalledStreams.length = 0;\n }\n\n function setConfig(config) {\n if (!config) {\n return;\n }\n\n if (config.settings) {\n settings = config.settings;\n }\n }\n\n function setPlaybackRate(value, ignoreReadyState = false) {\n if (!element) {\n return;\n }\n\n if (ignoreReadyState) {\n element.playbackRate = value;\n return;\n }\n\n // If media element hasn't loaded enough data to play yet, wait until it has\n waitForReadyState(Constants.VIDEO_ELEMENT_READY_STATES.HAVE_FUTURE_DATA, () => {\n element.playbackRate = value;\n });\n }\n\n //TODO Move the DVR window calculations from MediaPlayer to Here.\n function setCurrentTime(currentTime, stickToBuffered) {\n if (element) {\n if (setCurrentTimeReadyStateFunction && setCurrentTimeReadyStateFunction.func && setCurrentTimeReadyStateFunction.event) {\n removeEventListener(setCurrentTimeReadyStateFunction.event, setCurrentTimeReadyStateFunction.func);\n }\n _currentTime = currentTime;\n setCurrentTimeReadyStateFunction = waitForReadyState(Constants.VIDEO_ELEMENT_READY_STATES.HAVE_METADATA, () => {\n if (!element) {\n return;\n }\n\n // We don't set the same currentTime because it can cause firing unexpected Pause event in IE11\n // providing playbackRate property equals to zero.\n if (element.currentTime === _currentTime) {\n _currentTime = NaN;\n return;\n }\n\n // TODO Despite the fact that MediaSource 'open' event has been fired IE11 cannot set videoElement.currentTime\n // immediately (it throws InvalidStateError). It seems that this is related to videoElement.readyState property\n // Initially it is 0, but soon after 'open' event it goes to 1 and setting currentTime is allowed. Chrome allows to\n // set currentTime even if readyState = 0.\n // setTimeout is used to workaround InvalidStateError in IE11\n try {\n _currentTime = stickToBuffered ? stickTimeToBuffered(_currentTime) : _currentTime;\n if (!isNaN(_currentTime)) {\n element.currentTime = _currentTime;\n }\n _currentTime = NaN;\n } catch (e) {\n if (element.readyState === 0 && e.code === e.INVALID_STATE_ERR) {\n timeout = setTimeout(function () {\n element.currentTime = _currentTime;\n _currentTime = NaN;\n }, 400);\n }\n }\n });\n }\n }\n\n function stickTimeToBuffered(time) {\n const buffered = getBufferRange();\n let closestTime = time;\n let closestDistance = 9999999999;\n if (buffered) {\n for (let i = 0; i < buffered.length; i++) {\n const start = buffered.start(i);\n const end = buffered.end(i);\n const distanceToStart = Math.abs(start - time);\n const distanceToEnd = Math.abs(end - time);\n\n if (time >= start && time <= end) {\n return time;\n }\n\n if (distanceToStart < closestDistance) {\n closestDistance = distanceToStart;\n closestTime = start;\n }\n\n if (distanceToEnd < closestDistance) {\n closestDistance = distanceToEnd;\n closestTime = end;\n }\n }\n }\n return closestTime;\n }\n\n function getElement() {\n return element;\n }\n\n function setElement(value) {\n //add check of value type\n if (value === null || value === undefined || (value && (/^(VIDEO|AUDIO)$/i).test(value.nodeName))) {\n element = value;\n // Workaround to force Firefox to fire the canplay event.\n if (element) {\n element.preload = 'auto';\n }\n } else {\n throw VIDEO_MODEL_WRONG_ELEMENT_TYPE;\n }\n }\n\n function setSource(source) {\n if (element) {\n if (source) {\n element.src = source;\n } else {\n element.removeAttribute('src');\n element.load();\n }\n }\n }\n\n function setDisableRemotePlayback(value) {\n if (element) {\n element.disableRemotePlayback = value;\n }\n }\n\n function getSource() {\n return element ? element.src : null;\n }\n\n function getTTMLRenderingDiv() {\n return TTMLRenderingDiv;\n }\n\n function getVttRenderingDiv() {\n return vttRenderingDiv;\n }\n\n function setTTMLRenderingDiv(div) {\n TTMLRenderingDiv = div;\n // The styling will allow the captions to match the video window size and position.\n TTMLRenderingDiv.style.position = 'absolute';\n TTMLRenderingDiv.style.display = 'flex';\n TTMLRenderingDiv.style.overflow = 'hidden';\n TTMLRenderingDiv.style.pointerEvents = 'none';\n TTMLRenderingDiv.style.top = 0;\n TTMLRenderingDiv.style.left = 0;\n }\n\n function setVttRenderingDiv(div) {\n vttRenderingDiv = div;\n }\n\n function setStallState(type, state) {\n stallStream(type, state);\n }\n\n function isStalled() {\n return (stalledStreams.length > 0);\n }\n\n function addStalledStream(type) {\n if (type === null || !element || element.seeking || stalledStreams.indexOf(type) !== -1) {\n return;\n }\n\n stalledStreams.push(type);\n\n if (settings.get().streaming.buffer.syntheticStallEvents.enabled && element && stalledStreams.length === 1 && (settings.get().streaming.buffer.syntheticStallEvents.ignoreReadyState || getReadyState() >= Constants.VIDEO_ELEMENT_READY_STATES.HAVE_FUTURE_DATA)) {\n // Halt playback until nothing is stalled\n previousPlaybackRate = element.playbackRate;\n setPlaybackRate(0, true);\n\n const event = document.createEvent('Event');\n event.initEvent('waiting', true, false);\n element.dispatchEvent(event);\n }\n }\n\n function removeStalledStream(type) {\n let index = stalledStreams.indexOf(type);\n\n if (type === null) {\n return;\n }\n if (index !== -1) {\n stalledStreams.splice(index, 1);\n }\n\n if (settings.get().streaming.buffer.syntheticStallEvents.enabled && element && !isStalled()) {\n const resume = () => {\n setPlaybackRate(previousPlaybackRate || 1, settings.get().streaming.buffer.syntheticStallEvents.ignoreReadyState);\n\n if (!element.paused) {\n const event = document.createEvent('Event');\n event.initEvent('playing', true, false);\n element.dispatchEvent(event);\n }\n }\n \n if (settings.get().streaming.buffer.syntheticStallEvents.ignoreReadyState) {\n resume();\n } else {\n if (resumeReadyStateFunction && resumeReadyStateFunction.func && resumeReadyStateFunction.event) {\n removeEventListener(resumeReadyStateFunction.event, resumeReadyStateFunction.func);\n }\n resumeReadyStateFunction = waitForReadyState(Constants.VIDEO_ELEMENT_READY_STATES.HAVE_FUTURE_DATA, resume);\n }\n }\n }\n\n function stallStream(type, isStalled) {\n if (isStalled) {\n addStalledStream(type);\n } else {\n removeStalledStream(type);\n }\n }\n\n //Calling play on the element will emit playing - even if the stream is stalled. If the stream is stalled, emit a waiting event.\n function onPlaying() {\n if (element && isStalled() && element.playbackRate === 0) {\n const event = document.createEvent('Event');\n event.initEvent('waiting', true, false);\n element.dispatchEvent(event);\n }\n }\n\n function getPlaybackQuality() {\n if (!element) {\n return null;\n }\n let hasWebKit = ('webkitDroppedFrameCount' in element) && ('webkitDecodedFrameCount' in element);\n let hasQuality = ('getVideoPlaybackQuality' in element);\n let result = null;\n\n if (hasQuality) {\n result = element.getVideoPlaybackQuality();\n } else if (hasWebKit) {\n result = {\n droppedVideoFrames: element.webkitDroppedFrameCount,\n totalVideoFrames: element.webkitDroppedFrameCount + element.webkitDecodedFrameCount,\n creationTime: new Date()\n };\n }\n\n return result;\n }\n\n function play() {\n if (element) {\n element.autoplay = true;\n const p = element.play();\n if (p && p.catch && typeof Promise !== 'undefined') {\n p.catch((e) => {\n if (e.name === 'NotAllowedError') {\n eventBus.trigger(Events.PLAYBACK_NOT_ALLOWED);\n }\n logger.warn(`Caught pending play exception - continuing (${e})`);\n });\n }\n }\n }\n\n function isPaused() {\n return element ? element.paused : null;\n }\n\n function pause() {\n if (element) {\n element.pause();\n element.autoplay = false;\n }\n }\n\n function isSeeking() {\n return element ? (element.seeking || !isNaN(_currentTime)) : null;\n }\n\n function getTime() {\n return element ? (!isNaN(_currentTime) ? _currentTime : element.currentTime) : null;\n }\n\n function getPlaybackRate() {\n return element ? element.playbackRate : null;\n }\n\n function getPlayedRanges() {\n return element ? element.played : null;\n }\n\n function getEnded() {\n return element ? element.ended : null;\n }\n\n function addEventListener(eventName, eventCallBack) {\n if (element) {\n element.addEventListener(eventName, eventCallBack);\n }\n }\n\n function removeEventListener(eventName, eventCallBack) {\n if (element) {\n element.removeEventListener(eventName, eventCallBack);\n }\n }\n\n function getReadyState() {\n return element ? element.readyState : NaN;\n }\n\n function getBufferRange() {\n return element ? element.buffered : null;\n }\n\n function getClientWidth() {\n return element ? element.clientWidth : NaN;\n }\n\n function getClientHeight() {\n return element ? element.clientHeight : NaN;\n }\n\n function getVideoWidth() {\n return element ? element.videoWidth : NaN;\n }\n\n function getVideoHeight() {\n return element ? element.videoHeight : NaN;\n }\n\n function getVideoRelativeOffsetTop() {\n if (element) {\n const parentElement = element.parentNode.host || element.parentNode;\n return parentElement ? element.getBoundingClientRect().top - parentElement.getBoundingClientRect().top : NaN;\n }\n return NaN;\n }\n\n function getVideoRelativeOffsetLeft() {\n if (element) {\n const parentElement = element.parentNode.host || element.parentNode;\n return parentElement ? element.getBoundingClientRect().left - parentElement.getBoundingClientRect().left : NaN;\n }\n return NaN;\n }\n\n function getTextTracks() {\n return element ? element.textTracks : [];\n }\n\n function getTextTrack(kind, label, lang, isTTML, isEmbedded) {\n if (element) {\n for (let i = 0; i < element.textTracks.length; i++) {\n //label parameter could be a number (due to adaptationSet), but label, the attribute of textTrack, is a string => to modify...\n //label could also be undefined (due to adaptationSet)\n if (element.textTracks[i].kind === kind && (label ? element.textTracks[i].label == label : true) &&\n element.textTracks[i].language === lang && element.textTracks[i].isTTML === isTTML && element.textTracks[i].isEmbedded === isEmbedded) {\n return element.textTracks[i];\n }\n }\n }\n\n return null;\n }\n\n function addTextTrack(kind, label, lang, isTTML, isEmbedded) {\n if (!element) {\n return null;\n }\n // check if track of same type has not been already created for previous stream\n // then use it (no way to remove existing text track from video element)\n let track = getTextTrack(kind, label, lang, isTTML, isEmbedded);\n if (!track) {\n track = element.addTextTrack(kind, label, lang);\n track.isEmbedded = isEmbedded;\n track.isTTML = isTTML;\n }\n return track;\n }\n\n function appendChild(childElement) {\n if (element) {\n element.appendChild(childElement);\n //in Chrome, we need to differenciate textTrack with same lang, kind and label but different format (vtt, ttml, etc...)\n if (childElement.isTTML !== undefined) {\n element.textTracks[element.textTracks.length - 1].isTTML = childElement.isTTML;\n element.textTracks[element.textTracks.length - 1].isEmbedded = childElement.isEmbedded;\n }\n }\n }\n\n function removeChild(childElement) {\n if (element) {\n element.removeChild(childElement);\n }\n }\n\n function waitForReadyState(targetReadyState, callback) {\n if (targetReadyState === Constants.VIDEO_ELEMENT_READY_STATES.HAVE_NOTHING ||\n getReadyState() >= targetReadyState) {\n callback();\n return null;\n } else {\n // wait for the appropriate callback before checking again\n const event = READY_STATES_TO_EVENT_NAMES.get(targetReadyState);\n return _listenOnce(event, callback);\n }\n }\n\n function _listenOnce(event, callback) {\n const func = () => {\n // Stop listening to this event.\n removeEventListener(event, func);\n // Call the original listener.\n callback(event);\n };\n addEventListener(event, func);\n\n return { func, event }\n }\n\n function getVideoElementSize() {\n const hasPixelRatio = settings.get().streaming.abr.usePixelRatioInLimitBitrateByPortal && window.hasOwnProperty('devicePixelRatio');\n const pixelRatio = hasPixelRatio ? window.devicePixelRatio : 1;\n const elementWidth = getClientWidth() * pixelRatio;\n const elementHeight = getClientHeight() * pixelRatio;\n\n return {\n elementWidth,\n elementHeight\n }\n }\n\n instance = {\n addEventListener,\n addTextTrack,\n appendChild,\n getBufferRange,\n getClientHeight,\n getClientWidth,\n getElement,\n getEnded,\n getPlaybackQuality,\n getPlaybackRate,\n getPlayedRanges,\n getReadyState,\n getSource,\n getTTMLRenderingDiv,\n getTextTrack,\n getTextTracks,\n getTime,\n getVideoElementSize,\n getVideoHeight,\n getVideoRelativeOffsetLeft,\n getVideoRelativeOffsetTop,\n getVideoWidth,\n getVttRenderingDiv,\n initialize,\n isPaused,\n isSeeking,\n isStalled,\n pause,\n play,\n removeChild,\n removeEventListener,\n reset,\n setConfig,\n setCurrentTime,\n setDisableRemotePlayback,\n setElement,\n setPlaybackRate,\n setSource,\n setStallState,\n setTTMLRenderingDiv,\n setVttRenderingDiv,\n waitForReadyState,\n };\n\n setup();\n\n return instance;\n}\n\nVideoModel.__dashjs_factory_name = 'VideoModel';\nexport default FactoryMaker.getSingletonFactory(VideoModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\nimport Constants from '../constants/Constants.js';\n\nconst legacyKeysAndReplacements = [\n { oldKey: 'dashjs_vbitrate', newKey: 'dashjs_video_bitrate' },\n { oldKey: 'dashjs_abitrate', newKey: 'dashjs_audio_bitrate' },\n { oldKey: 'dashjs_vsettings', newKey: 'dashjs_video_settings' },\n { oldKey: 'dashjs_asettings', newKey: 'dashjs_audio_settings' }\n];\n\nconst LOCAL_STORAGE_BITRATE_KEY_TEMPLATE = 'dashjs_?_bitrate';\nconst LOCAL_STORAGE_SETTINGS_KEY_TEMPLATE = 'dashjs_?_settings';\n\nconst STORAGE_TYPE_LOCAL = 'localStorage';\nconst STORAGE_TYPE_SESSION = 'sessionStorage';\nconst LAST_BITRATE = 'lastBitrate';\nconst LAST_MEDIA_SETTINGS = 'lastMediaSettings';\n\nfunction DOMStorage(config) {\n\n config = config || {};\n const context = this.context;\n const settings = config.settings;\n\n let instance,\n logger,\n supported;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n translateLegacyKeys();\n }\n\n //type can be local, session\n function isSupported(type) {\n if (supported !== undefined) {\n return supported;\n }\n\n supported = false;\n\n const testKey = '1';\n const testValue = '1';\n let storage;\n\n try {\n if (typeof window !== 'undefined') {\n storage = window[type];\n }\n } catch (error) {\n logger.warn('DOMStorage access denied: ' + error.message);\n return supported;\n }\n\n if (!storage || (type !== STORAGE_TYPE_LOCAL && type !== STORAGE_TYPE_SESSION)) {\n return supported;\n }\n\n /* When Safari (OS X or iOS) is in private browsing mode, it appears as though localStorage is available, but trying to call setItem throws an exception.\n http://stackoverflow.com/questions/14555347/html5-localstorage-error-with-safari-quota-exceeded-err-dom-exception-22-an\n\n Check if the storage can be used\n */\n try {\n storage.setItem(testKey, testValue);\n storage.removeItem(testKey);\n supported = true;\n } catch (error) {\n logger.warn('DOMStorage is supported, but cannot be used: ' + error.message);\n }\n\n return supported;\n }\n\n function translateLegacyKeys() {\n if (isSupported(STORAGE_TYPE_LOCAL)) {\n legacyKeysAndReplacements.forEach(entry => {\n const value = localStorage.getItem(entry.oldKey);\n\n if (value) {\n localStorage.removeItem(entry.oldKey);\n\n try {\n localStorage.setItem(entry.newKey, value);\n } catch (e) {\n logger.error(e.message);\n }\n }\n });\n }\n }\n\n // Return current epoch time, ms, rounded to the nearest 10m to avoid fingerprinting user\n function getTimestamp() {\n const ten_minutes_ms = 60 * 1000 * 10;\n return Math.round(new Date().getTime() / ten_minutes_ms) * ten_minutes_ms;\n }\n\n function canStore(storageType, key) {\n return isSupported(storageType) && settings.get().streaming[key + 'CachingInfo'].enabled;\n }\n\n function checkConfig() {\n if (!settings) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n }\n\n function getSavedMediaSettings(type) {\n checkConfig();\n\n if (!settings.get().streaming.lastMediaSettingsCachingInfo.enabled) {\n return null;\n }\n\n let mediaSettings = null;\n\n //Checks local storage to see if there is valid, non-expired media settings\n if (canStore(STORAGE_TYPE_LOCAL, LAST_MEDIA_SETTINGS)) {\n const key = LOCAL_STORAGE_SETTINGS_KEY_TEMPLATE.replace(/\\?/, type);\n try {\n const obj = JSON.parse(localStorage.getItem(key)) || {};\n const isExpired = (new Date().getTime() - parseInt(obj.timestamp, 10)) >= settings.get().streaming.lastMediaSettingsCachingInfo.ttl || false;\n mediaSettings = obj.settings;\n\n if (isExpired) {\n localStorage.removeItem(key);\n mediaSettings = null;\n }\n } catch (e) {\n return null;\n }\n }\n return mediaSettings;\n }\n\n function getSavedBitrateSettings(type) {\n checkConfig();\n\n if (!settings.get().streaming.lastBitrateCachingInfo.enabled) {\n return NaN;\n }\n\n let savedBitrate = NaN;\n\n //Checks local storage to see if there is valid, non-expired bit rate\n //hinting from the last play session to use as a starting bit rate.\n if (canStore(STORAGE_TYPE_LOCAL, LAST_BITRATE)) {\n const key = LOCAL_STORAGE_BITRATE_KEY_TEMPLATE.replace(/\\?/, type);\n try {\n const obj = JSON.parse(localStorage.getItem(key)) || {};\n const isExpired = (new Date().getTime() - parseInt(obj.timestamp, 10)) >= settings.get().streaming.lastBitrateCachingInfo.ttl || false;\n const bitrate = parseFloat(obj.bitrate);\n\n if (!isNaN(bitrate) && !isExpired) {\n savedBitrate = bitrate;\n logger.debug('Last saved bitrate for ' + type + ' was ' + bitrate);\n } else if (isExpired) {\n localStorage.removeItem(key);\n }\n } catch (e) {\n return null;\n }\n }\n return savedBitrate;\n }\n\n function setSavedMediaSettings(type, value) {\n if (canStore(STORAGE_TYPE_LOCAL, LAST_MEDIA_SETTINGS)) {\n const key = LOCAL_STORAGE_SETTINGS_KEY_TEMPLATE.replace(/\\?/, type);\n try {\n localStorage.setItem(key, JSON.stringify({ settings: value, timestamp: getTimestamp() }));\n } catch (e) {\n logger.error(e.message);\n }\n }\n }\n\n function setSavedBitrateSettings(type, bitrate) {\n if (canStore(STORAGE_TYPE_LOCAL, LAST_BITRATE) && bitrate) {\n const key = LOCAL_STORAGE_BITRATE_KEY_TEMPLATE.replace(/\\?/, type);\n try {\n localStorage.setItem(key, JSON.stringify({ bitrate: bitrate.toFixed(3), timestamp: getTimestamp() }));\n } catch (e) {\n logger.error(e.message);\n }\n }\n }\n\n instance = {\n getSavedBitrateSettings,\n setSavedBitrateSettings,\n getSavedMediaSettings,\n setSavedMediaSettings\n };\n\n setup();\n return instance;\n}\n\nDOMStorage.__dashjs_factory_name = 'DOMStorage';\nconst factory = FactoryMaker.getSingletonFactory(DOMStorage);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Segment from './vo/Segment.js';\nimport DashJSError from '../streaming/vo/DashJSError.js';\nimport FactoryMaker from '../core/FactoryMaker.js';\nimport FragmentRequest from '../streaming/vo/FragmentRequest.js';\nimport URLLoader from '../streaming/net/URLLoader.js';\n\nfunction SegmentBaseLoader() {\n\n const context = this.context;\n\n let instance,\n logger,\n errHandler,\n boxParser,\n dashMetrics,\n mediaPlayerModel,\n urlLoader,\n errors,\n constants,\n dashConstants,\n urlUtils,\n baseURLController;\n\n function setup() {\n }\n\n function initialize() {\n urlLoader = URLLoader(context).create({\n errHandler: errHandler,\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n boxParser: boxParser,\n errors: errors,\n urlUtils: urlUtils,\n constants: constants,\n dashConstants: dashConstants\n });\n }\n\n function setConfig(config) {\n if (config.baseURLController) {\n baseURLController = config.baseURLController;\n }\n\n if (config.dashMetrics) {\n dashMetrics = config.dashMetrics;\n }\n\n if (config.mediaPlayerModel) {\n mediaPlayerModel = config.mediaPlayerModel;\n }\n\n if (config.errHandler) {\n errHandler = config.errHandler;\n }\n\n if (config.boxParser) {\n boxParser = config.boxParser;\n }\n\n if (config.debug) {\n logger = config.debug.getLogger(instance);\n }\n\n if (config.errors) {\n errors = config.errors;\n }\n\n if (config.urlUtils) {\n urlUtils = config.urlUtils;\n }\n\n if (config.constants) {\n constants = config.constants;\n }\n\n if (config.dashConstants) {\n dashConstants = config.dashConstants;\n }\n }\n\n function loadInitialization(representation, mediaType) {\n return new Promise((resolve) => {\n _loadInitializationRecursively(representation, mediaType, resolve);\n });\n }\n\n function _loadInitializationRecursively(representation, mediaType, resolve, loadingInfo) {\n let initRange = null;\n const baseUrl = representation ? baseURLController.resolve(representation.path) : null;\n const info = loadingInfo || {\n init: true,\n url: baseUrl ? baseUrl.url : undefined,\n range: {\n start: 0,\n end: 1500\n },\n searching: false,\n bytesLoaded: 0,\n bytesToLoad: 1500,\n mediaType: mediaType,\n representation\n };\n\n logger.debug('Start searching for initialization.');\n\n const request = getFragmentRequest(info);\n\n const onload = function (response) {\n info.bytesLoaded = info.range.end;\n initRange = boxParser.findInitRange(response);\n\n if (initRange) {\n representation.range = initRange;\n // note that we don't explicitly set rep.initialization as this\n // will be computed when all BaseURLs are resolved later\n resolve(representation);\n } else {\n info.range.end = info.bytesLoaded + info.bytesToLoad;\n return _loadInitializationRecursively(representation, mediaType, resolve, info);\n }\n };\n\n const onerror = function () {\n resolve(representation);\n };\n\n urlLoader.load({ request: request, success: onload, error: onerror });\n\n logger.debug('Perform init search: ' + info.url);\n }\n\n function loadSegments(representation, mediaType, range) {\n return new Promise((resolve) => {\n _loadSegmentsRecursively(representation, mediaType, range, resolve);\n });\n }\n\n function _loadSegmentsRecursively(representation, mediaType, range, resolve, callback, loadingInfo) {\n if (range && (range.start === undefined || range.end === undefined)) {\n const parts = range ? range.toString().split('-') : null;\n range = parts ? { start: parseFloat(parts[0]), end: parseFloat(parts[1]) } : null;\n }\n\n callback = !callback ? onLoaded : callback;\n let isoFile = null;\n let sidx = null;\n const hasRange = !!range;\n const baseUrl = representation ? baseURLController.resolve(representation.path) : null;\n const info = {\n init: false,\n url: baseUrl ? baseUrl.url : undefined,\n range: hasRange ? range : { start: 0, end: 1500 },\n searching: !hasRange,\n bytesLoaded: loadingInfo ? loadingInfo.bytesLoaded : 0,\n bytesToLoad: 1500,\n mediaType: mediaType,\n representation\n };\n\n const request = getFragmentRequest(info);\n\n const onload = function (response) {\n const extraBytes = info.bytesToLoad;\n const loadedLength = response.byteLength;\n\n info.bytesLoaded = info.range.end - info.range.start;\n isoFile = boxParser.parse(response);\n sidx = isoFile.getBox('sidx');\n\n if (!sidx || !sidx.isComplete) {\n if (sidx) {\n info.range.start = sidx.offset || info.range.start;\n info.range.end = info.range.start + (sidx.size || extraBytes);\n } else if (loadedLength < info.bytesLoaded) {\n // if we have reached a search limit or if we have reached the end of the file we have to stop trying to find sidx\n callback(null, representation, resolve);\n return;\n } else {\n const lastBox = isoFile.getLastBox();\n\n if (lastBox && lastBox.size) {\n info.range.start = lastBox.offset + lastBox.size;\n info.range.end = info.range.start + extraBytes;\n } else {\n info.range.end += extraBytes;\n }\n }\n _loadSegmentsRecursively(representation, mediaType, info.range, resolve, null, info);\n } else {\n const ref = sidx.references;\n let loadMultiSidx,\n segments;\n\n if (ref !== null && ref !== undefined && ref.length > 0) {\n loadMultiSidx = (ref[0].reference_type === 1);\n }\n\n if (loadMultiSidx) {\n logger.debug('Initiate multiple SIDX load.');\n info.range.end = info.range.start + sidx.size;\n\n let j, len, ss, se, r;\n let segs = [];\n let count = 0;\n let offset = (sidx.offset || info.range.start) + sidx.size;\n const tmpCallback = function (result) {\n if (result) {\n segs = segs.concat(result);\n count++;\n\n if (count >= len) {\n // http requests can be processed in a wrong order, so, we have to reorder segments with an ascending start Time order\n segs.sort(function (a, b) {\n return a.startTime - b.startTime < 0 ? -1 : 0;\n });\n callback(segs, representation, resolve);\n }\n } else {\n callback(null, representation, resolve);\n }\n };\n\n for (j = 0, len = ref.length; j < len; j++) {\n ss = offset;\n se = offset + ref[j].referenced_size - 1;\n offset = offset + ref[j].referenced_size;\n r = { start: ss, end: se };\n _loadSegmentsRecursively(representation, mediaType, r, resolve, tmpCallback, info);\n }\n\n } else {\n logger.debug('Parsing segments from SIDX. representation ' + mediaType + ' - id: ' + representation.id + ' for range : ' + info.range.start + ' - ' + info.range.end);\n segments = getSegmentsForSidx(sidx, info);\n callback(segments, representation, resolve);\n }\n }\n };\n\n const onerror = function () {\n callback(null, representation, resolve);\n };\n\n urlLoader.load({ request: request, success: onload, error: onerror });\n logger.debug(`Perform SIDX load for type ${mediaType} : ${info.url} with range ${info.range.start} - ${info.range.end}`);\n }\n\n function onLoaded(segments, representation, resolve) {\n resolve({\n segments: segments,\n representation: representation,\n error: segments ? undefined : new DashJSError(errors.SEGMENT_BASE_LOADER_ERROR_CODE, errors.SEGMENT_BASE_LOADER_ERROR_MESSAGE)\n });\n }\n\n function reset() {\n if (urlLoader) {\n urlLoader.abort();\n urlLoader = null;\n }\n }\n\n function getSegmentsForSidx(sidx, info) {\n const refs = sidx.references;\n const len = refs.length;\n const timescale = sidx.timescale;\n let time = sidx.earliest_presentation_time;\n let start = info.range.start + sidx.offset + sidx.first_offset + sidx.size;\n const segments = [];\n let segment,\n end,\n duration,\n size;\n\n for (let i = 0; i < len; i++) {\n duration = refs[i].subsegment_duration;\n size = refs[i].referenced_size;\n\n segment = new Segment();\n // note that we don't explicitly set segment.media as this will be\n // computed when all BaseURLs are resolved later\n segment.duration = duration;\n segment.startTime = time;\n segment.timescale = timescale;\n end = start + size - 1;\n segment.mediaRange = start + '-' + end;\n segments.push(segment);\n time += duration;\n start += size;\n }\n\n return segments;\n }\n\n function getFragmentRequest(info) {\n if (!info.url) {\n return;\n }\n const request = new FragmentRequest();\n request.setInfo(info);\n return request;\n }\n\n instance = {\n setConfig,\n initialize,\n loadInitialization,\n loadSegments,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nSegmentBaseLoader.__dashjs_factory_name = 'SegmentBaseLoader';\nexport default FactoryMaker.getSingletonFactory(SegmentBaseLoader);\n","import FactoryMaker from '../../core/FactoryMaker.js';\n\n/**\n * Creates an instance of an EBMLParser class which implements a large subset\n * of the functionality required to parse Matroska EBML\n *\n * @param {Object} config object with data member which is the buffer to parse\n * @ignore\n */\nfunction EBMLParser(config) {\n\n config = config || {};\n let instance;\n\n let data = new DataView(config.data);\n let pos = 0;\n\n function getPos() {\n return pos;\n }\n\n function setPos(value) {\n pos = value;\n }\n\n /**\n * Consumes an EBML tag from the data stream.\n *\n * @param {Object} tag to parse, A tag is an object with at least a {number} tag and\n * {boolean} required flag.\n * @param {boolean} test whether or not the function should throw if a required\n * tag is not found\n * @return {boolean} whether or not the tag was found\n * @throws will throw an exception if a required tag is not found and test\n * param is false or undefined, or if the stream is malformed.\n * @memberof EBMLParser\n */\n function consumeTag(tag, test) {\n let found = true;\n let bytesConsumed = 0;\n let p1,\n p2;\n\n if (test === undefined) {\n test = false;\n }\n\n if (tag.tag > 0xFFFFFF) {\n if (data.getUint32(pos) !== tag.tag) {\n found = false;\n }\n bytesConsumed = 4;\n } else if (tag.tag > 0xFFFF) {\n // 3 bytes\n p1 = data.getUint16(pos);\n p2 = data.getUint8(pos + 2);\n\n // shift p1 over a byte and add p2\n if (p1 * 256 + p2 !== tag.tag) {\n found = false;\n }\n bytesConsumed = 3;\n } else if (tag.tag > 0xFF) {\n if (data.getUint16(pos) !== tag.tag) {\n found = false;\n }\n bytesConsumed = 2;\n } else {\n if (data.getUint8(pos) !== tag.tag) {\n found = false;\n }\n bytesConsumed = 1;\n }\n\n if (!found && tag.required && !test) {\n throw new Error('required tag not found');\n }\n\n if (found) {\n pos += bytesConsumed;\n }\n\n return found;\n }\n\n /**\n * Consumes an EBML tag from the data stream. If the tag is found then this\n * function will also remove the size field which follows the tag from the\n * data stream.\n *\n * @param {Object} tag to parse, A tag is an object with at least a {number} tag and\n * {boolean} required flag.\n * @param {boolean} test whether or not the function should throw if a required\n * tag is not found\n * @return {boolean} whether or not the tag was found\n * @throws will throw an exception if a required tag is not found and test\n * param is false or undefined, or if the stream is malformedata.\n * @memberof EBMLParser\n */\n function consumeTagAndSize(tag, test) {\n let found = consumeTag(tag, test);\n\n if (found) {\n getMatroskaCodedNum();\n }\n\n return found;\n }\n\n /**\n * Consumes an EBML tag from the data stream. If the tag is found then this\n * function will also remove the size field which follows the tag from the\n * data stream. It will use the value of the size field to parse a binary\n * field, using a parser defined in the tag itself\n *\n * @param {Object} tag to parse, A tag is an object with at least a {number} tag,\n * {boolean} required flag, and a parse function which takes a size parameter\n * @return {boolean} whether or not the tag was found\n * @throws will throw an exception if a required tag is not found,\n * or if the stream is malformed\n * @memberof EBMLParser\n */\n function parseTag(tag) {\n let size;\n\n consumeTag(tag);\n size = getMatroskaCodedNum();\n return instance[tag.parse](size);\n }\n\n /**\n * Consumes an EBML tag from the data stream. If the tag is found then this\n * function will also remove the size field which follows the tag from the\n * data stream. It will use the value of the size field to skip over the\n * entire section of EBML encapsulated by the tag.\n *\n * @param {Object} tag to parse, A tag is an object with at least a {number} tag, and\n * {boolean} required flag\n * @param {boolean} test a flag to indicate if an exception should be thrown\n * if a required tag is not found\n * @return {boolean} whether or not the tag was found\n * @throws will throw an exception if a required tag is not found and test is\n * false or undefined or if the stream is malformed\n * @memberof EBMLParser\n */\n function skipOverElement(tag, test) {\n let found = consumeTag(tag, test);\n let headerSize;\n\n if (found) {\n headerSize = getMatroskaCodedNum();\n pos += headerSize;\n }\n\n return found;\n }\n\n /**\n * Returns and consumes a number encoded according to the Matroska EBML\n * specification from the bitstream.\n *\n * @param {boolean} retainMSB whether or not to retain the Most Significant Bit (the\n * first 1). this is usually true when reading Tag IDs.\n * @return {number} the decoded number\n * @throws will throw an exception if the bit stream is malformed or there is\n * not enough data\n * @memberof EBMLParser\n */\n function getMatroskaCodedNum(retainMSB) {\n let bytesUsed = 1;\n let mask = 0x80;\n let maxBytes = 8;\n let extraBytes = -1;\n let num = 0;\n let ch = data.getUint8(pos);\n let i = 0;\n\n for (i = 0; i < maxBytes; i += 1) {\n if ((ch & mask) === mask) {\n num = (retainMSB === undefined) ? ch & ~mask : ch;\n extraBytes = i;\n break;\n }\n mask >>= 1;\n }\n\n for (i = 0; i < extraBytes; i += 1, bytesUsed += 1) {\n num = (num << 8) | (0xff & data.getUint8(pos + bytesUsed));\n }\n\n pos += bytesUsed;\n\n return num;\n }\n\n /**\n * Returns and consumes a float from the bitstream.\n *\n * @param {number} size 4 or 8 byte floats are supported\n * @return {number} the decoded number\n * @throws will throw an exception if the bit stream is malformed or there is\n * not enough data\n * @memberof EBMLParser\n */\n function getMatroskaFloat(size) {\n let outFloat;\n\n switch (size) {\n case 4:\n outFloat = data.getFloat32(pos);\n pos += 4;\n break;\n case 8:\n outFloat = data.getFloat64(pos);\n pos += 8;\n break;\n }\n return outFloat;\n }\n\n /**\n * Consumes and returns an unsigned int from the bitstream.\n *\n * @param {number} size 1 to 8 bytes\n * @return {number} the decoded number\n * @throws will throw an exception if the bit stream is malformed, there is\n * not enough data, or if the value exceeds the maximum safe integer value\n * @memberof EBMLParser\n */\n function getMatroskaUint(size) {\n if (size > 4) {\n return getMatroskaUintLarge(size);\n }\n\n let val = 0;\n\n for (let i = 0; i < size; i += 1) {\n val <<= 8;\n val |= data.getUint8(pos + i) & 0xff;\n }\n\n pos += size;\n return val >>> 0;\n }\n\n /**\n * Consumes and returns an unsigned int from the bitstream.\n *\n * @param {number} size 1 to 8 bytes\n * @return {number} the decoded number\n * @throws will throw an exception if the bit stream is malformed, there is\n * not enough data, or if the value exceeds the maximum safe integer value\n */\n function getMatroskaUintLarge(size) {\n const limit = Math.floor(Number.MAX_SAFE_INTEGER / 256);\n let val = 0;\n\n for (let i = 0; i < size; i += 1) {\n if (val > limit) {\n throw new Error('Value exceeds safe integer limit');\n }\n val *= 256;\n const n = data.getUint8(pos + i);\n if (val > Number.MAX_SAFE_INTEGER - n) {\n throw new Error('Value exceeds safe integer limit');\n }\n val += n;\n }\n\n pos += size;\n return val;\n }\n\n /**\n * Tests whether there is more data in the bitstream for parsing\n *\n * @return {boolean} whether there is more data to parse\n * @memberof EBMLParser\n */\n function moreData() {\n return pos < data.byteLength;\n }\n\n instance = {\n getPos: getPos,\n setPos: setPos,\n consumeTag: consumeTag,\n consumeTagAndSize: consumeTagAndSize,\n parseTag: parseTag,\n skipOverElement: skipOverElement,\n getMatroskaCodedNum: getMatroskaCodedNum,\n getMatroskaFloat: getMatroskaFloat,\n getMatroskaUint: getMatroskaUint,\n moreData: moreData\n };\n\n return instance;\n}\n\nEBMLParser.__dashjs_factory_name = 'EBMLParser';\nexport default FactoryMaker.getClassFactory(EBMLParser);\n","import EBMLParser from '../streaming/utils/EBMLParser.js';\nimport Constants from '../streaming/constants/Constants.js';\nimport FactoryMaker from '../core/FactoryMaker.js';\nimport Segment from './vo/Segment.js';\nimport FragmentRequest from '../streaming/vo/FragmentRequest.js';\nimport URLLoader from '../streaming/net/URLLoader.js';\nimport DashJSError from '../streaming/vo/DashJSError.js';\n\nfunction WebmSegmentBaseLoader() {\n\n const context = this.context;\n\n let instance,\n logger,\n WebM,\n errHandler,\n dashMetrics,\n mediaPlayerModel,\n urlLoader,\n errors,\n baseURLController;\n\n function setup() {\n WebM = {\n EBML: {\n tag: 0x1A45DFA3,\n required: true\n },\n Segment: {\n tag: 0x18538067,\n required: true,\n SeekHead: {\n tag: 0x114D9B74,\n required: true\n },\n Info: {\n tag: 0x1549A966,\n required: true,\n TimecodeScale: {\n tag: 0x2AD7B1,\n required: true,\n parse: 'getMatroskaUint'\n },\n Duration: {\n tag: 0x4489,\n required: true,\n parse: 'getMatroskaFloat'\n }\n },\n Tracks: {\n tag: 0x1654AE6B,\n required: true\n },\n Cues: {\n tag: 0x1C53BB6B,\n required: true,\n CuePoint: {\n tag: 0xBB,\n required: true,\n CueTime: {\n tag: 0xB3,\n required: true,\n parse: 'getMatroskaUint'\n },\n CueTrackPositions: {\n tag: 0xB7,\n required: true,\n CueTrack: {\n tag: 0xF7,\n required: true,\n parse: 'getMatroskaUint'\n },\n CueClusterPosition: {\n tag: 0xF1,\n required: true,\n parse: 'getMatroskaUint'\n }\n }\n }\n }\n },\n Void: {\n tag: 0xEC,\n required: true\n }\n };\n }\n\n function initialize() {\n urlLoader = URLLoader(context).create({\n errHandler: errHandler,\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n errors: errors\n });\n }\n\n function setConfig(config) {\n if (!config.baseURLController || !config.dashMetrics || !config.mediaPlayerModel || !config.errHandler) {\n throw new Error(Constants.MISSING_CONFIG_ERROR);\n }\n baseURLController = config.baseURLController;\n dashMetrics = config.dashMetrics;\n mediaPlayerModel = config.mediaPlayerModel;\n errHandler = config.errHandler;\n errors = config.errors;\n logger = config.debug.getLogger(instance);\n }\n\n function parseCues(ab) {\n let cues = [];\n let ebmlParser = EBMLParser(context).create({\n data: ab\n });\n let cue,\n cueTrack;\n\n ebmlParser.consumeTagAndSize(WebM.Segment.Cues);\n\n while (ebmlParser.moreData() &&\n ebmlParser.consumeTagAndSize(WebM.Segment.Cues.CuePoint, true)) {\n cue = {};\n\n cue.CueTime = ebmlParser.parseTag(WebM.Segment.Cues.CuePoint.CueTime);\n\n cue.CueTracks = [];\n while (ebmlParser.moreData() &&\n ebmlParser.consumeTag(WebM.Segment.Cues.CuePoint.CueTrackPositions, true)) {\n const cueTrackPositionSize = ebmlParser.getMatroskaCodedNum();\n const startPos = ebmlParser.getPos();\n cueTrack = {};\n\n cueTrack.Track = ebmlParser.parseTag(WebM.Segment.Cues.CuePoint.CueTrackPositions.CueTrack);\n if (cueTrack.Track === 0) {\n throw new Error('Cue track cannot be 0');\n }\n\n cueTrack.ClusterPosition =\n ebmlParser.parseTag(WebM.Segment.Cues.CuePoint.CueTrackPositions.CueClusterPosition);\n\n cue.CueTracks.push(cueTrack);\n\n // we're not interested any other elements - skip remaining bytes\n ebmlParser.setPos(startPos + cueTrackPositionSize);\n }\n\n if (cue.CueTracks.length === 0) {\n throw new Error('Mandatory cuetrack not found');\n }\n cues.push(cue);\n }\n\n if (cues.length === 0) {\n throw new Error('mandatory cuepoint not found');\n }\n return cues;\n }\n\n function parseSegments(data, segmentStart, segmentEnd, segmentDuration) {\n let duration,\n parsed,\n segments,\n segment,\n i,\n len,\n start,\n end;\n\n parsed = parseCues(data);\n segments = [];\n\n // we are assuming one cue track per cue point\n // both duration and media range require the i + 1 segment\n // the final segment has to use global segment parameters\n for (i = 0, len = parsed.length; i < len; i += 1) {\n segment = new Segment();\n duration = 0;\n\n if (i < parsed.length - 1) {\n duration = parsed[i + 1].CueTime - parsed[i].CueTime;\n } else {\n duration = segmentDuration - parsed[i].CueTime;\n }\n\n // note that we don't explicitly set segment.media as this will be\n // computed when all BaseURLs are resolved later\n segment.duration = duration;\n segment.startTime = parsed[i].CueTime;\n segment.timescale = 1000; // hardcoded for ms\n start = parsed[i].CueTracks[0].ClusterPosition + segmentStart;\n\n if (i < parsed.length - 1) {\n end = parsed[i + 1].CueTracks[0].ClusterPosition + segmentStart - 1;\n } else {\n end = segmentEnd - 1;\n }\n\n segment.mediaRange = start + '-' + end;\n segments.push(segment);\n }\n\n logger.debug('Parsed cues: ' + segments.length + ' cues.');\n\n return segments;\n }\n\n function parseEbmlHeader(data, media, theRange, callback) {\n if (!data || data.byteLength === 0) {\n callback(null);\n return;\n }\n let ebmlParser = EBMLParser(context).create({\n data: data\n });\n let duration,\n segments,\n segmentEnd,\n segmentStart;\n let parts = theRange ? theRange.split('-') : null;\n let request = null;\n let info = {\n url: media,\n range: {\n start: parts ? parseFloat(parts[0]) : null,\n end: parts ? parseFloat(parts[1]) : null\n },\n request: request\n };\n\n logger.debug('Parse EBML header: ' + info.url);\n\n // skip over the header itself\n ebmlParser.skipOverElement(WebM.EBML);\n ebmlParser.consumeTag(WebM.Segment);\n\n // segments start here\n segmentEnd = ebmlParser.getMatroskaCodedNum();\n segmentEnd += ebmlParser.getPos();\n segmentStart = ebmlParser.getPos();\n\n // skip over any top level elements to get to the segment info\n while (ebmlParser.moreData() &&\n !ebmlParser.consumeTagAndSize(WebM.Segment.Info, true)) {\n if (!(ebmlParser.skipOverElement(WebM.Segment.SeekHead, true) ||\n ebmlParser.skipOverElement(WebM.Segment.Tracks, true) ||\n ebmlParser.skipOverElement(WebM.Segment.Cues, true) ||\n ebmlParser.skipOverElement(WebM.Void, true))) {\n throw new Error('no valid top level element found');\n }\n }\n\n // we only need one thing in segment info, duration\n while (duration === undefined) {\n let infoTag = ebmlParser.getMatroskaCodedNum(true);\n let infoElementSize = ebmlParser.getMatroskaCodedNum();\n\n switch (infoTag) {\n case WebM.Segment.Info.Duration.tag:\n duration = ebmlParser[WebM.Segment.Info.Duration.parse](infoElementSize);\n break;\n default:\n ebmlParser.setPos(ebmlParser.getPos() + infoElementSize);\n break;\n }\n }\n\n // once we have what we need from segment info, we jump right to the\n // cues\n\n request = _getFragmentRequest(info);\n\n const onload = function (response) {\n segments = parseSegments(response, segmentStart, segmentEnd, duration);\n callback(segments);\n };\n\n const onloadend = function () {\n logger.error('Download Error: Cues ' + info.url);\n callback(null);\n };\n\n urlLoader.load({\n request: request,\n success: onload,\n error: onloadend\n });\n\n logger.debug('Perform cues load: ' + info.url + ' bytes=' + info.range.start + '-' + info.range.end);\n }\n\n function loadInitialization(representation, mediaType) {\n return new Promise((resolve) => {\n let request = null;\n let baseUrl = representation ? baseURLController.resolve(representation.path) : null;\n let initRange = representation ? representation.range.split('-') : null;\n let info = {\n range: {\n start: initRange ? parseFloat(initRange[0]) : null,\n end: initRange ? parseFloat(initRange[1]) : null\n },\n request: request,\n url: baseUrl ? baseUrl.url : undefined,\n init: true,\n mediaType: mediaType\n };\n\n logger.info('Start loading initialization.');\n\n request = _getFragmentRequest(info);\n\n const onload = function () {\n // note that we don't explicitly set rep.initialization as this\n // will be computed when all BaseURLs are resolved later\n resolve(representation);\n };\n\n const onloadend = function () {\n resolve(representation);\n };\n\n urlLoader.load({\n request: request,\n success: onload,\n error: onloadend\n });\n\n logger.debug('Perform init load: ' + info.url);\n });\n }\n\n function loadSegments(representation, mediaType, theRange) {\n return new Promise((resolve) => {\n let request = null;\n let baseUrl = representation ? baseURLController.resolve(representation.path) : null;\n let media = baseUrl ? baseUrl.url : undefined;\n let bytesToLoad = 8192;\n let info = {\n bytesLoaded: 0,\n bytesToLoad: bytesToLoad,\n range: {\n start: 0,\n end: bytesToLoad\n },\n request: request,\n url: media,\n init: false,\n mediaType: mediaType,\n representation\n };\n\n request = _getFragmentRequest(info);\n\n // first load the header, but preserve the manifest range so we can\n // load the cues after parsing the header\n // NOTE: we expect segment info to appear in the first 8192 bytes\n logger.debug('Parsing ebml header');\n\n const onload = function (response) {\n parseEbmlHeader(response, media, theRange, function (segments) {\n resolve({\n segments: segments,\n representation: representation,\n error: segments ? undefined : new DashJSError(errors.SEGMENT_BASE_LOADER_ERROR_CODE, errors.SEGMENT_BASE_LOADER_ERROR_MESSAGE)\n });\n });\n };\n\n const onloadend = function () {\n resolve({\n representation: representation,\n error: new DashJSError(errors.SEGMENT_BASE_LOADER_ERROR_CODE, errors.SEGMENT_BASE_LOADER_ERROR_MESSAGE)\n });\n };\n\n urlLoader.load({\n request: request,\n success: onload,\n error: onloadend\n });\n });\n\n }\n\n\n function _getFragmentRequest(info) {\n const request = new FragmentRequest();\n request.setInfo(info);\n return request;\n }\n\n function reset() {\n if (urlLoader) {\n urlLoader.abort();\n urlLoader = null;\n }\n }\n\n instance = {\n setConfig,\n initialize,\n loadInitialization,\n loadSegments,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nWebmSegmentBaseLoader.__dashjs_factory_name = 'WebmSegmentBaseLoader';\nexport default FactoryMaker.getSingletonFactory(WebmSegmentBaseLoader);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\nimport SegmentBaseLoader from '../SegmentBaseLoader.js';\nimport WebmSegmentBaseLoader from '../WebmSegmentBaseLoader.js';\n\nfunction SegmentBaseController(config) {\n config = config || {};\n\n const context = this.context;\n const eventBus = config.eventBus;\n const events = config.events;\n const dashMetrics = config.dashMetrics;\n const mediaPlayerModel = config.mediaPlayerModel;\n const errHandler = config.errHandler;\n const baseURLController = config.baseURLController;\n const debug = config.debug;\n const boxParser = config.boxParser;\n const errors = config.errors;\n\n let instance,\n segmentBaseLoader,\n webmSegmentBaseLoader;\n\n function setup() {\n segmentBaseLoader = SegmentBaseLoader(context).getInstance();\n webmSegmentBaseLoader = WebmSegmentBaseLoader(context).getInstance();\n\n segmentBaseLoader.setConfig({\n baseURLController: baseURLController,\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n errHandler: errHandler,\n eventBus: eventBus,\n events: events,\n errors: errors,\n debug: debug,\n boxParser: boxParser\n });\n\n webmSegmentBaseLoader.setConfig({\n baseURLController: baseURLController,\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n errHandler: errHandler,\n eventBus: eventBus,\n events: events,\n errors: errors,\n debug: debug\n });\n }\n\n function isWebM(mimeType) {\n const type = mimeType ? mimeType.split('/')[1] : '';\n return 'webm' === type.toLowerCase();\n }\n\n function initialize() {\n segmentBaseLoader.initialize();\n webmSegmentBaseLoader.initialize();\n }\n\n function getSegmentBaseInitSegment(data) {\n if (isWebM(data.representation.mimeType)) {\n return webmSegmentBaseLoader.loadInitialization(data.representation, data.mediaType);\n } else {\n return segmentBaseLoader.loadInitialization(data.representation, data.mediaType);\n }\n }\n\n function getSegmentList(e) {\n if (isWebM(e.mimeType)) {\n return webmSegmentBaseLoader.loadSegments(e.representation, e.mediaType, e.representation ? e.representation.indexRange : null);\n } else {\n return segmentBaseLoader.loadSegments(e.representation, e.mediaType, e.representation ? e.representation.indexRange : null);\n }\n }\n\n function reset() {\n segmentBaseLoader.reset();\n webmSegmentBaseLoader.reset();\n }\n\n\n instance = {\n initialize,\n getSegmentBaseInitSegment,\n getSegmentList,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nSegmentBaseController.__dashjs_factory_name = 'SegmentBaseController';\nconst factory = FactoryMaker.getSingletonFactory(SegmentBaseController);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass MediaInfo {\n constructor() {\n this.accessibility = null;\n this.adaptationSetSwitchingCompatibleIds = [];\n this.audioChannelConfiguration = null;\n this.bitrateList = null;\n this.codec = null;\n this.contentProtection = null;\n this.essentialProperties = [];\n this.id = null;\n this.index = null;\n this.isEmbedded = null;\n this.isFragmented = null;\n this.isText = false;\n this.labels = null;\n this.lang = null;\n this.mimeType = null;\n this.normalizedKeyIds = new Set();\n this.representationCount = 0;\n this.roles = null;\n this.segmentAlignment = false;\n this.selectionPriority = 1;\n this.streamInfo = null;\n this.subSegmentAlignment = false;\n this.supplementalProperties = [];\n this.type = null;\n this.viewpoint = null;\n }\n\n}\n\nexport default MediaInfo;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass StreamInfo {\n constructor() {\n this.id = null;\n this.index = null;\n this.start = NaN;\n this.duration = NaN;\n this.manifestInfo = null;\n this.isLast = true;\n this.isEncrypted = false;\n }\n}\n\nexport default StreamInfo;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass ManifestInfo {\n constructor() {\n this.dvrWindowSize = NaN;\n this.loadedTime = null;\n this.availableFrom = null;\n this.minBufferTime = NaN;\n this.duration = NaN;\n this.isDynamic = false;\n this.maxFragmentDuration = null;\n this.serviceDescriptions = [];\n this.protocol = null;\n }\n}\n\nexport default ManifestInfo;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass SimpleXPath {\n constructor(selector) {\n // establish validation of the path, to catch unsupported cases\n this.valid = selector[0] == '/'; // first check, we only support absolute addressing\n\n // establish parsed path, example:\n // /MPD/Period[@id=\"foobar\"]/AdaptationSet[@id=\"2\"]/SegmentTemplate/SegmentTimeline\n this.path = selector.split('/')\n .filter((component) => component.length !== 0) // remove excess empty components\n .map((component) => {\n let parsed = {\n name: component\n };\n\n let qualifierPoint = component.indexOf('[');\n if (qualifierPoint != -1) {\n parsed.name = component.substring(0, qualifierPoint);\n\n let qualifier = component.substring(qualifierPoint + 1, component.length - 1);\n\n // quick sanity check are there additional qualifiers making this invalid\n this.valid = this.valid && qualifier.indexOf('[') == -1;\n\n let equalityPoint = qualifier.indexOf('=');\n if (equalityPoint != -1) {\n parsed.attribute = {\n name: qualifier.substring(1, equalityPoint), // skip the @\n value: qualifier.substring(equalityPoint + 1)\n };\n\n // check for single and double quoted attribute values\n if (['\\'', '\"'].indexOf(parsed.attribute.value[0]) != -1) {\n parsed.attribute.value = parsed.attribute.value.substring(1, parsed.attribute.value.length - 1);\n }\n } else {\n // positional access in xpath is 1-based index\n // internal processes will assume 0-based so we normalize that here\n parsed.position = parseInt(qualifier, 10) - 1;\n }\n }\n\n return parsed;\n });\n }\n\n isValid() {\n return this.valid;\n }\n\n findsElement() {\n return !this.findsAttribute();\n }\n\n findsAttribute() {\n return this.path[this.path.length - 1].name.startsWith('@');\n }\n\n findsTextReplace() {\n return this.path[this.path.length - 1].name === 'text()';\n }\n\n getMpdTarget(root, isSiblingOperation) {\n let parent = null;\n let leaf = root;\n // assume root is MPD and we start at next level match\n let level = 1;\n let name = 'MPD';\n\n while ( level < this.path.length && leaf !== null) {\n // set parent to current\n parent = leaf;\n\n // select next leaf based on component\n let component = this.path[level];\n name = component.name;\n\n // stop one early if this is the last element and an attribute\n if (level !== this.path.length - 1 || (!name.startsWith('@') && name !== 'text()')) {\n let children = parent[name] || [];\n if (children.length === 0 && parent[name]) {\n children.push(parent[name]);\n }\n\n if (component.position) {\n leaf = children[component.position] || null;\n } else if (component.attribute) {\n let attr = component.attribute;\n leaf = children.filter((elm) => elm[attr.name] == attr.value)[0] || null;\n } else {\n // default case, select element itself or first element if as array\n leaf = Array.isArray(children) ? children[0] : children;\n }\n }\n\n level++;\n }\n\n if (leaf === null) {\n // given path not found in root\n return null;\n }\n\n // attributes the target is the leaf node, the name is the attribute\n if (name.startsWith('@')) {\n return {\n name: name.substring(1),\n leaf: leaf,\n target: leaf\n };\n }\n\n // for replacing a text node the target is the leaf node, the name is __text\n else if (name === 'text()') {\n return {\n name: '__text',\n leaf: leaf,\n target: leaf\n };\n }\n\n // otherwise we target the parent for sibling operations and leaf for child operations\n return {\n name: name,\n leaf: leaf,\n target: isSiblingOperation ? parent : leaf\n };\n }\n}\n\nexport default SimpleXPath;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass PatchOperation {\n constructor(action, xpath, value) {\n this.action = action;\n this.xpath = xpath;\n this.value = value;\n this.position = null;\n }\n\n getMpdTarget(root) {\n let isSiblingOperation = this.action === 'remove' || this.action === 'replace' || this.position === 'before' || this.position === 'after';\n return this.xpath.getMpdTarget(root, isSiblingOperation);\n }\n}\n\nexport default PatchOperation;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport DashConstants from '../constants/DashConstants.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\nimport SimpleXPath from '../vo/SimpleXPath.js';\nimport PatchOperation from '../vo/PatchOperation.js';\n\nfunction PatchManifestModel() {\n let instance,\n logger;\n\n const context = this.context;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function getIsPatch(patch) {\n return patch && patch.hasOwnProperty(DashConstants.ORIGINAL_MPD_ID) || false;\n }\n\n function getPublishTime(patch) {\n return patch && patch.hasOwnProperty(DashConstants.PUBLISH_TIME) ? new Date(patch[DashConstants.PUBLISH_TIME]) : null;\n }\n\n function getOriginalPublishTime(patch) {\n return patch && patch.hasOwnProperty(DashConstants.ORIGINAL_PUBLISH_TIME) ? new Date(patch[DashConstants.ORIGINAL_PUBLISH_TIME]) : null;\n }\n\n function getMpdId(patch) {\n return (patch && patch[DashConstants.ORIGINAL_MPD_ID]) || null;\n }\n\n function getPatchOperations(patch) {\n if (!patch) {\n return [];\n }\n\n // Go through the patch operations in order and parse their actions out for usage\n return (patch.__children || []).map((node) => {\n const action = node.tagName;\n\n // we only look add add/remove/replace actions\n if (action !== 'add' && action !== 'remove' && action !== 'replace') {\n logger.warn(`Ignoring node of invalid action: ${action}`);\n return null;\n }\n\n let selector = node.sel;\n\n // add action can have special targeting via the 'type' attribute\n if (action === 'add' && node.type) {\n if (!node.type.startsWith('@')) {\n logger.warn(`Ignoring add action for prefixed namespace declaration: ${node.type}=${node.__text}`);\n return null;\n }\n\n // for our purposes adding/replacing attribute are equivalent and we can normalize\n // our processing logic by appending the attribute to the selector path\n selector = `${selector}/${node.type}`;\n }\n\n let xpath = new SimpleXPath(selector);\n if (!xpath.isValid()) {\n logger.warn(`Ignoring action with invalid selector: ${action} - ${selector}`);\n return null;\n }\n\n let value = null;\n if (xpath.findsAttribute() || xpath.findsTextReplace()) {\n value = node.__text || '';\n } else if (action !== 'remove') {\n value = node.__children.reduce((groups, child) => {\n let key = child.tagName;\n // we also ignore\n if (key !== '#text') {\n groups[key] = groups[key] || [];\n groups[key].push(child);\n }\n return groups;\n }, {});\n }\n\n let operation = new PatchOperation(action, xpath, value);\n\n if (action === 'add') {\n operation.position = node.pos;\n }\n\n return operation;\n }).filter((operation) => !!operation);\n }\n\n instance = {\n getIsPatch,\n getMpdId,\n getOriginalPublishTime,\n getPatchOperations,\n getPublishTime\n };\n\n setup();\n\n return instance;\n}\n\nPatchManifestModel.__dashjs_factory_name = 'PatchManifestModel';\nexport default FactoryMaker.getSingletonFactory(PatchManifestModel);\n","// http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n/* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo \n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n\n/**\n * Converts a UTF-8 array to a string.\n *\n * @param array - The UTF-8 array to convert\n *\n * @returns The string\n *\n * @group Utils\n *\n * @beta\n */\nexport function utf8ArrayToStr(\n\tarray: Uint8Array,\n\texitOnNull: boolean = false,\n): string {\n\tif (typeof TextDecoder !== 'undefined') {\n\t\tconst decoder = new TextDecoder('utf-8');\n\t\tconst decoded = decoder.decode(array);\n\n\t\tif (exitOnNull) {\n\t\t\t// grab up to the first null\n\t\t\tconst idx = decoded.indexOf('\\0');\n\t\t\treturn idx !== -1 ? decoded.substring(0, idx) : decoded;\n\t\t}\n\n\t\t// remove any null characters\n\t\treturn decoded.replace(/\\0/g, '');\n\t}\n\n\tconst len = array.length;\n\tlet c;\n\tlet char2;\n\tlet char3;\n\tlet out = '';\n\tlet i = 0;\n\twhile (i < len) {\n\t\tc = array[i++];\n\t\tif (c === 0x00 && exitOnNull) {\n\t\t\treturn out;\n\t\t}\n\t\telse if (c === 0x00 || c === 0x03) {\n\t\t\t// If the character is 3 (END_OF_TEXT) or 0 (NULL) then skip it\n\t\t\tcontinue;\n\t\t}\n\t\tswitch (c >> 4) {\n\t\t\tcase 0:\n\t\t\tcase 1:\n\t\t\tcase 2:\n\t\t\tcase 3:\n\t\t\tcase 4:\n\t\t\tcase 5:\n\t\t\tcase 6:\n\t\t\tcase 7:\n\t\t\t\t// 0xxxxxxx\n\t\t\t\tout += String.fromCharCode(c);\n\t\t\t\tbreak;\n\t\t\tcase 12:\n\t\t\tcase 13:\n\t\t\t\t// 110x xxxx 10xx xxxx\n\t\t\t\tchar2 = array[i++];\n\t\t\t\tout += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));\n\t\t\t\tbreak;\n\t\t\tcase 14:\n\t\t\t\t// 1110 xxxx 10xx xxxx 10xx xxxx\n\t\t\t\tchar2 = array[i++];\n\t\t\t\tchar3 = array[i++];\n\t\t\t\tout += String.fromCharCode(\n\t\t\t\t\t((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\t}\n\treturn out;\n}\n","export function toUint8(\n\tdata: BufferSource,\n\toffset: number = 0,\n\tlength: number = Infinity,\n): Uint8Array {\n\treturn view(data, offset, length, Uint8Array);\n}\n\nfunction view(\n\tdata: BufferSource,\n\toffset: number,\n\tlength: number,\n\tType: { new(buffer: ArrayBuffer, byteOffset: number, length: number): T },\n): T {\n\tconst buffer = unsafeGetArrayBuffer(data);\n\tlet bytesPerElement: any = 1;\n\tif ('BYTES_PER_ELEMENT' in Type) {\n\t\tbytesPerElement = Type.BYTES_PER_ELEMENT;\n\t}\n\t// Absolute end of the |data| view within |buffer|.\n\tconst dataOffset = isArrayBufferView(data) ? data.byteOffset : 0;\n\tconst dataEnd = ((dataOffset) + data.byteLength) / bytesPerElement;\n\t// Absolute start of the result within |buffer|.\n\tconst rawStart = ((dataOffset) + offset) / bytesPerElement;\n\tconst start = Math.floor(Math.max(0, Math.min(rawStart, dataEnd)));\n\t// Absolute end of the result within |buffer|.\n\tconst end = Math.floor(Math.min(start + Math.max(length, 0), dataEnd));\n\treturn new Type(buffer, start, end - start);\n}\n\nfunction unsafeGetArrayBuffer(view: BufferSource) {\n\tif (view instanceof ArrayBuffer) {\n\t\treturn view;\n\t}\n\telse {\n\t\treturn view.buffer;\n\t}\n}\n\nfunction isArrayBufferView(obj: any): obj is ArrayBufferView {\n\treturn obj && obj.buffer instanceof ArrayBuffer && obj.byteLength !== undefined && obj.byteOffset !== undefined;\n}\n","import type { Id3Frame } from '../Id3Frame.js';\nimport type { RawId3Frame } from './RawFrame.js';\nimport { decodeId3PrivFrame } from './decodeId3PrivFrame.js';\nimport { decodeId3TextFrame } from './decodeId3TextFrame.js';\nimport { decodeId3UrlFrame } from './decodeId3UrlFrame.js';\nimport { decodeId3ImageFrame } from './decodeId3ImageFrame.js';\n\n/**\n * Decode an ID3 frame.\n *\n * @param frame - the ID3 frame\n *\n * @returns The decoded ID3 frame\n *\n * @internal\n *\n * @group ID3\n */\nexport function decodeId3Frame(frame: RawId3Frame): Id3Frame | undefined {\n\tif (frame.type === 'PRIV') {\n\t\treturn decodeId3PrivFrame(frame);\n\t}\n\telse if (frame.type[0] === 'W') {\n\t\treturn decodeId3UrlFrame(frame);\n\t}\n\n\telse if (frame.type === 'APIC') {\n\t\treturn decodeId3ImageFrame(frame);\n\t}\n\n\treturn decodeId3TextFrame(frame);\n}\n","import { utf8ArrayToStr } from '../../utils/utf8ArrayToStr.js';\nimport type { DecodedId3Frame } from '../DecodedId3Frame.js';\nimport type { RawId3Frame } from './RawFrame.js';\n\n/**\n * Decode an ID3 PRIV frame.\n *\n * @param frame - the ID3 PRIV frame\n *\n * @returns The decoded ID3 PRIV frame\n *\n * @internal\n *\n * @group ID3\n */\nexport function decodeId3PrivFrame(\n\tframe: RawId3Frame,\n): DecodedId3Frame | undefined {\n\t/*\n\tFormat: \\0\n\t*/\n\tif (frame.size < 2) {\n\t\treturn undefined;\n\t}\n\n\tconst owner = utf8ArrayToStr(frame.data, true);\n\tconst privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n\n\treturn { key: frame.type, info: owner, data: privateData.buffer };\n}\n","import { utf8ArrayToStr } from '../../utils/utf8ArrayToStr.js';\nimport type { DecodedId3Frame } from '../DecodedId3Frame.js';\nimport type { RawId3Frame } from './RawFrame.js';\n\n/**\n * Decode a URL frame\n *\n * @param frame - the ID3 URL frame\n *\n * @returns The decoded ID3 URL frame\n *\n * @internal\n *\n * @group ID3\n */\nexport function decodeId3UrlFrame(frame: RawId3Frame): DecodedId3Frame | undefined {\n\tif (frame.type === 'WXXX') {\n\t\t/*\n\t\tFormat:\n\t\t[0] = {Text Encoding}\n\t\t[1-?] = {Description}\\0{URL}\n\t\t*/\n\t\tif (frame.size < 2) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet index = 1;\n\t\tconst description: string = utf8ArrayToStr(\n\t\t\tframe.data.subarray(index),\n\t\t\ttrue,\n\t\t);\n\n\t\tindex += description.length + 1;\n\t\tconst value: string = utf8ArrayToStr(frame.data.subarray(index));\n\n\t\treturn { key: frame.type, info: description, data: value };\n\t}\n\t/*\n\tFormat:\n\t[0-?] = {URL}\n\t*/\n\tconst url: string = utf8ArrayToStr(frame.data);\n\treturn { key: frame.type, info: '', data: url };\n}\n","import type { DecodedId3Frame } from '../DecodedId3Frame.js';\nimport type { RawId3Frame } from './RawFrame.js';\nimport { toUint8 } from './utf8.js';\nimport { toArrayBuffer } from './toArrayBuffer.js';\nimport { utf8ArrayToStr } from '../../utils.js'; \n\ntype MetadataFrame = {\n\tkey: string;\n\tdescription: string;\n\tdata: string | ArrayBuffer;\n\tmimeType: string | null;\n\tpictureType: number | null;\n}\n\nexport function decodeId3ImageFrame(\n\tframe: RawId3Frame,\n): DecodedId3Frame | undefined {\n\tconst metadataFrame: MetadataFrame = {\n\t\tkey: frame.type,\n\t\tdescription: '',\n\t\tdata: '',\n\t\tmimeType: null,\n\t\tpictureType: null,\n\t};\n\n\tconst utf8Encoding = 0x03;\n\n\tif (frame.size < 2) {\n\t\treturn undefined;\n\t}\n\tif (frame.data[0] !== utf8Encoding) {\n\t\tconsole.log('Ignore frame with unrecognized character ' + 'encoding');\n\t\treturn undefined;\n\t}\n\n\tconst mimeTypeEndIndex = frame.data.subarray(1).indexOf(0);\n\tif (mimeTypeEndIndex === -1) {\n\t\treturn undefined;\n\t}\n\tconst mimeType = utf8ArrayToStr(toUint8(frame.data, 1, mimeTypeEndIndex));\n\tconst pictureType = frame.data[2 + mimeTypeEndIndex];\n\tconst descriptionEndIndex = frame.data\n\t\t.subarray(3 + mimeTypeEndIndex)\n\t\t.indexOf(0);\n\tif (descriptionEndIndex === -1) {\n\t\treturn undefined;\n\t}\n\tconst description = utf8ArrayToStr(\n\t\ttoUint8(frame.data, 3 + mimeTypeEndIndex, descriptionEndIndex),\n\t);\n\n\tlet data;\n\tif (mimeType === '-->') {\n\t\tdata = utf8ArrayToStr(\n\t\t\ttoUint8(frame.data, 4 + mimeTypeEndIndex + descriptionEndIndex),\n\t\t);\n\t} \n\telse {\n\t\tdata = toArrayBuffer(\n\t\t\tframe.data.subarray(4 + mimeTypeEndIndex + descriptionEndIndex),\n\t\t);\n\t}\n\n\tmetadataFrame.mimeType = mimeType;\n\tmetadataFrame.pictureType = pictureType;\n\tmetadataFrame.description = description;\n\tmetadataFrame.data = data;\n\treturn metadataFrame;\n}\n","type TypedArray =\n\t| Int8Array\n\t| Uint8Array\n\t| Int16Array\n\t| Uint16Array\n\t| Int32Array\n\t| Uint32Array\n\t| Float32Array\n\t| Float64Array\n\t| Uint8ClampedArray;\n\nexport function toArrayBuffer(view: ArrayBuffer | TypedArray): ArrayBuffer {\n\tif (view instanceof ArrayBuffer) {\n\t\treturn view;\n\t} \n\telse {\n\t\tif (view.byteOffset == 0 && view.byteLength == view.buffer.byteLength) {\n\t\t\t// This is a TypedArray over the whole buffer.\n\t\t\treturn view.buffer;\n\t\t}\n\t\t// This is a 'view' on the buffer. Create a new buffer that only contains\n\t\t// the data. Note that since this isn't an ArrayBuffer, the 'new' call\n\t\t// will allocate a new buffer to hold the copy.\n\t\treturn new Uint8Array(view).buffer;\n\t}\n}\n","import { utf8ArrayToStr } from '../../utils/utf8ArrayToStr.js';\nimport type { DecodedId3Frame } from '../DecodedId3Frame.js';\nimport type { RawId3Frame } from './RawFrame.js';\n\n/**\n * Decodes an ID3 text frame\n *\n * @param frame - the ID3 text frame\n *\n * @returns The decoded ID3 text frame\n *\n * @internal\n *\n * @group ID3\n */\nexport function decodeId3TextFrame(frame: RawId3Frame): DecodedId3Frame | undefined {\n\tif (frame.size < 2) {\n\t\treturn undefined;\n\t}\n\n\tif (frame.type === 'TXXX') {\n\t\t/*\n\t\tFormat:\n\t\t[0] = {Text Encoding}\n\t\t[1-?] = {Description}\\0{Value}\n\t\t*/\n\t\tlet index = 1;\n\t\tconst description = utf8ArrayToStr(frame.data.subarray(index), true);\n\n\t\tindex += description.length + 1;\n\t\tconst value = utf8ArrayToStr(frame.data.subarray(index));\n\n\t\treturn { key: frame.type, info: description, data: value };\n\t}\n\t/*\n\tFormat:\n\t[0] = {Text Encoding}\n\t[1-?] = {Value}\n\t*/\n\tconst text = utf8ArrayToStr(frame.data.subarray(1));\n\treturn { key: frame.type, info: '', data: text };\n}\n","/**\n * Read ID3 size\n *\n * @param data - The data to read from\n * @param offset - The offset at which to start reading\n *\n * @returns The size\n *\n * @internal\n *\n * @group ID3\n */\nexport function readId3Size(data: Uint8Array, offset: number): number {\n\tlet size = 0;\n\tsize = (data[offset] & 0x7f) << 21;\n\tsize |= (data[offset + 1] & 0x7f) << 14;\n\tsize |= (data[offset + 2] & 0x7f) << 7;\n\tsize |= data[offset + 3] & 0x7f;\n\treturn size;\n}\n","import type { RawId3Frame } from './RawFrame.js';\nimport { readId3Size } from './readId3Size.js';\n\n/**\n * Returns the data of an ID3 frame.\n *\n * @param data - The data to read from\n *\n * @returns The data of the ID3 frame\n *\n * @internal\n *\n * @group ID3\n */\nexport function getId3FrameData(data: Uint8Array): RawId3Frame {\n\t/*\n\tFrame ID $xx xx xx xx (four characters)\n\tSize $xx xx xx xx\n\tFlags $xx xx\n\t*/\n\tconst type: string = String.fromCharCode(data[0], data[1], data[2], data[3]);\n\tconst size: number = readId3Size(data, 4);\n\n\t// skip frame id, size, and flags\n\tconst offset = 10;\n\n\treturn { type, size, data: data.subarray(offset, offset + size) };\n}\n","/**\n * Returns true if an ID3 footer can be found at offset in data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns `true` if an ID3 footer is found\n *\n * @internal\n *\n * @group ID3\n */\nexport function isId3Footer(data: Uint8Array, offset: number): boolean {\n\t/*\n\t * The footer is a copy of the header, but with a different identifier\n\t */\n\tif (offset + 10 <= data.length) {\n\t\t// look for '3DI' identifier\n\t\tif (\n\t\t\tdata[offset] === 0x33 &&\n\t\t\tdata[offset + 1] === 0x44 &&\n\t\t\tdata[offset + 2] === 0x49\n\t\t) {\n\t\t\t// check version is within range\n\t\t\tif (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n\t\t\t\t// check size is within range\n\t\t\t\tif (\n\t\t\t\t\tdata[offset + 6] < 0x80 &&\n\t\t\t\t\tdata[offset + 7] < 0x80 &&\n\t\t\t\t\tdata[offset + 8] < 0x80 &&\n\t\t\t\t\tdata[offset + 9] < 0x80\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n","/**\n * Returns true if an ID3 header can be found at offset in data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns `true` if an ID3 header is found\n *\n * @internal\n *\n * @group ID3\n */\nexport function isId3Header(data: Uint8Array, offset: number): boolean {\n\t/*\n\t * http://id3.org/id3v2.3.0\n\t * [0] = 'I'\n\t * [1] = 'D'\n\t * [2] = '3'\n\t * [3,4] = {Version}\n\t * [5] = {Flags}\n\t * [6-9] = {ID3 Size}\n\t *\n\t * An ID3v2 tag can be detected with the following pattern:\n\t * $49 44 33 yy yy xx zz zz zz zz\n\t * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n\t */\n\tif (offset + 10 <= data.length) {\n\t\t// look for 'ID3' identifier\n\t\tif (\n\t\t\tdata[offset] === 0x49 &&\n\t\t\tdata[offset + 1] === 0x44 &&\n\t\t\tdata[offset + 2] === 0x33\n\t\t) {\n\t\t\t// check version is within range\n\t\t\tif (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n\t\t\t\t// check size is within range\n\t\t\t\tif (\n\t\t\t\t\tdata[offset + 6] < 0x80 &&\n\t\t\t\t\tdata[offset + 7] < 0x80 &&\n\t\t\t\t\tdata[offset + 8] < 0x80 &&\n\t\t\t\t\tdata[offset + 9] < 0x80\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DashConstants from './constants/DashConstants.js';\nimport MediaInfo from './vo/MediaInfo.js';\nimport StreamInfo from './vo/StreamInfo.js';\nimport ManifestInfo from './vo/ManifestInfo.js';\nimport Event from './vo/Event.js';\nimport FactoryMaker from '../core/FactoryMaker.js';\nimport DashManifestModel from './models/DashManifestModel.js';\nimport PatchManifestModel from './models/PatchManifestModel.js';\nimport Representation from './vo/Representation.js';\nimport {bcp47Normalize} from 'bcp-47-normalize';\nimport {getId3Frames} from '@svta/common-media-library/id3/getId3Frames.js';\nimport Constants from '../streaming/constants/Constants.js';\n\n/**\n * @module DashAdapter\n * @description The DashAdapter module can be accessed using the MediaPlayer API getDashAdapter()\n */\n\nfunction DashAdapter() {\n let instance,\n dashManifestModel,\n patchManifestModel,\n voPeriods,\n constants,\n cea608parser;\n\n const context = this.context;\n\n const PROFILE_DVB = 'urn:dvb:dash:profile:dvb-dash:2014';\n\n function setup() {\n dashManifestModel = DashManifestModel(context).getInstance();\n patchManifestModel = PatchManifestModel(context).getInstance();\n reset();\n }\n\n // #region PUBLIC FUNCTIONS\n // --------------------------------------------------\n function setConfig(config) {\n if (!config) {\n return;\n }\n\n if (config.constants) {\n constants = config.constants;\n }\n\n if (config.cea608parser) {\n cea608parser = config.cea608parser;\n }\n if (config.errHandler) {\n dashManifestModel.setConfig({ errHandler: config.errHandler });\n }\n\n if (config.BASE64) {\n dashManifestModel.setConfig({ BASE64: config.BASE64 });\n }\n }\n\n /**\n * Returns a MediaInfo object for a given media type and the corresponding streamInfo.\n * @param {object} streamInfo\n * @param {MediaType }type\n * @returns {null|MediaInfo} mediaInfo\n * @memberOf module:DashAdapter\n * @instance\n */\n function getMediaInfoForType(streamInfo, type) {\n if (voPeriods.length === 0 || !streamInfo) {\n return null;\n }\n\n let selectedVoPeriod = getPeriodForStreamInfo(streamInfo, voPeriods);\n if (!selectedVoPeriod) {\n return null;\n }\n\n const voAdaptations = dashManifestModel.getAdaptationsForPeriod(selectedVoPeriod);\n\n let realAdaptation = getMainAdaptationForType(type, streamInfo);\n if (!realAdaptation) {\n return null;\n }\n let idx = dashManifestModel.getIndexForAdaptation(realAdaptation, voPeriods[0].mpd.manifest, streamInfo.index);\n\n return convertAdaptationToMediaInfo(voAdaptations[idx]);\n }\n\n /**\n * Checks if the role of the specified AdaptationSet is set to main\n * @param {object} adaptation\n * @returns {boolean}\n * @memberOf module:DashAdapter\n * @instance\n */\n function getIsMain(adaptation) {\n return dashManifestModel.getRolesForAdaptation(adaptation).filter(function (role) {\n return role.value === DashConstants.MAIN;\n })[0];\n }\n\n /**\n * Returns the AdaptationSet for a given period index and a given mediaType.\n * @param {number} periodIndex\n * @param {MediaType} type\n * @param {object} streamInfo\n * @returns {null|object} adaptation\n * @memberOf module:DashAdapter\n * @instance\n */\n function getMainAdaptationForType(type, streamInfo) {\n const index = streamInfo ? streamInfo.index : 0;\n const adaptations = dashManifestModel.getAdaptationsForType(voPeriods[index].mpd.manifest, index, type);\n\n if (!adaptations || adaptations.length === 0) {\n return null;\n }\n\n if (adaptations.length > 1 && streamInfo) {\n for (let i = 0, ln = adaptations.length; i < ln; i++) {\n if (getIsMain(adaptations[i])) {\n return adaptations[i];\n }\n }\n }\n\n return adaptations[0];\n }\n\n /**\n * Compares two mediaInfo objects\n * @param {MediaInfo} mInfoOne\n * @param {MediaInfo} mInfoTwo\n * @returns {boolean}\n * @memberof module:DashAdapter\n * @instance\n */\n function areMediaInfosEqual(mInfoOne, mInfoTwo) {\n if (!mInfoOne || !mInfoTwo) {\n return false;\n }\n\n const sameId = mInfoOne.id === mInfoTwo.id;\n const sameCodec = mInfoOne.codec === mInfoTwo.codec;\n const sameViewpoint = JSON.stringify(mInfoOne.viewpoint) === JSON.stringify(mInfoTwo.viewpoint);\n const sameLang = mInfoOne.lang === mInfoTwo.lang;\n const sameRoles = JSON.stringify(mInfoOne.roles) === JSON.stringify(mInfoTwo.roles);\n const sameAccessibility = JSON.stringify(mInfoOne.accessibility) === JSON.stringify(mInfoTwo.accessibility);\n const sameAudioChannelConfiguration = JSON.stringify(mInfoOne.audioChannelConfiguration) === JSON.stringify(mInfoTwo.audioChannelConfiguration);\n\n return (sameId && sameCodec && sameViewpoint && sameLang && sameRoles && sameAccessibility && sameAudioChannelConfiguration);\n }\n\n function _getAllMediaInfo(manifest, period, streamInfo, adaptations, type, embeddedText) {\n let mediaArr = [];\n let data,\n media,\n idx,\n i,\n j,\n ln;\n\n if (!adaptations || adaptations.length === 0) {\n return [];\n }\n\n const voAdaptations = dashManifestModel.getAdaptationsForPeriod(period);\n\n for (i = 0, ln = adaptations.length; i < ln; i++) {\n data = adaptations[i];\n idx = dashManifestModel.getIndexForAdaptation(data, manifest, streamInfo.index);\n media = convertAdaptationToMediaInfo(voAdaptations[idx]);\n\n if (embeddedText) {\n let accessibilityLength = media.accessibility.length;\n for (j = 0; j < accessibilityLength; j++) {\n if (!media) {\n continue;\n }\n let accessibility = media.accessibility[j];\n if (accessibility.schemeIdUri === constants.ACCESSIBILITY_CEA608_SCHEME) {\n if (!accessibility.value || accessibility.value === '') {\n convertVideoInfoToEmbeddedTextInfo(media, constants.CC1, 'eng');\n mediaArr.push(media);\n media = null;\n } else {\n let value = accessibility.value;\n let parts = value.split(';');\n if (parts[0].substring(0, 2) === 'CC') {\n for (j = 0; j < parts.length; j++) {\n if (!media) {\n media = convertAdaptationToMediaInfo.call(this, voAdaptations[idx]);\n }\n convertVideoInfoToEmbeddedTextInfo(media, parts[j].substring(0, 3), parts[j].substring(4));\n mediaArr.push(media);\n media = null;\n }\n } else {\n for (j = 0; j < parts.length; j++) { // Only languages for CC1, CC2, ...\n if (!media) {\n media = convertAdaptationToMediaInfo.call(this, voAdaptations[idx]);\n }\n convertVideoInfoToEmbeddedTextInfo(media, 'CC' + (j + 1), parts[j]);\n mediaArr.push(media);\n media = null;\n }\n }\n }\n }\n }\n } else if (type === constants.IMAGE) {\n convertVideoInfoToThumbnailInfo(media);\n mediaArr.push(media);\n media = null;\n } else if (media) {\n mediaArr.push(media);\n }\n }\n\n return mediaArr;\n }\n\n /**\n * Returns all the mediaInfos for a given mediaType and the corresponding streamInfo.\n * @param {object} streamInfo\n * @param {MediaType} type\n * @param {object} externalManifest Set to null or undefined if no external manifest is to be used\n * @returns {Array} mediaArr\n * @memberOf module:DashAdapter\n * @instance\n */\n function getAllMediaInfoForType(streamInfo, type, externalManifest) {\n let voLocalPeriods = voPeriods;\n let manifest = externalManifest;\n let mediaArr = [];\n\n if (manifest) {\n checkConfig();\n\n voLocalPeriods = getRegularPeriods(manifest);\n } else {\n if (voPeriods.length > 0) {\n manifest = voPeriods[0].mpd.manifest;\n } else {\n return mediaArr;\n }\n }\n\n const selectedVoPeriod = getPeriodForStreamInfo(streamInfo, voLocalPeriods);\n let adaptationsForType = dashManifestModel.getAdaptationsForType(manifest, streamInfo ? streamInfo.index : null, type);\n\n mediaArr = _getAllMediaInfo(manifest, selectedVoPeriod, streamInfo, adaptationsForType, type);\n\n // Search for embedded text in video track\n if (type === constants.TEXT) {\n adaptationsForType = dashManifestModel.getAdaptationsForType(manifest, streamInfo ? streamInfo.index : null, constants.VIDEO);\n mediaArr = mediaArr.concat(_getAllMediaInfo(manifest, selectedVoPeriod, streamInfo, adaptationsForType, type, true));\n }\n\n return mediaArr;\n }\n\n /**\n * Update the internal voPeriods array with the information from the new manifest\n * @param {object} newManifest\n * @returns {*}\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function updatePeriods(newManifest) {\n if (!newManifest) {\n return null;\n }\n\n checkConfig();\n\n voPeriods = getRegularPeriods(newManifest);\n }\n\n /**\n * Returns an array of streamInfo objects\n * @param {object} externalManifest\n * @param {number} maxStreamsInfo\n * @returns {Array} streams\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function getStreamsInfo(externalManifest, maxStreamsInfo) {\n const streams = [];\n let voLocalPeriods = voPeriods;\n\n //if manifest is defined, getStreamsInfo is for an outside manifest, not the current one\n if (externalManifest) {\n checkConfig();\n voLocalPeriods = getRegularPeriods(externalManifest);\n }\n\n if (voLocalPeriods.length > 0) {\n if (!maxStreamsInfo || maxStreamsInfo > voLocalPeriods.length) {\n maxStreamsInfo = voLocalPeriods.length;\n }\n for (let i = 0; i < maxStreamsInfo; i++) {\n streams.push(convertPeriodToStreamInfo(voLocalPeriods[i]));\n }\n }\n\n return streams;\n }\n\n /**\n * Returns the AdaptationSet as saved in the DashManifestModel\n * @param {object} streamInfo\n * @param {object} mediaInfo\n * @returns {object} realAdaptation\n * @memberOf module:DashAdapter\n * @instance\n */\n function getRealAdaptation(streamInfo, mediaInfo) {\n let id,\n realAdaptation;\n\n const selectedVoPeriod = getPeriodForStreamInfo(streamInfo, voPeriods);\n\n id = mediaInfo ? mediaInfo.id : null;\n\n if (voPeriods.length > 0 && selectedVoPeriod) {\n realAdaptation = id ? dashManifestModel.getAdaptationForId(id, voPeriods[0].mpd.manifest, selectedVoPeriod.index) : dashManifestModel.getAdaptationForIndex(mediaInfo ? mediaInfo.index : null, voPeriods[0].mpd.manifest, selectedVoPeriod.index);\n }\n\n return realAdaptation;\n }\n\n /**\n * Returns the ProducerReferenceTimes as saved in the DashManifestModel if present\n * @param {object} streamInfo\n * @param {object} mediaInfo\n * @returns {object} producerReferenceTimes\n * @memberOf module:DashAdapter\n * @instance\n */\n function getProducerReferenceTimes(streamInfo, mediaInfo) {\n let id, realAdaptation;\n\n const selectedVoPeriod = getPeriodForStreamInfo(streamInfo, voPeriods);\n id = mediaInfo ? mediaInfo.id : null;\n\n if (voPeriods.length > 0 && selectedVoPeriod) {\n realAdaptation = id ? dashManifestModel.getAdaptationForId(id, voPeriods[0].mpd.manifest, selectedVoPeriod.index) : dashManifestModel.getAdaptationForIndex(mediaInfo ? mediaInfo.index : null, voPeriods[0].mpd.manifest, selectedVoPeriod.index);\n }\n\n if (!realAdaptation) {\n return [];\n }\n return dashManifestModel.getProducerReferenceTimesForAdaptation(realAdaptation);\n }\n\n /**\n * Return all EssentialProperties of an AdaptationSet\n * @param {object} adaptationSet\n * @return {array}\n */\n function getEssentialPropertiesForAdaptationSet(adaptationSet) {\n try {\n return dashManifestModel.getEssentialPropertiesForRepresentation(adaptationSet);\n } catch (e) {\n return [];\n }\n }\n\n /**\n * Return all EssentialProperties of a Representation\n * @param {object} representation\n * @return {array}\n */\n function getEssentialPropertiesForRepresentation(representation) {\n try {\n return dashManifestModel.getEssentialPropertiesForRepresentation(representation);\n } catch (e) {\n return [];\n }\n }\n\n /**\n * Return supplementalCodecs of a Representation\n * @param {object} representation\n * @returns {array}\n */\n function getSupplementalCodecs(representation) {\n const supplementalCodecs = representation[DashConstants.SUPPLEMENTAL_CODECS];\n if (!supplementalCodecs) {\n return [];\n }\n return supplementalCodecs.split(' ').map((codec) => representation.mimeType + ';codecs=\"' + codec + '\"');\n }\n\n /**\n * Returns the period as defined in the DashManifestModel for a given index\n * @param {number} index\n * @return {object}\n * @memberOf module:DashAdapter\n * @instance\n */\n function getRealPeriodByIndex(index) {\n return dashManifestModel.getRealPeriodForIndex(index, voPeriods[0].mpd.manifest);\n }\n\n /**\n * Returns all voRepresentations for a given mediaInfo\n * @param {object} mediaInfo\n * @returns {Array} voReps\n * @memberOf module:DashAdapter\n * @instance\n */\n function getVoRepresentations(mediaInfo) {\n let voReps;\n\n const voAdaptation = getAdaptationForMediaInfo(mediaInfo);\n voReps = dashManifestModel.getRepresentationsForAdaptation(voAdaptation, mediaInfo);\n\n return voReps;\n }\n\n /**\n * Returns the event for the given parameters.\n * @param {object} eventBox\n * @param {object} eventStreams\n * @param {number} mediaStartTime - Specified in seconds\n * @param {object} voRepresentation\n * @returns {null|Event}\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function getEvent(eventBox, eventStreams, mediaStartTime, voRepresentation) {\n try {\n if (!eventBox || !eventStreams || isNaN(mediaStartTime) || !voRepresentation) {\n return null;\n }\n\n const schemeIdUri = eventBox.scheme_id_uri;\n const value = eventBox.value;\n\n if (!eventStreams[schemeIdUri + '/' + value]) {\n return null;\n }\n\n const event = new Event();\n const timescale = eventBox.timescale || 1;\n const periodStart = voRepresentation.adaptation.period.start;\n const eventStream = eventStreams[schemeIdUri + '/' + value];\n // The PTO in voRepresentation is already specified in seconds\n const presentationTimeOffset = !isNaN(voRepresentation.presentationTimeOffset) ? voRepresentation.presentationTimeOffset : !isNaN(eventStream.presentationTimeOffset) ? eventStream.presentationTimeOffset : 0;\n // In case of version 1 events the presentation_time is parsed as presentation_time_delta\n let presentationTimeDelta = eventBox.presentation_time_delta / timescale;\n let calculatedPresentationTime;\n\n if (eventBox.version === 0) {\n calculatedPresentationTime = periodStart + mediaStartTime - presentationTimeOffset + presentationTimeDelta;\n } else {\n calculatedPresentationTime = periodStart - presentationTimeOffset + presentationTimeDelta;\n }\n\n const duration = eventBox.event_duration / timescale;\n const id = eventBox.id;\n const messageData = eventBox.message_data;\n\n event.eventStream = eventStream;\n event.eventStream.value = value;\n event.eventStream.timescale = timescale;\n event.duration = duration;\n event.id = id;\n event.calculatedPresentationTime = calculatedPresentationTime;\n event.messageData = messageData;\n event.presentationTimeDelta = presentationTimeDelta;\n event.parsedMessageData = (schemeIdUri === Constants.ID3_SCHEME_ID_URI) ? getId3Frames(messageData) : null;\n\n return event;\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Returns the events for the given info object. info can either be an instance of StreamInfo, MediaInfo or Representation\n * @param {object} info\n * @param {object} voRepresentation\n * @returns {Array}\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function getEventsFor(info, voRepresentation, streamInfo) {\n let events = [];\n\n if (voPeriods.length > 0) {\n const manifest = voPeriods[0].mpd.manifest;\n\n if (info instanceof StreamInfo) {\n const period = getPeriodForStreamInfo(info, voPeriods)\n events = dashManifestModel.getEventsForPeriod(period);\n } else if (info instanceof MediaInfo) {\n const period = getPeriodForStreamInfo(streamInfo, voPeriods)\n events = dashManifestModel.getEventStreamForAdaptationSet(manifest, getAdaptationForMediaInfo(info), period);\n } else if (info instanceof Representation) {\n const period = getPeriodForStreamInfo(streamInfo, voPeriods)\n events = dashManifestModel.getEventStreamForRepresentation(manifest, voRepresentation, period);\n }\n }\n\n return events;\n }\n\n\n /**\n * Check if the given type is a text track\n * @param {object} adaptation\n * @returns {boolean}\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function getIsTextTrack(adaptation) {\n return dashManifestModel.getIsText(adaptation);\n }\n\n /**\n * Returns the UTC Timing Sources specified in the manifest\n * @returns {Array} utcTimingSources\n * @memberOf module:DashAdapter\n * @instance\n */\n function getUTCTimingSources() {\n const manifest = getManifest();\n return dashManifestModel.getUTCTimingSources(manifest);\n }\n\n /**\n * Returns the suggestedPresentationDelay as specified in the manifest\n * @returns {String} suggestedPresentationDelay\n * @memberOf module:DashAdapter\n * @instance\n */\n function getSuggestedPresentationDelay() {\n const mpd = voPeriods.length > 0 ? voPeriods[0].mpd : null;\n return dashManifestModel.getSuggestedPresentationDelay(mpd);\n }\n\n /**\n * Returns the availabilityStartTime as specified in the manifest\n * @param {object} externalManifest Omit this value if no external manifest should be used\n * @returns {number} availabilityStartTime\n * @memberOf module:DashAdapter\n * @instance\n */\n function getAvailabilityStartTime(externalManifest) {\n const mpd = getMpd(externalManifest);\n return dashManifestModel.getAvailabilityStartTime(mpd);\n }\n\n /**\n * Returns a boolean indicating if the manifest is dynamic or not\n * @param {object} externalManifest Omit this value if no external manifest should be used\n * @returns {boolean}\n * @memberOf module:DashAdapter\n * @instance\n */\n function getIsDynamic(externalManifest) {\n const manifest = getManifest(externalManifest);\n return dashManifestModel.getIsDynamic(manifest);\n }\n\n /**\n * Returns the duration of the MPD\n * @param {object} externalManifest Omit this value if no external manifest should be used\n * @returns {number} duration\n * @memberOf module:DashAdapter\n * @instance\n */\n function getDuration(externalManifest) {\n const manifest = getManifest(externalManifest);\n return dashManifestModel.getDuration(manifest);\n }\n\n /**\n * Returns all periods of the MPD\n * @param {object} externalManifest Omit this value if no external manifest should be used\n * @returns {Array} periods\n * @memberOf module:DashAdapter\n * @instance\n */\n function getRegularPeriods(externalManifest) {\n const mpd = getMpd(externalManifest);\n return dashManifestModel.getRegularPeriods(mpd);\n }\n\n /**\n * Returns an MPD object\n * @param {object} externalManifest Omit this value if no external manifest should be used\n * @returns {object} MPD\n * @memberOf module:DashAdapter\n * @instance\n */\n function getMpd(externalManifest) {\n const manifest = getManifest(externalManifest);\n return dashManifestModel.getMpd(manifest);\n }\n\n /**\n * Returns the ContentSteering element of the MPD\n * @param {object} manifest\n * @returns {object} contentSteering\n * @memberOf module:DashAdapter\n * @instance\n */\n function getContentSteering(manifest) {\n return dashManifestModel.getContentSteering(manifest);\n }\n\n /**\n * Returns the location element of the MPD\n * @param {object} manifest\n * @returns {String} location\n * @memberOf module:DashAdapter\n * @instance\n */\n function getLocation(manifest) {\n return dashManifestModel.getLocation(manifest);\n }\n\n /**\n * Returns the manifest update period used for dynamic manifests\n * @param {object} manifest\n * @param {number} latencyOfLastUpdate\n * @returns {NaN|number} manifestUpdatePeriod\n * @memberOf module:DashAdapter\n * @instance\n */\n function getManifestUpdatePeriod(manifest, latencyOfLastUpdate = 0) {\n return dashManifestModel.getManifestUpdatePeriod(manifest, latencyOfLastUpdate);\n }\n\n /**\n * Returns the publish time from the manifest\n * @param {object} manifest\n * @returns {Date|null} publishTime\n * @memberOf module:DashAdapter\n * @instance\n */\n function getPublishTime(manifest) {\n return dashManifestModel.getPublishTime(manifest);\n }\n\n /**\n * Returns the patch locations of the MPD if existing and if they are still valid\n * @param {object} manifest\n * @returns {PatchLocation[]} patch location\n * @memberOf module:DashAdapter\n * @instance\n */\n function getPatchLocation(manifest) {\n const patchLocations = dashManifestModel.getPatchLocation(manifest);\n const publishTime = dashManifestModel.getPublishTime(manifest);\n\n // short-circuit when no patch location or publish time exists\n if (!patchLocations || patchLocations.length === 0 || !publishTime) {\n return [];\n }\n\n return patchLocations.filter((patchLocation) => {\n // check if the patch location has expired, if so do not consider it\n return isNaN(patchLocation.ttl) || (publishTime.getTime() + patchLocation.ttl > new Date().getTime())\n })\n }\n\n /**\n * Checks if the manifest has a DVB profile\n * @param {object} manifest\n * @returns {boolean}\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function getIsDVB(manifest) {\n return dashManifestModel.hasProfile(manifest, PROFILE_DVB);\n }\n\n /**\n * Checks if the manifest is actually just a patch manifest\n * @param {object} manifest\n * @return {boolean}\n * @memberOf module:DashAdapter\n * @instance\n */\n function getIsPatch(manifest) {\n return patchManifestModel.getIsPatch(manifest);\n }\n\n /**\n * Returns the base urls for a given element\n * @param {object} node\n * @returns {BaseURL[]}\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function getBaseURLsFromElement(node) {\n return dashManifestModel.getBaseURLsFromElement(node);\n }\n\n /**\n * Returns the function to sort the Representations\n * @returns {function}\n * @memberOf module:DashAdapter\n * @instance\n * @ignore\n */\n function getRepresentationSortFunction() {\n return dashManifestModel.getRepresentationSortFunction();\n }\n\n /**\n * Returns the codec for a given adaptation set and a given representation id.\n * @param {object} adaptation\n * @param {number} representationId\n * @param {boolean} addResolutionInfo Defines whether to include resolution information in the output\n * @returns {String} codec\n * @memberOf module:DashAdapter\n * @instance\n */\n function getCodec(adaptation, representationIndex, addResolutionInfo) {\n return dashManifestModel.getCodec(adaptation, representationIndex, addResolutionInfo);\n }\n\n /**\n * Returns the bandwidth for a given representation id and the corresponding period index\n * @param {number} representationId\n * @param {number} periodIdx\n * @returns {number} bandwidth\n * @memberOf module:DashAdapter\n * @instance\n */\n function getBandwidthForRepresentation(representationId, periodIdx) {\n let representation;\n let period = getPeriod(periodIdx);\n\n representation = findRepresentation(period, representationId);\n\n return representation ? representation.bandwidth : null;\n }\n\n /**\n * Returns the index for a given representation id\n * @param {string} representationId\n * @param {number} periodIdx\n * @returns {number} index\n * @memberOf module:DashAdapter\n * @instance\n */\n function getIndexForRepresentation(representationId, periodIdx) {\n let period = getPeriod(periodIdx);\n\n return findRepresentationIndex(period, representationId);\n }\n\n /**\n * Returns the voPeriod object for a given id\n * @param {String} id\n * @returns {object|null}\n * @memberOf module:DashAdapter\n * @instance\n */\n function getPeriodById(id) {\n if (!id || voPeriods.length === 0) {\n return null;\n }\n const periods = voPeriods.filter((p) => {\n return p.id === id;\n });\n\n if (periods && periods.length > 0) {\n return periods[0];\n }\n\n return null;\n }\n\n /**\n * Checks if the given AdaptationSet is from the given media type\n * @param {object} adaptation\n * @param {string} type\n * @return {boolean}\n * @memberOf module:DashAdapter\n * @instance\n */\n function getIsTypeOf(adaptation, type) {\n return dashManifestModel.getIsTypeOf(adaptation, type);\n }\n\n function reset() {\n voPeriods = [];\n }\n\n /**\n * Checks if the supplied manifest is compatible for application of the supplied patch\n * @param {object} manifest\n * @param {object} patch\n * @return {boolean}\n * @memberOf module:DashAdapter\n * @instance\n */\n function isPatchValid(manifest, patch) {\n let manifestId = dashManifestModel.getId(manifest);\n let patchManifestId = patchManifestModel.getMpdId(patch);\n let manifestPublishTime = dashManifestModel.getPublishTime(manifest);\n let patchPublishTime = patchManifestModel.getPublishTime(patch);\n let originalManifestPublishTime = patchManifestModel.getOriginalPublishTime(patch);\n\n // Patches are considered compatible if the following are true\n // - MPD@id == Patch@mpdId\n // - MPD@publishTime == Patch@originalPublishTime\n // - MPD@publishTime < Patch@publishTime\n // - All values in comparison exist\n return !!(manifestId && patchManifestId && (manifestId == patchManifestId) &&\n manifestPublishTime && originalManifestPublishTime && (manifestPublishTime.getTime() == originalManifestPublishTime.getTime()) &&\n patchPublishTime && (manifestPublishTime.getTime() < patchPublishTime.getTime()));\n }\n\n /**\n * Takes a given patch and applies it to the provided manifest, assumes patch is valid for manifest\n * @param {object} manifest\n * @param {object} patch\n * @memberOf module:DashAdapter\n * @instance\n */\n function applyPatchToManifest(manifest, patch) {\n // get all operations from the patch and apply them in document order\n patchManifestModel.getPatchOperations(patch)\n .forEach((operation) => {\n let result = operation.getMpdTarget(manifest);\n\n // operation supplies a path that doesn't match mpd, skip\n if (result === null) {\n return;\n }\n\n let { name, target, leaf } = result;\n\n // short circuit for attribute selectors and text replacement\n if (operation.xpath.findsAttribute() || name === '__text') {\n switch (operation.action) {\n case 'add':\n case 'replace':\n // add and replace are just setting the value\n target[name] = operation.value;\n break;\n case 'remove':\n // remove is deleting the value\n delete target[name];\n break;\n }\n return;\n }\n\n // determine the relative insert position prior to possible removal\n let relativePosition = (target[name] || []).indexOf(leaf);\n let insertBefore = (operation.position === 'prepend' || operation.position === 'before');\n\n // perform removal operation first, we have already capture the appropriate relative position\n if (operation.action === 'remove' || operation.action === 'replace') {\n // note that we ignore the 'ws' attribute of patch operations as it does not effect parsed mpd operations\n\n // purge the directly named entity\n if (!Array.isArray(target[name])) {\n delete target[name];\n } else if (relativePosition != -1) {\n // if we did have a positional reference we need to purge from array set and restore X2JS proper semantics\n let targetArray = target[name];\n targetArray.splice(relativePosition, 1);\n if (targetArray.length > 0) {\n target[name] = targetArray;\n } else {\n // all nodes of this type deleted, remove entry\n delete target[name];\n }\n }\n }\n\n // Perform any add/replace operations now, technically RFC5261 only allows a single element to take the\n // place of a replaced element while the add case allows an arbitrary number of children.\n // Due to the both operations requiring the same insertion logic they have been combined here and we will\n // not enforce single child operations for replace, assertions should be made at patch parse time if necessary\n if (operation.action === 'add' || operation.action === 'replace') {\n // value will be an object with element name keys pointing to arrays of objects\n Object.keys(operation.value).forEach((insert) => {\n let insertNodes = operation.value[insert];\n\n let updatedNodes = target[insert] || [];\n if (updatedNodes.length === 0 && target[insert]) {\n updatedNodes.push(target[insert]);\n }\n\n if (updatedNodes.length === 0) {\n // no original nodes for this element type\n updatedNodes = insertNodes;\n } else {\n // compute the position we need to insert at, default to end of set\n let position = updatedNodes.length;\n if (insert == name && relativePosition != -1) {\n // if the inserted element matches the operation target (not leaf) and there is a relative position we\n // want the inserted position to be set such that our insertion is relative to original position\n // since replace has modified the array length we reduce the insert point by 1\n position = relativePosition + (insertBefore ? 0 : 1) + (operation.action === 'replace' ? -1 : 0);\n } else {\n // otherwise we are in an add append/prepend case or replace case that removed the target name completely\n position = insertBefore ? 0 : updatedNodes.length;\n }\n\n // we dont have to perform element removal for the replace case as that was done above\n updatedNodes.splice.apply(updatedNodes, [position, 0].concat(insertNodes));\n }\n\n // now we properly reset the element keys on the target to match parsing semantics\n target[insert] = updatedNodes;\n });\n }\n });\n }\n\n // #endregion PUBLIC FUNCTIONS\n\n // #region PRIVATE FUNCTIONS\n // --------------------------------------------------\n function getManifest(externalManifest) {\n return externalManifest ? externalManifest : voPeriods.length > 0 ? voPeriods[0].mpd.manifest : null;\n }\n\n function getAdaptationForMediaInfo(mediaInfo) {\n try {\n const selectedVoPeriod = getPeriodForStreamInfo(mediaInfo.streamInfo, voPeriods);\n const voAdaptations = dashManifestModel.getAdaptationsForPeriod(selectedVoPeriod);\n\n if (!mediaInfo || !mediaInfo.streamInfo || mediaInfo.streamInfo.id === undefined || !voAdaptations) {\n return null;\n }\n return voAdaptations[mediaInfo.index];\n } catch (e) {\n return null;\n }\n }\n\n function getPeriodForStreamInfo(streamInfo, voPeriodsArray) {\n const ln = voPeriodsArray.length;\n\n for (let i = 0; i < ln; i++) {\n let voPeriod = voPeriodsArray[i];\n\n if (streamInfo && streamInfo.id === voPeriod.id) {\n return voPeriod;\n }\n }\n\n return null;\n }\n\n function convertAdaptationToMediaInfo(adaptation) {\n if (!adaptation) {\n return null;\n }\n\n let mediaInfo = new MediaInfo();\n const realAdaptation = adaptation.period.mpd.manifest.Period[adaptation.period.index].AdaptationSet[adaptation.index];\n\n mediaInfo.id = adaptation.id;\n mediaInfo.index = adaptation.index;\n mediaInfo.type = adaptation.type;\n mediaInfo.streamInfo = convertPeriodToStreamInfo(adaptation.period);\n mediaInfo.representationCount = dashManifestModel.getRepresentationCount(realAdaptation);\n mediaInfo.labels = dashManifestModel.getLabelsForAdaptation(realAdaptation);\n mediaInfo.lang = dashManifestModel.getLanguageForAdaptation(realAdaptation);\n mediaInfo.segmentAlignment = dashManifestModel.getSegmentAlignment(realAdaptation);\n mediaInfo.subSegmentAlignment = dashManifestModel.getSubSegmentAlignment(realAdaptation);\n mediaInfo.viewpoint = dashManifestModel.getViewpointForAdaptation(realAdaptation);\n mediaInfo.accessibility = dashManifestModel.getAccessibilityForAdaptation(realAdaptation);\n if (mediaInfo.accessibility.filter(function (accessibility) {\n if (accessibility.schemeIdUri && (accessibility.schemeIdUri.search('cea-608') >= 0) && typeof (cea608parser) !== 'undefined') {\n return true;\n }\n })[0]) {\n mediaInfo.embeddedCaptions = true;\n }\n mediaInfo.audioChannelConfiguration = dashManifestModel.getAudioChannelConfigurationForAdaptation(realAdaptation);\n if (mediaInfo.audioChannelConfiguration.length === 0 && realAdaptation.Representation && realAdaptation.Representation.length > 0) {\n mediaInfo.audioChannelConfiguration = dashManifestModel.getAudioChannelConfigurationForRepresentation(realAdaptation.Representation[0]);\n }\n mediaInfo.roles = dashManifestModel.getRolesForAdaptation(realAdaptation);\n mediaInfo.codec = dashManifestModel.getCodec(realAdaptation);\n mediaInfo.mimeType = dashManifestModel.getMimeType(realAdaptation);\n mediaInfo.contentProtection = dashManifestModel.getContentProtectionByAdaptation(realAdaptation);\n mediaInfo.bitrateList = dashManifestModel.getBitrateListForAdaptation(realAdaptation);\n mediaInfo.selectionPriority = dashManifestModel.getSelectionPriority(realAdaptation);\n\n if (mediaInfo.contentProtection && mediaInfo.contentProtection.length > 0) {\n mediaInfo.contentProtection = _applyContentProtectionReferencing(mediaInfo.contentProtection, adaptation.period.mpd.manifest);\n mediaInfo.contentProtection = _applyDefaultKeyId(mediaInfo.contentProtection);\n mediaInfo.normalizedKeyIds = _getNormalizedKeyIds(mediaInfo.contentProtection);\n }\n\n mediaInfo.isText = dashManifestModel.getIsText(realAdaptation);\n mediaInfo.essentialProperties = dashManifestModel.getCombinedEssentialPropertiesForAdaptationSet(realAdaptation);\n mediaInfo.supplementalProperties = dashManifestModel.getCombinedSupplementalPropertiesForAdaptationSet(realAdaptation);\n mediaInfo.isFragmented = dashManifestModel.getIsFragmented(realAdaptation);\n mediaInfo.isEmbedded = false;\n mediaInfo.adaptationSetSwitchingCompatibleIds = _getAdaptationSetSwitchingCompatibleIds(mediaInfo);\n\n return mediaInfo;\n }\n\n function _applyDefaultKeyId(contentProtection) {\n const keyIds = contentProtection.map(cp => cp.cencDefaultKid).filter(kid => kid !== null);\n if (keyIds.length) {\n const keyId = keyIds[0];\n contentProtection.forEach(cp => {\n cp.keyId = keyId;\n });\n }\n\n return contentProtection\n }\n\n function _applyContentProtectionReferencing(contentProtection, manifest) {\n if (!contentProtection || !contentProtection.length || !manifest) {\n return contentProtection\n }\n\n const allContentProtectionElements = dashManifestModel.getContentProtectionByManifest(manifest)\n if (!allContentProtectionElements || !allContentProtectionElements.length) {\n return contentProtection\n }\n\n const contentProtectionElementsByRefId = allContentProtectionElements.reduce((acc, curr) => {\n if (curr.refId) {\n acc.set(curr.refId, curr);\n }\n return acc\n }, new Map())\n\n return contentProtection.map((contentProtectionElement) => {\n if (contentProtectionElement.ref) {\n const contentProtectionElementSource = contentProtectionElementsByRefId.get(contentProtectionElement.ref);\n if (contentProtectionElementSource) {\n contentProtectionElement.mergeAttributesFromReference(contentProtectionElementSource)\n }\n }\n return contentProtectionElement\n })\n }\n\n function _getNormalizedKeyIds(contentProtection) {\n const normalizedKeyIds = new Set();\n contentProtection.forEach((contentProtectionElement) => {\n if (contentProtectionElement.cencDefaultKid && typeof contentProtectionElement.cencDefaultKid === 'string') {\n normalizedKeyIds.add(contentProtectionElement.cencDefaultKid.replace(/-/g, '').toLowerCase());\n }\n })\n\n return normalizedKeyIds\n }\n\n function _getAdaptationSetSwitchingCompatibleIds(mediaInfo) {\n if (!mediaInfo || !mediaInfo.supplementalProperties) {\n return []\n }\n\n let adaptationSetSwitchingCompatibleIds = []\n const adaptationSetSwitching = mediaInfo.supplementalProperties.filter((sp) => {\n return sp.schemeIdUri === DashConstants.ADAPTATION_SET_SWITCHING_SCHEME_ID_URI\n });\n if (adaptationSetSwitching && adaptationSetSwitching.length > 0) {\n const ids = adaptationSetSwitching[0].value.toString().split(',')\n adaptationSetSwitchingCompatibleIds = ids.map((id) => {\n return id\n })\n }\n\n return adaptationSetSwitchingCompatibleIds\n }\n\n function convertVideoInfoToEmbeddedTextInfo(mediaInfo, channel, lang) {\n mediaInfo.id = channel; // CC1, CC2, CC3, or CC4\n mediaInfo.index = 100 + parseInt(channel.substring(2, 3));\n mediaInfo.type = constants.TEXT;\n mediaInfo.codec = 'cea-608-in-SEI';\n mediaInfo.isEmbedded = true;\n mediaInfo.isFragmented = false;\n mediaInfo.lang = bcp47Normalize(lang);\n mediaInfo.roles = [{ schemeIdUri: 'urn:mpeg:dash:role:2011', value: 'caption' }];\n }\n\n function convertVideoInfoToThumbnailInfo(mediaInfo) {\n mediaInfo.type = constants.IMAGE;\n }\n\n function convertPeriodToStreamInfo(period) {\n let streamInfo = new StreamInfo();\n const THRESHOLD = 1;\n\n streamInfo.id = period.id;\n streamInfo.index = period.index;\n streamInfo.start = period.start;\n streamInfo.duration = period.duration;\n streamInfo.manifestInfo = convertMpdToManifestInfo(period.mpd);\n streamInfo.isLast = period.mpd.manifest.Period.length === 1 || Math.abs((streamInfo.start + streamInfo.duration) - streamInfo.manifestInfo.duration) < THRESHOLD;\n streamInfo.isEncrypted = period.isEncrypted;\n\n return streamInfo;\n }\n\n function convertMpdToManifestInfo(mpd) {\n let manifestInfo = new ManifestInfo();\n\n manifestInfo.dvrWindowSize = mpd.timeShiftBufferDepth;\n manifestInfo.loadedTime = mpd.manifest.loadedTime;\n manifestInfo.availableFrom = mpd.availabilityStartTime;\n manifestInfo.minBufferTime = mpd.manifest.minBufferTime;\n manifestInfo.maxFragmentDuration = mpd.maxSegmentDuration;\n manifestInfo.duration = dashManifestModel.getDuration(mpd.manifest);\n manifestInfo.isDynamic = dashManifestModel.getIsDynamic(mpd.manifest);\n manifestInfo.serviceDescriptions = dashManifestModel.getServiceDescriptions(mpd.manifest);\n manifestInfo.protocol = mpd.manifest.protocol;\n\n return manifestInfo;\n }\n\n function checkConfig() {\n if (!constants) {\n throw new Error('setConfig function has to be called previously');\n }\n }\n\n function getPeriod(periodIdx) {\n return voPeriods.length > 0 ? voPeriods[0].mpd.manifest.Period[periodIdx] : null;\n }\n\n function findRepresentationIndex(period, representationId) {\n const index = findRepresentation(period, representationId, true);\n\n return index !== null ? index : -1;\n }\n\n function findRepresentation(period, representationId, returnIndex) {\n let adaptationSet,\n adaptationSetArray,\n representation,\n representationArray,\n adaptationSetArrayIndex,\n representationArrayIndex;\n\n if (period) {\n adaptationSetArray = period.AdaptationSet;\n for (adaptationSetArrayIndex = 0; adaptationSetArrayIndex < adaptationSetArray.length; adaptationSetArrayIndex = adaptationSetArrayIndex + 1) {\n adaptationSet = adaptationSetArray[adaptationSetArrayIndex];\n representationArray = adaptationSet.Representation;\n for (representationArrayIndex = 0; representationArrayIndex < representationArray.length; representationArrayIndex = representationArrayIndex + 1) {\n representation = representationArray[representationArrayIndex];\n if (representationId === representation.id) {\n if (returnIndex) {\n return representationArrayIndex;\n } else {\n return representation;\n }\n }\n }\n }\n }\n\n return null;\n }\n\n // #endregion PRIVATE FUNCTIONS\n\n instance = {\n applyPatchToManifest,\n areMediaInfosEqual,\n getAllMediaInfoForType,\n getAvailabilityStartTime,\n getBandwidthForRepresentation,\n getBaseURLsFromElement,\n getCodec,\n getContentSteering,\n getDuration,\n getEssentialPropertiesForAdaptationSet,\n getEssentialPropertiesForRepresentation,\n getEvent,\n getEventsFor,\n getIndexForRepresentation,\n getIsDVB,\n getIsDynamic,\n getIsPatch,\n getIsTextTrack,\n getIsTypeOf,\n getLocation,\n getMainAdaptationForType,\n getManifestUpdatePeriod,\n getMediaInfoForType,\n getMpd,\n getPatchLocation,\n getPeriodById,\n getProducerReferenceTimes,\n getPublishTime,\n getRealAdaptation,\n getRealPeriodByIndex,\n getRegularPeriods,\n getRepresentationSortFunction,\n getStreamsInfo,\n getSuggestedPresentationDelay,\n getSupplementalCodecs,\n getUTCTimingSources,\n getVoRepresentations,\n isPatchValid,\n reset,\n setConfig,\n updatePeriods,\n };\n\n setup();\n return instance;\n}\n\nDashAdapter.__dashjs_factory_name = 'DashAdapter';\nexport default FactoryMaker.getSingletonFactory(DashAdapter);\n","import type { Id3Frame } from './Id3Frame.js';\nimport type { RawId3Frame } from './util/RawFrame.js';\nimport { decodeId3Frame } from './util/decodeId3Frame.js';\nimport { getId3FrameData } from './util/getId3FrameData.js';\nimport { isId3Footer } from './util/isId3Footer.js';\nimport { isId3Header } from './util/isId3Header.js';\nimport { readId3Size } from './util/readId3Size.js';\n\nconst HEADER_FOOTER_SIZE = 10;\nconst FRAME_SIZE = 10;\n\n/**\n * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n *\n * @param id3Data - The ID3 data containing one or more ID3 tags\n *\n * @returns Array of ID3 frame objects\n *\n * @group ID3\n *\n * @beta\n */\nexport function getId3Frames(id3Data: Uint8Array): Id3Frame[] {\n\tlet offset = 0;\n\tconst frames: Id3Frame[] = [];\n\n\twhile (isId3Header(id3Data, offset)) {\n\t\tconst size = readId3Size(id3Data, offset + 6);\n\n\t\tif ((id3Data[offset + 5] >> 6) & 1) {\n\t\t\t// skip extended header\n\t\t\toffset += HEADER_FOOTER_SIZE;\n\t\t}\n\t\t// skip past ID3 header\n\t\toffset += HEADER_FOOTER_SIZE;\n\t\tconst end = offset + size;\n\t\t// loop through frames in the ID3 tag\n\t\twhile (offset + FRAME_SIZE < end) {\n\t\t\tconst frameData: RawId3Frame = getId3FrameData(id3Data.subarray(offset));\n\t\t\tconst frame: Id3Frame | undefined = decodeId3Frame(frameData);\n\t\t\tif (frame) {\n\t\t\t\tframes.push(frame);\n\t\t\t}\n\n\t\t\t// skip frame header and frame data\n\t\t\toffset += frameData.size + HEADER_FOOTER_SIZE;\n\t\t}\n\n\t\tif (isId3Footer(id3Data, offset)) {\n\t\t\toffset += HEADER_FOOTER_SIZE;\n\t\t}\n\t}\n\n\treturn frames;\n}\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Static methods for rounding decimals\n *\n * Modified version of the CC0-licenced example at:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n *\n * @export\n * @class Round10\n * @ignore\n */\nexport default class Round10 {\n /**\n * Decimal round.\n *\n * @param {Number} value The number.\n * @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).\n * @returns {Number} The adjusted value.\n * @ignore\n */\n static round10(value, exp) {\n return _decimalAdjust('round', value, exp);\n }\n}\n\n/**\n * Decimal adjustment of a number.\n *\n * @param {String} type The type of adjustment.\n * @param {Number} value The number.\n * @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).\n * @returns {Number} The adjusted value.\n * @ignore\n */\nfunction _decimalAdjust(type, value, exp) {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math[type](value);\n }\n\n value = +value;\n exp = +exp;\n\n // If the value is not a number or the exp is not an integer...\n if (value === null || isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n\n // Shift\n value = value.toString().split('e');\n value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));\n\n // Shift back\n value = value.toString().split('e');\n return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));\n}","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass MetricsList {\n constructor() {\n this.TcpList = [];\n this.HttpList = [];\n this.RepSwitchList = [];\n this.BufferLevel = [];\n this.BufferState = [];\n this.PlayList = [];\n this.DroppedFrames = [];\n this.SchedulingInfo = [];\n this.DVRInfo = [];\n this.ManifestUpdate = [];\n this.RequestsQueue = null;\n this.DVBErrors = [];\n }\n}\n\nexport default MetricsList;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass RepresentationSwitch {\n /**\n * @description This Object holds reference to the info at quality switch between two representations.\n */\n constructor() {\n\n /**\n * Time of the switch event.\n * @public\n */\n this.t = null;\n /**\n * The media presentation time of the earliest access unit\n * (out of all media content components) played out from\n * the Representation.\n *\n * @public\n */\n this.mt = null;\n /**\n * Value of Representation@id identifying the switch-to Representation.\n * @public\n */\n this.to = null;\n /**\n * If not present, this metrics concerns the Representation as a whole.\n * If present, lto indicates the value of SubRepresentation@level within\n * Representation identifying the switch-to level of the Representation.\n *\n * @public\n */\n this.lto = null;\n\n }\n}\n\nexport default RepresentationSwitch;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\nclass BufferLevel {\n /**\n * @description This Object holds reference to the current buffer level and the time it was recorded.\n */\n constructor() {\n /**\n * Real-Time | Time of the measurement of the buffer level.\n * @public\n */\n this.t = null;\n /**\n * Level of the buffer in milliseconds. Indicates the playout duration for which\n * media data of all active media components is available starting from the\n * current playout time.\n * @public\n */\n this.level = null;\n }\n}\n\nexport default BufferLevel;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport MetricsConstants from '../../constants/MetricsConstants.js';\n\n/**\n * @class\n * @ignore\n */\nclass BufferState {\n /**\n * @description This Object holds reference to the current buffer state of the video element.\n */\n constructor() {\n /**\n * The Buffer Level Target determined by the BufferLevelRule.\n * @public\n */\n this.target = null;\n /**\n * Current buffer state. Will be MetricsConstants.BUFFER_EMPTY or MetricsConstants.BUFFER_LOADED.\n * @public\n */\n this.state = MetricsConstants.BUFFER_EMPTY;\n }\n}\n\nexport default BufferState;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\nclass DVRInfo {\n /**\n * @description This Object holds reference to DVR availability window information.\n */\n constructor() {\n\n /**\n * The current time of the video element when this was created.\n * @public\n */\n this.time = null;\n /**\n * The current Segment Availability Range as an object with start and end properties.\n * It's delta defined by the timeShiftBufferDepth MPD attribute.\n * @public\n */\n this.range = null;\n /**\n * Reference to the internal ManifestInfo.js VO.\n * @public\n */\n this.manifestInfo = null;\n }\n}\n\nexport default DVRInfo;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass DroppedFrames {\n /**\n * @description This Object holds reference to DroppedFrames count and the time it was recorded.\n */\n constructor()\n {\n /**\n * Real-Time | Time of the measurement of the dropped frames.\n * @public\n */\n this.time = null;\n /**\n * Number of dropped frames\n * @public\n */\n this.droppedFrames = null;\n }\n}\n\nexport default DroppedFrames;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc This Object holds reference to the manifest update information.\n * @ignore\n */\nclass ManifestUpdate {\n /**\n * @class\n */\n constructor() {\n\n /**\n * Media Type Video | Audio | FragmentedText\n * @public\n */\n this.mediaType = null;\n /**\n * MPD Type static | dynamic\n * @public\n */\n this.type = null;\n /**\n * When this manifest update was requested\n * @public\n */\n this.requestTime = null;\n /**\n * When this manifest update was received\n * @public\n */\n this.fetchTime = null;\n /**\n * Calculated Availability Start time of the stream.\n * @public\n */\n this.availabilityStartTime = null;\n /**\n * the seek point (liveEdge for dynamic, Stream[0].startTime for static)\n * @public\n */\n this.presentationStartTime = 0;\n /**\n * The calculated difference between the server and client wall clock time\n * @public\n */\n this.clientTimeOffset = 0;\n /**\n * Actual element.currentTime\n * @public\n */\n this.currentTime = null;\n /**\n * Actual element.ranges\n * @public\n */\n this.buffered = null;\n /**\n * Static is fixed value of zero. dynamic should be ((Now-@availabilityStartTime) - elementCurrentTime)\n * @public\n */\n this.latency = 0;\n /**\n * Array holding list of StreamInfo VO Objects\n * @public\n */\n this.streamInfo = [];\n /**\n * Array holding list of ManifestUpdateRepresentationInfo Objects\n * @public\n */\n this.representationInfo = [];\n\n }\n}\n\n/**\n * @classdesc This Object holds reference to the current period's stream information when the manifest was updated.\n * @ignore\n */\nclass ManifestUpdateStreamInfo {\n /**\n * @class\n */\n constructor() {\n /**\n * Stream@id\n * @public\n */\n this.id = null;\n /**\n * Period Index\n * @public\n */\n this.index = null;\n /**\n * Stream@start\n * @public\n */\n this.start = null;\n /**\n * Stream@duration\n * @public\n */\n this.duration = null;\n }\n}\n\n/**\n * @classdesc This Object holds reference to the current representation's info when the manifest was updated.\n * @ignore\n */\nclass ManifestUpdateRepresentationInfo {\n /**\n * @class\n */\n constructor() {\n /**\n * Track@id\n * @public\n */\n this.id = null;\n /**\n * Representation Index\n * @public\n */\n this.index = null;\n /**\n * Media Type Video | Audio | FragmentedText\n * @public\n */\n this.mediaType = null;\n /**\n * Holds reference to @presentationTimeOffset\n * @public\n */\n this.presentationTimeOffset = null;\n /**\n * Holds reference to @startNumber\n * @public\n */\n this.startNumber = null;\n }\n}\n\nexport { ManifestUpdate, ManifestUpdateStreamInfo, ManifestUpdateRepresentationInfo };\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass SchedulingInfo {\n /**\n * @description This Object holds reference to the index handling of the current fragment being loaded or executed.\n */\n constructor() {\n\n /**\n * Type of stream Audio | Video | FragmentedText\n * @public\n */\n this.mediaType = null;\n /**\n * Time of the scheduling event.\n * @public\n */\n this.t = null;\n\n /**\n * Type of fragment (initialization | media)\n * @public\n */\n this.type = null;\n /**\n * Presentation start time of fragment\n * @public\n */\n this.startTime = null;\n /**\n * Availability start time of fragment\n * @public\n */\n this.availabilityStartTime = null;\n /**\n * Duration of fragment\n * @public\n */\n this.duration = null;\n /**\n * Bandwidth of fragment\n * @public\n */\n this.bandwidth = null;\n /**\n * Range of fragment\n * @public\n */\n this.range = null;\n\n /**\n * Current state of fragment\n * @public\n */\n this.state = null;\n }\n}\n\nexport default SchedulingInfo;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass RequestsQueue {\n /**\n * @description This Object holds reference to Fragment Model's request queues\n */\n constructor() {\n\n /**\n * Array of all of the requests that have begun to load\n * This request may not make it into the executed queue if it is abandon due to ABR rules for example.\n * @public\n */\n this.loadingRequests = [];\n /**\n * Array of the The requests that have completed\n * @public\n */\n this.executedRequests = [];\n }\n}\n\nexport default RequestsQueue;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants.js';\nimport MetricsConstants from '../constants/MetricsConstants.js';\nimport MetricsList from '../vo/MetricsList.js';\nimport {HTTPRequest, HTTPRequestTrace} from '../vo/metrics/HTTPRequest.js';\nimport TrackSwitch from '../vo/metrics/RepresentationSwitch.js';\nimport BufferLevel from '../vo/metrics/BufferLevel.js';\nimport BufferState from '../vo/metrics/BufferState.js';\nimport DVRInfo from '../vo/metrics/DVRInfo.js';\nimport DroppedFrames from '../vo/metrics/DroppedFrames.js';\nimport {\n ManifestUpdate,\n ManifestUpdateStreamInfo,\n ManifestUpdateRepresentationInfo\n} from '../vo/metrics/ManifestUpdate.js';\nimport SchedulingInfo from '../vo/metrics/SchedulingInfo.js';\nimport EventBus from '../../core/EventBus.js';\nimport RequestsQueue from '../vo/metrics/RequestsQueue.js';\nimport Events from '../../core/events/Events.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\nfunction MetricsModel(config) {\n\n config = config || {};\n\n const settings = config.settings;\n\n let context = this.context;\n let eventBus = EventBus(context).getInstance();\n\n let instance,\n streamMetrics;\n\n function setup() {\n streamMetrics = {};\n }\n\n function metricsChanged() {\n eventBus.trigger(Events.METRICS_CHANGED);\n }\n\n function metricChanged(mediaType) {\n eventBus.trigger(Events.METRIC_CHANGED, { mediaType: mediaType });\n metricsChanged();\n }\n\n function metricUpdated(mediaType, metricType, vo) {\n eventBus.trigger(Events.METRIC_UPDATED, { mediaType: mediaType, metric: metricType, value: vo });\n metricChanged(mediaType);\n }\n\n function metricAdded(mediaType, metricType, vo) {\n eventBus.trigger(Events.METRIC_ADDED, { mediaType: mediaType, metric: metricType, value: vo });\n metricChanged(mediaType);\n }\n\n function clearCurrentMetricsForType(type) {\n delete streamMetrics[type];\n metricChanged(type);\n }\n\n function clearAllCurrentMetrics() {\n streamMetrics = {};\n metricsChanged();\n }\n\n function getMetricsFor(type, readOnly) {\n let metrics = null;\n\n if (!type) {\n return metrics;\n }\n\n if (streamMetrics.hasOwnProperty(type)) {\n metrics = streamMetrics[type];\n } else if (!readOnly) {\n metrics = new MetricsList();\n streamMetrics[type] = metrics;\n }\n\n return metrics;\n }\n\n function pushMetrics(type, list, value) {\n let metrics = getMetricsFor(type);\n if (metrics !== null) {\n metrics[list].push(value);\n if (metrics[list].length > settings.get().streaming.metrics.maxListDepth) {\n metrics[list].shift();\n }\n }\n }\n\n function appendHttpTrace(httpRequest, s, d, b) {\n let vo = new HTTPRequestTrace();\n\n vo.s = s;\n vo.d = d;\n vo.b = b;\n\n httpRequest.trace.push(vo);\n\n if (!httpRequest.interval) {\n httpRequest.interval = 0;\n }\n\n httpRequest.interval += d;\n\n return vo;\n }\n\n function addHttpRequest(request, response, traces, cmsd) {\n let vo = new HTTPRequest();\n\n // ISO 23009-1 D.4.3 NOTE 2:\n // All entries for a given object will have the same URL and range\n // and so can easily be correlated. If there were redirects or\n // failures there will be one entry for each redirect/failure.\n // The redirect-to URL or alternative url (where multiple have been\n // provided in the MPD) will appear as the actualurl of the next\n // entry with the same url value.\n if (response.url && (response.url !== request.url)) {\n const adjustedRequest = {\n mediaType: request.mediaType,\n type: request.type,\n url: request.url,\n quality: request.quality,\n serviceLocation: null,\n range: request.range,\n startDate: request.startDate,\n firstByteDate: null,\n endDate: null,\n duration: request.duration,\n fileLoaderType: request.fileLoaderType,\n resourceTimingValues: request.resourceTimingValues\n }\n const adjustedResponse = {\n url: null,\n status: null,\n headers: null,\n\n }\n\n addHttpRequest(adjustedRequest, adjustedResponse, null, cmsd)\n vo.actualurl = response.url;\n }\n\n\n vo.tcpid = null;\n vo.type = request.type;\n vo.url = request.url;\n vo.range = request.range || null;\n vo.trequest = request.startDate;\n vo.tresponse = request.firstByteDate;\n vo.responsecode = response.status;\n vo.cmsd = cmsd;\n\n vo._tfinish = request.endDate;\n vo._stream = request.mediaType;\n vo._mediaduration = request.duration;\n vo._quality = request.quality;\n // For backward compatibility, convert response headers into string representation\n vo._responseHeaders = '';\n for (const key in response.headers) {\n vo._responseHeaders += key + ': ' + response.headers[key] + '\\r\\n';\n }\n vo._serviceLocation = request.serviceLocation || null;\n vo._fileLoaderType = request.fileLoaderType;\n vo._resourceTimingValues = request.resourceTimingValues;\n vo._streamId = request && request.representation && request.representation.mediaInfo && request.representation.mediaInfo.streamInfo ? request.representation.mediaInfo.streamInfo.id : null;\n\n if (traces) {\n traces.forEach(trace => {\n appendHttpTrace(vo, trace.s, trace.d, trace.b, trace.t);\n });\n } else {\n // The interval and trace shall be absent for redirect and failure records.\n delete vo.interval;\n delete vo.trace;\n }\n\n pushAndNotify(request.mediaType, MetricsConstants.HTTP_REQUEST, vo);\n }\n\n function addRepresentationSwitch(mediaType, t, mt, to, lto) {\n let vo = new TrackSwitch();\n\n vo.t = t;\n vo.mt = mt;\n vo.to = to;\n\n if (lto) {\n vo.lto = lto;\n } else {\n delete vo.lto;\n }\n\n pushAndNotify(mediaType, MetricsConstants.TRACK_SWITCH, vo);\n }\n\n function pushAndNotify(mediaType, metricType, metricObject) {\n pushMetrics(mediaType, metricType, metricObject);\n metricAdded(mediaType, metricType, metricObject);\n }\n\n function addBufferLevel(mediaType, t, level) {\n let vo = new BufferLevel();\n vo.t = t;\n vo.level = level;\n\n pushAndNotify(mediaType, MetricsConstants.BUFFER_LEVEL, vo);\n }\n\n function addBufferState(mediaType, state, target) {\n let vo = new BufferState();\n vo.target = target;\n vo.state = state;\n\n pushAndNotify(mediaType, MetricsConstants.BUFFER_STATE, vo);\n }\n\n function addDVRInfo(mediaType, currentTime, mpd, range) {\n let vo = new DVRInfo();\n vo.time = currentTime;\n vo.range = range;\n vo.manifestInfo = mpd;\n\n pushAndNotify(mediaType, MetricsConstants.DVR_INFO, vo);\n }\n\n function addDroppedFrames(mediaType, quality) {\n let vo = new DroppedFrames();\n let list = getMetricsFor(mediaType).DroppedFrames;\n\n if (!quality) {\n return;\n }\n\n vo.time = quality.creationTime;\n vo.droppedFrames = quality.droppedVideoFrames;\n\n if (list.length > 0 && list[list.length - 1] == vo) {\n return;\n }\n\n pushAndNotify(mediaType, MetricsConstants.DROPPED_FRAMES, vo);\n }\n\n function addSchedulingInfo(mediaType, t, type, startTime, availabilityStartTime, duration, bandwidth, range, state) {\n let vo = new SchedulingInfo();\n\n vo.mediaType = mediaType;\n vo.t = t;\n\n vo.type = type;\n vo.startTime = startTime;\n vo.availabilityStartTime = availabilityStartTime;\n vo.duration = duration;\n vo.bandwidth = bandwidth;\n vo.range = range;\n\n vo.state = state;\n\n pushAndNotify(mediaType, MetricsConstants.SCHEDULING_INFO, vo);\n }\n\n function addRequestsQueue(mediaType, loadingRequests, executedRequests) {\n let vo = new RequestsQueue();\n\n vo.loadingRequests = loadingRequests;\n vo.executedRequests = executedRequests;\n\n getMetricsFor(mediaType).RequestsQueue = vo;\n metricAdded(mediaType, MetricsConstants.REQUESTS_QUEUE, vo);\n }\n\n function addManifestUpdate(mediaType, type, requestTime, fetchTime) {\n let vo = new ManifestUpdate();\n\n vo.mediaType = mediaType;\n vo.type = type;\n vo.requestTime = requestTime; // when this manifest update was requested\n vo.fetchTime = fetchTime; // when this manifest update was received\n\n pushMetrics(Constants.STREAM, MetricsConstants.MANIFEST_UPDATE, vo);\n metricAdded(mediaType, MetricsConstants.MANIFEST_UPDATE, vo);\n }\n\n function updateManifestUpdateInfo(manifestUpdate, updatedFields) {\n if (manifestUpdate) {\n for (let field in updatedFields) {\n manifestUpdate[field] = updatedFields[field];\n }\n\n metricUpdated(manifestUpdate.mediaType, MetricsConstants.MANIFEST_UPDATE, manifestUpdate);\n }\n }\n\n function addManifestUpdateStreamInfo(manifestUpdate, id, index, start, duration) {\n if (manifestUpdate) {\n let vo = new ManifestUpdateStreamInfo();\n\n vo.id = id;\n vo.index = index;\n vo.start = start;\n vo.duration = duration;\n\n manifestUpdate.streamInfo.push(vo);\n metricUpdated(manifestUpdate.mediaType, MetricsConstants.MANIFEST_UPDATE_STREAM_INFO, manifestUpdate);\n }\n }\n\n function addManifestUpdateRepresentationInfo(manifestUpdate, representation, mediaType) {\n if (manifestUpdate && manifestUpdate.representationInfo) {\n\n const vo = new ManifestUpdateRepresentationInfo();\n vo.id = representation ? representation.id : null;\n vo.index = representation ? representation.index : null;\n vo.mediaType = mediaType;\n vo.startNumber = representation ? representation.startNumber : null;\n vo.presentationTimeOffset = representation ? representation.presentationTimeOffset : null;\n\n manifestUpdate.representationInfo.push(vo);\n metricUpdated(manifestUpdate.mediaType, MetricsConstants.MANIFEST_UPDATE_TRACK_INFO, manifestUpdate);\n }\n }\n\n function addPlayList(vo) {\n if (vo.trace && Array.isArray(vo.trace)) {\n vo.trace.forEach(trace => {\n if (trace.hasOwnProperty('subreplevel') && !trace.subreplevel) {\n delete trace.subreplevel;\n }\n });\n } else {\n delete vo.trace;\n }\n\n pushAndNotify(Constants.STREAM, MetricsConstants.PLAY_LIST, vo);\n }\n\n function addDVBErrors(vo) {\n pushAndNotify(Constants.STREAM, MetricsConstants.DVB_ERRORS, vo);\n }\n\n instance = {\n addBufferLevel,\n addBufferState,\n addDVBErrors,\n addDVRInfo,\n addDroppedFrames,\n addHttpRequest,\n addManifestUpdate,\n addManifestUpdateRepresentationInfo,\n addManifestUpdateStreamInfo,\n addPlayList,\n addRepresentationSwitch,\n addRequestsQueue,\n addSchedulingInfo,\n clearAllCurrentMetrics,\n clearCurrentMetricsForType,\n getMetricsFor,\n updateManifestUpdateInfo,\n };\n\n setup();\n return instance;\n}\n\nMetricsModel.__dashjs_factory_name = 'MetricsModel';\nexport default FactoryMaker.getSingletonFactory(MetricsModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../streaming/constants/Constants.js';\nimport {HTTPRequest} from '../streaming/vo/metrics/HTTPRequest.js';\nimport FactoryMaker from '../core/FactoryMaker.js';\nimport MetricsConstants from '../streaming/constants/MetricsConstants.js';\nimport Round10 from './utils/Round10.js';\nimport MetricsModel from '../streaming/models/MetricsModel.js';\nimport Utils from '../core/Utils.js';\nimport {PlayList, PlayListTrace} from '../streaming/vo/metrics/PlayList.js';\n\n/**\n * @module DashMetrics\n * @description The DashMetrics module can be accessed using the MediaPlayer API getDashMetrics()\n * @param {object} config\n */\n\nfunction DashMetrics(config) {\n\n config = config || {};\n\n const context = this.context;\n let instance,\n playListTraceMetricsClosed,\n playListTraceMetrics,\n playListMetrics;\n\n let metricsModel = config.metricsModel;\n\n function setup() {\n metricsModel = metricsModel || MetricsModel(context).getInstance({ settings: config.settings });\n resetInitialSettings();\n }\n\n function resetInitialSettings() {\n playListTraceMetricsClosed = true;\n playListTraceMetrics = null;\n playListMetrics = null;\n }\n\n /**\n * Returns the latest Representation switch for a given media type\n * @param {MediaType} mediaType\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentRepresentationSwitch(mediaType) {\n const metrics = metricsModel.getMetricsFor(mediaType, true);\n return getCurrent(metrics, MetricsConstants.TRACK_SWITCH);\n }\n\n /**\n * @param {MediaType} mediaType\n * @param {Date} t time of the switch event\n * @param {Date} mt media presentation time\n * @param {string} to id of representation\n * @param {string} lto if present, subrepresentation reference\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addRepresentationSwitch(mediaType, t, mt, to, lto) {\n metricsModel.addRepresentationSwitch(mediaType, t, mt, to, lto);\n }\n\n /**\n * Returns the current buffer state for a given media type\n * @param {MediaType} mediaType\n * @returns {number}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentBufferState(mediaType) {\n const metrics = metricsModel.getMetricsFor(mediaType, true);\n return getCurrent(metrics, MetricsConstants.BUFFER_STATE);\n }\n\n /**\n * Returns the current buffer level for a given media type\n * @param {MediaType} mediaType\n * @returns {number}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentBufferLevel(mediaType) {\n const metrics = metricsModel.getMetricsFor(mediaType, true);\n const metric = getCurrent(metrics, MetricsConstants.BUFFER_LEVEL);\n\n if (metric) {\n return Round10.round10(metric.level / 1000, -3);\n }\n\n return 0;\n }\n\n /**\n * @param {MediaType} mediaType\n * @param {number} t\n * @param {number} level\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addBufferLevel(mediaType, t, level) {\n metricsModel.addBufferLevel(mediaType, t, level);\n }\n\n /**\n * @param {MediaType} mediaType\n * @param {string} state\n * @param {number} target\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addBufferState(mediaType, state, target) {\n metricsModel.addBufferState(mediaType, state, target);\n }\n\n /**\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function clearAllCurrentMetrics() {\n metricsModel.clearAllCurrentMetrics();\n }\n\n /**\n * Returns the latest HTTP request for a given media type\n * @param {MediaType} mediaType\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentHttpRequest(mediaType) {\n const metrics = metricsModel.getMetricsFor(mediaType, true);\n\n if (!metrics) {\n return null;\n }\n\n const httpList = metrics.HttpList;\n let currentHttpList = null;\n\n let httpListLastIndex;\n\n if (!httpList || httpList.length <= 0) {\n return null;\n }\n\n httpListLastIndex = httpList.length - 1;\n\n while (httpListLastIndex >= 0) {\n if (httpList[httpListLastIndex].responsecode) {\n currentHttpList = httpList[httpListLastIndex];\n break;\n }\n httpListLastIndex--;\n }\n return currentHttpList;\n }\n\n /**\n * Returns all HTTP requests for a given media type\n * @param {MediaType} mediaType\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getHttpRequests(mediaType) {\n const metrics = metricsModel.getMetricsFor(mediaType, true);\n if (!metrics) {\n return [];\n }\n\n return !!metrics.HttpList ? metrics.HttpList : [];\n }\n\n /**\n * @param {MediaType} mediaType\n * @param {Array} loadingRequests\n * @param {Array} executedRequests\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addRequestsQueue(mediaType, loadingRequests, executedRequests) {\n metricsModel.addRequestsQueue(mediaType, loadingRequests, executedRequests);\n }\n\n /**\n * Returns the latest metrics for a given metric list and specific metric name\n * @param {MetricsList} metrics\n * @param {string} metricName\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrent(metrics, metricName) {\n if (!metrics) {\n return null;\n }\n const list = metrics[metricName];\n return (!list || list.length === 0) ? null : list[list.length - 1];\n }\n\n /**\n * Returns the number of dropped frames\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentDroppedFrames() {\n const metrics = metricsModel.getMetricsFor(Constants.VIDEO, true);\n return getCurrent(metrics, MetricsConstants.DROPPED_FRAMES);\n }\n\n /**\n * @param {number} quality\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addDroppedFrames(quality) {\n metricsModel.addDroppedFrames(Constants.VIDEO, quality);\n }\n\n /**\n * Returns the current scheduling info for a given media type\n * @param {MediaType} mediaType\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentSchedulingInfo(mediaType) {\n const metrics = metricsModel.getMetricsFor(mediaType, true);\n return getCurrent(metrics, MetricsConstants.SCHEDULING_INFO);\n }\n\n /**\n * @param {object} request\n * @param {string} state\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addSchedulingInfo(request, state) {\n metricsModel.addSchedulingInfo(\n request.mediaType,\n new Date(),\n request.type,\n request.startTime,\n request.availabilityStartTime,\n request.duration,\n request.bandwidth,\n request.range,\n state);\n }\n\n /**\n * Returns the current manifest update information\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentManifestUpdate() {\n const streamMetrics = metricsModel.getMetricsFor(Constants.STREAM);\n return getCurrent(streamMetrics, MetricsConstants.MANIFEST_UPDATE);\n }\n\n /**\n * @param {object} updatedFields fields to be updated\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function updateManifestUpdateInfo(updatedFields) {\n const manifestUpdate = this.getCurrentManifestUpdate();\n metricsModel.updateManifestUpdateInfo(manifestUpdate, updatedFields);\n }\n\n /**\n * @param {object} streamInfo\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addManifestUpdateStreamInfo(streamInfo) {\n if (streamInfo) {\n const manifestUpdate = this.getCurrentManifestUpdate();\n metricsModel.addManifestUpdateStreamInfo(manifestUpdate, streamInfo.id, streamInfo.index, streamInfo.start, streamInfo.duration);\n }\n }\n\n /**\n * @param {object} request\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addManifestUpdate(request) {\n metricsModel.addManifestUpdate(Constants.STREAM, request.type, request.startDate, request.endDate);\n }\n\n /**\n * @param {object} request\n * @param {string} responseUrl\n * @param {number} responseStatus\n * @param {object} responseHeaders\n * @param {object} traces\n * @param {object} cmsd\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addHttpRequest(request, responseUrl, responseStatus, responseHeaders, traces,cmsd) {\n const response = { status: responseStatus, headers: responseHeaders, url: responseUrl };\n\n metricsModel.addHttpRequest(request, response, traces, cmsd);\n }\n\n /**\n * @param {object} representation\n * @param {MediaType} mediaType\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addManifestUpdateRepresentationInfo(representation, mediaType) {\n if (representation) {\n const manifestUpdateInfo = this.getCurrentManifestUpdate();\n metricsModel.addManifestUpdateRepresentationInfo(manifestUpdateInfo, representation, mediaType);\n }\n }\n\n /**\n * Returns the current DVR window\n * @param {MediaType} mediaType\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getCurrentDVRInfo(mediaType) {\n const metrics = mediaType ? metricsModel.getMetricsFor(mediaType, true) :\n metricsModel.getMetricsFor(Constants.VIDEO, true) || metricsModel.getMetricsFor(Constants.AUDIO, true);\n return getCurrent(metrics, MetricsConstants.DVR_INFO);\n }\n\n /**\n * @param {MediaType} mediaType\n * @param {Date} currentTime time of the switch event\n * @param {object} mpd mpd reference\n * @param {object} range range of the dvr info\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addDVRInfo(mediaType, currentTime, mpd, range) {\n metricsModel.addDVRInfo(mediaType, currentTime, mpd, range);\n }\n\n /**\n * Returns the value for a specific request headers used in the latest MPD request\n * @param {string} id\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getLatestMPDRequestHeaderValueByID(id) {\n if (!id) {\n return null;\n }\n\n let headers = {};\n let httpRequestList,\n httpRequest,\n i;\n\n httpRequestList = getHttpRequests(Constants.STREAM);\n\n for (i = httpRequestList.length - 1; i >= 0; i--) {\n httpRequest = httpRequestList[i];\n\n if (httpRequest.type === HTTPRequest.MPD_TYPE) {\n headers = Utils.parseHttpHeaders(httpRequest._responseHeaders);\n break;\n }\n }\n\n const value = headers[id.toLowerCase()];\n return value === undefined ? null : value;\n }\n\n /**\n * Returns the value for a specific request headers used in the latest fragment request\n * @param {MediaType} mediaType\n * @param {string} id\n * @returns {*}\n * @memberof module:DashMetrics\n * @instance\n */\n function getLatestFragmentRequestHeaderValueByID(mediaType, id) {\n if (!id) {\n return null;\n }\n\n let headers = {};\n let httpRequest = getCurrentHttpRequest(mediaType);\n if (httpRequest) {\n headers = Utils.parseHttpHeaders(httpRequest._responseHeaders);\n }\n\n const value = headers[id.toLowerCase()];\n return value === undefined ? null : value;\n }\n\n /**\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addPlayList() {\n if (playListMetrics) {\n metricsModel.addPlayList(playListMetrics);\n playListMetrics = null;\n }\n }\n\n /**\n * Create a new playlist metric\n * @param {number} mediaStartTime\n * @param {string} startReason\n * @ignore\n */\n function createPlaylistMetrics(mediaStartTime, startReason) {\n playListMetrics = new PlayList();\n\n playListMetrics.start = new Date();\n playListMetrics.mstart = mediaStartTime;\n playListMetrics.starttype = startReason;\n }\n\n /**\n * Create a playlist trace metric\n * @param {number} representationId\n * @param {number} mediaStartTime\n * @param {number} speed\n * @ignore\n */\n function createPlaylistTraceMetrics(representationId, mediaStartTime, speed) {\n if (playListTraceMetricsClosed === true) {\n playListTraceMetricsClosed = false;\n playListTraceMetrics = new PlayListTrace();\n\n playListTraceMetrics.representationid = representationId;\n playListTraceMetrics.start = new Date();\n playListTraceMetrics.mstart = mediaStartTime;\n playListTraceMetrics.playbackspeed = speed !== null ? speed.toString() : null;\n }\n }\n\n /**\n * Update existing playlist trace metric\n * @param {object} traceToUpdate\n * @ignore\n */\n function updatePlayListTraceMetrics(traceToUpdate) {\n if (playListTraceMetrics) {\n for (let field in playListTraceMetrics) {\n playListTraceMetrics[field] = traceToUpdate[field];\n }\n }\n }\n\n /**\n * Push a new playlist trace metric\n * @param endTime\n * @param reason\n * @ignore\n */\n function pushPlayListTraceMetrics(endTime, reason) {\n if (playListTraceMetricsClosed === false && playListMetrics && playListTraceMetrics && playListTraceMetrics.start) {\n const startTime = playListTraceMetrics.start;\n playListTraceMetrics.duration = endTime.getTime() - startTime.getTime();\n playListTraceMetrics.stopreason = reason;\n playListMetrics.trace.push(playListTraceMetrics);\n playListTraceMetricsClosed = true;\n }\n }\n\n /**\n * @param {object} errors\n * @memberof module:DashMetrics\n * @instance\n * @ignore\n */\n function addDVBErrors(errors) {\n metricsModel.addDVBErrors(errors);\n }\n\n instance = {\n getCurrentRepresentationSwitch,\n getCurrentBufferState,\n getCurrentBufferLevel,\n getCurrentHttpRequest,\n getHttpRequests,\n getCurrentDroppedFrames,\n getCurrentSchedulingInfo,\n getCurrentDVRInfo,\n getCurrentManifestUpdate,\n getLatestFragmentRequestHeaderValueByID,\n getLatestMPDRequestHeaderValueByID,\n addRepresentationSwitch,\n addDVRInfo,\n updateManifestUpdateInfo,\n addManifestUpdateStreamInfo,\n addManifestUpdateRepresentationInfo,\n addManifestUpdate,\n addHttpRequest,\n addSchedulingInfo,\n addRequestsQueue,\n addBufferLevel,\n addBufferState,\n addDroppedFrames,\n addPlayList,\n addDVBErrors,\n createPlaylistMetrics,\n createPlaylistTraceMetrics,\n updatePlayListTraceMetrics,\n pushPlayListTraceMetrics,\n clearAllCurrentMetrics\n };\n\n setup();\n\n return instance;\n}\n\nDashMetrics.__dashjs_factory_name = 'DashMetrics';\nexport default FactoryMaker.getSingletonFactory(DashMetrics);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport DashConstants from '../constants/DashConstants.js';\nimport DashManifestModel from '../models/DashManifestModel.js';\nimport Settings from '../../core/Settings.js';\nimport Constants from '../../streaming/constants/Constants.js';\nimport MediaPlayerEvents from '../../streaming/MediaPlayerEvents.js';\nimport ConformanceViolationConstants from '../../streaming/constants/ConformanceViolationConstants.js';\n\nfunction TimelineConverter() {\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const settings = Settings(context).getInstance();\n\n let instance,\n dashManifestModel,\n timelineAnchorAvailabilityOffset, // In case we calculate the TSBD using _calcTimeShiftBufferWindowForDynamicTimelineManifest we use the segments as anchor times. We apply this offset when calculating if a segment is available or not.\n clientServerTimeShift;\n\n function setup() {\n dashManifestModel = DashManifestModel(context).getInstance();\n reset();\n }\n\n function initialize() {\n resetInitialSettings();\n eventBus.on(Events.UPDATE_TIME_SYNC_OFFSET, _onUpdateTimeSyncOffset, this);\n }\n\n function getClientTimeOffset() {\n return clientServerTimeShift;\n }\n\n function setClientTimeOffset(value) {\n clientServerTimeShift = value;\n }\n\n /**\n * Returns a \"now\" reference time for the client to compare the availability time of a segment against.\n * Takes the client/server drift into account\n */\n function getClientReferenceTime() {\n return Date.now() - (timelineAnchorAvailabilityOffset * 1000) + (clientServerTimeShift * 1000);\n }\n\n function _calcAvailabilityTimeFromPresentationTime(presentationEndTime, representation, isDynamic, calculateAvailabilityEndTime) {\n let availabilityTime;\n let mpd = representation.adaptation.period.mpd;\n const availabilityStartTime = mpd.availabilityStartTime;\n\n if (calculateAvailabilityEndTime) {\n //@timeShiftBufferDepth specifies the duration of the time shifting buffer that is guaranteed\n // to be available for a Media Presentation with type 'dynamic'.\n // When not present, the value is infinite.\n if (isDynamic && mpd.timeShiftBufferDepth !== Number.POSITIVE_INFINITY) {\n // SAET = SAST + TSBD + seg@duration\n availabilityTime = new Date(availabilityStartTime.getTime() + ((presentationEndTime + mpd.timeShiftBufferDepth) * 1000));\n } else {\n availabilityTime = mpd.availabilityEndTime;\n }\n } else {\n if (isDynamic) {\n // SAST = Period@start + seg@presentationStartTime + seg@duration\n // ASAST = SAST - ATO\n const availabilityTimeOffset = representation.availabilityTimeOffset;\n // presentationEndTime = Period@start + seg@presentationStartTime + Segment@duration\n availabilityTime = new Date(availabilityStartTime.getTime() + (presentationEndTime - availabilityTimeOffset) * 1000);\n } else {\n // in static mpd, all segments are available at the same time\n availabilityTime = availabilityStartTime;\n }\n }\n\n return availabilityTime;\n }\n\n function calcAvailabilityStartTimeFromPresentationTime(presentationEndTime, representation, isDynamic) {\n return _calcAvailabilityTimeFromPresentationTime(presentationEndTime, representation, isDynamic);\n }\n\n function calcAvailabilityEndTimeFromPresentationTime(presentationEndTime, representation, isDynamic) {\n return _calcAvailabilityTimeFromPresentationTime(presentationEndTime, representation, isDynamic, true);\n }\n\n function calcPresentationTimeFromWallTime(wallTime, period) {\n return ((wallTime.getTime() - period.mpd.availabilityStartTime.getTime() + clientServerTimeShift * 1000) / 1000);\n }\n\n function calcPresentationTimeFromMediaTime(mediaTime, representation) {\n const periodStart = representation.adaptation.period.start;\n const presentationOffset = representation.presentationTimeOffset;\n\n return mediaTime + (periodStart - presentationOffset);\n }\n\n function calcMediaTimeFromPresentationTime(presentationTime, representation) {\n const periodStart = representation.adaptation.period.start;\n const presentationOffset = representation.presentationTimeOffset;\n\n return presentationTime - periodStart + presentationOffset;\n }\n\n function calcWallTimeForSegment(segment, isDynamic) {\n let suggestedPresentationDelay,\n displayStartTime,\n wallTime;\n\n if (isDynamic) {\n suggestedPresentationDelay = segment.representation.adaptation.period.mpd.suggestedPresentationDelay;\n displayStartTime = segment.presentationStartTime + suggestedPresentationDelay;\n wallTime = new Date(segment.availabilityStartTime.getTime() + (displayStartTime * 1000));\n }\n\n return wallTime;\n }\n\n /**\n * Calculates the timeshiftbuffer range. This range might overlap multiple periods and is not limited to period boundaries. However, we make sure that the range is potentially covered by period.\n * @param {Array} streams\n * @param {boolean} isDynamic\n * @return {}\n */\n function calcTimeShiftBufferWindow(streams, isDynamic) {\n // Static manifests. The availability window is equal to the DVR window\n if (!isDynamic) {\n return _calcTimeshiftBufferForStaticManifest(streams);\n }\n\n // Specific use case of SegmentTimeline\n if (settings.get().streaming.timeShiftBuffer.calcFromSegmentTimeline) {\n const data = _calcTimeShiftBufferWindowForDynamicTimelineManifest(streams);\n _adjustTimelineAnchorAvailabilityOffset(data.now, data.range);\n\n return data.range;\n }\n\n return _calcTimeShiftBufferWindowForDynamicManifest(streams);\n }\n\n function _calcTimeshiftBufferForStaticManifest(streams) {\n // Static Range Finder. We iterate over all periods and return the total duration\n const range = { start: NaN, end: NaN };\n let duration = 0;\n let start = NaN;\n streams.forEach((stream) => {\n const streamInfo = stream.getStreamInfo();\n duration += streamInfo.duration;\n\n if (isNaN(start) || streamInfo.start < start) {\n start = streamInfo.start;\n }\n });\n\n range.start = start;\n range.end = start + duration;\n\n return range;\n }\n\n function _calcTimeShiftBufferWindowForDynamicManifest(streams) {\n const range = { start: NaN, end: NaN };\n\n if (!streams || streams.length === 0) {\n return range;\n }\n\n const voPeriod = streams[0].getAdapter().getRegularPeriods()[0];\n const now = calcPresentationTimeFromWallTime(new Date(), voPeriod);\n const timeShiftBufferDepth = voPeriod.mpd.timeShiftBufferDepth;\n const start = !isNaN(timeShiftBufferDepth) ? now - timeShiftBufferDepth : 0;\n // check if we find a suitable period for that starttime. Otherwise, we use the time closest to that\n range.start = _adjustTimeBasedOnPeriodRanges(streams, start);\n range.end = !isNaN(range.start) && now < range.start ? now : _adjustTimeBasedOnPeriodRanges(streams, now, true);\n\n if (!isNaN(timeShiftBufferDepth) && range.end < now - timeShiftBufferDepth) {\n range.end = NaN;\n }\n\n // If we have SegmentTimeline as a reference we can verify that the calculated DVR window is at least partially included in the DVR window exposed by the timeline.\n // If that is not the case we stick to the DVR window defined by SegmentTimeline\n if (settings.get().streaming.timeShiftBuffer.fallbackToSegmentTimeline) {\n const timelineRefData = _calcTimeShiftBufferWindowForDynamicTimelineManifest(streams);\n if (timelineRefData.range.end < range.start) {\n eventBus.trigger(MediaPlayerEvents.CONFORMANCE_VIOLATION, {\n level: ConformanceViolationConstants.LEVELS.WARNING,\n event: ConformanceViolationConstants.EVENTS.INVALID_DVR_WINDOW\n });\n _adjustTimelineAnchorAvailabilityOffset(timelineRefData.now, timelineRefData.range);\n return timelineRefData.range;\n }\n }\n\n return range;\n }\n\n function _calcTimeShiftBufferWindowForDynamicTimelineManifest(streams) {\n const range = { start: NaN, end: NaN };\n const voPeriod = streams[0].getAdapter().getRegularPeriods()[0];\n const now = calcPresentationTimeFromWallTime(new Date(), voPeriod);\n\n if (!streams || streams.length === 0) {\n return { range, now };\n }\n\n streams.forEach((stream) => {\n let voRepresentation = stream.getCurrentRepresentationForType(Constants.VIDEO);\n if (!voRepresentation) {\n voRepresentation = stream.getCurrentRepresentationForType(Constants.AUDIO)\n }\n\n // If we still got not voRepresentation we are in the startup phase and nothing was selected yet. Use the default Representation\n if (!voRepresentation) {\n const adapter = stream.getAdapter();\n const mediaInfo = adapter.getMediaInfoForType(stream.getStreamInfo(), Constants.VIDEO) || adapter.getMediaInfoForType(stream.getStreamInfo(), Constants.AUDIO);\n const voRepresentations = adapter.getVoRepresentations(mediaInfo);\n voRepresentation = voRepresentations[0];\n }\n\n let periodRange = { start: NaN, end: NaN };\n\n if (voRepresentation) {\n if (voRepresentation.segmentInfoType === DashConstants.SEGMENT_TIMELINE) {\n periodRange = _calcRangeForTimeline(voRepresentation);\n } else {\n const currentVoPeriod = voRepresentation.adaptation.period;\n periodRange.start = currentVoPeriod.start;\n periodRange.end = Math.max(now, currentVoPeriod.start + currentVoPeriod.duration);\n }\n }\n\n if (!isNaN(periodRange.start) && (isNaN(range.start) || range.start > periodRange.start)) {\n range.start = periodRange.start;\n }\n if (!isNaN(periodRange.end) && (isNaN(range.end) || range.end < periodRange.end)) {\n range.end = periodRange.end;\n }\n });\n\n\n range.end = Math.min(now, range.end);\n const adjustedEndTime = _adjustTimeBasedOnPeriodRanges(streams, range.end, true);\n\n // if range is NaN all periods are in the future. we should return range.start > range.end in this case\n range.end = isNaN(adjustedEndTime) ? range.end : adjustedEndTime;\n\n range.start = voPeriod && voPeriod.mpd && voPeriod.mpd.timeShiftBufferDepth && !isNaN(voPeriod.mpd.timeShiftBufferDepth) && !isNaN(range.end) ? Math.max(range.end - voPeriod.mpd.timeShiftBufferDepth, range.start) : range.start;\n range.start = _adjustTimeBasedOnPeriodRanges(streams, range.start);\n\n return { range, now };\n }\n\n function _adjustTimelineAnchorAvailabilityOffset(now, range) {\n timelineAnchorAvailabilityOffset = now - range.end;\n }\n\n function _adjustTimeBasedOnPeriodRanges(streams, time, isEndOfDvrWindow = false) {\n try {\n let i = 0;\n let found = false;\n let adjustedTime = NaN;\n\n while (!found && i < streams.length) {\n const streamInfo = streams[i].getStreamInfo();\n\n // We found a period which contains the target time.\n if (streamInfo.start <= time && (!isFinite(streamInfo.duration) || (streamInfo.start + streamInfo.duration >= time))) {\n adjustedTime = time;\n found = true;\n }\n\n // Adjust the time for the start of the DVR window. The current period starts after the target time. We use the starttime of this period as adjusted time\n else if (!isEndOfDvrWindow && (streamInfo.start > time && (isNaN(adjustedTime) || streamInfo.start < adjustedTime))) {\n adjustedTime = streamInfo.start;\n }\n\n // Adjust the time for the end of the DVR window. The current period ends before the targettime. We use the end time of this period as the adjusted time\n else if (isEndOfDvrWindow && ((streamInfo.start + streamInfo.duration) < time && (isNaN(adjustedTime) || (streamInfo.start + streamInfo.duration > adjustedTime)))) {\n adjustedTime = streamInfo.start + streamInfo.duration;\n }\n\n i += 1;\n }\n\n return adjustedTime;\n } catch (e) {\n return time;\n }\n }\n\n function _calcRangeForTimeline(voRepresentation) {\n const adaptation = voRepresentation.adaptation.period.mpd.manifest.Period[voRepresentation.adaptation.period.index].AdaptationSet[voRepresentation.adaptation.index];\n const representation = dashManifestModel.getRepresentationFor(voRepresentation.index, adaptation);\n const base = representation.SegmentTemplate || representation.SegmentList;\n const timeline = base.SegmentTimeline;\n const timescale = base.timescale;\n const segments = timeline.S;\n const range = { start: 0, end: 0 };\n const segmentTime = segments[0].t;\n const hasValidSegmentTime = !isNaN(segmentTime);\n const enhancedSegmentTime = hasValidSegmentTime ? segmentTime : 0;\n let d = 0;\n let segment,\n repeat,\n i,\n len;\n\n if (hasValidSegmentTime) {\n range.start = calcPresentationTimeFromMediaTime(enhancedSegmentTime / timescale, voRepresentation);\n }\n\n for (i = 0, len = segments.length; i < len; i++) {\n segment = segments[i];\n repeat = 0;\n if (segment.hasOwnProperty('r')) {\n repeat = segment.r;\n }\n d += segment.d * (1 + repeat);\n }\n\n range.end = calcPresentationTimeFromMediaTime((enhancedSegmentTime + d) / timescale, voRepresentation);\n\n return range;\n }\n\n function calcPeriodRelativeTimeFromMpdRelativeTime(representation, mpdRelativeTime) {\n const periodStartTime = representation.adaptation.period.start;\n return mpdRelativeTime - periodStartTime;\n }\n\n function _onUpdateTimeSyncOffset(e) {\n if (e.offset !== undefined && !isNaN(e.offset)) {\n setClientTimeOffset(e.offset / 1000);\n }\n }\n\n function resetInitialSettings() {\n clientServerTimeShift = 0;\n timelineAnchorAvailabilityOffset = 0;\n }\n\n function reset() {\n eventBus.off(Events.UPDATE_TIME_SYNC_OFFSET, _onUpdateTimeSyncOffset, this);\n resetInitialSettings();\n }\n\n instance = {\n initialize,\n getClientTimeOffset,\n setClientTimeOffset,\n getClientReferenceTime,\n calcAvailabilityStartTimeFromPresentationTime,\n calcAvailabilityEndTimeFromPresentationTime,\n calcPresentationTimeFromWallTime,\n calcPresentationTimeFromMediaTime,\n calcPeriodRelativeTimeFromMpdRelativeTime,\n calcMediaTimeFromPresentationTime,\n calcWallTimeForSegment,\n calcTimeShiftBufferWindow,\n reset\n };\n\n setup();\n return instance;\n}\n\nTimelineConverter.__dashjs_factory_name = 'TimelineConverter';\nexport default FactoryMaker.getSingletonFactory(TimelineConverter);\n","/* $Date: 2007-06-12 18:02:31 $ */\n\n// from: http://bannister.us/weblog/2007/06/09/simple-base64-encodedecode-javascript/\n// Handles encode/decode of ASCII and Unicode strings.\n\nvar UTF8 = {};\nUTF8.encode = function(s) {\n var u = [];\n for (var i = 0; i < s.length; ++i) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n u.push(c);\n } else if (c < 0x800) {\n u.push(0xC0 | (c >> 6));\n u.push(0x80 | (63 & c));\n } else if (c < 0x10000) {\n u.push(0xE0 | (c >> 12));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n } else {\n u.push(0xF0 | (c >> 18));\n u.push(0x80 | (63 & (c >> 12)));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n }\n }\n return u;\n};\nUTF8.decode = function(u) {\n var a = [];\n var i = 0;\n while (i < u.length) {\n var v = u[i++];\n if (v < 0x80) {\n // no need to mask byte\n } else if (v < 0xE0) {\n v = (31 & v) << 6;\n v |= (63 & u[i++]);\n } else if (v < 0xF0) {\n v = (15 & v) << 12;\n v |= (63 & u[i++]) << 6;\n v |= (63 & u[i++]);\n } else {\n v = (7 & v) << 18;\n v |= (63 & u[i++]) << 12;\n v |= (63 & u[i++]) << 6;\n v |= (63 & u[i++]);\n }\n a.push(String.fromCharCode(v));\n }\n return a.join('');\n};\n\nvar BASE64 = {};\n(function(T){\n var encodeArray = function(u) {\n var i = 0;\n var a = [];\n var n = 0 | (u.length / 3);\n while (0 < n--) {\n var v = (u[i] << 16) + (u[i+1] << 8) + u[i+2];\n i += 3;\n a.push(T.charAt(63 & (v >> 18)));\n a.push(T.charAt(63 & (v >> 12)));\n a.push(T.charAt(63 & (v >> 6)));\n a.push(T.charAt(63 & v));\n }\n if (2 == (u.length - i)) {\n var v = (u[i] << 16) + (u[i+1] << 8);\n a.push(T.charAt(63 & (v >> 18)));\n a.push(T.charAt(63 & (v >> 12)));\n a.push(T.charAt(63 & (v >> 6)));\n a.push('=');\n } else if (1 == (u.length - i)) {\n var v = (u[i] << 16);\n a.push(T.charAt(63 & (v >> 18)));\n a.push(T.charAt(63 & (v >> 12)));\n a.push('==');\n }\n return a.join('');\n }\n var R = (function(){\n var a = [];\n for (var i=0; i 0) {\n currP.spans.push({ name: currentStyle, line: line, row: r });\n line = '';\n }\n\n let currPenStateString = 'style_cea608_' + currPenState.foreground + '_' + currPenState.background;\n if (currPenState.underline) {\n currPenStateString += '_underline';\n }\n if (currPenState.italics) {\n currPenStateString += '_italics';\n }\n\n if (!styleStates.hasOwnProperty(currPenStateString)) {\n styleStates[currPenStateString] = JSON.parse(JSON.stringify(currPenState));\n }\n\n prevPenState = currPenState;\n\n currentStyle = currPenStateString;\n }\n\n line += uc.uchar;\n }\n\n if (line.trim().length > 0) {\n currP.spans.push({ name: currentStyle, line: line, row: r });\n }\n\n lastRowHasText = true;\n lastRowIndentL = rowIndent;\n } else {\n /* Row is empty */\n lastRowHasText = false;\n lastRowIndentL = -1;\n\n if (currRegion) {\n currRegion.p.push(currP);\n currP = { start: startTime, end: endTime, spans: [] };\n currRegion.y2 = r;\n currRegion.name = 'region_' + currRegion.x + '_' + currRegion.y1 + '_' + currRegion.y2;\n if (false === seenRegions.hasOwnProperty(currRegion.name)) {\n regions.push(currRegion);\n seenRegions[currRegion.name] = currRegion;\n } else {\n existingRegion = seenRegions[currRegion.name];\n existingRegion.p.contat(currRegion.p);\n }\n\n currRegion = null;\n }\n\n }\n }\n\n if (currRegion) {\n currRegion.p.push(currP);\n currRegion.y2 = r + 1;\n currRegion.name = 'region_' + currRegion.x + '_' + currRegion.y1 + '_' + currRegion.y2;\n if (false === seenRegions.hasOwnProperty(currRegion.name)) {\n regions.push(currRegion);\n seenRegions[currRegion.name] = currRegion;\n } else {\n existingRegion = seenRegions[currRegion.name];\n existingRegion.p.contat(currRegion.p);\n }\n\n currRegion = null;\n }\n\n const captionsArray = [];\n\n /* Loop thru regions */\n for (r = 0; r < regions.length; ++r) {\n const region = regions[r];\n\n const cueID = 'sub_cea608_' + (captionId++);\n const finalDiv = document.createElement('div');\n finalDiv.id = cueID;\n const cueRegionProperties = getRegionProperties(region);\n finalDiv.style.cssText = 'position: absolute; margin: 0; display: flex; box-sizing: border-box; pointer-events: none;' + cueRegionProperties;\n\n const bodyDiv = document.createElement('div');\n bodyDiv.className = 'paragraph bodyStyle';\n bodyDiv.style.cssText = getStyle(videoElement);\n\n const cueUniWrapper = document.createElement('div');\n cueUniWrapper.className = 'cueUniWrapper';\n cueUniWrapper.style.cssText = 'unicode-bidi: normal; direction: ltr;';\n\n for (let p = 0; p < region.p.length; ++p) {\n const ptag = region.p[p];\n let lastSpanRow = 0;\n for (s = 0; s < ptag.spans.length; ++s) {\n let span = ptag.spans[s];\n if (span.line.length > 0) {\n if ((s !== 0) && lastSpanRow != span.row) {\n const brElement = document.createElement('br');\n brElement.className = 'lineBreak';\n cueUniWrapper.appendChild(brElement);\n }\n let sameRow = false;\n if (lastSpanRow === span.row) {\n sameRow = true;\n }\n lastSpanRow = span.row;\n const spanStyle = styleStates[span.name];\n const spanElement = document.createElement('span');\n spanElement.className = 'spanPadding ' + span.name + ' customSpanColor';\n spanElement.style.cssText = getStyle(videoElement, spanStyle);\n /* If this is not the first span, and it's on the same\n * row as the last one */\n if ((s !== 0) && sameRow) {\n /* and it's the last span on this row */\n if (s === ptag.spans.length - 1) {\n /* trim only the right side */\n spanElement.textContent = rtrim(span.line);\n } else {\n /* don't trim at all */\n spanElement.textContent = span.line;\n }\n } else {\n /* if there is more than 1 span and this isn't the last span */\n if (ptag.spans.length > 1 && s < (ptag.spans.length - 1)) {\n /* Check if next text is on same row */\n if (span.row === ptag.spans[s + 1].row) {\n /* Next element on same row, trim start */\n spanElement.textContent = ltrim(span.line);\n } else {\n /* Different rows, trim both */\n spanElement.textContent = span.line.trim();\n }\n } else {\n spanElement.textContent = span.line.trim();\n }\n }\n cueUniWrapper.appendChild(spanElement);\n }\n }\n }\n\n bodyDiv.appendChild(cueUniWrapper);\n finalDiv.appendChild(bodyDiv);\n\n const fontSize = { 'bodyStyle': ['%', 90] };\n for (const s in styleStates) {\n if (styleStates.hasOwnProperty(s)) {\n fontSize[s] = ['%', 90];\n }\n }\n\n captionsArray.push({\n type: 'html',\n start: startTime,\n end: endTime,\n cueHTMLElement: finalDiv,\n cueID: cueID,\n cellResolution: [32, 15],\n isFromCEA608: true,\n fontSize: fontSize,\n lineHeight: {},\n linePadding: {}\n });\n }\n return captionsArray;\n }\n\n instance = {\n createHTMLCaptionsFromScreen: createHTMLCaptionsFromScreen\n };\n return instance;\n}\n\nEmbeddedTextHtmlRender.__dashjs_factory_name = 'EmbeddedTextHtmlRender';\nexport default FactoryMaker.getSingletonFactory(EmbeddedTextHtmlRender);\n","export function getSeiData(raw: DataView, startPos: number, endPos: number): DataView {\n\tconst data: number[] = [];\n\n\tfor (let cursor = startPos; cursor < endPos; cursor++) {\n\t\tif (cursor + 2 < endPos && raw.getUint8(cursor) === 0x00 && raw.getUint8(cursor + 1) === 0x00 && raw.getUint8(cursor + 2) === 0x03) {\n\t\t\tdata.push(0x00);\n\t\t\tdata.push(0x00);\n\t\t\tcursor += 2;\n\t\t} \n\t\telse {\n\t\t\tdata.push(raw.getUint8(cursor));\n\t\t}\n\t}\n\n\treturn new DataView(new Uint8Array(data).buffer);\n}\n\nexport function isCea608Sei(payloadType: number, payloadSize: number, sei: DataView, pos: number): boolean {\n\tif (payloadType !== 4 || payloadSize < 8) {\n\t\treturn false;\n\t}\n\n\tconst countryCode = sei.getUint8(pos);\n\tif (countryCode !== 0xB5) {\n\t\treturn false;\n\t}\n\n\tconst providerCode = sei.getUint16(pos + 1);\n\tif (providerCode !== 0x0031) {\n\t\treturn false;\n\t}\n\n\tconst userIdentifier = sei.getUint32(pos + 3);\n\tif (userIdentifier !== 0x47413934) {\n\t\treturn false;\n\t}\n\n\tconst userDataTypeCode = sei.getUint8(pos + 7);\n\tif (userDataTypeCode !== 0x03) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport function isCCType(type: number): boolean {\n\treturn type === 0 || type === 1;\n}\n\nexport function isNonEmptyCCData(ccData1: number, ccData2: number): boolean {\n\treturn (ccData1 & 0x7F) > 0 || (ccData2 & 0x7F) > 0;\n}\n\nexport function isSeiNalUnitType(unitType: number): boolean {\n\treturn unitType === 0x06;\n}\n\nexport function parseCta608DataFromSei(sei: DataView, fieldData: number[][]): void {\n\tlet cursor = 0;\n\twhile (cursor < sei.byteLength) {\n\t\tlet payloadType = 0;\n\t\tlet payloadSize = 0;\n\t\tlet now;\n\n\t\tdo {\n\t\t\tpayloadType += now = sei.getUint8(cursor++);\n\t\t} while (now === 0xFF);\n\t\tdo {\n\t\t\tpayloadSize += now = sei.getUint8(cursor++);\n\t\t} while (now === 0xFF);\n\n\t\tif (isCea608Sei(payloadType, payloadSize, sei, cursor)) {\n\t\t\tconst pos = cursor + 10;\n\t\t\tconst ccCount = pos + (sei.getUint8(pos - 2) & 0x1F) * 3;\n\t\t\tfor (let i = pos; i < ccCount; i += 3) {\n\t\t\t\tconst byte = sei.getUint8(i);\n\t\t\t\tif (byte & 0x04) {\n\t\t\t\t\tconst ccType = byte & 0x03;\n\t\t\t\t\tif (isCCType(ccType)) {\n\t\t\t\t\t\tconst ccData1 = sei.getUint8(i + 1);\n\t\t\t\t\t\tconst ccData2 = sei.getUint8(i + 2);\n\t\t\t\t\t\tif (isNonEmptyCCData(ccData1, ccData2)) {\n\t\t\t\t\t\t\tfieldData[ccType].push(ccData1, ccData2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcursor += payloadSize;\n\t}\n}\n","import {\n\tgetSeiData,\n\tisSeiNalUnitType,\n\tparseCta608DataFromSei,\n} from './utils/seiHelpers.js';\n\n/**\n * Extracts CEA-608 data from a given sample.\n *\n * @param raw - The DataView with media data\n * @param startPos - The start position within the DataView\n * @param sampleSize - The size of the sample in bytes\n * @returns fieldData array containing field 1 and field 2 data arrays\n *\n * @group CTA-608\n * @beta\n */\nexport function extractCta608DataFromSample(raw: DataView, startPos: number, sampleSize: number): number[][] {\n\tlet nalSize: number = 0;\n\tlet nalType: number = 0;\n\tconst fieldData: number[][] = [[], []];\n\n\tfor (let cursor = startPos; cursor < startPos + sampleSize - 5; cursor++) {\n\t\tnalSize = raw.getUint32(cursor);\n\t\tnalType = raw.getUint8(cursor + 4) & 0x1F;\n\n\t\t// Make sure that we don't go out of bounds\n\t\tif (cursor + 5 + nalSize > startPos + sampleSize) {\n\t\t\tbreak;\n\t\t}\n\n\t\t// Only process Supplemental Enhancement Information (SEI) NAL units\n\t\tif (isSeiNalUnitType(nalType)) {\n\t\t\tif (cursor + 5 + nalSize <= raw.byteLength) {\n\t\t\t\tconst seiData = getSeiData(raw, cursor + 5, cursor + 5 + nalSize);\n\t\t\t\tparseCta608DataFromSei(seiData, fieldData);\n\t\t\t}\n\t\t}\n\n\t\t// Jump to the next NAL unit\n\t\tcursor += nalSize + 3;\n\t}\n\treturn fieldData;\n}\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants.js';\nimport {HTTPRequest} from '../vo/metrics/HTTPRequest.js';\nimport TextTrackInfo from '../vo/TextTrackInfo.js';\nimport BoxParser from '../utils/BoxParser.js';\nimport CustomTimeRanges from '../utils/CustomTimeRanges.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\nimport EmbeddedTextHtmlRender from './EmbeddedTextHtmlRender.js';\nimport ISOBoxer from 'codem-isoboxer';\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport DashJSError from '../vo/DashJSError.js';\nimport Errors from '../../core/errors/Errors.js';\nimport {Cta608Parser} from '@svta/common-media-library/cta/608/Cta608Parser';\nimport {extractCta608DataFromSample} from '@svta/common-media-library/cta/608/extractCta608DataFromSample';\nimport DashConstants from '../../dash/constants/DashConstants.js';\n\nfunction TextSourceBuffer(config) {\n const errHandler = config.errHandler;\n const manifestModel = config.manifestModel;\n const mediaController = config.mediaController;\n const videoModel = config.videoModel;\n const textTracks = config.textTracks;\n const vttParser = config.vttParser;\n const vttCustomRenderingParser = config.vttCustomRenderingParser;\n const ttmlParser = config.ttmlParser;\n const streamInfo = config.streamInfo;\n const settings = config.settings;\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n let embeddedInitialized = false;\n\n let instance,\n logger,\n boxParser,\n parser,\n mediaInfos,\n fragmentModel,\n initializationSegmentReceived,\n timescale,\n fragmentedTracks,\n firstFragmentedSubtitleStart,\n currFragmentedTrackIdx,\n embeddedTracks,\n embeddedTimescale,\n embeddedLastSequenceNumber,\n lastChunkEnd,\n embeddedCea608FieldParsers,\n embeddedTextHtmlRender;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n boxParser = BoxParser(context).getInstance();\n\n resetInitialSettings();\n }\n\n function getStreamId() {\n return streamInfo.id;\n }\n\n function _resetFragmented() {\n fragmentModel = null;\n timescale = NaN;\n fragmentedTracks = [];\n firstFragmentedSubtitleStart = null;\n initializationSegmentReceived = false;\n }\n\n function resetInitialSettings() {\n _resetFragmented();\n\n mediaInfos = [];\n parser = null;\n }\n\n function initialize() {\n\n if (!embeddedInitialized) {\n _initEmbedded();\n }\n\n }\n\n /**\n * There might be media infos of different types. For instance text and fragmentedText.\n * @param {string} type\n * @param {array} mInfos\n * @param {object} fModel\n */\n function addMediaInfos(type, mInfos, fModel) {\n\n mediaInfos = mediaInfos.concat(mInfos);\n\n if (type === Constants.TEXT && mInfos[0].isFragmented && !mInfos[0].isEmbedded) {\n fragmentModel = fModel;\n instance.buffered = CustomTimeRanges(context).create();\n fragmentedTracks = mediaController.getTracksFor(Constants.TEXT, streamInfo.id).filter(track => track.isFragmented);\n const currFragTrack = mediaController.getCurrentTrackFor(Constants.TEXT, streamInfo.id);\n for (let i = 0; i < fragmentedTracks.length; i++) {\n if (fragmentedTracks[i] === currFragTrack) {\n setCurrentFragmentedTrackIdx(i);\n break;\n }\n }\n }\n\n for (let i = 0; i < mInfos.length; i++) {\n _createTextTrackInfoFromMediaInfo(mInfos[i]);\n }\n\n }\n\n /**\n * Create a new track based on the mediaInfo information\n * @param {object} mediaInfo\n * @private\n */\n function _createTextTrackInfoFromMediaInfo(mediaInfo) {\n\n // We are mapping DASH specification strings to the ones of the HTML specification.\n // See also https://html.spec.whatwg.org/multipage/media.html#text-track-kind\n const trackKindMap = {};\n trackKindMap[DashConstants.SUBTITLE] = 'subtitles'\n trackKindMap[DashConstants.CAPTION] = 'captions'\n trackKindMap[DashConstants.FORCED_SUBTITLE] = 'subtitles'\n\n const textTrackInfo = new TextTrackInfo();\n\n for (let key in mediaInfo) {\n textTrackInfo[key] = mediaInfo[key];\n }\n\n textTrackInfo.defaultTrack = getIsDefault(mediaInfo);\n textTrackInfo.isTTML = _checkTtml(mediaInfo);\n textTrackInfo.kind = _getKind(mediaInfo, trackKindMap);\n\n textTracks.addTextTrackInfo(textTrackInfo);\n }\n\n function abort() {\n }\n\n function reset() {\n resetInitialSettings();\n\n mediaInfos = [];\n boxParser = null;\n }\n\n function _onVideoChunkReceived(e) {\n const chunk = e.chunk;\n\n if (chunk.representation.mediaInfo.embeddedCaptions) {\n append(chunk.bytes, chunk);\n }\n }\n\n function _initEmbedded() {\n embeddedTracks = [];\n currFragmentedTrackIdx = null;\n embeddedTimescale = 0;\n embeddedCea608FieldParsers = [];\n embeddedLastSequenceNumber = null;\n lastChunkEnd = null;\n embeddedInitialized = true;\n embeddedTextHtmlRender = EmbeddedTextHtmlRender(context).getInstance();\n\n eventBus.on(Events.VIDEO_CHUNK_RECEIVED, _onVideoChunkReceived, instance);\n eventBus.on(Events.BUFFER_CLEARED, onVideoBufferCleared, instance);\n }\n\n function resetEmbedded() {\n eventBus.off(Events.VIDEO_CHUNK_RECEIVED, _onVideoChunkReceived, instance);\n eventBus.off(Events.BUFFER_CLEARED, onVideoBufferCleared, instance);\n if (textTracks) {\n textTracks.deleteAllTextTracks();\n }\n embeddedInitialized = false;\n embeddedTracks = [];\n embeddedCea608FieldParsers = [null, null];\n embeddedLastSequenceNumber = null;\n lastChunkEnd = null;\n }\n\n function addEmbeddedTrack(mediaInfo) {\n\n if (!embeddedInitialized) {\n return;\n }\n\n if (mediaInfo) {\n if (mediaInfo.id === Constants.CC1 || mediaInfo.id === Constants.CC3) {\n for (let i = 0; i < embeddedTracks.length; i++) {\n if (embeddedTracks[i].id === mediaInfo.id) {\n return;\n }\n }\n embeddedTracks.push(mediaInfo);\n } else {\n logger.warn('Embedded track ' + mediaInfo.id + ' not supported!');\n }\n }\n }\n\n function getConfig() {\n const config = {\n fragmentModel: fragmentModel,\n fragmentedTracks: fragmentedTracks,\n videoModel: videoModel\n };\n\n return config;\n }\n\n function setCurrentFragmentedTrackIdx(idx) {\n currFragmentedTrackIdx = idx;\n }\n\n function _checkTtml(mediaInfo) {\n return (mediaInfo.codec && mediaInfo.codec.search(Constants.STPP) >= 0) || (mediaInfo.mimeType && mediaInfo.mimeType.search(Constants.TTML) >= 0);\n }\n\n function _getKind(mediaInfo, trackKindMap) {\n let kind = (mediaInfo.roles && mediaInfo.roles.length > 0) ? trackKindMap[mediaInfo.roles[0].value] : trackKindMap.caption;\n\n kind = Object.values(trackKindMap).includes(kind) ? kind : trackKindMap.caption;\n\n return kind;\n }\n\n function append(bytes, chunk) {\n const mediaInfo = chunk.representation.mediaInfo;\n const mediaType = mediaInfo.type;\n const mimeType = mediaInfo.mimeType;\n const codecType = mediaInfo.codec || mimeType;\n\n if (!codecType) {\n logger.error('No text type defined');\n return;\n }\n\n if (mediaInfo.codec.indexOf('application/mp4') !== -1) {\n _appendFragmentedText(bytes, chunk, codecType);\n } else if (mediaType === Constants.VIDEO) {\n _appendEmbeddedText(bytes, chunk);\n } else {\n _appendText(bytes, chunk, codecType);\n }\n }\n\n function _appendFragmentedText(bytes, chunk, codecType) {\n let sampleList,\n samplesInfo;\n\n if (chunk.segmentType === 'InitializationSegment') {\n initializationSegmentReceived = true;\n timescale = boxParser.getMediaTimescaleFromMoov(bytes);\n } else {\n if (!initializationSegmentReceived) {\n return;\n }\n samplesInfo = boxParser.getSamplesInfo(bytes);\n sampleList = samplesInfo.sampleList;\n if (sampleList.length > 0) {\n firstFragmentedSubtitleStart = sampleList[0].cts - chunk.start * timescale;\n }\n\n if (codecType.search(Constants.STPP) >= 0) {\n _appendFragmentedSttp(bytes, sampleList, codecType);\n } else {\n _appendFragmentedWebVtt(bytes, sampleList);\n }\n }\n }\n\n function _appendFragmentedSttp(bytes, sampleList, codecType) {\n let i, j;\n\n parser = parser !== null ? parser : _getParser(codecType);\n\n for (i = 0; i < sampleList.length; i++) {\n const sample = sampleList[i];\n const sampleStart = sample.cts;\n const timestampOffset = _getTimestampOffset();\n const start = timestampOffset + sampleStart / timescale;\n const end = start + sample.duration / timescale;\n instance.buffered.add(start, end);\n const dataView = new DataView(bytes, sample.offset, sample.subSizes[0]);\n let ccContent = ISOBoxer.Utils.dataViewToString(dataView, Constants.UTF8);\n const images = [];\n let subOffset = sample.offset + sample.subSizes[0];\n\n for (j = 1; j < sample.subSizes.length; j++) {\n const inData = new Uint8Array(bytes, subOffset, sample.subSizes[j]);\n const raw = String.fromCharCode.apply(null, inData);\n images.push(raw);\n subOffset += sample.subSizes[j];\n }\n\n try {\n const manifest = manifestModel.getValue();\n\n // Only used for Microsoft Smooth Streaming support - caption time is relative to sample time. In this case, we apply an offset.\n const offsetTime = manifest.ttmlTimeIsRelative ? sampleStart / timescale : 0;\n const result = parser.parse(ccContent, offsetTime, (sampleStart / timescale), ((sampleStart + sample.duration) / timescale), images);\n textTracks.addCaptions(currFragmentedTrackIdx, timestampOffset, result);\n\n } catch (e) {\n fragmentModel.removeExecutedRequestsBeforeTime();\n this.remove();\n logger.error('TTML parser error: ' + e.message);\n }\n }\n }\n\n function _appendFragmentedWebVtt(bytes, sampleList) {\n let i, j, k;\n\n const captionArray = [];\n for (i = 0; i < sampleList.length; i++) {\n const sample = sampleList[i];\n sample.cts -= firstFragmentedSubtitleStart;\n const timestampOffset = _getTimestampOffset();\n const start = timestampOffset + sample.cts / timescale;\n const end = start + sample.duration / timescale;\n instance.buffered.add(start, end);\n const sampleData = bytes.slice(sample.offset, sample.offset + sample.size);\n // There are boxes inside the sampleData, so we need a ISOBoxer to get at it.\n const sampleBoxes = ISOBoxer.parseBuffer(sampleData);\n\n for (j = 0; j < sampleBoxes.boxes.length; j++) {\n const box1 = sampleBoxes.boxes[j];\n logger.debug('VTT box1: ' + box1.type);\n if (box1.type === 'vtte') {\n continue; //Empty box\n }\n if (box1.type === 'vttc') {\n logger.debug('VTT vttc boxes.length = ' + box1.boxes.length);\n let entry = {\n styles: {}\n };\n for (k = 0; k < box1.boxes.length; k++) {\n const box2 = box1.boxes[k];\n logger.debug('VTT box2: ' + box2.type);\n\n // Mandatory cue payload lines\n if (box2.type === 'payl') {\n entry.start = sample.cts / timescale;\n entry.end = (sample.cts + sample.duration) / timescale;\n entry.data = box2.cue_text;\n }\n\n // The styling information\n else if (box2.type === 'sttg' && box2.settings && box2.settings !== '') {\n try {\n const stylings = box2.settings.split(' ');\n entry.styles = vttParser.getCaptionStyles(stylings);\n } catch (e) {\n\n }\n }\n }\n if (entry && entry.data) {\n captionArray.push(entry);\n logger.debug(`VTT ${entry.start} - ${entry.end} : ${entry.data}`);\n }\n }\n }\n }\n if (captionArray.length > 0) {\n textTracks.addCaptions(currFragmentedTrackIdx, 0, captionArray);\n }\n }\n\n function _appendText(bytes, chunk, codecType) {\n let result,\n ccContent;\n\n const dataView = new DataView(bytes, 0, bytes.byteLength);\n ccContent = ISOBoxer.Utils.dataViewToString(dataView, Constants.UTF8);\n\n try {\n result = _getParser(codecType).parse(ccContent, 0);\n textTracks.addCaptions(textTracks.getCurrentTrackIdx(), 0, result);\n if (instance.buffered) {\n instance.buffered.add(chunk.start, chunk.end);\n }\n } catch (e) {\n errHandler.error(new DashJSError(Errors.TIMED_TEXT_ERROR_ID_PARSE_CODE, Errors.TIMED_TEXT_ERROR_MESSAGE_PARSE + e.message, ccContent));\n }\n }\n\n function _isDiscontinuityOfChunks(embeddedLastSequenceNumber, sequenceNumber, numSequences, lastChunkEnd, chunkStart) {\n if (embeddedLastSequenceNumber === null || sequenceNumber === null || lastChunkEnd === null || chunkStart === null) {\n return false\n }\n // Sequence number is always 1 for low latency streams\n if (sequenceNumber === embeddedLastSequenceNumber) {\n // time-based continuity check\n return lastChunkEnd !== chunkStart\n }\n return sequenceNumber !== embeddedLastSequenceNumber + numSequences;\n }\n\n function _appendEmbeddedText(bytes, chunk) {\n let i, samplesInfo;\n\n // Init segment\n if (chunk.segmentType === HTTPRequest.INIT_SEGMENT_TYPE) {\n if (embeddedTimescale === 0) {\n embeddedTimescale = boxParser.getMediaTimescaleFromMoov(bytes);\n }\n }\n\n // MediaSegment\n else if (chunk.segmentType === HTTPRequest.MEDIA_SEGMENT_TYPE) {\n\n if (embeddedTimescale === 0) {\n logger.warn('CEA-608: No timescale for embeddedTextTrack yet');\n return;\n }\n\n samplesInfo = boxParser.getSamplesInfo(bytes);\n\n const sequenceNumber = samplesInfo.lastSequenceNumber;\n const chunkStart = Math.trunc(chunk.start);\n const chunkEnd = Math.trunc(chunk.end);\n\n if (!embeddedCea608FieldParsers[0] && !embeddedCea608FieldParsers[1]) {\n _setupCeaParser();\n }\n\n if (embeddedTimescale) {\n if (_isDiscontinuityOfChunks(embeddedLastSequenceNumber, sequenceNumber, samplesInfo.numSequences, lastChunkEnd, chunkStart)) {\n for (i = 0; i < embeddedCea608FieldParsers.length; i++) {\n if (embeddedCea608FieldParsers[i]) {\n embeddedCea608FieldParsers[i].reset();\n }\n }\n }\n\n const allCcData = _extractCea608Data(bytes, samplesInfo.sampleList);\n\n for (let fieldNr = 0; fieldNr < embeddedCea608FieldParsers.length; fieldNr++) {\n const ccData = allCcData.fields[fieldNr];\n const fieldParser = embeddedCea608FieldParsers[fieldNr];\n if (fieldParser) {\n for (i = 0; i < ccData.length; i++) {\n fieldParser.addData(ccData[i][0] / embeddedTimescale, ccData[i][1]);\n }\n }\n }\n embeddedLastSequenceNumber = sequenceNumber;\n lastChunkEnd = chunkEnd;\n }\n }\n }\n\n function _setupCeaParser() {\n // Time to setup the CEA-608 parsing\n let trackIdx;\n for (let i = 0; i < embeddedTracks.length; i++) {\n trackIdx = textTracks.getTrackIdxForId(embeddedTracks[i].id);\n\n if (trackIdx === -1) {\n logger.warn('CEA-608: data before track is ready.');\n return;\n }\n\n const handler = _makeCueAdderForIndex(trackIdx);\n embeddedCea608FieldParsers[i] = new Cta608Parser(i + 1, {\n newCue: handler\n }, null);\n }\n }\n\n function _makeCueAdderForIndex(trackIndex) {\n function newCue(startTime, endTime, captionScreen) {\n let captionsArray;\n if (videoModel.getTTMLRenderingDiv()) {\n captionsArray = embeddedTextHtmlRender.createHTMLCaptionsFromScreen(videoModel.getElement(), startTime, endTime, captionScreen);\n } else {\n const text = captionScreen.getDisplayText();\n captionsArray = [{\n start: startTime,\n end: endTime,\n data: text,\n styles: {}\n }];\n }\n if (captionsArray) {\n textTracks.addCaptions(trackIndex, 0, captionsArray);\n }\n }\n\n return newCue;\n }\n\n /**\n * Extract CEA-608 data from a buffer of data.\n * @param {ArrayBuffer} data\n * @param {Array} samples cue information\n * @returns {Object|null} ccData corresponding to one segment.\n */\n function _extractCea608Data(data, samples) {\n if (samples.length === 0) {\n return null;\n }\n\n const allCcData = {\n splits: [],\n fields: [[], []]\n };\n const raw = new DataView(data);\n for (let i = 0; i < samples.length; i++) {\n const sample = samples[i];\n const ccData = extractCta608DataFromSample(raw, sample.offset, sample.size);\n\n let lastSampleTime = null;\n let idx = 0;\n for (let k = 0; k < 2; k++) {\n if (ccData[k].length > 0) {\n if (sample.cts !== lastSampleTime) {\n idx = 0;\n } else {\n idx += 1;\n }\n const timestampOffset = _getTimestampOffset();\n allCcData.fields[k].push([sample.cts + (timestampOffset * embeddedTimescale), ccData[k], idx]);\n lastSampleTime = sample.cts;\n }\n }\n }\n\n // Sort by sampleTime ascending order\n // If two packets have the same sampleTime, use them in the order\n // they were received\n allCcData.fields.forEach(function sortField(field) {\n field.sort(function (a, b) {\n if (a[0] === b[0]) {\n return a[2] - b[2];\n }\n return a[0] - b[0];\n });\n });\n\n return allCcData;\n }\n\n function _getTimestampOffset() {\n return !isNaN(instance.timestampOffset) ? instance.timestampOffset : 0;\n }\n\n function getIsDefault(mediaInfo) {\n //TODO How to tag default. currently same order as listed in manifest.\n // Is there a way to mark a text adaptation set as the default one? DASHIF meeting talk about using role which is being used for track KIND\n // Eg subtitles etc. You can have multiple role tags per adaptation Not defined in the spec yet.\n let isDefault = false;\n if (embeddedTracks.length > 1 && mediaInfo.isEmbedded) {\n isDefault = (mediaInfo.id && mediaInfo.id === Constants.CC1); // CC1 if both CC1 and CC3 exist\n } else if (embeddedTracks.length === 1) {\n if (mediaInfo.id && typeof mediaInfo.id === 'string' && mediaInfo.id.substring(0, 2) === 'CC') { // Either CC1 or CC3\n isDefault = true;\n }\n } else if (embeddedTracks.length === 0) {\n isDefault = (mediaInfo.index === mediaInfos[0].index);\n }\n return isDefault;\n }\n\n function _getParser(codecType) {\n let parser;\n if (codecType.search(Constants.VTT) >= 0) {\n parser = settings.get().streaming.text.webvtt.customRenderingEnabled && vttCustomRenderingParser ? vttCustomRenderingParser : vttParser;\n } else if (codecType.search(Constants.TTML) >= 0 || codecType.search(Constants.STPP) >= 0) {\n parser = ttmlParser;\n }\n return parser;\n }\n\n function remove(start, end) {\n //if start and end are not defined, remove all\n if ((start === undefined) && (start === end)) {\n start = instance.buffered.start(0);\n end = instance.buffered.end(instance.buffered.length - 1);\n }\n instance.buffered.remove(start, end);\n textTracks.deleteCuesFromTrackIdx(currFragmentedTrackIdx, start, end);\n }\n\n function onVideoBufferCleared(e) {\n embeddedTracks.forEach(function (track) {\n const trackIdx = textTracks.getTrackIdxForId(track.id);\n if (trackIdx >= 0) {\n textTracks.deleteCuesFromTrackIdx(trackIdx, e.from, e.to);\n }\n });\n }\n\n function resetMediaInfos() {\n mediaInfos = [];\n }\n\n instance = {\n initialize,\n addMediaInfos,\n resetMediaInfos,\n getStreamId,\n append,\n abort,\n addEmbeddedTrack,\n resetEmbedded,\n getConfig,\n setCurrentFragmentedTrackIdx,\n remove,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nTextSourceBuffer.__dashjs_factory_name = 'TextSourceBuffer';\nexport default FactoryMaker.getClassFactory(TextSourceBuffer);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants.js';\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport MediaPlayerEvents from '../../streaming/MediaPlayerEvents.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\nimport {renderHTML} from 'imsc';\n\nconst CUE_PROPS_TO_COMPARE = [\n 'text',\n 'align',\n 'fontSize',\n 'id',\n 'isd',\n 'line',\n 'lineAlign',\n 'lineHeight',\n 'linePadding',\n 'position',\n 'positionAlign',\n 'region',\n 'size',\n 'snapToLines',\n 'vertical',\n];\n\nfunction TextTracks(config) {\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n const videoModel = config.videoModel;\n const streamInfo = config.streamInfo;\n const settings = config.settings;\n\n let instance,\n logger,\n Cue,\n textTrackInfos,\n nativeTexttracks,\n currentTrackIdx,\n actualVideoLeft,\n actualVideoTop,\n actualVideoWidth,\n actualVideoHeight,\n captionContainer,\n vttCaptionContainer,\n videoSizeCheckInterval,\n fullscreenAttribute,\n displayCCOnTop,\n previousISDState,\n topZIndex,\n resizeObserver,\n hasRequestAnimationFrame,\n currentCaptionEventCue;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function initialize() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return;\n }\n\n Cue = window.VTTCue || window.TextTrackCue;\n textTrackInfos = [];\n nativeTexttracks = [];\n currentTrackIdx = -1;\n actualVideoLeft = 0;\n actualVideoTop = 0;\n actualVideoWidth = 0;\n actualVideoHeight = 0;\n captionContainer = null;\n vttCaptionContainer = null;\n videoSizeCheckInterval = null;\n displayCCOnTop = false;\n topZIndex = 2147483647;\n previousISDState = null;\n hasRequestAnimationFrame = ('requestAnimationFrame' in window);\n\n if (document.fullscreenElement !== undefined) {\n fullscreenAttribute = 'fullscreenElement'; // Standard and Edge\n } else if (document.webkitIsFullScreen !== undefined) {\n fullscreenAttribute = 'webkitIsFullScreen'; // Chrome and Safari (and Edge)\n } else if (document.msFullscreenElement) { // IE11\n fullscreenAttribute = 'msFullscreenElement';\n } else if (document.mozFullScreen) { // Firefox\n fullscreenAttribute = 'mozFullScreen';\n }\n }\n\n function getStreamId() {\n return streamInfo.id;\n }\n\n function createTracks() {\n //Sort in same order as in manifest\n textTrackInfos.sort(function (a, b) {\n return a.index - b.index;\n });\n\n captionContainer = videoModel.getTTMLRenderingDiv();\n vttCaptionContainer = videoModel.getVttRenderingDiv();\n let defaultIndex = -1;\n for (let i = 0; i < textTrackInfos.length; i++) {\n const nativeTexttrack = _createNativeTextrackElement(textTrackInfos[i]);\n\n //used to remove tracks from video element when added manually\n nativeTexttracks.push(nativeTexttrack);\n\n if (textTrackInfos[i].defaultTrack) {\n // track.default is an object property identifier that is a reserved word\n nativeTexttrack.default = true;\n defaultIndex = i;\n }\n\n const textTrack = getTrackByIdx(i);\n if (textTrack) {\n //each time a track is created, its mode should be showing by default\n //sometime, it's not on Chrome\n textTrack.mode = Constants.TEXT_SHOWING;\n if (captionContainer && (textTrackInfos[i].isTTML || textTrackInfos[i].isEmbedded)) {\n textTrack.renderingType = 'html';\n } else {\n textTrack.renderingType = 'default';\n }\n }\n\n addCaptions(i, 0, textTrackInfos[i].captionData);\n eventBus.trigger(MediaPlayerEvents.TEXT_TRACK_ADDED);\n }\n\n //set current track index in textTrackQueue array\n setCurrentTrackIdx.call(this, defaultIndex);\n\n if (defaultIndex >= 0) {\n\n let onMetadataLoaded = function () {\n const track = getTrackByIdx(defaultIndex);\n if (track && track.renderingType === 'html') {\n checkVideoSize.call(this, track, true);\n }\n eventBus.off(MediaPlayerEvents.PLAYBACK_METADATA_LOADED, onMetadataLoaded, this);\n };\n\n eventBus.on(MediaPlayerEvents.PLAYBACK_METADATA_LOADED, onMetadataLoaded, this);\n\n for (let idx = 0; idx < textTrackInfos.length; idx++) {\n const videoTextTrack = getTrackByIdx(idx);\n if (videoTextTrack) {\n const dispatchForManualRendering = settings.get().streaming.text.dispatchForManualRendering;\n videoTextTrack.mode = (idx === defaultIndex && !dispatchForManualRendering) ? Constants.TEXT_SHOWING : Constants.TEXT_HIDDEN;\n videoTextTrack.manualMode = (idx === defaultIndex) ? Constants.TEXT_SHOWING : Constants.TEXT_HIDDEN;\n }\n }\n }\n\n eventBus.trigger(Events.TEXT_TRACKS_QUEUE_INITIALIZED, {\n index: currentTrackIdx,\n tracks: textTrackInfos,\n streamId: streamInfo.id\n });\n }\n\n function _createNativeTextrackElement(element) {\n const kind = element.kind;\n const label = element.id !== undefined ? element.id : element.lang;\n const lang = element.lang;\n const isTTML = element.isTTML;\n const isEmbedded = element.isEmbedded;\n const track = videoModel.addTextTrack(kind, label, lang, isTTML, isEmbedded);\n\n return track;\n }\n\n function addTextTrackInfo(textTrackInfoVO) {\n textTrackInfos.push(textTrackInfoVO);\n }\n\n function getVideoVisibleVideoSize(viewWidth, viewHeight, videoWidth, videoHeight, aspectRatio, use80Percent) {\n const viewAspectRatio = viewWidth / viewHeight;\n const videoAspectRatio = videoWidth / videoHeight;\n\n let videoPictureWidth = 0;\n let videoPictureHeight = 0;\n\n if (viewAspectRatio > videoAspectRatio) {\n videoPictureHeight = viewHeight;\n videoPictureWidth = (videoPictureHeight / videoHeight) * videoWidth;\n } else {\n videoPictureWidth = viewWidth;\n videoPictureHeight = (videoPictureWidth / videoWidth) * videoHeight;\n }\n\n let videoPictureXAspect = 0;\n let videoPictureYAspect = 0;\n let videoPictureWidthAspect = 0;\n let videoPictureHeightAspect = 0;\n const videoPictureAspect = videoPictureWidth / videoPictureHeight;\n\n if (videoPictureAspect > aspectRatio) {\n videoPictureHeightAspect = videoPictureHeight;\n videoPictureWidthAspect = videoPictureHeight * aspectRatio;\n } else {\n videoPictureWidthAspect = videoPictureWidth;\n videoPictureHeightAspect = videoPictureWidth / aspectRatio;\n }\n videoPictureXAspect = (viewWidth - videoPictureWidthAspect) / 2;\n videoPictureYAspect = (viewHeight - videoPictureHeightAspect) / 2;\n\n if (use80Percent) {\n return {\n x: videoPictureXAspect + (videoPictureWidthAspect * 0.1),\n y: videoPictureYAspect + (videoPictureHeightAspect * 0.1),\n w: videoPictureWidthAspect * 0.8,\n h: videoPictureHeightAspect * 0.8\n }; /* Maximal picture size in videos aspect ratio */\n } else {\n return {\n x: videoPictureXAspect,\n y: videoPictureYAspect,\n w: videoPictureWidthAspect,\n h: videoPictureHeightAspect\n }; /* Maximal picture size in videos aspect ratio */\n }\n }\n\n function checkVideoSize(track, forceDrawing) {\n const clientWidth = videoModel.getClientWidth();\n const clientHeight = videoModel.getClientHeight();\n const videoWidth = videoModel.getVideoWidth();\n const videoHeight = videoModel.getVideoHeight();\n const videoOffsetTop = videoModel.getVideoRelativeOffsetTop();\n const videoOffsetLeft = videoModel.getVideoRelativeOffsetLeft();\n\n if (videoWidth !== 0 && videoHeight !== 0) {\n\n let aspectRatio = videoWidth / videoHeight;\n let use80Percent = false;\n if (track.isFromCEA608) {\n // If this is CEA608 then use predefined aspect ratio\n aspectRatio = 3.5 / 3.0;\n use80Percent = true;\n }\n\n const realVideoSize = getVideoVisibleVideoSize.call(this, clientWidth, clientHeight, videoWidth, videoHeight, aspectRatio, use80Percent);\n\n const newVideoWidth = realVideoSize.w;\n const newVideoHeight = realVideoSize.h;\n const newVideoLeft = realVideoSize.x;\n const newVideoTop = realVideoSize.y;\n\n if (newVideoWidth != actualVideoWidth || newVideoHeight != actualVideoHeight || newVideoLeft != actualVideoLeft || newVideoTop != actualVideoTop || forceDrawing) {\n actualVideoLeft = newVideoLeft + videoOffsetLeft;\n actualVideoTop = newVideoTop + videoOffsetTop;\n actualVideoWidth = newVideoWidth;\n actualVideoHeight = newVideoHeight;\n\n if (captionContainer) {\n const containerStyle = captionContainer.style;\n if (containerStyle) {\n containerStyle.left = actualVideoLeft + 'px';\n containerStyle.top = actualVideoTop + 'px';\n containerStyle.width = actualVideoWidth + 'px';\n containerStyle.height = actualVideoHeight + 'px';\n containerStyle.zIndex = (fullscreenAttribute && document[fullscreenAttribute]) || displayCCOnTop ? topZIndex : null;\n eventBus.trigger(MediaPlayerEvents.CAPTION_CONTAINER_RESIZE);\n }\n }\n\n // Video view has changed size, so resize any active cues\n const activeCues = track.activeCues;\n if (activeCues) {\n const len = activeCues.length;\n for (let i = 0; i < len; ++i) {\n const cue = activeCues[i];\n cue.scaleCue(cue);\n }\n }\n }\n }\n }\n\n function _scaleCue(activeCue) {\n const videoWidth = actualVideoWidth;\n const videoHeight = actualVideoHeight;\n let key,\n replaceValue,\n valueFontSize,\n valueLineHeight,\n elements;\n\n if (activeCue.cellResolution) {\n const cellUnit = [videoWidth / activeCue.cellResolution[0], videoHeight / activeCue.cellResolution[1]];\n if (activeCue.linePadding) {\n for (key in activeCue.linePadding) {\n if (activeCue.linePadding.hasOwnProperty(key)) {\n const valueLinePadding = activeCue.linePadding[key];\n replaceValue = (valueLinePadding * cellUnit[0]).toString();\n // Compute the CellResolution unit in order to process properties using sizing (fontSize, linePadding, etc).\n const elementsSpan = document.getElementsByClassName('spanPadding');\n for (let i = 0; i < elementsSpan.length; i++) {\n elementsSpan[i].style.cssText = elementsSpan[i].style.cssText.replace(/(padding-left\\s*:\\s*)[\\d.,]+(?=\\s*px)/gi, '$1' + replaceValue);\n elementsSpan[i].style.cssText = elementsSpan[i].style.cssText.replace(/(padding-right\\s*:\\s*)[\\d.,]+(?=\\s*px)/gi, '$1' + replaceValue);\n }\n }\n }\n }\n\n if (activeCue.fontSize) {\n for (key in activeCue.fontSize) {\n if (activeCue.fontSize.hasOwnProperty(key)) {\n if (activeCue.fontSize[key][0] === '%') {\n valueFontSize = activeCue.fontSize[key][1] / 100;\n } else if (activeCue.fontSize[key][0] === 'c') {\n valueFontSize = activeCue.fontSize[key][1];\n }\n\n replaceValue = (valueFontSize * cellUnit[1]).toString();\n\n if (key !== 'defaultFontSize') {\n elements = document.getElementsByClassName(key);\n } else {\n elements = document.getElementsByClassName('paragraph');\n }\n\n for (let j = 0; j < elements.length; j++) {\n elements[j].style.cssText = elements[j].style.cssText.replace(/(font-size\\s*:\\s*)[\\d.,]+(?=\\s*px)/gi, '$1' + replaceValue);\n }\n }\n }\n\n if (activeCue.lineHeight) {\n for (key in activeCue.lineHeight) {\n if (activeCue.lineHeight.hasOwnProperty(key)) {\n if (activeCue.lineHeight[key][0] === '%') {\n valueLineHeight = activeCue.lineHeight[key][1] / 100;\n } else if (activeCue.fontSize[key][0] === 'c') {\n valueLineHeight = activeCue.lineHeight[key][1];\n }\n\n replaceValue = (valueLineHeight * cellUnit[1]).toString();\n elements = document.getElementsByClassName(key);\n for (let k = 0; k < elements.length; k++) {\n elements[k].style.cssText = elements[k].style.cssText.replace(/(line-height\\s*:\\s*)[\\d.,]+(?=\\s*px)/gi, '$1' + replaceValue);\n }\n }\n }\n }\n }\n }\n\n if (activeCue.isd) {\n let htmlCaptionDiv = document.getElementById(activeCue.cueID);\n if (htmlCaptionDiv) {\n captionContainer.removeChild(htmlCaptionDiv);\n }\n _renderCaption(activeCue);\n }\n }\n\n function _resolveImageSrc(cue, src) {\n const imsc1ImgUrnTester = /^(urn:)(mpeg:[a-z0-9][a-z0-9-]{0,31}:)(subs:)([0-9]+)$/;\n const smpteImgUrnTester = /^#(.*)$/;\n if (imsc1ImgUrnTester.test(src)) {\n const match = imsc1ImgUrnTester.exec(src);\n const imageId = parseInt(match[4], 10) - 1;\n const imageData = btoa(cue.images[imageId]);\n const imageSrc = 'data:image/png;base64,' + imageData;\n return imageSrc;\n } else if (smpteImgUrnTester.test(src)) {\n const match = smpteImgUrnTester.exec(src);\n const imageId = match[1];\n const imageSrc = 'data:image/png;base64,' + cue.embeddedImages[imageId];\n return imageSrc;\n } else {\n return src;\n }\n }\n\n function _renderCaption(cue) {\n if (captionContainer) {\n clearCaptionContainer.call(this);\n\n const finalCue = document.createElement('div');\n captionContainer.appendChild(finalCue);\n\n previousISDState = renderHTML(\n cue.isd,\n finalCue,\n function (src) {\n return _resolveImageSrc(cue, src)\n },\n captionContainer.clientHeight,\n captionContainer.clientWidth,\n settings.get().streaming.text.imsc.displayForcedOnlyMode,\n function (err) {\n logger.info('renderCaption :', err) /*TODO: add ErrorHandler management*/\n },\n previousISDState,\n settings.get().streaming.text.imsc.enableRollUp\n );\n finalCue.id = cue.cueID;\n eventBus.trigger(MediaPlayerEvents.CAPTION_RENDERED, { captionDiv: finalCue, currentTrackIdx });\n }\n }\n\n // Check that a new cue immediately follows the previous cue\n function _areCuesAdjacent(cue, prevCue) {\n if (!prevCue) {\n return false;\n }\n // Check previous cue endTime with current cue startTime\n // (should we consider an epsilon margin? for example to get around rounding issues)\n return prevCue.endTime >= cue.startTime;\n }\n\n // Check if cue content is identical. If it is, extend the previous cue.\n function _extendLastCue(cue, prevCue) {\n if (!settings.get().streaming.text.extendSegmentedCues) {\n return false;\n }\n\n if (!_cuesContentAreEqual(prevCue, cue, CUE_PROPS_TO_COMPARE)) {\n return false;\n }\n\n prevCue.endTime = Math.max(prevCue.endTime, cue.endTime);\n return true;\n }\n\n function _cuesContentAreEqual(cue1, cue2, props) {\n for (let i = 0; i < props.length; i++) {\n const key = props[i];\n if (JSON.stringify(cue1[key]) !== JSON.stringify(cue2[key])) {\n return false;\n }\n }\n return true;\n }\n\n function _resolveImagesInContents(cue, contents) {\n if (!contents) {\n return;\n }\n contents.forEach(c => {\n if (c.kind && c.kind === 'image') {\n c.src = _resolveImageSrc(cue, c.src);\n }\n _resolveImagesInContents(cue, c.contents);\n });\n }\n\n /*\n * Add captions to track, store for later adding, or add captions added before\n */\n function addCaptions(trackIdx, timeOffset, captionData) {\n const track = getTrackByIdx(trackIdx);\n const dispatchForManualRendering = settings.get().streaming.text.dispatchForManualRendering;\n\n if (!track) {\n return;\n }\n\n if (!Array.isArray(captionData) || captionData.length === 0) {\n return;\n }\n\n for (let item = 0; item < captionData.length; item++) {\n let cue = null;\n const currentItem = captionData[item];\n\n track.cellResolution = currentItem.cellResolution;\n track.isFromCEA608 = currentItem.isFromCEA608;\n\n if (!isNaN(currentItem.start) && !isNaN(currentItem.end)) {\n if (dispatchForManualRendering) {\n cue = _handleCaptionEvents(currentItem, timeOffset);\n } else if (_isHTMLCue(currentItem) && captionContainer) {\n cue = _handleHtmlCaption(currentItem, timeOffset, track)\n } else if (currentItem.data) {\n cue = _handleNonHtmlCaption(currentItem, timeOffset, track)\n }\n }\n\n try {\n if (cue) {\n if (!cueInTrack(track, cue)) {\n if (settings.get().streaming.text.webvtt.customRenderingEnabled) {\n if (!track.manualCueList) {\n track.manualCueList = [];\n }\n track.manualCueList.push(cue);\n } else {\n // Handle adjacent cues\n let prevCue;\n if (track.cues && track.cues.length !== 0) {\n prevCue = track.cues[track.cues.length - 1];\n }\n\n if (_areCuesAdjacent(cue, prevCue)) {\n if (!_extendLastCue(cue, prevCue)) {\n /* If cues are adjacent but not identical (extended), let the render function of the next cue\n * clear up the captionsContainer so removal and appending are instantaneous.\n * Only do this for imsc subs (where isd is present).\n */\n if (prevCue.isd) {\n prevCue.onexit = function () {\n };\n }\n // If cues are added when the track is disabled they can still persist in memory\n if (track.mode !== Constants.TEXT_DISABLED) {\n track.addCue(cue);\n }\n }\n } else {\n if (track.mode !== Constants.TEXT_DISABLED) {\n track.addCue(cue);\n }\n }\n }\n }\n\n // Remove old cues\n const bufferToKeep = settings.get().streaming.buffer.bufferToKeep;\n const currentTime = videoModel.getTime();\n _deleteOutdatedTrackCues(track, 0, currentTime - bufferToKeep);\n } else {\n logger.error('Impossible to display subtitles. You might have missed setting a TTML rendering div via player.attachTTMLRenderingDiv(TTMLRenderingDiv)');\n }\n } catch (e) {\n // Edge crash, delete everything and start adding again\n // @see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11979877/\n _deleteTrackCues(track);\n track.addCue(cue);\n throw e;\n }\n }\n }\n\n function _handleCaptionEvents(currentItem, timeOffset) {\n let cue = _getCueInformation(currentItem, timeOffset)\n\n cue.onenter = function () {\n // HTML Tracks don't trigger the onexit event when a new cue is entered,\n // we need to manually trigger it\n if (_isHTMLCue(currentItem) && currentCaptionEventCue && currentCaptionEventCue.cueID !== cue.cueID) {\n _triggerCueExit(currentCaptionEventCue);\n }\n // We need to delete the type attribute to be able to dispatch via th event bus\n delete cue.type;\n\n currentCaptionEventCue = cue;\n _triggerCueEnter(cue);\n }\n\n cue.onexit = function () {\n _triggerCueExit(cue);\n currentCaptionEventCue = null;\n }\n\n return cue;\n }\n\n function _triggerCueEnter(cue) {\n eventBus.trigger(MediaPlayerEvents.CUE_ENTER, cue);\n }\n\n function _triggerCueExit(cue) {\n eventBus.trigger(MediaPlayerEvents.CUE_EXIT, {\n cueID: cue.cueID\n });\n }\n\n function _handleHtmlCaption(currentItem, timeOffset, track) {\n const self = this;\n let cue = _getCueInformation(currentItem, timeOffset)\n\n captionContainer.style.left = actualVideoLeft + 'px';\n captionContainer.style.top = actualVideoTop + 'px';\n captionContainer.style.width = actualVideoWidth + 'px';\n captionContainer.style.height = actualVideoHeight + 'px';\n\n cue.onenter = function () {\n if (track.mode === Constants.TEXT_SHOWING) {\n if (this.isd) {\n if (hasRequestAnimationFrame) {\n // Ensure everything in _renderCaption happens in the same frame\n requestAnimationFrame(() => _renderCaption(this));\n } else {\n _renderCaption(this)\n }\n logger.debug('Cue enter id:' + this.cueID);\n } else {\n captionContainer.appendChild(this.cueHTMLElement);\n _scaleCue.call(self, this);\n eventBus.trigger(MediaPlayerEvents.CAPTION_RENDERED, {\n captionDiv: this.cueHTMLElement,\n currentTrackIdx\n });\n }\n }\n };\n\n // For imsc subs, this could be reassigned to not do anything if there is a cue that immediately follows this one\n cue.onexit = function () {\n if (captionContainer) {\n const divs = captionContainer.childNodes;\n for (let i = 0; i < divs.length; ++i) {\n if (divs[i].id === this.cueID) {\n logger.debug('Cue exit id:' + divs[i].id);\n captionContainer.removeChild(divs[i]);\n --i;\n }\n }\n }\n };\n\n return cue;\n }\n\n function _handleNonHtmlCaption(currentItem, timeOffset, track) {\n let cue = _getCueInformation(currentItem, timeOffset)\n cue.isActive = false;\n\n if (currentItem.styles) {\n try {\n if (currentItem.styles.align !== undefined && 'align' in cue) {\n cue.align = currentItem.styles.align;\n }\n if (currentItem.styles.line !== undefined && 'line' in cue) {\n cue.line = currentItem.styles.line;\n }\n if (currentItem.styles.snapToLines !== undefined && 'snapToLines' in cue) {\n cue.snapToLines = currentItem.styles.snapToLines;\n }\n if (currentItem.styles.position !== undefined && 'position' in cue) {\n cue.position = currentItem.styles.position;\n }\n if (currentItem.styles.size !== undefined && 'size' in cue) {\n cue.size = currentItem.styles.size;\n }\n } catch (e) {\n logger.error(e);\n }\n }\n\n cue.onenter = function () {\n if (track.mode === Constants.TEXT_SHOWING) {\n eventBus.trigger(MediaPlayerEvents.CAPTION_RENDERED, { currentTrackIdx });\n }\n };\n\n return cue;\n }\n\n function _isHTMLCue(cue) {\n return (cue.type === 'html')\n }\n\n function _getCueInformation(currentItem, timeOffset) {\n if (_isHTMLCue(currentItem)) {\n return _getCueInformationForHtml(currentItem, timeOffset);\n }\n\n return _getCueInformationForNonHtml(currentItem, timeOffset);\n }\n\n function _getCueInformationForHtml(currentItem, timeOffset) {\n let cue = new Cue(currentItem.start + timeOffset, currentItem.end + timeOffset, '');\n cue.cueHTMLElement = currentItem.cueHTMLElement;\n cue.isd = currentItem.isd;\n cue.images = currentItem.images;\n cue.embeddedImages = currentItem.embeddedImages;\n cue.cueID = currentItem.cueID;\n cue.scaleCue = _scaleCue.bind(self);\n //useful parameters for cea608 subtitles, not for TTML one.\n cue.cellResolution = currentItem.cellResolution;\n cue.lineHeight = currentItem.lineHeight;\n cue.linePadding = currentItem.linePadding;\n cue.fontSize = currentItem.fontSize;\n\n // Resolve images sources\n if (cue.isd) {\n _resolveImagesInContents(cue, cue.isd.contents);\n }\n\n return cue;\n }\n\n function _getCueInformationForNonHtml(currentItem, timeOffset) {\n let cue = new Cue(currentItem.start - timeOffset, currentItem.end - timeOffset, currentItem.data);\n cue.cueID = `${cue.startTime}_${cue.endTime}`;\n return cue;\n }\n\n function manualCueProcessing(time) {\n const activeTracks = _getManualActiveTracks();\n\n if (activeTracks && activeTracks.length > 0) {\n const targetTrack = activeTracks[0];\n const cues = targetTrack.manualCueList;\n\n if (cues && cues.length > 0) {\n cues.forEach((cue) => {\n // Render cue if target time is reached and not in active state\n if (cue.startTime <= time && cue.endTime >= time && !cue.isActive) {\n cue.isActive = true;\n if (settings.get().streaming.text.dispatchForManualRendering) {\n _triggerCueEnter(cue);\n } else {\n // eslint-disable-next-line no-undef\n WebVTT.processCues(window, [cue], vttCaptionContainer, cue.cueID);\n }\n } else if (cue.isActive && (cue.startTime > time || cue.endTime < time)) {\n cue.isActive = false;\n if (settings.get().streaming.text.dispatchForManualRendering) {\n _triggerCueExit(cue);\n } else {\n _removeManualCue(cue);\n }\n }\n })\n }\n }\n }\n\n function _removeManualCue(cue) {\n if (vttCaptionContainer) {\n const divs = vttCaptionContainer.childNodes;\n for (let i = 0; i < divs.length; ++i) {\n if (divs[i].id === cue.cueID) {\n vttCaptionContainer.removeChild(divs[i]);\n --i;\n }\n }\n }\n }\n\n function disableManualTracks() {\n const activeTracks = _getManualActiveTracks();\n\n if (activeTracks && activeTracks.length > 0) {\n const targetTrack = activeTracks[0];\n const cues = targetTrack.manualCueList;\n\n\n if (cues && cues.length > 0) {\n cues.forEach((cue) => {\n if (cue.isActive) {\n cue.isActive = false;\n if (settings.get().streaming.text.dispatchForManualRendering) {\n _triggerCueExit(cue);\n } else if (vttCaptionContainer) {\n const divs = vttCaptionContainer.childNodes;\n for (let i = 0; i < divs.length; ++i) {\n if (divs[i].id === cue.cueID) {\n vttCaptionContainer.removeChild(divs[i]);\n --i;\n }\n }\n }\n }\n })\n }\n }\n }\n\n function _getManualActiveTracks() {\n const tracks = videoModel.getTextTracks();\n const activeTracks = []\n\n for (const track of tracks) {\n if (track.manualMode === Constants.TEXT_SHOWING) {\n activeTracks.push(track);\n }\n }\n return activeTracks;\n }\n\n function getTrackByIdx(idx) {\n return idx >= 0 && textTrackInfos[idx] ?\n videoModel.getTextTrack(textTrackInfos[idx].kind, textTrackInfos[idx].id, textTrackInfos[idx].lang, textTrackInfos[idx].isTTML, textTrackInfos[idx].isEmbedded) : null;\n }\n\n function getCurrentTrackIdx() {\n return currentTrackIdx;\n }\n\n function getTrackIdxForId(trackId) {\n let idx = -1;\n for (let i = 0; i < textTrackInfos.length; i++) {\n if (textTrackInfos[i].id === trackId) {\n idx = i;\n break;\n }\n }\n\n return idx;\n }\n\n function setCurrentTrackIdx(idx) {\n if (idx === currentTrackIdx) {\n return;\n }\n currentTrackIdx = idx;\n const track = getTrackByIdx(currentTrackIdx);\n setCueStyleOnTrack.call(this, track);\n\n if (videoSizeCheckInterval) {\n clearInterval(videoSizeCheckInterval);\n videoSizeCheckInterval = null;\n }\n\n if (track && track.renderingType === 'html') {\n checkVideoSize.call(this, track, true);\n if (window.ResizeObserver) {\n resizeObserver = new window.ResizeObserver(() => {\n checkVideoSize.call(this, track, true);\n });\n resizeObserver.observe(videoModel.getElement());\n } else {\n videoSizeCheckInterval = setInterval(checkVideoSize.bind(this, track), 500);\n }\n }\n }\n\n function setCueStyleOnTrack(track) {\n clearCaptionContainer.call(this);\n if (track) {\n if (track.renderingType === 'html') {\n setNativeCueStyle.call(this);\n } else {\n removeNativeCueStyle.call(this);\n }\n } else {\n removeNativeCueStyle.call(this);\n }\n }\n\n function cueInTrack(track, cue) {\n if (!track.cues) {\n return false;\n }\n for (let i = 0; i < track.cues.length; i++) {\n if ((track.cues[i].startTime === cue.startTime) &&\n (track.cues[i].endTime === cue.endTime)) {\n return true;\n }\n }\n return false;\n }\n\n function cueInRange(cue, start, end, strict = true) {\n if (!cue) {\n return false\n }\n return (isNaN(start) || (strict ? cue.startTime : cue.endTime) >= start) && (isNaN(end) || (strict ? cue.endTime : cue.startTime) <= end);\n }\n\n function _deleteOutdatedTrackCues(track, start, end) {\n\n if (end < start) {\n return;\n }\n\n if (track && (track.cues || track.manualCueList)) {\n const mode = track.cues && track.cues.length > 0 ? 'native' : 'custom';\n const cues = mode === 'native' ? track.cues : track.manualCueList;\n\n if (!cues || cues.length === 0) {\n return;\n }\n const lastIdx = cues.length - 1;\n\n for (let r = lastIdx; r >= 0; r--) {\n if (cueInRange(cues[r], start, end, true) && !_isCueActive(cues[r])) {\n if (mode === 'native') {\n track.removeCue(cues[r]);\n } else {\n _removeManualCue(cues[r]);\n delete track.manualCueList[r]\n }\n }\n }\n }\n }\n\n function _deleteTrackCues(track, start, end, strict = true) {\n if (track && (track.cues || track.manualCueList)) {\n const mode = track.cues && track.cues.length > 0 ? 'native' : 'custom';\n const cues = mode === 'native' ? track.cues : track.manualCueList;\n\n if (!cues || cues.length === 0) {\n return;\n }\n const lastIdx = cues.length - 1;\n\n for (let r = lastIdx; r >= 0; r--) {\n if (cueInRange(cues[r], start, end, strict)) {\n if (mode === 'native') {\n if (cues[r].onexit) {\n cues[r].onexit();\n }\n track.removeCue(cues[r]);\n } else {\n _removeManualCue(cues[r]);\n delete track.manualCueList[r]\n }\n }\n }\n }\n }\n\n function _isCueActive(cue) {\n const currentTime = videoModel.getTime();\n\n return currentTime >= cue.startTime && currentTime <= cue.endTime\n }\n\n function deleteCuesFromTrackIdx(trackIdx, start, end) {\n const track = getTrackByIdx(trackIdx);\n if (track) {\n _deleteTrackCues(track, start, end);\n }\n }\n\n function deleteAllTextTracks() {\n const ln = nativeTexttracks ? nativeTexttracks.length : 0;\n for (let i = 0; i < ln; i++) {\n const track = getTrackByIdx(i);\n if (track) {\n _deleteTrackCues.call(this, track, streamInfo.start, streamInfo.start + streamInfo.duration, false);\n }\n }\n nativeTexttracks = [];\n textTrackInfos = [];\n if (videoSizeCheckInterval) {\n clearInterval(videoSizeCheckInterval);\n videoSizeCheckInterval = null;\n }\n if (resizeObserver && videoModel) {\n resizeObserver.unobserve(videoModel.getElement());\n resizeObserver = null;\n }\n currentTrackIdx = -1;\n clearCaptionContainer.call(this);\n }\n\n /* Set native cue style to transparent background to avoid it being displayed. */\n function setNativeCueStyle() {\n let styleElement = document.getElementById('native-cue-style');\n if (styleElement) {\n return; //Already set\n }\n\n styleElement = document.createElement('style');\n styleElement.id = 'native-cue-style';\n document.head.appendChild(styleElement);\n const stylesheet = styleElement.sheet;\n const video = videoModel.getElement();\n try {\n if (video) {\n if (video.id) {\n stylesheet.insertRule('#' + video.id + '::cue {background: transparent}', 0);\n } else if (video.classList.length !== 0) {\n stylesheet.insertRule('.' + video.className + '::cue {background: transparent}', 0);\n } else {\n stylesheet.insertRule('video::cue {background: transparent}', 0);\n }\n }\n } catch (e) {\n logger.info('' + e.message);\n }\n }\n\n /* Remove the extra cue style with transparent background for native cues. */\n function removeNativeCueStyle() {\n const styleElement = document.getElementById('native-cue-style');\n if (styleElement) {\n document.head.removeChild(styleElement);\n }\n }\n\n function clearCaptionContainer() {\n if (captionContainer) {\n while (captionContainer.firstChild) {\n captionContainer.removeChild(captionContainer.firstChild);\n }\n }\n }\n\n function setModeForTrackIdx(idx, mode) {\n const track = getTrackByIdx(idx);\n if (track && track.mode !== mode) {\n track.mode = mode;\n }\n if (track && track.manualMode !== mode) {\n track.manualMode = mode;\n }\n }\n\n function getCurrentTextTrackInfo() {\n return textTrackInfos[currentTrackIdx];\n }\n\n function getTextTrackInfos() {\n return textTrackInfos\n }\n\n instance = {\n addCaptions,\n addTextTrackInfo,\n createTracks,\n deleteAllTextTracks,\n deleteCuesFromTrackIdx,\n disableManualTracks,\n getCurrentTrackIdx,\n getCurrentTextTrackInfo,\n getStreamId,\n getTextTrackInfos,\n getTrackIdxForId,\n initialize,\n manualCueProcessing,\n setCurrentTrackIdx,\n setModeForTrackIdx,\n };\n\n setup();\n\n return instance;\n}\n\nTextTracks.__dashjs_factory_name = 'TextTracks';\nexport default FactoryMaker.getClassFactory(TextTracks);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\n\nconst WEBVTT = 'WEBVTT';\n\nfunction VTTParser() {\n const context = this.context;\n\n let instance,\n logger,\n regExNewLine,\n regExToken,\n regExWhiteSpace,\n regExWhiteSpaceWordBoundary;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n regExNewLine = /(?:\\r\\n|\\r|\\n)/gm;\n regExToken = /-->/;\n regExWhiteSpace = /(^[\\s]+|[\\s]+$)/g;\n regExWhiteSpaceWordBoundary = /\\s\\b/g;\n }\n\n function parse(data) {\n const captionArray = [];\n let len,\n lastStartTime;\n\n if (!data) {\n return captionArray;\n }\n\n data = data.split(regExNewLine);\n len = data.length;\n lastStartTime = -1;\n\n for (let i = 0; i < len; i++) {\n let item = data[i];\n\n if (item.length > 0 && item !== WEBVTT) {\n if (item.match(regExToken)) {\n const attributes = parseItemAttributes(item);\n const cuePoints = attributes.cuePoints;\n const styles = attributes.styles;\n const text = getSublines(data, i + 1);\n const startTime = convertCuePointTimes(cuePoints[0].replace(regExWhiteSpace, ''));\n const endTime = convertCuePointTimes(cuePoints[1].replace(regExWhiteSpace, ''));\n\n if ((!isNaN(startTime) && !isNaN(endTime)) && startTime >= lastStartTime && endTime > startTime) {\n if (text !== '') {\n lastStartTime = startTime;\n //TODO Make VO external so other parsers can use.\n captionArray.push({\n start: startTime,\n end: endTime,\n data: text,\n styles: styles\n });\n } else {\n logger.error('Skipping cue due to empty/malformed cue text');\n }\n } else {\n logger.error('Skipping cue due to incorrect cue timing');\n }\n }\n }\n }\n\n return captionArray;\n }\n\n function convertCuePointTimes(time) {\n const timeArray = time.split(':');\n const len = timeArray.length - 1;\n\n time = parseInt(timeArray[len - 1], 10) * 60 + parseFloat(timeArray[len]);\n\n if (len === 2) {\n time += parseInt(timeArray[0], 10) * 3600;\n }\n\n return time;\n }\n\n function parseItemAttributes(data) {\n const vttCuePoints = data.split(regExToken);\n const arr = vttCuePoints[1].split(regExWhiteSpaceWordBoundary);\n arr.shift(); //remove first array index it is empty...\n vttCuePoints[1] = arr[0];\n arr.shift();\n return { cuePoints: vttCuePoints, styles: getCaptionStyles(arr) };\n }\n\n function getCaptionStyles(arr) {\n const styleObject = {};\n arr.forEach(function (element) {\n if (element.split(/:/).length > 1) {\n let val = element.split(/:/)[1];\n let isPercentage = false;\n if (val && val.search(/%/) != -1) {\n isPercentage = true;\n val = parseInt(val.replace(/%/, ''), 10);\n }\n if (element.match(/align/) || element.match(/A/)) {\n styleObject.align = val;\n }\n if (element.match(/line/) || element.match(/L/)) {\n styleObject.line = val === 'auto' ? val : parseInt(val, 10);\n if (isPercentage) {\n styleObject.snapToLines = false;\n }\n }\n if (element.match(/position/) || element.match(/P/)) {\n styleObject.position = val;\n }\n if (element.match(/size/) || element.match(/S/)) {\n styleObject.size = val;\n }\n }\n });\n\n return styleObject;\n }\n\n /*\n * VTT can have multiple lines to display per cuepoint.\n */\n function getSublines(data, idx) {\n let i = idx;\n\n let subline = '';\n let lineData = '';\n let lineCount;\n\n while (data[i] !== '' && i < data.length) {\n i++;\n }\n\n lineCount = i - idx;\n if (lineCount > 1) {\n for (let j = 0; j < lineCount; j++) {\n lineData = data[(idx + j)];\n if (!lineData.match(regExToken)) {\n subline += lineData;\n if (j !== lineCount - 1) {\n subline += '\\n';\n }\n } else {\n // caption text should not have '-->' in it\n subline = '';\n break;\n }\n }\n } else {\n lineData = data[idx];\n if (!lineData.match(regExToken)) {\n subline = lineData;\n }\n }\n return subline;\n }\n\n instance = {\n parse: parse,\n getCaptionStyles\n };\n\n setup();\n return instance;\n}\n\nVTTParser.__dashjs_factory_name = 'VTTParser';\nexport default FactoryMaker.getSingletonFactory(VTTParser);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\n\nfunction VttCustomRenderingParser() {\n\n let instance,\n vttjs;\n\n function setup() {\n try {\n if (window && window.WebVTT && window.WebVTT.Parser) {\n vttjs = new window.WebVTT.Parser(\n window,\n window.vttjs,\n window.WebVTT.StringDecoder()\n );\n }\n } catch (e) {\n\n }\n }\n\n function parse(data) {\n let cues = [];\n vttjs.oncue = function (cue) {\n cue.start = cue.startTime;\n cue.end = cue.endTime;\n cue.data = cue.text;\n cue.styles = {\n align: cue.align,\n line: cue.line,\n position: cue.position,\n size: cue.size\n }\n cues.push(cue);\n };\n vttjs.parse(data);\n\n return cues;\n }\n\n instance = {\n parse\n };\n\n setup();\n return instance;\n}\n\nVttCustomRenderingParser.__dashjs_factory_name = 'VttCustomRenderingParser';\nexport default FactoryMaker.getSingletonFactory(VttCustomRenderingParser);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\nimport EventBus from '../../core/EventBus.js';\nimport Events from '../../core/events/Events.js';\nimport {fromXML, generateISD} from 'imsc';\nimport MediaPlayerEvents from '../MediaPlayerEvents.js';\nimport ConformanceViolationConstants from '../constants/ConformanceViolationConstants.js';\n\nfunction TTMLParser() {\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n\n /*\n * This TTML parser follows \"EBU-TT-D SUBTITLING DISTRIBUTION FORMAT - tech3380\" spec - https://tech.ebu.ch/docs/tech/tech3380.pdf.\n * */\n let instance,\n logger;\n\n let cueCounter = 0; // Used to give every cue a unique ID.\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function getCueID() {\n const id = 'cue_TTML_' + cueCounter;\n cueCounter++;\n return id;\n }\n\n /**\n * Parse the raw data and process it to return the HTML element representing the cue.\n * Return the region to be processed and controlled (hide/show) by the caption controller.\n * @param {string} data - raw data received from the TextSourceBuffer\n * @param {number} offsetTime - offset time to apply to cue time\n * @param {integer} startTimeSegment - startTime for the current segment\n * @param {integer} endTimeSegment - endTime for the current segment\n * @param {array} images - images array referenced by subs MP4 box\n * @returns {array} captionArray\n */\n function parse(data, offsetTime, startTimeSegment, endTimeSegment, images) {\n let errorMsg = '';\n const captionArray = [];\n let startTime,\n endTime,\n i;\n\n const content = {};\n\n const embeddedImages = {};\n let currentImageId = '';\n let accumulated_image_data = '';\n let metadataHandler = {\n\n onOpenTag: function (ns, name, attrs) {\n // cope with existing non-compliant content\n if (attrs[' imagetype'] && !attrs[' imageType']) {\n eventBus.trigger(MediaPlayerEvents.CONFORMANCE_VIOLATION, {\n level: ConformanceViolationConstants.LEVELS.ERROR,\n event: ConformanceViolationConstants.EVENTS.NON_COMPLIANT_SMPTE_IMAGE_ATTRIBUTE\n });\n attrs[' imageType'] = attrs[' imagetype'];\n }\n\n if (name === 'image' &&\n (ns === 'http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt' ||\n ns === 'http://www.smpte-ra.org/schemas/2052-1/2013/smpte-tt')) {\n if (!attrs[' imageType'] || attrs[' imageType'].value !== 'PNG') {\n logger.warn('smpte-tt imageType != PNG. Discarded');\n return;\n }\n currentImageId = attrs['http://www.w3.org/XML/1998/namespace id'].value;\n }\n },\n\n onCloseTag: function () {\n if (currentImageId) {\n embeddedImages[currentImageId] = accumulated_image_data.trim();\n }\n accumulated_image_data = '';\n currentImageId = '';\n },\n\n onText: function (contents) {\n if (currentImageId) {\n accumulated_image_data = accumulated_image_data + contents;\n }\n }\n };\n\n if (!data) {\n errorMsg = 'no ttml data to parse';\n throw new Error(errorMsg);\n }\n\n content.data = data;\n\n eventBus.trigger(Events.TTML_TO_PARSE, content);\n\n let imsc1doc = fromXML(content.data, function (msg) {\n errorMsg = msg;\n }, metadataHandler);\n\n eventBus.trigger(Events.TTML_PARSED, { ttmlString: content.data, ttmlDoc: imsc1doc });\n\n const mediaTimeEvents = imsc1doc.getMediaTimeEvents();\n\n for (i = 0; i < mediaTimeEvents.length; i++) {\n let isd = generateISD(imsc1doc, mediaTimeEvents[i], function (error) {\n errorMsg = error;\n });\n\n if (isd.contents.some(topLevelContents => topLevelContents.contents.length)) {\n //be sure that mediaTimeEvents values are in the mp4 segment time ranges.\n startTime = mediaTimeEvents[i] + offsetTime;\n endTime = mediaTimeEvents[i + 1] + offsetTime;\n\n if (startTime < endTime) {\n captionArray.push({\n start: startTime,\n end: endTime,\n type: 'html',\n cueID: getCueID(),\n isd: isd,\n images: images,\n embeddedImages: embeddedImages\n });\n }\n }\n }\n\n if (errorMsg !== '') {\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n return captionArray;\n }\n\n instance = {\n parse: parse\n };\n\n setup();\n return instance;\n}\n\nTTMLParser.__dashjs_factory_name = 'TTMLParser';\nexport default FactoryMaker.getSingletonFactory(TTMLParser);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2024, BBC.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of BBC nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport URLUtils from '../utils/URLUtils.js';\nimport EventBus from '../../core/EventBus.js';\nimport MediaPlayerEvents from '../MediaPlayerEvents.js';\nimport Debug from '../../core/Debug.js';\n\nfunction DVBFonts(config) {\n\n let context = this.context;\n const eventBus = EventBus(context).getInstance();\n const urlUtils = URLUtils(context).getInstance();\n const adapter = config.adapter;\n const baseURLController = config.baseURLController;\n\n const FONT_DOWNLOAD_STATUS = {\n ERROR: 'error',\n LOADED: 'loaded',\n UNLOADED: 'unloaded'\n };\n\n let instance,\n logger,\n dvbFontList;\n\n function setup() {\n logger = Debug(context).getInstance().getLogger(instance);\n resetInitialSettings();\n }\n\n /**\n * Add any dvb fonts from a single track to the dvbFontList\n * @param {object} track - A text track\n * @param {string} streamId - Id of current stream\n * @private\n */\n function _addFontFromTrack(track, streamId) {\n let asBaseUrl;\n let isEssential = false;\n let dvbFontProps;\n\n // If there is a baseurl in the manifest resolve against a representation inside the current adaptation set\n if (baseURLController.resolve()) {\n const reps = adapter.getVoRepresentations(track);\n if (reps && reps.length > 0) {\n asBaseUrl = baseURLController.resolve(reps[0].path).url\n }\n }\n\n const essentialTags = track.essentialProperties.filter(tag =>\n (tag.schemeIdUri && tag.schemeIdUri === Constants.FONT_DOWNLOAD_DVB_SCHEME)\n );\n const supplementalTags = track.supplementalProperties.filter(tag =>\n (tag.schemeIdUri && tag.schemeIdUri === Constants.FONT_DOWNLOAD_DVB_SCHEME)\n );\n\n // When it comes to the property descriptors it's Essential OR Supplementary, with Essential taking preference\n if (essentialTags.length > 0) {\n isEssential = true;\n dvbFontProps = essentialTags;\n } else {\n dvbFontProps = supplementalTags;\n }\n\n dvbFontProps.forEach(attrs => {\n if (_hasMandatoryDvbFontAttributes(attrs)) {\n let resolvedUrl = _resolveFontUrl(attrs.dvbUrl, asBaseUrl);\n dvbFontList.push({\n fontFamily: attrs.dvbFontFamily,\n url: resolvedUrl,\n mimeType: attrs.dvbMimeType,\n trackId: track.id,\n streamId,\n isEssential,\n status: FONT_DOWNLOAD_STATUS.UNLOADED,\n fontFace: new FontFace(\n attrs.dvbFontFamily,\n `url(${resolvedUrl})`,\n { display: 'swap' }\n )\n });\n }\n });\n }\n\n /**\n * Clean up dvb font downloads\n * @private\n */\n function _cleanUpDvbCustomFonts() {\n for (const font of dvbFontList) {\n let deleted = document.fonts.delete(font.fontFace);\n logger.debug(`Removal of fontFamily: ${font.fontFamily} was ${deleted ? 'successful' : 'unsuccessful'}`);\n }\n }\n\n /**\n * Check the attributes of a supplemental or essential property descriptor to establish if\n * it has the mandatory values for a dvb font download\n * @param {object} attrs - property descriptor attributes\n * @returns {boolean} true if mandatory attributes present\n * @private\n */\n function _hasMandatoryDvbFontAttributes(attrs) {\n return !!((attrs.value && parseInt(attrs.value) === 1) &&\n (attrs.dvbUrl && attrs.dvbUrl.length > 0) &&\n (attrs.dvbFontFamily && attrs.dvbFontFamily.length > 0) &&\n (attrs.dvbMimeType && (attrs.dvbMimeType === Constants.OFF_MIMETYPE || attrs.dvbMimeType === Constants.WOFF_MIMETYPE)));\n }\n\n /**\n * Resolves a given font download URL.\n * @param {string} fontUrl - URL as in the 'dvb:url' property\n * @param {string} baseUrl - BaseURL for Adaptation Set\n * @returns {string} resolved URL\n * @private\n */\n function _resolveFontUrl(fontUrl, baseUrl) {\n if (urlUtils.isPathAbsolute(fontUrl)) {\n return fontUrl;\n } else if (urlUtils.isRelative(fontUrl)) {\n if (baseUrl) {\n return urlUtils.resolve(fontUrl, baseUrl);\n } else {\n return urlUtils.resolve(fontUrl);\n }\n } else {\n return fontUrl;\n }\n }\n\n /**\n * Updates the status of a given dvb font relative to whether it is loaded in the browser\n * or if the download has failed\n * @param {number} index - Index of font in dvbFontList\n * @param {string} newStatus - Status value to update. Property of FONT_DOWNLOAD_STATUS\n * @private\n */\n function _updateFontStatus(index, newStatus) {\n const font = dvbFontList[index];\n dvbFontList[index] = { ...font, status: newStatus };\n }\n\n /**\n * Adds all fonts to the dvb font list from all tracks\n * @param {array} tracks - All text tracks\n * @param {string} streamId - Id of the stream\n */\n function addFontsFromTracks(tracks, streamId) {\n if (tracks && Array.isArray(tracks) && streamId) {\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n _addFontFromTrack(track, streamId);\n }\n }\n }\n\n /**\n * Initiate the download of a dvb custom font.\n * The browser will neatly handle duplicate fonts\n */\n function downloadFonts() {\n for (let i = 0; i < dvbFontList.length; i++) {\n let font = dvbFontList[i];\n\n document.fonts.add(font.fontFace);\n eventBus.trigger(MediaPlayerEvents.DVB_FONT_DOWNLOAD_ADDED, font);\n\n font.fontFace.load().then(\n () => {\n _updateFontStatus(i, FONT_DOWNLOAD_STATUS.LOADED);\n eventBus.trigger(MediaPlayerEvents.DVB_FONT_DOWNLOAD_COMPLETE, font);\n },\n (err) => {\n _updateFontStatus(i, FONT_DOWNLOAD_STATUS.ERROR);\n logger.debug('Font download error: ', err);\n eventBus.trigger(MediaPlayerEvents.DVB_FONT_DOWNLOAD_FAILED, font);\n }\n );\n }\n }\n\n /**\n * Returns current list of all known DVB Fonts\n * @returns {array} dvbFontList\n */\n function getFonts() {\n return dvbFontList;\n }\n\n /**\n * Returns dvbFonts relative to a track given a trackId\n * @param {number} - TrackId\n * @returns {array} filtered DVBFontList\n */\n function getFontsForTrackId(trackId) {\n return dvbFontList.filter(font =>\n (font.trackId && font.trackId === trackId)\n );\n }\n\n function resetInitialSettings() {\n dvbFontList = [];\n }\n\n /** Reset DVBFonts instance */\n function reset() {\n _cleanUpDvbCustomFonts();\n resetInitialSettings();\n }\n\n instance = {\n addFontsFromTracks,\n downloadFonts,\n getFonts,\n getFontsForTrackId,\n reset\n };\n setup();\n return instance;\n}\n\nDVBFonts.__dashjs_factory_name = 'DVBFonts';\nexport default FactoryMaker.getClassFactory(DVBFonts);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport TextSourceBuffer from './TextSourceBuffer.js';\nimport TextTracks from './TextTracks.js';\nimport VTTParser from '../utils/VTTParser.js';\nimport VttCustomRenderingParser from '../utils/VttCustomRenderingParser.js';\nimport TTMLParser from '../utils/TTMLParser.js';\nimport EventBus from '../../core/EventBus.js';\nimport Debug from '../../core/Debug.js';\nimport Events from '../../core/events/Events.js';\nimport MediaPlayerEvents from '../../streaming/MediaPlayerEvents.js';\nimport {checkParameterType} from '../utils/SupervisorTools.js';\nimport DVBFonts from './DVBFonts.js';\nimport DashConstants from '../../dash/constants/DashConstants.js';\n\nfunction TextController(config) {\n\n let context = this.context;\n\n const adapter = config.adapter;\n const errHandler = config.errHandler;\n const manifestModel = config.manifestModel;\n const mediaController = config.mediaController;\n const baseURLController = config.baseURLController;\n const videoModel = config.videoModel;\n const settings = config.settings;\n\n let instance,\n streamData,\n textSourceBuffers,\n textTracks,\n vttParser,\n vttCustomRenderingParser,\n ttmlParser,\n eventBus,\n allTracksAreDisabled,\n forceTextStreaming,\n textTracksAdded,\n disableTextBeforeTextTracksAdded,\n dvbFonts,\n logger;\n\n function setup() {\n forceTextStreaming = false;\n textTracksAdded = false;\n disableTextBeforeTextTracksAdded = false;\n\n vttParser = VTTParser(context).getInstance();\n vttCustomRenderingParser = VttCustomRenderingParser(context).getInstance();\n ttmlParser = TTMLParser(context).getInstance();\n eventBus = EventBus(context).getInstance();\n logger = Debug(context).getInstance().getLogger(instance);\n\n resetInitialSettings();\n }\n\n function initialize() {\n dvbFonts = DVBFonts(context).create({\n adapter,\n baseURLController,\n });\n eventBus.on(Events.TEXT_TRACKS_QUEUE_INITIALIZED, _onTextTracksAdded, instance);\n eventBus.on(Events.DVB_FONT_DOWNLOAD_FAILED, _onFontDownloadFailure, instance);\n eventBus.on(Events.DVB_FONT_DOWNLOAD_COMPLETE, _onFontDownloadSuccess, instance);\n eventBus.on(Events.MEDIAINFO_UPDATED, _onMediaInfoUpdated, instance);\n if (settings.get().streaming.text.webvtt.customRenderingEnabled) {\n eventBus.on(Events.PLAYBACK_TIME_UPDATED, _onPlaybackTimeUpdated, instance);\n eventBus.on(Events.PLAYBACK_SEEKING, _onPlaybackSeeking, instance);\n }\n }\n\n function initializeForStream(streamInfo) {\n const streamId = streamInfo.id;\n const tracks = TextTracks(context).create({\n videoModel,\n settings,\n streamInfo\n });\n tracks.initialize();\n textTracks[streamId] = tracks;\n\n const textSourceBuffer = TextSourceBuffer(context).create({\n errHandler,\n adapter,\n dvbFonts,\n manifestModel,\n mediaController,\n videoModel,\n textTracks: tracks,\n vttParser,\n vttCustomRenderingParser,\n ttmlParser,\n streamInfo,\n settings\n });\n textSourceBuffer.initialize();\n textSourceBuffers[streamId] = textSourceBuffer;\n\n streamData[streamId] = {};\n streamData[streamId].lastEnabledIndex = -1;\n }\n\n /**\n * All media infos have been added. Start creating the track objects\n * @param {object} streamInfo\n */\n function createTracks(streamInfo) {\n const streamId = streamInfo.id;\n\n if (!textTracks[streamId]) {\n return;\n }\n textTracks[streamId].createTracks();\n }\n\n /**\n * Adds the new mediaInfo objects to the textSourceBuffer.\n * @param {object} streamInfo\n * @param {array} mInfos\n * @param {string|null} mimeType\n * @param {object} fragmentModel\n */\n function addMediaInfosToBuffer(streamInfo, type, mInfos, fragmentModel = null) {\n const streamId = streamInfo.id;\n\n if (!textSourceBuffers[streamId]) {\n return;\n }\n textSourceBuffers[streamId].addMediaInfos(type, mInfos, fragmentModel);\n }\n\n function getTextSourceBuffer(streamInfo) {\n const streamId = streamInfo.id;\n\n if (textSourceBuffers && textSourceBuffers[streamId]) {\n return textSourceBuffers[streamId];\n }\n }\n\n function getAllTracksAreDisabled() {\n return allTracksAreDisabled;\n }\n\n function addEmbeddedTrack(streamInfo, mediaInfo) {\n const streamId = streamInfo.id;\n\n if (!textSourceBuffers[streamId]) {\n return;\n }\n\n textSourceBuffers[streamId].addEmbeddedTrack(mediaInfo);\n }\n\n /**\n * Event that is triggered if a font download of a font described in an essential property descriptor\n * tag fails.\n * @param {FontInfo} font - font information\n * @private\n */\n function _onFontDownloadFailure(font) {\n logger.error(`Could not download ${font.isEssential ? 'an essential' : 'a'} font - fontFamily: ${font.fontFamily}, url: ${font.url}`);\n if (font.isEssential) {\n let idx = textTracks[font.streamId].getTrackIdxForId(font.trackId);\n textTracks[font.streamId].setModeForTrackIdx(idx, Constants.TEXT_DISABLED);\n }\n };\n\n /**\n * Set a font with an essential property\n * @private\n */\n function _onFontDownloadSuccess(font) {\n logger.debug(`Successfully downloaded ${font.isEssential ? 'an essential' : 'a'} font - fontFamily: ${font.fontFamily}, url: ${font.url}`);\n if (font.isEssential) {\n let idx = textTracks[font.streamId].getTrackIdxForId(font.trackId);\n if (idx === textTracks[font.streamId].getCurrentTrackIdx()) {\n textTracks[font.streamId].setModeForTrackIdx(idx, Constants.TEXT_SHOWING);\n } else {\n textTracks[font.streamId].setModeForTrackIdx(idx, Constants.TEXT_HIDDEN);\n }\n }\n }\n\n function _onTextTracksAdded(e) {\n let tracks = e.tracks;\n let index = e.index;\n const streamId = e.streamId;\n\n const textDefaultEnabled = settings.get().streaming.text.defaultEnabled;\n\n if ((textDefaultEnabled === false && !isTextEnabled()) || disableTextBeforeTextTracksAdded) {\n // disable text at startup if explicitly configured with setTextDefaultEnabled(false) or if there is no defaultSettings (configuration or from domStorage)\n setTextTrack(streamId, -1);\n } else {\n const currentTrack = mediaController.getCurrentTrackFor(Constants.TEXT, streamId);\n if (currentTrack) {\n const defaultSettings = {\n lang: currentTrack.lang,\n role: currentTrack.roles[0],\n index: currentTrack.index,\n codec: currentTrack.codec,\n accessibility: currentTrack.accessibility[0]\n };\n tracks.some((item, idx) => {\n // matchSettings is compatible with setTextDefaultLanguage and setInitialSettings\n if (mediaController.matchSettings(defaultSettings, item)) {\n setTextTrack(streamId, idx);\n index = idx;\n return true;\n }\n });\n }\n allTracksAreDisabled = false;\n }\n\n streamData[streamId].lastEnabledIndex = index;\n\n eventBus.trigger(MediaPlayerEvents.TEXT_TRACKS_ADDED, {\n enabled: isTextEnabled(),\n index: index,\n tracks: tracks,\n streamId\n });\n\n textTracksAdded = true;\n\n dvbFonts.addFontsFromTracks(tracks, streamId);\n\n // Initially disable any tracks with essential property font downloads\n dvbFonts.getFonts().forEach(font => {\n if (font.isEssential) {\n let idx = textTracks[font.streamId].getTrackIdxForId(font.trackId);\n textTracks[font.streamId].setModeForTrackIdx(idx, Constants.TEXT_DISABLED);\n }\n });\n\n dvbFonts.downloadFonts();\n }\n\n function _onPlaybackTimeUpdated(e) {\n try {\n const streamId = e.streamId;\n\n if (!textTracks[streamId] || isNaN(e.time)) {\n return;\n }\n textTracks[streamId].manualCueProcessing(e.time);\n } catch (err) {\n }\n }\n\n function _onPlaybackSeeking(e) {\n try {\n const streamId = e.streamId;\n\n if (!textTracks[streamId]) {\n return;\n }\n textTracks[streamId].disableManualTracks();\n } catch (e) {\n\n }\n }\n\n function _onMediaInfoUpdated(e) {\n try {\n if (!e || !e.mediaType || e.mediaType !== Constants.AUDIO || !e.currentMediaInfo) {\n return\n }\n\n const currentTextTrackInfo = textTracks[e.streamId].getCurrentTextTrackInfo();\n let suitableForcedSubtitleIndex = NaN;\n if (allTracksAreDisabled) {\n suitableForcedSubtitleIndex = _getSuitableForceSubtitleTrackIndex(e.streamId);\n } else if (_isForcedSubtitleTrack(currentTextTrackInfo) && e.currentMediaInfo.lang && e.currentMediaInfo.lang !== currentTextTrackInfo.lang) {\n suitableForcedSubtitleIndex = _getSuitableForceSubtitleTrackIndex(e.streamId);\n if (isNaN(suitableForcedSubtitleIndex)) {\n suitableForcedSubtitleIndex = -1;\n }\n }\n\n if (!isNaN(suitableForcedSubtitleIndex)) {\n setTextTrack(e.streamId, suitableForcedSubtitleIndex);\n }\n\n } catch (e) {\n logger.error(e);\n }\n }\n\n function enableText(streamId, enable) {\n checkParameterType(enable, 'boolean');\n if (isTextEnabled() !== enable) {\n // change track selection\n if (enable) {\n // apply last enabled track\n setTextTrack(streamId, streamData[streamId].lastEnabledIndex);\n }\n\n if (!enable) {\n // keep last index and disable text track\n streamData[streamId].lastEnabledIndex = getCurrentTrackIdx(streamId);\n if (!textTracksAdded) {\n disableTextBeforeTextTracksAdded = true;\n } else {\n setTextTrack(streamId, -1);\n }\n }\n }\n\n return true\n }\n\n function isTextEnabled() {\n let enabled = true;\n if (allTracksAreDisabled && !forceTextStreaming) {\n enabled = false;\n }\n return enabled;\n }\n\n // when set to true ScheduleController will allow schedule of chunks even if tracks are all disabled. Allowing streaming to hidden track for external players to work with.\n function enableForcedTextStreaming(enable) {\n checkParameterType(enable, 'boolean');\n forceTextStreaming = enable;\n return true\n }\n\n function setTextTrack(streamId, idx) {\n // For external time text file, the only action needed to change a track is marking the track mode to showing.\n // Fragmented text tracks need the additional step of calling TextController.setTextTrack();\n allTracksAreDisabled = idx === -1;\n\n if (allTracksAreDisabled && mediaController) {\n mediaController.saveTextSettingsDisabled();\n }\n\n let oldTrackIdx = getCurrentTrackIdx(streamId);\n\n // No change, no action required\n if (oldTrackIdx === idx || !textTracks[streamId]) {\n return;\n }\n\n textTracks[streamId].disableManualTracks();\n\n let currentTrackInfo = textTracks[streamId].getCurrentTextTrackInfo();\n let currentNativeTrackInfo = (currentTrackInfo) ? videoModel.getTextTrack(currentTrackInfo.kind, currentTrackInfo.id, currentTrackInfo.lang, currentTrackInfo.isTTML, currentTrackInfo.isEmbedded) : null;\n\n // Don't change disabled tracks - dvb font download for essential property failed or not complete\n if (currentNativeTrackInfo && (currentNativeTrackInfo.mode !== Constants.TEXT_DISABLED)) {\n textTracks[streamId].setModeForTrackIdx(oldTrackIdx, Constants.TEXT_HIDDEN);\n }\n\n textTracks[streamId].setCurrentTrackIdx(idx);\n\n currentTrackInfo = textTracks[streamId].getCurrentTextTrackInfo();\n\n const dispatchForManualRendering = settings.get().streaming.text.dispatchForManualRendering;\n\n if (currentTrackInfo && !dispatchForManualRendering && (currentTrackInfo.mode !== Constants.TEXT_DISABLED)) {\n textTracks[streamId].setModeForTrackIdx(idx, Constants.TEXT_SHOWING);\n }\n\n if (currentTrackInfo && currentTrackInfo.isFragmented && !currentTrackInfo.isEmbedded) {\n _setFragmentedTextTrack(streamId, currentTrackInfo, oldTrackIdx);\n } else if (currentTrackInfo && !currentTrackInfo.isFragmented) {\n _setNonFragmentedTextTrack(streamId, currentTrackInfo);\n } else if (!currentTrackInfo && allTracksAreDisabled) {\n const forcedSubtitleTrackIndex = _getSuitableForceSubtitleTrackIndex(streamId)\n if (!isNaN(forcedSubtitleTrackIndex)) {\n setTextTrack(streamId, forcedSubtitleTrackIndex);\n }\n return\n }\n\n mediaController.setTrack(currentTrackInfo);\n }\n\n function _setFragmentedTextTrack(streamId, currentTrackInfo, oldTrackIdx) {\n\n if (!textSourceBuffers[streamId]) {\n return;\n }\n\n let config = textSourceBuffers[streamId].getConfig();\n let fragmentedTracks = config.fragmentedTracks;\n\n for (let i = 0; i < fragmentedTracks.length; i++) {\n let mediaInfo = fragmentedTracks[i];\n if (currentTrackInfo.lang === mediaInfo.lang &&\n (mediaInfo.id ? currentTrackInfo.id === mediaInfo.id : currentTrackInfo.index === mediaInfo.index)) {\n let currentFragTrack = mediaController.getCurrentTrackFor(Constants.TEXT, streamId);\n if (mediaInfo.id ? currentFragTrack.id !== mediaInfo.id : currentFragTrack.index !== mediaInfo.index) {\n textTracks[streamId].deleteCuesFromTrackIdx(oldTrackIdx);\n textSourceBuffers[streamId].setCurrentFragmentedTrackIdx(i);\n } else if (oldTrackIdx === -1) {\n // in fragmented use case, if the user selects the older track (the one selected before disabled text track)\n // no CURRENT_TRACK_CHANGED event will be triggered because the mediaInfo in the StreamProcessor is equal to the one we are selecting\n // For that reason we reactivate the StreamProcessor and the ScheduleController\n eventBus.trigger(Events.SET_FRAGMENTED_TEXT_AFTER_DISABLED, {}, {\n streamId,\n mediaType: Constants.TEXT\n });\n }\n }\n }\n }\n\n function _setNonFragmentedTextTrack(streamId, currentTrackInfo) {\n eventBus.trigger(Events.SET_NON_FRAGMENTED_TEXT, {\n currentTrackInfo\n }, {\n streamId,\n mediaType: Constants.TEXT\n });\n }\n\n function _getSuitableForceSubtitleTrackIndex(streamId) {\n const forcedSubtitleTracks = _getForcedSubtitleTracks(streamId);\n\n if (!forcedSubtitleTracks || forcedSubtitleTracks.length <= 0) {\n return NaN\n }\n\n const currentAudioTrack = mediaController.getCurrentTrackFor(Constants.AUDIO, streamId);\n if (!currentAudioTrack) {\n return NaN\n }\n\n const suitableTrack = forcedSubtitleTracks.find((track) => {\n return currentAudioTrack.lang === track.lang\n })\n\n if (suitableTrack) {\n return suitableTrack._indexToSelect\n }\n\n return NaN\n }\n\n function _getForcedSubtitleTracks(streamId) {\n const textTrackInfos = textTracks[streamId].getTextTrackInfos();\n return textTrackInfos.filter((textTrackInfo, index) => {\n textTrackInfo._indexToSelect = index;\n if (textTrackInfo && textTrackInfo.roles && textTrackInfo.roles.length > 0) {\n return _isForcedSubtitleTrack(textTrackInfo);\n }\n return false\n });\n }\n\n function _isForcedSubtitleTrack(textTrackInfo) {\n if (!textTrackInfo || !textTrackInfo.roles || textTrackInfo.roles.length === 0) {\n return false\n }\n return textTrackInfo.roles.some((role) => {\n return role.schemeIdUri === Constants.DASH_ROLE_SCHEME_ID && role.value === DashConstants.FORCED_SUBTITLE\n })\n }\n\n function getCurrentTrackIdx(streamId) {\n return textTracks[streamId].getCurrentTrackIdx();\n }\n\n function deactivateStream(streamInfo) {\n if (!streamInfo) {\n return;\n }\n const streamId = streamInfo.id;\n\n if (textSourceBuffers[streamId]) {\n textSourceBuffers[streamId].resetMediaInfos();\n }\n\n if (textTracks[streamId]) {\n textTracks[streamId].deleteAllTextTracks();\n }\n }\n\n function clearDataForStream(streamId) {\n if (textSourceBuffers[streamId]) {\n textSourceBuffers[streamId].resetEmbedded();\n textSourceBuffers[streamId].reset();\n delete textSourceBuffers[streamId];\n }\n\n if (textTracks[streamId]) {\n textTracks[streamId].deleteAllTextTracks();\n delete textTracks[streamId];\n }\n\n if (streamData[streamId]) {\n delete streamData[streamId];\n }\n }\n\n function resetInitialSettings() {\n textSourceBuffers = {};\n textTracks = {};\n streamData = {};\n allTracksAreDisabled = true;\n textTracksAdded = false;\n disableTextBeforeTextTracksAdded = false;\n }\n\n function reset() {\n Object.keys(textSourceBuffers).forEach((key) => {\n textSourceBuffers[key].resetEmbedded();\n textSourceBuffers[key].reset();\n });\n\n dvbFonts.reset();\n resetInitialSettings();\n eventBus.off(Events.TEXT_TRACKS_QUEUE_INITIALIZED, _onTextTracksAdded, instance);\n eventBus.off(Events.DVB_FONT_DOWNLOAD_FAILED, _onFontDownloadFailure, instance);\n eventBus.off(Events.DVB_FONT_DOWNLOAD_COMPLETE, _onFontDownloadSuccess, instance);\n eventBus.off(Events.MEDIAINFO_UPDATED, _onMediaInfoUpdated, instance);\n if (settings.get().streaming.text.webvtt.customRenderingEnabled) {\n eventBus.off(Events.PLAYBACK_TIME_UPDATED, _onPlaybackTimeUpdated, instance);\n eventBus.off(Events.PLAYBACK_SEEKING, _onPlaybackSeeking, instance)\n }\n }\n\n instance = {\n addEmbeddedTrack,\n addMediaInfosToBuffer,\n createTracks,\n deactivateStream,\n enableForcedTextStreaming,\n enableText,\n getAllTracksAreDisabled,\n getCurrentTrackIdx,\n getTextSourceBuffer,\n initialize,\n initializeForStream,\n isTextEnabled,\n reset,\n setTextTrack,\n clearDataForStream,\n };\n setup();\n return instance;\n}\n\nTextController.__dashjs_factory_name = 'TextController';\nexport default FactoryMaker.getClassFactory(TextController);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2017, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport Constants from '../constants/Constants.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Debug from '../../core/Debug.js';\nimport {HTTPRequest} from '../vo/metrics/HTTPRequest.js';\nimport MediaPlayerEvents from '../MediaPlayerEvents.js';\nimport EventBus from '../../core/EventBus.js';\n\n/**\n * Throughput generally stored in kbit/s\n * Latency generally stored in ms\n * @param {object} config\n * @ignore\n * @constructor\n */\nfunction ThroughputModel(config) {\n\n config = config || {};\n const context = this.context;\n const debug = Debug(context).getInstance();\n const settings = config.settings;\n const eventBus = EventBus(context).getInstance();\n\n let throughputDict,\n latencyDict,\n ewmaThroughputDict,\n ewmaLatencyDict,\n ewmaHalfLife,\n logger;\n\n function setup() {\n logger = debug.getLogger(instance);\n ewmaHalfLife = {\n bandwidthHalfLife: {\n fast: settings.get().streaming.abr.throughput.ewma.throughputFastHalfLifeSeconds,\n slow: settings.get().streaming.abr.throughput.ewma.throughputSlowHalfLifeSeconds\n },\n latencyHalfLife: {\n fast: settings.get().streaming.abr.throughput.ewma.latencyFastHalfLifeCount,\n slow: settings.get().streaming.abr.throughput.ewma.latencySlowHalfLifeCount\n }\n };\n reset();\n }\n\n /**\n * Use the provided request to add new entries for throughput and latency. Update the EWMA state as well.\n * @param {MediaType} mediaType\n * @param {object} httpRequest\n */\n function addEntry(mediaType, httpRequest) {\n try {\n\n if (!mediaType || !httpRequest || !httpRequest.trace || !httpRequest.trace.length) {\n return;\n }\n\n _createSettingsForMediaType(mediaType);\n\n const latencyInMs = (httpRequest.tresponse.getTime() - httpRequest.trequest.getTime()) || 1;\n let throughputValues = _calculateThroughputValues(httpRequest, latencyInMs);\n throughputValues.latencyInMs = latencyInMs;\n\n if (isNaN(throughputValues.value) || !isFinite(throughputValues.value)) {\n return;\n }\n\n // Get estimated throughput (etp, in kbits/s) from CMSD response headers\n if (httpRequest.cmsd) {\n const etp = httpRequest.cmsd.dynamic && httpRequest.cmsd.dynamic.etp ? httpRequest.cmsd.dynamic.etp : null;\n if (etp) {\n // Apply weight ratio on etp\n const etpWeightRatio = settings.get().streaming.cmsd.abr.etpWeightRatio;\n if (etpWeightRatio > 0 && etpWeightRatio <= 1) {\n throughputValues.value = (throughputValues.value * (1 - etpWeightRatio)) + (etp * etpWeightRatio);\n }\n }\n }\n\n const cacheReferenceTime = (httpRequest._tfinish.getTime() - httpRequest.trequest.getTime());\n\n if (_isCachedResponse(mediaType, cacheReferenceTime, httpRequest)) {\n logger.debug(`${mediaType} Assuming segment ${httpRequest.url} came from cache, ignoring it for throughput calculation`);\n return;\n }\n\n logger.debug(`Added throughput entry for ${mediaType}: ${throughputValues.value} kbit/s`)\n throughputValues.serviceLocation = httpRequest._serviceLocation;\n throughputDict[mediaType].push(throughputValues);\n latencyDict[mediaType].push({ value: latencyInMs });\n _cleanupDict(mediaType);\n\n eventBus.trigger(MediaPlayerEvents.THROUGHPUT_MEASUREMENT_STORED, { throughputValues })\n\n if (httpRequest.type !== HTTPRequest.MPD_TYPE) {\n _updateEwmaValues(ewmaThroughputDict[mediaType], throughputValues.value, settings.get().streaming.abr.throughput.ewma.weightDownloadTimeMultiplicationFactor * throughputValues.downloadTimeInMs, ewmaHalfLife.bandwidthHalfLife);\n _updateEwmaValues(ewmaLatencyDict[mediaType], latencyInMs, 1, ewmaHalfLife.latencyHalfLife);\n }\n } catch (e) {\n logger.error(e);\n }\n }\n\n /**\n * Returns the throughput in kbit/s , the download time in ms and the downloaded bytes for an HTTP request\n * @param {object} httpRequest\n * @param {number} latencyInMs\n * @return {object}\n * @private\n */\n function _calculateThroughputValues(httpRequest, latencyInMs) {\n\n // Low latency is enabled, we used the fetch API and received chunks\n if (httpRequest._fileLoaderType && httpRequest._fileLoaderType === Constants.FILE_LOADER_TYPES.FETCH) {\n return _calculateThroughputValuesForFetch(httpRequest);\n }\n\n // Standard case, we used standard XHR requests\n else {\n return _calculateThroughputValuesForXhr(httpRequest, latencyInMs);\n }\n }\n\n /**\n * Calculates the throughput for requests using the Fetch API\n * @param {object} httpRequest\n * @param {number} latencyInMs\n * @return {number}\n * @private\n */\n function _calculateThroughputValuesForFetch(httpRequest) {\n const downloadedBytes = httpRequest.trace.reduce((prev, curr) => prev + curr.b[0], 0);\n const downloadTimeInMs = httpRequest.trace.reduce((prev, curr) => prev + curr.d, 0);\n let throughputInKbit = NaN;\n\n if (settings.get().streaming.abr.throughput.useNetworkInformationApi.fetch) {\n throughputInKbit = _deriveThroughputFromNetworkApi()\n }\n\n if (isNaN(throughputInKbit)) {\n throughputInKbit = Math.round((8 * downloadedBytes) / downloadTimeInMs); // bits/ms = kbits/s\n }\n\n return {\n downloadedBytes,\n value: throughputInKbit,\n downloadTimeInMs\n };\n }\n\n /**\n * Returns the throughput in kbit/s and the download time in ms for requests using XHR\n * @param {object} httpRequest\n * @param {number} latencyInMs\n * @return {object}\n * @private\n */\n function _calculateThroughputValuesForXhr(httpRequest, latencyInMs) {\n let downloadedBytes = NaN;\n let downloadTimeInMs = NaN;\n let deriveThroughputViaResourceTimingApi = false;\n\n // Calculate the throughput using the ResourceTimingAPI if available\n if (settings.get().streaming.abr.throughput.useResourceTimingApi && httpRequest._resourceTimingValues) {\n downloadedBytes = httpRequest._resourceTimingValues.transferSize;\n downloadTimeInMs = httpRequest._resourceTimingValues.responseEnd - httpRequest._resourceTimingValues.responseStart;\n deriveThroughputViaResourceTimingApi = true;\n }\n\n // Use the standard throughput calculation if we can not use the Resource Timing API\n else {\n // We need at least two entries in the traces. The first entry includes the latency and the XHR progress event was thrown once bytes have already been received.\n // The second progress event can be set in relation to the first progress event and therefor gives us more accurate values\n if (httpRequest.trace.length <= 1) {\n return { throughput: NaN, downloadTimeInMs: NaN }\n }\n downloadedBytes = httpRequest.trace.reduce((prev, curr) => prev + curr.b[0], 0) - httpRequest.trace[0].b[0];\n downloadTimeInMs = Math.max(httpRequest.trace.reduce((prev, curr) => prev + curr.d, 0) - httpRequest.trace[0].d, 1);\n }\n\n // If available and enabled use the Network Information API\n let throughputInKbit = NaN;\n if (!deriveThroughputViaResourceTimingApi && settings.get().streaming.abr.throughput.useNetworkInformationApi.xhr) {\n throughputInKbit = _deriveThroughputFromNetworkApi()\n }\n\n if (isNaN(throughputInKbit)) {\n const referenceTimeInMs = settings.get().streaming.abr.throughput.useDeadTimeLatency ? downloadTimeInMs : downloadTimeInMs + latencyInMs;\n throughputInKbit = Math.round((8 * downloadedBytes) / referenceTimeInMs) // bits/ms = kbits/s\n }\n\n return {\n downloadedBytes,\n value: throughputInKbit,\n downloadTimeInMs\n };\n }\n\n /**\n * Return the current estimated bandwidth based on NetworkInformation.downlink if the API is available\n * @returns {*|number}\n * @private\n */\n function _deriveThroughputFromNetworkApi() {\n // NetworkInformation.downlink: Returns the effective bandwidth estimate in megabits per second, rounded to the nearest multiple of 25 kilobits per seconds.\n if (navigator && navigator.connection && !isNaN(navigator.connection.downlink) && navigator.connection.downlink > 0) {\n return navigator.connection.downlink * 1000\n }\n\n return NaN\n }\n\n /**\n * Check if the response was cached.\n * @param {MediaType} mediaType\n * @param {number} cacheReferenceTime\n * @param {object} httpRequest\n * @return {boolean}\n * @private\n */\n function _isCachedResponse(mediaType, cacheReferenceTime, httpRequest) {\n\n if (settings.get().streaming.abr.throughput.useResourceTimingApi && httpRequest._resourceTimingValues) {\n return httpRequest._resourceTimingValues.transferSize === 0 && httpRequest._resourceTimingValues.decodedBodySize > 0\n }\n\n if (isNaN(cacheReferenceTime)) {\n return false;\n }\n if (mediaType === Constants.VIDEO) {\n return cacheReferenceTime < settings.get().streaming.cacheLoadThresholds[Constants.VIDEO];\n } else if (mediaType === Constants.AUDIO) {\n return cacheReferenceTime < settings.get().streaming.cacheLoadThresholds[Constants.AUDIO];\n }\n }\n\n /**\n *\n * @param {object} ewmaObj\n * @param {number} value\n * @param {number} weight\n * @param {object} halfLife\n * @private\n */\n function _updateEwmaValues(ewmaObj, value, weight, halfLife) {\n // Note about startup:\n // Estimates start at 0, so early values are underestimated.\n // This effect is countered in getAverageEwma() by dividing the estimates by:\n // 1 - Math.pow(0.5, ewmaObj.totalWeight / halfLife)\n\n const fastAlpha = Math.pow(0.5, weight / halfLife.fast);\n ewmaObj.fastEstimate = (1 - fastAlpha) * value + fastAlpha * ewmaObj.fastEstimate;\n\n const slowAlpha = Math.pow(0.5, weight / halfLife.slow);\n ewmaObj.slowEstimate = (1 - slowAlpha) * value + slowAlpha * ewmaObj.slowEstimate;\n\n ewmaObj.totalWeight += weight;\n }\n\n /**\n * Shift old entries once we reached the threshold\n * @param {MediaType} mediaType\n * @private\n */\n function _cleanupDict(mediaType) {\n if (throughputDict[mediaType].length > settings.get().streaming.abr.throughput.sampleSettings.maxMeasurementsToKeep) {\n throughputDict[mediaType].shift();\n }\n\n if (latencyDict[mediaType].length > settings.get().streaming.abr.throughput.sampleSettings.maxMeasurementsToKeep) {\n latencyDict[mediaType].shift();\n }\n }\n\n /**\n * Setup the dict objects for a specific media type\n * @param mediaType\n * @private\n */\n function _createSettingsForMediaType(mediaType) {\n throughputDict[mediaType] = throughputDict[mediaType] || [];\n latencyDict[mediaType] = latencyDict[mediaType] || [];\n ewmaThroughputDict[mediaType] = ewmaThroughputDict[mediaType] || {\n fastEstimate: 0,\n slowEstimate: 0,\n totalWeight: 0\n };\n ewmaLatencyDict[mediaType] = ewmaLatencyDict[mediaType] || { fastEstimate: 0, slowEstimate: 0, totalWeight: 0 };\n }\n\n function getThroughputDict(mediaType) {\n if (!mediaType) {\n return throughputDict\n }\n return throughputDict[mediaType];\n }\n\n function getEwmaThroughputDict(mediaType) {\n if (!mediaType) {\n return ewmaThroughputDict\n }\n return ewmaThroughputDict[mediaType]\n }\n\n function getLatencyDict(mediaType) {\n if (!mediaType) {\n return latencyDict\n }\n return latencyDict[mediaType];\n }\n\n function getEwmaLatencyDict(mediaType) {\n if (!mediaType) {\n return ewmaLatencyDict\n }\n return ewmaLatencyDict[mediaType];\n }\n\n function getEwmaHalfLife() {\n return ewmaHalfLife;\n }\n\n /**\n * Reset all values\n */\n function reset() {\n throughputDict = {};\n latencyDict = {};\n ewmaThroughputDict = {};\n ewmaLatencyDict = {};\n }\n\n const instance = {\n addEntry,\n getThroughputDict,\n getEwmaThroughputDict,\n getEwmaLatencyDict,\n getEwmaHalfLife,\n getLatencyDict,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nThroughputModel.__dashjs_factory_name = 'ThroughputModel';\nexport default FactoryMaker.getClassFactory(ThroughputModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2017, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport Constants from '../constants/Constants.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport ThroughputModel from '../models/ThroughputModel.js';\nimport MetricsConstants from '../constants/MetricsConstants.js';\nimport {HTTPRequest} from '../vo/metrics/HTTPRequest.js';\nimport MediaPlayerEvents from '../MediaPlayerEvents.js';\nimport EventBus from '../../core/EventBus.js';\n\n/**\n * @constructor\n * @ignore\n */\nfunction ThroughputController() {\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n\n let throughputModel,\n playbackController,\n settings;\n\n function initialize() {\n throughputModel = ThroughputModel(context).create({\n settings\n });\n _registerEvents();\n }\n\n function setConfig(config) {\n if (config.settings) {\n settings = config.settings;\n }\n\n if (config.playbackController) {\n playbackController = config.playbackController;\n }\n }\n\n function _registerEvents() {\n eventBus.on(MediaPlayerEvents.METRIC_ADDED, _onMetricAdded, instance);\n\n if (performance) {\n performance.addEventListener(\n 'resourcetimingbufferfull',\n _onResourceTimingBufferFull,\n );\n }\n }\n\n function _resetEvents() {\n eventBus.off(MediaPlayerEvents.METRIC_ADDED, _onMetricAdded, instance);\n\n if (performance) {\n performance.removeEventListener(\n 'resourcetimingbufferfull',\n _onResourceTimingBufferFull,\n );\n }\n }\n\n function _onResourceTimingBufferFull() {\n performance.clearResourceTimings();\n }\n\n /**\n * Push new values to the throughput model once an HTTP request completed\n * @param {object} e\n * @private\n */\n function _onMetricAdded(e) {\n if (e.metric === MetricsConstants.HTTP_REQUEST && e.value && (e.value.type === HTTPRequest.MPD_TYPE || (e.value.type === HTTPRequest.MEDIA_SEGMENT_TYPE && (e.mediaType === Constants.AUDIO || e.mediaType === Constants.VIDEO)))) {\n throughputModel.addEntry(e.mediaType, e.value);\n }\n }\n\n /**\n * Get average value\n * @param {string} throughputType\n * @param {string} mediaType\n * @param {string|null} calculationMode\n * @param {number} sampleSize\n * @return {number}\n * @private\n */\n function _getAverage(throughputType, mediaType, calculationMode = null, sampleSize = NaN) {\n let dict = null;\n let ewmaHalfLife = throughputModel.getEwmaHalfLife();\n let halfLife = null;\n let useMin = true;\n\n if (!calculationMode) {\n calculationMode = settings.get().streaming.abr.throughput.averageCalculationMode;\n }\n\n switch (throughputType) {\n\n // Set the parameters for the standard bandwidth calculation based on throughput values for a media type\n case Constants.THROUGHPUT_TYPES.BANDWIDTH:\n dict = calculationMode === Constants.THROUGHPUT_CALCULATION_MODES.EWMA ? throughputModel.getEwmaThroughputDict(mediaType) : throughputModel.getThroughputDict(mediaType);\n halfLife = ewmaHalfLife.bandwidthHalfLife;\n useMin = true;\n sampleSize = !isNaN(sampleSize) ? sampleSize : playbackController.getIsDynamic() ? settings.get().streaming.abr.throughput.sampleSettings.live : settings.get().streaming.abr.throughput.sampleSettings.vod;\n break;\n\n // Set the parameters for the standard latency calculation based on throughput values for a media type\n case Constants.THROUGHPUT_TYPES.LATENCY:\n dict = calculationMode === Constants.THROUGHPUT_CALCULATION_MODES.EWMA ? throughputModel.getEwmaLatencyDict(mediaType) : throughputModel.getLatencyDict(mediaType);\n halfLife = ewmaHalfLife.latencyHalfLife;\n useMin = false;\n sampleSize = !isNaN(sampleSize) ? sampleSize : settings.get().streaming.abr.throughput.sampleSettings.averageLatencySampleAmount;\n break;\n\n }\n\n if (!dict || dict.length === 0) {\n return NaN;\n }\n\n let adjustedSampleSize;\n switch (calculationMode) {\n case Constants.THROUGHPUT_CALCULATION_MODES.ARITHMETIC_MEAN:\n adjustedSampleSize = _getAdjustedSampleSize(dict, sampleSize, throughputType);\n return getArithmeticMean(dict, adjustedSampleSize);\n case Constants.THROUGHPUT_CALCULATION_MODES.BYTE_SIZE_WEIGHTED_ARITHMETIC_MEAN:\n adjustedSampleSize = _getAdjustedSampleSize(dict, sampleSize, throughputType);\n return getByteSizeWeightedArithmeticMean(dict, adjustedSampleSize);\n case Constants.THROUGHPUT_CALCULATION_MODES.DATE_WEIGHTED_ARITHMETIC_MEAN:\n adjustedSampleSize = _getAdjustedSampleSize(dict, sampleSize, throughputType);\n return getDateWeightedArithmeticMean(dict, adjustedSampleSize);\n case Constants.THROUGHPUT_CALCULATION_MODES.HARMONIC_MEAN:\n adjustedSampleSize = _getAdjustedSampleSize(dict, sampleSize, throughputType);\n return getHarmonicMean(dict, adjustedSampleSize);\n case Constants.THROUGHPUT_CALCULATION_MODES.BYTE_SIZE_WEIGHTED_HARMONIC_MEAN:\n adjustedSampleSize = _getAdjustedSampleSize(dict, sampleSize, throughputType);\n return getByteSizeWeightedHarmonicMean(dict, adjustedSampleSize);\n case Constants.THROUGHPUT_CALCULATION_MODES.DATE_WEIGHTED_HARMONIC_MEAN:\n adjustedSampleSize = _getAdjustedSampleSize(dict, sampleSize, throughputType);\n return getDateWeightedHarmonicMean(dict, adjustedSampleSize);\n case Constants.THROUGHPUT_CALCULATION_MODES.EWMA:\n return getEwma(dict, halfLife, useMin);\n case Constants.THROUGHPUT_CALCULATION_MODES.ZLEMA:\n adjustedSampleSize = _getAdjustedSampleSize(dict, sampleSize, throughputType);\n return getZlema(dict, adjustedSampleSize);\n }\n }\n\n /**\n * @param {array} dict\n * @param {number} sampleSize\n * @param {string} type\n * @return {number}\n * @private\n */\n function _getAdjustedSampleSize(dict, sampleSize, type) {\n if (!dict) {\n sampleSize = 0;\n } else if (sampleSize >= dict.length) {\n sampleSize = dict.length;\n } else if (type === Constants.THROUGHPUT_TYPES.BANDWIDTH && settings.get().streaming.abr.throughput.sampleSettings.enableSampleSizeAdjustment) {\n // if throughput samples vary a lot, average over a wider sample\n for (let i = 1; i < sampleSize; ++i) {\n const ratio = dict[dict.length - i].value / dict[dict.length - i - 1].value;\n if (ratio >= settings.get().streaming.abr.throughput.sampleSettings.increaseScale || ratio <= settings.get().streaming.abr.throughput.sampleSettings.decreaseScale) {\n sampleSize += 1;\n if (sampleSize === dict.length) { // cannot increase sampleSize beyond arr.length\n break;\n }\n }\n }\n }\n\n return sampleSize;\n }\n\n /**\n * Calculate the arithmetic mean of the values provided via the dict\n * @param {array} dict\n * @param {number} sampleSize\n * @return {number|*}\n * @private\n */\n function getArithmeticMean(dict, sampleSize) {\n let arr = dict;\n\n if (sampleSize === 0 || !arr || arr.length === 0) {\n return NaN;\n }\n\n // Extract the last n elements\n arr = arr.slice(-sampleSize);\n\n return arr.reduce((total, entry) => {\n return total + entry.value\n }, 0) / arr.length;\n }\n\n /**\n * Calculates the byte size weighted arithmetic mean of the values provided via the dict\n * @param {array} dict\n * @param {number} sampleSize\n * @return {number|*}\n * @private\n */\n function getByteSizeWeightedArithmeticMean(dict, sampleSize) {\n let arr = dict;\n\n if (sampleSize === 0 || !arr || arr.length === 0) {\n return NaN;\n }\n\n // Extract the last n elements\n arr = arr.slice(-sampleSize);\n let divideBy = 0;\n\n return arr.reduce((total, entry) => {\n let weight = Math.sqrt(entry.downloadedBytes);\n divideBy += weight;\n\n return total + entry.value * weight\n }, 0) / divideBy;\n }\n\n /**\n * Calculates the time weighted arithmetic mean of the values provided via the dict\n * @param {array} dict\n * @param {number} sampleSize\n * @return {number|*}\n * @private\n */\n function getDateWeightedArithmeticMean(dict, sampleSize) {\n let arr = dict;\n\n if (sampleSize === 0 || !arr || arr.length === 0) {\n return NaN;\n }\n\n // Extract the last n elements\n arr = arr.slice(-sampleSize);\n let divideBy = 0;\n\n return arr.reduce((total, entry, index) => {\n let weight = index + 1;\n divideBy += weight;\n\n return total + entry.value * weight\n }, 0) / divideBy;\n }\n\n /**\n * Calculate the harmonic mean of the values provided via the dict\n * @param {array} dict\n * @param {number} sampleSize\n * @return {number|*}\n * @private\n */\n function getHarmonicMean(dict, sampleSize) {\n let arr = dict;\n\n if (sampleSize === 0 || !arr || arr.length === 0) {\n return NaN;\n }\n\n // Extract the last n elements\n arr = arr.slice(-sampleSize);\n\n const value = arr.reduce((total, entry) => {\n return total + 1 / entry.value\n }, 0);\n\n return arr.length / value\n }\n\n /**\n * Calculate the harmonic mean of the values provided via the dict\n * @param {array} dict\n * @param {number} sampleSize\n * @return {number|*}\n * @private\n */\n function getByteSizeWeightedHarmonicMean(dict, sampleSize) {\n let arr = dict;\n\n if (sampleSize === 0 || !arr || arr.length === 0) {\n return NaN;\n }\n\n // Extract the last n elements\n arr = arr.slice(-sampleSize);\n let dividend = 0;\n\n const value = arr.reduce((total, entry) => {\n let weight = Math.sqrt(entry.downloadedBytes);\n dividend += weight;\n\n return total + (1 / entry.value) * weight\n }, 0);\n\n return dividend / value\n }\n\n\n /**\n * Calculates the time weighted harmonic mean of the values provided via the dict\n * @param {array} dict\n * @param {number} sampleSize\n * @return {number|*}\n * @private\n */\n function getDateWeightedHarmonicMean(dict, sampleSize) {\n let arr = dict;\n\n if (sampleSize === 0 || !arr || arr.length === 0) {\n return NaN;\n }\n\n // Extract the last n elements\n arr = arr.slice(-sampleSize);\n let dividend = 0;\n\n const value = arr.reduce((total, entry, index) => {\n let weight = index + 1;\n dividend += weight;\n\n return total + (1 / entry.value) * weight\n }, 0);\n\n return dividend / value\n }\n\n /**\n * Calculated the exponential weighted moving average for the values provided via the dict\n * @param {object} dict\n * @param {object} halfLife\n * @param {boolean} useMin - Whether to apply Math.min of the fastEstimate and the slowEstimate\n * @return {number}\n * @private\n */\n function getEwma(dict, halfLife, useMin = true) {\n\n if (!dict || dict.totalWeight <= 0) {\n return NaN;\n }\n\n // to correct for startup, divide by zero factor = 1 - Math.pow(0.5, ewmaObj.totalWeight / halfLife)\n const fastEstimate = dict.fastEstimate / (1 - Math.pow(0.5, dict.totalWeight / halfLife.fast));\n const slowEstimate = dict.slowEstimate / (1 - Math.pow(0.5, dict.totalWeight / halfLife.slow));\n\n return useMin ? Math.min(fastEstimate, slowEstimate) : Math.max(fastEstimate, slowEstimate);\n }\n\n /**\n * Calculates the Zero-Lag Exponential Moving Average\n * @param {array} dict\n * @param {number} sampleSize\n * @returns {number}\n */\n function getZlema(dict, sampleSize) {\n if (sampleSize === 0 || !dict || dict.length === 0) {\n return NaN;\n }\n\n // Extract the last n elements\n let values = dict.slice(-sampleSize).map((entry) => {\n return entry.value;\n })\n let alpha = 2 / (values.length + 1);\n let ema = values[values.length - 1];\n let zlema = values[values.length - 1];\n\n for (let i = 0; i < values.length; i++) {\n ema = alpha * values[i] + (1 - alpha) * ema;\n zlema = alpha * ema + (1 - alpha) * zlema;\n }\n\n return zlema;\n }\n\n /**\n * Returns the average throughput based on the provided calculation mode. The returned value is depicted in kbit/s\n * @param {string} mediaType\n * @param {string | null} calculationMode\n * @param {number | NaN} sampleSize\n * @return {number}\n */\n function getAverageThroughput(mediaType, calculationMode = null, sampleSize = NaN) {\n const value = _getAverage(Constants.THROUGHPUT_TYPES.BANDWIDTH, mediaType, calculationMode, sampleSize);\n\n return Math.round(value);\n }\n\n /**\n * Returns the average throughout applying the bandwidth safety factor provided in the settings. The returned value is depicted in kbit/s\n * @param {string} mediaType\n * @param {string | null} calculationMode\n * @param {number | NaN} sampleSize\n * @return {number}\n */\n function getSafeAverageThroughput(mediaType, calculationMode = null, sampleSize = NaN) {\n let average = getAverageThroughput(mediaType, calculationMode, sampleSize);\n\n if (!isNaN(average)) {\n average *= settings.get().streaming.abr.throughput.bandwidthSafetyFactor;\n }\n\n return average;\n }\n\n /**\n * Returns the average latency based on the provided calculation mode\n * @param {string} mediaType\n * @param {string | null} calculationMode\n * @param {number | NaN} sampleSize\n * @return {number}\n */\n function getAverageLatency(mediaType, calculationMode = null, sampleSize = NaN) {\n const value = _getAverage(Constants.THROUGHPUT_TYPES.LATENCY, mediaType, calculationMode, sampleSize);\n\n return Math.round(value);\n }\n\n /**\n * Returns the raw throughput measurements without calculating the average\n * @param mediaType\n * @returns {*}\n */\n function getRawThroughputData(mediaType) {\n if (!mediaType) {\n return []\n }\n return throughputModel.getThroughputDict(mediaType);\n }\n\n function reset() {\n throughputModel.reset();\n _resetEvents();\n }\n\n const instance = {\n getArithmeticMean,\n getAverageLatency,\n getAverageThroughput,\n getByteSizeWeightedArithmeticMean,\n getByteSizeWeightedHarmonicMean,\n getDateWeightedArithmeticMean,\n getDateWeightedHarmonicMean,\n getEwma,\n getHarmonicMean,\n getRawThroughputData,\n getSafeAverageThroughput,\n getZlema,\n initialize,\n reset,\n setConfig\n };\n\n return instance;\n}\n\nThroughputController.__dashjs_factory_name = 'ThroughputController';\nexport default FactoryMaker.getSingletonFactory(ThroughputController);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport {Cta608Parser} from '@svta/common-media-library/cta/608/Cta608Parser';\nimport Constants from './constants/Constants.js';\nimport DashConstants from '../dash/constants/DashConstants.js';\nimport MetricsConstants from './constants/MetricsConstants.js';\nimport PlaybackController from './controllers/PlaybackController.js';\nimport StreamController from './controllers/StreamController.js';\nimport GapController from './controllers/GapController.js';\nimport CatchupController from './controllers/CatchupController.js';\nimport ServiceDescriptionController from '../dash/controllers/ServiceDescriptionController.js';\nimport ContentSteeringController from '../dash/controllers/ContentSteeringController.js';\nimport MediaController from './controllers/MediaController.js';\nimport BaseURLController from './controllers/BaseURLController.js';\nimport ManifestLoader from './ManifestLoader.js';\nimport ErrorHandler from './utils/ErrorHandler.js';\nimport Capabilities from './utils/Capabilities.js';\nimport CapabilitiesFilter from './utils/CapabilitiesFilter.js';\nimport URIFragmentModel from './models/URIFragmentModel.js';\nimport ManifestModel from './models/ManifestModel.js';\nimport MediaPlayerModel from './models/MediaPlayerModel.js';\nimport AbrController from './controllers/AbrController.js';\nimport SchemeLoaderFactory from './net/SchemeLoaderFactory.js';\nimport VideoModel from './models/VideoModel.js';\nimport CmcdModel from './models/CmcdModel.js';\nimport CmsdModel from './models/CmsdModel.js';\nimport DOMStorage from './utils/DOMStorage.js';\nimport Debug from './../core/Debug.js';\nimport Errors from './../core/errors/Errors.js';\nimport EventBus from './../core/EventBus.js';\nimport Events from './../core/events/Events.js';\nimport MediaPlayerEvents from './MediaPlayerEvents.js';\nimport FactoryMaker from '../core/FactoryMaker.js';\nimport Settings from '../core/Settings.js';\nimport {getVersionString} from '../core/Version.js';\n\n//Dash\nimport SegmentBaseController from '../dash/controllers/SegmentBaseController.js';\nimport DashAdapter from '../dash/DashAdapter.js';\nimport DashMetrics from '../dash/DashMetrics.js';\nimport TimelineConverter from '../dash/utils/TimelineConverter.js';\nimport {\n HTTPRequest\n} from './vo/metrics/HTTPRequest.js';\nimport BASE64 from '../../externals/base64.js';\nimport ISOBoxer from 'codem-isoboxer';\nimport DashJSError from './vo/DashJSError.js';\nimport {checkParameterType} from './utils/SupervisorTools.js';\nimport ManifestUpdater from './ManifestUpdater.js';\nimport URLUtils from '../streaming/utils/URLUtils.js';\nimport BoxParser from './utils/BoxParser.js';\nimport TextController from './text/TextController.js';\nimport CustomParametersModel from './models/CustomParametersModel.js';\nimport ThroughputController from './controllers/ThroughputController.js';\nimport ClientDataReportingController from './controllers/ClientDataReportingController.js';\n\n/**\n * The media types\n * @typedef {('video' | 'audio' | 'text' | 'image')} MediaType\n */\n\n/**\n * @module MediaPlayer\n * @description The MediaPlayer is the primary dash.js Module and a Facade to build your player around.\n * It will allow you access to all the important dash.js properties/methods via the public API and all the\n * events to build a robust DASH media player.\n */\nfunction MediaPlayer() {\n /**\n * @constant {string} STREAMING_NOT_INITIALIZED_ERROR error string thrown when a function is called before the dash.js has been fully initialized\n * @inner\n */\n const STREAMING_NOT_INITIALIZED_ERROR = 'You must first call initialize() and set a source before calling this method';\n /**\n * @constant {string} PLAYBACK_NOT_INITIALIZED_ERROR error string thrown when a function is called before the dash.js has been fully initialized\n * @inner\n */\n const PLAYBACK_NOT_INITIALIZED_ERROR = 'You must first call initialize() and set a valid source and view before calling this method';\n /**\n * @constant {string} ELEMENT_NOT_ATTACHED_ERROR error string thrown when a function is called before the dash.js has received a reference of an HTML5 video element\n * @inner\n */\n const ELEMENT_NOT_ATTACHED_ERROR = 'You must first call attachView() to set the video element before calling this method';\n /**\n * @constant {string} SOURCE_NOT_ATTACHED_ERROR error string thrown when a function is called before the dash.js has received a valid source stream.\n * @inner\n */\n const SOURCE_NOT_ATTACHED_ERROR = 'You must first call attachSource() with a valid source before calling this method';\n /**\n * @constant {string} MEDIA_PLAYER_NOT_INITIALIZED_ERROR error string thrown when a function is called before the dash.js has been fully initialized.\n * @inner\n */\n const MEDIA_PLAYER_NOT_INITIALIZED_ERROR = 'MediaPlayer not initialized!';\n /**\n * @constant {string} ARRAY_NOT_SUPPORTED_ERROR error string thrown when settings object was called using an array.\n * @inner\n */\n const ARRAY_NOT_SUPPORTED_ERROR = 'Array type not supported for settings!';\n\n const context = this.context;\n const eventBus = EventBus(context).getInstance();\n let settings = Settings(context).getInstance();\n const debug = Debug(context).getInstance({ settings: settings });\n\n let instance,\n logger,\n source,\n protectionData,\n mediaPlayerInitialized,\n streamingInitialized,\n playbackInitialized,\n autoPlay,\n providedStartTime,\n abrController,\n throughputController,\n schemeLoaderFactory,\n timelineConverter,\n mediaController,\n protectionController,\n metricsReportingController,\n mssHandler,\n offlineController,\n adapter,\n mediaPlayerModel,\n customParametersModel,\n errHandler,\n baseURLController,\n capabilities,\n capabilitiesFilter,\n streamController,\n textController,\n gapController,\n playbackController,\n serviceDescriptionController,\n contentSteeringController,\n catchupController,\n dashMetrics,\n manifestModel,\n cmcdModel,\n cmsdModel,\n videoModel,\n uriFragmentModel,\n domStorage,\n segmentBaseController,\n clientDataReportingController;\n\n /*\n ---------------------------------------------------------------------------\n\n INIT FUNCTIONS\n\n ---------------------------------------------------------------------------\n */\n function setup() {\n logger = debug.getLogger(instance);\n mediaPlayerInitialized = false;\n playbackInitialized = false;\n streamingInitialized = false;\n autoPlay = true;\n providedStartTime = NaN;\n protectionController = null;\n offlineController = null;\n protectionData = null;\n adapter = null;\n segmentBaseController = null;\n Events.extend(MediaPlayerEvents);\n mediaPlayerModel = MediaPlayerModel(context).getInstance();\n customParametersModel = CustomParametersModel(context).getInstance();\n videoModel = VideoModel(context).getInstance();\n uriFragmentModel = URIFragmentModel(context).getInstance();\n }\n\n /**\n * Configure media player with customs controllers. Helpful for tests\n *\n * @param {object=} config controllers configuration\n * @memberof module:MediaPlayer\n * @instance\n */\n function setConfig(config) {\n if (!config) {\n return;\n }\n if (config.capabilities) {\n capabilities = config.capabilities;\n }\n if (config.capabilitiesFilter) {\n capabilitiesFilter = config.capabilitiesFilter;\n }\n if (config.streamController) {\n streamController = config.streamController;\n }\n if (config.textController) {\n textController = config.textController;\n }\n if (config.gapController) {\n gapController = config.gapController;\n }\n if (config.throughputController) {\n throughputController = config.throughputController\n }\n if (config.playbackController) {\n playbackController = config.playbackController;\n }\n if (config.serviceDescriptionController) {\n serviceDescriptionController = config.serviceDescriptionController\n }\n if (config.contentSteeringController) {\n contentSteeringController = config.contentSteeringController;\n }\n if (config.clientDataReportingController) {\n clientDataReportingController = config.clientDataReportingController;\n }\n if (config.catchupController) {\n catchupController = config.catchupController;\n }\n if (config.mediaPlayerModel) {\n mediaPlayerModel = config.mediaPlayerModel;\n }\n if (config.customParametersModel) {\n customParametersModel = config.customParametersModel;\n }\n if (config.abrController) {\n abrController = config.abrController;\n }\n if (config.schemeLoaderFactory) {\n schemeLoaderFactory = config.schemeLoaderFactory;\n }\n if (config.mediaController) {\n mediaController = config.mediaController;\n }\n if (config.settings) {\n settings = config.settings;\n }\n\n if (config.dashMetrics) {\n dashMetrics = config.dashMetrics;\n }\n }\n\n /**\n * Upon creating the MediaPlayer you must call initialize before you call anything else.\n * There is one exception to this rule. It is crucial to call {@link module:MediaPlayer#extend extend()}\n * with all your extensions prior to calling initialize.\n *\n * ALL arguments are optional and there are individual methods to set each argument later on.\n * The args in this method are just for convenience and should only be used for a simple player setup.\n *\n * @param {HTML5MediaElement=} view - Optional arg to set the video element. {@link module:MediaPlayer#attachView attachView()}\n * @param {string=} source - Optional arg to set the media source. {@link module:MediaPlayer#attachSource attachSource()}\n * @param {boolean=} autoPlay - Optional arg to set auto play. {@link module:MediaPlayer#setAutoPlay setAutoPlay()}\n * @param {number|string} startTime - For VoD content the start time is relative to the start time of the first period.\n * For live content\n * If the parameter starts from prefix posix: it signifies the absolute time range defined in seconds of Coordinated Universal Time (ITU-R TF.460-6). This is the number of seconds since 01-01-1970 00:00:00 UTC. Fractions of seconds may be optionally specified down to the millisecond level.\n * If no posix prefix is used the starttime is relative to MPD@availabilityStartTime\n * @see {@link module:MediaPlayer#attachSource attachSource()}\n * @see {@link module:MediaPlayer#setAutoPlay setAutoPlay()}\n * @memberof module:MediaPlayer\n * @instance\n */\n function initialize(view, source, autoPlay, startTime = NaN) {\n if (!capabilities) {\n capabilities = Capabilities(context).getInstance();\n capabilities.setConfig({\n settings,\n protectionController\n })\n }\n\n if (!errHandler) {\n errHandler = ErrorHandler(context).getInstance();\n }\n\n if (!capabilities.supportsMediaSource()) {\n errHandler.error(new DashJSError(Errors.CAPABILITY_MEDIASOURCE_ERROR_CODE, Errors.CAPABILITY_MEDIASOURCE_ERROR_MESSAGE));\n return;\n }\n\n if (!mediaPlayerInitialized) {\n mediaPlayerInitialized = true;\n\n // init some controllers and models\n timelineConverter = TimelineConverter(context).getInstance();\n if (!throughputController) {\n throughputController = ThroughputController(context).getInstance();\n }\n if (!abrController) {\n abrController = AbrController(context).getInstance();\n }\n\n if (!schemeLoaderFactory) {\n schemeLoaderFactory = SchemeLoaderFactory(context).getInstance();\n }\n\n if (!playbackController) {\n playbackController = PlaybackController(context).getInstance();\n }\n\n if (!mediaController) {\n mediaController = MediaController(context).getInstance();\n }\n\n if (!streamController) {\n streamController = StreamController(context).getInstance();\n }\n\n if (!gapController) {\n gapController = GapController(context).getInstance();\n }\n\n if (!catchupController) {\n catchupController = CatchupController(context).getInstance();\n }\n\n if (!serviceDescriptionController) {\n serviceDescriptionController = ServiceDescriptionController(context).getInstance();\n }\n\n if (!contentSteeringController) {\n contentSteeringController = ContentSteeringController(context).getInstance();\n }\n\n if (!capabilitiesFilter) {\n capabilitiesFilter = CapabilitiesFilter(context).getInstance();\n }\n\n adapter = DashAdapter(context).getInstance();\n\n manifestModel = ManifestModel(context).getInstance();\n\n cmcdModel = CmcdModel(context).getInstance();\n\n cmsdModel = CmsdModel(context).getInstance();\n\n clientDataReportingController = ClientDataReportingController(context).getInstance();\n\n dashMetrics = DashMetrics(context).getInstance({\n settings: settings\n });\n\n domStorage = DOMStorage(context).getInstance({\n settings: settings\n });\n\n adapter.setConfig({\n constants: Constants,\n cea608parser: new Cta608Parser(),\n errHandler: errHandler,\n BASE64: BASE64\n });\n\n if (!baseURLController) {\n baseURLController = BaseURLController(context).create();\n }\n\n baseURLController.setConfig({\n adapter,\n contentSteeringController\n });\n\n serviceDescriptionController.setConfig({\n adapter\n });\n\n if (!segmentBaseController) {\n segmentBaseController = SegmentBaseController(context).getInstance({\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n errHandler: errHandler,\n baseURLController: baseURLController,\n events: Events,\n eventBus: eventBus,\n debug: debug,\n boxParser: BoxParser(context).getInstance(),\n errors: Errors\n });\n }\n\n // configure controllers\n mediaController.setConfig({\n domStorage,\n settings,\n mediaPlayerModel,\n customParametersModel,\n videoModel\n });\n\n mediaPlayerModel.setConfig({\n playbackController,\n serviceDescriptionController\n });\n\n contentSteeringController.setConfig({\n adapter,\n errHandler,\n dashMetrics,\n mediaPlayerModel,\n manifestModel,\n serviceDescriptionController,\n throughputController,\n eventBus\n })\n\n restoreDefaultUTCTimingSources();\n setAutoPlay(autoPlay !== undefined ? autoPlay : true);\n\n // Detect and initialize offline module to support offline contents playback\n _detectOffline();\n }\n\n if (view) {\n attachView(view);\n }\n\n if (source) {\n attachSource(source, startTime);\n }\n\n logger.info('[dash.js ' + getVersion() + '] ' + 'MediaPlayer has been initialized');\n }\n\n /**\n * Sets the MPD source and the video element to null. You can also reset the MediaPlayer by\n * calling attachSource with a new source file.\n *\n * This call does not destroy the MediaPlayer. To destroy the MediaPlayer and free all of its\n * memory, call destroy().\n *\n * @memberof module:MediaPlayer\n * @instance\n */\n function reset() {\n attachSource(null);\n attachView(null);\n protectionData = null;\n if (protectionController) {\n protectionController.reset();\n protectionController = null;\n }\n if (metricsReportingController) {\n metricsReportingController.reset();\n metricsReportingController = null;\n }\n if (customParametersModel) {\n customParametersModel.reset();\n }\n\n settings.reset();\n\n if (offlineController) {\n offlineController.reset();\n offlineController = null;\n }\n }\n\n /**\n * Completely destroys the media player and frees all memory.\n *\n * @memberof module:MediaPlayer\n * @instance\n */\n function destroy() {\n reset();\n FactoryMaker.deleteSingletonInstances(context);\n }\n\n /**\n * The ready state of the MediaPlayer based on both the video element and MPD source being defined.\n *\n * @returns {boolean} The current ready state of the MediaPlayer\n * @see {@link module:MediaPlayer#attachView attachView()}\n * @see {@link module:MediaPlayer#attachSource attachSource()}\n * @memberof module:MediaPlayer\n * @instance\n */\n function isReady() {\n return (!!source && !!videoModel.getElement());\n }\n\n /**\n * Use the on method to listen for public events found in MediaPlayer.events. {@link MediaPlayerEvents}\n *\n * @param {string} type - {@link MediaPlayerEvents}\n * @param {Function} listener - callback method when the event fires.\n * @param {Object} scope - context of the listener so it can be removed properly.\n * @param {Object} options - object to define various options such as priority and mode\n * @memberof module:MediaPlayer\n * @instance\n */\n function on(type, listener, scope, options) {\n eventBus.on(type, listener, scope, options);\n }\n\n /**\n * Use the off method to remove listeners for public events found in MediaPlayer.events. {@link MediaPlayerEvents}\n *\n * @param {string} type - {@link MediaPlayerEvents}\n * @param {Function} listener - callback method when the event fires.\n * @param {Object} scope - context of the listener so it can be removed properly.\n * @memberof module:MediaPlayer\n * @instance\n */\n function off(type, listener, scope) {\n eventBus.off(type, listener, scope);\n }\n\n /**\n * Use this method to trigger an event via the eventBus {@link MediaPlayerEvents}\n *\n * @param {string} type - {@link MediaPlayerEvents}\n * @param {object} payload - Payload of the event\n * @param {Object} filters - Define a \"streamId\" and/or a \"mediaType\" for which this event is valid, e.g. {streamId, mediaType}\n * @memberof module:MediaPlayer\n * @instance\n */\n function trigger(type, payload, filters) {\n eventBus.trigger(type, payload, filters);\n }\n\n /**\n * Current version of Dash.js\n * @returns {string} the current dash.js version string.\n * @memberof module:MediaPlayer\n * @instance\n */\n function getVersion() {\n return getVersionString();\n }\n\n /**\n * Use this method to access the dash.js logging class.\n *\n * @returns {Debug}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getDebug() {\n return debug;\n }\n\n /*\n ---------------------------------------------------------------------------\n\n PLAYBACK FUNCTIONS\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Causes the player to begin streaming the media as set by the {@link module:MediaPlayer#attachSource attachSource()}\n * method in preparation for playing. It specifically does not require a view to be attached with {@link module:MediaPlayer#attachSource attachView()} to begin preloading.\n * When a view is attached after preloading, the buffered data is transferred to the attached mediaSource buffers.\n *\n * @see {@link module:MediaPlayer#attachSource attachSource()}\n * @see {@link module:MediaPlayer#attachView attachView()}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~SOURCE_NOT_ATTACHED_ERROR SOURCE_NOT_ATTACHED_ERROR} if called before attachSource function\n * @instance\n */\n function preload() {\n if (videoModel.getElement() || streamingInitialized) {\n return;\n }\n if (source) {\n _initializePlayback(providedStartTime);\n } else {\n throw SOURCE_NOT_ATTACHED_ERROR;\n }\n }\n\n /**\n * The play method initiates playback of the media defined by the {@link module:MediaPlayer#attachSource attachSource()} method.\n * This method will call play on the native Video Element.\n *\n * @see {@link module:MediaPlayer#attachSource attachSource()}\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function play() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n if (!autoPlay || (isPaused() && playbackInitialized)) {\n playbackController.play(true);\n }\n }\n\n /**\n * This method will call pause on the native Video Element.\n *\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function pause() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n playbackController.pause();\n }\n\n /**\n * Returns a Boolean that indicates whether the Video Element is paused.\n * @return {boolean}\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function isPaused() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n return playbackController.isPaused();\n }\n\n /**\n * Sets the currentTime property of the attached video element. If it is a live stream with a\n * timeShiftBufferLength, then the DVR window offset will be automatically calculated.\n *\n * @param {number} value - A relative time, in seconds, based on the return value of the {@link module:MediaPlayer#duration duration()} method is expected.\n * For dynamic streams duration() returns DVRWindow.end - DVRWindow.start. Consequently, the value provided to this function should be relative to DVRWindow.start.\n * @see {@link module:MediaPlayer#getDvrSeekOffset getDvrSeekOffset()}\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with an invalid argument, not number type or is NaN.\n * @memberof module:MediaPlayer\n * @instance\n */\n function seek(value) {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n\n checkParameterType(value, 'number');\n\n if (isNaN(value)) {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n\n if (value < 0) {\n value = 0;\n }\n\n let s = playbackController.getIsDynamic() ? getDvrSeekOffset(value) : value;\n\n // For VoD limit the seek to the duration of the content\n const videoElement = getVideoElement();\n if (!playbackController.getIsDynamic() && videoElement.duration) {\n s = Math.min(videoElement.duration, s);\n }\n\n playbackController.seek(s, false, false, true);\n }\n\n /**\n * Sets the currentTime property of the attached video element. Compared to the seek() function this function does not add the DVR window offset. Instead, it takes a presentation time relative to the availability start time.\n * For VoD this function behaves similar to the seek() function.\n\n * @param {number} value - A presentation time in seconds\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with an invalid argument, not number type or is NaN.\n * @memberof module:MediaPlayer\n * @instance\n */\n function seekToPresentationTime(seektime) {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n\n checkParameterType(seektime, 'number');\n\n if (isNaN(seektime)) {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n\n if (seektime < 0) {\n seektime = 0;\n }\n\n\n // For VoD limit the seek to the duration of the content\n const videoElement = getVideoElement();\n if (!playbackController.getIsDynamic() && videoElement.duration) {\n seektime = Math.min(videoElement.duration, seektime);\n }\n\n // For live, take live delay into account\n if (playbackController.getIsDynamic()) {\n const type = streamController && streamController.hasVideoTrack() ? Constants.VIDEO : Constants.AUDIO;\n let metric = dashMetrics.getCurrentDVRInfo(type);\n if (!metric) {\n return;\n }\n seektime = _adjustSeekTimeBasedOnLiveDelay(seektime, metric)\n if (seektime < metric.range.start) {\n seektime = metric.range.start\n }\n }\n\n playbackController.seek(seektime, false, false, true);\n }\n\n /**\n * Seeks back to the original live edge (live edge as calculated at playback start). Only applies to live streams, for VoD streams this call will be ignored.\n */\n function seekToOriginalLive() {\n if (!playbackInitialized || !isDynamic()) {\n return;\n }\n\n playbackController.seekToOriginalLive();\n }\n\n /**\n * Returns a Boolean that indicates whether the media is in the process of seeking to a new position.\n * @return {boolean}\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function isSeeking() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n return playbackController.isSeeking();\n }\n\n /**\n * Returns a Boolean that indicates whether the media is in the process of dynamic.\n * @return {boolean}\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function isDynamic() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n return playbackController.getIsDynamic();\n }\n\n /**\n * Returns a boolean that indicates whether the player is operating in low latency mode.\n * @return {boolean}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getLowLatencyModeEnabled() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n return playbackController.getLowLatencyModeEnabled();\n }\n\n /**\n * Use this method to set the native Video Element's playback rate.\n * @param {number} value\n * @memberof module:MediaPlayer\n * @instance\n */\n function setPlaybackRate(value) {\n getVideoElement().playbackRate = value;\n }\n\n /**\n * Returns the current playback rate.\n * @returns {number}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getPlaybackRate() {\n return getVideoElement().playbackRate;\n }\n\n /**\n * Use this method to set the native Video Element's muted state. Takes a Boolean that determines whether audio is muted. true if the audio is muted and false otherwise.\n * @param {boolean} value\n * @memberof module:MediaPlayer\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with an invalid argument, not boolean type.\n * @instance\n */\n function setMute(value) {\n checkParameterType(value, 'boolean');\n getVideoElement().muted = value;\n }\n\n /**\n * A Boolean that determines whether audio is muted.\n * @returns {boolean}\n * @memberof module:MediaPlayer\n * @instance\n */\n function isMuted() {\n return getVideoElement().muted;\n }\n\n /**\n * A double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @param {number} value\n * @memberof module:MediaPlayer\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with an invalid argument, not number type, or is NaN or not between 0 and 1.\n * @instance\n */\n function setVolume(value) {\n if (typeof value !== 'number' || isNaN(value) || value < 0.0 || value > 1.0) {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n getVideoElement().volume = value;\n }\n\n /**\n * Returns the current audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @returns {number}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getVolume() {\n return getVideoElement().volume;\n }\n\n /**\n * The length of the buffer for a given media type, in seconds. Valid media\n * types are \"video\", \"audio\" and \"text\". If no type is passed\n * in, then the minimum of video, audio and text buffer length is\n * returned. NaN is returned if an invalid type is requested, the\n * presentation does not contain that type, or if no arguments are passed\n * and the presentation does not include any adaption sets of valid media\n * type.\n *\n * @param {MediaType} type - 'video', 'audio' or 'text'\n * @returns {number} The length of the buffer for the given media type, in\n * seconds, or NaN\n * @memberof module:MediaPlayer\n * @instance\n */\n function getBufferLength(type) {\n const types = [Constants.VIDEO, Constants.AUDIO, Constants.TEXT];\n if (!type) {\n const buffer = types.map(\n t => getTracksFor(t).length > 0 ? getDashMetrics().getCurrentBufferLevel(t) : Number.MAX_VALUE\n ).reduce(\n (p, c) => Math.min(p, c)\n );\n return buffer === Number.MAX_VALUE ? NaN : buffer;\n } else {\n if (types.indexOf(type) !== -1) {\n const buffer = getDashMetrics().getCurrentBufferLevel(type);\n return buffer ? buffer : NaN;\n } else {\n logger.warn('getBufferLength requested for invalid type');\n return NaN;\n }\n }\n }\n\n /**\n * This method should only be used with a live stream that has a valid timeShiftBufferLength (DVR Window).\n * NOTE - If you do not need the raw offset value (i.e. media analytics, tracking, etc) consider using the {@link module:MediaPlayer#seek seek()} method\n * which will calculate this value for you and set the video element's currentTime property all in one simple call.\n *\n * @param {number} value - A relative time, in seconds, based on the return value of the {@link module:MediaPlayer#duration duration()} method is expected.\n * @returns {number} A value that is relative the available range within the timeShiftBufferLength (DVR Window).\n * @see {@link module:MediaPlayer#seek seek()}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getDvrSeekOffset(value) {\n const type = streamController && streamController.hasVideoTrack() ? Constants.VIDEO : Constants.AUDIO;\n let metric = dashMetrics.getCurrentDVRInfo(type);\n if (!metric) {\n return 0;\n }\n\n let val = metric.range.start + value;\n\n return _adjustSeekTimeBasedOnLiveDelay(val, metric);\n }\n\n function _adjustSeekTimeBasedOnLiveDelay(seektime, metric) {\n let liveDelay = playbackController.getOriginalLiveDelay();\n if (seektime > (metric.range.end - liveDelay)) {\n seektime = metric.range.end - liveDelay;\n }\n\n return seektime;\n }\n\n /**\n * Returns the target live delay\n * @returns {number} The target live delay\n * @memberof module:MediaPlayer\n * @instance\n */\n function getTargetLiveDelay() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n\n return playbackController.getOriginalLiveDelay();\n }\n\n /**\n * Current playhead time in seconds.\n *\n * If called with no arguments then the returned value is the current time of the video element.\n * However, if a period ID is supplied then time is relative to the start of that period, or is null if there is no such period id in the manifest.\n *\n * @param {string} periodId - The ID of a period that the returned playhead time must be relative to the start of. If undefined, then playhead time is relative to the first period or the AST.\n * @returns {number} The current playhead time of the media, or null.\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function time(periodId = '') {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n let t = getVideoElement().currentTime;\n\n if (periodId !== '') {\n t = streamController.getTimeRelativeToStreamId(t, periodId);\n }\n\n return t;\n }\n\n /**\n * Returns the current playhead time relative to the start of the DVR window.\n * For VoD this method returns the same value as time()\n * @returns {number} The current playhead time of the media relative to the start of the DVR window\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function timeInDvrWindow() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n\n if (!playbackController.getIsDynamic()) {\n return time()\n }\n\n let t = getVideoElement().currentTime;\n const type = streamController && streamController.hasVideoTrack() ? Constants.VIDEO : Constants.AUDIO;\n let metric = dashMetrics.getCurrentDVRInfo(type);\n t = (metric === null || t === 0) ? 0 : Math.max(0, (t - metric.range.start));\n\n return t\n }\n\n /**\n * Returns information about the current DVR window including the start time, the end time, the window size.\n * @returns {{startAsUtc: (*|number), size: number, endAsUtc: (*|number), start, end}|{}}\n */\n function getDvrWindow() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n\n const type = streamController && streamController.hasVideoTrack() ? Constants.VIDEO : Constants.AUDIO;\n let metric = dashMetrics.getCurrentDVRInfo(type);\n\n if (!metric) {\n return {}\n }\n\n let offset = 0;\n const isDynamic = playbackController.getIsDynamic();\n if (isDynamic) {\n offset = metric.manifestInfo.availableFrom.getTime() / 1000;\n }\n return {\n start: metric.range.start,\n end: metric.range.end,\n startAsUtc: isDynamic ? offset + metric.range.start : NaN,\n endAsUtc: isDynamic ? offset + metric.range.end : NaN,\n size: metric.range.end - metric.range.start\n }\n }\n\n /**\n * Total duration of the media in seconds.\n *\n * @returns {number} The total duration of the media. For a dynamic stream this will return DVRWindow.end - DVRWindow.start\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function duration() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n let d = getVideoElement().duration;\n\n if (playbackController.getIsDynamic()) {\n const type = streamController && streamController.hasVideoTrack() ? Constants.VIDEO : Constants.AUDIO;\n let metric = dashMetrics.getCurrentDVRInfo(type);\n d = metric ? (metric.range.end - metric.range.start) : 0;\n }\n return d;\n }\n\n /**\n * Use this method to get the current playhead time as an absolute value in seconds since midnight UTC, Jan 1 1970.\n * Note - this property only has meaning for live streams and is NaN for VoD content. If called before play() has begun, it will return a value of NaN.\n *\n * @returns {number} The current playhead time as UTC timestamp.\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function timeAsUTC() {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n\n if (!playbackController.getIsDynamic() || time() < 0) {\n return NaN\n }\n\n const type = streamController && streamController.hasVideoTrack() ? Constants.VIDEO : Constants.AUDIO;\n let metric = dashMetrics.getCurrentDVRInfo(type);\n let availabilityStartTime,\n utcValue;\n\n if (!metric) {\n return 0;\n }\n availabilityStartTime = metric.manifestInfo.availableFrom.getTime() / 1000;\n utcValue = availabilityStartTime + time()\n return utcValue;\n }\n\n /*\n ---------------------------------------------------------------------------\n\n MEDIA PLAYER CONFIGURATION\n\n ---------------------------------------------------------------------------\n */\n /**\n *

Set to false to prevent stream from auto-playing when the view is attached.

\n *\n * @param {boolean} value\n * @default true\n * @memberof module:MediaPlayer\n * @see {@link module:MediaPlayer#attachView attachView()}\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with an invalid argument, not boolean type.\n * @instance\n *\n */\n function setAutoPlay(value) {\n checkParameterType(value, 'boolean');\n autoPlay = value;\n }\n\n /**\n * @returns {boolean} The current autoPlay state.\n * @memberof module:MediaPlayer\n * @instance\n */\n function getAutoPlay() {\n return autoPlay;\n }\n\n /**\n * @memberof module:MediaPlayer\n * @instance\n * @returns {number|NaN} Current live stream latency in seconds. It is the difference between now time and time position at the playback head.\n * @throws {@link module:MediaPlayer~MEDIA_PLAYER_NOT_INITIALIZED_ERROR MEDIA_PLAYER_NOT_INITIALIZED_ERROR} if called before initialize function\n */\n function getCurrentLiveLatency() {\n if (!mediaPlayerInitialized) {\n throw MEDIA_PLAYER_NOT_INITIALIZED_ERROR;\n }\n\n if (!playbackInitialized) {\n return NaN;\n }\n\n return playbackController.getCurrentLiveLatency();\n }\n\n /**\n * Add a custom ABR Rule\n * Rule will be apply on next stream if a stream is being played\n *\n * @param {string} type - rule type (one of ['qualitySwitchRules','abandonFragmentRules'])\n * @param {string} rulename - name of rule (used to identify custom rule). If one rule of same name has been added, then existing rule will be updated\n * @param {object} rule - the rule object instance\n * @memberof module:MediaPlayer\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with invalid arguments.\n * @instance\n */\n function addABRCustomRule(type, rulename, rule) {\n customParametersModel.addAbrCustomRule(type, rulename, rule);\n }\n\n /**\n * Remove a custom ABR Rule\n *\n * @param {string} rulename - name of the rule to be removed\n * @memberof module:MediaPlayer\n * @instance\n */\n function removeABRCustomRule(rulename) {\n customParametersModel.removeAbrCustomRule(rulename);\n }\n\n /**\n * Remove all ABR custom rules\n * @memberof module:MediaPlayer\n * @instance\n */\n function removeAllABRCustomRule() {\n customParametersModel.removeAllAbrCustomRule();\n }\n\n /**\n * Returns all ABR custom rules\n * @return {Array}\n */\n function getABRCustomRules() {\n return customParametersModel.getAbrCustomRules();\n }\n\n /**\n *

Allows you to set a scheme and server source for UTC live edge detection for dynamic streams.\n * If UTCTiming is defined in the manifest, it will take precedence over any time source manually added.

\n *

If you have exposed the Date header, use the method {@link module:MediaPlayer#clearDefaultUTCTimingSources clearDefaultUTCTimingSources()}.\n * This will allow the date header on the manifest to be used instead of a time server

\n * @param {string} schemeIdUri -
    \n *
  • urn:mpeg:dash:utc:http-head:2014
  • \n *
  • urn:mpeg:dash:utc:http-xsdate:2014
  • \n *
  • urn:mpeg:dash:utc:http-iso:2014
  • \n *
  • urn:mpeg:dash:utc:direct:2014
  • \n *
\n *

Some specs referencing early ISO23009-1 drafts incorrectly use\n * 2012 in the URI, rather than 2014. support these for now.

\n *
    \n *
  • urn:mpeg:dash:utc:http-head:2012
  • \n *
  • urn:mpeg:dash:utc:http-xsdate:2012
  • \n *
  • urn:mpeg:dash:utc:http-iso:2012
  • \n *
  • urn:mpeg:dash:utc:direct:2012
  • \n *
\n * @param {string} value - Path to a time source.\n * @default\n *
    \n *
  • schemeIdUri:urn:mpeg:dash:utc:http-xsdate:2014
  • \n *
  • value:http://time.akamai.com/?iso&ms/li>\n *
\n * @memberof module:MediaPlayer\n * @see {@link module:MediaPlayer#removeUTCTimingSource removeUTCTimingSource()}\n * @instance\n */\n function addUTCTimingSource(schemeIdUri, value) {\n customParametersModel.addUTCTimingSource(schemeIdUri, value);\n }\n\n /**\n *

Allows you to remove a UTC time source. Both schemeIdUri and value need to match the Dash.vo.UTCTiming properties in order for the\n * entry to be removed from the array

\n * @param {string} schemeIdUri - see {@link module:MediaPlayer#addUTCTimingSource addUTCTimingSource()}\n * @param {string} value - see {@link module:MediaPlayer#addUTCTimingSource addUTCTimingSource()}\n * @memberof module:MediaPlayer\n * @see {@link module:MediaPlayer#clearDefaultUTCTimingSources clearDefaultUTCTimingSources()}\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with invalid arguments, schemeIdUri and value are not string type.\n * @instance\n */\n function removeUTCTimingSource(schemeIdUri, value) {\n customParametersModel.removeUTCTimingSource(schemeIdUri, value);\n }\n\n /**\n *

Allows you to clear the stored array of time sources.

\n *

Example use: If you have exposed the Date header, calling this method\n * will allow the date header on the manifest to be used instead of the time server.

\n *

Example use: Calling this method, assuming there is not an exposed date header on the manifest, will default back\n * to using a binary search to discover the live edge

\n *\n * @memberof module:MediaPlayer\n * @see {@link module:MediaPlayer#restoreDefaultUTCTimingSources restoreDefaultUTCTimingSources()}\n * @instance\n */\n function clearDefaultUTCTimingSources() {\n customParametersModel.clearDefaultUTCTimingSources();\n }\n\n /**\n *

Allows you to restore the default time sources after calling {@link module:MediaPlayer#clearDefaultUTCTimingSources clearDefaultUTCTimingSources()}

\n *\n * @default\n *
    \n *
  • schemeIdUri:urn:mpeg:dash:utc:http-xsdate:2014
  • \n *
  • value:http://time.akamai.com/?iso&ms
  • \n *
\n *\n * @memberof module:MediaPlayer\n * @see {@link module:MediaPlayer#addUTCTimingSource addUTCTimingSource()}\n * @instance\n */\n function restoreDefaultUTCTimingSources() {\n customParametersModel.restoreDefaultUTCTimingSources();\n }\n\n /**\n * Returns the average latency computed in the ThroughputController in milliseconds\n *\n * @param {MediaType} type\n * @param {string} calculationMode\n * @param {number} sampleSize\n * @return {number} value\n * @memberof module:MediaPlayer\n * @instance\n */\n function getAverageLatency(type = Constants.VIDEO, calculationMode = null, sampleSize = NaN) {\n return throughputController ? throughputController.getAverageLatency(type, calculationMode, sampleSize) : 0;\n }\n\n /**\n * Returns the average throughput computed in the ThroughputController in kbit/s\n *\n * @param {MediaType} type\n * @param {string} calculationMode\n * @param {number} sampleSize\n * @return {number} value\n * @memberof module:MediaPlayer\n * @instance\n */\n function getAverageThroughput(type = Constants.VIDEO, calculationMode = null, sampleSize = NaN) {\n return throughputController ? throughputController.getAverageThroughput(type, calculationMode, sampleSize) : 0;\n }\n\n /**\n * Returns the safe average throughput computed in the ThroughputController in kbit/s. The safe average throughput is the average throughput multiplied by bandwidthSafetyFactor\n *\n * @param {MediaType} type\n * @param {string} calculationMode\n * @param {number} sampleSize\n * @return {number} value\n * @memberof module:MediaPlayer\n * @instance\n */\n function getSafeAverageThroughput(type = Constants.VIDEO, calculationMode = null, sampleSize = NaN) {\n return throughputController ? throughputController.getSafeAverageThroughput(type, calculationMode, sampleSize) : 0;\n }\n\n /**\n * Returns the raw throughput data without calculating the average. This can be used to calculate the current throughput yourself.\n *\n * @param {MediaType} type\n * @return {Array} value\n * @memberof module:MediaPlayer\n * @instance\n */\n function getRawThroughputData(type = Constants.VIDEO) {\n return throughputController ? throughputController.getRawThroughputData(type) : [];\n }\n\n /**\n * Sets whether withCredentials on XHR requests for a particular request\n * type is true or false\n *\n * @default false\n * @param {string} type - one of HTTPRequest.*_TYPE\n * @param {boolean} value\n * @memberof module:MediaPlayer\n * @instance\n */\n function setXHRWithCredentialsForType(type, value) {\n customParametersModel.setXHRWithCredentialsForType(type, value);\n }\n\n /**\n * Gets whether withCredentials on XHR requests for a particular request\n * type is true or false\n *\n * @param {string} type - one of HTTPRequest.*_TYPE\n * @return {boolean}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getXHRWithCredentialsForType(type) {\n return customParametersModel.getXHRWithCredentialsForType(type);\n }\n\n /*\n ---------------------------------------------------------------------------\n\n OFFLINE\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Detects if Offline is included and returns an instance of OfflineController.js\n * @memberof module:MediaPlayer\n * @instance\n */\n function getOfflineController() {\n return _detectOffline();\n }\n\n /*\n ---------------------------------------------------------------------------\n\n METRICS\n\n ---------------------------------------------------------------------------\n */\n /**\n * Returns the DashMetrics.js Module. You use this Module to get access to all the public metrics\n * stored in dash.js\n *\n * @see {@link module:DashMetrics}\n * @returns {Object}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getDashMetrics() {\n return dashMetrics;\n }\n\n /*\n ---------------------------------------------------------------------------\n\n TEXT MANAGEMENT\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Enable/disable text\n * When enabling text, dash will choose the previous selected text track\n *\n * @param {boolean} enable - true to enable text, false otherwise (same as setTextTrack(-1))\n * @memberof module:MediaPlayer\n * @instance\n */\n function enableText(enable) {\n const activeStreamInfo = streamController.getActiveStreamInfo();\n\n if (!activeStreamInfo || !textController) {\n return false;\n }\n\n return textController.enableText(activeStreamInfo.id, enable);\n }\n\n /**\n * Enable/disable text\n * When enabling dash will keep downloading and process fragmented text tracks even if all tracks are in mode \"hidden\"\n *\n * @param {boolean} enable - true to enable text streaming even if all text tracks are hidden.\n * @memberof module:MediaPlayer\n * @instance\n */\n function enableForcedTextStreaming(enable) {\n const activeStreamInfo = streamController.getActiveStreamInfo();\n\n if (!activeStreamInfo || !textController) {\n return false;\n }\n\n return textController.enableForcedTextStreaming(enable);\n }\n\n /**\n * Return if text is enabled\n *\n * @return {boolean} return true if text is enabled, false otherwise\n * @memberof module:MediaPlayer\n * @instance\n */\n function isTextEnabled() {\n const activeStreamInfo = streamController.getActiveStreamInfo();\n\n if (!activeStreamInfo || !textController) {\n return false;\n }\n\n return textController.isTextEnabled(activeStreamInfo);\n }\n\n /**\n * Use this method to change the current text track for both external time text files and fragmented text tracks. There is no need to\n * set the track mode on the video object to switch a track when using this method.\n * @param {number} idx - Index of track based on the order of the order the tracks are added Use -1 to disable all tracks. (turn captions off). Use module:MediaPlayer#dashjs.MediaPlayer.events.TEXT_TRACK_ADDED.\n * @see {@link MediaPlayerEvents#event:TEXT_TRACK_ADDED dashjs.MediaPlayer.events.TEXT_TRACK_ADDED}\n * @throws {@link module:MediaPlayer~PLAYBACK_NOT_INITIALIZED_ERROR PLAYBACK_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function setTextTrack(idx) {\n if (!playbackInitialized) {\n throw PLAYBACK_NOT_INITIALIZED_ERROR;\n }\n\n const activeStreamInfo = streamController.getActiveStreamInfo();\n\n if (!activeStreamInfo || !textController) {\n return;\n }\n\n textController.setTextTrack(activeStreamInfo.id, idx);\n }\n\n function getCurrentTextTrackIndex() {\n let idx = NaN;\n\n const activeStreamInfo = streamController.getActiveStreamInfo();\n\n if (!activeStreamInfo || !textController) {\n return;\n }\n\n idx = textController.getCurrentTrackIdx(activeStreamInfo.id);\n\n return idx;\n }\n\n /*\n ---------------------------------------------------------------------------\n\n VIDEO ELEMENT MANAGEMENT\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Returns instance of Video Element that was attached by calling attachView()\n * @returns {Object}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~ELEMENT_NOT_ATTACHED_ERROR ELEMENT_NOT_ATTACHED_ERROR} if called before attachView function\n * @instance\n */\n function getVideoElement() {\n if (!videoModel.getElement()) {\n throw ELEMENT_NOT_ATTACHED_ERROR;\n }\n return videoModel.getElement();\n }\n\n /**\n * Use this method to attach an HTML5 VideoElement for dash.js to operate upon.\n *\n * @param {Object} element - An HTMLMediaElement that has already been defined in the DOM (or equivalent stub).\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~MEDIA_PLAYER_NOT_INITIALIZED_ERROR MEDIA_PLAYER_NOT_INITIALIZED_ERROR} if called before initialize function\n * @instance\n */\n function attachView(element) {\n if (!mediaPlayerInitialized) {\n throw MEDIA_PLAYER_NOT_INITIALIZED_ERROR;\n }\n\n videoModel.setElement(element);\n\n if (element) {\n _detectProtection();\n _detectMetricsReporting();\n _detectMss();\n\n if (streamController) {\n streamController.switchToVideoElement(providedStartTime);\n }\n }\n\n if (playbackInitialized) { //Reset if we have been playing before, so this is a new element.\n _resetPlaybackControllers();\n }\n\n _initializePlayback(providedStartTime);\n }\n\n /**\n * Returns instance of Div that was attached by calling attachTTMLRenderingDiv()\n * @returns {Object}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getTTMLRenderingDiv() {\n return videoModel ? videoModel.getTTMLRenderingDiv() : null;\n }\n\n /**\n * Use this method to attach an HTML5 div for dash.js to render rich TTML subtitles.\n *\n * @param {HTMLDivElement} div - An unstyled div placed after the video element. It will be styled to match the video size and overlay z-order.\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~ELEMENT_NOT_ATTACHED_ERROR ELEMENT_NOT_ATTACHED_ERROR} if called before attachView function\n * @instance\n */\n function attachTTMLRenderingDiv(div) {\n if (!videoModel.getElement()) {\n throw ELEMENT_NOT_ATTACHED_ERROR;\n }\n videoModel.setTTMLRenderingDiv(div);\n }\n\n function attachVttRenderingDiv(div) {\n if (!videoModel.getElement()) {\n throw ELEMENT_NOT_ATTACHED_ERROR;\n }\n videoModel.setVttRenderingDiv(div);\n }\n\n /*\n ---------------------------------------------------------------------------\n\n QUALITY AND TRACK MANAGEMENT\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Gets the current download quality for media type video, audio or images. For video and audio types the ABR\n * rules update this value before every new download unless autoSwitchBitrate is set to false. For 'image'\n * type, thumbnails, there is no ABR algorithm and quality is set manually.\n *\n * @param {MediaType} type - 'video', 'audio' or 'image' (thumbnails)\n * @returns {Representation | null} the quality index, 0 corresponding to the lowest bitrate\n * @memberof module:MediaPlayer\n * @see {@link module:MediaPlayer#getCurrentRepresentationForType getCurrentRepresentationForType()}\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function getCurrentRepresentationForType(type) {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n\n if (type !== Constants.IMAGE && type !== Constants.VIDEO && type !== Constants.AUDIO) {\n return null;\n }\n\n const activeStream = getActiveStream();\n if (!activeStream) {\n return null;\n }\n\n if (type === Constants.IMAGE) {\n const thumbnailController = activeStream.getThumbnailController();\n return !thumbnailController ? -1 : thumbnailController.getCurrentTrack();\n }\n\n return activeStream.getCurrentRepresentationForType(type);\n }\n\n /**\n * Sets the current quality for media type instead of letting the ABR Heuristics automatically select it.\n * This value will be overwritten by the ABR rules unless autoSwitchBitrate is set to false.\n *\n * @param {MediaType} type - 'video', 'audio' or 'image'\n * @param {number} id , The ID of the Representation\n * @param {boolean} forceReplace - true if segments have to be replaced by segments of the new quality\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function setRepresentationForTypeById(type, id, forceReplace = false) {\n if (type !== Constants.IMAGE && type !== Constants.VIDEO && type !== Constants.AUDIO) {\n return;\n }\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n const activeStream = getActiveStream();\n if (!activeStream) {\n return;\n }\n if (type === Constants.IMAGE) {\n const thumbnailController = activeStream.getThumbnailController();\n if (thumbnailController) {\n thumbnailController.setTrackById(id);\n }\n } else {\n const representation = activeStream.getRepresentationForTypeById(type, id);\n if (representation) {\n abrController.setPlaybackQuality(type, streamController.getActiveStreamInfo(), representation, { forceReplace });\n }\n }\n }\n\n /**\n * Sets the current quality for media type instead of letting the ABR Heuristics automatically select it.\n * This value will be overwritten by the ABR rules unless autoSwitchBitrate is set to false.\n * Note that you need to specify a relative index based on the position of the target entry in the return value of getRepresentationsByType().\n * Do NOT use representation.absoluteIndex here as this index was assigned prior to applying any filter function. If you want to select a specific representation then use setRepresentationForTypeById() instead.\n *\n * @param {MediaType} type - 'video', 'audio' or 'image'\n * @param {number} index - the quality index, 0 corresponding to the lowest possible index\n * @param {boolean} forceReplace - true if segments have to be replaced by segments of the new quality\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function setRepresentationForTypeByIndex(type, index, forceReplace = false) {\n if (type !== Constants.IMAGE && type !== Constants.VIDEO && type !== Constants.AUDIO) {\n return;\n }\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n const activeStream = getActiveStream();\n if (!activeStream) {\n return;\n }\n if (type === Constants.IMAGE) {\n const thumbnailController = activeStream.getThumbnailController();\n if (thumbnailController) {\n thumbnailController.setTrackByIndex(index);\n }\n } else {\n const representation = activeStream.getRepresentationForTypeByIndex(type, index);\n if (representation) {\n abrController.setPlaybackQuality(type, streamController.getActiveStreamInfo(), representation, { forceReplace });\n }\n }\n }\n\n /**\n * @param {MediaType} type\n * @param {string} streamId\n * @returns {Array}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function getRepresentationsByType(type, streamId = null) {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n let stream = streamId ? streamController.getStreamById(streamId) : getActiveStream();\n return stream ? stream.getRepresentationsByType(type) : [];\n }\n\n /**\n * This method returns the list of all available streams from a given manifest\n * @param {Object} manifest\n * @returns {Array} list of {@link StreamInfo}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function getStreamsFromManifest(manifest) {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n return adapter.getStreamsInfo(manifest);\n }\n\n /**\n * This method returns the list of all available tracks for a given media type\n * @param {MediaType} type\n * @returns {Array} list of {@link MediaInfo}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function getTracksFor(type) {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n let streamInfo = streamController.getActiveStreamInfo();\n\n if (!streamInfo) {\n return [];\n }\n\n const tracks = mediaController.getTracksFor(type, streamInfo.id);\n return tracks.filter((track) => {\n return protectionController ? protectionController.areKeyIdsUsable(track.normalizedKeyIds) : true\n })\n }\n\n /**\n * This method returns the list of all available tracks for a given media type and streamInfo from a given manifest\n * @param {MediaType} type\n * @param {Object} manifest\n * @param {Object} streamInfo\n * @returns {Array} list of {@link MediaInfo}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function getTracksForTypeFromManifest(type, manifest, streamInfo) {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n\n streamInfo = streamInfo || adapter.getStreamsInfo(manifest, 1)[0];\n\n return streamInfo ? adapter.getAllMediaInfoForType(streamInfo, type, manifest) : [];\n }\n\n /**\n * @param {MediaType} type\n * @returns {Object|null} {@link MediaInfo}\n *\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function getCurrentTrackFor(type) {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n let streamInfo = streamController.getActiveStreamInfo();\n if (streamInfo) {\n return mediaController.getCurrentTrackFor(type, streamInfo.id);\n }\n\n return null\n }\n\n /**\n * This method allows to set media settings that will be used to pick the initial track. Format of the settings\n * is following:
\n * {lang: langValue (can be either a string primitive, a string object, or a RegExp object to match),\n * index: indexValue,\n * viewpoint: viewpointValue (object:{schemeIdUri,value} or value-primitive),\n * audioChannelConfiguration: audioChannelConfigurationValue (object:{schemeIdUri,value} or value-primitive (assumes schemeIdUri='urn:mpeg:mpegB:cicp:ChannelConfiguration')),\n * accessibility: accessibilityValue (object:{schemeIdUri,value} or value-primitive (assumes schemeIdUri='urn:mpeg:dash:role:2011')),\n * role: roleValue (object:{schemeIdUri,value} or value-primitive (assumes schemeIdUri='urn:mpeg:dash:role:2011'))\n * }\n *\n * @param {MediaType} type\n * @param {Object} value\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~MEDIA_PLAYER_NOT_INITIALIZED_ERROR MEDIA_PLAYER_NOT_INITIALIZED_ERROR} if called before initialize function\n * @instance\n */\n function setInitialMediaSettingsFor(type, value) {\n if (!mediaPlayerInitialized) {\n throw MEDIA_PLAYER_NOT_INITIALIZED_ERROR;\n }\n let sanitizedValue = _sanitizeSettings(value);\n mediaController.setInitialSettings(type, sanitizedValue);\n }\n\n /**\n * This method returns media settings that is used to pick the initial track. Format of the settings\n * is following:\n * {lang: langValue,\n * index: indexValue,\n * viewpoint: viewpointValue,\n * audioChannelConfiguration: audioChannelConfigurationValue,\n * accessibility: accessibilityValue,\n * role: roleValue}\n * @param {MediaType} type\n * @returns {Object}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~MEDIA_PLAYER_NOT_INITIALIZED_ERROR MEDIA_PLAYER_NOT_INITIALIZED_ERROR} if called before initialize function\n * @instance\n */\n function getInitialMediaSettingsFor(type) {\n if (!mediaPlayerInitialized) {\n throw MEDIA_PLAYER_NOT_INITIALIZED_ERROR;\n }\n return mediaController.getInitialSettings(type);\n }\n\n /**\n * @param {MediaInfo} track - instance of {@link MediaInfo}\n * @param {boolean} [noSettingsSave] - specify if settings from the track must not be saved for incoming track selection\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @instance\n */\n function setCurrentTrack(track, noSettingsSave = false) {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n\n const canUseTrack = protectionController ? protectionController.areKeyIdsUsable(track.normalizedKeyIds) : true\n\n if (!canUseTrack) {\n logger.error(`Can not switch to track with index ${track.index} because key is not usable`);\n return\n }\n\n mediaController.setTrack(track, { noSettingsSave });\n }\n\n /*\n ---------------------------------------------------------------------------\n\n Custom filter and callback functions\n\n ---------------------------------------------------------------------------\n */\n /**\n * Registers a custom capabilities filter. This enables application to filter representations to use.\n * The provided callback function shall return either a boolean or a promise resolving to a boolean based on whether or not to use the representation.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the custom capabilities filter callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function registerCustomCapabilitiesFilter(filter) {\n customParametersModel.registerCustomCapabilitiesFilter(filter);\n }\n\n /**\n * Unregisters a custom capabilities filter.\n * @param {function} filter - the custom capabilities filter callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function unregisterCustomCapabilitiesFilter(filter) {\n customParametersModel.unregisterCustomCapabilitiesFilter(filter);\n }\n\n /**\n * Registers a custom initial track selection function. Only one function is allowed. Calling this method will overwrite a potentially existing function.\n * @param {function} customFunc - the custom function that returns the initial track\n */\n function setCustomInitialTrackSelectionFunction(customFunc) {\n customParametersModel.setCustomInitialTrackSelectionFunction(customFunc);\n }\n\n /**\n * Resets the custom initial track selection\n */\n function resetCustomInitialTrackSelectionFunction() {\n customParametersModel.resetCustomInitialTrackSelectionFunction(null);\n\n }\n\n /**\n * Adds a request interceptor. This enables application to monitor, manipulate, overwrite any request parameter and/or request data.\n * The provided callback function shall return a promise with updated request that shall be resolved once the process of the request is completed.\n * The interceptors are applied in the order they are added.\n * @param {function} interceptor - the request interceptor callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function addRequestInterceptor(interceptor) {\n customParametersModel.addRequestInterceptor(interceptor);\n }\n\n /**\n * Removes a request interceptor.\n * @param {function} interceptor - the request interceptor callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function removeRequestInterceptor(interceptor) {\n customParametersModel.removeRequestInterceptor(interceptor);\n }\n\n /**\n * Adds a response interceptor. This enables application to monitor, manipulate, overwrite the response data\n * The provided callback function shall return a promise with updated response that shall be resolved once the process of the response is completed.\n * The interceptors are applied in the order they are added.\n * @param {function} interceptor - the response interceptor\n * @memberof module:MediaPlayer\n * @instance\n */\n function addResponseInterceptor(interceptor) {\n customParametersModel.addResponseInterceptor(interceptor);\n }\n\n /**\n * Removes a response interceptor.\n * @param {function} interceptor - the request interceptor\n * @memberof module:MediaPlayer\n * @instance\n */\n function removeResponseInterceptor(interceptor) {\n customParametersModel.removeResponseInterceptor(interceptor);\n }\n\n /**\n * Registers a license request filter. This enables application to manipulate/overwrite any request parameter and/or request data.\n * The provided callback function shall return a promise that shall be resolved once the filter process is completed.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the license request filter callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function registerLicenseRequestFilter(filter) {\n customParametersModel.registerLicenseRequestFilter(filter);\n }\n\n /**\n * Registers a license response filter. This enables application to manipulate/overwrite the response data\n * The provided callback function shall return a promise that shall be resolved once the filter process is completed.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the license response filter callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function registerLicenseResponseFilter(filter) {\n customParametersModel.registerLicenseResponseFilter(filter);\n }\n\n /**\n * Unregisters a license request filter.\n * @param {function} filter - the license request filter callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function unregisterLicenseRequestFilter(filter) {\n customParametersModel.unregisterLicenseRequestFilter(filter);\n }\n\n /**\n * Unregisters a license response filter.\n * @param {function} filter - the license response filter callback\n * @memberof module:MediaPlayer\n * @instance\n */\n function unregisterLicenseResponseFilter(filter) {\n customParametersModel.unregisterLicenseResponseFilter(filter);\n }\n\n /*\n ---------------------------------------------------------------------------\n\n PROTECTION MANAGEMENT\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Detects if Protection is included and returns an instance of ProtectionController.js\n * @memberof module:MediaPlayer\n * @instance\n */\n function getProtectionController() {\n return _detectProtection();\n }\n\n /**\n * Will override dash.js protection controller.\n * @param {ProtectionController} value - valid protection controller instance.\n * @memberof module:MediaPlayer\n * @instance\n */\n function attachProtectionController(value) {\n protectionController = value;\n }\n\n /**\n * Sets Protection Data required to setup the Protection Module (DRM). Protection Data must\n * be set before initializing MediaPlayer or, once initialized, before PROTECTION_CREATED event is fired.\n * @see {@link module:MediaPlayer#initialize initialize()}\n * @see {@link ProtectionEvents#event:PROTECTION_CREATED dashjs.Protection.events.PROTECTION_CREATED}\n * @param {ProtectionDataSet} value - object containing\n * property names corresponding to key system name strings and associated\n * values being instances of.\n * @memberof module:MediaPlayer\n * @instance\n */\n function setProtectionData(value) {\n protectionData = value;\n\n // Propagate changes in case StreamController is already created\n if (streamController) {\n streamController.setProtectionData(protectionData);\n }\n }\n\n /*\n ---------------------------------------------------------------------------\n\n THUMBNAILS MANAGEMENT\n\n ---------------------------------------------------------------------------\n */\n\n /**\n * Provide the thumbnail at time position. This can be asynchronous, so you must provide a callback ro retrieve thumbnails informations\n * @param {number} time - A relative time, in seconds, based on the return value of the {@link module:MediaPlayer#duration duration()} method is expected\n * @param {function} callback - A Callback function provided when retrieving thumbnail the given time position. Thumbnail object is null in case there are is not a thumbnails representation or\n * if it doesn't contain a thumbnail for the given time position.\n * @memberof module:MediaPlayer\n * @instance\n */\n function provideThumbnail(time, callback) {\n if (typeof callback !== 'function') {\n return;\n }\n if (time < 0) {\n callback(null);\n return;\n }\n const s = playbackController.getIsDynamic() ? getDvrSeekOffset(time) : time;\n const stream = streamController.getStreamForTime(s);\n if (stream === null) {\n callback(null);\n return;\n }\n\n const thumbnailController = stream.getThumbnailController();\n if (!thumbnailController) {\n callback(null);\n return;\n }\n\n return thumbnailController.provide(s, callback);\n }\n\n /*\n ---------------------------------------------------------------------------\n\n TOOLS AND OTHERS FUNCTIONS\n\n ---------------------------------------------------------------------------\n */\n /**\n * Allows application to retrieve a manifest. Manifest loading is asynchronous and requires the app-provided callback function\n *\n * @param {string} url - url the manifest url\n * @param {function} callback - A Callback function provided when retrieving manifests\n * @memberof module:MediaPlayer\n * @instance\n */\n function retrieveManifest(url, callback) {\n let manifestLoader = _createManifestLoader();\n let self = this;\n\n const handler = function (e) {\n if (!e.error) {\n callback(e.manifest);\n } else {\n callback(null, e.error);\n }\n eventBus.off(Events.INTERNAL_MANIFEST_LOADED, handler, self);\n manifestLoader.reset();\n };\n\n eventBus.on(Events.INTERNAL_MANIFEST_LOADED, handler, self);\n\n uriFragmentModel.initialize(url);\n manifestLoader.load(url);\n }\n\n /**\n * Returns the source string or manifest that was attached by calling attachSource()\n * @returns {string | manifest}\n * @memberof module:MediaPlayer\n * @throws {@link module:MediaPlayer~SOURCE_NOT_ATTACHED_ERROR SOURCE_NOT_ATTACHED_ERROR} if called before attachSource function\n * @instance\n */\n function getSource() {\n if (!source) {\n throw SOURCE_NOT_ATTACHED_ERROR;\n }\n return source;\n }\n\n /**\n * Sets the source to a new manifest URL or object without reloading\n * Useful for updating CDN tokens\n * @param {string | object} urlOrManifest\n */\n function updateSource(urlOrManifest) {\n source = urlOrManifest\n streamController.load(source);\n }\n\n /**\n * Use this method to set a source URL to a valid MPD manifest file OR\n * a previously downloaded and parsed manifest object. Optionally, can\n * also provide protection information\n *\n * @param {string|Object} urlOrManifest - A URL to a valid MPD manifest file, or a\n * parsed manifest object.\n * @param {number|string} startTime - For VoD content the start time is relative to the start time of the first period.\n * For live content\n * If the parameter starts from prefix posix: it signifies the absolute time range defined in seconds of Coordinated Universal Time (ITU-R TF.460-6). This is the number of seconds since 01-01-1970 00:00:00 UTC. Fractions of seconds may be optionally specified down to the millisecond level.\n * If no posix prefix is used the starttime is relative to MPD@availabilityStartTime\n *\n * @throws {@link module:MediaPlayer~MEDIA_PLAYER_NOT_INITIALIZED_ERROR MEDIA_PLAYER_NOT_INITIALIZED_ERROR} if called before initialize function\n *\n * @memberof module:MediaPlayer\n * @instance\n */\n function attachSource(urlOrManifest, startTime = NaN) {\n if (!mediaPlayerInitialized) {\n throw MEDIA_PLAYER_NOT_INITIALIZED_ERROR;\n }\n\n if (typeof urlOrManifest === 'string') {\n uriFragmentModel.initialize(urlOrManifest);\n }\n\n if (startTime == null) {\n startTime = NaN;\n }\n\n if (!isNaN(startTime)) {\n startTime = Math.max(0, startTime);\n }\n\n providedStartTime = startTime;\n source = urlOrManifest;\n\n if (streamingInitialized || playbackInitialized) {\n _resetPlaybackControllers();\n }\n\n if (isReady()) {\n _initializePlayback(providedStartTime);\n }\n }\n\n /**\n * Reload the manifest that the player is currently using.\n *\n * @memberof module:MediaPlayer\n * @param {function} callback - A Callback function provided when retrieving manifests\n * @instance\n */\n function refreshManifest(callback) {\n if (!mediaPlayerInitialized) {\n throw MEDIA_PLAYER_NOT_INITIALIZED_ERROR;\n }\n\n if (!isReady()) {\n return callback(null, SOURCE_NOT_ATTACHED_ERROR);\n }\n\n let self = this;\n\n if (typeof callback === 'function') {\n const handler = function (e) {\n eventBus.off(Events.INTERNAL_MANIFEST_LOADED, handler, self);\n\n if (e.error) {\n callback(null, e.error);\n return;\n }\n\n callback(e.manifest);\n };\n\n eventBus.on(Events.INTERNAL_MANIFEST_LOADED, handler, self);\n }\n\n streamController.refreshManifest();\n }\n\n /**\n * Get the current settings object being used on the player.\n * @returns {PlayerSettings} The settings object being used.\n *\n * @memberof module:MediaPlayer\n * @instance\n */\n function getSettings() {\n return settings.get();\n }\n\n /**\n * @summary Update the current settings object being used on the player. Anything left unspecified is not modified.\n * @param {PlayerSettings} settingsObj - An object corresponding to the settings definition.\n * @description This function does not update the entire object, only properties in the passed in object are updated.\n *\n * This means that updateSettings({a: x}) and updateSettings({b: y}) are functionally equivalent to\n * updateSettings({a: x, b: y}). If the default values are required again, @see{@link resetSettings}.\n * @example\n * player.updateSettings({\n * streaming: {\n * lowLatencyEnabled: false,\n * abr: {\n * maxBitrate: { audio: 100, video: 1000 }\n * }\n * }\n * });\n * @memberof module:MediaPlayer\n * @instance\n */\n function updateSettings(settingsObj) {\n settings.update(settingsObj);\n }\n\n /**\n * Resets the settings object back to the default.\n *\n * @memberof module:MediaPlayer\n * @instance\n */\n function resetSettings() {\n settings.reset();\n }\n\n /**\n * A utility methods which converts UTC timestamp value into a valid time and date string.\n *\n * @param {number} time - UTC timestamp to be converted into date and time.\n * @param {string} locales - a region identifier (i.e. en_US).\n * @param {boolean} hour12 - 12 vs 24 hour. Set to true for 12 hour time formatting.\n * @param {boolean} withDate - default is false. Set to true to append current date to UTC time format.\n * @returns {string} A formatted time and date string.\n * @memberof module:MediaPlayer\n * @instance\n */\n function formatUTC(time, locales, hour12, withDate = false) {\n const dt = new Date(time * 1000);\n const d = dt.toLocaleDateString(locales);\n const t = dt.toLocaleTimeString(locales, {\n hour12: hour12\n });\n return withDate ? t + ' ' + d : t;\n }\n\n /**\n * A utility method which converts seconds into TimeCode (i.e. 300 --> 05:00).\n *\n * @param {number} value - A number in seconds to be converted into a formatted time code.\n * @returns {string} A formatted time code string.\n * @memberof module:MediaPlayer\n * @instance\n */\n function convertToTimeCode(value) {\n value = Math.max(value, 0);\n\n let h = Math.floor(value / 3600);\n let m = Math.floor((value % 3600) / 60);\n let s = Math.floor((value % 3600) % 60);\n return (h === 0 ? '' : (h < 10 ? '0' + h.toString() + ':' : h.toString() + ':')) + (m < 10 ? '0' + m.toString() : m.toString()) + ':' + (s < 10 ? '0' + s.toString() : s.toString());\n }\n\n /**\n * This method should be used to extend or replace internal dash.js objects.\n * There are two ways to extend dash.js (determined by the override argument):\n *
    \n *
  1. If you set override to true any public method or property in your custom object will\n * override the dash.js parent object's property(ies) and will be used instead but the\n * dash.js parent module will still be created.
  2. \n *\n *
  3. If you set override to false your object will completely replace the dash.js object.\n * (Note: This is how it was in 1.x of Dash.js with Dijon).
  4. \n *
\n * When you extend you get access to this.context, this.factory and this.parent to operate with in your custom object.\n *
    \n *
  • this.context - can be used to pass context for singleton access.
  • \n *
  • this.factory - can be used to call factory.getSingletonInstance().
  • \n *
  • this.parent - is the reference of the parent object to call other public methods. (this.parent is excluded if you extend with override set to false or option 2)
  • \n *
\n * You must call extend before you call initialize\n * @see {@link module:MediaPlayer#initialize initialize()}\n * @param {string} parentNameString - name of parent module\n * @param {Object} childInstance - overriding object\n * @param {boolean} override - replace only some methods (true) or the whole object (false)\n * @memberof module:MediaPlayer\n * @instance\n */\n function extend(parentNameString, childInstance, override) {\n FactoryMaker.extend(parentNameString, childInstance, override, context);\n }\n\n /**\n * This method returns the active stream\n *\n * @throws {@link module:MediaPlayer~STREAMING_NOT_INITIALIZED_ERROR STREAMING_NOT_INITIALIZED_ERROR} if called before initializePlayback function\n * @memberof module:MediaPlayer\n * @instance\n */\n function getActiveStream() {\n if (!streamingInitialized) {\n throw STREAMING_NOT_INITIALIZED_ERROR;\n }\n let streamInfo = streamController.getActiveStreamInfo();\n return streamInfo ? streamController.getStreamById(streamInfo.id) : null;\n }\n\n /**\n * Returns the DashAdapter.js Module.\n *\n * @see {@link module:DashAdapter}\n * @returns {Object}\n * @memberof module:MediaPlayer\n * @instance\n */\n function getDashAdapter() {\n return adapter;\n }\n\n /**\n * Triggers a request to the content steering server to update the steering information.\n * @return {Promise}\n */\n function triggerSteeringRequest() {\n if (contentSteeringController) {\n return contentSteeringController.loadSteeringData();\n }\n }\n\n /**\n * Returns the current response data of the content steering server\n * @return {object}\n */\n function getCurrentSteeringResponseData() {\n if (contentSteeringController) {\n return contentSteeringController.getCurrentSteeringResponseData();\n }\n }\n\n /**\n * Returns the current manifest\n * @returns {object}\n */\n function getManifest() {\n return manifestModel.getValue();\n }\n\n /**\n * Returns all BaseURLs that are available including synthesized elements (e.g by content steering)\n * @returns {BaseURL[]}\n */\n function getAvailableBaseUrls() {\n const manifest = manifestModel.getValue();\n\n if (!manifest) {\n return [];\n }\n\n return baseURLController.getBaseUrls(manifest);\n }\n\n\n /**\n * Returns the available location elements including synthesized elements (e.g by content steering)\n * @returns {MpdLocation[]}\n */\n function getAvailableLocations() {\n const manifest = manifestModel.getValue();\n\n if (!manifest) {\n return [];\n }\n\n const manifestLocations = adapter.getLocation(manifest);\n const synthesizedElements = contentSteeringController.getSynthesizedLocationElements(manifestLocations);\n\n return manifestLocations.concat(synthesizedElements);\n }\n\n //***********************************\n // PRIVATE METHODS\n //***********************************\n\n function _resetPlaybackControllers() {\n playbackInitialized = false;\n streamingInitialized = false;\n adapter.reset();\n streamController.reset();\n gapController.reset();\n catchupController.reset();\n playbackController.reset();\n serviceDescriptionController.reset();\n contentSteeringController.reset();\n abrController.reset();\n throughputController.reset();\n mediaController.reset();\n segmentBaseController.reset();\n if (protectionController) {\n if (settings.get().streaming.protection.keepProtectionMediaKeys) {\n protectionController.stop();\n } else {\n protectionController.reset();\n protectionController = null;\n _detectProtection();\n }\n }\n textController.reset();\n cmcdModel.reset();\n cmsdModel.reset();\n }\n\n function _createPlaybackControllers() {\n // creates or get objects instances\n const manifestLoader = _createManifestLoader();\n\n if (!streamController) {\n streamController = StreamController(context).getInstance();\n }\n\n if (!textController) {\n textController = TextController(context).create({\n errHandler,\n manifestModel,\n adapter,\n mediaController,\n baseURLController,\n videoModel,\n settings\n });\n }\n\n capabilitiesFilter.setConfig({\n capabilities,\n customParametersModel,\n adapter,\n settings,\n protectionController,\n manifestModel,\n errHandler\n });\n\n streamController.setConfig({\n capabilities,\n capabilitiesFilter,\n manifestLoader,\n manifestModel,\n mediaPlayerModel,\n customParametersModel,\n protectionController,\n textController,\n adapter,\n dashMetrics,\n errHandler,\n timelineConverter,\n videoModel,\n playbackController,\n serviceDescriptionController,\n contentSteeringController,\n abrController,\n throughputController,\n mediaController,\n settings,\n baseURLController,\n uriFragmentModel,\n segmentBaseController\n });\n\n gapController.setConfig({\n settings,\n playbackController,\n streamController,\n videoModel,\n timelineConverter,\n adapter\n });\n\n playbackController.setConfig({\n streamController,\n serviceDescriptionController,\n dashMetrics,\n adapter,\n videoModel,\n timelineConverter,\n settings\n });\n\n catchupController.setConfig({\n streamController,\n playbackController,\n mediaPlayerModel,\n videoModel,\n settings\n })\n\n throughputController.setConfig({\n settings,\n playbackController\n })\n\n abrController.setConfig({\n streamController,\n capabilities,\n domStorage,\n mediaPlayerModel,\n customParametersModel,\n throughputController,\n cmsdModel,\n dashMetrics,\n adapter,\n videoModel,\n settings\n });\n\n cmcdModel.setConfig({\n abrController,\n dashMetrics,\n playbackController,\n serviceDescriptionController,\n throughputController,\n });\n\n clientDataReportingController.setConfig({\n serviceDescriptionController\n })\n\n cmsdModel.setConfig({});\n\n // initializes controller\n mediaController.initialize();\n throughputController.initialize();\n abrController.initialize();\n streamController.initialize(autoPlay, protectionData);\n textController.initialize();\n gapController.initialize();\n catchupController.initialize();\n cmcdModel.initialize(autoPlay);\n cmsdModel.initialize();\n contentSteeringController.initialize();\n segmentBaseController.initialize();\n }\n\n function _createManifestLoader() {\n return ManifestLoader(context).create({\n debug: debug,\n errHandler: errHandler,\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n mssHandler: mssHandler,\n settings: settings\n });\n }\n\n function _detectProtection() {\n if (protectionController) {\n return protectionController;\n }\n\n if (typeof dashjs === 'undefined') {\n return null\n }\n // do not require Protection as dependencies as this is optional and intended to be loaded separately\n let detectedProtection = dashjs.Protection;\n if (typeof detectedProtection === 'function') { //TODO need a better way to register/detect plugin components\n let protection = detectedProtection(context).create();\n Events.extend(detectedProtection.events);\n MediaPlayerEvents.extend(detectedProtection.events, {\n publicOnly: true\n });\n Errors.extend(detectedProtection.errors);\n\n protectionController = protection.createProtectionSystem({\n debug,\n errHandler,\n videoModel,\n customParametersModel,\n capabilities,\n eventBus,\n events: Events,\n BASE64,\n constants: Constants,\n cmcdModel,\n settings\n });\n\n if (!capabilities) {\n capabilities = Capabilities(context).getInstance();\n }\n\n capabilities.setProtectionController(protectionController);\n\n return protectionController;\n }\n\n return null;\n }\n\n function _detectMetricsReporting() {\n if (metricsReportingController || typeof dashjs === 'undefined') {\n return;\n }\n // do not require MetricsReporting as dependencies as this is optional and intended to be loaded separately\n let detectedMetricsReporting = dashjs.MetricsReporting;\n if (typeof detectedMetricsReporting === 'function') { //TODO need a better way to register/detect plugin components\n let metricsReporting = detectedMetricsReporting(context).create();\n\n metricsReportingController = metricsReporting.createMetricsReporting({\n debug: debug,\n eventBus: eventBus,\n mediaElement: getVideoElement(),\n adapter: adapter,\n dashMetrics: dashMetrics,\n mediaPlayerModel: mediaPlayerModel,\n events: Events,\n constants: Constants,\n metricsConstants: MetricsConstants\n });\n }\n }\n\n function _detectMss() {\n if (mssHandler || typeof dashjs === 'undefined') {\n return;\n }\n\n // do not require MssHandler as dependencies as this is optional and intended to be loaded separately\n let detectedMssHandler = dashjs.MssHandler;\n if (typeof detectedMssHandler === 'function') { //TODO need a better way to register/detect plugin components\n Errors.extend(detectedMssHandler.errors);\n mssHandler = detectedMssHandler(context).create({\n eventBus: eventBus,\n mediaPlayerModel: mediaPlayerModel,\n dashMetrics: dashMetrics,\n manifestModel: manifestModel,\n playbackController: playbackController,\n streamController: streamController,\n protectionController: protectionController,\n baseURLController: baseURLController,\n errHandler: errHandler,\n events: Events,\n constants: Constants,\n debug: debug,\n initSegmentType: HTTPRequest.INIT_SEGMENT_TYPE,\n BASE64: BASE64,\n ISOBoxer: ISOBoxer,\n settings: settings\n });\n }\n }\n\n function _detectOffline() {\n if (!mediaPlayerInitialized) {\n throw MEDIA_PLAYER_NOT_INITIALIZED_ERROR;\n }\n\n if (offlineController) {\n return offlineController;\n }\n\n if (typeof dashjs === 'undefined') {\n return null\n }\n\n // do not require Offline as dependencies as this is optional and intended to be loaded separately\n let detectedOfflineController = dashjs.OfflineController;\n\n if (typeof detectedOfflineController === 'function') { //TODO need a better way to register/detect plugin components\n Events.extend(detectedOfflineController.events);\n MediaPlayerEvents.extend(detectedOfflineController.events, {\n publicOnly: true\n });\n Errors.extend(detectedOfflineController.errors);\n\n const manifestLoader = _createManifestLoader();\n const manifestUpdater = ManifestUpdater(context).create();\n\n manifestUpdater.setConfig({\n manifestModel,\n adapter,\n manifestLoader,\n errHandler,\n contentSteeringController\n });\n\n offlineController = detectedOfflineController(context).create({\n debug: debug,\n manifestUpdater: manifestUpdater,\n baseURLController: baseURLController,\n manifestLoader: manifestLoader,\n manifestModel: manifestModel,\n mediaPlayerModel: mediaPlayerModel,\n abrController: abrController,\n playbackController: playbackController,\n adapter: adapter,\n errHandler: errHandler,\n dashMetrics: dashMetrics,\n timelineConverter: timelineConverter,\n segmentBaseController: segmentBaseController,\n schemeLoaderFactory: schemeLoaderFactory,\n eventBus: eventBus,\n events: Events,\n errors: Errors,\n constants: Constants,\n settings: settings,\n dashConstants: DashConstants,\n urlUtils: URLUtils(context).getInstance()\n });\n return offlineController;\n }\n\n return null;\n }\n\n function _sanitizeSettings(value) {\n const defaults = settings.get().streaming.defaultSchemeIdUri;\n let output = {};\n\n function __sanitizeDescriptorType(name, val, defaultSchemeIdUri) {\n let out = {};\n if (val) {\n if (val instanceof Array) {\n throw ARRAY_NOT_SUPPORTED_ERROR;\n } else if (val instanceof Object) {\n out.schemeIdUri = val.schemeIdUri ? val.schemeIdUri : '';\n out.value = val.value ? val.value : '';\n } else {\n out.schemeIdUri = defaultSchemeIdUri;\n out.value = val;\n logger.warn('No schemeIdUri provided for ' + name + ', using default \\\"' + defaultSchemeIdUri + '\\\"');\n }\n return out;\n }\n return null;\n }\n\n if (value.lang) {\n output.lang = value.lang;\n }\n if (!isNaN(value.index)) {\n output.index = value.index;\n }\n if (value.viewpoint) {\n output.viewpoint = __sanitizeDescriptorType('viewpoint', value.viewpoint, defaults.viewpoint);\n }\n if (value.audioChannelConfiguration) {\n output.audioChannelConfiguration = __sanitizeDescriptorType('audioChannelConfiguration', value.audioChannelConfiguration, defaults.audioChannelConfiguration);\n }\n if (value.role) {\n output.role = __sanitizeDescriptorType('role', value.role, defaults.role);\n }\n if (value.accessibility) {\n output.accessibility = __sanitizeDescriptorType('accessibility', value.accessibility, defaults.accessibility);\n }\n\n return output;\n }\n\n /**\n *\n * @private\n */\n function _initializePlayback(startTime = NaN) {\n\n if (offlineController) {\n offlineController.resetRecords();\n }\n\n if (!streamingInitialized && source) {\n streamingInitialized = true;\n logger.info('Streaming Initialized');\n _createPlaybackControllers();\n\n if (typeof source === 'string') {\n streamController.load(source, startTime);\n } else {\n streamController.loadWithManifest(source, startTime);\n }\n }\n\n if (!playbackInitialized && isReady()) {\n playbackInitialized = true;\n eventBus.trigger(MediaPlayerEvents.PLAYBACK_INITIALIZED)\n logger.info('Playback Initialized');\n }\n }\n\n instance = {\n addABRCustomRule,\n addRequestInterceptor,\n addResponseInterceptor,\n addUTCTimingSource,\n attachProtectionController,\n attachSource,\n attachTTMLRenderingDiv,\n attachView,\n attachVttRenderingDiv,\n clearDefaultUTCTimingSources,\n convertToTimeCode,\n destroy,\n duration,\n enableForcedTextStreaming,\n enableText,\n extend,\n formatUTC,\n getABRCustomRules,\n getActiveStream,\n getAutoPlay,\n getAvailableBaseUrls,\n getAvailableLocations,\n getAverageLatency,\n getAverageThroughput,\n getBufferLength,\n getCurrentLiveLatency,\n getCurrentRepresentationForType,\n getCurrentSteeringResponseData,\n getCurrentTextTrackIndex,\n getCurrentTrackFor,\n getDashAdapter,\n getDashMetrics,\n getDebug,\n getDvrSeekOffset,\n getDvrWindow,\n getInitialMediaSettingsFor,\n getLowLatencyModeEnabled,\n getManifest,\n getOfflineController,\n getPlaybackRate,\n getProtectionController,\n getRawThroughputData,\n getRepresentationsByType,\n getSafeAverageThroughput,\n getSettings,\n getSource,\n getStreamsFromManifest,\n getTTMLRenderingDiv,\n getTargetLiveDelay,\n getTracksFor,\n getTracksForTypeFromManifest,\n getVersion,\n getVideoElement,\n getVolume,\n getXHRWithCredentialsForType,\n initialize,\n isDynamic,\n isMuted,\n isPaused,\n isReady,\n isSeeking,\n isTextEnabled,\n off,\n on,\n pause,\n play,\n preload,\n provideThumbnail,\n refreshManifest,\n registerCustomCapabilitiesFilter,\n registerLicenseRequestFilter,\n registerLicenseResponseFilter,\n removeABRCustomRule,\n removeAllABRCustomRule,\n removeRequestInterceptor,\n removeResponseInterceptor,\n removeUTCTimingSource,\n reset,\n resetCustomInitialTrackSelectionFunction,\n resetSettings,\n restoreDefaultUTCTimingSources,\n retrieveManifest,\n seek,\n seekToOriginalLive,\n seekToPresentationTime,\n setAutoPlay,\n setConfig,\n setCurrentTrack,\n setCustomInitialTrackSelectionFunction,\n setInitialMediaSettingsFor,\n setMute,\n setPlaybackRate,\n setProtectionData,\n setRepresentationForTypeById,\n setRepresentationForTypeByIndex,\n setTextTrack,\n setVolume,\n setXHRWithCredentialsForType,\n time,\n timeAsUTC,\n timeInDvrWindow,\n trigger,\n triggerSteeringRequest,\n unregisterCustomCapabilitiesFilter,\n unregisterLicenseRequestFilter,\n unregisterLicenseResponseFilter,\n updateSettings,\n updateSource,\n };\n\n setup();\n\n return instance;\n}\n\nMediaPlayer.__dashjs_factory_name = 'MediaPlayer';\nconst factory = FactoryMaker.getClassFactory(MediaPlayer);\nfactory.events = MediaPlayerEvents;\nfactory.errors = Errors;\nFactoryMaker.updateClassFactory(MediaPlayer.__dashjs_factory_name, factory);\n\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../core/events/EventsBase.js';\n\n/**\n * @class\n * @implements EventsBase\n */\nclass MediaPlayerEvents extends EventsBase {\n\n /**\n * @description Public facing external events to be used when developing a player that implements dash.js.\n */\n constructor() {\n super();\n /**\n * Triggered when playback will not start yet\n * as the MPD's availabilityStartTime is in the future.\n * Check delay property in payload to determine time before playback will start.\n * @event MediaPlayerEvents#AST_IN_FUTURE\n */\n this.AST_IN_FUTURE = 'astInFuture';\n\n /**\n * Triggered when the BaseURLs have been updated.\n * @event MediaPlayerEvents#BASE_URLS_UPDATED\n */\n this.BASE_URLS_UPDATED = 'baseUrlsUpdated';\n\n /**\n * Triggered when the video element's buffer state changes to stalled.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_EMPTY\n */\n this.BUFFER_EMPTY = 'bufferStalled';\n\n /**\n * Triggered when the video element's buffer state changes to loaded.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_LOADED\n */\n this.BUFFER_LOADED = 'bufferLoaded';\n\n /**\n * Triggered when the video element's buffer state changes, either stalled or loaded. Check payload for state.\n * @event MediaPlayerEvents#BUFFER_LEVEL_STATE_CHANGED\n */\n this.BUFFER_LEVEL_STATE_CHANGED = 'bufferStateChanged';\n\n /**\n * Triggered when the buffer level of a media type has been updated\n * @event MediaPlayerEvents#BUFFER_LEVEL_UPDATED\n */\n this.BUFFER_LEVEL_UPDATED = 'bufferLevelUpdated';\n\n /**\n * Triggered when a font signalled by a DVB Font Download has been added to the document FontFaceSet interface.\n * @event MediaPlayerEvents#DVB_FONT_DOWNLOAD_ADDED\n */\n this.DVB_FONT_DOWNLOAD_ADDED = 'dvbFontDownloadAdded';\n\n /**\n * Triggered when a font signalled by a DVB Font Download has successfully downloaded and the FontFace can be used.\n * @event MediaPlayerEvents#DVB_FONT_DOWNLOAD_COMPLETE\n */\n this.DVB_FONT_DOWNLOAD_COMPLETE = 'dvbFontDownloadComplete';\n\n /**\n * Triggered when a font signalled by a DVB Font Download could not be successfully downloaded, so the FontFace will not be used.\n * @event MediaPlayerEvents#DVB_FONT_DOWNLOAD_FAILED\n */\n this.DVB_FONT_DOWNLOAD_FAILED = 'dvbFontDownloadFailed';\n\n /**\n * Triggered when a dynamic stream changed to static (transition phase between Live and On-Demand).\n * @event MediaPlayerEvents#DYNAMIC_TO_STATIC\n */\n this.DYNAMIC_TO_STATIC = 'dynamicToStatic';\n\n /**\n * Triggered when there is an error from the element or MSE source buffer.\n * @event MediaPlayerEvents#ERROR\n */\n this.ERROR = 'error';\n /**\n * Triggered when a fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_COMPLETED\n */\n this.FRAGMENT_LOADING_COMPLETED = 'fragmentLoadingCompleted';\n\n /**\n * Triggered when a partial fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_PROGRESS\n */\n this.FRAGMENT_LOADING_PROGRESS = 'fragmentLoadingProgress';\n /**\n * Triggered when a fragment download has started.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_STARTED\n */\n this.FRAGMENT_LOADING_STARTED = 'fragmentLoadingStarted';\n\n /**\n * Triggered when a fragment download is abandoned due to detection of slow download base on the ABR abandon rule..\n * @event MediaPlayerEvents#FRAGMENT_LOADING_ABANDONED\n */\n this.FRAGMENT_LOADING_ABANDONED = 'fragmentLoadingAbandoned';\n\n /**\n * Triggered when {@link module:Debug} logger methods are called.\n * @event MediaPlayerEvents#LOG\n */\n this.LOG = 'log';\n\n /**\n * Triggered when the manifest load is started\n * @event MediaPlayerEvents#MANIFEST_LOADING_STARTED\n */\n this.MANIFEST_LOADING_STARTED = 'manifestLoadingStarted';\n\n /**\n * Triggered when the manifest loading is finished, providing the request object information\n * @event MediaPlayerEvents#MANIFEST_LOADING_FINISHED\n */\n this.MANIFEST_LOADING_FINISHED = 'manifestLoadingFinished';\n\n /**\n * Triggered when the manifest load is complete, providing the payload\n * @event MediaPlayerEvents#MANIFEST_LOADED\n */\n this.MANIFEST_LOADED = 'manifestLoaded';\n\n /**\n * Triggered anytime there is a change to the overall metrics.\n * @event MediaPlayerEvents#METRICS_CHANGED\n */\n this.METRICS_CHANGED = 'metricsChanged';\n\n /**\n * Triggered when an individual metric is added, updated or cleared.\n * @event MediaPlayerEvents#METRIC_CHANGED\n */\n this.METRIC_CHANGED = 'metricChanged';\n\n /**\n * Triggered every time a new metric is added.\n * @event MediaPlayerEvents#METRIC_ADDED\n */\n this.METRIC_ADDED = 'metricAdded';\n\n /**\n * Triggered every time a metric is updated.\n * @event MediaPlayerEvents#METRIC_UPDATED\n */\n this.METRIC_UPDATED = 'metricUpdated';\n\n /**\n * Triggered when a new stream (period) starts.\n * @event MediaPlayerEvents#PERIOD_SWITCH_STARTED\n */\n this.PERIOD_SWITCH_STARTED = 'periodSwitchStarted';\n\n /**\n * Triggered at the stream end of a period.\n * @event MediaPlayerEvents#PERIOD_SWITCH_COMPLETED\n */\n this.PERIOD_SWITCH_COMPLETED = 'periodSwitchCompleted';\n\n /**\n * Triggered when an ABR up /down switch is initiated; either by user in manual mode or auto mode via ABR rules.\n * @event MediaPlayerEvents#QUALITY_CHANGE_REQUESTED\n */\n this.QUALITY_CHANGE_REQUESTED = 'qualityChangeRequested';\n\n /**\n * Triggered when the new ABR quality is being rendered on-screen.\n * @event MediaPlayerEvents#QUALITY_CHANGE_RENDERED\n */\n this.QUALITY_CHANGE_RENDERED = 'qualityChangeRendered';\n\n /**\n * Triggered when the new track is being selected\n * @event MediaPlayerEvents#NEW_TRACK_SELECTED\n */\n this.NEW_TRACK_SELECTED = 'newTrackSelected';\n\n /**\n * Triggered when the new track is being rendered.\n * @event MediaPlayerEvents#TRACK_CHANGE_RENDERED\n */\n this.TRACK_CHANGE_RENDERED = 'trackChangeRendered';\n\n /**\n * Triggered when a stream (period) is being loaded\n * @event MediaPlayerEvents#STREAM_INITIALIZING\n */\n this.STREAM_INITIALIZING = 'streamInitializing';\n\n /**\n * Triggered when a stream (period) is loaded\n * @event MediaPlayerEvents#STREAM_UPDATED\n */\n this.STREAM_UPDATED = 'streamUpdated';\n\n /**\n * Triggered when a stream (period) is activated\n * @event MediaPlayerEvents#STREAM_ACTIVATED\n */\n this.STREAM_ACTIVATED = 'streamActivated';\n\n /**\n * Triggered when a stream (period) is deactivated\n * @event MediaPlayerEvents#STREAM_DEACTIVATED\n */\n this.STREAM_DEACTIVATED = 'streamDeactivated';\n\n /**\n * Triggered when a stream (period) is activated\n * @event MediaPlayerEvents#STREAM_INITIALIZED\n */\n this.STREAM_INITIALIZED = 'streamInitialized';\n\n /**\n * Triggered when the player has been reset.\n * @event MediaPlayerEvents#STREAM_TEARDOWN_COMPLETE\n */\n this.STREAM_TEARDOWN_COMPLETE = 'streamTeardownComplete';\n\n /**\n * Triggered once all text tracks detected in the MPD are added to the video element.\n * @event MediaPlayerEvents#TEXT_TRACKS_ADDED\n */\n this.TEXT_TRACKS_ADDED = 'allTextTracksAdded';\n\n /**\n * Triggered when a text track is added to the video element's TextTrackList\n * @event MediaPlayerEvents#TEXT_TRACK_ADDED\n */\n this.TEXT_TRACK_ADDED = 'textTrackAdded';\n\n /**\n * Triggered when a text track should be shown\n * @event MediaPlayerEvents#CUE_ENTER\n */\n this.CUE_ENTER = 'cueEnter'\n\n /**\n * Triggered when a text track should be hidden\n * @event MediaPlayerEvents#CUE_ENTER\n */\n this.CUE_EXIT = 'cueExit'\n\n /**\n * Triggered when a throughput measurement based on the last segment request has been stored\n * @event MediaPlayerEvents#THROUGHPUT_MEASUREMENT_STORED\n */\n this.THROUGHPUT_MEASUREMENT_STORED = 'throughputMeasurementStored';\n\n /**\n * Triggered when a ttml chunk is parsed.\n * @event MediaPlayerEvents#TTML_PARSED\n */\n this.TTML_PARSED = 'ttmlParsed';\n\n /**\n * Triggered when a ttml chunk has to be parsed.\n * @event MediaPlayerEvents#TTML_TO_PARSE\n */\n this.TTML_TO_PARSE = 'ttmlToParse';\n\n /**\n * Triggered when a caption is rendered.\n * @event MediaPlayerEvents#CAPTION_RENDERED\n */\n this.CAPTION_RENDERED = 'captionRendered';\n\n /**\n * Triggered when the caption container is resized.\n * @event MediaPlayerEvents#CAPTION_CONTAINER_RESIZE\n */\n this.CAPTION_CONTAINER_RESIZE = 'captionContainerResize';\n\n /**\n * Sent when enough data is available that the media can be played,\n * at least for a couple of frames. This corresponds to the\n * HAVE_ENOUGH_DATA readyState.\n * @event MediaPlayerEvents#CAN_PLAY\n */\n this.CAN_PLAY = 'canPlay';\n\n /**\n * This corresponds to the CAN_PLAY_THROUGH readyState.\n * @event MediaPlayerEvents#CAN_PLAY_THROUGH\n */\n this.CAN_PLAY_THROUGH = 'canPlayThrough';\n\n /**\n * Sent when playback completes.\n * @event MediaPlayerEvents#PLAYBACK_ENDED\n */\n this.PLAYBACK_ENDED = 'playbackEnded';\n\n /**\n * Sent when an error occurs. The element's error\n * attribute contains more information.\n * @event MediaPlayerEvents#PLAYBACK_ERROR\n */\n this.PLAYBACK_ERROR = 'playbackError';\n\n /**\n * This event is fired once the playback has been initialized by MediaPlayer.js.\n * After that event methods such as setTextTrack() can be used.\n * @event MediaPlayerEvents#PLAYBACK_INITIALIZED\n */\n this.PLAYBACK_INITIALIZED = 'playbackInitialized';\n\n /**\n * Sent when playback is not allowed (for example if user gesture is needed).\n * @event MediaPlayerEvents#PLAYBACK_NOT_ALLOWED\n */\n this.PLAYBACK_NOT_ALLOWED = 'playbackNotAllowed';\n\n /**\n * The media's metadata has finished loading; all attributes now\n * contain as much useful information as they're going to.\n * @event MediaPlayerEvents#PLAYBACK_METADATA_LOADED\n */\n this.PLAYBACK_METADATA_LOADED = 'playbackMetaDataLoaded';\n\n /**\n * The event is fired when the frame at the current playback position of the media has finished loading;\n * often the first frame\n * @event MediaPlayerEvents#PLAYBACK_LOADED_DATA\n */\n this.PLAYBACK_LOADED_DATA = 'playbackLoadedData';\n\n /**\n * Sent when playback is paused.\n * @event MediaPlayerEvents#PLAYBACK_PAUSED\n */\n this.PLAYBACK_PAUSED = 'playbackPaused';\n\n /**\n * Sent when the media begins to play (either for the first time, after having been paused,\n * or after ending and then restarting).\n *\n * @event MediaPlayerEvents#PLAYBACK_PLAYING\n */\n this.PLAYBACK_PLAYING = 'playbackPlaying';\n\n /**\n * Sent periodically to inform interested parties of progress downloading\n * the media. Information about the current amount of the media that has\n * been downloaded is available in the media element's buffered attribute.\n * @event MediaPlayerEvents#PLAYBACK_PROGRESS\n */\n this.PLAYBACK_PROGRESS = 'playbackProgress';\n\n /**\n * Sent when the playback speed changes.\n * @event MediaPlayerEvents#PLAYBACK_RATE_CHANGED\n */\n this.PLAYBACK_RATE_CHANGED = 'playbackRateChanged';\n\n /**\n * Sent when a seek operation completes.\n * @event MediaPlayerEvents#PLAYBACK_SEEKED\n */\n this.PLAYBACK_SEEKED = 'playbackSeeked';\n\n /**\n * Sent when a seek operation begins.\n * @event MediaPlayerEvents#PLAYBACK_SEEKING\n */\n this.PLAYBACK_SEEKING = 'playbackSeeking';\n\n /**\n * Sent when the video element reports stalled\n * @event MediaPlayerEvents#PLAYBACK_STALLED\n */\n this.PLAYBACK_STALLED = 'playbackStalled';\n\n /**\n * Sent when playback of the media starts after having been paused;\n * that is, when playback is resumed after a prior pause event.\n *\n * @event MediaPlayerEvents#PLAYBACK_STARTED\n */\n this.PLAYBACK_STARTED = 'playbackStarted';\n\n /**\n * The time indicated by the element's currentTime attribute has changed.\n * @event MediaPlayerEvents#PLAYBACK_TIME_UPDATED\n */\n this.PLAYBACK_TIME_UPDATED = 'playbackTimeUpdated';\n\n /**\n * Sent when the video element reports that the volume has changed\n * @event MediaPlayerEvents#PLAYBACK_VOLUME_CHANGED\n */\n this.PLAYBACK_VOLUME_CHANGED = 'playbackVolumeChanged';\n\n /**\n * Sent when the media playback has stopped because of a temporary lack of data.\n *\n * @event MediaPlayerEvents#PLAYBACK_WAITING\n */\n this.PLAYBACK_WAITING = 'playbackWaiting';\n\n /**\n * Manifest validity changed - As a result of an MPD validity expiration event.\n * @event MediaPlayerEvents#MANIFEST_VALIDITY_CHANGED\n */\n this.MANIFEST_VALIDITY_CHANGED = 'manifestValidityChanged';\n\n /**\n * Dash events are triggered at their respective start points on the timeline.\n * @event MediaPlayerEvents#EVENT_MODE_ON_START\n */\n this.EVENT_MODE_ON_START = 'eventModeOnStart';\n\n /**\n * Dash events are triggered as soon as they were parsed.\n * @event MediaPlayerEvents#EVENT_MODE_ON_RECEIVE\n */\n this.EVENT_MODE_ON_RECEIVE = 'eventModeOnReceive';\n\n /**\n * Event that is dispatched whenever the player encounters a potential conformance validation that might lead to unexpected/not optimal behavior\n * @event MediaPlayerEvents#CONFORMANCE_VIOLATION\n */\n this.CONFORMANCE_VIOLATION = 'conformanceViolation';\n\n /**\n * Event that is dispatched whenever the player switches to a different representation\n * @event MediaPlayerEvents#REPRESENTATION_SWITCH\n */\n this.REPRESENTATION_SWITCH = 'representationSwitch';\n\n /**\n * Event that is dispatched whenever an adaptation set is removed due to all representations not being supported.\n * @event MediaPlayerEvents#ADAPTATION_SET_REMOVED_NO_CAPABILITIES\n */\n this.ADAPTATION_SET_REMOVED_NO_CAPABILITIES = 'adaptationSetRemovedNoCapabilities';\n\n /**\n * Triggered when a content steering request has completed.\n * @event MediaPlayerEvents#CONTENT_STEERING_REQUEST_COMPLETED\n */\n this.CONTENT_STEERING_REQUEST_COMPLETED = 'contentSteeringRequestCompleted';\n\n /**\n * Triggered when an inband prft (ProducerReferenceTime) boxes has been received.\n * @event MediaPlayerEvents#INBAND_PRFT\n */\n this.INBAND_PRFT = 'inbandPrft';\n\n /**\n * The streaming attribute of the Managed Media Source is true\n * @type {string}\n */\n this.MANAGED_MEDIA_SOURCE_START_STREAMING = 'managedMediaSourceStartStreaming';\n\n /**\n * The streaming attribute of the Managed Media Source is false\n * @type {string}\n */\n this.MANAGED_MEDIA_SOURCE_END_STREAMING = 'managedMediaSourceEndStreaming';\n }\n}\n\nlet mediaPlayerEvents = new MediaPlayerEvents();\nexport default mediaPlayerEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Constants declaration\n */\nexport default {\n /**\n * @constant {string} STREAM Stream media type. Mainly used to report metrics relative to the full stream\n * @memberof Constants#\n * @static\n */\n STREAM: 'stream',\n\n /**\n * @constant {string} VIDEO Video media type\n * @memberof Constants#\n * @static\n */\n VIDEO: 'video',\n\n /**\n * @constant {string} AUDIO Audio media type\n * @memberof Constants#\n * @static\n */\n AUDIO: 'audio',\n\n /**\n * @constant {string} TEXT Text media type\n * @memberof Constants#\n * @static\n */\n TEXT: 'text',\n\n /**\n * @constant {string} MUXED Muxed (video/audio in the same chunk) media type\n * @memberof Constants#\n * @static\n */\n MUXED: 'muxed',\n\n /**\n * @constant {string} IMAGE Image media type\n * @memberof Constants#\n * @static\n */\n IMAGE: 'image',\n\n /**\n * @constant {string} STPP STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n STPP: 'stpp',\n\n /**\n * @constant {string} TTML STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n TTML: 'ttml',\n\n /**\n * @constant {string} VTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n VTT: 'vtt',\n\n /**\n * @constant {string} WVTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n WVTT: 'wvtt',\n\n /**\n * @constant {string} Content Steering\n * @memberof Constants#\n * @static\n */\n CONTENT_STEERING: 'contentSteering',\n\n /**\n * @constant {string} LIVE_CATCHUP_MODE_DEFAULT Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n LIVE_CATCHUP_MODE_DEFAULT: 'liveCatchupModeDefault',\n\n /**\n * @constant {string} LIVE_CATCHUP_MODE_LOLP Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n LIVE_CATCHUP_MODE_LOLP: 'liveCatchupModeLoLP',\n\n /**\n * @constant {string} MOVING_AVERAGE_SLIDING_WINDOW Moving average sliding window\n * @memberof Constants#\n * @static\n */\n MOVING_AVERAGE_SLIDING_WINDOW: 'slidingWindow',\n\n /**\n * @constant {string} EWMA Exponential moving average\n * @memberof Constants#\n * @static\n */\n MOVING_AVERAGE_EWMA: 'ewma',\n\n /**\n * @constant {string} BAD_ARGUMENT_ERROR Invalid Arguments type of error\n * @memberof Constants#\n * @static\n */\n BAD_ARGUMENT_ERROR: 'Invalid Arguments',\n\n /**\n * @constant {string} MISSING_CONFIG_ERROR Missing configuration parameters type of error\n * @memberof Constants#\n * @static\n */\n MISSING_CONFIG_ERROR: 'Missing config parameter(s)',\n\n /**\n * @constant {string} TRACK_SWITCH_MODE_ALWAYS_REPLACE used to clear the buffered data (prior to current playback position) after track switch. Default for audio\n * @memberof Constants#\n * @static\n */\n TRACK_SWITCH_MODE_ALWAYS_REPLACE: 'alwaysReplace',\n\n /**\n * @constant {string} TRACK_SWITCH_MODE_NEVER_REPLACE used to forbid clearing the buffered data (prior to current playback position) after track switch. Defers to fastSwitchEnabled for placement of new data. Default for video\n * @memberof Constants#\n * @static\n */\n TRACK_SWITCH_MODE_NEVER_REPLACE: 'neverReplace',\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_FIRST_TRACK makes the player select the first track found in the manifest.\n * @memberof Constants#\n * @static\n */\n TRACK_SELECTION_MODE_FIRST_TRACK: 'firstTrack',\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_HIGHEST_BITRATE makes the player select the track with a highest bitrate. This mode is a default mode.\n * @memberof Constants#\n * @static\n */\n TRACK_SELECTION_MODE_HIGHEST_BITRATE: 'highestBitrate',\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY makes the player select the track with the lowest bitrate per pixel average.\n * @memberof Constants#\n * @static\n */\n TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY: 'highestEfficiency',\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_WIDEST_RANGE makes the player select the track with a widest range of bitrates.\n * @memberof Constants#\n * @static\n */\n TRACK_SELECTION_MODE_WIDEST_RANGE: 'widestRange',\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_WIDEST_RANGE makes the player select the track with the highest selectionPriority as defined in the manifest\n * @memberof Constants#\n * @static\n */\n TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY: 'highestSelectionPriority',\n\n\n /**\n * @constant {string} CMCD_QUERY_KEY specifies the key that is used for the CMCD query parameter.\n * @memberof Constants#\n * @static\n */\n CMCD_QUERY_KEY: 'CMCD',\n\n /**\n * @constant {string} CMCD_MODE_QUERY specifies to attach CMCD metrics as query parameters.\n * @memberof Constants#\n * @static\n */\n CMCD_MODE_QUERY: 'query',\n\n /**\n * @constant {string} CMCD_MODE_HEADER specifies to attach CMCD metrics as HTTP headers.\n * @memberof Constants#\n * @static\n */\n CMCD_MODE_HEADER: 'header',\n\n /**\n * @constant {string} CMCD_AVAILABLE_KEYS specifies all the available keys for CMCD metrics.\n * @memberof Constants#\n * @static\n */\n CMCD_AVAILABLE_KEYS: ['br', 'd', 'ot', 'tb', 'bl', 'dl', 'mtp', 'nor', 'nrr', 'su', 'bs', 'rtp', 'cid', 'pr', 'sf', 'sid', 'st', 'v'],\n /**\n * @constant {string} CMCD_AVAILABLE_KEYS_V2 specifies all the available keys for CMCD version 2 metrics.\n * @memberof Constants#\n * @static\n */\n CMCD_V2_AVAILABLE_KEYS: ['msd', 'ltc'],\n\n /**\n * @constant {string} CMCD_AVAILABLE_REQUESTS specifies all the available requests type for CMCD metrics.\n * @memberof Constants#\n * @static\n */\n CMCD_AVAILABLE_REQUESTS: ['segment', 'mpd', 'xlink', 'steering', 'other'],\n\n\n INITIALIZE: 'initialize',\n TEXT_SHOWING: 'showing',\n TEXT_HIDDEN: 'hidden',\n TEXT_DISABLED: 'disabled',\n ACCESSIBILITY_CEA608_SCHEME: 'urn:scte:dash:cc:cea-608:2015',\n CC1: 'CC1',\n CC3: 'CC3',\n UTF8: 'utf-8',\n SCHEME_ID_URI: 'schemeIdUri',\n START_TIME: 'starttime',\n SERVICE_DESCRIPTION_DVB_LL_SCHEME: 'urn:dvb:dash:lowlatency:scope:2019',\n SUPPLEMENTAL_PROPERTY_DVB_LL_SCHEME: 'urn:dvb:dash:lowlatency:critical:2019',\n CTA_5004_2023_SCHEME: 'urn:mpeg:dash:cta-5004:2023',\n THUMBNAILS_SCHEME_ID_URIS: ['http://dashif.org/thumbnail_tile', 'http://dashif.org/guidelines/thumbnail_tile'],\n FONT_DOWNLOAD_DVB_SCHEME: 'urn:dvb:dash:fontdownload:2014',\n COLOUR_PRIMARIES_SCHEME_ID_URI: 'urn:mpeg:mpegB:cicp:ColourPrimaries',\n URL_QUERY_INFO_SCHEME: 'urn:mpeg:dash:urlparam:2014',\n EXT_URL_QUERY_INFO_SCHEME: 'urn:mpeg:dash:urlparam:2016',\n MATRIX_COEFFICIENTS_SCHEME_ID_URI: 'urn:mpeg:mpegB:cicp:MatrixCoefficients',\n TRANSFER_CHARACTERISTICS_SCHEME_ID_URI: 'urn:mpeg:mpegB:cicp:TransferCharacteristics',\n HDR_METADATA_FORMAT_SCHEME_ID_URI: 'urn:dvb:dash:hdr-dmi',\n HDR_METADATA_FORMAT_VALUES: {\n ST2094_10: 'ST2094-10',\n SL_HDR2: 'SL-HDR2',\n ST2094_40: 'ST2094-40'\n },\n MEDIA_CAPABILITIES_API: {\n COLORGAMUT: {\n SRGB: 'srgb',\n P3: 'p3',\n REC2020: 'rec2020'\n },\n TRANSFERFUNCTION: {\n SRGB: 'srgb',\n PQ: 'pq',\n HLG: 'hlg'\n },\n HDR_METADATATYPE: {\n SMPTE_ST_2094_10: 'smpteSt2094-10',\n SLHDR2: 'slhdr2',\n SMPTE_ST_2094_40: 'smpteSt2094-40'\n }\n },\n XML: 'XML',\n ARRAY_BUFFER: 'ArrayBuffer',\n DVB_REPORTING_URL: 'dvb:reportingUrl',\n DVB_PROBABILITY: 'dvb:probability',\n OFF_MIMETYPE: 'application/font-sfnt',\n WOFF_MIMETYPE: 'application/font-woff',\n VIDEO_ELEMENT_READY_STATES: {\n HAVE_NOTHING: 0,\n HAVE_METADATA: 1,\n HAVE_CURRENT_DATA: 2,\n HAVE_FUTURE_DATA: 3,\n HAVE_ENOUGH_DATA: 4\n },\n FILE_LOADER_TYPES: {\n FETCH: 'fetch_loader',\n XHR: 'xhr_loader'\n },\n THROUGHPUT_TYPES: {\n LATENCY: 'throughput_type_latency',\n BANDWIDTH: 'throughput_type_bandwidth'\n },\n THROUGHPUT_CALCULATION_MODES: {\n EWMA: 'throughputCalculationModeEwma',\n ZLEMA: 'throughputCalculationModeZlema',\n ARITHMETIC_MEAN: 'throughputCalculationModeArithmeticMean',\n BYTE_SIZE_WEIGHTED_ARITHMETIC_MEAN: 'throughputCalculationModeByteSizeWeightedArithmeticMean',\n DATE_WEIGHTED_ARITHMETIC_MEAN: 'throughputCalculationModeDateWeightedArithmeticMean',\n HARMONIC_MEAN: 'throughputCalculationModeHarmonicMean',\n BYTE_SIZE_WEIGHTED_HARMONIC_MEAN: 'throughputCalculationModeByteSizeWeightedHarmonicMean',\n DATE_WEIGHTED_HARMONIC_MEAN: 'throughputCalculationModeDateWeightedHarmonicMean',\n },\n LOW_LATENCY_DOWNLOAD_TIME_CALCULATION_MODE: {\n MOOF_PARSING: 'lowLatencyDownloadTimeCalculationModeMoofParsing',\n DOWNLOADED_DATA: 'lowLatencyDownloadTimeCalculationModeDownloadedData',\n AAST: 'lowLatencyDownloadTimeCalculationModeAast',\n },\n RULES_TYPES: {\n QUALITY_SWITCH_RULES: 'qualitySwitchRules',\n ABANDON_FRAGMENT_RULES: 'abandonFragmentRules'\n },\n QUALITY_SWITCH_RULES: {\n BOLA_RULE: 'BolaRule',\n THROUGHPUT_RULE: 'ThroughputRule',\n INSUFFICIENT_BUFFER_RULE: 'InsufficientBufferRule',\n SWITCH_HISTORY_RULE: 'SwitchHistoryRule',\n DROPPED_FRAMES_RULE: 'DroppedFramesRule',\n LEARN_TO_ADAPT_RULE: 'L2ARule',\n LOL_PLUS_RULE: 'LoLPRule'\n },\n ABANDON_FRAGMENT_RULES: {\n ABANDON_REQUEST_RULE: 'AbandonRequestsRule'\n },\n\n /**\n * @constant {string} ID3_SCHEME_ID_URI specifies scheme ID URI for ID3 timed metadata\n * @memberof Constants#\n * @static\n */\n ID3_SCHEME_ID_URI: 'https://aomedia.org/emsg/ID3',\n COMMON_ACCESS_TOKEN_HEADER: 'common-access-token',\n DASH_ROLE_SCHEME_ID : 'urn:mpeg:dash:role:2011',\n CODEC_FAMILIES: {\n MP3: 'mp3',\n AAC: 'aac',\n AC3: 'ac3',\n EC3: 'ec3',\n DTSX: 'dtsx',\n DTSC: 'dtsc',\n AVC: 'avc',\n HEVC: 'hevc'\n }\n}\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR\n * PROFITS, OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Protection Constants declaration\n * @ignore\n */\nexport default {\n CLEARKEY_KEYSTEM_STRING: 'org.w3.clearkey',\n WIDEVINE_KEYSTEM_STRING: 'com.widevine.alpha',\n PLAYREADY_KEYSTEM_STRING: 'com.microsoft.playready',\n PLAYREADY_RECOMMENDATION_KEYSTEM_STRING: 'com.microsoft.playready.recommendation',\n WIDEVINE_UUID: 'edef8ba9-79d6-4ace-a3c8-27dcd51d21ed',\n PLAYREADY_UUID: '9a04f079-9840-4286-ab92-e65be0885f95',\n CLEARKEY_UUID: 'e2719d58-a985-b3c9-781a-b030af78d30e',\n W3C_CLEARKEY_UUID: '1077efec-c0b2-4d02-ace3-3c1e52e2fb4b',\n INITIALIZATION_DATA_TYPE_CENC: 'cenc',\n INITIALIZATION_DATA_TYPE_KEYIDS: 'keyids',\n INITIALIZATION_DATA_TYPE_WEBM: 'webm',\n ENCRYPTION_SCHEME_CENC: 'cenc',\n ENCRYPTION_SCHEME_CBCS: 'cbcs',\n MEDIA_KEY_MESSAGE_TYPES: {\n LICENSE_REQUEST: 'license-request',\n LICENSE_RENEWAL: 'license-renewal',\n LICENSE_RELEASE: 'license-release',\n INDIVIDUALIZATION_REQUEST: 'individualization-request',\n },\n ROBUSTNESS_STRINGS: {\n WIDEVINE: {\n SW_SECURE_CRYPTO: 'SW_SECURE_CRYPTO',\n SW_SECURE_DECODE: 'SW_SECURE_DECODE',\n HW_SECURE_CRYPTO: 'HW_SECURE_CRYPTO',\n HW_SECURE_DECODE: 'HW_SECURE_DECODE',\n HW_SECURE_ALL: 'HW_SECURE_ALL'\n }\n },\n MEDIA_KEY_STATUSES: {\n USABLE: 'usable',\n EXPIRED: 'expired',\n RELEASED: 'released',\n OUTPUT_RESTRICTED: 'output-restricted',\n OUTPUT_DOWNSCALED: 'output-downscaled',\n STATUS_PENDING: 'status-pending',\n INTERNAL_ERROR: 'internal-error',\n }\n}\n\n\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass DVBErrors {\n constructor() {\n this.mpdurl = null;\n // String - Absolute URL from which the MPD was originally\n // retrieved (MPD updates will not change this value).\n\n this.errorcode = null;\n // String - The value of errorcode depends upon the type\n // of error being reported. For an error listed in the\n // ErrorType column below the value is as described in the\n // Value column.\n //\n // ErrorType Value\n // --------- -----\n // HTTP error status code HTTP status code\n // Unknown HTTP status code HTTP status code\n // SSL connection failed \"SSL\" followed by SSL alert value\n // DNS resolution failed \"C00\"\n // Host unreachable \"C01\"\n // Connection refused \"C02\"\n // Connection error – Not otherwise specified \"C03\"\n // Corrupt media – ISO BMFF container cannot be parsed \"M00\"\n // Corrupt media – Not otherwise specified \"M01\"\n // Changing Base URL in use due to errors \"F00\"\n // Becoming an error reporting Player \"S00\"\n\n this.terror = null;\n // Real-Time - Date and time at which error occurred in UTC,\n // formatted as a combined date and time according to ISO 8601.\n\n this.url = null;\n // String - Absolute URL from which data was being requested\n // when this error occurred. If the error report is in relation\n // to corrupt media or changing BaseURL, this may be a null\n // string if the URL from which the media was obtained or\n // which led to the change of BaseURL is no longer known.\n\n this.ipaddress = null;\n // String - IP Address which the host name in \"url\" resolved to.\n // If the error report is in relation to corrupt media or\n // changing BaseURL, this may be a null string if the URL\n // from which the media was obtained or which led to the\n // change of BaseURL is no longer known.\n\n this.servicelocation = null;\n // String - The value of the serviceLocation field in the\n // BaseURL being used. In the event of this report indicating\n // a change of BaseURL this is the value from the BaseURL\n // being moved from.\n }\n}\n\nDVBErrors.SSL_CONNECTION_FAILED_PREFIX = 'SSL';\nDVBErrors.DNS_RESOLUTION_FAILED = 'C00';\nDVBErrors.HOST_UNREACHABLE = 'C01';\nDVBErrors.CONNECTION_REFUSED = 'C02';\nDVBErrors.CONNECTION_ERROR = 'C03';\nDVBErrors.CORRUPT_MEDIA_ISOBMFF = 'M00';\nDVBErrors.CORRUPT_MEDIA_OTHER = 'M01';\nDVBErrors.BASE_URL_CHANGED = 'F00';\nDVBErrors.BECAME_REPORTER = 'S00';\n\nexport default DVBErrors;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DVBErrors from '../vo/DVBErrors.js';\nimport MetricsReportingEvents from '../MetricsReportingEvents.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction DVBErrorsTranslator(config) {\n\n config = config || {};\n let instance,\n mpd;\n const eventBus = config.eventBus;\n const dashMetrics = config.dashMetrics;\n const metricsConstants = config.metricsConstants;\n //MediaPlayerEvents have been added to Events in MediaPlayer class\n const Events = config.events;\n\n function report(vo) {\n let o = new DVBErrors();\n\n if (!mpd) {\n return;\n }\n\n for (const key in vo) {\n if (vo.hasOwnProperty(key)) {\n o[key] = vo[key];\n }\n }\n\n if (!o.mpdurl) {\n o.mpdurl = mpd.originalUrl || mpd.url;\n }\n\n if (!o.terror) {\n o.terror = new Date();\n }\n\n dashMetrics.addDVBErrors(o);\n }\n\n function onManifestUpdate(e) {\n if (e.error) {\n return;\n }\n\n mpd = e.manifest;\n }\n\n function onServiceLocationChanged(e) {\n report({\n errorcode: DVBErrors.BASE_URL_CHANGED,\n servicelocation: e.entry\n });\n }\n\n function onBecameReporter() {\n report({\n errorcode: DVBErrors.BECAME_REPORTER\n });\n }\n\n function handleHttpMetric(vo) {\n if ((vo.responsecode === 0) || // connection failure - unknown\n (vo.responsecode == null) || // Generated on .catch() and when uninitialized\n (vo.responsecode >= 400) || // HTTP error status code\n (vo.responsecode < 100) || // unknown status codes\n (vo.responsecode >= 600)) { // unknown status codes\n report({\n errorcode: vo.responsecode || DVBErrors.CONNECTION_ERROR,\n url: vo.url,\n terror: vo.tresponse,\n servicelocation: vo._serviceLocation\n });\n }\n }\n\n function onMetricEvent(e) {\n switch (e.metric) {\n case metricsConstants.HTTP_REQUEST:\n handleHttpMetric(e.value);\n break;\n default:\n break;\n }\n }\n\n function onPlaybackError(e) {\n let reason = e.error ? e.error.code : 0;\n let errorcode;\n\n switch (reason) {\n case MediaError.MEDIA_ERR_NETWORK:\n errorcode = DVBErrors.CONNECTION_ERROR;\n break;\n case MediaError.MEDIA_ERR_DECODE:\n errorcode = DVBErrors.CORRUPT_MEDIA_OTHER;\n break;\n default:\n return;\n }\n\n report({\n errorcode: errorcode\n });\n }\n\n function initialize() {\n eventBus.on(Events.MANIFEST_UPDATED, onManifestUpdate, instance);\n eventBus.on(\n Events.SERVICE_LOCATION_BASE_URL_BLACKLIST_CHANGED,\n onServiceLocationChanged,\n instance\n );\n eventBus.on(Events.METRIC_ADDED, onMetricEvent, instance);\n eventBus.on(Events.METRIC_UPDATED, onMetricEvent, instance);\n eventBus.on(Events.PLAYBACK_ERROR, onPlaybackError, instance);\n eventBus.on(\n MetricsReportingEvents.BECAME_REPORTING_PLAYER,\n onBecameReporter,\n instance\n );\n }\n\n function reset() {\n eventBus.off(Events.MANIFEST_UPDATED, onManifestUpdate, instance);\n eventBus.off(\n Events.SERVICE_LOCATION_BASE_URL_BLACKLIST_CHANGED,\n onServiceLocationChanged,\n instance\n );\n eventBus.off(Events.METRIC_ADDED, onMetricEvent, instance);\n eventBus.off(Events.METRIC_UPDATED, onMetricEvent, instance);\n eventBus.off(Events.PLAYBACK_ERROR, onPlaybackError, instance);\n eventBus.off(\n MetricsReportingEvents.BECAME_REPORTING_PLAYER,\n onBecameReporter,\n instance\n );\n }\n\n instance = {\n initialize,\n reset\n };\n\n return instance;\n}\n\nDVBErrorsTranslator.__dashjs_factory_name = 'DVBErrorsTranslator';\nexport default FactoryMaker.getSingletonFactory(DVBErrorsTranslator); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport CustomTimeRanges from '../../utils/CustomTimeRanges.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction RangeController(config) {\n\n config = config || {};\n let useWallClockTime = false;\n let context = this.context;\n let instance,\n ranges;\n\n let mediaElement = config.mediaElement;\n\n function initialize(rs) {\n if (rs && rs.length) {\n rs.forEach(r => {\n let start = r.starttime;\n let end = start + r.duration;\n\n ranges.add(start, end);\n });\n\n useWallClockTime = !!rs[0]._useWallClockTime;\n }\n }\n\n function reset() {\n ranges.clear();\n }\n\n function setup() {\n ranges = CustomTimeRanges(context).create();\n }\n\n function isEnabled() {\n let numRanges = ranges.length;\n let time;\n\n if (!numRanges) {\n return true;\n }\n\n // When not present, DASH Metrics reporting is requested\n // for the whole duration of the content.\n time = useWallClockTime ?\n (new Date().getTime() / 1000) :\n mediaElement.currentTime;\n\n for (let i = 0; i < numRanges; i += 1) {\n let start = ranges.start(i);\n let end = ranges.end(i);\n\n if ((start <= time) && (time < end)) {\n return true;\n }\n }\n\n return false;\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n isEnabled: isEnabled\n };\n\n setup();\n\n return instance;\n}\n\nRangeController.__dashjs_factory_name = 'RangeController';\nexport default FactoryMaker.getClassFactory(RangeController); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\n/**\n * @ignore\n */\nfunction MetricSerialiser() {\n\n // For each entry in the top level list within the metric (in the case\n // of the DVBErrors metric each entry corresponds to an \"error event\"\n // described in clause 10.8.4) the Player shall:\n function serialise(metric) {\n let pairs = [];\n let obj = [];\n let key,\n value;\n\n // Take each (key, value) pair from the metric entry and create a\n // string consisting of the name of the key, followed by an equals\n // ('=') character, followed by the string representation of the\n // value. The string representation of the value is created based\n // on the type of the value following the instructions in Table 22.\n for (key in metric) {\n if (metric.hasOwnProperty(key) && (key.indexOf('_') !== 0)) {\n value = metric[key];\n\n // we want to ensure that keys still end up in the report\n // even if there is no value\n if ((value === undefined) || (value === null)) {\n value = '';\n }\n\n // DVB A168 10.12.4 Table 22\n if (Array.isArray(value)) {\n // if trace or similar is null, do not include in output\n if (!value.length) {\n continue;\n }\n\n obj = [];\n\n value.forEach(function (v) {\n let isBuiltIn = Object.prototype.toString.call(v).slice(8, -1) !== 'Object';\n\n obj.push(isBuiltIn ? v : serialise(v));\n });\n\n value = obj.map(encodeURIComponent).join(',');\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value);\n } else if (value instanceof Date) {\n value = value.toISOString();\n } else if (typeof value === 'number') {\n value = Math.round(value);\n }\n\n pairs.push(key + '=' + value);\n }\n }\n\n // Concatenate the strings created in the previous step with an\n // ampersand ('&') character between each one.\n return pairs.join('&');\n }\n\n return {\n serialise: serialise\n };\n}\n\nMetricSerialiser.__dashjs_factory_name = 'MetricSerialiser';\nexport default FactoryMaker.getSingletonFactory(MetricSerialiser); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\n/**\n * @ignore\n */\nfunction RNG() {\n\n // check whether secure random numbers are available. if not, revert to\n // using Math.random\n let crypto = window.crypto || window.msCrypto;\n\n // could just as easily use any other array type by changing line below\n let ArrayType = Uint32Array;\n let MAX_VALUE = Math.pow(2, ArrayType.BYTES_PER_ELEMENT * 8) - 1;\n\n // currently there is only one client for this code, and that only uses\n // a single random number per initialisation. may want to increase this\n // number if more consumers in the future\n let NUM_RANDOM_NUMBERS = 10;\n\n let randomNumbers,\n index,\n instance;\n\n function initialize() {\n if (crypto) {\n if (!randomNumbers) {\n randomNumbers = new ArrayType(NUM_RANDOM_NUMBERS);\n }\n crypto.getRandomValues(randomNumbers);\n index = 0;\n }\n }\n\n function rand(min, max) {\n let r;\n\n if (!min) {\n min = 0;\n }\n\n if (!max) {\n max = 1;\n }\n\n if (crypto) {\n if (index === randomNumbers.length) {\n initialize();\n }\n\n r = randomNumbers[index] / MAX_VALUE;\n index += 1;\n } else {\n r = Math.random();\n }\n\n return (r * (max - min)) + min;\n }\n\n instance = {\n random: rand\n };\n\n initialize();\n\n return instance;\n}\n\nRNG.__dashjs_factory_name = 'RNG';\nexport default FactoryMaker.getSingletonFactory(RNG); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricSerialiser from '../../utils/MetricSerialiser.js';\nimport RNG from '../../utils/RNG.js';\nimport CustomParametersModel from '../../../models/CustomParametersModel.js';\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\n\nfunction DVBReporting(config) {\n config = config || {};\n let instance;\n\n let context = this.context;\n let metricSerialiser,\n customParametersModel,\n randomNumberGenerator,\n reportingPlayerStatusDecided,\n isReportingPlayer,\n reportingUrl,\n rangeController;\n\n let USE_DRAFT_DVB_SPEC = true;\n let allowPendingRequestsToCompleteOnReset = true;\n let pendingRequests = [];\n\n const metricsConstants = config.metricsConstants;\n\n function setup() {\n metricSerialiser = MetricSerialiser(context).getInstance();\n randomNumberGenerator = RNG(context).getInstance();\n customParametersModel = CustomParametersModel(context).getInstance();\n\n resetInitialSettings();\n }\n\n function doGetRequest(url, successCB, failureCB) {\n let req = new XMLHttpRequest();\n req.withCredentials = customParametersModel.getXHRWithCredentialsForType(metricsConstants.HTTP_REQUEST_DVB_REPORTING_TYPE);\n const oncomplete = function () {\n let reqIndex = pendingRequests.indexOf(req);\n\n if (reqIndex === -1) {\n return;\n } else {\n pendingRequests.splice(reqIndex, 1);\n }\n\n if ((req.status >= 200) && (req.status < 300)) {\n if (successCB) {\n successCB();\n }\n } else {\n if (failureCB) {\n failureCB();\n }\n }\n };\n\n pendingRequests.push(req);\n\n try {\n req.open('GET', url);\n req.onloadend = oncomplete;\n req.onerror = oncomplete;\n req.send();\n } catch (e) {\n req.onerror();\n }\n }\n\n function report(type, vos) {\n if (!Array.isArray(vos)) {\n vos = [vos];\n }\n\n // If the Player is not a reporting Player, then the Player shall\n // not report any errors.\n // ... In addition to any time restrictions specified by a Range\n // element within the Metrics element.\n if (isReportingPlayer && rangeController.isEnabled()) {\n\n // This reporting mechanism operates by creating one HTTP GET\n // request for every entry in the top level list of the metric.\n vos.forEach(function (vo) {\n let url = metricSerialiser.serialise(vo);\n\n // this has been proposed for errata\n if (USE_DRAFT_DVB_SPEC && (type !== metricsConstants.DVB_ERRORS)) {\n url = `metricname=${type}&${url}`;\n }\n\n // Take the value of the @reportingUrl attribute, append a\n // question mark ('?') character and then append the string\n // created in the previous step.\n url = `${reportingUrl}?${url}`;\n\n // Make an HTTP GET request to the URL contained within the\n // string created in the previous step.\n doGetRequest(url, null, function () {\n // If the Player is unable to make the report, for\n // example because the @reportingUrl is invalid, the\n // host cannot be reached, or an HTTP status code other\n // than one in the 200 series is received, the Player\n // shall cease being a reporting Player for the\n // duration of the MPD.\n isReportingPlayer = false;\n });\n });\n }\n }\n\n function initialize(entry, rc) {\n let probability;\n\n rangeController = rc;\n\n reportingUrl = entry.dvbReportingUrl;\n\n // If a required attribute is missing, the Reporting descriptor may\n // be ignored by the Player\n if (!reportingUrl) {\n throw new Error(\n 'required parameter missing (dvb:reportingUrl)'\n );\n }\n\n // A Player's status, as a reporting Player or not, shall remain\n // static for the duration of the MPD, regardless of MPD updates.\n // (i.e. only calling reset (or failure) changes this state)\n if (!reportingPlayerStatusDecided) {\n probability = entry.dvbProbability;\n // TS 103 285 Clause 10.12.3.4\n // If the @probability attribute is set to 1000, it shall be a reporting Player.\n // If the @probability attribute is absent it will take the default value of 1000.\n // For any other value of the @probability attribute, it shall decide at random whether to be a\n // reporting Player, such that the probability of being one is @probability/1000.\n if (probability && (probability === 1000 || ((probability / 1000) >= randomNumberGenerator.random()))) {\n isReportingPlayer = true;\n }\n\n reportingPlayerStatusDecided = true;\n }\n }\n\n function resetInitialSettings() {\n reportingPlayerStatusDecided = false;\n isReportingPlayer = false;\n reportingUrl = null;\n rangeController = null;\n }\n\n function reset() {\n if (!allowPendingRequestsToCompleteOnReset) {\n pendingRequests.forEach(req => req.abort());\n pendingRequests = [];\n }\n\n resetInitialSettings();\n }\n\n instance = {\n report: report,\n initialize: initialize,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nDVBReporting.__dashjs_factory_name = 'DVBReporting';\nexport default FactoryMaker.getClassFactory(DVBReporting); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DVBReporting from './reporters/DVBReporting.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction ReportingFactory(config) {\n config = config || {};\n\n const knownReportingSchemeIdUris = {\n 'urn:dvb:dash:reporting:2014': DVBReporting\n };\n\n const context = this.context;\n let instance;\n const logger = config.debug ? config.debug.getLogger(instance) : {};\n const metricsConstants = config.metricsConstants;\n const mediaPlayerModel = config.mediaPlayerModel || {};\n\n function create(entry, rangeController) {\n let reporting;\n\n try {\n reporting = knownReportingSchemeIdUris[entry.schemeIdUri](context).create({\n metricsConstants: metricsConstants,\n mediaPlayerModel: mediaPlayerModel\n });\n\n reporting.initialize(entry, rangeController);\n } catch (e) {\n reporting = null;\n logger.error(`ReportingFactory: could not create Reporting with schemeIdUri ${entry.schemeIdUri} (${e.message})`);\n }\n\n return reporting;\n }\n\n function register(schemeIdUri, moduleName) {\n knownReportingSchemeIdUris[schemeIdUri] = moduleName;\n }\n\n function unregister(schemeIdUri) {\n delete knownReportingSchemeIdUris[schemeIdUri];\n }\n\n instance = {\n create: create,\n register: register,\n unregister: unregister\n };\n\n return instance;\n}\n\nReportingFactory.__dashjs_factory_name = 'ReportingFactory';\nexport default FactoryMaker.getSingletonFactory(ReportingFactory); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport ReportingFactory from '../reporting/ReportingFactory.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction ReportingController(config) {\n\n let reporters = [];\n let instance;\n\n const reportingFactory = ReportingFactory(this.context).getInstance(config);\n\n function initialize(reporting, rangeController) {\n // \"if multiple Reporting elements are present, it is expected that\n // the client processes one of the recognized reporting schemes.\"\n // to ignore this, and support multiple Reporting per Metric,\n // simply change the 'some' below to 'forEach'\n reporting.some(r => {\n let reporter = reportingFactory.create(r, rangeController);\n\n if (reporter) {\n reporters.push(reporter);\n return true;\n }\n });\n }\n\n function reset() {\n reporters.forEach(r => r.reset());\n reporters = [];\n }\n\n function report(type, vos) {\n reporters.forEach(r => r.report(type, vos));\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n report: report\n };\n\n return instance;\n}\n\nReportingController.__dashjs_factory_name = 'ReportingController';\nexport default FactoryMaker.getClassFactory(ReportingController); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\n/**\n * @ignore\n */\nfunction HandlerHelpers() {\n return {\n reconstructFullMetricName: function (key, n, type) {\n let mn = key;\n\n if (n) {\n mn += '(' + n;\n\n if (type && type.length) {\n mn += ',' + type;\n }\n\n mn += ')';\n }\n\n return mn;\n },\n\n validateN: function (n_ms) {\n if (!n_ms) {\n throw new Error('missing n');\n }\n\n if (isNaN(n_ms)) {\n throw new Error('n is NaN');\n }\n\n // n is a positive integer is defined to refer to the metric\n // in which the buffer level is recorded every n ms.\n if (n_ms < 0) {\n throw new Error('n must be positive');\n }\n\n return n_ms;\n }\n };\n}\n\nHandlerHelpers.__dashjs_factory_name = 'HandlerHelpers';\nexport default FactoryMaker.getSingletonFactory(HandlerHelpers); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport HandlerHelpers from '../../utils/HandlerHelpers.js';\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\n\nfunction BufferLevelHandler(config) {\n\n config = config || {};\n let instance,\n reportingController,\n n,\n name,\n interval,\n lastReportedTime;\n\n let context = this.context;\n let handlerHelpers = HandlerHelpers(context).getInstance();\n\n let storedVOs = [];\n\n const metricsConstants = config.metricsConstants;\n\n function getLowestBufferLevelVO() {\n try {\n return Object.keys(storedVOs).map(\n key => storedVOs[key]\n ).reduce(\n (a, b) => {\n return (a.level < b.level) ? a : b;\n }\n );\n } catch (e) {\n return;\n }\n }\n\n function intervalCallback() {\n let vo = getLowestBufferLevelVO();\n\n if (vo) {\n if (lastReportedTime !== vo.t) {\n lastReportedTime = vo.t;\n reportingController.report(name, vo);\n }\n }\n }\n\n function initialize(basename, rc, n_ms) {\n if (rc) {\n // this will throw if n is invalid, to be\n // caught by the initialize caller.\n n = handlerHelpers.validateN(n_ms);\n reportingController = rc;\n name = handlerHelpers.reconstructFullMetricName(basename, n_ms);\n interval = setInterval(intervalCallback, n);\n }\n }\n\n function reset() {\n clearInterval(interval);\n interval = null;\n n = 0;\n reportingController = null;\n lastReportedTime = null;\n }\n\n function handleNewMetric(metric, vo, type) {\n if (metric === metricsConstants.BUFFER_LEVEL) {\n storedVOs[type] = vo;\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nBufferLevelHandler.__dashjs_factory_name = 'BufferLevelHandler';\nexport default FactoryMaker.getClassFactory(BufferLevelHandler); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricsReportingEvents from '../../MetricsReportingEvents.js';\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\n\nfunction DVBErrorsHandler(config) {\n\n config = config || {};\n let instance,\n reportingController;\n\n let eventBus = config.eventBus;\n const metricsConstants = config.metricsConstants;\n\n function onInitialisationComplete() {\n // we only want to report this once per call to initialize\n eventBus.off(\n MetricsReportingEvents.METRICS_INITIALISATION_COMPLETE,\n onInitialisationComplete,\n this\n );\n\n // Note: A Player becoming a reporting Player is itself\n // something which is recorded by the DVBErrors metric.\n eventBus.trigger(MetricsReportingEvents.BECAME_REPORTING_PLAYER);\n }\n\n function initialize(unused, rc) {\n if (rc) {\n reportingController = rc;\n\n eventBus.on(\n MetricsReportingEvents.METRICS_INITIALISATION_COMPLETE,\n onInitialisationComplete,\n this\n );\n }\n }\n\n function reset() {\n reportingController = null;\n }\n\n function handleNewMetric(metric, vo) {\n // simply pass metric straight through\n if (metric === metricsConstants.DVB_ERRORS) {\n if (reportingController) {\n reportingController.report(metric, vo);\n }\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nexport default FactoryMaker.getClassFactory(DVBErrorsHandler); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport HandlerHelpers from '../../utils/HandlerHelpers.js';\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\n\nfunction HttpListHandler(config) {\n\n config = config || {};\n let instance,\n reportingController,\n n,\n type,\n name,\n interval;\n\n let storedVos = [];\n\n let handlerHelpers = HandlerHelpers(this.context).getInstance();\n\n const metricsConstants = config.metricsConstants;\n\n function intervalCallback() {\n var vos = storedVos;\n\n if (vos.length) {\n if (reportingController) {\n reportingController.report(name, vos);\n }\n }\n\n storedVos = [];\n }\n\n function initialize(basename, rc, n_ms, requestType) {\n if (rc) {\n\n // this will throw if n is invalid, to be\n // caught by the initialize caller.\n n = handlerHelpers.validateN(n_ms);\n\n reportingController = rc;\n\n if (requestType && requestType.length) {\n type = requestType;\n }\n\n name = handlerHelpers.reconstructFullMetricName(\n basename,\n n_ms,\n requestType\n );\n\n interval = setInterval(intervalCallback, n);\n }\n }\n\n function reset() {\n clearInterval(interval);\n interval = null;\n n = null;\n type = null;\n storedVos = [];\n reportingController = null;\n }\n\n function handleNewMetric(metric, vo) {\n if (metric === metricsConstants.HTTP_REQUEST) {\n if (!type || (type === vo.type)) {\n storedVos.push(vo);\n }\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nHttpListHandler.__dashjs_factory_name = 'HttpListHandler';\nexport default FactoryMaker.getClassFactory(HttpListHandler); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../../../core/FactoryMaker.js';\n\n/**\n * @ignore\n */\nfunction GenericMetricHandler() {\n\n let instance,\n metricName,\n reportingController;\n\n function initialize(name, rc) {\n metricName = name;\n reportingController = rc;\n }\n\n function reset() {\n reportingController = null;\n metricName = undefined;\n }\n\n function handleNewMetric(metric, vo) {\n // simply pass metric straight through\n if (metric === metricName) {\n if (reportingController) {\n reportingController.report(metricName, vo);\n }\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset,\n handleNewMetric: handleNewMetric\n };\n\n return instance;\n}\n\nGenericMetricHandler.__dashjs_factory_name = 'GenericMetricHandler';\nexport default FactoryMaker.getClassFactory(GenericMetricHandler); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport BufferLevel from './handlers/BufferLevelHandler.js';\nimport DVBErrors from './handlers/DVBErrorsHandler.js';\nimport HttpList from './handlers/HttpListHandler.js';\nimport GenericMetricHandler from './handlers/GenericMetricHandler.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction MetricsHandlerFactory(config) {\n\n config = config || {};\n let instance;\n const logger = config.debug ? config.debug.getLogger(instance) : {};\n\n // group 1: key, [group 3: n [, group 5: type]]\n let keyRegex = /([a-zA-Z]*)(\\(([0-9]*)(\\,\\s*([a-zA-Z]*))?\\))?/;\n\n const context = this.context;\n let knownFactoryProducts = {\n BufferLevel: BufferLevel,\n DVBErrors: DVBErrors,\n HttpList: HttpList,\n PlayList: GenericMetricHandler,\n RepSwitchList: GenericMetricHandler,\n TcpList: GenericMetricHandler\n };\n\n function create(listType, reportingController) {\n var matches = listType.match(keyRegex);\n var handler;\n\n if (!matches) {\n return;\n }\n\n try {\n handler = knownFactoryProducts[matches[1]](context).create({\n eventBus: config.eventBus,\n metricsConstants: config.metricsConstants\n });\n\n handler.initialize(\n matches[1],\n reportingController,\n matches[3],\n matches[5]\n );\n } catch (e) {\n handler = null;\n logger.error(`MetricsHandlerFactory: Could not create handler for type ${matches[1]} with args ${matches[3]}, ${matches[5]} (${e.message})`);\n }\n\n return handler;\n }\n\n function register(key, handler) {\n knownFactoryProducts[key] = handler;\n }\n\n function unregister(key) {\n delete knownFactoryProducts[key];\n }\n\n instance = {\n create: create,\n register: register,\n unregister: unregister\n };\n\n return instance;\n}\n\nMetricsHandlerFactory.__dashjs_factory_name = 'MetricsHandlerFactory';\nexport default FactoryMaker.getSingletonFactory(MetricsHandlerFactory); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricsHandlerFactory from '../metrics/MetricsHandlerFactory.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction MetricsHandlersController(config) {\n\n config = config || {};\n let handlers = [];\n\n let instance;\n const context = this.context;\n const eventBus = config.eventBus;\n const Events = config.events;\n\n let metricsHandlerFactory = MetricsHandlerFactory(context).getInstance({\n debug: config.debug,\n eventBus: config.eventBus,\n metricsConstants: config.metricsConstants\n });\n\n function handle(e) {\n handlers.forEach(handler => {\n handler.handleNewMetric(e.metric, e.value, e.mediaType);\n });\n }\n\n function initialize(metrics, reportingController) {\n metrics.split(',').forEach(\n (m, midx, ms) => {\n let handler;\n\n // there is a bug in ISO23009-1 where the metrics attribute\n // is a comma-separated list but HttpList key can contain a\n // comma enclosed by ().\n if ((m.indexOf('(') !== -1) && m.indexOf(')') === -1) {\n let nextm = ms[midx + 1];\n\n if (nextm &&\n (nextm.indexOf('(') === -1) &&\n (nextm.indexOf(')') !== -1)) {\n m += ',' + nextm;\n\n // delete the next metric so forEach does not visit.\n delete ms[midx + 1];\n }\n }\n\n handler = metricsHandlerFactory.create(\n m,\n reportingController\n );\n\n if (handler) {\n handlers.push(handler);\n }\n }\n );\n\n eventBus.on(\n Events.METRIC_ADDED,\n handle,\n instance\n );\n\n eventBus.on(\n Events.METRIC_UPDATED,\n handle,\n instance\n );\n }\n\n function reset() {\n eventBus.off(\n Events.METRIC_ADDED,\n handle,\n instance\n );\n\n eventBus.off(\n Events.METRIC_UPDATED,\n handle,\n instance\n );\n\n handlers.forEach(handler => handler.reset());\n\n handlers = [];\n }\n\n instance = {\n initialize: initialize,\n reset: reset\n };\n\n return instance;\n}\n\nMetricsHandlersController.__dashjs_factory_name = 'MetricsHandlersController';\nexport default FactoryMaker.getClassFactory(MetricsHandlersController); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport RangeController from './RangeController.js';\nimport ReportingController from './ReportingController.js';\nimport MetricsHandlersController from './MetricsHandlersController.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction MetricsController(config) {\n\n config = config || {};\n let metricsHandlersController,\n reportingController,\n rangeController,\n instance;\n\n let context = this.context;\n\n function initialize(metricsEntry) {\n try {\n rangeController = RangeController(context).create({\n mediaElement: config.mediaElement\n });\n\n rangeController.initialize(metricsEntry.Range);\n\n reportingController = ReportingController(context).create({\n debug: config.debug,\n metricsConstants: config.metricsConstants,\n mediaPlayerModel: config.mediaPlayerModel\n });\n\n reportingController.initialize(metricsEntry.Reporting, rangeController);\n\n metricsHandlersController = MetricsHandlersController(context).create({\n debug: config.debug,\n eventBus: config.eventBus,\n metricsConstants: config.metricsConstants,\n events: config.events\n });\n\n metricsHandlersController.initialize(metricsEntry.metrics, reportingController);\n } catch (e) {\n reset();\n throw e;\n }\n }\n\n function reset() {\n if (metricsHandlersController) {\n metricsHandlersController.reset();\n }\n\n if (reportingController) {\n reportingController.reset();\n }\n\n if (rangeController) {\n rangeController.reset();\n }\n }\n\n instance = {\n initialize: initialize,\n reset: reset\n };\n\n return instance;\n}\n\nMetricsController.__dashjs_factory_name = 'MetricsController';\nexport default FactoryMaker.getClassFactory(MetricsController); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Metrics {\n constructor() {\n\n this.metrics = '';\n this.Range = [];\n this.Reporting = [];\n }\n}\n\nexport default Metrics;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass Range {\n constructor() {\n\n // as defined in ISO23009-1\n this.starttime = 0;\n this.duration = Infinity;\n\n // for internal use\n this._useWallClockTime = false;\n }\n}\n\nexport default Range;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\n\n// TS 103 285 Clause 10.12.3.3\nconst DEFAULT_DVB_PROBABILITY = 1000;\n\nclass Reporting {\n constructor() {\n\n this.schemeIdUri = '';\n this.value = '';\n\n // DVB Extensions\n this.dvbReportingUrl = '';\n this.dvbProbability = DEFAULT_DVB_PROBABILITY;\n }\n}\n\nexport default Reporting;\n","import Metrics from '../vo/Metrics.js';\nimport Range from '../vo/Range.js';\nimport Reporting from '../vo/Reporting.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction ManifestParsing (config) {\n config = config || {};\n let instance;\n let adapter = config.adapter;\n const constants = config.constants;\n\n function getMetricsRangeStartTime(manifest, dynamic, range) {\n let voPeriods,\n reportingStartTime;\n let presentationStartTime = 0;\n\n if (dynamic) {\n // For services with MPD@type='dynamic', the start time is\n // indicated in wall clock time by adding the value of this\n // attribute to the value of the MPD@availabilityStartTime\n // attribute.\n presentationStartTime = adapter.getAvailabilityStartTime(manifest) / 1000;\n } else {\n // For services with MPD@type='static', the start time is indicated\n // in Media Presentation time and is relative to the PeriodStart\n // time of the first Period in this MPD.\n voPeriods = adapter.getRegularPeriods(manifest);\n\n if (voPeriods.length) {\n presentationStartTime = voPeriods[0].start;\n }\n }\n\n // When not present, DASH Metrics collection is\n // requested from the beginning of content\n // consumption.\n reportingStartTime = presentationStartTime;\n\n if (range && range.hasOwnProperty(constants.START_TIME)) {\n reportingStartTime += range.starttime;\n }\n\n return reportingStartTime;\n }\n\n function getMetrics(manifest) {\n let metrics = [];\n\n if (manifest && manifest.Metrics) {\n manifest.Metrics.forEach(metric => {\n var metricEntry = new Metrics();\n var isDynamic = adapter.getIsDynamic(manifest);\n\n if (metric.hasOwnProperty('metrics')) {\n metricEntry.metrics = metric.metrics;\n } else {\n return;\n }\n\n if (metric.Range) {\n metric.Range.forEach(range => {\n var rangeEntry = new Range();\n\n rangeEntry.starttime =\n getMetricsRangeStartTime(manifest, isDynamic, range);\n\n if (range.hasOwnProperty('duration')) {\n rangeEntry.duration = range.duration;\n } else {\n // if not present, the value is identical to the\n // Media Presentation duration.\n rangeEntry.duration = adapter.getDuration(manifest);\n }\n\n rangeEntry._useWallClockTime = isDynamic;\n\n metricEntry.Range.push(rangeEntry);\n });\n }\n\n if (metric.Reporting) {\n metric.Reporting.forEach(reporting => {\n var reportingEntry = new Reporting();\n\n if (reporting.hasOwnProperty(constants.SCHEME_ID_URI)) {\n reportingEntry.schemeIdUri = reporting.schemeIdUri;\n } else {\n // Invalid Reporting. schemeIdUri must be set. Ignore.\n return;\n }\n\n if (reporting.hasOwnProperty('value')) {\n reportingEntry.value = reporting.value;\n }\n\n if (reporting.hasOwnProperty(constants.DVB_REPORTING_URL)) {\n reportingEntry.dvbReportingUrl = reporting[constants.DVB_REPORTING_URL];\n }\n\n if (reporting.hasOwnProperty(constants.DVB_PROBABILITY)) {\n reportingEntry.dvbProbability = reporting[constants.DVB_PROBABILITY];\n }\n\n metricEntry.Reporting.push(reportingEntry);\n });\n } else {\n // Invalid Metrics. At least one reporting must be present. Ignore\n return;\n }\n\n metrics.push(metricEntry);\n });\n }\n\n return metrics;\n }\n\n instance = {\n getMetrics: getMetrics\n };\n\n return instance;\n}\n\nManifestParsing.__dashjs_factory_name = 'ManifestParsing';\nexport default FactoryMaker.getSingletonFactory(ManifestParsing); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MetricsController from './MetricsController.js';\nimport ManifestParsing from '../utils/ManifestParsing.js';\nimport MetricsReportingEvents from '../MetricsReportingEvents.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction MetricsCollectionController(config) {\n\n config = config || {};\n let instance;\n let metricsControllers = {};\n let context = this.context;\n let eventBus = config.eventBus;\n const events = config.events;\n\n function update(e) {\n if (e.error) {\n return;\n }\n\n // start by assuming all existing controllers need removing\n let controllersToRemove = Object.keys(metricsControllers);\n\n const metrics = ManifestParsing(context).getInstance({\n adapter: config.adapter,\n constants: config.constants\n }).getMetrics(e.manifest);\n\n metrics.forEach(m => {\n const key = JSON.stringify(m);\n\n if (!metricsControllers.hasOwnProperty(key)) {\n try {\n let controller = MetricsController(context).create(config);\n controller.initialize(m);\n metricsControllers[key] = controller;\n } catch (e) {\n // fail quietly\n }\n } else {\n // we still need this controller - delete from removal list\n controllersToRemove.splice(key, 1);\n }\n });\n\n // now remove the unwanted controllers\n controllersToRemove.forEach(c => {\n metricsControllers[c].reset();\n delete metricsControllers[c];\n });\n\n eventBus.trigger(MetricsReportingEvents.METRICS_INITIALISATION_COMPLETE);\n }\n\n function resetMetricsControllers() {\n Object.keys(metricsControllers).forEach(key => {\n metricsControllers[key].reset();\n });\n\n metricsControllers = {};\n }\n\n function setup() {\n eventBus.on(events.MANIFEST_UPDATED, update, instance);\n eventBus.on(events.STREAM_TEARDOWN_COMPLETE, resetMetricsControllers, instance);\n }\n\n function reset() {\n eventBus.off(events.MANIFEST_UPDATED, update, instance);\n eventBus.off(events.STREAM_TEARDOWN_COMPLETE, resetMetricsControllers, instance);\n }\n\n instance = {\n reset: reset\n };\n\n setup();\n return instance;\n}\n\nMetricsCollectionController.__dashjs_factory_name = 'MetricsCollectionController';\nexport default FactoryMaker.getClassFactory(MetricsCollectionController); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DVBErrorsTranslator from './utils/DVBErrorsTranslator.js';\nimport MetricsReportingEvents from './MetricsReportingEvents.js';\nimport MetricsCollectionController from './controllers/MetricsCollectionController.js';\nimport MetricsHandlerFactory from './metrics/MetricsHandlerFactory.js';\nimport ReportingFactory from './reporting/ReportingFactory.js';\n\nfunction MetricsReporting() {\n\n let context = this.context;\n let instance,\n dvbErrorsTranslator;\n\n /**\n * Create a MetricsCollectionController, and a DVBErrorsTranslator\n * @param {Object} config - dependancies from owner\n * @return {MetricsCollectionController} Metrics Collection Controller\n */\n function createMetricsReporting(config) {\n dvbErrorsTranslator = DVBErrorsTranslator(context).getInstance({\n eventBus: config.eventBus,\n dashMetrics: config.dashMetrics,\n metricsConstants: config.metricsConstants,\n events: config.events\n });\n dvbErrorsTranslator.initialize();\n return MetricsCollectionController(context).create(config);\n }\n\n /**\n * Get the ReportingFactory to allow new reporters to be registered\n * @return {ReportingFactory} Reporting Factory\n */\n function getReportingFactory() {\n return ReportingFactory(context).getInstance();\n }\n\n /**\n * Get the MetricsHandlerFactory to allow new handlers to be registered\n * @return {MetricsHandlerFactory} Metrics Handler Factory\n */\n function getMetricsHandlerFactory() {\n return MetricsHandlerFactory(context).getInstance();\n }\n\n instance = {\n createMetricsReporting: createMetricsReporting,\n getReportingFactory: getReportingFactory,\n getMetricsHandlerFactory: getMetricsHandlerFactory\n };\n\n return instance;\n}\n\nMetricsReporting.__dashjs_factory_name = 'MetricsReporting';\nconst factory = dashjs.FactoryMaker.getClassFactory(MetricsReporting); \nfactory.events = MetricsReportingEvents;\ndashjs.FactoryMaker.updateClassFactory(MetricsReporting.__dashjs_factory_name, factory); \nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../../core/events/EventsBase.js';\n\n/**\n * @class\n * @implements EventsBase\n */\nclass MetricsReportingEvents extends EventsBase {\n constructor () {\n super();\n\n this.METRICS_INITIALISATION_COMPLETE = 'internal_metricsReportingInitialized';\n this.BECAME_REPORTING_PLAYER = 'internal_becameReportingPlayer';\n\n /**\n * Triggered when CMCD data was generated for a HTTP request\n * @event MetricsReportingEvents#CMCD_DATA_GENERATED\n */\n this.CMCD_DATA_GENERATED = 'cmcdDataGenerated';\n }\n}\n\nlet metricsReportingEvents = new MetricsReportingEvents();\nexport default metricsReportingEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport UTCTiming from '../../dash/vo/UTCTiming.js';\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Settings from '../../core/Settings.js';\nimport {checkParameterType} from '../utils/SupervisorTools.js';\nimport Constants from '../constants/Constants.js';\n\nconst DEFAULT_XHR_WITH_CREDENTIALS = false;\n\nfunction CustomParametersModel() {\n\n let instance,\n utcTimingSources,\n xhrWithCredentials,\n requestInterceptors,\n responseInterceptors,\n licenseRequestFilters,\n licenseResponseFilters,\n customCapabilitiesFilters,\n customInitialTrackSelectionFunction,\n customAbrRules;\n\n const context = this.context;\n const settings = Settings(context).getInstance();\n\n function setup() {\n xhrWithCredentials = {\n default: DEFAULT_XHR_WITH_CREDENTIALS\n };\n _resetInitialSettings();\n }\n\n function _resetInitialSettings() {\n requestInterceptors = [];\n responseInterceptors = [];\n licenseRequestFilters = [];\n licenseResponseFilters = [];\n customCapabilitiesFilters = [];\n customAbrRules = [];\n customInitialTrackSelectionFunction = null;\n utcTimingSources = [];\n }\n\n\n function reset() {\n _resetInitialSettings();\n }\n\n function setConfig() {\n\n }\n\n /**\n * Registers a custom initial track selection function. Only one function is allowed. Calling this method will overwrite a potentially existing function.\n * @param {function} customFunc - the custom function that returns the initial track\n */\n function setCustomInitialTrackSelectionFunction(customFunc) {\n customInitialTrackSelectionFunction = customFunc;\n }\n\n /**\n * Resets the custom initial track selection\n */\n function resetCustomInitialTrackSelectionFunction() {\n customInitialTrackSelectionFunction = null;\n }\n\n /**\n * Returns the initial track selection function\n * @return {function}\n */\n function getCustomInitialTrackSelectionFunction() {\n return customInitialTrackSelectionFunction;\n }\n\n /**\n * Returns all license request filters\n * @return {array}\n */\n function getLicenseRequestFilters() {\n return licenseRequestFilters;\n }\n\n /**\n * Returns all license response filters\n * @return {array}\n */\n function getLicenseResponseFilters() {\n return licenseResponseFilters;\n }\n\n /**\n * Registers a license request filter. This enables application to manipulate/overwrite any request parameter and/or request data.\n * The provided callback function shall return a promise that shall be resolved once the filter process is completed.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the license request filter callback\n */\n function registerLicenseRequestFilter(filter) {\n licenseRequestFilters.push(filter);\n }\n\n /**\n * Registers a license response filter. This enables application to manipulate/overwrite the response data\n * The provided callback function shall return a promise that shall be resolved once the filter process is completed.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the license response filter callback\n */\n function registerLicenseResponseFilter(filter) {\n licenseResponseFilters.push(filter);\n }\n\n /**\n * Unregisters a license request filter.\n * @param {function} filter - the license request filter callback\n */\n function unregisterLicenseRequestFilter(filter) {\n _unregisterFilter(licenseRequestFilters, filter);\n }\n\n /**\n * Unregisters a license response filter.\n * @param {function} filter - the license response filter callback\n */\n function unregisterLicenseResponseFilter(filter) {\n _unregisterFilter(licenseResponseFilters, filter);\n }\n\n /**\n * Returns all custom capabilities filter\n * @return {array}\n */\n function getCustomCapabilitiesFilters() {\n return customCapabilitiesFilters;\n }\n\n /**\n * Registers a custom capabilities filter. This enables application to filter representations to use.\n * The provided callback function shall return a boolean or promise resolving to a boolean based on whether or not to use the representation.\n * The filters are applied in the order they are registered.\n * @param {function} filter - the custom capabilities filter callback\n */\n function registerCustomCapabilitiesFilter(filter) {\n customCapabilitiesFilters.push(filter);\n }\n\n /**\n * Unregisters a custom capabilities filter.\n * @param {function} filter - the custom capabilities filter callback\n */\n function unregisterCustomCapabilitiesFilter(filter) {\n _unregisterFilter(customCapabilitiesFilters, filter);\n }\n\n /**\n * Unregister a filter from the list of existing filers.\n * @param {array} filters\n * @param {function} filter\n * @private\n */\n function _unregisterFilter(filters, filter) {\n let index = -1;\n filters.some((item, i) => {\n if (item === filter) {\n index = i;\n return true;\n }\n });\n if (index < 0) {\n return;\n }\n filters.splice(index, 1);\n }\n\n /**\n * Iterate through the list of custom ABR rules and find the right rule by name\n * @param {string} rulename\n * @return {number} rule number\n */\n function _findAbrCustomRuleIndex(rulename) {\n let i;\n for (i = 0; i < customAbrRules.length; i++) {\n if (customAbrRules[i].rulename === rulename) {\n return i;\n }\n }\n return -1;\n }\n\n /**\n * Add a custom ABR Rule\n * Rule will be apply on next stream if a stream is being played\n *\n * @param {string} type - rule type (one of ['qualitySwitchRules','abandonFragmentRules'])\n * @param {string} rulename - name of rule (used to identify custom rule). If one rule of same name has been added, then existing rule will be updated\n * @param {object} rule - the rule object instance\n * @throws {@link Constants#BAD_ARGUMENT_ERROR BAD_ARGUMENT_ERROR} if called with invalid arguments.\n */\n function addAbrCustomRule(type, rulename, rule) {\n if (typeof type !== 'string' || (type !== Constants.RULES_TYPES.ABANDON_FRAGMENT_RULES && type !== Constants.RULES_TYPES.QUALITY_SWITCH_RULES) ||\n typeof rulename !== 'string') {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n let index = _findAbrCustomRuleIndex(rulename);\n if (index === -1) {\n // add rule\n customAbrRules.push({\n type: type,\n rulename: rulename,\n rule: rule\n });\n } else {\n // update rule\n customAbrRules[index].type = type;\n customAbrRules[index].rule = rule;\n }\n }\n\n /**\n * Remove a custom ABR Rule\n *\n * @param {string} rulename - name of the rule to be removed\n */\n function removeAbrCustomRule(rulename) {\n if (rulename) {\n let index = _findAbrCustomRuleIndex(rulename);\n //if no rulename custom rule has been found, do nothing\n if (index !== -1) {\n // remove rule\n customAbrRules.splice(index, 1);\n }\n } else {\n //if no rulename is defined, remove all ABR custome rules\n customAbrRules = [];\n }\n }\n\n /**\n * Remove all custom rules\n */\n function removeAllAbrCustomRule() {\n customAbrRules = [];\n }\n\n /**\n * Return all ABR custom rules\n * @return {array}\n */\n function getAbrCustomRules() {\n return customAbrRules;\n }\n\n /**\n * Adds a request interceptor. This enables application to monitor, manipulate, overwrite any request parameter and/or request data.\n * The provided callback function shall return a promise with updated request that shall be resolved once the process of the request is completed.\n * The interceptors are applied in the order they are added.\n * @param {function} interceptor - the request interceptor callback\n */\n function addRequestInterceptor(interceptor) {\n requestInterceptors.push(interceptor);\n }\n\n /**\n * Adds a response interceptor. This enables application to monitor, manipulate, overwrite the response data\n * The provided callback function shall return a promise with updated response that shall be resolved once the process of the response is completed.\n * The interceptors are applied in the order they are added.\n * @param {function} interceptor - the response interceptor callback\n */\n function addResponseInterceptor(interceptor) {\n responseInterceptors.push(interceptor);\n }\n\n /**\n * Unregisters a request interceptor.\n * @param {function} interceptor - the request interceptor callback\n */\n function removeRequestInterceptor(interceptor) {\n _unregisterFilter(requestInterceptors, interceptor);\n }\n\n /**\n * Unregisters a response interceptor.\n * @param {function} interceptor - the request interceptor callback\n */\n function removeResponseInterceptor(interceptor) {\n _unregisterFilter(responseInterceptors, interceptor);\n }\n\n /**\n * Returns all request interceptors\n * @return {array}\n */\n function getRequestInterceptors() {\n return requestInterceptors;\n }\n\n /**\n * Returns all response interceptors\n * @return {array}\n */\n function getResponseInterceptors() {\n return responseInterceptors;\n }\n\n /**\n * Add a UTC timing source at the top of the list\n * @param {string} schemeIdUri\n * @param {string} value\n */\n function addUTCTimingSource(schemeIdUri, value) {\n removeUTCTimingSource(schemeIdUri, value); //check if it already exists and remove if so.\n let vo = new UTCTiming();\n vo.schemeIdUri = schemeIdUri;\n vo.value = value;\n utcTimingSources.push(vo);\n }\n\n /**\n * Return all UTC timing sources\n * @return {array}\n */\n function getUTCTimingSources() {\n return utcTimingSources;\n }\n\n /**\n * Remove a specific timing source from the array\n * @param {string} schemeIdUri\n * @param {string} value\n */\n function removeUTCTimingSource(schemeIdUri, value) {\n checkParameterType(schemeIdUri, 'string');\n checkParameterType(value, 'string');\n utcTimingSources.forEach(function (obj, idx) {\n if (obj.schemeIdUri === schemeIdUri && obj.value === value) {\n utcTimingSources.splice(idx, 1);\n }\n });\n }\n\n /**\n * Remove all timing sources\n */\n function clearDefaultUTCTimingSources() {\n utcTimingSources = [];\n }\n\n /**\n * Add the default timing source to the list\n */\n function restoreDefaultUTCTimingSources() {\n let defaultUtcTimingSource = settings.get().streaming.utcSynchronization.defaultTimingSource;\n addUTCTimingSource(defaultUtcTimingSource.scheme, defaultUtcTimingSource.value);\n }\n\n function setXHRWithCredentialsForType(type, value) {\n if (!type) {\n Object.keys(xhrWithCredentials).forEach(key => {\n setXHRWithCredentialsForType(key, value);\n });\n } else {\n xhrWithCredentials[type] = !!value;\n }\n }\n\n function getXHRWithCredentialsForType(type) {\n const useCreds = xhrWithCredentials[type];\n\n return useCreds === undefined ? xhrWithCredentials.default : useCreds;\n }\n\n instance = {\n addAbrCustomRule,\n addRequestInterceptor,\n addResponseInterceptor,\n addUTCTimingSource,\n clearDefaultUTCTimingSources,\n getAbrCustomRules,\n getCustomCapabilitiesFilters,\n getCustomInitialTrackSelectionFunction,\n getLicenseRequestFilters,\n getLicenseResponseFilters,\n getRequestInterceptors,\n getResponseInterceptors,\n getUTCTimingSources,\n getXHRWithCredentialsForType,\n registerCustomCapabilitiesFilter,\n registerLicenseRequestFilter,\n registerLicenseResponseFilter,\n removeAbrCustomRule,\n removeAllAbrCustomRule,\n removeRequestInterceptor,\n removeResponseInterceptor,\n removeUTCTimingSource,\n reset,\n resetCustomInitialTrackSelectionFunction,\n restoreDefaultUTCTimingSources,\n setConfig,\n setCustomInitialTrackSelectionFunction,\n setXHRWithCredentialsForType,\n unregisterCustomCapabilitiesFilter,\n unregisterLicenseRequestFilter,\n unregisterLicenseResponseFilter,\n };\n\n setup();\n\n return instance;\n}\n\nCustomParametersModel.__dashjs_factory_name = 'CustomParametersModel';\nexport default FactoryMaker.getSingletonFactory(CustomParametersModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport DashConstants from '../../dash/constants/DashConstants.js';\nimport ProtectionConstants from '../constants/ProtectionConstants.js';\n\nconst LICENSE_SERVER_MANIFEST_CONFIGURATIONS = {\n prefixes: ['clearkey', 'dashif', 'ck']\n};\n\n/**\n * @class\n * @ignore\n */\nclass CommonEncryption {\n /**\n * Find and return the ContentProtection element in the given array\n * that indicates support for MP4 Common Encryption\n *\n * @param {Array} cpArray array of content protection elements\n * @returns {Object|null} the Common Encryption content protection element or\n * null if one was not found\n */\n static findMp4ProtectionElement(cpArray) {\n let retVal = null;\n for (let i = 0; i < cpArray.length; ++i) {\n let cp = cpArray[i];\n if (cp.schemeIdUri && cp.schemeIdUri.toLowerCase() === DashConstants.MP4_PROTECTION_SCHEME && cp.value &&\n (cp.value.toLowerCase() === ProtectionConstants.ENCRYPTION_SCHEME_CENC || cp.value.toLowerCase() === ProtectionConstants.ENCRYPTION_SCHEME_CBCS)) {\n retVal = cp;\n }\n }\n return retVal;\n }\n\n /**\n * Returns just the data portion of a single PSSH\n *\n * @param {ArrayBuffer} pssh - the PSSH\n * @return {ArrayBuffer} data portion of the PSSH\n */\n static getPSSHData(pssh) {\n let offset = 8; // Box size and type fields\n let view = new DataView(pssh);\n\n // Read version\n let version = view.getUint8(offset);\n\n offset += 20; // Version (1), flags (3), system ID (16)\n\n if (version > 0) {\n offset += 4 + (16 * view.getUint32(offset)); // Key ID count (4) and All key IDs (16*count)\n }\n\n offset += 4; // Data size\n return pssh.slice(offset);\n }\n\n /**\n * Returns the PSSH associated with the given key system from the concatenated\n * list of PSSH boxes in the given initData\n *\n * @param {KeySystem} keySystem the desired\n * key system\n * @param {ArrayBuffer} initData 'cenc' initialization data. Concatenated list of PSSH.\n * @returns {ArrayBuffer|null} The PSSH box data corresponding to the given key system, null if not found\n * or null if a valid association could not be found.\n */\n static getPSSHForKeySystem(keySystem, initData) {\n let psshList = CommonEncryption.parsePSSHList(initData);\n if (keySystem && psshList.hasOwnProperty(keySystem.uuid.toLowerCase())) {\n return psshList[keySystem.uuid.toLowerCase()];\n }\n return null;\n }\n\n /**\n * Parse a standard common encryption PSSH which contains a simple\n * base64-encoding of the init data\n *\n * @param {Object} cpData the ContentProtection element\n * @param {BASE64} BASE64 reference\n * @returns {ArrayBuffer|null} the init data or null if not found\n */\n static parseInitDataFromContentProtection(cpData, BASE64) {\n if ('pssh' in cpData && cpData.pssh) {\n\n // Remove whitespaces and newlines from pssh text\n cpData.pssh.__text = cpData.pssh.__text.replace(/\\r?\\n|\\r/g, '').replace(/\\s+/g, '');\n\n return BASE64.decodeArray(cpData.pssh.__text).buffer;\n }\n return null;\n }\n\n /**\n * Parses list of PSSH boxes into keysystem-specific PSSH data\n *\n * @param {ArrayBuffer} data - the concatenated list of PSSH boxes as provided by\n * CDM as initialization data when CommonEncryption content is detected\n * @returns {Object|Array} an object that has a property named according to each of\n * the detected key system UUIDs (e.g. 00000000-0000-0000-0000-0000000000)\n * and a ArrayBuffer (the entire PSSH box) as the property value\n */\n static parsePSSHList(data) {\n\n if (data === null || data === undefined) {\n return [];\n }\n\n let dv = new DataView(data.buffer || data); // data.buffer first for Uint8Array support\n let done = false;\n let pssh = {};\n\n // TODO: Need to check every data read for end of buffer\n let byteCursor = 0;\n while (!done) {\n\n let size,\n nextBox,\n version,\n systemID;\n let boxStart = byteCursor;\n\n if (byteCursor >= dv.buffer.byteLength) {\n break;\n }\n\n /* Box size */\n size = dv.getUint32(byteCursor);\n nextBox = byteCursor + size;\n byteCursor += 4;\n\n /* Verify PSSH */\n if (dv.getUint32(byteCursor) !== 0x70737368) {\n byteCursor = nextBox;\n continue;\n }\n byteCursor += 4;\n\n /* Version must be 0 or 1 */\n version = dv.getUint8(byteCursor);\n if (version !== 0 && version !== 1) {\n byteCursor = nextBox;\n continue;\n }\n byteCursor++;\n\n byteCursor += 3; /* skip flags */\n\n // 16-byte UUID/SystemID\n systemID = '';\n let i, val;\n for (i = 0; i < 4; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 4;\n systemID += '-';\n for (i = 0; i < 2; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 2;\n systemID += '-';\n for (i = 0; i < 2; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 2;\n systemID += '-';\n for (i = 0; i < 2; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 2;\n systemID += '-';\n for (i = 0; i < 6; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 6;\n\n systemID = systemID.toLowerCase();\n\n /* PSSH Data Size */\n byteCursor += 4;\n\n /* PSSH Data */\n pssh[systemID] = dv.buffer.slice(boxStart, nextBox);\n byteCursor = nextBox;\n }\n\n return pssh;\n }\n\n static getLicenseServerUrlFromMediaInfo(mediaInfoArr, schemeIdUri) {\n try {\n\n if (!mediaInfoArr || mediaInfoArr.length === 0) {\n return null;\n }\n\n let i = 0;\n let licenseServer = null;\n\n while (i < mediaInfoArr.length && !licenseServer) {\n const mediaInfo = mediaInfoArr[i];\n\n if (mediaInfo && mediaInfo.contentProtection && mediaInfo.contentProtection.length > 0) {\n const targetProtectionData = mediaInfo.contentProtection.filter((cp) => {\n return cp.schemeIdUri && cp.schemeIdUri === schemeIdUri;\n });\n\n if (targetProtectionData && targetProtectionData.length > 0) {\n let j = 0;\n while (j < targetProtectionData.length && !licenseServer) {\n const contentProtection = targetProtectionData[j];\n if (contentProtection.laUrl\n && contentProtection.laUrl.__prefix\n && LICENSE_SERVER_MANIFEST_CONFIGURATIONS.prefixes.includes(contentProtection.laUrl.__prefix)\n && contentProtection.laUrl.__text) {\n licenseServer = contentProtection.laUrl.__text;\n }\n j += 1;\n }\n }\n }\n i += 1;\n }\n return licenseServer;\n } catch (e) {\n return null;\n }\n }\n\n static hexKidToBufferSource(hexKid) {\n const cleanedHexKid = hexKid.replace(/-/g, '');\n\n const typedArray = new Uint8Array(cleanedHexKid.match(/[\\da-f]{2}/gi).map(function (h) {\n return parseInt(h, 16)\n }))\n\n return typedArray.buffer\n }\n}\n\nexport default CommonEncryption;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc A media capability\n * @ignore\n */\nclass MediaCapability {\n /**\n * @param {string} contentType MIME type and codecs (RFC6386)\n * @param {string} robustness\n * @class\n * @ignore\n */\n constructor(contentType, robustness) {\n this.contentType = contentType;\n this.robustness = robustness;\n }\n}\n\nexport default MediaCapability;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\n\n/**\n * @classdesc Represents a set of configurations that describe the capabilities desired for\n * support by a given CDM\n * @ignore\n */\nclass KeySystemConfiguration {\n /**\n * @param {Array.} audioCapabilities array of\n * desired audio capabilities. Higher preference capabilities should be placed earlier\n * in the array.\n * @param {Array.} videoCapabilities array of\n * desired video capabilities. Higher preference capabilities should be placed earlier\n * in the array.\n * @param {string} distinctiveIdentifier desired use of distinctive identifiers.\n * One of \"required\", \"optional\", or \"not-allowed\"\n * @param {string} persistentState desired support for persistent storage of\n * key systems. One of \"required\", \"optional\", or \"not-allowed\"\n * @param {Array.} sessionTypes List of session types that must\n * be supported by the key system\n * @class\n */\n constructor(audioCapabilities, videoCapabilities, distinctiveIdentifier, persistentState, sessionTypes, initDataTypes) {\n this.initDataTypes = initDataTypes && initDataTypes.length > 0 ? initDataTypes : [ProtectionConstants.INITIALIZATION_DATA_TYPE_CENC];\n if (audioCapabilities && audioCapabilities.length) {\n this.audioCapabilities = audioCapabilities;\n }\n if (videoCapabilities && videoCapabilities.length) {\n this.videoCapabilities = videoCapabilities;\n }\n this.distinctiveIdentifier = distinctiveIdentifier;\n this.persistentState = persistentState;\n this.sessionTypes = sessionTypes;\n }\n}\n\nexport default KeySystemConfiguration;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Defines a license request\n * @ignore\n */\nclass LicenseRequest {\n /**\n * Defines a license request\n *\n * @class\n */\n constructor(url, method, responseType, headers, withCredentials, messageType, sessionId, data) {\n\n /**\n * The license request url\n */\n this.url = url;\n\n /**\n * The HTTP method\n */\n this.method = method;\n\n /**\n * The HTTP response type\n */\n this.responseType = responseType;\n\n /**\n * The HTP request headers\n */\n this.headers = headers;\n\n /**\n * Wether request is done using credentials (cross-site cookies)\n */\n this.withCredentials = withCredentials;\n\n /**\n * The license request message type (see https://www.w3.org/TR/encrypted-media/#dom-mediakeymessagetype)\n */\n this.messageType = messageType;\n\n /**\n * The corresponding EME session ID\n */\n this.sessionId = sessionId;\n\n /**\n * The license request data\n */\n this.data = data;\n }\n}\n\nexport default LicenseRequest;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Defines a license response\n */\nclass LicenseResponse {\n /**\n * Defines a license response\n *\n * @class\n * @ignore\n */\n constructor(url, headers, data) {\n\n /**\n * The url that was loaded, that can be redirected from original request url\n */\n this.url = url;\n\n /**\n * The HTP response headers\n */\n this.headers = headers;\n\n /**\n * The license response data\n */\n this.data = data;\n }\n}\n\nexport default LicenseResponse;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport CommonEncryption from '../CommonEncryption.js';\nimport MediaCapability from '../vo/MediaCapability.js';\nimport KeySystemConfiguration from '../vo/KeySystemConfiguration.js';\nimport ProtectionErrors from '../errors/ProtectionErrors.js';\nimport DashJSError from '../../vo/DashJSError.js';\nimport LicenseRequest from '../vo/LicenseRequest.js';\nimport LicenseResponse from '../vo/LicenseResponse.js';\nimport {HTTPRequest} from '../../vo/metrics/HTTPRequest.js';\nimport Utils from '../../../core/Utils.js';\nimport Constants from '../../constants/Constants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\n\nconst NEEDKEY_BEFORE_INITIALIZE_RETRIES = 5;\nconst NEEDKEY_BEFORE_INITIALIZE_TIMEOUT = 500;\n\nconst LICENSE_SERVER_REQUEST_RETRIES = 3;\nconst LICENSE_SERVER_REQUEST_RETRY_INTERVAL = 1000;\nconst LICENSE_SERVER_REQUEST_DEFAULT_TIMEOUT = 8000;\n\n/**\n * @module ProtectionController\n * @description Provides access to media protection information and functionality. Each\n * ProtectionController manages a single {@link MediaPlayer.models.ProtectionModel}\n * which encapsulates a set of protection information (EME APIs, selected key system,\n * key sessions). The APIs of ProtectionController mostly align with the latest EME\n * APIs. Key system selection is mostly automated when combined with app-overrideable\n * functionality provided in {@link ProtectionKeyController}.\n * @todo ProtectionController does almost all of its tasks automatically after init() is\n * called. Applications might want more control over this process and want to go through\n * each step manually (key system selection, session creation, session maintenance).\n * This module can be accessed using the MediaPlayer API getProtectionController()\n * @param {Object} config\n */\n\nfunction ProtectionController(config) {\n\n config = config || {};\n const BASE64 = config.BASE64;\n const cmcdModel = config.cmcdModel;\n const constants = config.constants;\n const customParametersModel = config.customParametersModel;\n const debug = config.debug;\n const eventBus = config.eventBus;\n const events = config.events;\n const protectionKeyController = config.protectionKeyController;\n const settings = config.settings;\n let protectionModel = config.protectionModel;\n let needkeyRetries = [];\n\n let applicationProvidedProtectionData,\n instance,\n keyStatusMap,\n keySystemSelectionInProgress,\n licenseRequestRetryTimeout,\n licenseXhrRequest,\n logger,\n mediaInfoArr,\n pendingMediaTypesToHandle,\n robustnessLevel,\n selectedKeySystem,\n sessionType;\n\n function setup() {\n logger = debug.getLogger(instance);\n pendingMediaTypesToHandle = [];\n mediaInfoArr = [];\n sessionType = 'temporary';\n robustnessLevel = '';\n licenseXhrRequest = null;\n licenseRequestRetryTimeout = null;\n keyStatusMap = new Map();\n eventBus.on(events.INTERNAL_KEY_MESSAGE, _onKeyMessage, instance);\n }\n\n function _checkConfig() {\n if (!eventBus || !eventBus.hasOwnProperty('on') || !protectionKeyController || !protectionKeyController.hasOwnProperty('getSupportedKeySystemMetadataFromContentProtection')) {\n throw new Error('Missing config parameter(s)');\n }\n }\n\n /**\n * Initialize this protection system for a given media type.\n *\n * @param {StreamInfo} [mediaInfo] Media information\n * @memberof module:ProtectionController\n * @instance\n */\n function initializeForMedia(mediaInfo) {\n // Not checking here if a session for similar KS/KID combination is already created\n // because still don't know which keysystem will be selected.\n // Once Keysystem is selected and before creating the session, we will do that check\n // so we create the strictly necessary DRM sessions\n if (!mediaInfo) {\n throw new Error('mediaInfo can not be null or undefined');\n }\n\n _checkConfig();\n mediaInfoArr.push(mediaInfo);\n }\n\n /**\n * Once all mediaInfo objects have been added to our mediaInfoArray we can select a key system or check if the kid has changed and we need to trigger a new license request\n * @memberof module:ProtectionController\n * @instance\n */\n function handleKeySystemFromManifest() {\n if (!mediaInfoArr || mediaInfoArr.length === 0) {\n return;\n }\n\n let supportedKeySystemsMetadata = [];\n mediaInfoArr.forEach((mediaInfo) => {\n const keySystemsMetadata = protectionKeyController.getSupportedKeySystemMetadataFromContentProtection(mediaInfo.contentProtection, applicationProvidedProtectionData, sessionType);\n // We assume that the same key systems are signaled for each AS. We can use the first entry we find\n if (keySystemsMetadata.length > 0) {\n if (supportedKeySystemsMetadata.length === 0) {\n supportedKeySystemsMetadata = keySystemsMetadata;\n }\n // Save config for creating key session once we selected a key system\n pendingMediaTypesToHandle.push(keySystemsMetadata);\n }\n })\n\n if (supportedKeySystemsMetadata && supportedKeySystemsMetadata.length > 0) {\n _selectKeySystemOrUpdateKeySessions(supportedKeySystemsMetadata, true);\n }\n }\n\n /**\n * Selects a key system if we dont have any one yet. Otherwise we use the existing key system and trigger a new license request if the initdata has changed\n * @param {array} supportedKeySystemsMetadata\n * @private\n */\n function _handleKeySystemFromPssh(supportedKeySystemsMetadata) {\n pendingMediaTypesToHandle.push(supportedKeySystemsMetadata);\n _selectKeySystemOrUpdateKeySessions(supportedKeySystemsMetadata, false);\n }\n\n /**\n * Select the key system or update one of our existing key sessions\n * @param {array} supportedKeySystemsMetadata\n * @param {boolean} fromManifest\n * @private\n */\n function _selectKeySystemOrUpdateKeySessions(supportedKeySystemsMetadata, fromManifest) {\n // First time, so we need to select a key system\n if (!selectedKeySystem && !keySystemSelectionInProgress) {\n _selectInitialKeySystem(supportedKeySystemsMetadata, fromManifest);\n }\n\n // We already selected a key system. We only need to trigger a new license exchange if the init data has changed\n else if (selectedKeySystem) {\n _handlePendingMediaTypes();\n }\n }\n\n /**\n * We do not have a key system yet. Select one\n * @param {array} supportedKeySystemsMetadata\n * @param {boolean} fromManifest\n * @private\n */\n function _selectInitialKeySystem(supportedKeySystemsMetadata, fromManifest) {\n if (keySystemSelectionInProgress) {\n return\n }\n\n keySystemSelectionInProgress = true;\n\n // Reorder key systems according to priority order provided in protectionData\n supportedKeySystemsMetadata = _sortKeySystemsByPriority(supportedKeySystemsMetadata)\n\n // Add all key systems to our request list since we have yet to select a key system\n const keySystemConfigurationsToRequest = _getKeySystemConfigurations(supportedKeySystemsMetadata);\n\n let keySystemAccess;\n protectionModel.requestKeySystemAccess(keySystemConfigurationsToRequest)\n .then((event) => {\n keySystemAccess = event.data;\n return _onKeySystemAccessed(keySystemAccess);\n })\n .then((keySystem) => {\n _onMediaKeysCreated(keySystem, keySystemAccess);\n })\n .catch((event) => {\n _handleKeySystemSelectionError(event, fromManifest);\n })\n\n }\n\n function _onKeySystemAccessed(keySystemAccess) {\n let selectedSystemString = keySystemAccess && keySystemAccess.selectedSystemString ? keySystemAccess.selectedSystemString : keySystemAccess.keySystem.systemString;\n logger.info('DRM: KeySystem Access Granted for system string (' + selectedSystemString + ')! Selecting key system...');\n return protectionModel.selectKeySystem(keySystemAccess);\n }\n\n function _onMediaKeysCreated(keySystem, keySystemAccess) {\n selectedKeySystem = keySystem;\n keySystemSelectionInProgress = false;\n\n eventBus.trigger(events.KEY_SYSTEM_SELECTED, { data: keySystemAccess });\n\n // Set server certificate from protData\n const protData = _getProtDataForKeySystem(selectedKeySystem);\n if (protData && protData.serverCertificate && protData.serverCertificate.length > 0) {\n protectionModel.setServerCertificate(BASE64.decodeArray(protData.serverCertificate).buffer);\n }\n\n _handlePendingMediaTypes();\n }\n\n /**\n * If we have already selected a key system we only need to create a new key session and issue a new license request if the init data has changed.\n * @private\n */\n function _handlePendingMediaTypes() {\n // Create key sessions for the different AdaptationSets\n let ksIdx;\n for (let i = 0; i < pendingMediaTypesToHandle.length; i++) {\n for (ksIdx = 0; ksIdx < pendingMediaTypesToHandle[i].length; ksIdx++) {\n if (selectedKeySystem === pendingMediaTypesToHandle[i][ksIdx].ks) {\n const keySystemMetadata = pendingMediaTypesToHandle[i][ksIdx]\n _loadOrCreateKeySession(keySystemMetadata)\n break;\n }\n }\n }\n pendingMediaTypesToHandle = [];\n }\n\n function _handleKeySystemSelectionError(event, fromManifest) {\n selectedKeySystem = null;\n keySystemSelectionInProgress = false;\n if (!fromManifest) {\n eventBus.trigger(events.KEY_SYSTEM_SELECTED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SYSTEM_ACCESS_DENIED_ERROR_CODE, ProtectionErrors.KEY_SYSTEM_ACCESS_DENIED_ERROR_MESSAGE + 'Error selecting key system! -- ' + event.error)\n });\n }\n }\n\n function _sortKeySystemsByPriority(supportedKeySystems) {\n return supportedKeySystems.sort((ksA, ksB) => {\n let indexA = (applicationProvidedProtectionData && applicationProvidedProtectionData[ksA.ks.systemString] && applicationProvidedProtectionData[ksA.ks.systemString].priority >= 0) ? applicationProvidedProtectionData[ksA.ks.systemString].priority : supportedKeySystems.length;\n let indexB = (applicationProvidedProtectionData && applicationProvidedProtectionData[ksB.ks.systemString] && applicationProvidedProtectionData[ksB.ks.systemString].priority >= 0) ? applicationProvidedProtectionData[ksB.ks.systemString].priority : supportedKeySystems.length;\n return indexA - indexB;\n });\n }\n\n function _getKeySystemConfigurations(supportedKeySystemsMetadata) {\n const keySystemConfigurationsToRequest = [];\n for (let i = 0; i < supportedKeySystemsMetadata.length; i++) {\n const keySystemConfiguration = _getKeySystemConfiguration(supportedKeySystemsMetadata[i]);\n keySystemConfigurationsToRequest.push({\n ks: supportedKeySystemsMetadata[i].ks,\n configs: [keySystemConfiguration],\n protData: supportedKeySystemsMetadata[i].protData\n });\n }\n\n return keySystemConfigurationsToRequest;\n }\n\n /**\n * Returns an object corresponding to the EME MediaKeySystemConfiguration dictionary\n * @param {object} keySystem\n * @return {KeySystemConfiguration}\n * @private\n */\n function _getKeySystemConfiguration(keySystemData) {\n const protData = keySystemData.protData;\n const audioCapabilities = [];\n const videoCapabilities = [];\n const initDataTypes = (protData && protData.initDataTypes && protData.initDataTypes.length > 0) ? protData.initDataTypes : [ProtectionConstants.INITIALIZATION_DATA_TYPE_CENC];\n const audioRobustness = (protData && protData.audioRobustness && protData.audioRobustness.length > 0) ? protData.audioRobustness : robustnessLevel;\n const videoRobustness = (protData && protData.videoRobustness && protData.videoRobustness.length > 0) ? protData.videoRobustness : robustnessLevel;\n const ksSessionType = keySystemData.sessionType;\n const distinctiveIdentifier = (protData && protData.distinctiveIdentifier) ? protData.distinctiveIdentifier : 'optional';\n const persistentState = (protData && protData.persistentState) ? protData.persistentState : (ksSessionType === 'temporary') ? 'optional' : 'required';\n\n mediaInfoArr.forEach((media) => {\n if (media.type === constants.AUDIO) {\n audioCapabilities.push(new MediaCapability(media.codec, audioRobustness));\n } else if (media.type === constants.VIDEO) {\n videoCapabilities.push(new MediaCapability(media.codec, videoRobustness));\n }\n });\n\n return new KeySystemConfiguration(audioCapabilities, videoCapabilities, distinctiveIdentifier, persistentState, [ksSessionType], initDataTypes);\n }\n\n /**\n * Loads an existing key session if we already have a session id. Otherwise we create a new key session\n * @param {object} keySystemMetadata\n * @private\n */\n function _loadOrCreateKeySession(keySystemMetadata) {\n if (protectionKeyController.isClearKey(selectedKeySystem)) {\n _handleClearkeySession(keySystemMetadata)\n }\n\n // Reuse existing KeySession\n if (keySystemMetadata.sessionId) {\n // Load MediaKeySession with sessionId\n loadKeySession(keySystemMetadata);\n }\n\n // Create a new KeySession\n else if (keySystemMetadata.initData !== null) {\n // Create new MediaKeySession with initData\n createKeySession(keySystemMetadata);\n }\n }\n\n function _handleClearkeySession(keySystemMetadata) {\n // For Clearkey: if parameters for generating init data was provided by the user, use them for generating\n // initData and overwrite possible initData indicated in encrypted event (EME)\n if (keySystemMetadata.protData && keySystemMetadata.protData.hasOwnProperty('clearkeys') && Object.keys(keySystemMetadata.protData.clearkeys).length !== 0) {\n const initData = { kids: Object.keys(keySystemMetadata.protData.clearkeys) };\n keySystemMetadata.initData = new TextEncoder().encode(JSON.stringify(initData));\n }\n }\n\n /**\n * Loads a key session with the given session ID from persistent storage. This essentially creates a new key session\n *\n * @param {object} ksInfo\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionCreated\n * @ignore\n */\n function loadKeySession(keySystemMetadata) {\n _checkConfig();\n protectionModel.loadKeySession(keySystemMetadata);\n }\n\n /**\n * Create a new key session associated with the given initialization data from the MPD or from the PSSH box in the media\n * For the latest version of the EME a request is generated. Once this request is ready we get notified via the INTERNAL_KEY_MESSAGE event\n * @param {ArrayBuffer} initData the initialization data\n * @param {Uint8Array} cdmData the custom data to provide to licenser\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionCreated\n * @ignore\n */\n function createKeySession(keySystemMetadata) {\n\n // Check for duplicate key id\n if (keySystemMetadata && _doesSessionForKeyIdExists(keySystemMetadata.keyId)) {\n return;\n }\n\n const initDataForKS = CommonEncryption.getPSSHForKeySystem(selectedKeySystem, keySystemMetadata ? keySystemMetadata.initData : null);\n if (initDataForKS) {\n\n // Check for duplicate initData\n if (_isInitDataDuplicate(initDataForKS)) {\n return;\n }\n\n try {\n keySystemMetadata.initData = initDataForKS;\n protectionModel.createKeySession(keySystemMetadata);\n } catch (error) {\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + error.message)\n });\n }\n } else if (keySystemMetadata && keySystemMetadata.initData) {\n protectionModel.createKeySession(keySystemMetadata);\n } else {\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Selected key system is ' + (selectedKeySystem ? selectedKeySystem.systemString : null) + '. needkey/encrypted event contains no initData corresponding to that key system!')\n });\n }\n }\n\n /**\n * Returns the protectionData for a specific keysystem as specified by the application.\n * @param {object} keySystem\n * @return {object | null}\n * @private\n */\n function _getProtDataForKeySystem(keySystem) {\n if (keySystem) {\n const keySystemString = keySystem.systemString;\n\n if (applicationProvidedProtectionData) {\n return (keySystemString in applicationProvidedProtectionData) ? applicationProvidedProtectionData[keySystemString] : null;\n }\n }\n return null;\n }\n\n /**\n * Removes all entries from the mediaInfoArr\n */\n function clearMediaInfoArray() {\n mediaInfoArr = [];\n }\n\n /**\n * Returns a set of supported key systems and CENC initialization data\n * from the given array of ContentProtection elements. Only\n * key systems that are supported by this player will be returned.\n * Key systems are returned in priority order (highest first).\n *\n * @param {Array.} cps - array of content protection elements parsed\n * from the manifest\n * @returns {Array.} array of objects indicating which supported key\n * systems were found. Empty array is returned if no\n * supported key systems were found\n * @memberof module:ProtectionKeyController\n * @instance\n * @ignore\n */\n function getSupportedKeySystemMetadataFromContentProtection(cps) {\n _checkConfig();\n return protectionKeyController.getSupportedKeySystemMetadataFromContentProtection(cps, applicationProvidedProtectionData, sessionType);\n }\n\n /**\n * Checks if a session has already created for the provided key id\n * @param {string} keyId\n * @return {boolean}\n * @private\n */\n function _doesSessionForKeyIdExists(keyId) {\n if (!keyId) {\n return false;\n }\n\n try {\n const sessions = protectionModel.getSessionTokens();\n for (let i = 0; i < sessions.length; i++) {\n if (sessions[i].getKeyId() === keyId) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Checks if the provided init data is equal to one of the existing init data values\n * @param {any} initDataForKS\n * @return {boolean}\n * @private\n */\n function _isInitDataDuplicate(initDataForKS) {\n\n if (!initDataForKS) {\n return false;\n }\n\n try {\n const currentInitData = protectionModel.getAllInitData();\n for (let i = 0; i < currentInitData.length; i++) {\n if (protectionKeyController.initDataEquals(initDataForKS, currentInitData[i])) {\n logger.debug('DRM: Ignoring initData because we have already seen it!');\n return true;\n }\n }\n\n return false;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Removes the given key session from persistent storage and closes the session\n * as if {@link ProtectionController#closeKeySession}\n * was called\n *\n * @param {SessionToken} sessionToken the session\n * token\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionRemoved\n * @fires ProtectionController#KeySessionClosed\n * @ignore\n */\n function removeKeySession(sessionToken) {\n _checkConfig();\n protectionModel.removeKeySession(sessionToken);\n }\n\n /**\n * Closes the key session and releases all associated decryption keys. These\n * keys will no longer be available for decrypting media\n *\n * @param {SessionToken} sessionToken the session\n * token\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionClosed\n * @ignore\n */\n function closeKeySession(sessionToken) {\n _checkConfig();\n protectionModel.closeKeySession(sessionToken);\n }\n\n /**\n * Sets a server certificate for use by the CDM when signing key messages\n * intended for a particular license server. This will fire\n * an error event if a key system has not yet been selected.\n *\n * @param {ArrayBuffer} serverCertificate a CDM-specific license server\n * certificate\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#ServerCertificateUpdated\n */\n function setServerCertificate(serverCertificate) {\n _checkConfig();\n protectionModel.setServerCertificate(serverCertificate);\n }\n\n /**\n * Associate this protection system with the given HTMLMediaElement. This\n * causes the system to register for needkey/encrypted events from the given\n * element and provides a destination for setting of MediaKeys\n *\n * @param {HTMLMediaElement} element the media element to which the protection\n * system should be associated\n * @memberof module:ProtectionController\n * @instance\n */\n function setMediaElement(element) {\n _checkConfig();\n if (element) {\n protectionModel.setMediaElement(element);\n eventBus.on(events.NEED_KEY, _onNeedKey, instance);\n } else if (element === null) {\n protectionModel.setMediaElement(element);\n eventBus.off(events.NEED_KEY, _onNeedKey, instance);\n }\n }\n\n /**\n * Sets the session type to use when creating key sessions. Either \"temporary\" or\n * \"persistent-license\". Default is \"temporary\".\n *\n * @param {string} value the session type\n * @memberof module:ProtectionController\n * @instance\n */\n function setSessionType(value) {\n sessionType = value;\n }\n\n /**\n * Sets the robustness level for video and audio capabilities. Optional to remove Chrome warnings.\n * Possible values are SW_SECURE_CRYPTO, SW_SECURE_DECODE, HW_SECURE_CRYPTO, HW_SECURE_CRYPTO, HW_SECURE_DECODE, HW_SECURE_ALL.\n *\n * @param {string} level the robustness level\n * @memberof module:ProtectionController\n * @instance\n */\n function setRobustnessLevel(level) {\n robustnessLevel = level;\n }\n\n /**\n * Attach KeySystem-specific data to use for license acquisition with EME\n *\n * @param {Object} data an object containing property names corresponding to\n * key system name strings (e.g. \"org.w3.clearkey\") and associated values\n * being instances of {@link ProtectionData}\n * @memberof module:ProtectionController\n * @instance\n * @ignore\n */\n function setProtectionData(data) {\n applicationProvidedProtectionData = data;\n protectionKeyController.setProtectionData(data);\n }\n\n /**\n * Stop method is called when current playback is stopped/resetted.\n *\n * @memberof module:ProtectionController\n * @instance\n */\n function stop() {\n _abortLicenseRequest();\n if (protectionModel) {\n protectionModel.stop();\n }\n }\n\n /**\n * Destroys all protection data associated with this protection set. This includes\n * deleting all key sessions. In the case of persistent key sessions, the sessions\n * will simply be unloaded and not deleted. Additionally, if this protection set is\n * associated with a HTMLMediaElement, it will be detached from that element.\n *\n * @memberof module:ProtectionController\n * @instance\n * @ignore\n */\n function reset() {\n eventBus.off(events.INTERNAL_KEY_MESSAGE, _onKeyMessage, instance);\n\n _checkConfig();\n\n _abortLicenseRequest();\n\n setMediaElement(null);\n\n selectedKeySystem = null;\n keySystemSelectionInProgress = false;\n\n keyStatusMap = new Map();\n\n if (protectionModel) {\n protectionModel.reset();\n protectionModel = null;\n }\n\n needkeyRetries.forEach(retryTimeout => clearTimeout(retryTimeout));\n needkeyRetries = [];\n\n mediaInfoArr = [];\n pendingMediaTypesToHandle = [];\n }\n\n /**\n * Event handler for the key message event. Once we have a key message we can issue a license request\n * @param {object} e\n * @private\n */\n function _onKeyMessage(e) {\n logger.debug('DRM: onKeyMessage');\n\n // Dispatch event to applications indicating we received a key message\n const keyMessage = e.data;\n eventBus.trigger(events.KEY_MESSAGE, { data: keyMessage });\n const messageType = (keyMessage.messageType) ? keyMessage.messageType : ProtectionConstants.MEDIA_KEY_MESSAGE_TYPES.LICENSE_REQUEST;\n const message = keyMessage.message;\n const sessionToken = keyMessage.sessionToken;\n const protData = _getProtDataForKeySystem(selectedKeySystem);\n const licenseServerModelInstance = protectionKeyController.getLicenseServerModelInstance(selectedKeySystem, protData, messageType);\n const eventData = { sessionToken: sessionToken, messageType: messageType };\n\n // Ensure message from CDM is not empty\n if (!message || message.byteLength === 0) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_CODE, ProtectionErrors.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_MESSAGE));\n return;\n }\n\n // Message not destined for license server\n if (!licenseServerModelInstance) {\n logger.debug('DRM: License server request not required for this message (type = ' + e.data.messageType + '). Session ID = ' + sessionToken.getSessionId());\n _sendLicenseRequestCompleteEvent(eventData);\n return;\n }\n\n // Perform any special handling for ClearKey\n if (protectionKeyController.isClearKey(selectedKeySystem)) {\n const clearkeys = protectionKeyController.processClearKeyLicenseRequest(selectedKeySystem, protData, message);\n if (clearkeys && clearkeys.keyPairs && clearkeys.keyPairs.length > 0) {\n logger.debug('DRM: ClearKey license request handled by application!');\n _sendLicenseRequestCompleteEvent(eventData);\n protectionModel.updateKeySession(sessionToken, clearkeys);\n return;\n }\n }\n\n // In all other cases we have to make a license request\n _issueLicenseRequest(keyMessage, licenseServerModelInstance, protData);\n }\n\n /**\n * Notify other classes that the license request was completed\n * @param {object} data\n * @param {object} error\n * @private\n */\n function _sendLicenseRequestCompleteEvent(data, error = null) {\n eventBus.trigger(events.LICENSE_REQUEST_COMPLETE, { data: data, error: error });\n }\n\n /**\n * Start issuing a license request\n * @param {object} keyMessage\n * @param {object} licenseServerData\n * @param {object} protData\n * @private\n */\n function _issueLicenseRequest(keyMessage, licenseServerData, protData) {\n const sessionToken = keyMessage.sessionToken;\n const messageType = (keyMessage.messageType) ? keyMessage.messageType : ProtectionConstants.MEDIA_KEY_MESSAGE_TYPES.LICENSE_REQUEST;\n const eventData = { sessionToken: sessionToken, messageType: messageType };\n const keySystemString = selectedKeySystem ? selectedKeySystem.systemString : null;\n\n // Determine license server URL\n let url = _getLicenseServerUrl(protData, messageType, sessionToken, keyMessage, licenseServerData);\n\n // Ensure valid license server URL\n if (!url) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_CODE, ProtectionErrors.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_MESSAGE));\n return;\n }\n\n // Set optional XMLHttpRequest headers from protection data and message\n const reqHeaders = {};\n let withCredentials = false;\n if (protData) {\n _updateHeaders(reqHeaders, protData.httpRequestHeaders);\n }\n const message = keyMessage.message;\n const headersFromMessage = selectedKeySystem.getRequestHeadersFromMessage(message);\n _updateHeaders(reqHeaders, headersFromMessage);\n\n Object.keys(reqHeaders).forEach((key) => {\n if ('authorization' === key.toLowerCase()) {\n withCredentials = true;\n }\n });\n\n // Overwrite withCredentials property from protData if present\n if (protData && typeof protData.withCredentials == 'boolean') {\n withCredentials = protData.withCredentials;\n }\n\n const onLoad = function (xhr) {\n if (!protectionModel) {\n return;\n }\n\n if (xhr.status >= 200 && xhr.status <= 299) {\n const responseHeaders = Utils.parseHttpHeaders(xhr.getAllResponseHeaders ? xhr.getAllResponseHeaders() : null);\n let licenseResponse = new LicenseResponse(xhr.responseURL, responseHeaders, xhr.response);\n const licenseResponseFilters = customParametersModel.getLicenseResponseFilters();\n _applyFilters(licenseResponseFilters, licenseResponse)\n .then(() => {\n const licenseMessage = licenseServerData.getLicenseMessage(licenseResponse.data, keySystemString, messageType);\n if (licenseMessage !== null) {\n _sendLicenseRequestCompleteEvent(eventData);\n protectionModel.updateKeySession(sessionToken, licenseMessage);\n } else {\n _reportError(xhr, eventData, keySystemString, messageType, licenseServerData);\n }\n });\n } else {\n _reportError(xhr, eventData, keySystemString, messageType, licenseServerData);\n }\n };\n\n const onAbort = function (xhr) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE,\n ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE + keySystemString + ' update, XHR aborted. status is \"' +\n xhr.statusText + '\" (' + xhr.status + '), readyState is ' + xhr.readyState));\n };\n\n const onError = function (xhr) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE,\n ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE + keySystemString + ' update, XHR error. status is \"' +\n xhr.statusText + '\" (' + xhr.status + '), readyState is ' + xhr.readyState));\n };\n\n const reqPayload = selectedKeySystem.getLicenseRequestFromMessage(message);\n const reqMethod = licenseServerData.getHTTPMethod(messageType);\n const responseType = licenseServerData.getResponseType(keySystemString, messageType);\n const timeout = protData && !isNaN(protData.httpTimeout) ? protData.httpTimeout : LICENSE_SERVER_REQUEST_DEFAULT_TIMEOUT;\n const sessionId = sessionToken.getSessionId() || null;\n\n let licenseRequest = new LicenseRequest(url, reqMethod, responseType, reqHeaders, withCredentials, messageType, sessionId, reqPayload);\n const retryAttempts = !isNaN(settings.get().streaming.retryAttempts[HTTPRequest.LICENSE]) ? settings.get().streaming.retryAttempts[HTTPRequest.LICENSE] : LICENSE_SERVER_REQUEST_RETRIES;\n const licenseRequestFilters = customParametersModel.getLicenseRequestFilters();\n _applyFilters(licenseRequestFilters, licenseRequest)\n .then(() => {\n _doLicenseRequest(licenseRequest, retryAttempts, timeout, onLoad, onAbort, onError);\n });\n }\n\n /**\n * Implement license requests with a retry mechanism to avoid temporary network issues to affect playback experience\n * @param {object} request\n * @param {number} retriesCount\n * @param {number} timeout\n * @param {function} onLoad\n * @param {function} onAbort\n * @param {function} onError\n * @private\n */\n function _doLicenseRequest(request, retriesCount, timeout, onLoad, onAbort, onError) {\n const xhr = new XMLHttpRequest();\n const cmcdParameters = cmcdModel.getCmcdParametersFromManifest();\n\n if (cmcdModel.isCmcdEnabled()) {\n const cmcdMode = cmcdParameters.mode ? cmcdParameters.mode : settings.get().streaming.cmcd.mode;\n if (cmcdMode === Constants.CMCD_MODE_QUERY) {\n const cmcdParams = cmcdModel.getQueryParameter({\n url: request.url,\n type: HTTPRequest.LICENSE\n });\n\n if (cmcdParams) {\n request.url = Utils.addAdditionalQueryParameterToUrl(request.url, [cmcdParams]);\n }\n }\n }\n\n xhr.open(request.method, request.url, true);\n xhr.responseType = request.responseType;\n xhr.withCredentials = request.withCredentials;\n if (timeout > 0) {\n xhr.timeout = timeout;\n }\n for (const key in request.headers) {\n xhr.setRequestHeader(key, request.headers[key]);\n }\n\n if (cmcdModel.isCmcdEnabled()) {\n const cmcdMode = cmcdParameters.mode ? cmcdParameters.mode : settings.get().streaming.cmcd.mode;\n if (cmcdMode === Constants.CMCD_MODE_HEADER) {\n const cmcdHeaders = cmcdModel.getHeaderParameters({\n url: request.url,\n type: HTTPRequest.LICENSE\n });\n\n if (cmcdHeaders) {\n for (const header in cmcdHeaders) {\n let value = cmcdHeaders[header];\n if (value) {\n xhr.setRequestHeader(header, value);\n }\n }\n }\n }\n }\n\n const _retryRequest = function () {\n // fail silently and retry\n retriesCount--;\n const retryInterval = !isNaN(settings.get().streaming.retryIntervals[HTTPRequest.LICENSE]) ? settings.get().streaming.retryIntervals[HTTPRequest.LICENSE] : LICENSE_SERVER_REQUEST_RETRY_INTERVAL;\n licenseRequestRetryTimeout = setTimeout(function () {\n _doLicenseRequest(request, retriesCount, timeout, onLoad, onAbort, onError);\n }, retryInterval);\n };\n\n xhr.onload = function () {\n licenseXhrRequest = null;\n if (this.status >= 200 && this.status <= 299 || retriesCount <= 0) {\n onLoad(this);\n } else {\n logger.warn('License request failed (' + this.status + '). Retrying it... Pending retries: ' + retriesCount);\n _retryRequest();\n }\n };\n\n xhr.ontimeout = xhr.onerror = function () {\n licenseXhrRequest = null;\n if (retriesCount <= 0) {\n onError(this);\n } else {\n logger.warn('License request network request failed . Retrying it... Pending retries: ' + retriesCount);\n _retryRequest();\n }\n };\n\n xhr.onabort = function () {\n onAbort(this);\n };\n\n // deprecated, to be removed\n eventBus.trigger(events.LICENSE_REQUEST_SENDING, {\n url: request.url,\n headers: request.headers,\n payload: request.data,\n sessionId: request.sessionId\n });\n\n licenseXhrRequest = xhr;\n xhr.send(request.data);\n }\n\n /**\n * Aborts license request\n * @private\n */\n function _abortLicenseRequest() {\n if (licenseXhrRequest) {\n licenseXhrRequest.onloadend = licenseXhrRequest.onerror = licenseXhrRequest.onprogress = undefined; //Ignore events from aborted requests.\n licenseXhrRequest.abort();\n licenseXhrRequest = null;\n }\n\n if (licenseRequestRetryTimeout) {\n clearTimeout(licenseRequestRetryTimeout);\n licenseRequestRetryTimeout = null;\n }\n }\n\n /**\n * Returns the url of the license server\n * @param {object} protData\n * @param {string} messageType\n * @param {object} sessionToken\n * @param {object} keyMessage\n * @param {object} licenseServerData\n * @return {*}\n * @private\n */\n function _getLicenseServerUrl(protData, messageType, sessionToken, keyMessage, licenseServerData) {\n let url = null;\n const message = keyMessage.message;\n\n // Check if the url is defined by the application\n if (protData && protData.serverURL) {\n const serverURL = protData.serverURL;\n if (typeof serverURL === 'string' && serverURL !== '') {\n url = serverURL;\n } else if (typeof serverURL === 'object' && serverURL.hasOwnProperty(messageType)) {\n url = serverURL[messageType];\n }\n }\n\n // This is the old way of providing the url\n else if (protData && protData.laURL && protData.laURL !== '') {\n url = protData.laURL;\n }\n\n // No url provided by the app. Check the manifest and the pssh\n else {\n // Check for url defined in the manifest\n url = CommonEncryption.getLicenseServerUrlFromMediaInfo(mediaInfoArr, selectedKeySystem.schemeIdURI);\n\n // In case we are not using Clearky we can still get a url from the pssh.\n if (!url && !protectionKeyController.isClearKey(selectedKeySystem)) {\n const psshData = CommonEncryption.getPSSHData(sessionToken.initData);\n url = selectedKeySystem.getLicenseServerURLFromInitData(psshData);\n\n // Still no url, check the keymessage\n if (!url) {\n url = keyMessage.laURL;\n }\n }\n }\n // Possibly update or override the URL based on the message\n url = licenseServerData.getServerURLFromMessage(url, message, messageType);\n\n return url;\n }\n\n /**\n * Add new headers to the existing ones\n * @param {array} reqHeaders\n * @param {object} headers\n * @private\n */\n function _updateHeaders(reqHeaders, headers) {\n if (headers) {\n for (const key in headers) {\n reqHeaders[key] = headers[key];\n }\n }\n }\n\n /**\n * Reports an error that might have occured during the license request\n * @param {object} xhr\n * @param {object} eventData\n * @param {string} keySystemString\n * @param {string} messageType\n * @param {object} licenseServerData\n * @private\n */\n function _reportError(xhr, eventData, keySystemString, messageType, licenseServerData) {\n let errorMsg = 'NONE';\n let data = null;\n\n if (xhr.response) {\n errorMsg = licenseServerData.getErrorResponse(xhr.response, keySystemString, messageType);\n data = {\n serverResponse: xhr.response || null,\n responseCode: xhr.status || null,\n responseText: xhr.statusText || null\n }\n }\n\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE,\n ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE + keySystemString + ' update, XHR complete. status is \"' +\n xhr.statusText + '\" (' + xhr.status + '), readyState is ' + xhr.readyState + '. Response is ' + errorMsg,\n data\n ));\n }\n\n /**\n * Applies custom filters defined by the application\n * @param {array} filters\n * @param {object} param\n * @return {Promise|*}\n * @private\n */\n function _applyFilters(filters, param) {\n if (!filters) {\n return Promise.resolve();\n }\n return filters.reduce((prev, next) => {\n return prev.then(() => {\n return next(param);\n });\n }, Promise.resolve());\n }\n\n /**\n * Event handler for \"needkey\" and \"encrypted\" events\n * @param {object} event\n * @param {number} retry\n * @private\n */\n function _onNeedKey(event, retry) {\n if (!settings.get().streaming.protection.ignoreEmeEncryptedEvent) {\n logger.debug('DRM: onNeedKey');\n\n // Ignore non-cenc initData\n if (event.key.initDataType !== ProtectionConstants.INITIALIZATION_DATA_TYPE_CENC) {\n logger.warn('DRM: Only \\'cenc\\' initData is supported! Ignoring initData of type: ' + event.key.initDataType);\n return;\n }\n\n if (mediaInfoArr.length === 0) {\n logger.warn('DRM: onNeedKey called before initializeForMedia, wait until initialized');\n retry = typeof retry === 'undefined' ? 1 : retry + 1;\n if (retry < NEEDKEY_BEFORE_INITIALIZE_RETRIES) {\n needkeyRetries.push(setTimeout(() => {\n _onNeedKey(event, retry);\n }, NEEDKEY_BEFORE_INITIALIZE_TIMEOUT));\n return;\n }\n }\n\n // Some browsers return initData as Uint8Array (IE), some as ArrayBuffer (Chrome).\n // Convert to ArrayBuffer\n let abInitData = event.key.initData;\n if (ArrayBuffer.isView(abInitData)) {\n abInitData = abInitData.buffer;\n }\n\n // If key system has already been selected and initData already seen, then do nothing\n if (selectedKeySystem) {\n const initDataForKS = CommonEncryption.getPSSHForKeySystem(selectedKeySystem, abInitData);\n if (initDataForKS) {\n // Check for duplicate initData\n if (_isInitDataDuplicate(initDataForKS)) {\n return;\n }\n }\n }\n\n logger.debug('DRM: initData:', String.fromCharCode.apply(null, new Uint8Array(abInitData)));\n\n const supportedKs = protectionKeyController.getSupportedKeySystemsFromSegmentPssh(abInitData, applicationProvidedProtectionData, sessionType);\n if (supportedKs.length === 0) {\n logger.debug('DRM: Received needkey event with initData, but we don\\'t support any of the key systems!');\n return;\n }\n\n _handleKeySystemFromPssh(supportedKs);\n }\n }\n\n /**\n * Returns all available key systems\n * @return {array}\n */\n function getKeySystems() {\n return protectionKeyController ? protectionKeyController.getKeySystems() : [];\n }\n\n /**\n * Sets all available key systems\n * @param {array} keySystems\n */\n function setKeySystems(keySystems) {\n if (protectionKeyController) {\n protectionKeyController.setKeySystems(keySystems);\n }\n }\n\n function updateKeyStatusesMap(e) {\n try {\n if (!e || !e.sessionToken || !e.parsedKeyStatuses) {\n return\n }\n\n e.sessionToken.hasTriggeredKeyStatusMapUpdate = true;\n const parsedKeyStatuses = e.parsedKeyStatuses;\n const ua = Utils.parseUserAgent();\n const isEdgeBrowser = ua && ua.browser && ua.browser.name && ua.browser.name.toLowerCase() === 'edge';\n parsedKeyStatuses.forEach((keyStatus) => {\n if (isEdgeBrowser\n && selectedKeySystem.uuid === ProtectionConstants.PLAYREADY_UUID\n && keyStatus.keyId && keyStatus.keyId.byteLength === 16) {\n _handlePlayreadyKeyId(keyStatus.keyId);\n }\n\n const keyIdInHex = Utils.bufferSourceToHex(keyStatus.keyId).slice(0, 32);\n if (keyIdInHex && keyIdInHex !== '') {\n keyStatusMap.set(keyIdInHex, keyStatus.status);\n }\n })\n eventBus.trigger(events.KEY_STATUSES_MAP_UPDATED, { keyStatusMap });\n } catch (e) {\n logger.error(e);\n }\n }\n\n function _handlePlayreadyKeyId(keyId) {\n const dataView = Utils.bufferSourceToDataView(keyId);\n const part0 = dataView.getUint32(0, /* LE= */ true);\n const part1 = dataView.getUint16(4, /* LE= */ true);\n const part2 = dataView.getUint16(6, /* LE= */ true);\n // Write it back in big-endian:\n dataView.setUint32(0, part0, /* BE= */ false);\n dataView.setUint16(4, part1, /* BE= */ false);\n dataView.setUint16(6, part2, /* BE= */ false);\n }\n\n function areKeyIdsUsable(normalizedKeyIds) {\n try {\n if (!_shouldCheckKeyStatusMap(normalizedKeyIds)) {\n return true;\n }\n\n return [...normalizedKeyIds].some((normalizedKeyId) => {\n const keyStatus = keyStatusMap.get(normalizedKeyId);\n return keyStatus && keyStatus !== ProtectionConstants.MEDIA_KEY_STATUSES.INTERNAL_ERROR && keyStatus !== ProtectionConstants.MEDIA_KEY_STATUSES.OUTPUT_RESTRICTED;\n });\n } catch (error) {\n logger.error(error);\n return true\n }\n }\n\n function areKeyIdsExpired(normalizedKeyIds) {\n try {\n if (!_shouldCheckKeyStatusMap(normalizedKeyIds)) {\n return false;\n }\n\n return [...normalizedKeyIds].every((normalizedKeyId) => {\n const keyStatus = keyStatusMap.get(normalizedKeyId);\n return keyStatus === ProtectionConstants.MEDIA_KEY_STATUSES.EXPIRED;\n })\n } catch (error) {\n logger.error(error);\n return false\n }\n }\n\n function _shouldCheckKeyStatusMap(normalizedKeyIds) {\n const sessionTokens = protectionModel.getSessionTokens();\n\n if (sessionTokens && sessionTokens.length > 0) {\n const targetSessionTokens = sessionTokens.filter((sessionToken) => {\n return [...normalizedKeyIds].includes(sessionToken.normalizedKeyId);\n })\n const hasNotTriggeredKeyStatusMapUpdate = targetSessionTokens.some((sessionToken) => {\n return !sessionToken.hasTriggeredKeyStatusMapUpdate;\n })\n if (hasNotTriggeredKeyStatusMapUpdate || targetSessionTokens.length === 0) {\n return false;\n }\n }\n return !settings.get().streaming.protection.ignoreKeyStatuses && normalizedKeyIds && normalizedKeyIds.size > 0 && keyStatusMap && keyStatusMap.size > 0\n }\n\n instance = {\n areKeyIdsExpired,\n areKeyIdsUsable,\n clearMediaInfoArray,\n closeKeySession,\n createKeySession,\n getKeySystems,\n getSupportedKeySystemMetadataFromContentProtection,\n handleKeySystemFromManifest,\n initializeForMedia,\n loadKeySession,\n removeKeySession,\n reset,\n setKeySystems,\n setMediaElement,\n setProtectionData,\n setRobustnessLevel,\n setServerCertificate,\n setSessionType,\n stop,\n updateKeyStatusesMap\n };\n\n setup();\n return instance;\n}\n\nProtectionController.__dashjs_factory_name = 'ProtectionController';\nexport default FactoryMaker.getClassFactory(ProtectionController);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Represents a 128-bit keyID and 128-bit encryption key\n * @ignore\n */\nclass KeyPair {\n /**\n * @param {string} keyID 128-bit key ID, base64 encoded, with no padding\n * @param {string} key 128-bit encryption key, base64 encoded, with no padding\n * @class\n * @ignore\n */\n constructor(keyID, key) {\n this.keyID = keyID;\n this.key = key;\n }\n}\n\nexport default KeyPair;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @classdesc A collection of ClearKey encryption keys with an (optional) associated\n * type\n * @ignore\n */\nclass ClearKeyKeySet {\n /**\n * @param {Array.} keyPairs\n * @param {string} type the type of keys in this set. One of either 'persistent'\n * or 'temporary'. Can also be null or undefined.\n * @class\n * @ignore\n */\n constructor(keyPairs, type) {\n if (type && type !== 'persistent' && type !== 'temporary') {\n throw new Error('Invalid ClearKey key set type! Must be one of \\'persistent\\' or \\'temporary\\'');\n }\n this.keyPairs = keyPairs;\n this.type = type;\n }\n\n /**\n * Convert this key set to its JSON Web Key (JWK) representation\n *\n * @return {ArrayBuffer} JWK object UTF-8 encoded as ArrayBuffer\n */\n toJWK() {\n let i;\n let numKeys = this.keyPairs.length;\n let jwk = { keys: [] };\n\n for (i = 0; i < numKeys; i++) {\n let key = {\n kty: 'oct',\n alg: 'A128KW',\n kid: this.keyPairs[i].keyID,\n k: this.keyPairs[i].key\n };\n jwk.keys.push(key);\n }\n if (this.type) {\n jwk.type = this.type;\n }\n let jwkString = JSON.stringify(jwk);\n const len = jwkString.length;\n\n // Convert JSON string to ArrayBuffer\n let buf = new ArrayBuffer(len);\n let bView = new Uint8Array(buf);\n for (i = 0; i < len; i++) {\n bView[i] = jwkString.charCodeAt(i);\n }\n return buf;\n }\n}\n\nexport default ClearKeyKeySet;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport KeyPair from '../vo/KeyPair.js';\nimport ClearKeyKeySet from '../vo/ClearKeyKeySet.js';\nimport CommonEncryption from '../CommonEncryption.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nconst uuid = ProtectionConstants.CLEARKEY_UUID;\nconst systemString = ProtectionConstants.CLEARKEY_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\n\nfunction KeySystemClearKey(config) {\n\n config = config || {};\n let instance;\n const BASE64 = config.BASE64;\n\n /**\n * Returns desired clearkeys (as specified in the CDM message) from protection data\n *\n * @param {ProtectionData} protectionData the protection data\n * @param {ArrayBuffer} message the ClearKey CDM message\n * @returns {ClearKeyKeySet} the key set or null if none found\n * @throws {Error} if a keyID specified in the CDM message was not found in the\n * protection data\n * @memberof KeySystemClearKey\n */\n function getClearKeysFromProtectionData(protectionData, message) {\n let clearkeySet = null;\n if (protectionData) {\n // ClearKey is the only system that does not require a license server URL, so we\n // handle it here when keys are specified in protection data\n const jsonMsg = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(message)));\n const keyPairs = [];\n for (let i = 0; i < jsonMsg.kids.length; i++) {\n const clearkeyID = jsonMsg.kids[i];\n const clearkey = (protectionData.clearkeys && protectionData.clearkeys.hasOwnProperty(clearkeyID)) ? protectionData.clearkeys[clearkeyID] : null;\n if (!clearkey) {\n throw new Error('DRM: ClearKey keyID (' + clearkeyID + ') is not known!');\n }\n // KeyIDs from CDM are not base64 padded. Keys may or may not be padded\n keyPairs.push(new KeyPair(clearkeyID, clearkey));\n }\n clearkeySet = new ClearKeyKeySet(keyPairs);\n }\n return clearkeySet;\n }\n\n function getInitData(cp, cencContentProtection) {\n try {\n let initData = CommonEncryption.parseInitDataFromContentProtection(cp, BASE64);\n\n if (!initData && cencContentProtection) {\n const cencDefaultKid = cencDefaultKidToBase64Representation(cencContentProtection.cencDefaultKid);\n const data = { kids: [cencDefaultKid] };\n initData = new TextEncoder().encode(JSON.stringify(data));\n }\n\n return initData;\n } catch (e) {\n return null;\n }\n }\n\n function cencDefaultKidToBase64Representation(cencDefaultKid) {\n try {\n let kid = cencDefaultKid.replace(/-/g, '');\n kid = btoa(kid.match(/\\w{2}/g).map((a) => {\n return String.fromCharCode(parseInt(a, 16));\n }).join(''));\n return kid.replace(/=/g, '')\n .replace(/\\//g, '_')\n .replace(/\\+/g, '-');\n } catch (e) {\n return null;\n }\n }\n\n function getRequestHeadersFromMessage(/*message*/) {\n // Set content type to application/json by default\n return {\n 'Content-Type': 'application/json'\n };\n }\n\n function getLicenseRequestFromMessage(message) {\n return JSON.stringify(JSON.parse(String.fromCharCode.apply(null, new Uint8Array(message))));\n }\n\n function getLicenseServerURLFromInitData(/*initData*/) {\n return null;\n }\n\n function getCDMData(/*cdmData*/) {\n return null;\n }\n\n instance = {\n uuid,\n schemeIdURI,\n systemString,\n getInitData,\n getRequestHeadersFromMessage,\n getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData,\n getCDMData,\n getClearKeysFromProtectionData\n };\n\n return instance;\n}\n\nKeySystemClearKey.__dashjs_factory_name = 'KeySystemClearKey';\nexport default FactoryMaker.getSingletonFactory(KeySystemClearKey);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport KeyPair from '../vo/KeyPair.js';\nimport ClearKeyKeySet from '../vo/ClearKeyKeySet.js';\nimport CommonEncryption from '../CommonEncryption.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nconst uuid = ProtectionConstants.W3C_CLEARKEY_UUID;\nconst systemString = ProtectionConstants.CLEARKEY_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\n\nfunction KeySystemW3CClearKey(config) {\n let instance;\n const BASE64 = config.BASE64;\n const logger = config.debug.getLogger(instance);\n /**\n * Returns desired clearkeys (as specified in the CDM message) from protection data\n *\n * @param {ProtectionDataSet} protectionData the protection data\n * @param {ArrayBuffer} message the ClearKey CDM message\n * @returns {ClearKeyKeySet} the key set or null if none found\n * @throws {Error} if a keyID specified in the CDM message was not found in the\n * protection data\n * @memberof KeySystemClearKey\n */\n function getClearKeysFromProtectionData(protectionData, message) {\n let clearkeySet = null;\n if (protectionData) {\n // ClearKey is the only system that does not require a license server URL, so we\n // handle it here when keys are specified in protection data\n const jsonMsg = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(message)));\n const keyPairs = [];\n for (let i = 0; i < jsonMsg.kids.length; i++) {\n const clearkeyID = jsonMsg.kids[i];\n const clearkey = (protectionData.clearkeys && protectionData.clearkeys.hasOwnProperty(clearkeyID)) ? protectionData.clearkeys[clearkeyID] : null;\n if (!clearkey) {\n throw new Error('DRM: ClearKey keyID (' + clearkeyID + ') is not known!');\n }\n // KeyIDs from CDM are not base64 padded. Keys may or may not be padded\n keyPairs.push(new KeyPair(clearkeyID, clearkey));\n }\n clearkeySet = new ClearKeyKeySet(keyPairs);\n\n logger.warn('ClearKey schemeIdURI is using W3C Common PSSH systemID (1077efec-c0b2-4d02-ace3-3c1e52e2fb4b) in Content Protection. See DASH-IF IOP v4.1 section 7.6.2.4');\n }\n return clearkeySet;\n }\n\n function getInitData(cp) {\n return CommonEncryption.parseInitDataFromContentProtection(cp, BASE64);\n }\n\n function getRequestHeadersFromMessage(/*message*/) {\n return null;\n }\n\n function getLicenseRequestFromMessage(message) {\n return new Uint8Array(message);\n }\n\n function getLicenseServerURLFromInitData(/*initData*/) {\n return null;\n }\n\n function getCDMData(/*cdmData*/) {\n return null;\n }\n\n instance = {\n uuid: uuid,\n schemeIdURI: schemeIdURI,\n systemString: systemString,\n getInitData: getInitData,\n getRequestHeadersFromMessage: getRequestHeadersFromMessage,\n getLicenseRequestFromMessage: getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData: getLicenseServerURLFromInitData,\n getCDMData: getCDMData,\n getClearKeysFromProtectionData: getClearKeysFromProtectionData\n };\n\n return instance;\n}\n\nKeySystemW3CClearKey.__dashjs_factory_name = 'KeySystemW3CClearKey';\nexport default FactoryMaker.getSingletonFactory(KeySystemW3CClearKey);\n\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Google Widevine DRM\n *\n * @class\n * @implements MediaPlayer.dependencies.protection.KeySystem\n */\n\nimport CommonEncryption from '../CommonEncryption.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nconst uuid = ProtectionConstants.WIDEVINE_UUID;\nconst systemString = ProtectionConstants.WIDEVINE_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\n\nfunction KeySystemWidevine(config) {\n\n config = config || {};\n let instance;\n const BASE64 = config.BASE64;\n\n function getInitData(cp) {\n return CommonEncryption.parseInitDataFromContentProtection(cp, BASE64);\n }\n\n function getRequestHeadersFromMessage( /*message*/ ) {\n return null;\n }\n\n function getLicenseRequestFromMessage(message) {\n return new Uint8Array(message);\n }\n\n function getLicenseServerURLFromInitData( /*initData*/ ) {\n return null;\n }\n\n function getCDMData(/*cdmData*/) {\n return null;\n }\n\n instance = {\n uuid,\n schemeIdURI,\n systemString,\n getInitData,\n getRequestHeadersFromMessage,\n getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData,\n getCDMData\n };\n\n return instance;\n}\n\nKeySystemWidevine.__dashjs_factory_name = 'KeySystemWidevine';\nexport default FactoryMaker.getSingletonFactory(KeySystemWidevine);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Microsoft PlayReady DRM\n *\n * @class\n * @implements KeySystem\n */\nimport CommonEncryption from '../CommonEncryption.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nconst uuid = ProtectionConstants.PLAYREADY_UUID;\nconst systemString = ProtectionConstants.PLAYREADY_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\nconst PRCDMData = '%CUSTOMDATA%';\n\nfunction KeySystemPlayReady(config) {\n\n config = config || {};\n let instance;\n let messageFormat = 'utf-16';\n const BASE64 = config.BASE64;\n const settings = config.settings;\n\n function checkConfig() {\n if (!BASE64 || !BASE64.hasOwnProperty('decodeArray') || !BASE64.hasOwnProperty('decodeArray')) {\n throw new Error('Missing config parameter(s)');\n }\n }\n\n function getRequestHeadersFromMessage(message) {\n let msg,\n xmlDoc;\n const headers = {};\n const parser = new DOMParser();\n\n if (settings && settings.get().streaming.protection.detectPlayreadyMessageFormat) {\n // If message format configured/defaulted to utf-16 AND number of bytes is odd, assume 'unwrapped' raw CDM message.\n if (messageFormat === 'utf-16' && message && message.byteLength % 2 === 1) {\n headers['Content-Type'] = 'text/xml; charset=utf-8';\n return headers;\n }\n }\n\n const dataview = (messageFormat === 'utf-16') ? new Uint16Array(message) : new Uint8Array(message);\n\n msg = String.fromCharCode.apply(null, dataview);\n xmlDoc = parser.parseFromString(msg, 'application/xml');\n\n const headerNameList = xmlDoc.getElementsByTagName('name');\n const headerValueList = xmlDoc.getElementsByTagName('value');\n for (let i = 0; i < headerNameList.length; i++) {\n headers[headerNameList[i].childNodes[0].nodeValue] = headerValueList[i].childNodes[0].nodeValue;\n }\n // Some versions of the PlayReady CDM return 'Content' instead of 'Content-Type'.\n // this is NOT w3c conform and license servers may reject the request!\n // -> rename it to proper w3c definition!\n if (headers.hasOwnProperty('Content')) {\n headers['Content-Type'] = headers.Content;\n delete headers.Content;\n }\n // Set Content-Type header by default if not provided in the the CDM message ()\n // or if the message contains directly the challenge itself (Ex: LG SmartTVs)\n if (!headers.hasOwnProperty('Content-Type')) {\n headers['Content-Type'] = 'text/xml; charset=utf-8';\n }\n return headers;\n }\n\n function getLicenseRequestFromMessage(message) {\n let licenseRequest = null;\n const parser = new DOMParser();\n\n if (settings && settings.get().streaming.protection.detectPlayreadyMessageFormat) {\n // If message format configured/defaulted to utf-16 AND number of bytes is odd, assume 'unwrapped' raw CDM message.\n if (messageFormat === 'utf-16' && message && message.byteLength % 2 === 1) {\n return message;\n }\n }\n\n const dataview = (messageFormat === 'utf-16') ? new Uint16Array(message) : new Uint8Array(message);\n\n checkConfig();\n const msg = String.fromCharCode.apply(null, dataview);\n const xmlDoc = parser.parseFromString(msg, 'application/xml');\n\n if (xmlDoc.getElementsByTagName('PlayReadyKeyMessage')[0]) {\n const Challenge = xmlDoc.getElementsByTagName('Challenge')[0].childNodes[0].nodeValue;\n if (Challenge) {\n licenseRequest = BASE64.decode(Challenge);\n }\n } else {\n // The message from CDM is not a wrapped message as on IE11 and Edge,\n // thus it contains direclty the challenge itself\n // (note that the xmlDoc at this point may be unreadable since it may have been interpreted as UTF-16)\n return message;\n }\n\n return licenseRequest;\n }\n\n function getLicenseServerURLFromInitData(initData) {\n if (initData) {\n const data = new DataView(initData);\n const numRecords = data.getUint16(4, true);\n let offset = 6;\n const parser = new DOMParser();\n\n for (let i = 0; i < numRecords; i++) {\n // Parse the PlayReady Record header\n const recordType = data.getUint16(offset, true);\n offset += 2;\n const recordLength = data.getUint16(offset, true);\n offset += 2;\n if (recordType !== 0x0001) {\n offset += recordLength;\n continue;\n }\n\n const recordData = initData.slice(offset, offset + recordLength);\n const record = String.fromCharCode.apply(null, new Uint16Array(recordData));\n const xmlDoc = parser.parseFromString(record, 'application/xml');\n\n // First try \n if (xmlDoc.getElementsByTagName('LA_URL')[0]) {\n const laurl = xmlDoc.getElementsByTagName('LA_URL')[0].childNodes[0].nodeValue;\n if (laurl) {\n return laurl;\n }\n }\n\n // Optionally, try \n if (xmlDoc.getElementsByTagName('LUI_URL')[0]) {\n const luiurl = xmlDoc.getElementsByTagName('LUI_URL')[0].childNodes[0].nodeValue;\n if (luiurl) {\n return luiurl;\n }\n }\n }\n }\n\n return null;\n }\n\n function getInitData(cpData) {\n // * desc@ getInitData\n // * generate PSSH data from PROHeader defined in MPD file\n // * PSSH format:\n // * size (4)\n // * box type(PSSH) (8)\n // * Protection SystemID (16)\n // * protection system data size (4) - length of decoded PROHeader\n // * decoded PROHeader data from MPD file\n const PSSHBoxType = new Uint8Array([0x70, 0x73, 0x73, 0x68, 0x00, 0x00, 0x00, 0x00]); //'PSSH' 8 bytes\n const playreadySystemID = new Uint8Array([0x9a, 0x04, 0xf0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xab, 0x92, 0xe6, 0x5b, 0xe0, 0x88, 0x5f, 0x95]);\n\n let byteCursor = 0;\n let uint8arraydecodedPROHeader = null;\n\n let PROSize,\n PSSHSize,\n PSSHBoxBuffer,\n PSSHBox,\n PSSHData;\n\n checkConfig();\n if (!cpData) {\n return null;\n }\n // Handle common encryption PSSH\n if ('pssh' in cpData && cpData.pssh) {\n return CommonEncryption.parseInitDataFromContentProtection(cpData, BASE64);\n }\n // Handle native MS PlayReady ContentProtection elements\n if ('pro' in cpData && cpData.pro) {\n uint8arraydecodedPROHeader = BASE64.decodeArray(cpData.pro.__text);\n } else if ('prheader' in cpData && cpData.prheader) {\n uint8arraydecodedPROHeader = BASE64.decodeArray(cpData.prheader.__text);\n } else {\n return null;\n }\n\n PROSize = uint8arraydecodedPROHeader.length;\n PSSHSize = 0x4 + PSSHBoxType.length + playreadySystemID.length + 0x4 + PROSize;\n\n PSSHBoxBuffer = new ArrayBuffer(PSSHSize);\n\n PSSHBox = new Uint8Array(PSSHBoxBuffer);\n PSSHData = new DataView(PSSHBoxBuffer);\n\n PSSHData.setUint32(byteCursor, PSSHSize);\n byteCursor += 0x4;\n\n PSSHBox.set(PSSHBoxType, byteCursor);\n byteCursor += PSSHBoxType.length;\n\n PSSHBox.set(playreadySystemID, byteCursor);\n byteCursor += playreadySystemID.length;\n\n PSSHData.setUint32(byteCursor, PROSize);\n byteCursor += 0x4;\n\n PSSHBox.set(uint8arraydecodedPROHeader, byteCursor);\n byteCursor += PROSize;\n\n return PSSHBox.buffer;\n }\n\n /**\n * It seems that some PlayReady implementations return their XML-based CDM\n * messages using UTF16, while others return them as UTF8. Use this function\n * to modify the message format to expect when parsing CDM messages.\n *\n * @param {string} format the expected message format. Either \"utf-8\" or \"utf-16\".\n * @throws {Error} Specified message format is not one of \"utf8\" or \"utf16\"\n */\n function setPlayReadyMessageFormat(format) {\n if (format !== 'utf-8' && format !== 'utf-16') {\n throw new Error('Specified message format is not one of \"utf-8\" or \"utf-16\"');\n }\n messageFormat = format;\n }\n\n /**\n * Get Playready Custom data\n */\n function getCDMData(_cdmData) {\n let customData,\n cdmData,\n cdmDataBytes,\n i;\n\n checkConfig();\n if (!_cdmData) {\n return null;\n }\n\n // Convert custom data into multibyte string\n customData = [];\n for (i = 0; i < _cdmData.length; ++i) {\n customData.push(_cdmData.charCodeAt(i));\n customData.push(0);\n }\n customData = String.fromCharCode.apply(null, customData);\n\n // Encode in Base 64 the custom data string\n customData = BASE64.encode(customData);\n\n // Initialize CDM data with Base 64 encoded custom data\n // (see https://msdn.microsoft.com/en-us/library/dn457361.aspx)\n cdmData = PRCDMData.replace('%CUSTOMDATA%', customData);\n\n // Convert CDM data into multibyte characters\n cdmDataBytes = [];\n for (i = 0; i < cdmData.length; ++i) {\n cdmDataBytes.push(cdmData.charCodeAt(i));\n cdmDataBytes.push(0);\n }\n\n return new Uint8Array(cdmDataBytes).buffer;\n }\n\n instance = {\n uuid,\n schemeIdURI,\n systemString,\n getInitData,\n getRequestHeadersFromMessage,\n getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData,\n getCDMData,\n setPlayReadyMessageFormat\n };\n\n return instance;\n}\n\nKeySystemPlayReady.__dashjs_factory_name = 'KeySystemPlayReady';\nexport default FactoryMaker.getSingletonFactory(KeySystemPlayReady);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * CastLabs DRMToday License Server implementation\n *\n * @implements LicenseServer\n * @class\n */\n\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction DRMToday(config) {\n\n config = config || {};\n const BASE64 = config.BASE64;\n\n const keySystems = {};\n keySystems[ProtectionConstants.WIDEVINE_KEYSTEM_STRING] = {\n responseType: 'json',\n getLicenseMessage: function (response) {\n return BASE64.decodeArray(response.license);\n },\n getErrorResponse: function (response) {\n return response;\n }\n };\n keySystems[ProtectionConstants.PLAYREADY_KEYSTEM_STRING] = {\n responseType: 'arraybuffer',\n getLicenseMessage: function (response) {\n return response;\n },\n getErrorResponse: function (response) {\n return String.fromCharCode.apply(null, new Uint8Array(response));\n }\n };\n\n let instance;\n\n function checkConfig() {\n if (!BASE64 || !BASE64.hasOwnProperty('decodeArray')) {\n throw new Error('Missing config parameter(s)');\n }\n }\n\n function getServerURLFromMessage(url /*, message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(keySystemStr/*, messageType*/) {\n return keySystems[keySystemStr].responseType;\n }\n\n function getLicenseMessage(serverResponse, keySystemStr/*, messageType*/) {\n checkConfig();\n return keySystems[keySystemStr].getLicenseMessage(serverResponse);\n }\n\n function getErrorResponse(serverResponse, keySystemStr/*, messageType*/) {\n return keySystems[keySystemStr].getErrorResponse(serverResponse);\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nDRMToday.__dashjs_factory_name = 'DRMToday';\nexport default FactoryMaker.getSingletonFactory(DRMToday); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global escape: true */\n\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\n/**\n * Microsoft PlayReady Test License Server\n *\n * For testing content that uses the PlayReady test server at\n *\n * @implements LicenseServer\n * @class\n * @ignore\n */\n\nfunction PlayReady() {\n\n let instance;\n\n const soap = 'http://schemas.xmlsoap.org/soap/envelope/';\n\n function uintToString(arrayBuffer) {\n const encodedString = String.fromCharCode.apply(null, new Uint8Array(arrayBuffer));\n const decodedString = decodeURIComponent(escape(encodedString));\n return decodedString;\n }\n\n function parseServerResponse(serverResponse) {\n if (window.DOMParser) {\n const stringResponse = uintToString(serverResponse);\n const parser = new window.DOMParser();\n const xmlDoc = parser.parseFromString(stringResponse, 'text/xml');\n const envelope = xmlDoc ? xmlDoc.getElementsByTagNameNS(soap, 'Envelope')[0] : null;\n const body = envelope ? envelope.getElementsByTagNameNS(soap, 'Body')[0] : null;\n const fault = body ? body.getElementsByTagNameNS(soap, 'Fault')[0] : null;\n\n if (fault) {\n return null;\n }\n }\n return serverResponse;\n }\n\n function parseErrorResponse(serverResponse) {\n let faultstring = '';\n let statusCode = '';\n let message = '';\n let idStart = -1;\n let idEnd = -1;\n\n if (window.DOMParser) {\n const stringResponse = uintToString(serverResponse);\n const parser = new window.DOMParser();\n const xmlDoc = parser.parseFromString(stringResponse, 'text/xml');\n const envelope = xmlDoc ? xmlDoc.getElementsByTagNameNS(soap, 'Envelope')[0] : null;\n const body = envelope ? envelope.getElementsByTagNameNS(soap, 'Body')[0] : null;\n const fault = body ? body.getElementsByTagNameNS(soap, 'Fault')[0] : null;\n const detail = fault ? fault.getElementsByTagName('detail')[0] : null;\n const exception = detail ? detail.getElementsByTagName('Exception')[0] : null;\n let node = null;\n\n if (fault === null) {\n return stringResponse;\n }\n\n node = fault.getElementsByTagName('faultstring')[0].firstChild;\n faultstring = node ? node.nodeValue : null;\n\n if (exception !== null) {\n node = exception.getElementsByTagName('StatusCode')[0];\n statusCode = node ? node.firstChild.nodeValue : null;\n node = exception.getElementsByTagName('Message')[0];\n message = node ? node.firstChild.nodeValue : null;\n idStart = message ? message.lastIndexOf('[') + 1 : -1;\n idEnd = message ? message.indexOf(']') : -1;\n message = message ? message.substring(idStart, idEnd) : '';\n }\n }\n\n let errorString = `code: ${statusCode}, name: ${faultstring}`;\n if (message) {\n errorString += `, message: ${message}`;\n }\n\n return errorString;\n }\n\n function getServerURLFromMessage(url /*, message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(/*keySystemStr, messageType*/) {\n return 'arraybuffer';\n }\n\n function getLicenseMessage(serverResponse/*, keySystemStr, messageType*/) {\n return parseServerResponse.call(this, serverResponse);\n }\n\n function getErrorResponse(serverResponse/*, keySystemStr, messageType*/) {\n return parseErrorResponse.call(this, serverResponse);\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nPlayReady.__dashjs_factory_name = 'PlayReady';\nexport default FactoryMaker.getSingletonFactory(PlayReady); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\n/**\n * @ignore\n */\nfunction Widevine() {\n\n let instance;\n\n function getServerURLFromMessage(url /*, message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(/*keySystemStr, messageType*/) {\n return 'arraybuffer';\n }\n\n function getLicenseMessage(serverResponse/*, keySystemStr, messageType*/) {\n return serverResponse;\n }\n\n function getErrorResponse(serverResponse/*, keySystemStr, messageType*/) {\n return String.fromCharCode.apply(null, new Uint8Array(serverResponse));\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nWidevine.__dashjs_factory_name = 'Widevine';\nexport default FactoryMaker.getSingletonFactory(Widevine); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * CableLabs ClearKey license server implementation\n *\n * For testing purposes and evaluating potential uses for ClearKey, we have developed\n * a dirt-simple API for requesting ClearKey licenses from a remote server.\n *\n * @implements LicenseServer\n * @class\n */\nimport KeyPair from '../vo/KeyPair.js';\nimport ClearKeyKeySet from '../vo/ClearKeyKeySet.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nfunction ClearKey() {\n\n let instance;\n\n function getServerURLFromMessage(url /* message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(/*keySystemStr*/) {\n return 'json';\n }\n\n function getLicenseMessage(serverResponse/*, keySystemStr, messageType*/) {\n if (!serverResponse.hasOwnProperty('keys')) {\n return null;\n }\n let keyPairs = [];\n for (let i = 0; i < serverResponse.keys.length; i++) {\n let keypair = serverResponse.keys[i];\n let keyid = keypair.kid.replace(/=/g, '');\n let key = keypair.k.replace(/=/g, '');\n\n keyPairs.push(new KeyPair(keyid, key));\n }\n return new ClearKeyKeySet(keyPairs);\n }\n\n function getErrorResponse(serverResponse/*, keySystemStr, messageType*/) {\n return String.fromCharCode.apply(null, new Uint8Array(serverResponse));\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nClearKey.__dashjs_factory_name = 'ClearKey';\nexport default FactoryMaker.getSingletonFactory(ClearKey); \n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc A model class to save metadata about a key system\n * @ignore\n */\n\nclass KeySystemMetadata {\n constructor(config) {\n this.ks = config.ks;\n this.keyId = config.keyId;\n this.initData = config.initData;\n this.protData = config.protData;\n this.cdmData = config.cdmData;\n this.sessionId = config.sessionId;\n this.sessionType = config.sessionType;\n }\n}\n\nexport default KeySystemMetadata;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport CommonEncryption from './../CommonEncryption.js';\nimport KeySystemClearKey from './../drm/KeySystemClearKey.js';\nimport KeySystemW3CClearKey from './../drm/KeySystemW3CClearKey.js';\nimport KeySystemWidevine from './../drm/KeySystemWidevine.js';\nimport KeySystemPlayReady from './../drm/KeySystemPlayReady.js';\nimport DRMToday from './../servers/DRMToday.js';\nimport PlayReady from './../servers/PlayReady.js';\nimport Widevine from './../servers/Widevine.js';\nimport ClearKey from './../servers/ClearKey.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport KeySystemMetadata from '../vo/KeySystemMetadata.js';\n\n/**\n * @module ProtectionKeyController\n * @ignore\n * @description Media protection key system functionality that can be modified/overridden by applications\n */\nfunction ProtectionKeyController() {\n\n let context = this.context;\n\n let instance,\n debug,\n logger,\n keySystems,\n BASE64,\n settings,\n clearkeyKeySystem,\n clearkeyW3CKeySystem;\n\n function setConfig(config) {\n if (!config) {\n return;\n }\n\n if (config.debug) {\n debug = config.debug;\n logger = debug.getLogger(instance);\n }\n\n if (config.BASE64) {\n BASE64 = config.BASE64;\n }\n\n if (config.settings) {\n settings = config.settings\n }\n }\n\n function initialize() {\n keySystems = [];\n\n let keySystem;\n\n // PlayReady\n keySystem = KeySystemPlayReady(context).getInstance({BASE64: BASE64, settings: settings});\n keySystems.push(keySystem);\n\n // Widevine\n keySystem = KeySystemWidevine(context).getInstance({BASE64: BASE64});\n keySystems.push(keySystem);\n\n // ClearKey\n keySystem = KeySystemClearKey(context).getInstance({BASE64: BASE64});\n keySystems.push(keySystem);\n clearkeyKeySystem = keySystem;\n\n // W3C ClearKey\n keySystem = KeySystemW3CClearKey(context).getInstance({BASE64: BASE64, debug: debug});\n keySystems.push(keySystem);\n clearkeyW3CKeySystem = keySystem;\n }\n\n /**\n * Returns a prioritized list of key systems supported\n * by this player (not necessarily those supported by the\n * user agent)\n *\n * @returns {Array.} a prioritized\n * list of key systems\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getKeySystems() {\n return keySystems;\n }\n\n /**\n * Sets the prioritized list of key systems to be supported\n * by this player.\n *\n * @param {Array.} newKeySystems the new prioritized\n * list of key systems\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function setKeySystems(newKeySystems) {\n keySystems = newKeySystems;\n }\n\n /**\n * Returns the key system associated with the given key system string\n * name (i.e. 'org.w3.clearkey')\n *\n * @param {string} systemString the system string\n * @returns {KeySystem|null} the key system\n * or null if no supported key system is associated with the given key\n * system string\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getKeySystemBySystemString(systemString) {\n for (let i = 0; i < keySystems.length; i++) {\n if (keySystems[i].systemString === systemString) {\n return keySystems[i];\n }\n }\n return null;\n }\n\n /**\n * Determines whether the given key system is ClearKey. This is\n * necessary because the EME spec defines ClearKey and its method\n * for providing keys to the key session; and this method has changed\n * between the various API versions. Our EME-specific ProtectionModels\n * must know if the system is ClearKey so that it can format the keys\n * according to the particular spec version.\n *\n * @param {Object} keySystem the key\n * @returns {boolean} true if this is the ClearKey key system, false\n * otherwise\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function isClearKey(keySystem) {\n return (keySystem === clearkeyKeySystem || keySystem === clearkeyW3CKeySystem);\n }\n\n /**\n * Check equality of initData array buffers.\n *\n * @param {ArrayBuffer} initData1 - first initData\n * @param {ArrayBuffer} initData2 - second initData\n * @returns {boolean} true if the initData arrays are equal in size and\n * contents, false otherwise\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function initDataEquals(initData1, initData2) {\n if (initData1.byteLength === initData2.byteLength) {\n let data1 = new Uint8Array(initData1);\n let data2 = new Uint8Array(initData2);\n\n for (let j = 0; j < data1.length; j++) {\n if (data1[j] !== data2[j]) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n /**\n * Returns a set of supported key systems and CENC initialization data\n * from the given array of ContentProtection elements. Only\n * key systems that are supported by this player will be returned.\n * Key systems are returned in priority order (highest first).\n *\n * @param {Array.} contentProtectionElements - array of content protection elements parsed\n * from the manifest\n * @param {ProtectionData} applicationSpecifiedProtectionData user specified protection data - license server url etc\n * supported by the content\n * @param {string} sessionType session type\n * @returns {Array.} array of objects indicating which supported key\n * systems were found. Empty array is returned if no supported key systems were found\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getSupportedKeySystemMetadataFromContentProtection(contentProtectionElements, applicationSpecifiedProtectionData, sessionType) {\n let contentProtectionElement, keySystem, ksIdx, cpIdx;\n let supportedKS = [];\n\n if (!contentProtectionElements || !contentProtectionElements.length) {\n return supportedKS\n }\n\n const mp4ProtectionElement = CommonEncryption.findMp4ProtectionElement(contentProtectionElements);\n for (ksIdx = 0; ksIdx < keySystems.length; ksIdx++) {\n keySystem = keySystems[ksIdx];\n\n // Get protection data that applies for current key system\n const protData = _getProtDataForKeySystem(keySystem.systemString, applicationSpecifiedProtectionData);\n\n for (cpIdx = 0; cpIdx < contentProtectionElements.length; cpIdx++) {\n contentProtectionElement = contentProtectionElements[cpIdx];\n if (contentProtectionElement.schemeIdUri.toLowerCase() === keySystem.schemeIdURI) {\n // Look for DRM-specific ContentProtection\n let initData = keySystem.getInitData(contentProtectionElement, mp4ProtectionElement);\n const keySystemMetadata = new KeySystemMetadata({\n ks: keySystems[ksIdx],\n keyId: contentProtectionElement.keyId,\n initData: initData,\n protData: protData,\n cdmData: keySystem.getCDMData(protData ? protData.cdmData : null),\n sessionId: _getSessionId(protData, contentProtectionElement),\n sessionType: _getSessionType(protData, sessionType)\n })\n\n if (protData) {\n supportedKS.unshift(keySystemMetadata);\n } else {\n supportedKS.push(keySystemMetadata);\n }\n }\n }\n }\n\n return supportedKS;\n }\n\n /**\n * Returns key systems supported by this player for the given PSSH\n * initializationData. Key systems are returned in priority order\n * (highest priority first)\n *\n * @param {ArrayBuffer} initData Concatenated PSSH data for all DRMs\n * supported by the content\n * @param {ProtectionData} protDataSet user specified protection data - license server url etc\n * supported by the content\n * @param {string} default session type\n * @returns {Array.} array of objects indicating which supported key\n * systems were found. Empty array is returned if no\n * supported key systems were found\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getSupportedKeySystemsFromSegmentPssh(initData, protDataSet, sessionType) {\n let supportedKS = [];\n let pssh = CommonEncryption.parsePSSHList(initData);\n let ks, keySystemString;\n\n for (let ksIdx = 0; ksIdx < keySystems.length; ++ksIdx) {\n ks = keySystems[ksIdx];\n keySystemString = ks.systemString;\n\n // Get protection data that applies for current key system\n const protData = _getProtDataForKeySystem(keySystemString, protDataSet);\n\n if (ks.uuid in pssh) {\n supportedKS.push({\n ks: ks,\n initData: pssh[ks.uuid],\n protData: protData,\n cdmData: ks.getCDMData(protData ? protData.cdmData : null),\n sessionId: _getSessionId(protData),\n sessionType: _getSessionType(protData, sessionType)\n });\n }\n }\n return supportedKS;\n }\n\n /**\n * Returns the license server implementation data that should be used for this request.\n *\n * @param {KeySystem} keySystem the key system\n * associated with this license request\n * @param {ProtectionData} protData protection data to use for the\n * request\n * @param {string} [messageType=\"license-request\"] the message type associated with this\n * request. Supported message types can be found\n * {@link https://w3c.github.io/encrypted-media/#idl-def-MediaKeyMessageType|here}.\n * @returns {LicenseServer|null} the license server\n * implementation that should be used for this request or null if the player should not\n * pass messages of the given type to a license server\n * @memberof module:ProtectionKeyController\n * @instance\n *\n */\n function getLicenseServerModelInstance(keySystem, protData, messageType) {\n\n // Our default server implementations do not do anything with \"license-release\" or\n // \"individualization-request\" messages, so we just send a success event\n if (messageType === ProtectionConstants.MEDIA_KEY_MESSAGE_TYPES.LICENSE_RELEASE || messageType === ProtectionConstants.MEDIA_KEY_MESSAGE_TYPES.INDIVIDUALIZATION_REQUEST) {\n return null;\n }\n\n let licenseServerData = null;\n if (protData && protData.hasOwnProperty('drmtoday')) {\n licenseServerData = DRMToday(context).getInstance({BASE64: BASE64});\n } else if (keySystem.systemString === ProtectionConstants.WIDEVINE_KEYSTEM_STRING) {\n licenseServerData = Widevine(context).getInstance();\n } else if (keySystem.systemString === ProtectionConstants.PLAYREADY_KEYSTEM_STRING) {\n licenseServerData = PlayReady(context).getInstance();\n } else if (keySystem.systemString === ProtectionConstants.CLEARKEY_KEYSTEM_STRING) {\n licenseServerData = ClearKey(context).getInstance();\n }\n\n return licenseServerData;\n }\n\n /**\n * Allows application-specific retrieval of ClearKey keys.\n *\n * @param {KeySystem} clearkeyKeySystem They exact ClearKey System to be used\n * @param {ProtectionData} protData protection data to use for the\n * request\n * @param {ArrayBuffer} message the key message from the CDM\n * @return {ClearKeyKeySet|null} the clear keys associated with\n * the request or null if no keys can be returned by this function\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function processClearKeyLicenseRequest(clearkeyKeySystem, protData, message) {\n try {\n return clearkeyKeySystem.getClearKeysFromProtectionData(protData, message);\n } catch (error) {\n logger.error('Failed to retrieve clearkeys from ProtectionData');\n return null;\n }\n }\n\n function setProtectionData(protectionDataSet) {\n var getProtectionData = function (keySystemString) {\n var protData = null;\n if (protectionDataSet) {\n protData = (keySystemString in protectionDataSet) ? protectionDataSet[keySystemString] : null;\n }\n return protData;\n };\n\n for (var i = 0; i < keySystems.length; i++) {\n var keySystem = keySystems[i];\n if (keySystem.hasOwnProperty('init')) {\n keySystem.init(getProtectionData(keySystem.systemString));\n }\n }\n }\n\n function _getProtDataForKeySystem(systemString, protDataSet) {\n if (!protDataSet) {\n return null;\n }\n return (systemString in protDataSet) ? protDataSet[systemString] : null;\n }\n\n function _getSessionId(protData, cp) {\n // Get sessionId from protectionData or from manifest (ContentProtection)\n if (protData && protData.sessionId) {\n return protData.sessionId;\n } else if (cp && cp.sessionId) {\n return cp.sessionId;\n }\n return null;\n }\n\n function _getSessionType(protData, sessionType) {\n return (protData && protData.sessionType) ? protData.sessionType : sessionType;\n }\n\n instance = {\n getKeySystemBySystemString,\n getKeySystems,\n getLicenseServerModelInstance,\n getSupportedKeySystemMetadataFromContentProtection,\n getSupportedKeySystemsFromSegmentPssh,\n initDataEquals,\n initialize,\n isClearKey,\n processClearKeyLicenseRequest,\n setConfig,\n setKeySystems,\n setProtectionData,\n };\n\n return instance;\n}\n\nProtectionKeyController.__dashjs_factory_name = 'ProtectionKeyController';\nexport default FactoryMaker.getSingletonFactory(ProtectionKeyController);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc NeedKey\n * @ignore\n */\nclass NeedKey {\n /**\n * @param {ArrayBuffer} initData the initialization data\n * @param {string} initDataType initialization data type\n * @class\n */\n constructor(initData, initDataType) {\n this.initData = initData;\n this.initDataType = initDataType;\n }\n}\n\nexport default NeedKey;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\n\n/**\n * @classdesc EME-independent KeyMessage\n * @ignore\n */\nclass KeyMessage {\n /**\n * @param {SessionToken} sessionToken the session\n * to which the key message is associated\n * @param {ArrayBuffer} message the key message\n * @param {string} defaultURL license acquisition URL provided by the CDM\n * @param {string} messageType Supported message types can be found\n * {@link https://w3c.github.io/encrypted-media/#idl-def-MediaKeyMessageType|here}.\n * @class\n */\n constructor(sessionToken, message, defaultURL, messageType) {\n this.sessionToken = sessionToken;\n this.message = message;\n this.defaultURL = defaultURL;\n this.messageType = messageType ? messageType : ProtectionConstants.MEDIA_KEY_MESSAGE_TYPES.LICENSE_REQUEST;\n }\n}\n\nexport default KeyMessage;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Creates a new key system access token. Represents a valid key system for\n * given piece of content and key system requirements. Used to initialize license\n * acquisition operations.\n * @ignore\n */\nclass KeySystemAccess {\n /**\n * @param {MediaPlayer.dependencies.protection.KeySystem} keySystem the key system\n * @param {KeySystemConfiguration} ksConfiguration the\n * subset of configurations passed to the key system access request that are supported\n * by this user agent\n * @class\n * @ignore\n */\n constructor(keySystem, ksConfiguration) {\n this.keySystem = keySystem;\n this.ksConfiguration = ksConfiguration;\n this.nativeMediaKeySystemAccessObject = null;\n this.selectedSystemString = null;\n }\n}\n\nexport default KeySystemAccess;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Most recent EME implementation\n *\n * Implemented by Google Chrome v36+ (Windows, OSX, Linux)\n *\n * @implements ProtectionModel\n * @class\n */\nimport ProtectionKeyController from '../controllers/ProtectionKeyController.js';\nimport NeedKey from '../vo/NeedKey.js';\nimport ProtectionErrors from '../errors/ProtectionErrors.js';\nimport DashJSError from '../../vo/DashJSError.js';\nimport KeyMessage from '../vo/KeyMessage.js';\nimport KeySystemAccess from '../vo/KeySystemAccess.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\n\nconst SYSTEM_STRING_PRIORITY = {};\nSYSTEM_STRING_PRIORITY[ProtectionConstants.PLAYREADY_KEYSTEM_STRING] = [ProtectionConstants.PLAYREADY_KEYSTEM_STRING, ProtectionConstants.PLAYREADY_RECOMMENDATION_KEYSTEM_STRING];\nSYSTEM_STRING_PRIORITY[ProtectionConstants.WIDEVINE_KEYSTEM_STRING] = [ProtectionConstants.WIDEVINE_KEYSTEM_STRING];\nSYSTEM_STRING_PRIORITY[ProtectionConstants.CLEARKEY_KEYSTEM_STRING] = [ProtectionConstants.CLEARKEY_KEYSTEM_STRING];\n\nfunction DefaultProtectionModel(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;//Need to pass in here so we can use same instance since this is optional module\n const events = config.events;\n const debug = config.debug;\n\n let instance,\n logger,\n keySystem,\n videoElement,\n mediaKeys,\n sessionTokens,\n eventHandler,\n protectionKeyController;\n\n function setup() {\n logger = debug.getLogger(instance);\n keySystem = null;\n videoElement = null;\n mediaKeys = null;\n sessionTokens = [];\n protectionKeyController = ProtectionKeyController(context).getInstance();\n eventHandler = createEventHandler();\n }\n\n function reset() {\n const numSessions = sessionTokens.length;\n let session;\n\n if (numSessions !== 0) {\n // Called when we are done closing a session. Success or fail\n const done = function (session) {\n removeSession(session);\n if (sessionTokens.length === 0) {\n if (videoElement) {\n videoElement.removeEventListener('encrypted', eventHandler);\n videoElement.setMediaKeys(null).then(function () {\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n });\n } else {\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n }\n }\n };\n for (let i = 0; i < numSessions; i++) {\n session = sessionTokens[i];\n (function (s) {\n _closeKeySessionInternal(session)\n done(s);\n })(session);\n }\n } else {\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n }\n }\n\n function stop() {\n // Close and remove not usable sessions\n let session;\n for (let i = 0; i < sessionTokens.length; i++) {\n session = sessionTokens[i];\n if (!session.getUsable()) {\n _closeKeySessionInternal(session)\n removeSession(session);\n }\n }\n }\n\n function getAllInitData() {\n const retVal = [];\n for (let i = 0; i < sessionTokens.length; i++) {\n if (sessionTokens[i].initData) {\n retVal.push(sessionTokens[i].initData);\n }\n }\n return retVal;\n }\n\n function getSessionTokens() {\n return sessionTokens;\n }\n\n function requestKeySystemAccess(keySystemConfigurationsToRequest) {\n return new Promise((resolve, reject) => {\n _requestKeySystemAccessInternal(keySystemConfigurationsToRequest, 0, resolve, reject);\n })\n }\n\n /**\n * Initializes access to a key system. Once we found a valid configuration we get a mediaKeySystemAccess object\n * @param keySystemConfigurationsToRequest\n * @param idx\n * @param resolve\n * @param reject\n * @private\n */\n function _requestKeySystemAccessInternal(keySystemConfigurationsToRequest, idx, resolve, reject) {\n\n // In case requestMediaKeySystemAccess is not available we can not proceed and dispatch an error\n if (navigator.requestMediaKeySystemAccess === undefined ||\n typeof navigator.requestMediaKeySystemAccess !== 'function') {\n const msg = 'Insecure origins are not allowed';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: msg });\n reject({ error: msg });\n return;\n }\n\n // If a systemStringPriority is defined by the application we use these values. Otherwise, we use the default system string\n // This is useful for DRM systems such as Playready for which multiple system strings are possible for instance com.microsoft.playready and com.microsoft.playready.recommendation\n const protDataSystemStringPriority = keySystemConfigurationsToRequest[idx].protData && keySystemConfigurationsToRequest[idx].protData.systemStringPriority ? keySystemConfigurationsToRequest[idx].protData.systemStringPriority : null;\n const configs = keySystemConfigurationsToRequest[idx].configs;\n const currentKeySystem = keySystemConfigurationsToRequest[idx].ks;\n let systemString = currentKeySystem.systemString;\n\n // Use the default values in case no values are provided by the application\n const systemStringsToApply = protDataSystemStringPriority ? protDataSystemStringPriority : SYSTEM_STRING_PRIORITY[systemString] ? SYSTEM_STRING_PRIORITY[systemString] : [systemString];\n\n // Check all the available system strings and the available configurations for support\n _checkAccessForKeySystem(systemStringsToApply, configs)\n .then((data) => {\n const configuration = data && data.nativeMediaKeySystemAccessObject && typeof data.nativeMediaKeySystemAccessObject.getConfiguration === 'function' ?\n data.nativeMediaKeySystemAccessObject.getConfiguration() : null;\n const keySystemAccess = new KeySystemAccess(currentKeySystem, configuration);\n keySystemAccess.selectedSystemString = data.selectedSystemString;\n keySystemAccess.nativeMediaKeySystemAccessObject = data.nativeMediaKeySystemAccessObject;\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { data: keySystemAccess });\n resolve({ data: keySystemAccess });\n })\n .catch((e) => {\n if (idx + 1 < keySystemConfigurationsToRequest.length) {\n _requestKeySystemAccessInternal(keySystemConfigurationsToRequest, idx + 1, resolve, reject);\n } else {\n const errorMessage = 'Key system access denied! ';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: errorMessage + e.message });\n reject({ error: errorMessage + e.message });\n }\n })\n }\n\n /**\n * For a specific key system: Iterate over the possible system strings and resolve once a valid configuration was found\n * @param {array} systemStringsToApply\n * @param {object} configs\n * @return {Promise}\n * @private\n */\n function _checkAccessForKeySystem(systemStringsToApply, configs) {\n return new Promise((resolve, reject) => {\n _checkAccessForSystemStrings(systemStringsToApply, configs, 0, resolve, reject);\n })\n }\n\n /**\n * Recursively iterate over the possible system strings until a supported configuration is found or we ran out of options\n * @param {array} systemStringsToApply\n * @param {object} configs\n * @param {number} idx\n * @param {function} resolve\n * @param {function} reject\n * @private\n */\n function _checkAccessForSystemStrings(systemStringsToApply, configs, idx, resolve, reject) {\n const systemString = systemStringsToApply[idx];\n\n logger.debug(`Requesting key system access for system string ${systemString}`);\n\n navigator.requestMediaKeySystemAccess(systemString, configs)\n .then((mediaKeySystemAccess) => {\n resolve({ nativeMediaKeySystemAccessObject: mediaKeySystemAccess, selectedSystemString: systemString });\n })\n .catch((e) => {\n if (idx + 1 < systemStringsToApply.length) {\n _checkAccessForSystemStrings(systemStringsToApply, configs, idx + 1, resolve, reject);\n } else {\n reject(e);\n }\n });\n }\n\n /**\n * Selects a key system by creating the mediaKeys and adding them to the video element\n * @param keySystemAccess\n * @return {Promise}\n */\n function selectKeySystem(keySystemAccess) {\n return new Promise((resolve, reject) => {\n keySystemAccess.nativeMediaKeySystemAccessObject.createMediaKeys()\n .then((mkeys) => {\n keySystem = keySystemAccess.keySystem;\n mediaKeys = mkeys;\n if (videoElement) {\n return videoElement.setMediaKeys(mediaKeys)\n } else {\n return Promise.resolve();\n }\n })\n .then(() => {\n resolve(keySystem);\n })\n .catch(function () {\n reject({ error: 'Error selecting keys system (' + keySystemAccess.keySystem.systemString + ')! Could not create MediaKeys -- TODO' });\n });\n })\n }\n\n function setMediaElement(mediaElement) {\n if (videoElement === mediaElement) {\n return;\n }\n\n // Replacing the previous element\n if (videoElement) {\n videoElement.removeEventListener('encrypted', eventHandler);\n if (videoElement.setMediaKeys) {\n videoElement.setMediaKeys(null);\n }\n }\n\n videoElement = mediaElement;\n\n // Only if we are not detaching from the existing element\n if (videoElement) {\n videoElement.addEventListener('encrypted', eventHandler);\n if (videoElement.setMediaKeys && mediaKeys) {\n videoElement.setMediaKeys(mediaKeys);\n }\n }\n }\n\n function setServerCertificate(serverCertificate) {\n return new Promise((resolve, reject) => {\n mediaKeys.setServerCertificate(serverCertificate)\n .then(function () {\n logger.info('DRM: License server certificate successfully updated.');\n eventBus.trigger(events.SERVER_CERTIFICATE_UPDATED);\n resolve();\n })\n .catch((error) => {\n reject(error);\n eventBus.trigger(events.SERVER_CERTIFICATE_UPDATED, { error: new DashJSError(ProtectionErrors.SERVER_CERTIFICATE_UPDATED_ERROR_CODE, ProtectionErrors.SERVER_CERTIFICATE_UPDATED_ERROR_MESSAGE + error.name) });\n });\n })\n }\n\n /**\n * Create a key session, a session token and initialize a request by calling generateRequest\n * @param keySystemMetadata\n */\n function createKeySession(keySystemMetadata) {\n if (!keySystem || !mediaKeys) {\n throw new Error('Can not create sessions until you have selected a key system');\n }\n\n const mediaKeySession = mediaKeys.createSession(keySystemMetadata.sessionType);\n const sessionToken = _createSessionToken(mediaKeySession, keySystemMetadata);\n\n // The \"keyids\" type is used for Clearkey when keys are provided directly in the protection data and a request to a license server is not needed\n const dataType = keySystem.systemString === ProtectionConstants.CLEARKEY_KEYSTEM_STRING && (keySystemMetadata.initData || (keySystemMetadata.protData && keySystemMetadata.protData.clearkeys)) ? ProtectionConstants.INITIALIZATION_DATA_TYPE_KEYIDS : ProtectionConstants.INITIALIZATION_DATA_TYPE_CENC;\n\n mediaKeySession.generateRequest(dataType, keySystemMetadata.initData)\n .then(function () {\n logger.debug('DRM: Session created. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n })\n .catch(function (error) {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Error generating key request -- ' + error.name)\n });\n });\n }\n\n function updateKeySession(sessionToken, message) {\n const session = sessionToken.session;\n\n // Send our request to the key session\n if (protectionKeyController.isClearKey(keySystem)) {\n message = message.toJWK();\n }\n session.update(message)\n .then(() => {\n eventBus.trigger(events.KEY_SESSION_UPDATED);\n })\n .catch(function (error) {\n eventBus.trigger(events.KEY_ERROR, { error: new DashJSError(ProtectionErrors.MEDIA_KEYERR_CODE, 'Error sending update() message! ' + error.name, sessionToken) });\n });\n }\n\n function loadKeySession(keySystemMetadata) {\n if (!keySystem || !mediaKeys) {\n throw new Error('Can not load sessions until you have selected a key system');\n }\n\n const sessionId = keySystemMetadata.sessionId;\n\n // Check if session Id is not already loaded or loading\n for (let i = 0; i < sessionTokens.length; i++) {\n if (sessionId === sessionTokens[i].sessionId) {\n logger.warn('DRM: Ignoring session ID because we have already seen it!');\n return;\n }\n }\n\n const session = mediaKeys.createSession(keySystemMetadata.sessionType);\n const sessionToken = _createSessionToken(session, keySystemMetadata);\n sessionToken.hasTriggeredKeyStatusMapUpdate = true;\n\n // Load persisted session data into our newly created session object\n session.load(sessionId).then(function (success) {\n if (success) {\n logger.debug('DRM: Session loaded. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n } else {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Could not load session! Invalid Session ID (' + sessionId + ')')\n });\n }\n }).catch(function (error) {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Could not load session (' + sessionId + ')! ' + error.name)\n });\n });\n }\n\n function removeKeySession(sessionToken) {\n const session = sessionToken.session;\n\n session.remove().then(function () {\n logger.debug('DRM: Session removed. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_REMOVED, { data: sessionToken.getSessionId() });\n }, function (error) {\n eventBus.trigger(events.KEY_SESSION_REMOVED, {\n data: null,\n error: 'Error removing session (' + sessionToken.getSessionId() + '). ' + error.name\n });\n\n });\n }\n\n function closeKeySession(sessionToken) {\n // Send our request to the key session\n _closeKeySessionInternal(sessionToken).catch(function (error) {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CLOSED, {\n data: null,\n error: 'Error closing session (' + sessionToken.getSessionId() + ') ' + error.name\n });\n });\n }\n\n function _closeKeySessionInternal(sessionToken) {\n if (!sessionToken || !sessionToken.session) {\n return Promise.resolve;\n }\n const session = sessionToken.session;\n\n // Remove event listeners\n session.removeEventListener('keystatuseschange', sessionToken);\n session.removeEventListener('message', sessionToken);\n\n // Send our request to the key session\n return session.close();\n }\n\n // This is our main event handler for all desired HTMLMediaElement events\n // related to EME. These events are translated into our API-independent\n // versions of the same events\n function createEventHandler() {\n return {\n handleEvent: function (event) {\n switch (event.type) {\n case 'encrypted':\n if (event.initData) {\n let initData = ArrayBuffer.isView(event.initData) ? event.initData.buffer : event.initData;\n eventBus.trigger(events.NEED_KEY, { key: new NeedKey(initData, event.initDataType) });\n }\n break;\n }\n }\n };\n }\n\n function removeSession(token) {\n // Remove from our session list\n for (let i = 0; i < sessionTokens.length; i++) {\n if (sessionTokens[i] === token) {\n sessionTokens.splice(i, 1);\n break;\n }\n }\n }\n\n // Function to create our session token objects which manage the EME\n // MediaKeySession and session-specific event handler\n function _createSessionToken(session, keySystemMetadata) {\n const token = { // Implements SessionToken\n session: session,\n keyId: keySystemMetadata.keyId,\n normalizedKeyId: keySystemMetadata && keySystemMetadata.keyId && typeof keySystemMetadata.keyId === 'string' ? keySystemMetadata.keyId.replace(/-/g, '').toLowerCase() : '',\n initData: keySystemMetadata.initData,\n sessionId: keySystemMetadata.sessionId,\n sessionType: keySystemMetadata.sessionType,\n hasTriggeredKeyStatusMapUpdate: false,\n\n // This is our main event handler for all desired MediaKeySession events\n // These events are translated into our API-independent versions of the\n // same events\n handleEvent: function (event) {\n switch (event.type) {\n case 'keystatuseschange':\n this._onKeyStatusesChange(event);\n break;\n\n case 'message':\n this._onKeyMessage(event);\n break;\n }\n },\n\n _onKeyStatusesChange: function (event) {\n eventBus.trigger(events.KEY_STATUSES_CHANGED, { data: this });\n\n const keyStatuses = [];\n event.target.keyStatuses.forEach(function () {\n keyStatuses.push(_parseKeyStatus(arguments));\n });\n eventBus.trigger(events.INTERNAL_KEY_STATUSES_CHANGED, {\n parsedKeyStatuses: keyStatuses,\n sessionToken: token\n });\n },\n\n _onKeyMessage: function (event) {\n let message = ArrayBuffer.isView(event.message) ? event.message.buffer : event.message;\n eventBus.trigger(events.INTERNAL_KEY_MESSAGE, { data: new KeyMessage(this, message, undefined, event.messageType) });\n\n },\n\n getKeyId: function () {\n return this.keyId;\n },\n\n getSessionId: function () {\n return session.sessionId;\n },\n\n getSessionType: function () {\n return this.sessionType;\n },\n\n getExpirationTime: function () {\n return session.expiration;\n },\n\n getKeyStatuses: function () {\n return session.keyStatuses;\n },\n\n getUsable: function () {\n let usable = false;\n session.keyStatuses.forEach(function () {\n let keyStatus = _parseKeyStatus(arguments);\n if (keyStatus.status === ProtectionConstants.MEDIA_KEY_STATUSES.USABLE) {\n usable = true;\n }\n });\n return usable;\n }\n\n };\n\n // Add all event listeners\n session.addEventListener('keystatuseschange', token);\n session.addEventListener('message', token);\n\n // Register callback for session closed Promise\n session.closed.then(() => {\n removeSession(token);\n logger.debug('DRM: Session closed. SessionID = ' + token.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CLOSED, { data: token.getSessionId() });\n });\n\n // Add to our session list\n sessionTokens.push(token);\n\n return token;\n }\n\n function _parseKeyStatus(args) {\n // Edge and Chrome implement different version of keystatuses, param are not on same order\n let status, keyId;\n if (args && args.length > 0) {\n if (args[0]) {\n if (typeof args[0] === 'string') {\n status = args[0];\n } else {\n keyId = args[0];\n }\n }\n\n if (args[1]) {\n if (typeof args[1] === 'string') {\n status = args[1];\n } else {\n keyId = args[1];\n }\n }\n }\n return {\n status: status,\n keyId: keyId\n };\n }\n\n instance = {\n closeKeySession,\n createKeySession,\n getAllInitData,\n getSessionTokens,\n loadKeySession,\n removeKeySession,\n requestKeySystemAccess,\n reset,\n selectKeySystem,\n setMediaElement,\n setServerCertificate,\n stop,\n updateKeySession,\n };\n\n setup();\n\n return instance;\n}\n\nDefaultProtectionModel.__dashjs_factory_name = 'DefaultProtectionModel';\nexport default FactoryMaker.getClassFactory(DefaultProtectionModel);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Implementation of the EME APIs as of the 3 Feb 2014 state of the specification.\n *\n * Implemented by Internet Explorer 11 (Windows 8.1)\n *\n * @implements ProtectionModel\n * @class\n */\n\nimport ProtectionKeyController from '../controllers/ProtectionKeyController.js';\nimport NeedKey from '../vo/NeedKey.js';\nimport DashJSError from '../../vo/DashJSError.js';\nimport ProtectionErrors from '../errors/ProtectionErrors.js';\nimport KeyMessage from '../vo/KeyMessage.js';\nimport KeySystemConfiguration from '../vo/KeySystemConfiguration.js';\nimport KeySystemAccess from '../vo/KeySystemAccess.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\n\nfunction ProtectionModel_3Feb2014(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;//Need to pass in here so we can use same instance since this is optional module\n const events = config.events;\n const debug = config.debug;\n const api = config.api;\n\n let instance,\n logger,\n videoElement,\n keySystem,\n mediaKeys,\n keySystemAccess,\n sessionTokens,\n eventHandler,\n protectionKeyController;\n\n function setup() {\n logger = debug.getLogger(instance);\n videoElement = null;\n keySystem = null;\n mediaKeys = null;\n keySystemAccess = null;\n sessionTokens = [];\n protectionKeyController = ProtectionKeyController(context).getInstance();\n eventHandler = createEventHandler();\n }\n\n function reset() {\n try {\n for (let i = 0; i < sessionTokens.length; i++) {\n closeKeySession(sessionTokens[i]);\n }\n if (videoElement) {\n videoElement.removeEventListener(api.needkey, eventHandler);\n }\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n } catch (error) {\n eventBus.trigger(events.TEARDOWN_COMPLETE, { error: 'Error tearing down key sessions and MediaKeys! -- ' + error.message });\n }\n }\n\n function getAllInitData() {\n const retVal = [];\n for (let i = 0; i < sessionTokens.length; i++) {\n retVal.push(sessionTokens[i].initData);\n }\n return retVal;\n }\n\n function getSessionTokens() {\n return sessionTokens;\n }\n\n function requestKeySystemAccess(ksConfigurations) {\n return new Promise((resolve, reject) => {\n // Try key systems in order, first one with supported key system configuration\n // is used\n let found = false;\n for (let ksIdx = 0; ksIdx < ksConfigurations.length; ksIdx++) {\n const systemString = ksConfigurations[ksIdx].ks.systemString;\n const configs = ksConfigurations[ksIdx].configs;\n let supportedAudio = null;\n let supportedVideo = null;\n\n // Try key system configs in order, first one with supported audio/video\n // is used\n for (let configIdx = 0; configIdx < configs.length; configIdx++) {\n const audios = configs[configIdx].audioCapabilities;\n const videos = configs[configIdx].videoCapabilities;\n\n // Look for supported audio container/codecs\n if (audios && audios.length !== 0) {\n supportedAudio = []; // Indicates that we have a requested audio config\n for (let audioIdx = 0; audioIdx < audios.length; audioIdx++) {\n if (window[api.MediaKeys].isTypeSupported(systemString, audios[audioIdx].contentType)) {\n supportedAudio.push(audios[audioIdx]);\n }\n }\n }\n\n // Look for supported video container/codecs\n if (videos && videos.length !== 0) {\n supportedVideo = []; // Indicates that we have a requested video config\n for (let videoIdx = 0; videoIdx < videos.length; videoIdx++) {\n if (window[api.MediaKeys].isTypeSupported(systemString, videos[videoIdx].contentType)) {\n supportedVideo.push(videos[videoIdx]);\n }\n }\n }\n\n // No supported audio or video in this configuration OR we have\n // requested audio or video configuration that is not supported\n if ((!supportedAudio && !supportedVideo) ||\n (supportedAudio && supportedAudio.length === 0) ||\n (supportedVideo && supportedVideo.length === 0)) {\n continue;\n }\n\n // This configuration is supported\n found = true;\n const ksConfig = new KeySystemConfiguration(supportedAudio, supportedVideo);\n const ks = protectionKeyController.getKeySystemBySystemString(systemString);\n const keySystemAccess = new KeySystemAccess(ks, ksConfig);\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { data: keySystemAccess });\n resolve({ data: keySystemAccess });\n break;\n }\n }\n if (!found) {\n const errorMessage = 'Key system access denied! -- No valid audio/video content configurations detected!';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: errorMessage });\n reject({ error: errorMessage });\n }\n })\n }\n\n function selectKeySystem(ksAccess) {\n return new Promise((resolve, reject) => {\n try {\n mediaKeys = ksAccess.mediaKeys = new window[api.MediaKeys](ksAccess.keySystem.systemString);\n keySystem = ksAccess.keySystem;\n keySystemAccess = ksAccess;\n if (videoElement) {\n setMediaKeys();\n }\n resolve(keySystem);\n } catch (error) {\n reject({ error: 'Error selecting keys system (' + keySystem.systemString + ')! Could not create MediaKeys -- TODO' });\n }\n })\n }\n\n function setMediaElement(mediaElement) {\n if (videoElement === mediaElement) {\n return;\n }\n\n // Replacing the previous element\n if (videoElement) {\n videoElement.removeEventListener(api.needkey, eventHandler);\n }\n\n videoElement = mediaElement;\n\n // Only if we are not detaching from the existing element\n if (videoElement) {\n videoElement.addEventListener(api.needkey, eventHandler);\n if (mediaKeys) {\n setMediaKeys();\n }\n }\n }\n\n function createKeySession(ksInfo) {\n if (!keySystem || !mediaKeys || !keySystemAccess) {\n throw new Error('Can not create sessions until you have selected a key system');\n }\n\n // Use the first video capability for the contentType.\n // TODO: Not sure if there is a way to concatenate all capability data into a RFC6386-compatible format\n\n // If player is trying to playback Audio only stream - don't error out.\n let capabilities = null;\n\n if (keySystemAccess.ksConfiguration.videoCapabilities && keySystemAccess.ksConfiguration.videoCapabilities.length > 0) {\n capabilities = keySystemAccess.ksConfiguration.videoCapabilities[0];\n }\n\n if (capabilities === null && keySystemAccess.ksConfiguration.audioCapabilities && keySystemAccess.ksConfiguration.audioCapabilities.length > 0) {\n capabilities = keySystemAccess.ksConfiguration.audioCapabilities[0];\n }\n\n if (capabilities === null) {\n throw new Error('Can not create sessions for unknown content types.');\n }\n\n const contentType = capabilities.contentType;\n const session = mediaKeys.createSession(contentType, new Uint8Array(ksInfo.initData), ksInfo.cdmData ? new Uint8Array(ksInfo.cdmData) : null);\n const sessionToken = createSessionToken(session, ksInfo);\n\n // Add all event listeners\n session.addEventListener(api.error, sessionToken);\n session.addEventListener(api.message, sessionToken);\n session.addEventListener(api.ready, sessionToken);\n session.addEventListener(api.close, sessionToken);\n\n // Add to our session list\n sessionTokens.push(sessionToken);\n logger.debug('DRM: Session created. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n }\n\n function updateKeySession(sessionToken, message) {\n const session = sessionToken.session;\n\n if (!protectionKeyController.isClearKey(keySystem)) {\n // Send our request to the key session\n session.update(new Uint8Array(message));\n } else {\n // For clearkey, message is a ClearKeyKeySet\n session.update(new Uint8Array(message.toJWK()));\n }\n eventBus.trigger(events.KEY_SESSION_UPDATED);\n }\n\n /**\n * Close the given session and release all associated keys. Following\n * this call, the sessionToken becomes invalid\n *\n * @param {Object} sessionToken - the session token\n */\n function closeKeySession(sessionToken) {\n const session = sessionToken.session;\n\n // Remove event listeners\n session.removeEventListener(api.error, sessionToken);\n session.removeEventListener(api.message, sessionToken);\n session.removeEventListener(api.ready, sessionToken);\n session.removeEventListener(api.close, sessionToken);\n\n // Remove from our session list\n for (let i = 0; i < sessionTokens.length; i++) {\n if (sessionTokens[i] === sessionToken) {\n sessionTokens.splice(i, 1);\n break;\n }\n }\n\n // Send our request to the key session\n session[api.release]();\n }\n\n function setServerCertificate(/*serverCertificate*/) { /* Not supported */\n }\n\n function loadKeySession(/*ksInfo*/) { /* Not supported */\n }\n\n function removeKeySession(/*sessionToken*/) { /* Not supported */\n }\n\n\n function createEventHandler() {\n return {\n handleEvent: function (event) {\n switch (event.type) {\n\n case api.needkey:\n if (event.initData) {\n const initData = ArrayBuffer.isView(event.initData) ? event.initData.buffer : event.initData;\n eventBus.trigger(events.NEED_KEY, { key: new NeedKey(initData, ProtectionConstants.INITIALIZATION_DATA_TYPE_CENC) });\n }\n break;\n }\n }\n };\n }\n\n\n // IE11 does not let you set MediaKeys until it has entered a certain\n // readyState, so we need this logic to ensure we don't set the keys\n // too early\n function setMediaKeys() {\n let boundDoSetKeys = null;\n const doSetKeys = function () {\n videoElement.removeEventListener('loadedmetadata', boundDoSetKeys);\n videoElement[api.setMediaKeys](mediaKeys);\n eventBus.trigger(events.VIDEO_ELEMENT_SELECTED);\n };\n if (videoElement.readyState >= 1) {\n doSetKeys();\n } else {\n boundDoSetKeys = doSetKeys.bind(this);\n videoElement.addEventListener('loadedmetadata', boundDoSetKeys);\n }\n\n }\n\n // Function to create our session token objects which manage the EME\n // MediaKeySession and session-specific event handler\n function createSessionToken(keySession, ksInfo) {\n return {\n // Implements SessionToken\n session: keySession,\n keyId: ksInfo.keyId,\n normalizedKeyId: ksInfo && ksInfo.keyId && typeof ksInfo.keyId === 'string' ? ksInfo.keyId.replace(/-/g, '').toLowerCase() : '',\n initData: ksInfo.initData,\n hasTriggeredKeyStatusMapUpdate: false,\n\n getKeyId: function () {\n return this.keyId;\n },\n\n getSessionId: function () {\n return this.session.sessionId;\n },\n\n getExpirationTime: function () {\n return NaN;\n },\n\n getSessionType: function () {\n return 'temporary';\n },\n\n getKeyStatuses: function () {\n return {\n size: 0,\n has: () => {\n return false\n },\n get: () => {\n return undefined\n }\n }\n },\n\n // This is our main event handler for all desired MediaKeySession events\n // These events are translated into our API-independent versions of the\n // same events\n handleEvent: function (event) {\n switch (event.type) {\n case api.error:\n let errorStr = 'KeyError'; // TODO: Make better string from event\n eventBus.trigger(events.KEY_ERROR, { error: new DashJSError(ProtectionErrors.MEDIA_KEYERR_CODE, errorStr, this) });\n break;\n case api.message:\n let message = ArrayBuffer.isView(event.message) ? event.message.buffer : event.message;\n eventBus.trigger(events.INTERNAL_KEY_MESSAGE, { data: new KeyMessage(this, message, event.destinationURL) });\n break;\n case api.ready:\n logger.debug('DRM: Key added.');\n eventBus.trigger(events.KEY_ADDED);\n break;\n\n case api.close:\n logger.debug('DRM: Session closed. SessionID = ' + this.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CLOSED, { data: this.getSessionId() });\n break;\n }\n }\n };\n }\n\n instance = {\n getAllInitData,\n getSessionTokens,\n requestKeySystemAccess,\n selectKeySystem,\n setMediaElement,\n createKeySession,\n updateKeySession,\n closeKeySession,\n setServerCertificate,\n loadKeySession,\n removeKeySession,\n stop: reset,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nProtectionModel_3Feb2014.__dashjs_factory_name = 'ProtectionModel_3Feb2014';\nexport default FactoryMaker.getClassFactory(ProtectionModel_3Feb2014);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Initial implementation of EME\n *\n * Implemented by Google Chrome prior to v36\n *\n * @implements ProtectionModel\n * @class\n */\nimport ProtectionKeyController from '../controllers/ProtectionKeyController.js';\nimport NeedKey from '../vo/NeedKey.js';\nimport DashJSError from '../../vo/DashJSError.js';\nimport KeyMessage from '../vo/KeyMessage.js';\nimport KeySystemConfiguration from '../vo/KeySystemConfiguration.js';\nimport KeySystemAccess from '../vo/KeySystemAccess.js';\nimport ProtectionErrors from '../errors/ProtectionErrors.js';\nimport FactoryMaker from '../../../core/FactoryMaker.js';\nimport ProtectionConstants from '../../constants/ProtectionConstants.js';\n\nfunction ProtectionModel_01b(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;//Need to pass in here so we can use same instance since this is optional module\n const events = config.events;\n const debug = config.debug;\n const api = config.api;\n const errHandler = config.errHandler;\n\n let instance,\n logger,\n videoElement,\n keySystem,\n protectionKeyController,\n\n // With this version of the EME APIs, sessionIds are not assigned to\n // sessions until the first key message is received. We are assuming\n // that in the case of multiple sessions, key messages will be received\n // in the order that generateKeyRequest() is called.\n // Holding spot for newly-created sessions until we determine whether or\n // not the CDM supports sessionIds\n pendingSessions,\n\n // List of sessions that have been initialized. Only the first position will\n // be used in the case that the CDM does not support sessionIds\n sessionTokens,\n\n // Not all CDMs support the notion of sessionIds. Without sessionIds\n // there is no way for us to differentiate between sessions, therefore\n // we must only allow a single session. Once we receive the first key\n // message we can set this flag to determine if more sessions are allowed\n moreSessionsAllowed,\n\n // This is our main event handler for all desired HTMLMediaElement events\n // related to EME. These events are translated into our API-independent\n // versions of the same events\n eventHandler;\n\n function setup() {\n logger = debug.getLogger(instance);\n videoElement = null;\n keySystem = null;\n pendingSessions = [];\n sessionTokens = [];\n protectionKeyController = ProtectionKeyController(context).getInstance();\n eventHandler = createEventHandler();\n }\n\n function reset() {\n if (videoElement) {\n removeEventListeners();\n }\n for (let i = 0; i < sessionTokens.length; i++) {\n closeKeySession(sessionTokens[i]);\n }\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n }\n\n function getAllInitData() {\n const retVal = [];\n for (let i = 0; i < pendingSessions.length; i++) {\n retVal.push(pendingSessions[i].initData);\n }\n for (let i = 0; i < sessionTokens.length; i++) {\n retVal.push(sessionTokens[i].initData);\n }\n return retVal;\n }\n\n function getSessionTokens() {\n return sessionTokens.concat(pendingSessions);\n }\n\n function requestKeySystemAccess(ksConfigurations) {\n return new Promise((resolve, reject) => {\n let ve = videoElement;\n if (!ve) { // Must have a video element to do this capability tests\n ve = document.createElement('video');\n }\n\n // Try key systems in order, first one with supported key system configuration\n // is used\n let found = false;\n for (let ksIdx = 0; ksIdx < ksConfigurations.length; ksIdx++) {\n const systemString = ksConfigurations[ksIdx].ks.systemString;\n const configs = ksConfigurations[ksIdx].configs;\n let supportedAudio = null;\n let supportedVideo = null;\n\n // Try key system configs in order, first one with supported audio/video\n // is used\n for (let configIdx = 0; configIdx < configs.length; configIdx++) {\n //let audios = configs[configIdx].audioCapabilities;\n const videos = configs[configIdx].videoCapabilities;\n // Look for supported video container/codecs\n if (videos && videos.length !== 0) {\n supportedVideo = []; // Indicates that we have a requested video config\n for (let videoIdx = 0; videoIdx < videos.length; videoIdx++) {\n if (ve.canPlayType(videos[videoIdx].contentType, systemString) !== '') {\n supportedVideo.push(videos[videoIdx]);\n }\n }\n }\n\n // No supported audio or video in this configuration OR we have\n // requested audio or video configuration that is not supported\n if ((!supportedAudio && !supportedVideo) ||\n (supportedAudio && supportedAudio.length === 0) ||\n (supportedVideo && supportedVideo.length === 0)) {\n continue;\n }\n\n // This configuration is supported\n found = true;\n const ksConfig = new KeySystemConfiguration(supportedAudio, supportedVideo);\n const ks = protectionKeyController.getKeySystemBySystemString(systemString);\n const keySystemAccess = new KeySystemAccess(ks, ksConfig)\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { data: keySystemAccess });\n resolve({ data: keySystemAccess });\n break;\n }\n }\n if (!found) {\n const errorMessage = 'Key system access denied! -- No valid audio/video content configurations detected!';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: errorMessage });\n reject({ error: errorMessage });\n }\n })\n\n }\n\n function selectKeySystem(keySystemAccess) {\n keySystem = keySystemAccess.keySystem;\n return Promise.resolve(keySystem);\n }\n\n function setMediaElement(mediaElement) {\n if (videoElement === mediaElement) {\n return;\n }\n\n // Replacing the previous element\n if (videoElement) {\n removeEventListeners();\n\n // Close any open sessions - avoids memory leak on LG webOS 2016/2017 TVs\n for (var i = 0; i < sessionTokens.length; i++) {\n closeKeySession(sessionTokens[i]);\n }\n sessionTokens = [];\n }\n\n videoElement = mediaElement;\n\n // Only if we are not detaching from the existing element\n if (videoElement) {\n videoElement.addEventListener(api.keyerror, eventHandler);\n videoElement.addEventListener(api.needkey, eventHandler);\n videoElement.addEventListener(api.keymessage, eventHandler);\n videoElement.addEventListener(api.keyadded, eventHandler);\n eventBus.trigger(events.VIDEO_ELEMENT_SELECTED);\n }\n }\n\n function createKeySession(ksInfo) {\n if (!keySystem) {\n throw new Error('Can not create sessions until you have selected a key system');\n }\n\n // Determine if creating a new session is allowed\n if (moreSessionsAllowed || sessionTokens.length === 0) {\n const newSession = { // Implements SessionToken\n sessionId: null,\n keyId: ksInfo.keyId,\n normalizedKeyId: ksInfo && ksInfo.keyId && typeof ksInfo.keyId === 'string' ? ksInfo.keyId.replace(/-/g, '').toLowerCase() : '',\n initData: ksInfo.initData,\n hasTriggeredKeyStatusMapUpdate: false,\n\n getKeyId: function () {\n return this.keyId;\n },\n\n getSessionId: function () {\n return this.sessionId;\n },\n\n getExpirationTime: function () {\n return NaN;\n },\n\n getSessionType: function () {\n return 'temporary';\n },\n\n getKeyStatuses: function () {\n return {\n size: 0,\n has: () => {\n return false\n },\n get: () => {\n return undefined\n }\n }\n }\n };\n pendingSessions.push(newSession);\n\n // Send our request to the CDM\n videoElement[api.generateKeyRequest](keySystem.systemString, new Uint8Array(ksInfo.initData));\n\n return newSession;\n\n } else {\n throw new Error('Multiple sessions not allowed!');\n }\n\n }\n\n function updateKeySession(sessionToken, message) {\n const sessionId = sessionToken.sessionId;\n if (!protectionKeyController.isClearKey(keySystem)) {\n // Send our request to the CDM\n videoElement[api.addKey](keySystem.systemString,\n new Uint8Array(message), new Uint8Array(sessionToken.initData), sessionId);\n } else {\n // For clearkey, message is a ClearKeyKeySet\n for (let i = 0; i < message.keyPairs.length; i++) {\n videoElement[api.addKey](keySystem.systemString,\n message.keyPairs[i].key, message.keyPairs[i].keyID, sessionId);\n }\n }\n eventBus.trigger(events.KEY_SESSION_UPDATED);\n }\n\n function closeKeySession(sessionToken) {\n // Send our request to the CDM\n try {\n videoElement[api.cancelKeyRequest](keySystem.systemString, sessionToken.sessionId);\n } catch (error) {\n eventBus.trigger(events.KEY_SESSION_CLOSED, {\n data: null,\n error: 'Error closing session (' + sessionToken.sessionId + ') ' + error.message\n });\n }\n }\n\n function setServerCertificate(/*serverCertificate*/) { /* Not supported */\n }\n\n function loadKeySession(/*ksInfo*/) { /* Not supported */\n }\n\n function removeKeySession(/*sessionToken*/) { /* Not supported */\n }\n\n function createEventHandler() {\n return {\n handleEvent: function (event) {\n let sessionToken = null;\n switch (event.type) {\n case api.needkey:\n let initData = ArrayBuffer.isView(event.initData) ? event.initData.buffer : event.initData;\n eventBus.trigger(events.NEED_KEY, { key: new NeedKey(initData, ProtectionConstants.INITIALIZATION_DATA_TYPE_CENC) });\n break;\n\n case api.keyerror:\n sessionToken = findSessionByID(sessionTokens, event.sessionId);\n if (!sessionToken) {\n sessionToken = findSessionByID(pendingSessions, event.sessionId);\n }\n\n if (sessionToken) {\n let code = ProtectionErrors.MEDIA_KEYERR_CODE;\n let msg = '';\n switch (event.errorCode.code) {\n case 1:\n code = ProtectionErrors.MEDIA_KEYERR_UNKNOWN_CODE;\n msg += 'MEDIA_KEYERR_UNKNOWN - ' + ProtectionErrors.MEDIA_KEYERR_UNKNOWN_MESSAGE;\n break;\n case 2:\n code = ProtectionErrors.MEDIA_KEYERR_CLIENT_CODE;\n msg += 'MEDIA_KEYERR_CLIENT - ' + ProtectionErrors.MEDIA_KEYERR_CLIENT_MESSAGE;\n break;\n case 3:\n code = ProtectionErrors.MEDIA_KEYERR_SERVICE_CODE;\n msg += 'MEDIA_KEYERR_SERVICE - ' + ProtectionErrors.MEDIA_KEYERR_SERVICE_MESSAGE;\n break;\n case 4:\n code = ProtectionErrors.MEDIA_KEYERR_OUTPUT_CODE;\n msg += 'MEDIA_KEYERR_OUTPUT - ' + ProtectionErrors.MEDIA_KEYERR_OUTPUT_MESSAGE;\n break;\n case 5:\n code = ProtectionErrors.MEDIA_KEYERR_HARDWARECHANGE_CODE;\n msg += 'MEDIA_KEYERR_HARDWARECHANGE - ' + ProtectionErrors.MEDIA_KEYERR_HARDWARECHANGE_MESSAGE;\n break;\n case 6:\n code = ProtectionErrors.MEDIA_KEYERR_DOMAIN_CODE;\n msg += 'MEDIA_KEYERR_DOMAIN - ' + ProtectionErrors.MEDIA_KEYERR_DOMAIN_MESSAGE;\n break;\n }\n msg += ' System Code = ' + event.systemCode;\n // TODO: Build error string based on key error\n eventBus.trigger(events.KEY_ERROR, { error: new DashJSError(code, msg, sessionToken) });\n } else {\n logger.error('No session token found for key error');\n }\n break;\n\n case api.keyadded:\n sessionToken = findSessionByID(sessionTokens, event.sessionId);\n if (!sessionToken) {\n sessionToken = findSessionByID(pendingSessions, event.sessionId);\n }\n\n if (sessionToken) {\n logger.debug('DRM: Key added.');\n eventBus.trigger(events.KEY_ADDED, { data: sessionToken });//TODO not sure anything is using sessionToken? why there?\n } else {\n logger.debug('No session token found for key added');\n }\n break;\n\n case api.keymessage:\n // If this CDM does not support session IDs, we will be limited\n // to a single session\n moreSessionsAllowed = (event.sessionId !== null) && (event.sessionId !== undefined);\n\n // SessionIDs supported\n if (moreSessionsAllowed) {\n // Attempt to find an uninitialized token with this sessionId\n sessionToken = findSessionByID(sessionTokens, event.sessionId);\n if (!sessionToken && pendingSessions.length > 0) {\n\n // This is the first message for our latest session, so set the\n // sessionId and add it to our list\n sessionToken = pendingSessions.shift();\n sessionTokens.push(sessionToken);\n sessionToken.sessionId = event.sessionId;\n\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n }\n } else if (pendingSessions.length > 0) { // SessionIDs not supported\n sessionToken = pendingSessions.shift();\n sessionTokens.push(sessionToken);\n\n if (pendingSessions.length !== 0) {\n errHandler.error(new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_ERROR_CODE, ProtectionErrors.MEDIA_KEY_MESSAGE_ERROR_MESSAGE));\n }\n }\n\n if (sessionToken) {\n let message = ArrayBuffer.isView(event.message) ? event.message.buffer : event.message;\n\n // For ClearKey, the spec mandates that you pass this message to the\n // addKey method, so we always save it to the token since there is no\n // way to tell which key system is in use\n sessionToken.keyMessage = message;\n eventBus.trigger(events.INTERNAL_KEY_MESSAGE, { data: new KeyMessage(sessionToken, message, event.defaultURL) });\n\n } else {\n logger.warn('No session token found for key message');\n }\n break;\n }\n }\n };\n }\n\n\n /**\n * Helper function to retrieve the stored session token based on a given\n * sessionId value\n *\n * @param {Array} sessionArray - the array of sessions to search\n * @param {*} sessionId - the sessionId to search for\n * @returns {*} the session token with the given sessionId\n */\n function findSessionByID(sessionArray, sessionId) {\n if (!sessionId || !sessionArray) {\n return null;\n } else {\n const len = sessionArray.length;\n for (let i = 0; i < len; i++) {\n if (sessionArray[i].sessionId == sessionId) {\n return sessionArray[i];\n }\n }\n return null;\n }\n }\n\n function removeEventListeners() {\n videoElement.removeEventListener(api.keyerror, eventHandler);\n videoElement.removeEventListener(api.needkey, eventHandler);\n videoElement.removeEventListener(api.keymessage, eventHandler);\n videoElement.removeEventListener(api.keyadded, eventHandler);\n }\n\n instance = {\n getAllInitData,\n getSessionTokens,\n requestKeySystemAccess,\n selectKeySystem,\n setMediaElement,\n createKeySession,\n updateKeySession,\n closeKeySession,\n setServerCertificate,\n loadKeySession,\n removeKeySession,\n stop: reset,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nProtectionModel_01b.__dashjs_factory_name = 'ProtectionModel_01b';\nexport default FactoryMaker.getClassFactory(ProtectionModel_01b);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ProtectionController from './controllers/ProtectionController.js';\nimport ProtectionKeyController from './controllers/ProtectionKeyController.js';\nimport ProtectionEvents from './ProtectionEvents.js';\nimport ProtectionErrors from './errors/ProtectionErrors.js';\nimport DefaultProtectionModel from './models/DefaultProtectionModel.js';\nimport ProtectionModel_3Feb2014 from './models/ProtectionModel_3Feb2014.js';\nimport ProtectionModel_01b from './models/ProtectionModel_01b.js';\n\nconst APIS_ProtectionModel_01b = [\n // Un-prefixed as per spec\n {\n // Video Element\n generateKeyRequest: 'generateKeyRequest',\n addKey: 'addKey',\n cancelKeyRequest: 'cancelKeyRequest',\n\n // Events\n needkey: 'needkey',\n keyerror: 'keyerror',\n keyadded: 'keyadded',\n keymessage: 'keymessage'\n },\n // Webkit-prefixed (early Chrome versions and Chrome with EME disabled in chrome://flags)\n {\n // Video Element\n generateKeyRequest: 'webkitGenerateKeyRequest',\n addKey: 'webkitAddKey',\n cancelKeyRequest: 'webkitCancelKeyRequest',\n\n // Events\n needkey: 'webkitneedkey',\n keyerror: 'webkitkeyerror',\n keyadded: 'webkitkeyadded',\n keymessage: 'webkitkeymessage'\n }\n];\n\nconst APIS_ProtectionModel_3Feb2014 = [\n // Un-prefixed as per spec\n // Chrome 38-39 (and some earlier versions) with chrome://flags -- Enable Encrypted Media Extensions\n {\n // Video Element\n setMediaKeys: 'setMediaKeys',\n // MediaKeys\n MediaKeys: 'MediaKeys',\n // MediaKeySession\n release: 'close',\n\n // Events\n needkey: 'needkey',\n error: 'keyerror',\n message: 'keymessage',\n ready: 'keyadded',\n close: 'keyclose'\n },\n // MS-prefixed (IE11, Windows 8.1)\n {\n // Video Element\n setMediaKeys: 'msSetMediaKeys',\n // MediaKeys\n MediaKeys: 'MSMediaKeys',\n // MediaKeySession\n release: 'close',\n // Events\n needkey: 'msneedkey',\n error: 'mskeyerror',\n message: 'mskeymessage',\n ready: 'mskeyadded',\n close: 'mskeyclose'\n }\n];\n\nfunction Protection() {\n let instance;\n const context = this.context;\n\n /**\n * Create a ProtectionController and associated ProtectionModel for use with\n * a single piece of content.\n *\n * @param {Object} config\n * @return {ProtectionController} protection controller\n *\n */\n function createProtectionSystem(config) {\n let controller = null;\n\n const protectionKeyController = ProtectionKeyController(context).getInstance();\n protectionKeyController.setConfig({ debug: config.debug, BASE64: config.BASE64, settings: config.settings });\n protectionKeyController.initialize();\n\n let protectionModel = _getProtectionModel(config);\n\n if (protectionModel) {\n controller = ProtectionController(context).create({\n BASE64: config.BASE64,\n cmcdModel: config.cmcdModel,\n constants: config.constants,\n customParametersModel: config.customParametersModel,\n debug: config.debug,\n eventBus: config.eventBus,\n events: config.events,\n protectionKeyController: protectionKeyController,\n protectionModel: protectionModel,\n settings: config.settings\n });\n config.capabilities.setEncryptedMediaSupported(true);\n }\n return controller;\n }\n\n function _getProtectionModel(config) {\n const debug = config.debug;\n const logger = debug.getLogger(instance);\n const eventBus = config.eventBus;\n const errHandler = config.errHandler;\n const videoElement = config.videoModel ? config.videoModel.getElement() : null;\n\n if ((!videoElement || videoElement.onencrypted !== undefined) &&\n (!videoElement || videoElement.mediaKeys !== undefined)) {\n logger.info('EME detected on this user agent! (DefaultProtectionModel');\n return DefaultProtectionModel(context).create({\n debug: debug,\n eventBus: eventBus,\n events: config.events\n });\n } else if (_getAPI(videoElement, APIS_ProtectionModel_3Feb2014)) {\n logger.info('EME detected on this user agent! (ProtectionModel_3Feb2014)');\n return ProtectionModel_3Feb2014(context).create({\n debug: debug,\n eventBus: eventBus,\n events: config.events,\n api: _getAPI(videoElement, APIS_ProtectionModel_3Feb2014)\n });\n } else if (_getAPI(videoElement, APIS_ProtectionModel_01b)) {\n logger.info('EME detected on this user agent! (ProtectionModel_01b)');\n return ProtectionModel_01b(context).create({\n debug: debug,\n eventBus: eventBus,\n errHandler: errHandler,\n events: config.events,\n api: _getAPI(videoElement, APIS_ProtectionModel_01b)\n });\n } else {\n logger.warn('No supported version of EME detected on this user agent! - Attempts to play encrypted content will fail!');\n return null;\n }\n }\n\n function _getAPI(videoElement, apis) {\n for (let i = 0; i < apis.length; i++) {\n const api = apis[i];\n // detect if api is supported by browser\n // check only first function in api -> should be fine\n if (typeof videoElement[api[Object.keys(api)[0]]] !== 'function') {\n continue;\n }\n\n return api;\n }\n\n return null;\n }\n\n instance = {\n createProtectionSystem\n };\n\n return instance;\n}\n\nProtection.__dashjs_factory_name = 'Protection';\nconst factory = dashjs.FactoryMaker.getClassFactory(Protection);\nfactory.events = ProtectionEvents;\nfactory.errors = ProtectionErrors;\ndashjs.FactoryMaker.updateClassFactory(Protection.__dashjs_factory_name, factory);\nexport default factory;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../../core/events/EventsBase.js';\n\n/**\n * @class\n */\nclass ProtectionEvents extends EventsBase {\n /**\n * @description Public facing external events to be used when including protection package.\n * All public events will be aggregated into the MediaPlayerEvents Class and can be accessed\n * via MediaPlayer.events. public_ is the prefix that we use to move event names to MediaPlayerEvents.\n */\n constructor() {\n super();\n\n /**\n * Event ID for events delivered when the protection set receives\n * a key message from the CDM\n *\n * @ignore\n */\n this.INTERNAL_KEY_MESSAGE = 'internalKeyMessage';\n\n /**\n * Event ID for events delivered when the status of one decryption keys has changed\n * @ignore\n */\n this.INTERNAL_KEY_STATUSES_CHANGED = 'internalkeyStatusesChanged';\n\n /**\n * Event ID for events delivered when a new key has been added\n *\n * @constant\n * @deprecated The latest versions of the EME specification no longer\n * use this event. {@MediaPlayer.models.protectionModel.eventList.KEY_STATUSES_CHANGED}\n * is preferred.\n * @event ProtectionEvents#KEY_ADDED\n */\n this.KEY_ADDED = 'public_keyAdded';\n /**\n * Event ID for events delivered when an error is encountered by the CDM\n * while processing a license server response message\n * @event ProtectionEvents#KEY_ERROR\n */\n this.KEY_ERROR = 'public_keyError';\n\n /**\n * Event ID for events delivered when the protection set receives\n * a key message from the CDM\n * @event ProtectionEvents#KEY_MESSAGE\n */\n this.KEY_MESSAGE = 'public_keyMessage';\n\n /**\n * Event ID for events delivered when a key session close\n * process has completed\n * @event ProtectionEvents#KEY_SESSION_CLOSED\n */\n this.KEY_SESSION_CLOSED = 'public_keySessionClosed';\n\n /**\n * Event ID for events delivered when a new key sessions creation\n * process has completed\n * @event ProtectionEvents#KEY_SESSION_CREATED\n */\n this.KEY_SESSION_CREATED = 'public_keySessionCreated';\n\n /**\n * Event ID for events delivered when a key session removal\n * process has completed\n * @event ProtectionEvents#KEY_SESSION_REMOVED\n */\n this.KEY_SESSION_REMOVED = 'public_keySessionRemoved';\n\n /**\n * Event ID for events delivered when the status of one or more\n * decryption keys has changed\n * @event ProtectionEvents#KEY_STATUSES_CHANGED\n */\n this.KEY_STATUSES_CHANGED = 'public_keyStatusesChanged';\n\n /**\n * Triggered when the key statuses Map() of the ProtectionController was updated. This happens after there is a keystatuseschange.\n * The event can be used as an indicator when to refresh the list of possible Representations\n * @event ProtectionEvents#KEY_STATUSES_MAP_UPDATED\n */\n this.KEY_STATUSES_MAP_UPDATED = 'keyStatusesMapUpdated';\n\n /**\n * Event ID for events delivered when a key system access procedure\n * has completed\n * @event ProtectionEvents#KEY_SYSTEM_ACCESS_COMPLETE\n */\n this.KEY_SYSTEM_ACCESS_COMPLETE = 'public_keySystemAccessComplete';\n\n /**\n * Event ID for events delivered when a key system selection procedure\n * completes\n * @event ProtectionEvents#KEY_SYSTEM_SELECTED\n */\n this.KEY_SYSTEM_SELECTED = 'public_keySystemSelected';\n\n /**\n * Event ID for events delivered when a license request procedure\n * has completed\n * @event ProtectionEvents#LICENSE_REQUEST_COMPLETE\n */\n this.LICENSE_REQUEST_COMPLETE = 'public_licenseRequestComplete';\n\n /**\n * Sending a license rquest\n * @event ProtectionEvents#LICENSE_REQUEST_SENDING\n */\n this.LICENSE_REQUEST_SENDING = 'public_licenseRequestSending';\n\n /**\n * Event ID for needkey/encrypted events\n * @ignore\n */\n this.NEED_KEY = 'needkey';\n\n /**\n * Event ID for events delivered when the Protection system is detected and created.\n * @event ProtectionEvents#PROTECTION_CREATED\n */\n this.PROTECTION_CREATED = 'public_protectioncreated';\n\n /**\n * Event ID for events delivered when the Protection system is destroyed.\n * @event ProtectionEvents#PROTECTION_DESTROYED\n */\n this.PROTECTION_DESTROYED = 'public_protectiondestroyed';\n\n /**\n * Event ID for events delivered when a new server certificate has\n * been delivered to the CDM\n * @ignore\n */\n this.SERVER_CERTIFICATE_UPDATED = 'serverCertificateUpdated';\n\n /**\n * Event ID for events delivered when the process of shutting down\n * a protection set has completed\n * @ignore\n */\n this.TEARDOWN_COMPLETE = 'protectionTeardownComplete';\n\n /**\n * Event ID for events delivered when a HTMLMediaElement has been\n * associated with the protection set\n * @ignore\n */\n this.VIDEO_ELEMENT_SELECTED = 'videoElementSelected';\n\n /**\n * Triggered when the key session has been updated successfully\n * @ignore\n */\n this.KEY_SESSION_UPDATED = 'public_keySessionUpdated';\n }\n}\n\nlet protectionEvents = new ProtectionEvents();\nexport default protectionEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ErrorsBase from '../../../core/errors/ErrorsBase.js';\n\n/**\n * @class\n */\nclass ProtectionErrors extends ErrorsBase {\n constructor() {\n super();\n\n /**\n * Generid key Error code\n */\n this.MEDIA_KEYERR_CODE = 100;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_UNKNOWN_CODE = 101;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_CLIENT_CODE = 102;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_SERVICE_CODE = 103;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_OUTPUT_CODE = 104;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_HARDWARECHANGE_CODE = 105;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_DOMAIN_CODE = 106;\n\n /**\n * Error code returned when an error occured in keymessage event for ProtectionModel_01b\n */\n this.MEDIA_KEY_MESSAGE_ERROR_CODE = 107;\n /**\n * Error code returned when challenge is invalid in keymessage event (event triggered by CDM)\n */\n this.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_CODE = 108;\n /**\n * Error code returned when License server certificate has not been successfully updated\n */\n this.SERVER_CERTIFICATE_UPDATED_ERROR_CODE = 109;\n /**\n * Error code returned when license validity has expired\n */\n this.KEY_STATUS_CHANGED_EXPIRED_ERROR_CODE = 110;\n /**\n * Error code returned when no licenser url is defined\n */\n this.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_CODE = 111;\n /**\n * Error code returned when key system access is denied\n */\n this.KEY_SYSTEM_ACCESS_DENIED_ERROR_CODE = 112;\n /**\n * Error code returned when key session has not been successfully created\n */\n this.KEY_SESSION_CREATED_ERROR_CODE = 113;\n /**\n * Error code returned when license request failed after a keymessage event has been triggered\n */\n this.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE = 114;\n\n this.MEDIA_KEYERR_UNKNOWN_MESSAGE = 'An unspecified error occurred. This value is used for errors that don\\'t match any of the other codes.';\n this.MEDIA_KEYERR_CLIENT_MESSAGE = 'The Key System could not be installed or updated.';\n this.MEDIA_KEYERR_SERVICE_MESSAGE = 'The message passed into update indicated an error from the license service.';\n this.MEDIA_KEYERR_OUTPUT_MESSAGE = 'There is no available output device with the required characteristics for the content protection system.';\n this.MEDIA_KEYERR_HARDWARECHANGE_MESSAGE = 'A hardware configuration change caused a content protection error.';\n this.MEDIA_KEYERR_DOMAIN_MESSAGE = 'An error occurred in a multi-device domain licensing configuration. The most common error is a failure to join the domain.';\n this.MEDIA_KEY_MESSAGE_ERROR_MESSAGE = 'Multiple key sessions were creates with a user-agent that does not support sessionIDs!! Unpredictable behavior ahead!';\n this.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_MESSAGE = 'DRM: Empty key message from CDM';\n this.SERVER_CERTIFICATE_UPDATED_ERROR_MESSAGE = 'Error updating server certificate -- ';\n this.KEY_STATUS_CHANGED_EXPIRED_ERROR_MESSAGE = 'DRM: KeyStatusChange error! -- License has expired';\n this.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_MESSAGE = 'DRM: No license server URL specified!';\n this.KEY_SYSTEM_ACCESS_DENIED_ERROR_MESSAGE = 'DRM: KeySystem Access Denied! -- ';\n this.KEY_SESSION_CREATED_ERROR_MESSAGE = 'DRM: unable to create session! --';\n this.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE = 'DRM: licenser error! --';\n }\n}\n\nlet protectionErrors = new ProtectionErrors();\nexport default protectionErrors;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport Constants from '../constants/Constants.js';\nimport ProtectionConstants from '../constants/ProtectionConstants.js';\nimport ObjectUtils from './ObjectUtils.js';\nimport Debug from '../../core/Debug.js';\n\nexport function supportsMediaSource() {\n let hasManagedMediaSource = ('ManagedMediaSource' in window)\n let hasWebKit = ('WebKitMediaSource' in window);\n let hasMediaSource = ('MediaSource' in window);\n\n return (hasManagedMediaSource || hasWebKit || hasMediaSource);\n}\n\nfunction Capabilities() {\n\n let instance,\n settings,\n protectionController,\n testedCodecConfigurations,\n encryptedMediaSupported,\n logger;\n\n const context = this.context;\n const objectUtils = ObjectUtils(context).getInstance();\n\n function setup() {\n encryptedMediaSupported = false;\n testedCodecConfigurations = [];\n logger = Debug(context).getInstance().getLogger(instance);\n }\n\n function setConfig(config) {\n if (!config) {\n return;\n }\n\n if (config.settings) {\n settings = config.settings;\n }\n\n if (config.protectionController) {\n protectionController = config.protectionController;\n }\n }\n\n function setProtectionController(data) {\n protectionController = data;\n }\n\n function areKeyIdsUsable(mediaInfo) {\n if (!protectionController || !mediaInfo || !mediaInfo.normalizedKeyIds || mediaInfo.normalizedKeyIds.size === 0) {\n return true\n }\n\n return protectionController.areKeyIdsUsable(mediaInfo.normalizedKeyIds)\n }\n\n function areKeyIdsExpired(mediaInfo) {\n if (!protectionController || !mediaInfo || !mediaInfo.normalizedKeyIds || mediaInfo.normalizedKeyIds.size === 0) {\n return false\n }\n\n return protectionController.areKeyIdsExpired(mediaInfo.normalizedKeyIds)\n }\n\n function isProtectionCompatible(previousStreamInfo, newStreamInfo) {\n if (!newStreamInfo) {\n return true;\n }\n return !(!previousStreamInfo.isEncrypted && newStreamInfo.isEncrypted);\n }\n\n /**\n * Returns whether Encrypted Media Extensions are supported on this\n * user agent\n *\n * @return {boolean} true if EME is supported, false otherwise\n */\n function supportsEncryptedMedia() {\n return encryptedMediaSupported;\n }\n\n /**\n * Checks whether SourceBuffer.changeType() is available\n * @return {boolean} true is changeType() is available\n */\n function supportsChangeType() {\n return !!window.SourceBuffer && !!SourceBuffer.prototype && !!SourceBuffer.prototype.changeType;\n }\n\n /**\n * @param {boolean} value\n */\n function setEncryptedMediaSupported(value) {\n encryptedMediaSupported = value;\n }\n\n /**\n * Check if a codec is supported by the MediaSource. We use the MediaCapabilities API or the MSE to check.\n * @param {object} basicConfiguration\n * @param {string} type\n * @return {Promise<>}\n */\n function runCodecSupportCheck(basicConfiguration, type) {\n\n if (type !== Constants.AUDIO && type !== Constants.VIDEO) {\n return Promise.resolve();\n }\n\n const configurationsToTest = _getEnhancedConfigurations(basicConfiguration, type);\n\n if (_canUseMediaCapabilitiesApi(basicConfiguration, type)) {\n return _checkCodecWithMediaCapabilities(configurationsToTest);\n }\n\n _checkCodecWithMse(configurationsToTest);\n return Promise.resolve();\n }\n\n /**\n * Checks whether a codec is supported according to the previously tested configurations.\n * Note that you need to call runCodecSupportCheck() first to populate the testedCodecConfigurations array.\n * This function only validates codec support based on previously tested configurations.\n * @param basicConfiguration\n * @param type\n * @returns {*|boolean}\n */\n function isCodecSupportedBasedOnTestedConfigurations(basicConfiguration, type) {\n if (!basicConfiguration || !basicConfiguration.codec || (basicConfiguration.isSupported === false)) {\n return false;\n }\n\n const configurationsToTest = _getEnhancedConfigurations(basicConfiguration, type);\n\n const testedConfigurations = configurationsToTest\n .map((config) => {\n return _getTestedCodecConfiguration(config, type);\n })\n .filter((config) => {\n return config !== null && config !== undefined;\n })\n\n if (testedConfigurations && testedConfigurations.length > 0) {\n return _isConfigSupported(testedConfigurations)\n }\n\n return true\n }\n\n /**\n * MediaCapabilitiesAPI throws an error if one of the attribute is missing. We only use it if we have all required information.\n * @return {boolean}\n * @private\n */\n function _canUseMediaCapabilitiesApi(basicConfiguration, type) {\n return _isMediaCapabilitiesApiSupported() && ((basicConfiguration.codec && type === Constants.AUDIO) || (type === Constants.VIDEO && basicConfiguration.codec && basicConfiguration.width && basicConfiguration.height && basicConfiguration.bitrate && basicConfiguration.framerate));\n }\n\n function _isMediaCapabilitiesApiSupported() {\n return settings.get().streaming.capabilities.useMediaCapabilitiesApi && navigator.mediaCapabilities && navigator.mediaCapabilities.decodingInfo\n }\n\n\n /**\n * Check codec support using the MSE\n * @param {object} configurationsToTest\n * @private\n */\n function _checkCodecWithMse(configurationsToTest) {\n if (!configurationsToTest || !configurationsToTest.length) {\n return;\n }\n\n // We only need one config here as we can not add any DRM configuration to the test\n const configurationToTest = configurationsToTest[0];\n\n const alreadyTestedConfiguration = _getTestedCodecConfiguration(configurationToTest);\n if (alreadyTestedConfiguration) {\n return\n }\n\n let decodingInfo = {\n supported: false\n }\n\n if ('ManagedMediaSource' in window && ManagedMediaSource.isTypeSupported(configurationToTest.mediaSourceCodecString)) {\n decodingInfo.supported = true;\n } else if ('MediaSource' in window && MediaSource.isTypeSupported(configurationToTest.mediaSourceCodecString)) {\n decodingInfo.supported = true;\n } else if ('WebKitMediaSource' in window && WebKitMediaSource.isTypeSupported(configurationToTest.mediaSourceCodecString)) {\n decodingInfo.supported = true;\n }\n\n configurationToTest.decodingInfo = decodingInfo;\n testedCodecConfigurations.push(configurationToTest);\n }\n\n\n /**\n * Check codec support using the MediaCapabilities API\n * @param {object} configurationsToTest\n * @return {Promise}\n * @private\n */\n function _checkCodecWithMediaCapabilities(configurationsToTest) {\n return new Promise((resolve) => {\n\n if (!configurationsToTest || configurationsToTest.length === 0) {\n resolve();\n return;\n }\n\n const promises = configurationsToTest.map((configuration) => {\n return _checkSingleConfigurationWithMediaCapabilities(configuration);\n })\n\n Promise.allSettled(promises)\n .then(() => {\n resolve();\n })\n .catch((e) => {\n logger.error(e);\n resolve();\n })\n });\n }\n\n function _getEnhancedConfigurations(inputConfig, type) {\n let configuration\n\n if (type === Constants.VIDEO) {\n configuration = _getGenericMediaCapabilitiesVideoConfig(inputConfig)\n } else if (type === Constants.AUDIO) {\n configuration = _getGenericMediaCapabilitiesAudioConfig(inputConfig)\n }\n\n configuration[type].contentType = inputConfig.codec;\n configuration[type].bitrate = parseInt(inputConfig.bitrate);\n configuration.type = 'media-source';\n\n let mediaSourceCodecString = inputConfig.codec;\n if (inputConfig.width && inputConfig.height) {\n mediaSourceCodecString += ';width=\"' + inputConfig.width + '\";height=\"' + inputConfig.height + '\"';\n }\n configuration.mediaSourceCodecString = mediaSourceCodecString;\n\n return _enhanceGenericConfigurationWithKeySystemConfiguration(configuration, inputConfig, type)\n }\n\n function _enhanceGenericConfigurationWithKeySystemConfiguration(genericConfiguration, inputConfig, type) {\n if (!inputConfig || !inputConfig.keySystemsMetadata || inputConfig.keySystemsMetadata.length === 0) {\n return [genericConfiguration];\n }\n\n return inputConfig.keySystemsMetadata.map((keySystemMetadata) => {\n const curr = { ...genericConfiguration };\n if (keySystemMetadata.ks) {\n curr.keySystemConfiguration = {};\n if (keySystemMetadata.ks.systemString) {\n curr.keySystemConfiguration.keySystem = keySystemMetadata.ks.systemString;\n }\n\n let robustnessLevel = ''\n if (keySystemMetadata.ks.systemString === ProtectionConstants.WIDEVINE_KEYSTEM_STRING) {\n robustnessLevel = ProtectionConstants.ROBUSTNESS_STRINGS.WIDEVINE.SW_SECURE_CRYPTO;\n }\n const protData = keySystemMetadata.protData\n const audioRobustness = (protData && protData.audioRobustness && protData.audioRobustness.length > 0) ? protData.audioRobustness : robustnessLevel;\n const videoRobustness = (protData && protData.videoRobustness && protData.videoRobustness.length > 0) ? protData.videoRobustness : robustnessLevel;\n\n if (type === Constants.AUDIO) {\n curr.keySystemConfiguration[type] = { robustness: audioRobustness }\n } else if (type === Constants.VIDEO) {\n curr.keySystemConfiguration[type] = { robustness: videoRobustness }\n }\n }\n return curr\n })\n }\n\n function _checkSingleConfigurationWithMediaCapabilities(configuration) {\n return new Promise((resolve) => {\n const alreadyTestedConfiguration = _getTestedCodecConfiguration(configuration);\n if (alreadyTestedConfiguration) {\n resolve();\n return\n }\n\n navigator.mediaCapabilities.decodingInfo(configuration)\n .then((decodingInfo) => {\n configuration.decodingInfo = decodingInfo;\n testedCodecConfigurations.push(configuration);\n resolve();\n })\n .catch((e) => {\n configuration.decodingInfo = { supported: false };\n testedCodecConfigurations.push(configuration);\n logger.error(e);\n resolve();\n })\n })\n }\n\n function _isConfigSupported(testedConfigurations) {\n return testedConfigurations.some((testedConfiguration) => {\n return testedConfiguration && testedConfiguration.decodingInfo && testedConfiguration.decodingInfo.supported\n });\n }\n\n function _getTestedCodecConfiguration(configuration) {\n if (!testedCodecConfigurations || testedCodecConfigurations.length === 0 || !configuration) {\n return\n }\n\n return testedCodecConfigurations.find((current) => {\n const audioEqual = _isConfigEqual(configuration, current, Constants.AUDIO);\n const videoEqual = _isConfigEqual(configuration, current, Constants.VIDEO);\n const keySystemEqual = _isConfigEqual(configuration, current, 'keySystemConfiguration');\n\n return audioEqual && videoEqual && keySystemEqual\n })\n }\n\n function _isConfigEqual(configuration, current, attribute) {\n\n // Config not present in both of them\n if (!configuration[attribute] && !current[attribute]) {\n return true\n }\n\n // Config present in both we need to compare\n if (configuration[attribute] && current[attribute]) {\n return objectUtils.areEqual(configuration[attribute], current[attribute])\n }\n\n return false\n }\n\n function _getGenericMediaCapabilitiesVideoConfig(inputConfig) {\n const configuration = {\n video: {}\n };\n\n if (!inputConfig) {\n return configuration;\n }\n if (inputConfig.width) {\n configuration.video.width = inputConfig.width;\n }\n if (inputConfig.height) {\n configuration.video.height = inputConfig.height;\n }\n if (inputConfig.framerate) {\n configuration.video.framerate = parseFloat(inputConfig.framerate)\n }\n if (inputConfig.hdrMetadataType) {\n configuration.video.hdrMetadataType = inputConfig.hdrMetadataType;\n }\n if (inputConfig.colorGamut) {\n configuration.video.colorGamut = inputConfig.colorGamut;\n }\n if (inputConfig.transferFunction) {\n configuration.video.transferFunction = inputConfig.transferFunction;\n }\n\n return configuration\n }\n\n function _getGenericMediaCapabilitiesAudioConfig(inputConfig) {\n const configuration = {\n audio: {}\n };\n\n if (inputConfig.samplerate) {\n configuration.audio.samplerate = inputConfig.samplerate;\n }\n\n return configuration\n }\n\n /**\n * Add additional descriptors to list of descriptors,\n * avoid duplicated entries\n * @param {array} props\n * @param {array} newProps\n * @return {array}\n * @private\n */\n function _addProperties(props, newProps) {\n props = props.filter(p => {\n return !(p.schemeIdUri && (newProps.some(np => np.schemeIdUri === p.schemeIdUri)));\n });\n props.push(...newProps);\n\n return props;\n }\n\n /**\n * Check if a specific EssentialProperty is supported\n * @param {DescriptorType} ep\n * @return {boolean}\n */\n function supportsEssentialProperty(ep) {\n let supportedEssentialProps = settings.get().streaming.capabilities.supportedEssentialProperties;\n\n // we already took care of these descriptors with the codecs check\n // let's bypass them here\n if (settings.get().streaming.capabilities.useMediaCapabilitiesApi && settings.get().streaming.capabilities.filterVideoColorimetryEssentialProperties) {\n supportedEssentialProps = _addProperties(supportedEssentialProps,\n [\n { schemeIdUri: Constants.COLOUR_PRIMARIES_SCHEME_ID_URI },\n { schemeIdUri: Constants.MATRIX_COEFFICIENTS_SCHEME_ID_URI },\n { schemeIdUri: Constants.TRANSFER_CHARACTERISTICS_SCHEME_ID_URI }\n ]\n );\n }\n if (settings.get().streaming.capabilities.useMediaCapabilitiesApi && settings.get().streaming.capabilities.filterHDRMetadataFormatEssentialProperties) {\n supportedEssentialProps = _addProperties(supportedEssentialProps, [{ schemeIdUri: Constants.HDR_METADATA_FORMAT_SCHEME_ID_URI }]);\n }\n\n try {\n return ep.inArray(supportedEssentialProps);\n } catch (e) {\n return true;\n }\n }\n\n instance = {\n areKeyIdsExpired,\n areKeyIdsUsable,\n isCodecSupportedBasedOnTestedConfigurations,\n isProtectionCompatible,\n runCodecSupportCheck,\n setConfig,\n setEncryptedMediaSupported,\n setProtectionController,\n supportsChangeType,\n supportsEncryptedMedia,\n supportsEssentialProperty,\n supportsMediaSource,\n };\n\n setup();\n\n return instance;\n}\n\nCapabilities.__dashjs_factory_name = 'Capabilities';\nexport default FactoryMaker.getSingletonFactory(Capabilities);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport {checkInteger} from './SupervisorTools.js';\n\nfunction CustomTimeRanges(/*config*/) {\n let customTimeRangeArray = [];\n let length = 0;\n\n function add(start, end) {\n let i;\n\n // eslint-disable-next-line curly\n for (i = 0; (i < this.customTimeRangeArray.length) && (start > this.customTimeRangeArray[i].start); i++) ;\n\n this.customTimeRangeArray.splice(i, 0, { start: start, end: end });\n\n for (i = 0; i < this.customTimeRangeArray.length - 1; i++) {\n if (this.mergeRanges(i, i + 1)) {\n i--;\n }\n }\n this.length = this.customTimeRangeArray.length;\n }\n\n function clear() {\n this.customTimeRangeArray = [];\n this.length = 0;\n }\n\n function remove(start, end) {\n for (let i = 0; i < this.customTimeRangeArray.length; i++) {\n if (start <= this.customTimeRangeArray[i].start && end >= this.customTimeRangeArray[i].end) {\n // |--------------Range i-------|\n //|---------------Range to remove ---------------|\n // or\n //|--------------Range i-------|\n //|--------------Range to remove ---------------|\n // or\n // |--------------Range i-------|\n //|--------------Range to remove ---------------|\n this.customTimeRangeArray.splice(i, 1);\n i--;\n\n } else if (start > this.customTimeRangeArray[i].start && end < this.customTimeRangeArray[i].end) {\n //|-----------------Range i----------------|\n // |-------Range to remove -----|\n this.customTimeRangeArray.splice(i + 1, 0, { start: end, end: this.customTimeRangeArray[i].end });\n this.customTimeRangeArray[i].end = start;\n break;\n } else if (start > this.customTimeRangeArray[i].start && start < this.customTimeRangeArray[i].end) {\n //|-----------Range i----------|\n // |---------Range to remove --------|\n // or\n //|-----------------Range i----------------|\n // |-------Range to remove -----|\n this.customTimeRangeArray[i].end = start;\n } else if (end > this.customTimeRangeArray[i].start && end < this.customTimeRangeArray[i].end) {\n // |-----------Range i----------|\n //|---------Range to remove --------|\n // or\n //|-----------------Range i----------------|\n //|-------Range to remove -----|\n this.customTimeRangeArray[i].start = end;\n }\n }\n\n this.length = this.customTimeRangeArray.length;\n }\n\n function mergeRanges(rangeIndex1, rangeIndex2) {\n let range1 = this.customTimeRangeArray[rangeIndex1];\n let range2 = this.customTimeRangeArray[rangeIndex2];\n\n if (range1.start <= range2.start && range2.start <= range1.end && range1.end <= range2.end) {\n //|-----------Range1----------|\n // |-----------Range2----------|\n range1.end = range2.end;\n this.customTimeRangeArray.splice(rangeIndex2, 1);\n return true;\n\n } else if (range2.start <= range1.start && range1.start <= range2.end && range2.end <= range1.end) {\n // |-----------Range1----------|\n //|-----------Range2----------|\n range1.start = range2.start;\n this.customTimeRangeArray.splice(rangeIndex2, 1);\n return true;\n } else if (range2.start <= range1.start && range1.start <= range2.end && range1.end <= range2.end) {\n // |--------Range1-------|\n //|---------------Range2--------------|\n this.customTimeRangeArray.splice(rangeIndex1, 1);\n return true;\n } else if (range1.start <= range2.start && range2.start <= range1.end && range2.end <= range1.end) {\n //|-----------------Range1--------------|\n // |-----------Range2----------|\n this.customTimeRangeArray.splice(rangeIndex2, 1);\n return true;\n }\n return false;\n }\n\n function start(index) {\n checkInteger(index);\n\n if (index >= this.customTimeRangeArray.length || index < 0) {\n return NaN;\n }\n\n return this.customTimeRangeArray[index].start;\n }\n\n function end(index) {\n checkInteger(index);\n\n if (index >= this.customTimeRangeArray.length || index < 0) {\n return NaN;\n }\n\n return this.customTimeRangeArray[index].end;\n }\n\n return {\n customTimeRangeArray: customTimeRangeArray,\n length: length,\n add: add,\n clear: clear,\n remove: remove,\n mergeRanges: mergeRanges,\n start: start,\n end: end\n };\n}\n\nCustomTimeRanges.__dashjs_factory_name = 'CustomTimeRanges';\nexport default FactoryMaker.getClassFactory(CustomTimeRanges);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FactoryMaker from '../../core/FactoryMaker.js';\nimport deepEqual from 'fast-deep-equal';\n\n/**\n * @module ObjectUtils\n * @ignore\n * @description Provides utility functions for objects\n */\nfunction ObjectUtils() {\n\n let instance;\n\n /**\n * Returns true if objects are equal\n * @return {boolean}\n * @param {object} obj1\n * @param {object} obj2\n * @memberof module:ObjectUtils\n * @instance\n */\n function areEqual(obj1, obj2) {\n return deepEqual(obj1, obj2);\n }\n\n instance = {\n areEqual\n };\n\n return instance;\n}\n\nObjectUtils.__dashjs_factory_name = 'ObjectUtils';\nexport default FactoryMaker.getSingletonFactory(ObjectUtils);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport Constants from '../constants/Constants.js';\n\nexport function checkParameterType(parameter, type) {\n if (typeof parameter !== type) {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n}\n\nexport function checkInteger(parameter) {\n const isInt = parameter !== null && !isNaN(parameter) && (parameter % 1 === 0);\n\n if (!isInt) {\n throw Constants.BAD_ARGUMENT_ERROR + ' : argument is not an integer';\n }\n}\n\nexport function checkRange(parameter, min, max) {\n if (parameter < min || parameter > max) {\n throw Constants.BAD_ARGUMENT_ERROR + ' : argument out of range';\n }\n}\n\nexport function checkIsVideoOrAudioType(type) {\n if (typeof type !== 'string' || (type !== Constants.AUDIO && type !== Constants.VIDEO)) {\n throw Constants.BAD_ARGUMENT_ERROR;\n }\n}\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass DashJSError {\n constructor(code, message, data) {\n this.code = code || null;\n this.message = message || null;\n this.data = data || null;\n }\n}\n\nexport default DashJSError;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc This Object holds reference to the HTTPRequest for manifest, fragment and xlink loading.\n * Members which are not defined in ISO23009-1 Annex D should be prefixed by a _ so that they are ignored\n * by Metrics Reporting code.\n * @ignore\n */\nclass HTTPRequest {\n /**\n * @class\n */\n constructor() {\n /**\n * Identifier of the TCP connection on which the HTTP request was sent.\n * @public\n */\n this.tcpid = null;\n /**\n * This is an optional parameter and should not be included in HTTP request/response transactions for progressive download.\n * The type of the request:\n * - MPD\n * - XLink expansion\n * - Initialization Fragment\n * - Index Fragment\n * - Media Fragment\n * - Bitstream Switching Fragment\n * - other\n * @public\n */\n this.type = null;\n /**\n * The original URL (before any redirects or failures)\n * @public\n */\n this.url = null;\n /**\n * The actual URL requested, if different from above\n * @public\n */\n this.actualurl = null;\n /**\n * The contents of the byte-range-spec part of the HTTP Range header.\n * @public\n */\n this.range = null;\n /**\n * Real-Time | The real time at which the request was sent.\n * @public\n */\n this.trequest = null;\n /**\n * Real-Time | The real time at which the first byte of the response was received.\n * @public\n */\n this.tresponse = null;\n /**\n * The HTTP response code.\n * @public\n */\n this.responsecode = null;\n /**\n * The duration of the throughput trace intervals (ms), for successful requests only.\n * @public\n */\n this.interval = null;\n /**\n * Throughput traces, for successful requests only.\n * @public\n */\n this.trace = [];\n /**\n * The CMSD static and dynamic values retrieved from CMSD response headers.\n * @public\n */\n this.cmsd = null;\n\n /**\n * Type of stream (\"audio\" | \"video\" etc..)\n * @public\n */\n this._stream = null;\n /**\n * Real-Time | The real time at which the request finished.\n * @public\n */\n this._tfinish = null;\n /**\n * The duration of the media requests, if available, in seconds.\n * @public\n */\n this._mediaduration = null;\n /**\n * The media segment quality\n * @public\n */\n this._quality = null;\n /**\n * all the response headers from request.\n * @public\n */\n this._responseHeaders = null;\n /**\n * The selected service location for the request. string.\n * @public\n */\n this._serviceLocation = null;\n /**\n * The type of the loader that was used. Distinguish between fetch loader and xhr loader\n */\n this._fileLoaderType = null;\n /**\n * The values derived from the ResourceTimingAPI.\n */\n this._resourceTimingValues = null;\n }\n}\n\n/**\n * @classdesc This Object holds reference to the progress of the HTTPRequest.\n * @ignore\n */\nclass HTTPRequestTrace {\n /**\n * @class\n */\n constructor() {\n /**\n * Real-Time | Measurement stream start.\n * @public\n */\n this.s = null;\n /**\n * Measurement stream duration (ms).\n * @public\n */\n this.d = null;\n /**\n * List of integers counting the bytes received in each trace interval within the measurement stream.\n * @public\n */\n this.b = [];\n }\n}\n\nHTTPRequest.GET = 'GET';\nHTTPRequest.HEAD = 'HEAD';\nHTTPRequest.MPD_TYPE = 'MPD';\nHTTPRequest.XLINK_EXPANSION_TYPE = 'XLinkExpansion';\nHTTPRequest.INIT_SEGMENT_TYPE = 'InitializationSegment';\nHTTPRequest.INDEX_SEGMENT_TYPE = 'IndexSegment';\nHTTPRequest.MEDIA_SEGMENT_TYPE = 'MediaSegment';\nHTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE = 'BitstreamSwitchingSegment';\nHTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE = 'FragmentInfoSegment';\nHTTPRequest.DVB_REPORTING_TYPE = 'DVBReporting';\nHTTPRequest.LICENSE = 'license';\nHTTPRequest.CONTENT_STEERING_TYPE = 'ContentSteering';\nHTTPRequest.OTHER_TYPE = 'other';\n\nexport {HTTPRequest, HTTPRequestTrace};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","import MediaPlayer from './MediaPlayer.js';\n\nfunction MediaPlayerFactory() {\n /**\n * mime-type identifier for any source content to be accepted as a dash manifest by the create() method.\n * @type {string}\n */\n const SUPPORTED_MIME_TYPE = 'application/dash+xml';\n\n let logger;\n\n /**\n * A new MediaPlayer is instantiated for the supplied videoElement and optional source and context. If no context is provided,\n * a default DashContext is used. If no source is provided, the videoElement is interrogated to extract the first source whose\n * type is application/dash+xml.\n * The autoplay property of the videoElement is preserved. Any preload attribute is ignored. This method should be called after the page onLoad event is dispatched.\n * @param {HTMLMediaElement} video\n * @param {HTMLSourceElement} source\n * @param {Object} context\n * @returns {MediaPlayer|null}\n */\n function create(video, source, context) {\n if (!video || !(/^VIDEO$/i).test(video.nodeName)) {\n return null;\n }\n\n if (video._dashjs_player) {\n return video._dashjs_player;\n }\n\n let player;\n let videoID = (video.id || video.name || 'video element');\n\n source = source || [].slice.call(video.querySelectorAll('source')).filter(function (s) {\n return s.type == SUPPORTED_MIME_TYPE;\n })[0];\n if (!source && video.src) {\n source = document.createElement('source');\n source.src = video.src;\n } else if (!source && !video.src) {\n return null;\n }\n\n context = context || {};\n player = MediaPlayer(context).create();\n player.initialize(video, source.src, video.autoplay);\n\n if (!logger) {\n logger = player.getDebug().getLogger();\n }\n logger.debug('Converted ' + videoID + ' to dash.js player and added content: ' + source.src);\n\n // Store a reference to the player on the video element so it can be gotten at for debugging and so we know its\n // already been setup.\n video._dashjs_player = player;\n\n return player;\n }\n\n /**\n * Searches the provided scope for all instances of the indicated selector. If no scope is provided, document is used. If no selector is\n * specified, [data-dashjs-player] is used. The declarative setup also looks for source elements with the type attribute set to 'application/dash+xml'.\n * It then looks for those video elements which have a source element defined with a type matching 'application/dash+xml'.\n * A new MediaPlayer is instantiated for each matching video element and the appropriate source is assigned.\n * The autoplay property of the video element is preserved. Any preload attribute is ignored. This method should be called after the page onLoad event is dispatched.\n * Returns an array holding all the MediaPlayer instances that were added by this method.\n * @param {string} selector - CSS selector\n * @param {Object} scope\n * @returns {Array} an array of MediaPlayer objects\n */\n function createAll(selector, scope) {\n let aPlayers = [];\n selector = selector || '[data-dashjs-player]';\n scope = scope || document;\n let videos = scope.querySelectorAll(selector);\n for (let i = 0; i < videos.length; i++) {\n let player = create(videos[i], null);\n aPlayers.push(player);\n }\n\n let sources = scope.querySelectorAll('source[type=\"' + SUPPORTED_MIME_TYPE + '\"]');\n for (let i = 0; i < sources.length; i++) {\n let video = findVideo(sources[i]);\n let player = create(video, null);\n aPlayers.push(player);\n }\n\n return aPlayers;\n }\n\n function findVideo(el) {\n if ((/^VIDEO$/i).test(el.nodeName)) {\n return el;\n } else {\n return findVideo(el.parentNode);\n }\n }\n\n return {\n create: create,\n createAll: createAll\n };\n}\n\nlet instance = MediaPlayerFactory();\nlet loadInterval;\n\nfunction loadHandler() {\n window.removeEventListener('load', loadHandler);\n instance.createAll();\n}\n\nfunction loadIntervalHandler() {\n if (window.dashjs) {\n window.clearInterval(loadInterval);\n instance.createAll();\n }\n}\n\nlet avoidAutoCreate = typeof window !== 'undefined' && window && window.dashjs && window.dashjs.skipAutoCreate;\n\nif (!avoidAutoCreate && typeof window !== 'undefined' && window && window.addEventListener) {\n if (window.document.readyState === 'complete') {\n if (window.dashjs) {\n instance.createAll();\n } else {\n // If loaded asynchronously, window.readyState may be 'complete' even if dashjs hasn't loaded yet\n loadInterval = window.setInterval(loadIntervalHandler, 500);\n }\n } else {\n window.addEventListener('load', loadHandler);\n }\n}\n\nexport default instance;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport { MediaPlayer } from './index_mediaplayerOnly.js';\nimport MetricsReporting from './src/streaming/metrics/MetricsReporting.js';\nimport Protection from './src/streaming/protection/Protection.js';\nimport MediaPlayerFactory from './src/streaming/MediaPlayerFactory.js';\nimport Debug from './src/core/Debug.js';\nimport Constants from './src/streaming/constants/Constants.js';\nimport { supportsMediaSource } from './src/streaming/utils/Capabilities.js';\n\ndashjs.Protection = Protection;\ndashjs.MetricsReporting = MetricsReporting;\ndashjs.MediaPlayerFactory = MediaPlayerFactory;\ndashjs.Debug = Debug;\ndashjs.supportsMediaSource = supportsMediaSource;\ndashjs.Constants = Constants;\n\nexport default dashjs;\nexport { MediaPlayer, Protection, MetricsReporting, MediaPlayerFactory, Debug, supportsMediaSource, Constants };\n"],"names":["root","factory","exports","module","define","amd","self","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","base64","require","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","string","encoding","isEncoding","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","Math","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","e","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","Infinity","leadSurrogate","split","base64clean","src","dst","constructor","name","alphabet","table","i16","ISOBoxer","arrayBuffer","ISOFile","parse","parser","ISOBox","_boxProcessors","parent","newBox","create","append","createBox","version","flags","Utils","dataViewToString","dataView","impliedEncoding","TextDecoder","decode","getUint8","utf8ToByteArray","u","TextEncoder","encode","appendBox","box","_offset","_cursor","_root","_raw","_parent","index","boxes","splice","parseBuffer","addBoxProcessor","createFile","createFullBox","Cursor","initialOffset","DataView","fetch","result","fetchAll","returnEarly","_sweep","getLength","_rawo","_parseBox","_boxContainers","_procField","_parsing","_readField","_writeField","_procFieldArray","_procFullBox","_procEntries","fn","_procSubEntries","entry","_procEntryField","_procSubBoxes","_readUint","_readInt","_readTemplate","_readTerminatedString","_readString","_readData","_readUTF8String","_readUTF8TerminatedString","getInt8","getInt16","getInt32","s1","s2","getUint16","getUint32","char","l","_incomplete","largesize","_parseContainerBox","_data","_parseFullBox","_writeData","_writeInt","setInt8","setInt16","setInt32","floor","setUint32","_writeUint","setUint8","setUint16","_writeString","_writeTerminatedString","_writeTemplate","pre","post","_writeUTF8String","entry_count","nbCompatibleBrands","is_group_label","language","num_entities_in_group","DataSize","sample_count","reference_count","reference","reference_type","referenced_size","sap","starts_with_SAP","SAP_type","SAP_delta_time","subsegment_count","subsegment","ranges_count","range","subsample_count","subsample","reserved","length_size_of_traf_num","length_size_of_trun_num","length_size_of_sample_num","number_of_entry","sample","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","once","emitter","Promise","resolve","reject","errorListener","err","removeListener","resolver","eventTargetAgnosticAddListener","handler","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","newListener","emit","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","removeEventListener","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","message","context","listeners","addListener","prependListener","prependOnceListener","position","originalListener","shift","pop","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","equal","RegExp","source","hasOwnProperty","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","abs","log","LN2","sax","strict","opt","SAXParser","SAXStream","createStream","MAX_BUFFER_LENGTH","Stream","buffers","clearBuffers","q","bufferCheckPosition","lowercase","lowercasetags","looseCase","tags","closed","closedRoot","sawRoot","tag","noscript","S","BEGIN","strictEntities","ENTITIES","XML_ENTITIES","attribList","xmlns","ns","rootNS","trackPosition","line","column","EVENTS","o","F","chunk","charAt","BEGIN_WHITESPACE","beginWhiteSpace","TEXT","starti","textNode","substring","not","whitespace","strictFail","TEXT_ENTITY","OPEN_WAKA","startTagPosition","SCRIPT","SCRIPT_ENDING","script","CLOSE_TAG","SGML_DECL","sgmlDecl","is","nameStart","OPEN_TAG","tagName","PROC_INST","procInstName","procInstBody","pad","toUpperCase","CDATA","emitNode","cdata","COMMENT","comment","DOCTYPE","doctype","quote","SGML_DECL_QUOTED","DOCTYPE_DTD","DOCTYPE_QUOTED","DOCTYPE_DTD_QUOTED","COMMENT_ENDING","COMMENT_ENDED","textopts","CDATA_ENDING","CDATA_ENDING_2","PROC_INST_ENDING","PROC_INST_BODY","body","nameBody","newTag","openTag","OPEN_TAG_SLASH","ATTRIB","closeTag","attribName","attribValue","ATTRIB_NAME","ATTRIB_VALUE","attrib","ATTRIB_NAME_SAW_WHITE","attributes","ATTRIB_VALUE_QUOTED","ATTRIB_VALUE_UNQUOTED","ATTRIB_VALUE_ENTITY_Q","ATTRIB_VALUE_CLOSED","attribEnd","ATTRIB_VALUE_ENTITY_U","CLOSE_TAG_SAW_WHITE","returnState","parseEntity","entity","entityBody","entityStart","maxAllowed","maxActual","closeText","checkBufferLength","resume","close","flush","ex","streamWraps","filter","ev","_parser","writable","readable","me","onend","onerror","_decoder","forEach","h","configurable","SD","number","letter","XML_NAMESPACE","XMLNS_NAMESPACE","xml","charClass","reduce","charclass","isRegExp","match","stringFromCharCode","fromCodePoint","STATE","COMMENT_STARTING","event","nodeType","text","normalize","qname","attribute","qualName","prefix","local","qn","selfClosing","uri","JSON","stringify","p","nv","isSelfClosing","t","closeTo","entityLC","numStr","highSurrogate","lowSurrogate","codeUnits","imscDoc","imscNames","imscStyles","imscUtils","cleanRubyContainers","element","rubyval","styleAttrs","byName","ruby","isrubycontainer","kind","contents","resolveTiming","doc","prev_sibling","isinseq","timeContainer","implicit_begin","begin","explicit_begin","implicit_end","set_i","sets","content_i","POSITIVE_INFINITY","explicit_end","explicit_dur","_registerEvent","ForeignElement","node","TT","head","Head","styling","Styling","layout","Layout","styles","initials","Style","id","styleRefs","Initial","regions","Image","ContentElement","IdentifiedElement","LayoutElement","regionID","StyledElement","AnimatedElement","ContainerElement","TimedElement","Body","Div","P","Span","AnonymousSpan","Br","Region","Set","elementGetXMLID","elementGetStyleRefs","style","elementGetStyles","errorHandler","sa","byQName","zIndex","reportWarning","reportError","findAttribute","parseTimeExpression","tickRate","effectiveFrameRate","r","exec","parseFloat","mergeChainedStyles","sref","mergeStylesIfNotPresent","mergeReferencedStyles","stylerefs","styleattrs","from_styles","into_styles","sname","msg","reportFatal","fatal","searchval","cur","curval","fromXML","xmlstring","metadataHandler","estack","xmllangstack","xmlspacestack","metadata_depth","onclosetag","sid","cs","ns_tt","onCloseTag","ontext","initFromText","onText","onopentag","xmlspace","xmllang","initFromNode","ini","bi","backgroundImage","img","nb","st","attrs","onOpenTag","hasRegions","dr","createDefaultRegion","lang","region_i","cr","ns_ttp","extractCellResolution","cellLength","ComputedLength","frtr","fps_attr","fps","frm_attr","frm","efps","tr","trattr","extractFrameAndTickRate","aspectRatio","ar","ns_ittp","rslt","extractAspectRatio","attr","ns_tts","parseLength","extractExtent","pxLength","unit","dimensions","elem","b_i","e_i","getMediaTimeRange","getMediaTimeEvents","ns_itts","ns_ebutts","region","elementGetRegionID","dur","processTiming","tc","elementGetTimeContainer","space","browserIsFirefox","test","navigator","userAgent","imscHTML","processElement","dom_parent","isd_element","isd_parent","document","createElement","imgResolver","height","regionH","width","regionW","appendChild","margin","wdir","writingMode","ipd","bpd","pdir","direction","STYLING_MAP_DEFS","sm","map","proc_e","lp","linePadding","isZero","plength","toUsedLength","padmeasure","ceil","paddingLeft","paddingRight","paddingTop","paddingBottom","mra","multiRowAlign","display","textAlign","rr","rubyReserve","fillLineGap","flg","te","textEmphasis","textCombine","textContent","_isd_element","applyTextEmphasis","cbuf","cc","span","k","linelist","constructLineList","lineList","rt1","rt2","rb","fs","RUBYPOSITION_PROP","RUBYPOSITION_ISWK","fontSize","sib","rbc","localName","setProperty","item","getPropertyValue","elements","parentElement","insertBefore","applyRubyReserve","applyRubyPosition","TEXTEMPHASISPOSITION_PROP","applyTextEmphasisOutside","br","lastnode","nextSibling","applyMultiRowAlign","pospadpxlen","negpadpxlen","se","start_elem","ee","end_elem","elementBoundingRect","getBoundingClientRect","marginLeft","marginRight","marginTop","marginBottom","applyLinePadding","previous","spanMerge","thisNode","ancestorBackgroundColor","clearTheseBackgrounds","el","getSpanAncestorColor","backgroundColor","mergeSpans","par_edges","rect2edges","par_before","par_after","sign","frontier","padding","round","after","before","applyFillLineGap","enableRollUp","displayAlign","RegionPBuffer","currentISDState","previousISDState","plist","body_elem","firstElementChild","bottom","transition","transform","ancestorList","isAncestor","nodeName","first","second","styleName","removeChild","rect","edges","top","left","right","llist","bgcolor","before1","after1","before2","after2","curbgcolor","childElementCount","bpd_dir","ipd_dir","child","firstChild","Node","ELEMENT_NODE","TEXTEMPHASISSTYLE_PROP","dom_element","symbol","HTMLStylingMapDefinition","qName","mapFunc","render","isd","eheight","ewidth","displayForcedOnlyMode","clientHeight","clientWidth","twidth","rootcontainer","color","flexDirection","justifyContent","hdelta","wdelta","unique","fi","fontFamily","angle","fontStyle","fontWeight","lineHeight","opacity","overflow","rubyAlign","ta","textDecoration","txto","textOutline","textShadow","to_color","x_off","y_off","b_radius","textCombineUpright","ub","unicodeBidi","visibility","whiteSpace","STYLMAP_BY_QNAME","window","getComputedStyle","documentElement","imscISD","generateISD","tt","ISD","activeRegions","initialShowBackground","showBackground","initialbackgroundColor","layout_child","clone","prop","filteredElement","isdProcessContentElement","_rcs_na_styles","inherited_region_id","associated_region_id","ISDContentElement","spec_attr","wm","all","ps","es","outs","inherit","parent_fs","rw","rh","ruby_fs","ivs","origin","iv","initial","piv","z","compute","cstyle","qnameb","na","rsp","rubyPosition","da","applies","elist","constructSpanList","trimmed_text","prev_element","next_element","collapseLWSP","pruneEmptySpans","region_id","ttelem","renderHTML","ns_xml","ns_smpte","StylingAttributeDefinition","initialValue","appliesTo","isInherit","isAnimatable","parseFunc","computeFunc","animatable","parseColor","toComputedLength","ffs","lh","extent","parsePosition","v","edge","thickness","parseTextShadow","shadow","HEX_COLOR_RE","DEC_COLOR_RE","DEC_COLORA_RE","NAMED_COLOR","transparent","black","silver","gray","white","maroon","red","purple","fuchsia","magenta","green","lime","olive","yellow","navy","blue","teal","aqua","cyan","nc","LENGTH_RE","shadows","out_shadow","isKeyword","comp","lengthVal","lengthUnit","emLength","percentLength","ctor","superCtor","super_","TempCtor","assertPath","path","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","posix","cwd","resolvedPath","resolvedAbsolute","process","isAbsolute","trailingSeparator","joined","relative","to","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","_makeLong","dirname","hasRoot","matchedSlash","basename","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","format","pathObject","sep","base","_format","delimiter","win32","EE","inherits","Readable","Writable","Duplex","Transform","PassThrough","finished","pipeline","pipe","dest","options","ondata","pause","ondrain","_isStdio","onclose","didOnEnd","destroy","cleanup","codes","createErrorType","Base","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","__proto__","oneOf","expected","thing","determiner","search","this_len","endsWith","objectKeys","method","allowHalfOpen","_writableState","ended","nextTick","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","_transform","cb","ReadableState","debug","EElistenerCount","OurUint8Array","global","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","stream","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","decoder","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","enc","content","next","clear","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","needDrain","pipeOnDrain","dests","wrap","_this","asyncIterator","_fromList","iterable","opts","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","done","_write","err2","CorkedRequest","finish","corkReq","callback","pendingcb","onCorkedFinish","corkedRequestsFree","WritableState","realHasInstance","internalUtil","deprecate","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","current","_","hasInstance","object","writeAfterEnd","validChunk","newChunk","decodeChunk","last","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","input","prim","hint","_toPrimitive","_toPropertyKey","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","promise","lastPromise","then","wrapForNext","_this2","_Object$create","iterator","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","_defineProperties","props","descriptor","custom","instance","Constructor","_classCallCheck","tail","protoProps","hasStrings","_getString","_getBuffer","depth","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","noop","eos","called","_len","_key","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","streams","popCallback","destroys","destroyer","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","total","utf8CheckIncomplete","copyProps","SafeBuffer","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","enumerize","enums","has","str1","str2","lowerize","rgxMapper","ua","arrays","matches","regex","strMapper","windowsVersionMap","regexes","browser","cpu","device","engine","EDGE","os","UAParser","extensions","getResult","_navigator","_ua","_uach","userAgentData","_rgxmap","mergedRegexes","extend","_isSelfNav","getBrowser","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","mobile","standalone","maxTouchPoints","getEngine","_engine","getOS","_os","platform","getUA","setUA","CPU","DEVICE","ENGINE","OS","$","jQuery","Zepto","config","localStorage","trace","dashjs","MediaPlayer","FactoryMaker","Debug","Version","getVersionString","eventBus","EventBus","getInstance","settings","logFn","showLogTimestamp","showCalleeName","startTime","getLogFn","params","doLog","_len2","_key2","_len3","_key3","info","_len4","_key4","_len5","_key5","level","logTime","Date","getTime","getClassName","getType","_len6","_key6","logLevel","dispatchEvent","trigger","Events","LOG","getLogger","setLogTimestampVisible","setCalleeNameVisible","__dashjs_factory_name","getSingletonFactory","LOG_LEVEL_NONE","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARNING","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG","updateSingletonFactory","handlers","_commonOn","scope","executeOnlyOnce","priority","getHandlerIdx","getStreamId","streamId","mediaType","mode","some","idx","payload","filters","handlersToRemove","MediaPlayerEvents","EVENT_MODE_ON_RECEIVE","reset","EVENT_PRIORITY_LOW","EVENT_PRIORITY_HIGH","singletonContexts","singletonFactories","classFactories","getSingletonInstance","className","getFactoryByName","factoriesArray","updateFactory","merge","classConstructor","classInstance","extensionObject","extension","override","childInstance","setSingletonInstance","deleteSingletonInstances","getSingletonFactoryByName","getClassFactory","getClassFactoryByName","updateClassFactory","Settings","DISPATCH_KEY_MAP","SETTING_UPDATED_LIVE_DELAY","SETTING_UPDATED_LIVE_DELAY_FRAGMENT_COUNT","SETTING_UPDATED_CATCHUP_ENABLED","SETTING_UPDATED_PLAYBACK_RATE_MIN","SETTING_UPDATED_PLAYBACK_RATE_MAX","SETTING_UPDATED_ABR_ACTIVE_RULES","SETTING_UPDATED_MAX_BITRATE","SETTING_UPDATED_MIN_BITRATE","defaultSettings","streaming","abandonLoadTimeout","wallclockTimeUpdateInterval","manifestUpdateRetryInterval","liveUpdateTimeThresholdInMilliseconds","cacheInitSegments","applyServiceDescription","applyProducerReferenceTime","applyContentSteering","enableManifestDurationMismatchFix","parseInbandPrft","enableManifestTimescaleMismatchFix","capabilities","filterUnsupportedEssentialProperties","supportedEssentialProperties","schemeIdUri","Constants","FONT_DOWNLOAD_DVB_SCHEME","COLOUR_PRIMARIES_SCHEME_ID_URI","URL_QUERY_INFO_SCHEME","EXT_URL_QUERY_INFO_SCHEME","MATRIX_COEFFICIENTS_SCHEME_ID_URI","TRANSFER_CHARACTERISTICS_SCHEME_ID_URI","THUMBNAILS_SCHEME_ID_URIS","ep","useMediaCapabilitiesApi","filterVideoColorimetryEssentialProperties","filterHDRMetadataFormatEssentialProperties","eventControllerRefreshDelay","deleteEventMessageDataAfterEventStarted","timeShiftBuffer","calcFromSegmentTimeline","fallbackToSegmentTimeline","metrics","maxListDepth","delay","liveDelayFragmentCount","liveDelay","useSuggestedPresentationDelay","protection","keepProtectionMediaKeys","ignoreEmeEncryptedEvent","detectPlayreadyMessageFormat","ignoreKeyStatuses","enableSeekDecorrelationFix","fastSwitchEnabled","flushBufferAtTrackSwitch","reuseExistingSourceBuffers","bufferPruningInterval","bufferToKeep","bufferTimeAtTopQuality","bufferTimeAtTopQualityLongForm","initialBufferLevel","bufferTimeDefault","longFormContentDurationThreshold","stallThreshold","useAppendWindow","setStallState","avoidCurrentTimeRangePruning","useChangeType","mediaSourceDurationInfinity","resetSourceBuffersForTrackSwitch","syntheticStallEvents","enabled","ignoreReadyState","gaps","jumpGaps","jumpLargeGaps","smallGapLimit","threshold","enableSeekFix","enableStallFix","stallSeek","utcSynchronization","useManifestDateHeaderTimeSource","backgroundAttempts","timeBetweenSyncAttempts","maximumTimeBetweenSyncAttempts","minimumTimeBetweenSyncAttempts","timeBetweenSyncAttemptsAdjustmentFactor","maximumAllowedDrift","enableBackgroundSyncAfterSegmentDownloadError","defaultTimingSource","scheme","scheduling","defaultTimeout","lowLatencyTimeout","scheduleWhilePaused","defaultEnabled","dispatchForManualRendering","extendSegmentedCues","imsc","webvtt","customRenderingEnabled","liveCatchup","maxDrift","playbackRate","playbackBufferMin","LIVE_CATCHUP_MODE_DEFAULT","lastBitrateCachingInfo","ttl","lastMediaSettingsCachingInfo","saveLastMediaSettingsForCurrentStreamingSession","cacheLoadThresholds","video","audio","trackSwitchMode","TRACK_SWITCH_MODE_ALWAYS_REPLACE","TRACK_SWITCH_MODE_NEVER_REPLACE","selectionModeForInitialTrack","TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY","fragmentRequestTimeout","fragmentRequestProgressTimeout","manifestRequestTimeout","retryIntervals","HTTPRequest","MPD_TYPE","XLINK_EXPANSION_TYPE","MEDIA_SEGMENT_TYPE","INIT_SEGMENT_TYPE","BITSTREAM_SWITCHING_SEGMENT_TYPE","INDEX_SEGMENT_TYPE","MSS_FRAGMENT_INFO_SEGMENT_TYPE","LICENSE","OTHER_TYPE","lowLatencyReductionFactor","retryAttempts","lowLatencyMultiplyFactor","abr","limitBitrateByPortal","usePixelRatioInLimitBitrateByPortal","enableSupplementalPropertyAdaptationSetSwitching","rules","throughputRule","active","bolaRule","insufficientBufferRule","parameters","throughputSafetyFactor","segmentIgnoreCount","switchHistoryRule","sampleSize","switchPercentageThreshold","droppedFramesRule","minimumSampleSize","droppedFramesPercentageThreshold","abandonRequestsRule","abandonDurationMultiplier","minSegmentDownloadTimeThresholdInMs","minThroughputSamplesThreshold","l2ARule","loLPRule","throughput","averageCalculationMode","THROUGHPUT_CALCULATION_MODES","EWMA","lowLatencyDownloadTimeCalculationMode","LOW_LATENCY_DOWNLOAD_TIME_CALCULATION_MODE","MOOF_PARSING","useResourceTimingApi","useNetworkInformationApi","xhr","useDeadTimeLatency","bandwidthSafetyFactor","sampleSettings","live","vod","enableSampleSizeAdjustment","decreaseScale","increaseScale","maxMeasurementsToKeep","averageLatencySampleAmount","ewma","throughputSlowHalfLifeSeconds","throughputFastHalfLifeSeconds","latencySlowHalfLifeCount","latencyFastHalfLifeCount","weightDownloadTimeMultiplicationFactor","maxBitrate","minBitrate","initialBitrate","autoSwitchBitrate","cmcd","applyParametersFromMpd","cid","rtp","rtpSafetyFactor","CMCD_MODE_QUERY","enabledKeys","CMCD_AVAILABLE_KEYS","includeInRequests","cmsd","applyMb","etpWeightRatio","defaultSchemeIdUri","viewpoint","audioChannelConfiguration","role","accessibility","errors","recoverAttempts","mediaErrorDecode","mixinSettings","update","settingsObj","mixin","empty","addAdditionalQueryParameterToUrl","url","updatedUrl","_ref","separator","encodeURIComponent","removeQueryParameterFromUrl","queryParameter","parsedUrl","URL","URLSearchParams","delete","parseHttpHeaders","headerStr","headers","headerPairs","ilen","headerPair","parseQueryParams","queryParamString","searchParams","entries","decodeURIComponent","generateUuid","dt","random","generateHashCode","hash","getRelativeUrl","originalUrl","targetUrl","original","protocol","relativePath","pathname","startIndexOffset","getHostFromUrl","urlString","host","parseUserAgent","uaString","stringHasProtocol","bufferSourceToDataView","bufferSource","toDataView","bufferSourceToInt8","bufferSourceToHex","hex","Type","getArrayBuffer","bytesPerElement","BYTES_PER_ELEMENT","dataEnd","rawStart","view","getCodecFamily","codecString","profile","_getCodecParts","CODEC_FAMILIES","MP3","AAC","AC3","EC3","DTSX","DTSC","AVC","HEVC","rest","publicOnly","CoreEvents","EventsBase","super","ATTEMPT_BACKGROUND_SYNC","BUFFERING_COMPLETED","BUFFER_CLEARED","BYTES_APPENDED_END_FRAGMENT","BUFFER_REPLACEMENT_STARTED","CHECK_FOR_EXISTENCE_COMPLETED","CMSD_STATIC_HEADER","CURRENT_TRACK_CHANGED","DATA_UPDATE_COMPLETED","INBAND_EVENTS","INITIAL_STREAM_SWITCH","INIT_FRAGMENT_LOADED","INIT_FRAGMENT_NEEDED","INTERNAL_MANIFEST_LOADED","ORIGINAL_MANIFEST_LOADED","LOADING_COMPLETED","LOADING_PROGRESS","LOADING_DATA_PROGRESS","LOADING_ABANDONED","MANIFEST_UPDATED","MEDIA_FRAGMENT_LOADED","MEDIA_FRAGMENT_NEEDED","MEDIAINFO_UPDATED","QUOTA_EXCEEDED","SEGMENT_LOCATION_BLACKLIST_ADD","SEGMENT_LOCATION_BLACKLIST_CHANGED","SERVICE_LOCATION_BASE_URL_BLACKLIST_ADD","SERVICE_LOCATION_BASE_URL_BLACKLIST_CHANGED","SERVICE_LOCATION_LOCATION_BLACKLIST_ADD","SERVICE_LOCATION_LOCATION_BLACKLIST_CHANGED","SET_FRAGMENTED_TEXT_AFTER_DISABLED","SET_NON_FRAGMENTED_TEXT","SOURCE_BUFFER_ERROR","STREAMS_COMPOSED","STREAM_BUFFERING_COMPLETED","STREAM_REQUESTING_COMPLETED","TEXT_TRACKS_QUEUE_INITIALIZED","TIME_SYNCHRONIZATION_COMPLETED","UPDATE_TIME_SYNC_OFFSET","URL_RESOLUTION_FAILED","VIDEO_CHUNK_RECEIVED","WALLCLOCK_TIME_UPDATED","XLINK_ELEMENT_LOADED","XLINK_READY","SEEK_TARGET","evt","ACCESSIBILITY","ADAPTATION_SET","ADAPTATION_SETS","ADAPTATION_SET_SWITCHING_SCHEME_ID_URI","ADD","ASSET_IDENTIFIER","AUDIO_CHANNEL_CONFIGURATION","AUDIO_SAMPLING_RATE","AVAILABILITY_END_TIME","AVAILABILITY_START_TIME","AVAILABILITY_TIME_COMPLETE","AVAILABILITY_TIME_OFFSET","BANDWITH","BASE_URL","BITSTREAM_SWITCHING","BITSTREAM_SWITCHING_MINUS","BYTE_RANGE","CAPTION","CENC_DEFAULT_KID","CLIENT_DATA_REPORTING","CLIENT_REQUIREMENT","CMCD_PARAMETERS","CODECS","CODEC_PRIVATE_DATA","CODING_DEPENDENCY","CONTENT_COMPONENT","CONTENT_PROTECTION","CONTENT_STEERING","CONTENT_STEERING_RESPONSE","TTL","RELOAD_URI","PATHWAY_PRIORITY","PATHWAY_CLONES","BASE_ID","ID","URI_REPLACEMENT","HOST","PARAMS","CONTENT_TYPE","DEFAULT_SERVICE_LOCATION","DEPENDENCY_ID","DURATION","DVB_PRIORITY","DVB_WEIGHT","DVB_URL","DVB_MIMETYPE","DVB_FONTFAMILY","DYNAMIC","ESSENTIAL_PROPERTY","EVENT","EVENT_STREAM","FORCED_SUBTITLE","FRAMERATE","FRAME_PACKING","GROUP_LABEL","HEIGHT","INBAND","INBAND_EVENT_STREAM","INDEX","INDEX_RANGE","INITIALIZATION","INITIALIZATION_MINUS","LA_URL","LA_URL_LOWER_CASE","LABEL","LANG","LOCATION","MAIN","MAXIMUM_SAP_PERIOD","MAX_PLAYOUT_RATE","MAX_SEGMENT_DURATION","MAX_SUBSEGMENT_DURATION","MEDIA","MEDIA_PRESENTATION_DURATION","MEDIA_RANGE","MEDIA_STREAM_STRUCTURE_ID","METRICS","METRICS_MINUS","MIME_TYPE","MINIMUM_UPDATE_PERIOD","MIN_BUFFER_TIME","MP4_PROTECTION_SCHEME","MPD","MPD_PATCH_TYPE","ORIGINAL_MPD_ID","ORIGINAL_PUBLISH_TIME","PATCH_LOCATION","PERIOD","PRESENTATION_TIME","PRESENTATION_TIME_OFFSET","PRO","PRODUCER_REFERENCE_TIME","PRODUCER_REFERENCE_TIME_TYPE","ENCODER","CAPTURED","APPLICATION","PROFILES","PSSH","PUBLISH_TIME","QUALITY_RANKING","QUERY_BEFORE_START","QUERY_PART","RANGE","RATING","REF","REF_ID","REMOVE","REPLACE","REPORTING","REPRESENTATION","REPRESENTATION_INDEX","ROBUSTNESS","ROLE","SAR","SCAN_TYPE","SEGMENT_ALIGNMENT","SEGMENT_BASE","SEGMENT_LIST","SEGMENT_PROFILES","SEGMENT_TEMPLATE","SEGMENT_TIMELINE","SEGMENT_TYPE","SEGMENT_URL","SERVICE_DESCRIPTION","SERVICE_DESCRIPTION_LATENCY","SERVICE_DESCRIPTION_OPERATING_BANDWIDTH","SERVICE_DESCRIPTION_OPERATING_QUALITY","SERVICE_DESCRIPTION_PLAYBACK_RATE","SERVICE_DESCRIPTION_SCOPE","SERVICE_LOCATION","SERVICE_LOCATIONS","SOURCE_URL","START","START_NUMBER","START_WITH_SAP","STATIC","STEERING_TYPE","SUBSET","SUBTITLE","SUB_REPRESENTATION","SUB_SEGMENT_ALIGNMENT","SUGGESTED_PRESENTATION_DELAY","SUPPLEMENTAL_PROPERTY","SUPPLEMENTAL_CODECS","TIMESCALE","TIMESHIFT_BUFFER_DEPTH","UTC_TIMING","VALUE","VIEWPOINT","WALL_CLOCK_TIME","WIDTH","CaptionsLogger","time","verboseLevel","severity","PenState","foreground","underline","italics","background","flash","setStyles","attribs","isDefault","other","newPenState","StyledUnicodeChar","uchar","penState","setChar","setPenState","newChar","isEmpty","NR_COLS","specialCea608CharsCodes","getCharForByte","Row","logger","chars","cueStartTime","currPenState","setCursor","absPos","moveCursor","relPos","newPos","backSpace","insertChar","clearFromPos","startPos","clearToEndOfRow","getTextString","setPenStyles","NR_ROWS","CaptionScreen","rows","currRow","nrRollUpRows","lastOutputScreen","setPen","setPAC","pacData","newRow","row","topRowIndex","prevLineTime","indent","prevPos","setBkgData","bkgData","setRollUpRows","nrRows","rollUp","getDisplayText","topRow","asOneRow","displayText","rowNr","rowText","getTextAndFormat","Cta608Channel","channelNumber","outputFilter","chNr","displayedMemory","nonDisplayedMemory","writeScreen","_b","_a","setMode","newMode","insertChars","screen","outputDataUpdate","ccRCL","ccBS","ccAOF","ccAON","ccDER","ccRU","ccFON","ccRDC","ccTR","ccRTD","ccEDM","ccCR","ccENM","ccEOC","ccTO","nrCols","ccMIDROW","colorIndex","colors","dispatch","newCue","dispatchCue","cueSplitAtTime","backgroundColors","hasCmdRepeated","cmdHistory","numArrayToHexArray","numArray","hexArray","rowsHighCh1","rowsHighCh2","rowsLowCh1","rowsLowCh2","setLastCmd","Cta608Parser","field","out1","out2","currentChannel","lastTime","channels","addData","byteList","cmdFound","charsFound","parseCmd","parseMidrow","parsePAC","parseBackgroundAttributes","parseChars","currChNr","channel","interpretPAC","pacIndex","channelNr","charCodes","charCode1","oneCode","TCP_CONNECTION","HTTP_REQUEST","TRACK_SWITCH","BUFFER_LEVEL","BUFFER_LOADED","ABANDON_LOAD","ALLOW_LOAD","BUFFER_EMPTY","BUFFER_STATE","DVR_INFO","DROPPED_FRAMES","SCHEDULING_INFO","REQUESTS_QUEUE","MANIFEST_UPDATE","MANIFEST_UPDATE_STREAM_INFO","MANIFEST_UPDATE_TRACK_INFO","PLAY_LIST","DVB_ERRORS","HTTP_REQUEST_DVB_REPORTING_TYPE","PlaybackController","streamController","serviceDescriptionController","dashMetrics","adapter","videoModel","timelineConverter","wallclockTimeIntervalId","originalLiveDelay","streamInfo","isDynamic","playOnceInitialized","lastLivePlaybackTime","lastLiveUpdateTime","availabilityStartTime","availabilityTimeComplete","lowLatencyModeEnabled","seekTarget","internalSeek","playbackStalled","manifestUpdateInProgress","initialCatchupModeActivated","_onDataUpdateCompleted","_onManifestUpdated","_onStreamsComposed","PLAYBACK_ENDED","_onPlaybackEnded","STREAM_INITIALIZING","_onStreamInitializing","REPRESENTATION_SWITCH","_onRepresentationSwitch","BUFFER_LEVEL_STATE_CHANGED","_onBufferLevelStateChanged","stopUpdatingWallclockTime","_onCanPlay","_onCanPlayThrough","_onPlaybackStart","_onPlaybackWaiting","_onPlaybackPlaying","_onPlaybackPaused","_onPlaybackError","_onPlaybackSeeking","_onPlaybackSeeked","_onPlaybackTimeUpdated","_onPlaybackProgress","_onPlaybackRateChanged","_onPlaybackMetaDataLoaded","_onPlaybackLoadedData","onPlaybackStalled","_onNativePlaybackEnded","_onVolumeChanged","getTimeToStreamEnd","getStreamEndTime","toFixed","sInfo","refInfo","duration","play","adjustLiveDelay","getElement","_adjustLiveDelayAfterUserInteraction","seek","stickToBuffered","internal","setCurrentTime","_getDvrWindowEnd","hasVideoTrack","VIDEO","AUDIO","dvrInfo","getCurrentDVRInfo","now","getClientReferenceTime","period","getRegularPeriods","nowAsPresentationTime","calcPresentationTimeFromWallTime","isSeeking","isStalled","getPlaybackRate","getEnded","getIsDynamic","updateCurrentTime","getReadyState","currentTime","actualTime","mediatype","DVRMetrics","DVRWindow","_getAdjustedPresentationTime","startUpdatingWallclockTime","setInterval","addDVRMetric","_updateLivePlaybackTime","_onWallclockTime","clearInterval","voRepresentation","currentRepresentation","mediaInfo","CAN_PLAY","CAN_PLAY_THROUGH","getActiveStreamInfo","MetricsConstants","PLAYBACK_STARTED","PLAYBACK_WAITING","playingTime","PLAYBACK_PLAYING","PLAYBACK_PAUSED","seekTime","PLAYBACK_SEEKING","PLAYBACK_SEEKED","PLAYBACK_TIME_UPDATED","timeToEnd","PLAYBACK_PROGRESS","rate","PLAYBACK_RATE_CHANGED","PLAYBACK_METADATA_LOADED","PLAYBACK_LOADED_DATA","isLast","PLAYBACK_VOLUME_CHANGED","srcElement","PLAYBACK_ERROR","_onDynamicToStatic","PLAYBACK_STALLED","supplementalProperties","find","SUPPLEMENTAL_PROPERTY_DVB_LL_SCHEME","activeStreamInfo","computeAndSetLiveDelay","fragmentDuration","manifestInfo","adjustedFragmentDuration","suggestedPresentationDelay","getSuggestedPresentationDelay","serviceDescriptionSettings","getServiceDescriptionSettings","minBufferTime","getAvailabilityStartTime","dvrWindowSize","getBufferLevel","filterList","bufferLevel","getActiveStreamProcessors","bl","getCurrentLiveLatency","getClientTimeOffset","getInitialCatchupModeActivated","getIsManifestUpdateInProgress","getLiveDelay","getLowLatencyModeEnabled","getOriginalLiveDelay","getPlaybackStalled","getPlayedRanges","getStreamController","initialize","periodSwitch","DYNAMIC_TO_STATIC","isProgressing","timeoutValue","timeout","_onComplete","clearTimeout","setTimeout","_onTimeout","seekToCurrentLive","dvrWindowEnd","seekToOriginalLive","setConfig","FragmentRequest","action","ACTION_DOWNLOAD","availabilityEndTime","bandwidth","bytesLoaded","bytesTotal","delayLoadingTime","endDate","firstByteDate","mediaStartTime","quality","representation","responseType","serviceLocation","startDate","timescale","wallStartTime","isInitializationRequest","setInfo","ACTION_COMPLETE","FRAGMENT_MODEL_LOADING","FRAGMENT_MODEL_EXECUTED","FRAGMENT_MODEL_FAILED","FragmentModel","fragmentLoader","executedRequests","loadingRequests","isFragmentLoaded","request","requests","isLoaded","req1","req2","adaptationIndex","isEqualInit","isEqualComplete","check","getRequestThreshold","removeExecutedRequestsBeforeTime","removeExecutedRequestsInTimeRange","getRequestForTime","addSchedulingInfoMetrics","addSchedulingInfo","addRequestsQueue","onLoadingCompleted","sender","response","FRAGMENT_LOADING_COMPLETED","onLoadingInProgress","FRAGMENT_LOADING_PROGRESS","onLoadingAborted","FRAGMENT_LOADING_ABANDONED","resetInitialSettings","abortRequests","executeRequest","FRAGMENT_LOADING_STARTED","load","loadCurrentFragment","getRequests","states","filteredRequests","getRequestsForState","filterRequests","isFragmentLoadedOrPending","removeExecutedRequestsAfterTime","syncExecutedRequestsWithBufferedRange","bufferedRanges","streamDuration","ln","FRAGMENT_MODEL_CANCELED","Errors","ErrorsBase","MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE","MANIFEST_LOADER_LOADING_FAILURE_ERROR_CODE","XLINK_LOADER_LOADING_FAILURE_ERROR_CODE","SEGMENT_BASE_LOADER_ERROR_CODE","TIME_SYNC_FAILED_ERROR_CODE","FRAGMENT_LOADER_LOADING_FAILURE_ERROR_CODE","FRAGMENT_LOADER_NULL_REQUEST_ERROR_CODE","URL_RESOLUTION_FAILED_GENERIC_ERROR_CODE","APPEND_ERROR_CODE","REMOVE_ERROR_CODE","DATA_UPDATE_FAILED_ERROR_CODE","CAPABILITY_MEDIASOURCE_ERROR_CODE","CAPABILITY_MEDIAKEYS_ERROR_CODE","DOWNLOAD_ERROR_ID_MANIFEST_CODE","DOWNLOAD_ERROR_ID_SIDX_CODE","DOWNLOAD_ERROR_ID_CONTENT_CODE","DOWNLOAD_ERROR_ID_INITIALIZATION_CODE","DOWNLOAD_ERROR_ID_XLINK_CODE","MANIFEST_ERROR_ID_PARSE_CODE","MANIFEST_ERROR_ID_NOSTREAMS_CODE","TIMED_TEXT_ERROR_ID_PARSE_CODE","MANIFEST_ERROR_ID_MULTIPLEXED_CODE","MEDIASOURCE_TYPE_UNSUPPORTED_CODE","NO_SUPPORTED_KEY_IDS","MANIFEST_LOADER_PARSING_FAILURE_ERROR_MESSAGE","MANIFEST_LOADER_LOADING_FAILURE_ERROR_MESSAGE","XLINK_LOADER_LOADING_FAILURE_ERROR_MESSAGE","SEGMENTS_UPDATE_FAILED_ERROR_MESSAGE","SEGMENTS_UNAVAILABLE_ERROR_MESSAGE","SEGMENT_BASE_LOADER_ERROR_MESSAGE","TIME_SYNC_FAILED_ERROR_MESSAGE","FRAGMENT_LOADER_NULL_REQUEST_ERROR_MESSAGE","URL_RESOLUTION_FAILED_GENERIC_ERROR_MESSAGE","APPEND_ERROR_MESSAGE","REMOVE_ERROR_MESSAGE","DATA_UPDATE_FAILED_ERROR_MESSAGE","CAPABILITY_MEDIASOURCE_ERROR_MESSAGE","CAPABILITY_MEDIAKEYS_ERROR_MESSAGE","TIMED_TEXT_ERROR_MESSAGE_PARSE","MEDIASOURCE_TYPE_UNSUPPORTED_MESSAGE","NO_SUPPORTED_KEY_IDS_MESSAGE","SourceBufferSink","textController","intervalId","callbacks","appendQueue","isAppendingInProgress","mediaSource","lastRequestAppended","_getCodecStringForRepresentation","mimeType","codecs","_initializeForText","getTextSourceBuffer","_addEventListeners","_updateEndHandler","_errHandler","removeEventListeners","updateAppendWindow","_waitForUpdateEnd","appendWindowEnd","appendWindowStart","updateTimestampOffset","mseTimeOffset","timestampOffset","_appendNextInQueue","nextChunk","afterSuccess","segmentType","bitrateInKbit","appendBuffer","DashJSError","_executeCallback","updating","eventType","_triggerEvent","readyState","setTextTrack","abortBeforeAppend","changeType","codec","getAllBufferRanges","buffered","initializeForFirstUse","mInfo","selectedRepresentation","addSourceBuffer","promises","constants","isFragmented","initializeForStreamSwitch","oldSourceBufferSink","_copyPreviousSinkData","remove","unintended","removeSourceBuffer","PreBufferSink","onAppendedCallback","outstandingInit","chunks","onAppended","ranges","timeranges","sort","discharge","getChunksAt","waitForUpdateEnd","InitCache","save","representationId","extract","BUFFER_RANGE_CALCULATION_THRESHOLD","BUFFER_CONTROLLER_TYPE","BufferController","fragmentModel","playbackController","representationController","isBufferingCompleted","criticalBufferLevel","maxAppendedIndex","maximumIndex","sourceBufferSink","dischargeBuffer","isPrebuffering","dischargeFragments","bufferState","appendedBytesInfo","wallclockTicked","isPruningInProgress","isQuotaExceeded","initCache","pendingPruningRanges","replacingBuffer","setMediaSource","createBufferSink","catch","oldBufferSinks","oldRepresentation","newRepresentation","getCurrentRepresentation","_changeCodec","updateBufferTimestampOffset","allSettled","_initializeSinkForStreamSwitch","_initializeSinkForFirstUse","_initializeSink","_initializeSinkForMseBuffering","sink","_onAppended","_initializeSinkForPrebuffering","_onInitFragmentLoaded","_appendToBuffer","_onMediaFragmentLoaded","_showBufferRanges","getTotalBufferedTime","bufferAhead","_handleQuotaExceededError","hasEnoughSpaceToAppend","quotaExceededTime","getClearRanges","_updateBufferLevel","endFragment","_checkIfBufferingCompleted","_onPlaybackProgression","rangeAtCurrenTime","getRangeAt","rangeAtSeekTarget","segmentDuration","_adjustSeekTarget","suppressAppendedEvent","_defaultQualitySwitchPreparation","codecFamily","supportsChangeType","pruneAllSafely","getAllRangesWithSafetyFactor","clearRanges","behindPruningRange","targetTime","bufferToKeepBehind","startOfBuffer","rangeEnd","currentTimeRequest","_getRangeBehindForPruning","aheadPruningRange","endOfBuffer","continuousBufferTime","getContinuousBufferTimeForTargetTime","bufferToKeepAhead","rangeStart","oldRangeStart","_getRangeAheadForPruning","isTextEnabled","_onPlaybackStalled","checkIfSufficientBuffer","tolerance","firstStart","lastEnd","gap","toler","referenceTime","getBufferLength","BUFFER_LEVEL_UPDATED","isLastIdxAppended","periodBuffered","setIsBufferingCompleted","_notifyBufferStateChanged","pruneBuffer","startRangeToKeep","behindRange","_addClearRangeWithPromise","clearNextRange","sourceBuffer","_onRemoved","quotaExceeded","_onWallclockTimeUpdated","totalBufferedTime","adjustedTime","errored","keepBuffers","tmpSourceBufferSinkToReset","appendInitSegmentFromCache","dischargePreBuffer","rangeStr","lastInit","initChunk","getBufferControllerType","getIsBufferingCompleted","getIsPruningInProgress","getMediaSource","hasBufferAtTime","prepareForAbandonQualitySwitch","prepareForDefaultQualitySwitch","prepareForFastQualitySwitch","prepareForForceReplacementQualitySwitch","prepareForNonReplacementTrackSwitch","prepareForPlaybackSeek","prepareForReplacementTrackSwitch","segmentRequestingCompleted","segmentIndex","setSeekTarget","NotFragmentedTextBufferController","errHandler","initialized","triggerEvent","ScheduleController","mediaPlayerModel","abrController","bufferController","timeToLoadDelay","scheduleTimeout","lastFragmentRequest","lastInitializedRepresentationId","switchTrack","initSegmentRequired","managedMediaSourceAllowsRequest","checkPlaybackQuality","_onManagedMediaSourceStartStreaming","_onManagedMediaSourceEndStreaming","startScheduleTimer","clearScheduleTimer","schedule","getInitialPlayback","getAutoPlay","_shouldClearScheduleTimer","segmentDurationToAddToBufferLevel","getCurrentBufferLevel","bufferTarget","getBufferTarget","_shouldBuffer","_shouldScheduleNextRequest","qualityChange","_getNextFragment","schedulingInfo","getCurrentSchedulingInfo","_getBufferTargetForFragmentedText","videoBufferLevel","_getBufferTargetForAudio","isPlayingAtTopQuality","getBufferTimeDefaultUnadjusted","_getGenericBufferTarget","_completeQualityChange","TRACK_CHANGE_RENDERED","oldMediaInfo","newMediaInfo","QUALITY_CHANGE_RENDERED","_onURLResolutionFailed","_onPlaybackStarted","updatePlayListTraceMetrics","playbackspeed","getPlaybackController","getSwitchTrack","getTimeToLoadDelay","_hasVideoTrack","MANAGED_MEDIA_SOURCE_START_STREAMING","MANAGED_MEDIA_SOURCE_END_STREAMING","setCheckPlaybackQuality","setInitSegmentRequired","setLastInitializedRepresentationId","setSwitchTrack","setTimeToLoadDelay","indexRange","media","mediaRange","presentationStartTime","replacementNumber","replacementTime","zeroPadToLength","minStrLength","unescapeDollarsInTemplate","replaceIDForTemplate","replaceTokenForTemplate","token","endPos","formatTagPos","specifier","paddedValue","tokenLen","formatTag","getSegment","presentationEndTime","seg","Segment","calcAvailabilityStartTimeFromPresentationTime","calcAvailabilityEndTimeFromPresentationTime","calcWallTimeForSegment","startNumber","isSegmentAvailable","segment","voPeriod","adaptation","availabilityTimeOffset","refTime","getIndexBasedSegment","calcMediaTimeFromPresentationTime","getTimeBasedSegment","fTimescale","tManifest","scaledTime","scaledDuration","calcPresentationTimeFromMediaTime","RepresentationController","segmentsController","voAvailableRepresentations","currentVoRepresentation","_updateRepresentation","currentRep","hasInitialization","hasSegments","updateInitData","updateSegmentData","_onInitLoaded","fragments","segments","_onSegmentsLoaded","mediaFinishedInformation","getMediaFinishedInformation","repInfo","manifestUpdateInfo","getCurrentManifestUpdate","alreadyAdded","representationInfo","addManifestUpdateRepresentationInfo","_onRepresentationUpdated","getRepresentationById","reps","rep","endDataUpdate","_setCurrentVoRepresentation","MISSING_CONFIG_ERROR","checkConfig","currentVideoTimeMs","addRepresentationSwitch","_addRepresentationSwitch","onManifestValidityChanged","newDuration","prepareQualityChange","newRep","voRepresentations","MANIFEST_VALIDITY_CHANGED","updateData","availableRepresentations","selectedRepresentationId","setPlaybackQuality","updateManifestUpdateInfo","latency","_onAllRepresentationsUpdated","DashHandler","urlUtils","baseURLController","lastSegment","isDynamicManifest","mediaHasFinished","_setRequestUrl","destination","baseURL","queryParams","isRelative","_getRequestForSegment","getSegmentRequestForTime","segmentInfoType","getSegmentByTime","_getRequest","indexToRequest","getSegmentByIndex","getCurrentIndex","getInitRequest","initialization","_generateInitRequest","getNextSegmentRequest","getNextSegmentRequestIdempotent","getStreamInfo","getValidTimeAheadOfTargetTime","targetThreshold","currentUpperTime","targetRequest","upperRequest","requestEndTime","isLastSegmentRequested","bufferingTime","numberOfSegments","DashConstants","nextPeriodId","mediaTimeOfLastSignaledSegment","repeatSegmentRequest","DefaultURLUtils","resolveFunction","schemeRegex","httpUrlRegex","httpsUrlRegex","originRegex","nativeURLResolver","baseUrl","dumbURLResolver","baseUrlParseFunc","parseBaseUrl","isPathAbsolute","parseOrigin","isSchemeRelative","parseScheme","joinChar","slashIndex","setup","isHTTPURL","isHTTPS","removeHostname","URLUtils","defaultURLUtils","regexUtils","internalCall","functionName","utils","getUtils","registerUrlRegex","PlayList","mstart","starttype","INITIAL_PLAYOUT_START_REASON","SEEK_START_REASON","RESUME_FROM_PAUSE_START_REASON","METRICS_COLLECTION_START_REASON","PlayListTrace","representationid","subreplevel","stopreason","TimelineSegmentsGetter","iterateSegments","iterFunc","mpd","manifest","Period","AdaptationSet","Representation","SegmentTemplate","SegmentList","timeline","SegmentTimeline","SegmentURL","frag","repeat","relativeIdx","breakIterator","_calculateRepeatCountForNegativeR","nextFrag","repeatEndTime","availabilityEnd","dvrWindow","lastSegmentTime","requestedTime","requiredMediaTime","scaledMediaTime","toPrecision","availableSegments","REPRESENTATION_SWITCH_STOP_REASON","REBUFFERING_REASON","USER_REQUEST_STOP_REASON","END_OF_PERIOD_STOP_REASON","END_OF_CONTENT_STOP_REASON","METRICS_COLLECTION_STOP_REASON","FAILURE_STOP_REASON","TemplateSegmentsGetter","template","periodTime","calcPeriodRelativeTimeFromMpdRelativeTime","ListSegmentsGetter","offsetToSubtract","relativeIndex","SegmentBaseGetter","epsilon","ft","fd","getIndexByTime","SegmentsController","dashConstants","segmentBaseController","getters","getSegmentsGetter","getSegmentBaseInitSegment","getSegmentList","getter","TimeUtils","ntpToUTC","ntpTimeStamp","UTC","previouslySelectedRepresentation","StreamProcessor","currentMediaInfo","dashHandler","mediaInfoArr","pendingSwitchToVoRepresentation","qualityChangeInProgress","scheduleController","shouldRepeatRequest","shouldUseExplicitTimeForRequest","trackSwitchInProgress","boxParser","manifestModel","mediaController","segmentBlacklistController","_resetPendingSwitchToRepresentation","_shouldSetBufferingComplete","_onInitFragmentNeeded","rescheduleIfNoRequest","_noValidRequest","isText","_onMediaFragmentNeeded","getRepresentation","_getFragmentRequest","blacklistUrl","contains","_shouldIgnoreRequest","_mediaRequestGenerated","mediaPresentationDuration","setExplicitBufferingTime","checkAndHandleCompletedBuffering","_noMediaRequestGenerated","addBufferState","pushPlayListTraceMetrics","_onBufferCleared","_onSourceBufferError","add","_onBytesAppended","_prepareForDefaultQualitySwitch","selectMediaInfo","mediaInfoSelectionInput","selectedValues","selectionInput","areMediaInfosEqual","_getTargetValuesForMpdUpdate","getInitialBitrateFor","getOptimalRepresentationForBitrate","_getTargetValuesForAdaptationSetSwitch","_setCurrentMediaInfo","getPossibleVoRepresentations","NEW_TRACK_SELECTED","handleNewMediaInfo","_handleDifferentSwitchTypes","reason","forceReplace","newPresentation","_replacementQualitySwitchPreparationDone","_prepareForForceReplacementQualitySwitch","forceAbandon","_abandonQualitySwitchPreparationDone","_prepareForAbandonQualitySwitch","getFastSwitchEnabled","safeBufferLevel","abandonmentState","getAbandonmentStateFor","_fastQualitySwitchPreparationDone","_prepareForFastQualitySwitch","createPlaylistTraceMetrics","_bufferClearedForReplacement","ongoingRequests","_defaultQualitySwitchPreparationDone","segmentAlignment","subSegmentAlignment","_bufferClearedForNonReplacement","_onFragmentLoadingAbandoned","_onFragmentLoadingCompleted","_handleFragmentLoadingError","_onSetFragmentedTextAfterDisabled","getScheduleController","_onSetNonFragmentedText","currentTrackInfo","MediaInfoSelectionInput","_onQuotaExceeded","checkInteger","getMediaTimescaleFromMoov","isoFile","prfts","prftBoxes","getBoxes","prft","ntpTimestamp","ntp_timestamp_sec","ntp_timestamp_frac","mediaTime","media_time","_parsePrftBox","_handleInbandPrfts","INBAND_PRFT","eventStreamMedia","getEventsFor","eventStreamTrack","mediaInbandEvents","trackInbandEvents","eventStreams","inbandEvents","eventBoxes","sidx","getBox","mediaAnchorTime","earliest_presentation_time","fragmentMediaStartTime","getEvent","_handleInbandEvents","_onSeekTarget","createBufferSinks","previousBufferSinks","finalisePlayList","getAllMediaInfos","getBufferController","getFragmentModel","getMediaInfo","getRepresentationController","registerStreamType","controller","_createBufferControllerForType","prepareInnerPeriodPlaybackSeeking","prepareOuterPeriodPlaybackSeeking","isAdaptationSetSwitch","_prepareAdaptationSwitchQualityChange","_prepareNonAdaptationSwitchQualityChange","prepareTrackSwitch","replaceBuffer","shouldReplace","_handleBufferingCompleteTrackSwitch","_handleReplaceTrackSwitch","_finishNoReplaceTrackSwitch","_handleNoReplaceTrackSwitch","probeNextRequest","unRegisterStreamType","setMediaInfoArray","setTrackSwitchInProgress","updateStreamInfo","newStreamInfo","XHRLoader","onloadend","onprogress","onload","commonMediaRequest","commonMediaResponse","XMLHttpRequest","open","header","setRequestHeader","withCredentials","credentials","responseURL","status","statusText","getAllResponseHeaders","customData","onabort","ontimeout","send","getXhr","FetchLoader","_readResponseBody","processResult","reader","_handleFetchError","_getCurrentTimestamp","performance","abortController","cancel","calculateDownloadedTime","downloadedData","bytesReceived","avgTimeDistance","timestamp","distance","_getThroughputInBitPerMs","timeInMs","Headers","_getHeaders","AbortController","signal","_setupAbortMechanism","fetchResourceRequestObject","Request","_getFetchResourceRequestObject","fetchResponse","responseHeaders","_updateCommonMediaResponseInstance","ok","totalBytesReceived","signaledFirstByte","receivedData","endPositionOfLastProcessedBoxInReceivedData","getReader","moofStartTimeData","mdatEndTimeData","lastChunkWasFinished","calculationMode","_processResult","calculatedDownloadTime","downloadTime","calculatedThroughput","filteredMoofStartTimeData","filteredMdatEndTimeData","chunkThroughputValues","shortDurationBytesReceived","shortDurationStartTime","chunkDownloadTime","cumulatedChunkDownloadTime","_calculateThroughputByMoofMdatTimes","_getDownloadTimeForMoofParsing","DOWNLOADED_DATA","_calculateDownloadTime","loaded","lengthComputable","_handleRequestComplete","_concatTypedArray","findLastTopIsoBoxCompleted","boxesInfo","endPositionOfLastTargetBox","_getDataForMediaSourceBufferAndAdjustReceivedData","startOffsetOfLastFoundTargetBox","sizeOfLastFoundTargetBox","noTrace","_handleTopIsoBoxCompleted","startOffsetOfLastCompletedBox","sizeOfLastCompletedBox","_handleNoCompletedTopIsoBox","_handleReceivedChunkData","_handleFetchResponse","cfg","BaseURL","weight","dvbPriority","dvbWeight","DEFAULT_DVB_PRIORITY","DEFAULT_DVB_WEIGHT","dvbUrl","dvbMimeType","dvbFontFamily","inArray","DescriptorType","sessionID","contentID","adaptationSets","adaptationSetsArray","cmcdParameters","serviceLocations","serviceLocationsArray","ref","refId","robustness","keyId","cencDefaultKid","pssh","pro","laUrl","mergeAttributesFromReference","defaultServiceLocation","defaultServiceLocationArray","queryBeforeStart","serverUrl","clientRequirement","presentationTime","messageData","eventStream","presentationTimeDelta","parsedMessageData","adaptionSet","presentationTimeOffset","maxSegmentDuration","minimumUpdatePeriod","publishTime","timeShiftBufferDepth","isEncrypted","DEFAULT_ID","inband","applicationScheme","wallClockTime","UTCTiming","absoluteIndex","bitsPerPixel","codecPrivateData","essentialProperties","frameRate","maxPlayoutRate","pixelsPerSecond","qualityRanking","scanType","DashManifestModel","BASE64","isInteger","getIsTypeOf","getEssentialPropertiesForRepresentation","essentialProperty","IMAGE","ContentComponent","MUXED","contentType","mimeTypeRegEx","getIsFragmented","getIsVideo","getIsText","getIsImage","processAdaptation","realAdaptation","getRealAdaptations","periodIndex","getRealPeriods","isPeriodEncrypted","contentProtectionElements","getContentProtectionByPeriod","protectionElements","periodProtectionElements","_getContentProtectionFromElement","as","curr","ContentProtection","contentProtectionData","contentProtection","_getProperties","propertyType","property","_getCombinedPropertiesForAdaptationSet","allProperties","repr","propertiesOfFirstRepresentation","every","currRep","_getPropertiesCommonToAllRepresentations","realRepresentation","getSupplementalPropertiesForRepresentation","calcSegmentDuration","segmentTimeline","s0","calcMseTimeOffset","presentationOffset","getPeriodId","realPeriod","getEventStreams","inbandStreams","EventStream","SCHEME_ID_URI","getBaseURLsFromElement","baseUrls","baseUri","earlyReturn","__text","_createContentSteeringInstance","ContentSteering","_createClientDataReportingInstance","ClientDataReporting","CTA_5004_2023_SCHEME","CMCDParameters","getAccessibilityForAdaptation","getAdaptationForId","realAdaptations","getAdaptationForIndex","getAdaptationsForPeriod","voAdaptations","voAdaptationSet","realAdaptationSet","getAdaptationsForType","adaptations","getAudioChannelConfigurationForAdaptation","audioChanCfg","acc","getAudioChannelConfigurationForRepresentation","getBandwidth","getBitrateListForAdaptation","processedRealAdaptation","getCodec","representationIndex","addResolutionInfo","getCombinedEssentialPropertiesForAdaptationSet","getCombinedSupplementalPropertiesForAdaptationSet","getContentProtectionByAdaptation","getContentProtectionByManifest","mpdElements","getContentSteering","getDuration","mpdDuration","MAX_SAFE_INTEGER","MAX_VALUE","getEssentialPropertiesForAdaptationSet","getEventStreamForAdaptationSet","periodArray","adaptationArray","InbandEventStream","getEventStreamForRepresentation","representationArray","getEventsForPeriod","Event","currentMpdEvent","calculatedPresentationTime","Signal","Binary","decodeArray","__cdata","getId","getIndexForAdaptation","ObjectUtils","areEqual","getLabelsForAdaptation","Label","labelArray","getLanguageForAdaptation","getLocation","MpdLocation","getManifestUpdatePeriod","latencyOfLastUpdate","getMimeType","getMpd","Mpd","loadedTime","getPatchLocation","PatchLocation","getProducerReferenceTimesForAdaptation","prtArray","prtsForAdaptation","prt","ProducerReferenceTime","getPublishTime","getRealPeriodForIndex","realPeriods","voPeriods","realPreviousPeriod","voPreviousPeriod","periodEnd","getEndTimeForLastPeriod","getRepresentationCount","getRepresentationFor","getRepresentationSortFunction","getRepresentationsForAdaptation","voAdaptation","getRealAdaptationFor","segmentInfo","numerator","denominator","SegmentBase","Initialization","sourceURL","getRolesForAdaptation","getSegmentAlignment","getSelectionPriority","realAdaption","selectionPriority","getServiceDescriptions","serviceDescriptions","sd","ServiceDescription","operatingQuality","operatingBandwidth","contentSteering","clientDataReporting","referenceId","maxQualityDifference","at","getSubSegmentAlignment","getSupplementalPropertiesForAdaptationSet","getUTCTimingSources","hasAST","utcTimingsArray","utcTimingEntries","utcTiming","getViewpointForAdaptation","vp","hasProfile","profiles","CmObjectType","MANIFEST","INIT","TIMED_TEXT","KEY","OTHER","CmcdObjectType","CmcdStreamType","CmcdStreamingFormat","SfItem","DICT","throwError","cause","Map","serializeError","SfToken","description","BARE_ITEM","BOOLEAN","BYTES","INTEGER","isInvalidInt","serializeInteger","roundToEven","precision","decimalShift","EPSILON","flooredValue","DECIMAL","serializeDecimal","roundedValue","stringValue","STRING","STRING_REGEX","symbolToStr","TOKEN","serializeToken","serializeBareItem","serializeString","serializeBoolean","serializeDate","binary","btoa","serializeByteSequence","serializeKey","serializeParams","serializeItem","toRounded","toHundred","CmcdFormatters","dl","mtp","nor","toUrlSafe","toPath","fromPath","urlToRelativePath","tb","encodeCmcd","dict","optionalWhiteSpace","serializeDict","encodeSfDict","results","formatters","assign","formatter","isValid","isTokenField","processCmcd","CmcdHeaderField","CmcdHeaderMap","DEFAULT_INCLUDE_IN_REQUESTS","CmcdModel","dashManifestModel","internalData","throughputController","streamProcessors","_lastMediaTypeRequest","_isStartup","_bufferLevelStarved","_initialMediaRequestsDone","_playbackStartedTime","_msdSent","_resetInitialSettings","pr","sf","_updateStreamProcessors","_onPeriodSwitchComplete","msd","getActiveStream","activeStream","getStreamProcessors","_applyWhitelist","cmcdData","cmcdParametersFromManifest","getCmcdParametersFromManifest","enabledCMCDKeys","isCmcdEnabled","isEnabledFromManifest","isEnabledFromSettings","_canBeEnabled","enabledRequests","defaultAvailableRequests","CMCD_AVAILABLE_REQUESTS","invalidRequests","_checkIncludeInRequests","defaultAvailableKeys","defaultV2AvailableKeys","CMCD_V2_AVAILABLE_KEYS","cmcdVersion","invalidKeys","_checkAvailableKeys","serviceDescription","getCmcdData","includeInRequestsArray","filtersTypes","CONTENT_STEERING_TYPE","_isIncludedInRequestFilter","_getGenericCmcdData","ot","_getCmcdDataForMpd","_initForMediaType","_getCmcdDataForMediaSegment","su","_getCmcdDataForInitSegment","_getCmcdDataForOther","_getCmcdDataForLicense","_getCmcdDataForSteering","encodedBitrate","_getBitrateByRequest","_getObjectDurationByRequest","getSafeAverageThroughput","_getMeasuredThroughputByType","_getDeadlineByType","_getBufferLevelByType","bitrates","getPossibleVoRepresentationsFilteredBySettings","_getTopBitrateByType","nextRequest","streamProcessor","_probeNextRequest","currentBufferLevel","minBandwidth","_calculateRtp","nrr","bs","ltc","_onManifestLoaded","getQueryParameter","finalPayloadString","MetricsReportingEvents","CMCD_DATA_GENERATED","cmcdString","getHeaderParameters","headerMap","customHeaderMap","shards","toCmcdHeaders","MANIFEST_LOADED","autoPlay","PERIOD_SWITCH_COMPLETED","MANIFEST_LOADING_STARTED","CMSD_DYNAMIC","CMSD_STATIC","CmsdObjectType","parseError","LIST","parsedValue","INNER","DATE","INTEGER_DECIMAL","parseIntegerOrDecimal","re_integer","result_integer","lastIndex","re_decimal","result_decimal","parseBareItem","parseString","parseBoolean","re","b64_content","atob","parseByteSequence","useSymbol","for","parseToken","date","parseDate","parseKey","parseParameters","parsedKey","parsedBareItem","parseItem","parsedParameters","parseItemOrInnerList","innerList","parsedItem","parseInnerList","CMSD_STATIC_RESPONSE_FIELD_NAME","CMSD_DYNAMIC_RESPONSE_FIELD_NAME","PERSISTENT_PARAMS","STREAM","MEDIATYPE_TO_OBJECTTYPE","CmsdModel","_staticParamsDict","_dynamicParamsDict","_clearParams","_parseCMSDStatic","member","parsedItemOrInnerList","parseDict","decodeSfDict","_parseCMSDDynamic","items","parseList","decodeSfList","_mediaTypetoObjectType","_getParamValueForObjectType","paramsType","otParams","streamParams","parseResponseHeaders","staticParams","dynamicParams","static","dynamic","getMaxBitrate","getEstimatedThroughput","getResponseDelay","getRoundTripTime","CommonAccessTokenController","hostTokenMap","processResponseHeaders","httpResponse","commonAccessTokenHeader","COMMON_ACCESS_TOKEN_HEADER","getCommonAccessTokenForUrl","ClientDataReportingController","isAdaptationsIncluded","adaptationSet","isServiceLocationIncluded","requestType","ExtUrlQueryInfoController","mpdQueryStringInformation","_generateQueryParams","resultObject","manifestObject","mpdUrlQuery","parentLevelInfo","mpdElement","properties","UrlQueryInfo","ExtUrlQueryInfo","_getDescriptorTypeFromManifestObject","defaultInitialString","initialQueryString","queryInfo","queryString","useMPDUrlQuery","_generateInitialQueryString","parentQueryString","finalQueryString","queryTemplate","_generateFinalQueryString","sameOriginOnly","parentIncludeInRequests","_getIncludeInRequestFromProperty","getFinalQueryString","requestUrl","canSendToOrigin","createFinalQueryStrings","periodObject","adaptationObject","representationObject","redirected","resourceTiming","HTTPLoader","requestTimeout","httpRequests","delayedRequests","retryRequests","downloadErrorToRequestTypeMap","cmcdModel","cmsdModel","xhrLoader","fetchLoader","customParametersModel","commonAccessTokenController","clientDataReportingController","extUrlQueryInfoController","_internalLoad","remainingAttempts","_onloadend","_onRequestEnd","_onprogress","firstProgress","requestObject","responseStart","encodedBodySize","traces","lastTraceTime","lastTraceReceivedCount","progressTimeout","loader","progress","_onabort","_ontimeout","timeoutMessage","percentageComplete","aborted","_updateRequestTimingInfo","_updateResourceTimingInfo","interceptors","getResponseInterceptors","prev","resp","_applyResponseInterceptors","_httpResponse","httpRequest","addHttpRequest","_addHttpRequestMetric","addManifestUpdate","MANIFEST_LOADING_FINISHED","success","complete","getRetryAttemptsForType","_retriggerRequest","requestStartTime","responseEnd","resources","getEntriesByType","resource","transferSize","_areResourceTimingValuesUsable","resourceTimingValues","_addResourceTimingValues","_loadRequest","getRequestInterceptors","_applyRequestInterceptors","_httpRequest","retryRequest","getRetryIntervalsForType","loaderInformation","fileLoaderType","FILE_LOADER_TYPES","FETCH","XHR","_getLoader","currentServiceLocation","currentAdaptationSetId","cmcdMode","CMCD_QUERY_KEY","additionalQueryParameter","cmcdQueryParameter","_getAdditionalQueryParameter","CMCD_MODE_HEADER","_updateRequestUrlAndHeadersWithCmcd","_addExtUrlQueryParameters","_addPathwayCloningParameters","commonAccessToken","_addCommonAccessToken","getXHRWithCredentialsForType","CommonMediaRequest","GET","CommonMediaResponse","delayedRequest","delayTimeout","reqData","CustomParametersModel","SchemeLoaderFactory","schemeLoaderMap","unregisterAllLoader","getLoader","startsWith","registerLoader","unregisterLoader","URLLoader","schemeLoaderFactory","loaderFactory","checkForExistenceOnly","FragmentLoader","urlLoader","checkForExistence","report","exists","headRequest","HeadRequest","errorText","FragmentController","fragmentModels","model","onFragmentLoadingCompleted","isInit","strInfo","DataChunk","createDataChunk","getModel","bitrate","tilesHor","tilesVert","widthPerTile","heightPerTile","templateUrl","IsoBox","boxData","isComplete","first_offset","references","subsegment_duration","scheme_id_uri","presentation_time_delta","presentation_time","event_duration","message_data","sequence_number","base_data_offset","sample_description_index","default_sample_duration","default_sample_size","default_sample_flags","baseMediaDecodeTime","first_sample_flags","data_offset","samples","sample_size","sample_duration","sample_composition_time_offset","reference_track_ID","getChildBox","getChildBoxes","IsoFile","parsedIsoFile","convertToDashIsoBox","setData","getLastBox","typeOfLastCompletedBox","typeOfLastTargetBox","BoxParser","fileStart","parsedFile","dashIsoFile","parseUint32","parseIsoBoxType","findInitRange","initRange","ftyp","moov","boxTypesToSearchFor","IsoBoxSearchInfo","boxInfo","boxSize","boxType","ab","mdhdBox","getSamplesInfo","sampleList","lastSequenceNumber","totalDuration","numSequences","sampleDuration","sampleCompositionTimeOffset","sampleCount","sampleDts","dataOffset","moofBoxes","mfhdBoxes","subsIndex","nextSubsSample","moofBox","trafBoxes","trafBox","tfhdBox","tfdtBox","trunBoxes","subsBoxes","trunBox","sampleData","subsBox","sample_delta","subSizes","subsamples","subsample_size","ThumbnailTracks","tracks","representations","currentTrackIndex","_createTrack","useSegmentBase","track","ThumbnailTrackInfo","vars","cache","_normalizeSegments","readThumbnail","cached","ss","blob","Blob","imageUrl","createObjectURL","_handleUpdatedSegmentData","buildTemplateUrl","addTracks","getMediaInfoForType","voReps","getVoRepresentations","getCurrentTrack","getCurrentTrackIndex","getRepresentations","getThumbnailRequestForTime","currentVoRep","getTracks","setTrackById","findIndex","setTrackByIndex","ThumbnailController","thumbnailTracks","provide","thumbIndex","thumbnail","Thumbnail","seq","seqIdx","_buildUrlFromTemplate","BlackListController","blacklist","updateEventName","addBlacklistEventName","onAddBlackList","query","MEDIA_TYPES","manifestUpdater","eventController","protectionController","isInitialized","isActive","hasFinishedBuffering","hasAudioTrack","fragmentController","thumbnailController","preloaded","isEndedEventSignaled","trackChangedEvents","_commonMediaInitialization","representationsFromPreviousPeriod","_addInlineEvents","representationFromPreviousPeriod","_initializeMediaForType","previousBuffersSinks","sp","bufferSinks","getValue","_initializationCompleted","createTracks","initialMediaInfo","allMediaForType","getAllMediaInfoForType","embeddedMediaInfos","isEmbedded","addEmbeddedTrack","_isMediaSupported","addTrack","setInitialMediaSettingsForType","addMediaInfosToBuffer","_createStreamProcessor","getCurrentTrackFor","supportsEncryptedMedia","deactivate","deactivateStream","_setPreloaded","setIsEndedEventSignaled","STREAM_DEACTIVATED","getStartTime","_onProtectionError","addInlineEvents","_getMediaInfo","_getStreamProcessorForType","onBufferingCompleted","processors","onInbandEvents","addInbandEvents","getProcessorForMediaInfo","_getProcessorByType","processor","startScheduleControllers","clearMediaInfoArray","initializeForMedia","handleKeySystemFromManifest","waitForReadyState","VIDEO_ELEMENT_READY_STATES","HAVE_METADATA","STREAM_INITIALIZED","getPreloaded","activate","STREAM_ACTIVATED","_initializeMedia","getAdapter","getCurrentMediaInfoForType","getCurrentRepresentationForType","getHasAudioTrack","getHasFinishedBuffering","getHasVideoTrack","getIsActive","getIsEndedEventSignaled","getRepresentationForTypeById","possibleVoRepresentations","mediaInfos","_getAllMediaInfos","flatMap","targetReps","getRepresentationForTypeByIndex","getRepresentationsByType","getThumbnailController","KEY_ERROR","SERVER_CERTIFICATE_UPDATED","LICENSE_REQUEST_COMPLETE","KEY_SYSTEM_SELECTED","KEY_SESSION_CREATED","initializeForStream","STREAM_UPDATED","initializeForTextWithMediaSource","createBufferSinkForText","prepareTrackChange","refreshManifestOnSwitchTrack","getIsUpdating","refreshManifest","clearDataForStream","startPreloading","previousBuffers","triggerProtectionError","updatedStreamInfo","trackChangedEvent","BlacklistController","reloadUri","pathwayPriority","pathwayClones","ContentSteeringController","currentSteeringResponseData","serviceLocationList","throughputList","nextRequestTimer","_onFragmentLoadingStarted","_addToServiceLocationList","_onManifestLoadingStarted","_onThroughputMeasurementStored","throughputValues","getSteeringDataFromManifest","contentSteeringData","loadSteeringData","steeringDataFromManifest","location","getArithmeticMean","_calculateThroughputForServiceLocation","pathwayString","throughputString","_getSteeringServerUrl","ContentSteeringRequest","ContentSteeringResponse","pathwayClone","_isValidPathwayClone","_startSteeringRequestTimer","_handleSteeringResponse","CONTENT_STEERING_REQUEST_COMPLETED","retryAfter","getResponseHeader","_handleSteeringResponseError","_getClearedServiceLocationListAfterSteeringRequest","_getSynthesizedElements","referenceElements","synthesizedElements","baseElements","referenceUrl","synthesizedElement","synthesizedUrl","stopSteeringRequestTimer","THROUGHPUT_MEASUREMENT_STORED","getCurrentSteeringResponseData","shouldQueryBeforeStart","getSynthesizedBaseUrlElements","synthesizedBaseUrl","getSynthesizedLocationElements","synthesizedLocation","LocationSelector","blacklistController","contentSteeringController","select","mpdLocations","mpdLocation","_findMpdLocation","_selectByContentSteering","_selectByDefault","ManifestUpdater","refreshDelay","refreshTimer","isStopped","isUpdating","manifestLoader","locationSelector","stopManifestRefreshTimer","startManifestRefreshTimer","onRefreshTimer","ignorePatch","availablePatchLocations","patchLocation","availableMpdLocations","manifestLocations","_getAvailableMpdLocations","getIsPatch","patch","isPatchValid","patchSuccessful","applyPatchToManifest","updatedPublishTime","setValue","onManifestLoaded","onPlaybackStarted","onPlaybackPaused","onStreamsComposed","setManifest","TimeSyncController","isSynchronizing","isBackgroundSynchronizing","backgroundSyncTimeOffsets","timingSources","timeOfLastSync","timeOfLastBackgroundSync","lastOffset","lastTimingSource","internalTimeBetweenSyncAttempts","_onAttemptBackgroundSync","_attemptBackgroundSync","attempts","_completeBackgroundTimeSyncSequence","deviceTimeBeforeSync","serverTime","deviceTimeAfterSync","_calculateOffset","_attemptRecursiveSync","failed","dateHeaderValue","getLatestMPDRequestHeaderValueByID","dateHeaderTime","_completeTimeSyncSequence","_checkForDateHeader","_xsdatetimeDecoder","xsdatetimeStr","parsedDate","utcDate","timezoneOffset","_alternateXsdatetimeDecoder","_iso8601Decoder","isoStr","_rfc1123Decoder","dateStr","_notSupportedHandler","onSuccessCB","onFailureCB","_directHandler","_httpHandler","isHeadRequest","oncomplete","verb","HEAD","urls","_httpHeadHandler","isOffsetDriftWithinThreshold","_isOffsetDriftWithinThreshold","adjustedTimeBetweenSyncAttempts","_adjustTimeBetweenSyncAttempts","shouldAttemptBackgroundSync","averageOffset","maxAllowedDrift","attemptSync","tSources","_shouldPerformSynchronization","HTTP_TIMEOUT_MS","MediaSourceController","mediaSourceType","attachMediaSource","objectURL","setSource","setDisableRemotePlayback","createMediaSource","hasWebKit","hasMediaSource","ManagedMediaSource","MediaSource","WebKitMediaSource","detachMediaSource","setDuration","sourceBuffers","isBufferUpdating","setSeekable","setLiveSeekableRange","clearLiveSeekableRange","signalEndOfStream","endOfStream","EventController","MPD_RELOAD_SCHEME","MPD_RELOAD_VALUE","MPD_CALLBACK_SCHEME","MPD_CALLBACK_VALUE","REMAINING_EVENTS_THRESHOLD","EVENT_HANDLED_STATES","inlineEvents","eventInterval","lastEventTimerCall","eventHandlingInProgress","isStarted","_onEventTimer","currentVideoTime","presentationTimeThreshold","_triggerEvents","_removeOutdatedEventObjects","_startEvent","EVENT_MODE_ON_START","_eventHasExpired","periodEndTime","_eventIsInvalid","periodId","_removeEvent","_iterateAndTriggerCallback","_addOrUpdateEvent","shouldOverwriteExistingEvents","eventState","indexOfExistingEvent","triggeredReceivedEvent","triggeredStartEvent","oldEvent","_handleManifestReloadEvent","validUntil","newManifestValidAfter","_triggerRemainingEvents","periodDuration","periodStart","calculatedPresentationTimeInSeconds","periodIds","currentPeriod","schemeIdUris","eventId","_refreshManifest","_sendCallbackRequest","values","getInbandEvents","getInlineEvents","_onStopEventController","_stop","LEVELS","SUGGESTION","WARNING","ERROR","NO_UTC_TIMING_ELEMENT","NON_COMPLIANT_SMPTE_IMAGE_ATTRIBUTE","INVALID_DVR_WINDOW","StreamController","capabilitiesFilter","mediaSourceController","timeSyncController","uriFragmentModel","protectionData","isStreamSwitchingInProgress","hasMediaError","hasInitialisationError","initialPlayback","initialSteeringRequest","playbackEndedTimerInterval","preloadingStreams","firstLicenseIsFetched","waitForPlaybackStartTimeout","providedStartTime","errorInformation","_checkConfig","_onTimeSyncCompleted","streamsInfo","getStreamsInfo","getBufferRange","clientTimeOffset","shouldKeepStream","_filterOutdatedStreams","_initializeOrUpdateStream","addManifestUpdateStreamInfo","_initializeForFirstStream","_checkIfPrebufferingCanStart","_composePeriods","_onKeySessionUpdated","getStreamById","dvrRange","waitingTime","AST_IN_FUTURE","calculateProducerReferenceTimeOffsets","_getFragmentDurationForLiveDelayCalculation","_calculateStartTimeAndSwitchStream","startTimeFromUri","_getStartTimeFromUriParameters","providedStartTimeAsPresentationTime","_getStartTimeFromProvidedData","getStreams","_getInitialStartTime","initialStream","getStreamForTime","startStream","_switchStream","previousStream","PERIOD_SWITCH_STARTED","fromStreamInfo","toStreamInfo","_canSourceBuffersBeKept","_getRepresentationsFromPreviousPeriod","_openMediaSource","streamActivated","_activateStream","inputParameters","sourceUrl","_onMediaSourceOpen","revokeObjectURL","_setMediaDuration","_open","sinks","seekToStream","_cancelPreloading","_handleOuterPeriodSeek","_flushPlaylistMetrics","_handleInnerPeriodSeek","_createPlaylistMetrics","_deactivateAllPreloadingStreams","_onCurrentTrackChanged","nextStream","isProtectionCompatible","_onStreamCanLoadNext","calcTimeShiftBufferWindow","activeStreamProcessors","addDVRInfo","_onBufferLevelUpdated","getInitialBufferLevel","excludedStreamProcessors","addBufferLevel","_onQualityChanged","_onLiveDelaySettingUpdated","playbackQuality","getPlaybackQuality","addDroppedFrames","_onStreamBufferingCompleted","upcomingStreams","refStream","refStreamInfo","_getNextStreams","_stopPlaybackEndedTimerInterval","targetIndex","lastDiff","diff","_getNextStream","manifestDuration","fragData","getURIFragmentData","_getStartTimeFromString","targetValue","targetString","streamInfos","maxFragmentDuration","updatePeriods","filterUnsupportedFeatures","manifestUTCTimingSources","CONFORMANCE_VIOLATION","ConformanceViolationConstants","allUTCTimingSources","addPlayList","startReason","createPlaylistMetrics","_onInternalKeyStatusesChanged","updateKeyStatusesMap","hasUnusableKey","areKeyIdsUsable","areKeyIdsExpired","ProtectionErrors","KEY_STATUS_CHANGED_EXPIRED_ERROR_CODE","KEY_STATUS_CHANGED_EXPIRED_ERROR_MESSAGE","_handleExpiredKeyId","supportedMediaInfos","setTrack","_handleUnusableKeyId","_triggerUnusableKeySeek","_handleKeyStatuses","counts","_handleMediaErrorDecode","msExtendedCode","_onManifestValidityChanged","METRIC_ADDED","_onMetricAdded","QUALITY_CHANGE_REQUESTED","KEY_SESSION_UPDATED","ProtectionEvents","INTERNAL_KEY_STATUSES_CHANGED","clearAllCurrentMetrics","PROTECTION_DESTROYED","STREAM_TEARDOWN_COMPLETE","metric","targetMediaType","getHasMediaOrInitialisationError","getIsStreamSwitchInProgress","getTimeRelativeToStreamId","baseStart","streamStart","streamDur","autoPl","protData","PROTECTION_CREATED","setMediaElement","setProtectionData","loadWithManifest","_checkInitialize","switchToVideoElement","GapController","lastPlaybackTime","gapHandlerInterval","lastGapJumpPosition","jumpTimeoutHandler","trackSwitchByMediaType","_onInitialStreamSwitch","_onBufferReplacementStarted","_onBufferReplacementEnded","_unregisterEvents","_shouldCheckForGaps","_jumpGap","_startGapHandler","checkSeekingState","shouldIgnoreSeekingState","streamEnd","_shouldIgnoreSeekingState","nextRangeIndex","seekToPosition","jumpToStreamEnd","_getNextRangeIndex","timeToStreamEnd","_isTimeBuffered","timeUntilGapEnd","timeToWait","_registerEvents","CatchupController","isCatchupSeekInProgress","isSafari","_onCatchupSettingUpdated","getCatchupModeEnabled","setPlaybackRate","getCatchupPlaybackRates","_getCatchupMode","LIVE_CATCHUP_MODE_LOLP","currentBuffer","_getLatencyDrift","_lolpNeedToCatchUpCustom","_defaultNeedToCatchUp","_shouldStartCatchUp","newRate","currentPlaybackRate","liveCatchupPlaybackRates","deltaLatency","getCatchupMaxDrift","currentLiveLatency","targetLiveDelay","liveCatchUpPlaybackRates","cpr","E","minDifference","_calculateNewPlaybackRateLolP","_calculateNewPlaybackRateDefault","minPlaybackRateChange","_startPlaybackCatchUp","_checkPlaybackRates","SUPPORTED_SCHEMES","SERVICE_DESCRIPTION_DVB_LL_SCHEME","ServiceDescriptionController","prftOffsets","_updateBandwidthSetting","getProducerReferenceTimeOffsets","timeOffsets","mediaTypes","astInSeconds","offsets","getProducerReferenceTimes","voRep","prt0","supportedServiceDescriptions","allClientsServiceDescriptions","_getDvbServiceDescriptionLatencyParameters","sdLatency","_calculateTimeOffset","_applyServiceDescriptionLatency","_applyServiceDescriptionPlaybackRate","maxBandwidth","targetBandwidth","mediaTypesToApply","_applyServiceDescriptionOperatingBandwidth","_applyServiceDescriptionContentSteering","_applyServiceDescriptionClientDataReporting","schema","irregular","regular","extendedLanguageSubtags","variants","singleton","privateuse","isAlphabetical","character","isDecimal","isAlphanumerical","normal","own","replacement","groups","fail","forgiving","cast","rightIndex","leftIndex","extendedFilter","fields","many","an","fq","nt","pc","yu","ant","scg","ntz","sun","yug","likely","aa","aaa","aab","aac","aad","aae","aaf","aag","aah","aai","aak","aal","aan","aao","aap","aaq","aas","aat","aau","aaw","aax","aaz","aba","abb","abc","abd","abe","abf","abg","abh","abi","abl","abm","abn","abo","abp","abq","abt","abu","abv","abw","abx","aby","abz","aca","acb","acd","ace","acf","ach","acm","acn","acp","acq","acr","acs","act","acu","acv","acw","acx","acy","acz","ada","adb","ade","adf","adg","adh","adi","adj","adl","adn","ado","adp","adq","adr","adt","adu","adw","adx","ady","adz","ae","aea","aeb","aec","aee","aek","ael","aem","aeq","aer","aeu","aew","aey","aez","af","afb","afd","afe","afh","afi","afk","afn","afo","afp","afs","afu","afz","aga","agb","agc","agd","age","agf","agg","agh","agi","agj","agk","agl","agm","agn","ago","agq","agr","ags","agt","agu","agv","agw","agx","agy","agz","aha","ahb","ahg","ahh","ahi","ahk","ahl","ahm","ahn","aho","ahp","ahr","ahs","aht","aia","aib","aic","aid","aie","aif","aig","aij","aik","ail","aim","ain","aio","aip","aiq","air","ait","aiw","aix","aiy","aja","ajg","aji","ajn","ajp","ajt","ajw","ajz","ak","akb","akc","akd","ake","akf","akg","akh","aki","akk","akl","ako","akp","akq","akr","aks","akt","aku","akv","akw","akz","ala","alc","ald","ale","alf","alh","ali","alj","alk","alm","aln","alo","alp","alq","alr","alt","alu","alw","alx","aly","alz","am","ama","amb","amc","ame","amf","amg","ami","amj","amk","amm","amn","amo","amp","amq","amr","ams","amt","amu","amv","amw","amx","amy","amz","ana","anb","anc","and","ane","anf","ang","anh","ani","anj","ank","anl","anm","ann","ano","anp","anr","ans","anu","anv","anw","anx","any","anz","aoa","aob","aoc","aod","aoe","aof","aog","aoi","aoj","aok","aol","aom","aon","aor","aos","aot","aox","aoz","apb","apc","apd","ape","apf","apg","aph","api","apj","apk","apl","apm","apn","apo","app","apr","aps","apt","apu","apv","apw","apx","apy","apz","aqc","aqd","aqg","aqk","aqm","aqn","aqr","aqt","aqz","arc","ard","are","arh","ari","arj","ark","arl","arn","aro","arp","arq","ars","aru","arw","arx","ary","arz","asa","asb","asc","ase","asg","ash","asi","asj","ask","asl","asn","aso","ass","ast","asu","asv","asx","asy","asz","ata","atb","atc","atd","ate","atg","ati","atj","atk","atl","atm","atn","ato","atp","atq","atr","ats","att","atu","atv","atw","atx","aty","atz","aua","auc","aud","aug","auh","aui","auj","auk","aul","aum","aun","auo","aup","auq","aur","aut","auu","auw","auy","auz","av","avb","avd","avi","avk","avl","avm","avn","avo","avs","avt","avu","avv","awa","awb","awc","awe","awg","awh","awi","awk","awm","awn","awo","awr","aws","awt","awu","awv","aww","awx","awy","axb","axe","axg","axk","axl","axm","axx","ay","aya","ayb","ayc","ayd","aye","ayg","ayh","ayi","ayk","ayl","ayn","ayo","ayp","ayq","ays","ayt","ayu","ayz","az","azb","azd","azg","azm","azn","azo","azt","azz","ba","baa","bab","bac","bae","baf","bag","bah","baj","bal","ban","bao","bap","bar","bas","bau","bav","baw","bax","bay","bba","bbb","bbc","bbd","bbe","bbf","bbg","bbi","bbj","bbk","bbl","bbm","bbn","bbo","bbp","bbq","bbr","bbs","bbt","bbu","bbv","bbw","bbx","bby","bca","bcb","bcd","bce","bcf","bcg","bch","bci","bcj","bck","bcm","bcn","bco","bcp","bcq","bcr","bcs","bct","bcu","bcv","bcw","bcy","bcz","bda","bdb","bdc","bdd","bde","bdf","bdg","bdh","bdi","bdj","bdk","bdl","bdm","bdn","bdo","bdp","bdq","bdr","bds","bdt","bdu","bdv","bdw","bdx","bdy","bdz","be","bea","beb","bec","bed","bee","bef","beh","bei","bej","bek","bem","beo","bep","beq","bes","bet","beu","bev","bew","bex","bey","bez","bfa","bfb","bfc","bfd","bfe","bff","bfg","bfh","bfj","bfl","bfm","bfn","bfo","bfp","bfq","bfs","bft","bfu","bfw","bfx","bfy","bfz","bg","bga","bgb","bgc","bgd","bgf","bgg","bgi","bgj","bgn","bgo","bgp","bgq","bgr","bgs","bgt","bgu","bgv","bgw","bgx","bgy","bgz","bha","bhb","bhc","bhd","bhe","bhf","bhg","bhh","bhi","bhj","bhl","bhm","bhn","bho","bhp","bhq","bhr","bhs","bht","bhu","bhv","bhw","bhy","bhz","bia","bib","bid","bie","bif","big","bik","bil","bim","bin","bio","bip","biq","bir","bit","biu","biv","biw","biy","biz","bja","bjb","bjc","bjf","bjg","bjh","bji","bjj","bjk","bjl","bjm","bjn","bjo","bjp","bjr","bjs","bjt","bju","bjv","bjw","bjx","bjy","bjz","bka","bkc","bkd","bkf","bkg","bkh","bki","bkj","bkl","bkm","bkn","bko","bkp","bkq","bkr","bks","bkt","bku","bkv","bkw","bkx","bky","bkz","bla","blb","blc","bld","ble","blf","blg","blh","bli","blj","blk","blm","bln","blo","blp","blq","blr","bls","blt","blv","blw","blx","bly","blz","bm","bma","bmb","bmc","bmd","bme","bmf","bmg","bmh","bmi","bmj","bmk","bml","bmm","bmn","bmo","bmp","bmq","bmr","bms","bmu","bmv","bmw","bmx","bmz","bn","bna","bnb","bnc","bnd","bne","bnf","bng","bni","bnj","bnk","bnm","bnn","bno","bnp","bnq","bnr","bns","bnu","bnv","bnw","bnx","bny","bnz","bo","boa","bob","boe","bof","boh","boj","bok","bol","bom","bon","boo","bop","boq","bor","bot","bou","bov","bow","boy","boz","bpa","bpc","bpe","bpg","bph","bpi","bpj","bpk","bpl","bpm","bpo","bpp","bpq","bpr","bps","bpt","bpu","bpv","bpw","bpx","bpy","bpz","bqa","bqb","bqc","bqd","bqf","bqg","bqi","bqj","bqk","bql","bqm","bqo","bqp","bqq","bqr","bqs","bqt","bqu","bqv","bqw","bqx","bqz","bra","brb","brc","brd","brf","brg","brh","bri","brj","brk","brl","brm","brn","brp","brq","brr","brs","brt","bru","brv","brx","bry","brz","bsa","bsb","bsc","bse","bsf","bsh","bsi","bsj","bsk","bsl","bsm","bsn","bso","bsp","bsq","bsr","bss","bst","bsu","bsv","bsw","bsx","bsy","bta","btc","btd","bte","btf","btg","bth","bti","btj","btm","btn","bto","btp","btq","btr","bts","btt","btu","btv","btw","btx","bty","btz","bua","bub","buc","bud","bue","bug","buh","bui","buj","buk","bum","bun","buo","bup","buq","bus","but","buu","buv","buw","bux","buy","buz","bva","bvb","bvc","bvd","bve","bvf","bvg","bvh","bvi","bvj","bvk","bvm","bvn","bvo","bvq","bvr","bvt","bvu","bvv","bvw","bvx","bvy","bvz","bwa","bwb","bwc","bwd","bwe","bwf","bwg","bwh","bwi","bwj","bwk","bwl","bwm","bwo","bwp","bwq","bwr","bws","bwt","bwu","bww","bwx","bwy","bwz","bxa","bxb","bxc","bxf","bxg","bxh","bxi","bxj","bxl","bxm","bxn","bxo","bxp","bxq","bxs","bxu","bxv","bxw","bxz","bya","byb","byc","byd","bye","byf","byh","byi","byj","byk","byl","bym","byn","byp","byr","bys","byv","byw","byx","byz","bza","bzb","bzc","bzd","bze","bzf","bzh","bzi","bzj","bzk","bzl","bzm","bzn","bzo","bzp","bzq","bzr","bzt","bzu","bzv","bzw","bzx","bzy","bzz","ca","caa","cab","cac","cad","cae","caf","cag","cah","caj","cak","cal","cam","can","cao","cap","caq","car","cas","cav","caw","cax","cay","caz","cbb","cbc","cbd","cbg","cbi","cbj","cbk","cbl","cbn","cbo","cbq","cbr","cbs","cbt","cbu","cbv","cbw","cby","ccc","ccd","cce","ccg","cch","ccj","ccl","ccm","cco","ccp","ccr","cde","cdf","cdh","cdi","cdj","cdm","cdo","cdr","cdz","ce","cea","ceb","ceg","cek","cen","cet","cey","cfa","cfd","cfm","cga","cgc","cgg","cgk","ch","chb","chd","chf","chg","chh","chj","chk","chl","chm","chn","cho","chp","chq","chr","cht","chw","chx","chy","chz","cia","cib","cic","cie","cih","cim","cin","cip","cir","ciw","ciy","cja","cje","cjh","cji","cjk","cjm","cjn","cjo","cjp","cjs","cjv","cjy","ckb","ckl","ckm","ckn","cko","ckq","ckr","cks","ckt","cku","ckv","ckx","cky","ckz","cla","clc","cle","clh","cli","clj","clk","cll","clm","clo","clt","clu","clw","cly","cma","cme","cmg","cmi","cml","cmo","cmr","cms","cmt","cna","cnb","cnc","cng","cnh","cni","cnk","cnl","cnp","cnq","cns","cnt","cnw","cnx","co","coa","cob","coc","cod","coe","cof","cog","coh","coj","cok","col","com","coo","cop","coq","cot","cou","cox","coz","cpa","cpb","cpc","cpg","cpi","cpn","cpo","cps","cpx","cpy","cqd","crb","crc","crd","crf","crg","crh","cri","crj","crk","crl","crm","crn","cro","crq","crs","crt","crv","crw","crx","cry","crz","csa","csb","csh","csj","csk","csm","cso","csp","css","cst","csv","csw","csy","csz","cta","ctc","ctd","cte","ctg","cth","ctl","ctm","ctn","cto","ctp","cts","ctt","ctu","ctz","cu","cua","cub","cuc","cuh","cui","cuj","cuk","cul","cuo","cup","cut","cuu","cuv","cux","cv","cvg","cvn","cwa","cwb","cwe","cwg","cwt","cy","cya","cyb","cyo","czh","czk","czn","czt","daa","dac","dad","dae","daf","dag","dah","dai","daj","dak","dal","dam","dao","daq","dar","das","dau","dav","daw","dax","daz","dba","dbb","dbd","dbe","dbf","dbg","dbi","dbj","dbl","dbm","dbn","dbo","dbp","dbq","dbt","dbu","dbv","dbw","dby","dcc","dcr","dda","ddd","dde","ddg","ddi","ddj","ddn","ddo","ddr","dds","ddw","de","dec","ded","dee","def","deg","deh","dei","dek","del","dem","den","deq","der","des","dev","dez","dga","dgb","dgc","dgd","dge","dgg","dgh","dgi","dgk","dgl","dgn","dgr","dgs","dgt","dgw","dgx","dgz","dhg","dhi","dhl","dhm","dhn","dho","dhr","dhs","dhu","dhv","dhw","dhx","dia","dib","dic","did","dif","dig","dih","dii","dij","dil","din","dio","dip","dis","diu","diw","dix","diy","diz","dja","djb","djc","djd","dje","djf","dji","djj","djk","djm","djn","djo","djr","dju","djw","dka","dkg","dkk","dkr","dks","dkx","dlg","dlm","dln","dma","dmb","dmc","dmd","dme","dmf","dmg","dmk","dml","dmm","dmo","dmr","dms","dmu","dmv","dmw","dmx","dmy","dna","dnd","dne","dng","dni","dnj","dnk","dnn","dno","dnr","dnt","dnu","dnv","dnw","dny","doa","dob","doe","dof","doh","doi","dok","dol","don","doo","dop","dor","dos","dot","dov","dow","dox","doy","dpp","drc","dre","drg","drh","dri","drl","drn","dro","drq","drs","drt","dru","dry","dsb","dsh","dsi","dsn","dso","dsq","dta","dtb","dtd","dth","dti","dtk","dtm","dto","dtp","dtr","dts","dtt","dtu","dty","dua","dub","duc","dud","due","duf","dug","duh","dui","duk","dul","dum","dun","duo","dup","duq","dus","duu","duv","duw","dux","duy","duz","dv","dva","dwa","dwk","dwr","dws","dwu","dww","dwy","dwz","dya","dyb","dyd","dyg","dyi","dym","dyn","dyo","dyu","dyy","dz","dza","dze","dzg","dzl","dzn","eaa","ebc","ebg","ebk","ebo","ebr","ebu","ecr","ecy","efa","efe","efi","ega","egl","egm","ego","egy","ehu","eip","eit","eiv","eja","eka","eke","ekg","eki","ekl","ekm","eko","ekp","ekr","eky","ele","elk","elm","elo","elu","ema","emb","eme","emg","emi","emm","emn","emp","ems","emu","emw","emx","emz","en","ena","enb","enf","enh","enl","enm","enn","eno","enq","enr","env","enw","enx","eo","eot","epi","era","erg","erh","eri","erk","ert","erw","ese","esg","esh","esi","esm","ess","esu","esy","et","etb","etn","eto","etr","ets","ett","etu","etx","etz","eu","eve","evh","evn","ewo","eya","eyo","eza","eze","fa","faa","fab","fad","faf","fag","fah","fai","faj","fak","fal","fam","fan","fap","far","fau","fax","fay","faz","fbl","fer","ff","ffi","ffm","fgr","fia","fie","fif","fil","fip","fir","fit","fiw","fj","fkk","fkv","fla","flh","fli","fll","fln","flr","fly","fmp","fmu","fnb","fng","fni","fo","fod","foi","fom","fon","fos","fpe","fqs","fr","frc","frd","frk","fro","frp","frq","frr","frs","frt","fub","fud","fue","fuf","fuh","fui","fum","fun","fuq","fur","fut","fuu","fuv","fuy","fvr","fwa","fwe","fy","ga","gaa","gab","gac","gad","gae","gaf","gag","gah","gai","gaj","gak","gal","gam","gan","gao","gaq","gar","gas","gat","gau","gaw","gax","gay","gba","gbb","gbd","gbe","gbf","gbg","gbh","gbi","gbj","gbk","gbl","gbm","gbn","gbp","gbq","gbr","gbs","gbu","gbv","gbw","gbx","gby","gbz","gcc","gcd","gcf","gcl","gcn","gcr","gct","gd","gdb","gdc","gdd","gde","gdf","gdg","gdh","gdi","gdj","gdk","gdl","gdm","gdn","gdo","gdq","gdr","gdt","gdu","gdx","gea","geb","gec","ged","gef","geg","geh","gei","gej","gek","gel","geq","ges","gev","gew","gex","gey","gez","gfk","gga","ggb","ggd","gge","ggg","ggk","ggl","ggn","ggt","ggu","ggw","gha","ghc","ghe","ghk","ghn","ghr","ghs","ght","gia","gib","gic","gid","gie","gig","gih","gil","gim","gin","gip","giq","gir","gis","git","gix","giy","giz","gjk","gjm","gjn","gjr","gju","gka","gkd","gke","gkn","gko","gkp","gku","gl","glb","glc","gld","glh","glj","glk","gll","glo","glr","glu","glw","gma","gmb","gmd","gmg","gmh","gmm","gmn","gmr","gmu","gmv","gmx","gmy","gmz","gn","gna","gnb","gnc","gnd","gne","gng","gnh","gni","gnj","gnk","gnl","gnm","gnn","gnq","gnr","gnt","gnu","gnw","gnz","goa","gob","goc","god","goe","gof","gog","goh","goi","gok","gol","gom","gon","goo","gop","goq","gor","gos","got","gou","gov","gow","gox","goy","gpa","gpe","gpn","gqa","gqn","gqr","gra","grb","grc","grd","grg","grh","gri","grj","grm","grq","grs","grt","gru","grv","grw","grx","gry","grz","gsl","gsn","gso","gsp","gsw","gta","gtu","gu","gua","gub","guc","gud","gue","guf","guh","gui","guk","gul","gum","gun","guo","gup","guq","gur","gut","guu","guw","gux","guz","gv","gva","gvc","gve","gvf","gvj","gvl","gvm","gvn","gvo","gvp","gvr","gvs","gvy","gwa","gwb","gwc","gwd","gwe","gwf","gwg","gwi","gwj","gwm","gwn","gwr","gwt","gwu","gww","gwx","gxx","gyb","gyd","gye","gyf","gyg","gyi","gyl","gym","gyn","gyo","gyr","gyy","gyz","gza","gzi","gzn","ha","haa","hac","had","hae","hag","hah","hai","haj","hak","hal","ham","han","hao","hap","haq","har","hav","haw","hax","hay","haz","hba","hbb","hbn","hbo","hbu","hch","hdy","he","hed","heg","heh","hei","hem","hgm","hgw","hhi","hhr","hhy","hia","hib","hid","hif","hig","hih","hii","hij","hik","hil","hio","hir","hit","hiw","hix","hji","hka","hke","hkh","hkk","hla","hlb","hld","hlt","hlu","hma","hmb","hmd","hmf","hmj","hmm","hmn","hmp","hmq","hmr","hms","hmt","hmu","hmv","hmw","hmy","hmz","hna","hnd","hne","hng","hnh","hni","hnj","hnn","hno","hns","ho","hoa","hob","hoc","hod","hoe","hoh","hoi","hoj","hol","hom","hoo","hop","hor","hot","hov","how","hoy","hpo","hr","hra","hrc","hre","hrk","hrm","hro","hrp","hrt","hru","hrw","hrx","hrz","hsb","hsn","hss","ht","hti","hto","hts","htu","htx","hu","hub","huc","hud","hue","huf","hug","huh","hui","huk","hul","hum","hup","hur","hus","hut","huu","huv","huw","hux","huy","huz","hvc","hve","hvk","hvn","hvv","hwa","hwc","hwo","hy","hya","hyw","hz","ia","iai","ian","iar","iba","ibb","ibd","ibe","ibg","ibh","ibl","ibm","ibn","ibr","ibu","iby","ica","ich","icr","ida","idb","idc","idd","ide","idi","idr","ids","idt","idu","ie","ifa","ifb","ife","iff","ifk","ifm","ifu","ify","ig","igb","ige","igg","igl","igm","ign","igo","igs","igw","ihb","ihi","ihp","ihw","ii","iin","ijc","ije","ijj","ijn","ijs","ik","iki","ikk","ikl","iko","ikp","ikr","ikt","ikv","ikw","ikx","ikz","ila","ilb","ilg","ili","ilk","ilm","ilo","ilp","ilu","ilv","imi","iml","imn","imo","imr","ims","imt","imy","in","inb","ing","inh","inj","inn","ino","inp","int","io","ior","iou","iow","ipi","ipo","iqu","iqw","ire","irh","iri","irk","irn","iru","irx","iry","isa","isc","ish","isi","isk","ism","isn","iso","ist","isu","it","itb","itd","ite","iti","itk","itl","itm","ito","itr","its","itt","itv","itw","itx","ity","itz","iu","ium","ivb","ivv","iw","iwk","iwm","iwo","iws","ixc","ixl","iya","iyo","iyx","izh","izi","izr","izz","ja","jaa","jab","jac","jad","jae","jaf","jah","jaj","jak","jal","jam","jan","jao","jaq","jar","jas","jat","jau","jax","jay","jaz","jbe","jbi","jbj","jbk","jbm","jbn","jbo","jbr","jbt","jbu","jbw","jct","jda","jdg","jdt","jeb","jee","jeh","jei","jek","jel","jen","jer","jet","jeu","jgb","jge","jgk","jgo","jhi","ji","jia","jib","jic","jid","jie","jig","jil","jim","jit","jiu","jiv","jiy","jje","jjr","jka","jkm","jko","jku","jle","jma","jmb","jmc","jmd","jmi","jml","jmn","jmr","jms","jmw","jmx","jna","jnd","jng","jni","jnj","jnl","jns","job","jod","jog","jor","jow","jpa","jpr","jqr","jra","jrr","jrt","jru","jua","jub","jud","juh","jui","juk","jul","jum","jun","juo","jup","jur","jut","juu","juw","juy","jv","jvd","jvn","jw","jwi","jya","jye","jyy","ka","kaa","kab","kac","kad","kag","kah","kai","kaj","kak","kam","kao","kap","kaq","kav","kaw","kax","kay","kba","kbb","kbc","kbd","kbe","kbh","kbi","kbj","kbk","kbl","kbm","kbn","kbo","kbp","kbq","kbr","kbs","kbt","kbu","kbv","kbw","kbx","kby","kbz","kca","kcb","kcc","kcd","kce","kcf","kcg","kch","kci","kcj","kck","kcl","kcm","kcn","kco","kcp","kcq","kcs","kct","kcu","kcv","kcw","kcz","kda","kdc","kdd","kde","kdf","kdg","kdh","kdi","kdj","kdk","kdl","kdm","kdn","kdp","kdq","kdr","kdt","kdw","kdx","kdy","kdz","kea","keb","kec","ked","kee","kef","keg","keh","kei","kek","kel","kem","ken","keo","ker","kes","ket","keu","kew","kex","kez","kfa","kfb","kfc","kfd","kfe","kff","kfh","kfi","kfk","kfl","kfm","kfn","kfo","kfp","kfq","kfr","kfs","kfv","kfw","kfx","kfy","kfz","kg","kga","kgb","kge","kgf","kgj","kgk","kgl","kgm","kgo","kgp","kgq","kgr","kgs","kgt","kgu","kgv","kgw","kgx","kgy","kha","khb","khc","khd","khe","khf","khg","khh","khj","khl","khn","khp","khq","khr","khs","kht","khu","khv","khw","khx","khy","khz","ki","kia","kib","kic","kid","kie","kif","kig","kih","kij","kil","kim","kio","kip","kiq","kis","kit","kiu","kiv","kiw","kix","kiy","kiz","kj","kja","kjb","kjc","kjd","kje","kjg","kjh","kji","kjj","kjk","kjl","kjm","kjn","kjo","kjp","kjq","kjr","kjs","kjt","kju","kjx","kjy","kk","kka","kkb","kkc","kkd","kke","kkf","kkg","kkh","kki","kkj","kkk","kkl","kkm","kko","kkp","kkq","kkr","kks","kkt","kku","kkv","kkw","kkx","kky","kkz","kl","kla","klb","klc","kld","kle","klf","klg","klh","kli","klj","klk","kll","klm","kln","klo","klp","klq","klr","kls","klt","klu","klv","klw","klx","kly","klz","km","kma","kmb","kmc","kmd","kme","kmf","kmg","kmh","kmi","kmj","kmk","kml","kmm","kmn","kmo","kmp","kmq","kms","kmt","kmu","kmv","kmw","kmx","kmy","kmz","kn","kna","knb","knd","kne","knf","kni","knj","knk","knl","knm","kno","knp","knq","knr","kns","knt","knu","knv","knw","knx","kny","knz","ko","koa","koc","kod","koe","kof","kog","koh","koi","kok","kol","koo","kop","koq","kos","kot","kou","kov","kow","koy","koz","kpa","kpc","kpd","kpe","kpf","kpg","kph","kpi","kpj","kpk","kpl","kpm","kpn","kpo","kpq","kpr","kps","kpt","kpu","kpw","kpx","kpy","kpz","kqa","kqb","kqc","kqd","kqe","kqf","kqg","kqh","kqi","kqj","kqk","kql","kqm","kqn","kqo","kqp","kqq","kqr","kqs","kqt","kqu","kqv","kqw","kqx","kqy","kqz","kr","kra","krb","krc","krd","kre","krf","krh","kri","krj","krk","krl","krn","krp","krr","krs","krt","kru","krv","krw","krx","kry","krz","ks","ksa","ksb","ksc","ksd","kse","ksf","ksg","ksh","ksi","ksj","ksk","ksl","ksm","ksn","kso","ksp","ksq","ksr","kss","kst","ksu","ksv","ksw","ksx","ksz","kta","ktb","ktc","ktd","ktf","ktg","kth","kti","ktj","ktk","ktl","ktm","ktn","kto","ktp","ktq","ktr","kts","ktt","ktu","ktv","ktw","ktx","kty","ktz","ku","kub","kuc","kud","kue","kuf","kug","kuh","kui","kuj","kuk","kul","kum","kun","kuo","kup","kuq","kus","kut","kuu","kuv","kuw","kux","kuy","kuz","kv","kva","kvb","kvc","kvd","kve","kvf","kvg","kvh","kvi","kvj","kvl","kvm","kvn","kvo","kvp","kvq","kvr","kvt","kvv","kvw","kvx","kvy","kvz","kw","kwa","kwb","kwc","kwd","kwe","kwf","kwg","kwh","kwi","kwj","kwk","kwl","kwm","kwn","kwo","kwp","kwq","kwr","kws","kwt","kwu","kwv","kww","kwy","kwz","kxa","kxb","kxc","kxd","kxe","kxf","kxi","kxj","kxk","kxl","kxm","kxn","kxo","kxp","kxq","kxr","kxt","kxv","kxw","kxx","kxy","kxz","ky","kya","kyb","kyc","kyd","kye","kyf","kyg","kyh","kyi","kyj","kyk","kyl","kym","kyn","kyo","kyq","kyr","kys","kyt","kyu","kyv","kyw","kyx","kyy","kyz","kza","kzb","kzc","kzd","kze","kzf","kzh","kzi","kzj","kzk","kzl","kzm","kzn","kzo","kzp","kzr","kzs","kzt","kzu","kzv","kzw","kzx","kzy","kzz","la","laa","lab","lac","lad","lae","lag","lah","lai","laj","lal","lam","lan","lap","laq","lar","las","lau","law","lax","laz","lb","lbb","lbc","lbe","lbf","lbi","lbj","lbl","lbm","lbn","lbo","lbq","lbr","lbt","lbu","lbv","lbw","lbx","lby","lbz","lcc","lcd","lce","lcf","lch","lcl","lcm","lcp","lcq","lcs","lda","ldb","ldd","ldg","ldh","ldi","ldj","ldk","ldl","ldm","ldn","ldo","ldp","ldq","lea","leb","lec","led","lee","lef","leh","lei","lej","lek","lel","lem","leo","lep","leq","ler","les","let","leu","lev","lew","lex","ley","lez","lfa","lfn","lg","lga","lgb","lgg","lgh","lgi","lgk","lgl","lgm","lgn","lgo","lgq","lgr","lgt","lgu","lgz","lha","lhh","lhi","lhm","lhn","lhs","lht","lhu","li","lia","lib","lic","lid","lie","lif","lig","lih","lij","lik","lil","lio","lip","liq","lir","lis","liu","liv","liw","lix","liy","liz","lja","lje","lji","ljl","ljp","ljw","ljx","lka","lkb","lkc","lkd","lke","lkh","lki","lkj","lkl","lkm","lkn","lko","lkr","lks","lkt","lku","lky","lla","llb","llc","lld","lle","llf","llg","lli","llj","llk","lll","llm","lln","llp","llq","llu","llx","lma","lmb","lmc","lmd","lme","lmf","lmg","lmh","lmi","lmj","lmk","lml","lmn","lmo","lmp","lmq","lmr","lmu","lmv","lmw","lmx","lmy","lna","lnb","lnd","lnh","lni","lnj","lnl","lnm","lnn","lns","lnu","lnw","lnz","loa","lob","loc","loe","loh","loi","loj","lok","lol","lom","lon","loo","lop","loq","lor","los","lot","lou","low","lox","loy","loz","lpa","lpe","lpn","lpo","lpx","lqr","lra","lrc","lrg","lri","lrk","lrl","lrm","lrn","lro","lrt","lrv","lrz","lsa","lsd","lse","lsi","lsm","lsr","lss","lt","ltg","lth","lti","ltn","lto","lts","ltu","lu","lua","luc","lud","lue","luf","lui","luj","luk","lul","lum","lun","luo","lup","luq","lur","lus","lut","luu","luv","luw","luy","luz","lv","lva","lvi","lvk","lvu","lwa","lwe","lwg","lwh","lwl","lwm","lwo","lwt","lww","lxm","lya","lyn","lzh","lzl","lzn","lzz","maa","mab","mad","mae","maf","mag","mai","maj","mak","mam","man","maq","mas","mat","mau","mav","maw","maz","mba","mbb","mbc","mbd","mbf","mbh","mbi","mbj","mbk","mbl","mbm","mbn","mbo","mbp","mbq","mbr","mbs","mbt","mbu","mbv","mbw","mbx","mby","mbz","mca","mcb","mcc","mcd","mce","mcf","mcg","mch","mci","mcj","mck","mcl","mcm","mcn","mco","mcp","mcq","mcr","mcs","mct","mcu","mcv","mcw","mcx","mcy","mcz","mda","mdb","mdc","mdd","mde","mdf","mdg","mdh","mdi","mdj","mdk","mdm","mdn","mdp","mdq","mdr","mds","mdt","mdu","mdv","mdw","mdx","mdy","mdz","mea","meb","mec","med","mee","meh","mej","mek","mel","mem","men","meo","mep","meq","mer","mes","met","meu","mev","mew","mey","mez","mfa","mfb","mfc","mfd","mfe","mff","mfg","mfh","mfi","mfj","mfk","mfl","mfm","mfn","mfo","mfp","mfq","mfr","mft","mfu","mfv","mfw","mfx","mfy","mfz","mg","mgb","mgc","mgd","mge","mgf","mgg","mgh","mgi","mgj","mgk","mgl","mgm","mgn","mgo","mgp","mgq","mgr","mgs","mgt","mgu","mgv","mgw","mgy","mgz","mh","mhb","mhc","mhd","mhe","mhf","mhg","mhi","mhj","mhk","mhl","mhm","mhn","mho","mhp","mhq","mhs","mht","mhu","mhw","mhx","mhy","mhz","mi","mia","mib","mic","mid","mie","mif","mig","mih","mii","mij","mik","mil","mim","mio","mip","miq","mir","mit","miu","miw","mix","miy","miz","mjb","mjc","mjd","mje","mjg","mjh","mji","mjj","mjk","mjl","mjm","mjn","mjq","mjr","mjs","mjt","mju","mjv","mjw","mjx","mjy","mjz","mk","mka","mkb","mkc","mke","mkf","mki","mkj","mkk","mkl","mkm","mkn","mko","mkp","mkr","mks","mkt","mku","mkv","mkw","mkx","mky","mkz","ml","mla","mlb","mlc","mle","mlf","mlh","mli","mlj","mlk","mll","mln","mlo","mlp","mlq","mlr","mls","mlu","mlv","mlw","mlx","mlz","mma","mmb","mmc","mmd","mme","mmf","mmg","mmh","mmi","mmm","mmn","mmo","mmp","mmq","mmr","mmt","mmu","mmv","mmw","mmx","mmy","mmz","mn","mna","mnb","mnd","mne","mnf","mng","mnh","mni","mnj","mnl","mnm","mnn","mnp","mnq","mnr","mns","mnu","mnv","mnw","mnx","mny","mnz","mo","moa","moc","mod","moe","mog","moh","moi","moj","mok","mom","moo","mop","moq","mor","mos","mot","mou","mov","mow","mox","moy","moz","mpa","mpb","mpc","mpe","mpg","mph","mpi","mpj","mpk","mpl","mpm","mpn","mpo","mpp","mpq","mpr","mps","mpt","mpu","mpv","mpw","mpx","mpy","mpz","mqa","mqb","mqc","mqe","mqf","mqg","mqh","mqi","mqj","mqk","mql","mqm","mqn","mqo","mqp","mqq","mqr","mqs","mqu","mqv","mqw","mqx","mqy","mqz","mr","mrb","mrc","mrd","mrf","mrg","mrh","mrj","mrk","mrl","mrm","mrn","mro","mrp","mrq","mrr","mrs","mrt","mru","mrv","mrw","mrx","mry","mrz","ms","msb","msc","mse","msf","msh","msi","msj","msk","msl","msm","msn","mso","msp","msq","mss","msu","msv","msw","msx","msy","msz","mt","mta","mtb","mtc","mtd","mte","mtf","mtg","mth","mti","mtj","mtk","mtl","mtm","mtn","mto","mtq","mtr","mts","mtt","mtu","mtv","mtw","mtx","mty","mua","mub","muc","mud","mue","mug","muh","mui","muj","muk","mum","muo","muq","mur","mus","mut","muu","muv","mux","muy","muz","mva","mvd","mvf","mvg","mvh","mvk","mvl","mvn","mvo","mvp","mvq","mvr","mvs","mvt","mvu","mvv","mvw","mvx","mvy","mvz","mwa","mwb","mwc","mwe","mwf","mwg","mwh","mwi","mwk","mwl","mwm","mwn","mwo","mwp","mwq","mwr","mws","mwt","mwu","mwv","mww","mwz","mxa","mxb","mxc","mxd","mxe","mxf","mxg","mxh","mxi","mxj","mxk","mxl","mxm","mxn","mxo","mxp","mxq","mxr","mxs","mxt","mxu","mxv","mxw","mxx","mxy","mxz","my","myb","myc","mye","myf","myg","myh","myj","myk","myl","mym","myp","myr","myu","myv","myw","myx","myy","myz","mza","mzd","mze","mzh","mzi","mzj","mzk","mzl","mzm","mzn","mzo","mzp","mzq","mzr","mzt","mzu","mzv","mzw","mzx","mzz","naa","nab","nac","nae","naf","nag","naj","nak","nal","nam","nan","nao","nap","naq","nar","nas","nat","naw","nax","nay","naz","nba","nbb","nbc","nbd","nbe","nbh","nbi","nbj","nbk","nbm","nbn","nbo","nbp","nbq","nbr","nbt","nbu","nbv","nbw","nby","nca","ncb","ncc","ncd","nce","ncf","ncg","nch","nci","ncj","nck","ncl","ncm","ncn","nco","ncq","ncr","nct","ncu","ncx","ncz","nd","nda","ndb","ndc","ndd","ndf","ndg","ndh","ndi","ndj","ndk","ndl","ndm","ndn","ndp","ndq","ndr","nds","ndt","ndu","ndv","ndw","ndx","ndy","ndz","ne","nea","neb","nec","ned","nee","neg","neh","nei","nej","nek","nem","nen","neo","neq","ner","net","neu","new","nex","ney","nez","nfa","nfd","nfl","nfr","nfu","ng","nga","ngb","ngc","ngd","nge","ngg","ngh","ngi","ngj","ngk","ngl","ngm","ngn","ngp","ngq","ngr","ngs","ngt","ngu","ngv","ngw","ngx","ngy","ngz","nha","nhb","nhc","nhd","nhe","nhf","nhg","nhi","nhk","nhm","nhn","nho","nhp","nhq","nhr","nht","nhu","nhv","nhw","nhx","nhy","nhz","nia","nib","nid","nie","nif","nig","nih","nii","nij","nil","nim","nin","nio","niq","nir","nis","nit","niu","niv","niw","nix","niy","niz","nja","njb","njd","njh","nji","njj","njl","njm","njn","njo","njr","njs","njt","nju","njx","njy","njz","nka","nkb","nkc","nkd","nke","nkf","nkg","nkh","nki","nkj","nkk","nkm","nkn","nko","nkq","nkr","nks","nkt","nku","nkv","nkw","nkx","nkz","nl","nla","nlc","nle","nlg","nli","nlj","nlk","nlm","nlo","nlq","nlu","nlv","nlw","nlx","nly","nlz","nma","nmb","nmc","nmd","nme","nmf","nmg","nmh","nmi","nmj","nmk","nml","nmm","nmn","nmo","nmp","nmq","nmr","nms","nmt","nmu","nmv","nmw","nmx","nmz","nn","nna","nnb","nnc","nnd","nne","nnf","nng","nnh","nni","nnj","nnk","nnl","nnm","nnn","nnp","nnq","nnr","nnt","nnu","nnv","nnw","nny","nnz","no","noa","noc","nod","noe","nof","nog","noh","noi","noj","nok","nom","non","noq","nos","nou","nov","noy","npb","npg","nph","npl","npn","npo","nps","npu","npx","npy","nqg","nqk","nql","nqm","nqn","nqo","nqq","nqt","nqy","nr","nra","nrb","nre","nrf","nrg","nri","nrk","nrl","nrm","nrp","nru","nrx","nrz","nsa","nsb","nsc","nsd","nse","nsf","nsg","nsh","nsk","nsm","nsn","nso","nsq","nss","nst","nsu","nsv","nsw","nsx","nsy","nsz","ntd","nte","ntg","nti","ntj","ntk","ntm","nto","ntp","ntr","ntu","ntx","nty","nua","nuc","nud","nue","nuf","nug","nuh","nui","nuj","nuk","nun","nuo","nup","nuq","nur","nus","nut","nuu","nuv","nuw","nux","nuy","nuz","nvh","nvm","nvo","nwb","nwc","nwe","nwg","nwi","nwm","nwo","nwr","nww","nwx","nxa","nxd","nxe","nxg","nxi","nxl","nxn","nxo","nxq","nxr","nxx","ny","nyb","nyc","nyd","nye","nyf","nyg","nyh","nyi","nyj","nyk","nyl","nym","nyn","nyo","nyp","nyq","nyr","nys","nyt","nyu","nyv","nyx","nyy","nza","nzb","nzd","nzi","nzk","nzm","nzu","nzy","nzz","oaa","oac","oar","oav","obi","obk","obl","obm","obo","obr","obt","obu","oc","oca","oco","ocu","oda","odk","odt","odu","ofu","ogb","ogc","ogg","ogo","ogu","oht","oia","oie","oin","oj","ojb","ojc","ojs","ojv","ojw","oka","okb","okc","okd","oke","okg","oki","okk","okm","oko","okr","oks","oku","okv","okx","okz","ola","old","ole","olk","olm","olo","olr","olt","olu","om","oma","omb","omc","omg","omi","omk","oml","omo","omp","omr","omt","omu","omw","ona","one","ong","oni","onj","onk","onn","ono","onp","onr","ons","ont","onu","onx","ood","oon","oor","opa","opk","opm","opo","opy","or","ora","orc","ore","org","orn","oro","orr","ors","ort","oru","orv","orw","orx","orz","osa","osc","osi","oso","osp","ost","osu","osx","ota","otb","otd","ote","oti","otk","otl","otm","otn","otq","otr","ots","ott","otu","otw","otx","oty","otz","oub","oue","oui","oum","ovd","owi","owl","oyd","oym","oyy","ozm","pa","pab","pac","pae","paf","pag","pah","pai","pak","pal","pam","pao","pap","paq","par","pas","pau","pav","paw","pax","pay","paz","pbb","pbc","pbe","pbf","pbg","pbh","pbi","pbl","pbm","pbn","pbo","pbp","pbr","pbs","pbt","pbv","pby","pca","pcb","pcc","pcd","pce","pcf","pcg","pch","pci","pcj","pck","pcm","pcn","pcp","pcw","pda","pdc","pdn","pdo","pdt","pdu","pea","peb","ped","pee","peg","pei","pek","pel","pem","peo","pep","peq","pev","pex","pey","pez","pfa","pfe","pfl","pga","pgd","pgg","pgi","pgk","pgl","pgn","pgs","pgu","phd","phg","phh","phk","phl","phm","phn","pho","phr","pht","phv","phw","pi","pia","pib","pic","pid","pif","pig","pih","pij","pil","pim","pin","pio","pip","pir","pis","pit","piu","piw","pix","piy","piz","pjt","pka","pkb","pkg","pkh","pkn","pko","pkp","pkr","pku","pl","pla","plb","plc","pld","ple","plg","plh","plj","plk","pll","pln","plo","plr","pls","plu","plv","plw","plz","pma","pmb","pmd","pme","pmf","pmh","pmi","pmj","pml","pmm","pmn","pmo","pmq","pmr","pms","pmt","pmw","pmx","pmy","pmz","pna","pnc","pnd","pne","png","pnh","pni","pnj","pnk","pnl","pnm","pnn","pno","pnp","pnq","pnr","pns","pnt","pnv","pnw","pny","pnz","poc","poe","pof","pog","poh","poi","pok","pom","pon","poo","poq","pot","pov","poy","ppa","ppe","ppi","ppk","ppl","ppm","ppn","ppo","ppp","ppq","pps","ppt","pqa","pqm","pra","prc","prd","prf","prg","prh","pri","prk","prm","prp","prq","prr","pru","prw","prx","psa","pse","psh","psi","psm","psn","psq","pss","pst","psw","pt","pta","pth","pti","ptn","pto","ptp","ptr","ptt","ptu","ptv","pua","pub","puc","pud","pue","puf","pug","pui","puj","pum","puo","pup","puq","pur","put","puu","puw","pux","puy","pwa","pwb","pwg","pwm","pwn","pwo","pwr","pww","pxm","pye","pym","pyn","pyu","pyx","pyy","pzh","pzn","qu","qua","qub","quc","qud","quf","qug","qui","quk","qul","qum","qun","qup","quq","qur","qus","quv","quw","qux","quy","qva","qvc","qve","qvh","qvi","qvj","qvl","qvm","qvn","qvo","qvp","qvs","qvw","qvz","qwa","qwc","qwh","qwm","qws","qwt","qxa","qxc","qxh","qxl","qxn","qxo","qxp","qxq","qxr","qxt","qxu","qxw","qya","qyp","raa","rab","rac","rad","raf","rag","rah","rai","raj","rak","ram","ran","rao","rap","rar","rav","raw","rax","ray","raz","rbb","rbk","rbl","rbp","rcf","rdb","rea","reb","ree","reg","rei","rej","rel","rem","ren","rey","rga","rgn","rgr","rgs","rgu","rhg","rhp","ria","rif","ril","rim","rin","rir","rit","riu","rjg","rji","rjs","rka","rkb","rkh","rki","rkm","rkt","rkw","rm","rma","rmb","rmc","rmd","rme","rmf","rmg","rmh","rmi","rmk","rml","rmm","rmn","rmo","rmp","rmq","rmt","rmu","rmw","rmx","rmz","rn","rna","rnd","rng","rnl","rnn","rnr","rnw","ro","rob","roc","rod","roe","rof","rog","rol","rom","roo","rop","ror","rou","rpn","rpt","rri","rro","rrt","rsk","rtc","rth","rtm","rtw","ru","rub","ruc","rue","ruf","rug","rui","ruk","ruo","rup","ruq","rut","ruu","ruy","ruz","rwa","rwk","rwl","rwm","rwo","rwr","rxd","rxw","ryu","saa","sab","sac","sad","sae","saf","sah","saj","sak","sam","sao","saq","sar","sas","sat","sau","sav","saw","say","saz","sba","sbb","sbc","sbd","sbe","sbg","sbh","sbi","sbj","sbk","sbl","sbm","sbn","sbo","sbp","sbq","sbr","sbs","sbt","sbu","sbv","sbw","sbx","sby","sbz","sc","scb","sce","scf","sch","sci","sck","scl","scn","sco","scp","scs","sct","scu","scv","scw","scx","sda","sdb","sdc","sde","sdf","sdg","sdh","sdj","sdk","sdn","sdo","sdq","sds","sdu","sdx","sea","seb","sec","sed","see","sef","seh","sei","sej","sek","sel","sen","seo","ser","ses","seu","sev","sew","sey","sez","sfe","sfm","sfw","sg","sga","sgb","sgc","sgd","sge","sgh","sgi","sgj","sgm","sgp","sgr","sgs","sgt","sgu","sgw","sgy","sgz","sha","shb","shc","shd","she","shg","shh","shi","shj","shk","shm","shn","sho","shp","shq","shr","shs","sht","shu","shv","shw","shy","shz","si","sia","sie","sif","sig","sih","sii","sij","sik","sil","sim","sip","siq","sir","sis","siu","siv","siw","six","siy","siz","sja","sjb","sjd","sje","sjg","sjl","sjm","sjp","sjr","sjt","sju","sjw","sk","ska","skb","skc","skd","ske","skf","skg","skh","ski","skj","skm","skn","sko","skp","skq","skr","sks","skt","sku","skv","skw","skx","sky","skz","sl","slc","sld","slg","slh","sli","slj","sll","slm","sln","slp","slq","slr","slu","slw","slx","sly","slz","sma","smb","smc","smd","smf","smg","smh","smj","smk","sml","smn","smp","smq","smr","sms","smt","smu","smw","smx","smy","smz","sn","snb","snc","sne","snf","sng","sni","snj","snk","snl","snm","snn","sno","snp","snq","snr","sns","snu","snv","snw","snx","sny","snz","so","soa","sob","soc","sod","soe","sog","soi","sok","sol","soo","sop","soq","sor","sos","sou","sov","sow","sox","soy","soz","spb","spc","spd","spe","spg","spi","spk","spl","spm","spn","spo","spp","spq","spr","sps","spt","spv","sq","sqa","sqh","sqm","sqo","sqq","sqt","squ","sr","sra","srb","sre","srf","srg","srh","sri","srk","srl","srm","srn","sro","srq","srr","srs","srt","sru","srv","srw","srx","sry","srz","ssb","ssc","ssd","sse","ssf","ssg","ssh","ssj","ssl","ssm","ssn","sso","ssq","sss","sst","ssu","ssv","ssx","ssy","ssz","sta","stb","ste","stf","stg","sth","sti","stj","stk","stl","stm","stn","sto","stp","stq","sts","stt","stv","stw","sty","sua","suc","sue","sug","sui","suj","suk","suo","suq","sur","sus","sut","suv","suw","suy","suz","sv","sva","svb","svc","sve","svm","svs","sw","swb","swc","swf","swg","swi","swj","swk","swm","swo","swp","swq","swr","sws","swt","swu","swv","sww","swx","swy","sxb","sxe","sxn","sxr","sxs","sxu","sxw","sya","syb","syc","syi","syk","syl","syn","syo","syr","sys","syw","syx","sza","szb","szc","szd","szg","szl","szn","szp","szv","szw","szy","taa","tab","tac","tad","tae","taf","taj","tak","tal","tan","tao","tap","taq","tar","tas","tau","tav","taw","tax","tay","taz","tba","tbc","tbd","tbe","tbf","tbg","tbh","tbi","tbj","tbk","tbl","tbm","tbn","tbo","tbp","tbs","tbt","tbu","tbv","tbw","tbx","tby","tbz","tca","tcb","tcc","tcd","tce","tcf","tcg","tch","tci","tck","tcm","tcn","tco","tcp","tcq","tcs","tcu","tcw","tcx","tcy","tcz","tda","tdb","tdc","tdd","tde","tdg","tdh","tdi","tdj","tdk","tdl","tdm","tdn","tdo","tdq","tdr","tds","tdt","tdu","tdv","tdx","tdy","tea","teb","tec","ted","tee","teg","teh","tei","tek","tem","ten","teo","tep","teq","ter","tes","tet","teu","tev","tew","tex","tey","tfi","tfn","tfo","tfr","tft","tg","tga","tgb","tgc","tgd","tge","tgf","tgh","tgi","tgj","tgn","tgo","tgp","tgq","tgs","tgt","tgu","tgv","tgw","tgx","tgy","tgz","th","thd","the","thf","thh","thi","thk","thl","thm","thp","thq","thr","ths","tht","thu","thv","thy","thz","ti","tic","tif","tig","tih","tii","tij","tik","til","tim","tin","tio","tip","tiq","tis","tit","tiu","tiv","tiw","tix","tiy","tja","tjg","tji","tjj","tjl","tjn","tjo","tjp","tjs","tju","tjw","tk","tka","tkb","tkd","tke","tkf","tkg","tkl","tkp","tkq","tkr","tks","tkt","tku","tkv","tkw","tkx","tkz","tl","tla","tlb","tlc","tld","tlf","tlg","tli","tlj","tlk","tll","tlm","tln","tlp","tlq","tlr","tls","tlt","tlu","tlv","tlx","tly","tma","tmb","tmc","tmd","tme","tmf","tmg","tmh","tmi","tmj","tmk","tml","tmm","tmn","tmo","tmq","tmr","tmt","tmu","tmv","tmw","tmy","tmz","tn","tna","tnb","tnc","tnd","tng","tnh","tni","tnk","tnl","tnm","tnn","tno","tnp","tnq","tnr","tns","tnt","tnv","tnw","tnx","tny","tob","toc","tod","tof","tog","toh","toi","toj","tok","tol","tom","too","toq","tor","tos","tou","tov","tow","tox","toy","toz","tpa","tpc","tpe","tpf","tpg","tpi","tpj","tpk","tpl","tpm","tpn","tpp","tpr","tpt","tpu","tpv","tpx","tpy","tpz","tqb","tql","tqm","tqn","tqo","tqp","tqt","tqu","tqw","tra","trb","trc","tre","trf","trg","trh","tri","trj","trl","trm","trn","tro","trp","trq","trr","trs","trt","tru","trv","trw","trx","try","trz","tsa","tsb","tsc","tsd","tsf","tsg","tsh","tsi","tsj","tsl","tsp","tsr","tst","tsu","tsv","tsw","tsx","tsz","ttb","ttc","ttd","tte","ttf","tth","tti","ttj","ttk","ttm","ttn","tto","ttp","ttr","tts","ttt","ttu","ttv","ttw","tty","tua","tub","tuc","tud","tue","tuf","tug","tuh","tui","tuj","tul","tum","tun","tuo","tuq","tus","tuu","tuv","tux","tuy","tuz","tva","tvd","tve","tvk","tvl","tvm","tvn","tvo","tvs","tvt","tvu","tvw","tvx","twa","twb","twd","twe","twf","twg","twh","twl","twm","twn","two","twp","twq","twr","twt","twu","tww","twx","twy","txa","txe","txg","txi","txj","txm","txn","txo","txq","txs","txt","txu","txx","txy","ty","tya","tye","tyh","tyi","tyj","tyl","tyn","typ","tyr","tys","tyt","tyu","tyv","tyx","tyy","tyz","tzh","tzj","tzl","tzm","tzn","tzo","tzx","uam","uar","uba","ubi","ubl","ubr","ubu","uda","ude","udg","udi","udj","udl","udm","udu","ues","ufi","ug","uga","ugb","uge","ugh","ugo","uha","uhn","uis","uiv","uji","uk","uka","ukg","ukh","uki","ukk","ukp","ukq","uku","ukv","ukw","uky","ula","ulb","ulc","ule","ulf","uli","ulk","ulm","uln","ulu","ulw","uma","umb","umd","umg","umi","umm","umn","umo","ump","umr","ums","una","und","une","ung","uni","unk","unm","unn","unr","unu","unx","unz","uok","uon","upi","upv","ur","ura","urb","urc","ure","urf","urg","urh","urk","urm","urn","uro","urp","urr","urt","uru","urv","urw","urx","ury","urz","usa","ush","usi","usk","usp","uss","usu","uta","ute","uth","utp","utr","utu","uum","uur","uve","uvh","uvl","uwa","uya","uz","uzs","vaa","vae","vaf","vag","vah","vai","vaj","vam","van","vao","vap","var","vas","vau","vav","vay","vbb","vbk","ve","vec","vem","veo","vep","ver","vgr","vi","vic","vid","vif","vig","vil","vin","vit","viv","vka","vkj","vkk","vkl","vkm","vkn","vko","vkp","vkt","vku","vkz","vlp","vls","vma","vmb","vmc","vmd","vme","vmf","vmg","vmh","vmi","vmj","vmk","vml","vmm","vmp","vmq","vmr","vms","vmu","vmw","vmx","vmy","vmz","vnk","vnm","vnp","vo","vor","vot","vra","vro","vrs","vrt","vto","vum","vun","vut","vwa","wa","waa","wab","wac","wad","wae","waf","wag","wah","wai","waj","wal","wam","wan","wap","waq","war","was","wat","wau","wav","waw","wax","way","waz","wba","wbb","wbe","wbf","wbh","wbi","wbj","wbk","wbl","wbm","wbp","wbq","wbr","wbt","wbv","wbw","wca","wci","wdd","wdg","wdj","wdk","wdt","wdu","wdy","wec","wed","weg","weh","wei","wem","weo","wep","wer","wes","wet","weu","wew","wfg","wga","wgb","wgg","wgi","wgo","wgu","wgy","wha","whg","whk","whu","wib","wic","wie","wif","wig","wih","wii","wij","wik","wil","wim","win","wir","wiu","wiv","wiy","wja","wji","wka","wkd","wkr","wkw","wky","wla","wlg","wlh","wli","wlm","wlo","wlr","wls","wlu","wlv","wlw","wlx","wma","wmb","wmc","wmd","wme","wmh","wmi","wmm","wmn","wmo","wms","wmt","wmw","wmx","wnb","wnc","wnd","wne","wng","wni","wnk","wnm","wnn","wno","wnp","wnu","wnw","wny","wo","woa","wob","woc","wod","woe","wof","wog","woi","wok","wom","won","woo","wor","wos","wow","wpc","wrb","wrg","wrh","wri","wrk","wrl","wrm","wro","wrp","wrr","wrs","wru","wrv","wrw","wrx","wrz","wsa","wsg","wsi","wsk","wsr","wss","wsu","wsv","wtf","wth","wti","wtk","wtm","wtw","wua","wub","wud","wul","wum","wun","wur","wut","wuu","wuv","wux","wuy","wwa","wwb","wwo","wwr","www","wxw","wyb","wyi","wym","wyn","wyr","wyy","xaa","xab","xai","xaj","xak","xal","xam","xan","xao","xar","xas","xat","xau","xav","xaw","xay","xbb","xbd","xbe","xbg","xbi","xbj","xbm","xbn","xbp","xbr","xbw","xby","xch","xco","xcr","xda","xdk","xdo","xdq","xdy","xed","xeg","xem","xer","xes","xet","xeu","xgb","xgd","xgg","xgi","xgm","xgu","xgw","xh","xhe","xhm","xhv","xii","xin","xir","xis","xiy","xjb","xjt","xka","xkb","xkc","xkd","xke","xkg","xkj","xkl","xkn","xkp","xkq","xkr","xks","xkt","xku","xkv","xkw","xkx","xky","xkz","xla","xlc","xld","xly","xma","xmb","xmc","xmd","xmf","xmg","xmh","xmj","xmm","xmn","xmo","xmp","xmq","xmr","xmt","xmu","xmv","xmw","xmx","xmy","xmz","xna","xnb","xni","xnj","xnk","xnm","xnn","xnq","xnr","xnt","xnu","xny","xnz","xoc","xod","xog","xoi","xok","xom","xon","xoo","xop","xor","xow","xpa","xpb","xpd","xpf","xpg","xph","xpi","xpj","xpk","xpl","xpm","xpn","xpo","xpq","xpr","xpt","xpv","xpw","xpx","xpz","xra","xrb","xrd","xre","xrg","xri","xrm","xrn","xrr","xru","xrw","xsa","xsb","xse","xsh","xsi","xsm","xsn","xsp","xsq","xsr","xss","xsu","xsy","xta","xtb","xtc","xtd","xte","xth","xti","xtj","xtl","xtm","xtn","xtp","xts","xtt","xtu","xtv","xtw","xty","xub","xud","xuj","xul","xum","xun","xuo","xut","xuu","xve","xvi","xvn","xvo","xvs","xwa","xwd","xwe","xwj","xwk","xwl","xwo","xwr","xwt","xww","xxb","xxk","xxm","xxr","xxt","xya","xyb","xyj","xyk","xyl","xyt","xyy","xzh","xzp","yaa","yab","yac","yad","yae","yaf","yag","yai","yaj","yak","yal","yam","yan","yao","yap","yaq","yar","yas","yat","yau","yav","yaw","yax","yay","yaz","yba","ybb","ybe","ybh","ybi","ybj","ybl","ybm","ybn","ybo","ybx","yby","ycl","ycn","yda","yde","ydg","ydk","yea","yec","yee","yei","yej","yel","yer","yes","yet","yeu","yev","yey","yga","ygi","ygl","ygm","ygp","ygr","ygu","ygw","yhd","yi","yia","yig","yih","yii","yij","yil","yim","yir","yis","yiv","yka","ykg","yki","ykk","ykm","yko","ykr","yky","yla","ylb","yle","ylg","yli","yll","ylr","ylu","yly","ymb","yme","ymg","ymk","yml","ymm","ymn","ymo","ymp","yna","ynd","yng","ynk","ynl","ynq","yns","ynu","yo","yob","yog","yoi","yok","yol","yom","yon","yot","yoy","yra","yrb","yre","yrk","yrl","yrm","yro","yrs","yrw","yry","ysd","ysn","ysp","ysr","yss","ysy","ytw","yty","yua","yub","yuc","yud","yue","yuf","yui","yuj","yul","yum","yun","yup","yuq","yur","yut","yuw","yux","yuz","yva","yvt","ywa","ywg","ywn","ywq","ywr","ywu","yww","yxa","yxg","yxl","yxm","yxu","yxy","yyr","yyu","za","zaa","zab","zac","zad","zae","zaf","zag","zah","zaj","zak","zam","zao","zap","zaq","zar","zas","zat","zau","zav","zaw","zax","zay","zaz","zba","zbc","zbe","zbt","zbu","zbw","zca","zch","zdj","zea","zeg","zeh","zen","zga","zgb","zgh","zgm","zgn","zgr","zh","zhd","zhi","zhn","zhw","zhx","zia","zik","zil","zim","zin","ziw","ziz","zka","zkb","zkd","zko","zkp","zkt","zku","zkz","zla","zlj","zlm","zln","zlq","zma","zmb","zmc","zmd","zme","zmf","zmg","zmh","zmi","zmj","zmk","zml","zmm","zmn","zmo","zmp","zmq","zmr","zms","zmt","zmu","zmv","zmw","zmx","zmy","zmz","zna","zne","zng","znk","zns","zoc","zoh","zom","zoo","zoq","zor","zos","zpa","zpb","zpc","zpd","zpe","zpf","zpg","zph","zpi","zpj","zpk","zpl","zpm","zpn","zpo","zpp","zpq","zpr","zps","zpt","zpu","zpv","zpw","zpx","zpy","zpz","zqe","zrn","zro","zrp","zrs","zsa","zsr","zsu","zte","ztg","ztl","ztm","ztn","ztp","ztq","zts","ztt","ztu","ztx","zty","zu","zua","zuh","zum","zun","zuy","zyg","zyj","zyn","zyp","zza","zzj","addLikelySubtags","changes","bcp47Normalize","maxLocale","removeLikelySubtags","compareSingleton","replacements","removed","MediaController","initialSettings","lastSelectedTracks","lastSelectedRepresentations","domStorage","_onRepresentationSwitched","getTracksFor","areTracksEqual","switchMode","noSettingsSave","roles","extractSettings","storeLastSettings","setSavedMediaSettings","setInitialSettings","getInitialSettings","t1","t2","sameId","sameViewpoint","sameLang","sameCodec","sameRoles","sameAccessibility","sameAudioChannelConfiguration","filterTracksBySettings","filterFn","tracksAfterMatcher","matchSettingsLang","matchSettingsIndex","matchSettingsId","matchSettingsViewPoint","_compareDescriptorType","matchSettingsRole","isTrackActive","matchSettingsAccessibility","matchAccessibility","matchSettingsAudioChannelConfig","matchSettingsCodec","getTracksWithHighestSelectionPriority","trackArr","getTracksWithHighestBitrate","bitrateList","getTracksWithHighestEfficiency","sum","resolution","getTracksWithWidestRange","representationCount","selectInitialTrack","filteredMediaInfos","DASH_ROLE_SCHEME_ID","_handleInitialTextTrackSelection","tmpArr","customInitialTrackSelectionFunction","getCustomInitialTrackSelectionFunction","filteredArray","bitrateInfo","getAbrBitrateParameter","_filterMediaInfosByPossibleBitrate","elementWidth","getVideoElementSize","_filterMediaInfosByPortalSize","_initialFilterMediaInfosByAllowedSettings","targetBitrate","_trackSelectionModeClosestBitrate","_trackSelectionModeHighestSelectionPriority","TRACK_SELECTION_MODE_HIGHEST_BITRATE","_trackSelectionModeHighestBitrate","TRACK_SELECTION_MODE_FIRST_TRACK","_trackSelectionModeFirstTrack","TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY","_trackSelectionModeHighestEfficiency","TRACK_SELECTION_MODE_WIDEST_RANGE","_trackSelectionModeWidestRange","v1","v2","image","createTrackInfo","mediaTracks","isCurrentTrack","matchSettings","matchLang","normalizedSettingsLang","matchIndex","matchViewPoint","matchRole","matchAudioChannelConfiguration","saveTextSettingsDisabled","possibleTracks","filteredTracks","getSavedMediaSettings","DEFAULT_INDEX","_baseUrls","_selectedIdx","selectedIdx","children","BaseURLTreeModel","objectUtils","updateChildData","_getAvailableBaseUrls","targetBaseUrls","synthesizedBaseUrls","walk","ai","ri","getBaseURLCollectionsFromManifest","getForPath","nodes","invalidateSelectedIndexes","getBaseUrls","DVBSelector","availableUrls","totalWeight","cumulWeights","selectByWeight","removedPriorities","getNonBlacklistedBaseUrls","BasicSelector","selectedBaseUrl","ContentSteeringSelector","blacklistResetTimeout","_findexIndexOfServiceLocation","steeringIndex","_onAddBlackList","timer","selectBaseUrlIndex","steeringDataFromMpd","BaseURLSelector","serviceLocationBlacklistController","basicSelector","dvbSelector","contentSteeringSelector","selector","chooseSelector","isDVB","checkParameterType","BaseURLController","baseURLTreeModel","baseURLSelector","getIsDVB","BASE_URLS_UPDATED","XlinkLoader","resolveObject","resolveToZero","resolved","resolvedContent","TextRequest","RESOLVE_TYPE_ONLOAD","XlinkController","xlinkLoader","resolveType","onXlinkAllElementsLoaded","originalContent","onXlinkElementLoaded","mergedContent","parseXml","elementsToResolve","isResolvingFinished","resolvedElements","getIron","run","mergeElementsBack","getElementsToResolve","xlinkObject","toResolve","createXlinkObject","resolveManifestOnLoad","setParser","ObjectIron","mappers","mergeValues","parentItem","childItem","mapProperties","parentValue","childValue","mapItem","childNode","periodMapper","periods","adaptationSetMapper","adaptationset","converter","_test","_converter","durationRegex","BaseMatcher","attrName","attributeList","START_TIME","datetimeRegex","numericRegex","StringAttributeList","stringAttrsInElements","attrNames","_name","_merge","_properties","_children","CommonProperty","MapNode","commonProperties","translateEntitiesAndCharacterReferences","entitiesList","entitySplit","keepComments","keepWhitespace","attrMatchers","nodesAsArray","openBracket","openBracketCC","closeBracket","closeBracketCC","minusCC","slashCC","exclamationCC","singleQuoteCC","doubleQuoteCC","openCornerBracketCC","closeCornerBracketCC","parseChildren","closeStart","parsedText","startCommentPos","cdataEndIndex","startDoctype","encapsuled","parseNode","processAttr","attrValue","matcher","nameSpacer","parseName","NoChildNodes","noChildNodes","__prefix","startChar","startpos","__children","simplify","setPos","kids","_attributes","f","dept","arrayNodes","DashParser","matchers","objectIron","tXml","Patch","operand","parsedTime","DurationMatcher","DateTimeMatcher","NumericMatcher","LangMatcher","RepresentationBaseValuesMap","SegmentValuesMap","ManifestLoader","xlinkController","mssHandler","onXlinkReady","requestStartDate","textStatus","actualUrl","href","createMssParser","createMssFragmentProcessor","registerEvents","createParser","sumPeriodDurations","originalManifest","ErrorHandler","CapabilitiesFilter","_isCodecSupported","_createConfiguration","isCodecSupportedBasedOnTestedConfigurations","_processCodecToCheck","configurationsSet","configurations","configString","framerate","isSupported","colorGamut","transferFunction","EssentialProperty","MEDIA_CAPABILITIES_API","COLORGAMUT","SRGB","P3","REC2020","TRANSFERFUNCTION","PQ","HLG","_convertHDRColorimetryToConfig","colorimetrySupported","hdrMetadataType","HDR_METADATA_FORMAT_SCHEME_ID_URI","HDR_METADATA_FORMAT_VALUES","ST2094_10","HDR_METADATATYPE","SMPTE_ST_2094_10","SL_HDR2","SLHDR2","ST2094_40","SMPTE_ST_2094_40","_convertHDRMetadataFormatToConfig","metadataFormatSupported","_createVideoConfiguration","samplerate","audioSamplingRate","_createAudioConfiguration","keySystemsMetadata","getSupportedKeySystemMetadataFromContentProtection","_addGenericAttributesToConfig","_doesSupportEssentialProperties","supportsEssentialProperty","mediaTypesToCheck","configurationsToCheck","supplementalCodecs","getSupplementalCodecs","_getConfigurationsToCheck","basicConfiguration","runCodecSupportCheck","isMainCodecSupported","isSupplementalCodecSupported","_isSupplementalCodecSupported","_filterUnsupportedRepresentationsOfAdaptation","supported","ADAPTATION_SET_REMOVED_NO_CAPABILITIES","_filterUnsupportedAdaptationSetsOfPeriod","_filterUnsupportedCodecs","_filterUnsupportedEssentialProperties","customCapabilitiesFilters","getCustomCapabilitiesFilters","customFilter","_applyCustomFiltersRepresentation","isReprSupported","_applyCustomFiltersRepresentationsOfAdaptation","_applyCustomFiltersAdaptationSetsOfPeriod","_applyCustomFilters","xywh","URIFragmentModel","URIFragmentDataVO","URIFragmentData","hashIndex","fragment","equalIndex","ManifestModel","MediaPlayerModel","_checkMinPlaybackRate","_checkMaxPlaybackRate","getBufferTimeDefault","settingsPlaybackRate","sdPlaybackRate","setting","PRIORITY","DEFAULT","STRONG","WEAK","SwitchRequest","reas","prio","rule","getPriority","NO_CHANGE","ThroughputRule","getSwitchRequest","rulesContext","switchRequest","getMediaType","currentBufferState","getCurrentBufferState","getAbrController","getThroughputController","getAverageLatency","InsufficientBufferRule","bufferStateDict","ignoreCount","_shouldExecuteRule","getAverageThroughput","AbandonRequestsRule","abandonDict","shouldAbandon","getCurrentRequest","stableBufferTime","elapsedTimeSinceFirstByteInMs","downloadedBytes","downloadTimeInMs","throughputInKbit","estimatedTimeOfDownloadInSeconds","isPlayingAtLowestQuality","remainingBytesToDownload","optimalRepresentationForBitrate","currentRequestedRepresentation","_getSwitchRequest","DroppedFramesRule","droppedFramesHistory","getDroppedFramesHistory","droppedFramesHistoryData","getFrameHistory","droppedFrames","totalFrames","droppedVideoFrames","totalVideoFrames","SwitchHistoryRule","switchRequestHistory","getSwitchRequestHistory","switchRequests","getSwitchRequests","drops","noDrops","currentPossibleRepresentation","BOLA_STATE_ONE_BITRATE","BOLA_STATE_STARTUP","BOLA_STATE_STEADY","MINIMUM_BUFFER_S","BolaRule","AbrController","bolaStateDict","_onBufferEmpty","stateDict","placeholderBuffer","bolaState","_clearBolaStateOnSeek","mostAdvancedSegmentStart","lastSegmentWasReplacement","lastSegmentStart","lastSegmentDurationS","lastSegmentRequestTimeMs","lastSegmentFinishTimeMs","_streamId","trequest","_tfinish","_checkNewSegment","bufferAtLastSegmentRequest","maxEffectiveBufferForLastSegment","_maxBufferLevelForRepresentation","maxPlaceholderBuffer","_onQualityChangeRequested","_calculateBolaParameters","utilities","highestUtilityIndex","highestIndex","uIndex","bufferTime","gp","Vp","_checkBolaStateBufferTimeDefault","effectiveBufferLevel","_onMinMaxBitrateUpdated","_minBufferLevelForRepresentation","qBitrate","qUtility","iBitrate","iUtility","wantEffectiveBufferLevel","initialState","_getInitialBolaState","_getBolaState","safeThroughput","_handleBolaStateStartup","nowMs","lastCallTimeMs","_updatePlaceholderBuffer","bitrateCount","score","_getRepresentationFromBufferLevel","representationForThroughput","delayS","_handleBolaStateSteady","_handleBolaStateBad","L2A_STATE_ONE_BITRATE","L2A_STATE_STARTUP","L2A_STATE_STEADY","VL","L2ARule","l2AStateDict","l2AParameterDict","_clearL2AStateOnSeek","l2AState","lastSegmentUrl","l2aState","l2AParameters","L2AState","segment_request_start_s","segment_download_finish_s","_dotmultiplication","arr1","arr2","sumdot","prev_w","Q","B_target","_initializeL2AParameters","_getInitialL2AState","_getL2AState","l2AParameter","possibleRepresentations","_handleStartupState","diff1","lastThroughput","ARITHMETIC_MEAN","currentHttpRequest","getCurrentHttpRequest","V","getVideoModel","alpha","sqrt","bget","tmpsum","tmax","euclideanProjection","temp","getRepresentationByAbsoluteIndex","_handleSteadyState","_handleErrorState","LearningAbrController","somBitrateNeurons","bitrateNormalizationFactor","latencyNormalizationFactor","weights","sortedCenters","weightSelectionMode","_getMaxThroughput","maxThroughput","neuron","_getDistance","_getNeuronDistance","rebuffer","switch","_updateNeurons","winnerNeuron","somNeuron","sigma","neuronDistance","_updateNeuronState","exp","neighbourHood","getNextQuality","dynamicWeightsSelector","currentLatency","currentThroughput","magnitude","_getMagnitude","centers","randomDataSet","dataArray","_getRandomData","distanceWeights","nextPoint","maxDistance","currentPoint","minDistance","leastSimilarIndex","minIndex","_getInitialKmeansPlusPlusCenters","_setSomBitrateNeurons","throughputNormalized","currentNeuron","getSegmentDuration","getMinBuffer","maxSuitableBitrate","_getDownShiftNeuron","neuronCount","W","upperBound","_getXavierWeights","weightVector","findWeightVector","_dynamicWeightSelection","targetRepresentation","somNeuronState","somData","nextBuffer","getNextBufferWithBitrate","isBufferLow","bitrateSwitch","lastBitrate","bitrateReward","bitrateSwitchPenalty","rebufferPenalty","latencyPenalty","playbackSpeedPenalty","bitrateWSum","bitrateSwitchWSum","rebufferWSum","latencyWSum","playbackSpeedWSum","totalQoe","LoLpQoeEvaluator","voPerSegmentQoeInfo","maxBitrateKbps","minBitrateKbps","_createQoeInfo","fragmentType","qoeInfo","QoeInfo","penalty","_logMetricsInQoeInfo","rebufferTime","playbackSpeed","latencyRange","setupPerSegmentQoe","sDuration","maxBrKbps","minBrKbps","logSegmentMetrics","segmentBitrate","segmentRebufferTime","currentPlaybackSpeed","getPerSegmentQoe","calculateSingleUseQoe","singleUseQoeInfo","LoLpWeightSelector","valueList","weightTypeCount","weightOptions","previousLatency","targetLatency","bufferMin","qoeEvaluator","getNextBuffer","bitrateToDownload","neurons","currentRebuffer","maxQoE","winnerWeights","winnerBitrate","wt","weightsObj","weightedRebuffer","weightedLatency","totalQoE","nextLatency","_checkConstraints","perm","generate","currLen","currPerm","_getPermutations","LoLPRule","learningController","bufferStateVO","bandwidths","currentBitrateKbps","lastFragmentDownloadTime","tresponse","ABRRulesCollection","qualitySwitchRules","abandonFragmentRules","shouldUseBolaRuleByMediaType","_updateRules","QUALITY_SWITCH_RULES","ruleName","_handleRuleUpdate","abandonFragmentRulesList","ABANDON_FRAGMENT_RULES","getAbrCustomRules","RULES_TYPES","rulesCollection","_arrayContainsRule","BOLA_RULE","THROUGHPUT_RULE","INSUFFICIENT_BUFFER_RULE","SWITCH_HISTORY_RULE","DROPPED_FRAMES_RULE","LEARN_TO_ADAPT_RULE","LOL_PLUS_RULE","ABANDON_REQUEST_RULE","_createRuleInstance","_removeRuleFromArray","_getRulesWithChange","srArray","getMinSwitchRequest","currentSwitchRequest","newSwitchReq","_onAbrSettingsActiveRulesUpdated","getAbandonFragmentRules","getBestPossibleSwitchRequest","getBolaState","getQualitySwitchRules","setBolaState","shouldAbandonFragment","RulesContext","currentRequest","SwitchRequestHistory","clearForStream","_initializeForStream","_initializeForMediaType","currentRepresentationId","dropSize","_initializeForRepresentation","indexDiff","drop","noDrop","removedHistorySample","_adjustSwitchRequestHistory","_adjustSwitchRequestDrops","DroppedFramesHistory","lastDroppedFrames","lastTotalFrames","intervalDroppedFrames","intervalTotalFrames","abrRulesCollection","streamProcessorDict","abandonmentStateDict","abandonmentTimeout","windowResizeEventCalled","playbackRepresentationId","_getPossibleVoRepresentations","maxCmsdBitrate","_filterByCmsdMaxBitrate","_filterByPortalSize","representationBitrate","_filterByPossibleBitrate","_filterByAllowedSettings","includeCompatibleMediaInfos","possibleMediaInfos","adaptationSetSwitchingCompatibleIds","compatibleMediaInfos","_getPossibleMediaInfos","currentVoRepresentations","firstMediaInfo","_shouldSortByQualityRankingAttribute","_sortByQualityRankingAttribute","_sortByDefaultParameters","_sortRepresentationsByQuality","isMediaInfoAllowed","_onFragmentLoadProgress","targetAbandonmentStateDict","_getAbandonmentStateDictFor","_onSegmentDownloadShouldBeAbandoned","_onQualityChangeRendered","_shouldApplyDynamicAbrStrategy","switchOnThreshold","switchOffThreshold","isUsingBolaRule","shouldUseBolaRule","_updateDynamicAbrStrategy","_changeQuality","oldBitrate","setSavedBitrateSettings","configBitrate","savedBitrate","getSavedBitrateSettings","averageThroughput","smallestRepresentation","targetRepresentations","setWindowResizeEventCalled","READY_STATES_TO_EVENT_NAMES","HAVE_CURRENT_DATA","HAVE_FUTURE_DATA","HAVE_ENOUGH_DATA","VideoModel","_currentTime","setCurrentTimeReadyStateFunction","resumeReadyStateFunction","TTMLRenderingDiv","vttRenderingDiv","previousPlaybackRate","stalledStreams","removeStalledStream","createEvent","initEvent","func","onPlaying","eventName","eventCallBack","getClientWidth","getClientHeight","getTextTrack","label","isTTML","textTracks","targetReadyState","HAVE_NOTHING","_listenOnce","addTextTrack","childElement","getVideoPlaybackQuality","webkitDroppedFrameCount","webkitDecodedFrameCount","creationTime","played","getSource","getTTMLRenderingDiv","getTextTracks","pixelRatio","devicePixelRatio","elementHeight","getVideoHeight","videoHeight","getVideoRelativeOffsetLeft","parentNode","getVideoRelativeOffsetTop","getVideoWidth","videoWidth","getVttRenderingDiv","seeking","autoplay","PLAYBACK_NOT_ALLOWED","closestTime","closestDistance","distanceToStart","distanceToEnd","stickTimeToBuffered","INVALID_STATE_ERR","disableRemotePlayback","setElement","preload","removeAttribute","addStalledStream","stallStream","setTTMLRenderingDiv","div","pointerEvents","setVttRenderingDiv","legacyKeysAndReplacements","oldKey","newKey","LOCAL_STORAGE_BITRATE_KEY_TEMPLATE","LOCAL_STORAGE_SETTINGS_KEY_TEMPLATE","STORAGE_TYPE_LOCAL","LAST_BITRATE","LAST_MEDIA_SETTINGS","DOMStorage","storage","setItem","removeItem","getTimestamp","ten_minutes_ms","canStore","storageType","getItem","isExpired","mediaSettings","SegmentBaseLoader","_loadInitializationRecursively","loadingInfo","searching","bytesToLoad","getFragmentRequest","_loadSegmentsRecursively","onLoaded","hasRange","loadedLength","loadMultiSidx","segs","tmpCallback","refs","getSegmentsForSidx","lastBox","loadInitialization","loadSegments","EBMLParser","consumeTag","p1","p2","bytesConsumed","required","getMatroskaCodedNum","retainMSB","bytesUsed","mask","getPos","consumeTagAndSize","parseTag","skipOverElement","headerSize","getMatroskaFloat","outFloat","getFloat32","getFloat64","getMatroskaUint","getMatroskaUintLarge","moreData","WebmSegmentBaseLoader","WebM","theRange","segmentEnd","segmentStart","ebmlParser","EBML","Info","SeekHead","Tracks","Cues","Void","infoTag","infoElementSize","Duration","cue","cueTrack","cues","CuePoint","CueTime","CueTracks","CueTrackPositions","cueTrackPositionSize","Track","CueTrack","ClusterPosition","CueClusterPosition","parseCues","parseSegments","parseEbmlHeader","TimecodeScale","SegmentBaseController","segmentBaseLoader","webmSegmentBaseLoader","isWebM","labels","normalizedKeyIds","availableFrom","valid","component","qualifierPoint","qualifier","equalityPoint","findsElement","findsAttribute","findsTextReplace","getMpdTarget","isSiblingOperation","leaf","xpath","PatchManifestModel","getMpdId","getOriginalPublishTime","getPatchOperations","SimpleXPath","operation","PatchOperation","utf8ArrayToStr","exitOnNull","decoded","char2","char3","toUint8","decodeId3Frame","frame","owner","privateData","decodeId3PrivFrame","decodeId3UrlFrame","metadataFrame","pictureType","mimeTypeEndIndex","descriptionEndIndex","decodeId3ImageFrame","decodeId3TextFrame","readId3Size","getId3FrameData","isId3Footer","isId3Header","DashAdapter","patchManifestModel","cea608parser","getMainAdaptationForType","_getAllMediaInfo","embeddedText","mediaArr","convertAdaptationToMediaInfo","accessibilityLength","ACCESSIBILITY_CEA608_SCHEME","convertVideoInfoToEmbeddedTextInfo","CC1","externalManifest","getManifest","getAdaptationForMediaInfo","selectedVoPeriod","getPeriodForStreamInfo","voPeriodsArray","MediaInfo","convertPeriodToStreamInfo","embeddedCaptions","allContentProtectionElements","contentProtectionElementsByRefId","contentProtectionElement","contentProtectionElementSource","_applyContentProtectionReferencing","keyIds","cp","_applyDefaultKeyId","_getNormalizedKeyIds","adaptationSetSwitching","_getAdaptationSetSwitchingCompatibleIds","StreamInfo","ManifestInfo","convertMpdToManifestInfo","getPeriod","periodIdx","findRepresentation","returnIndex","adaptationSetArray","adaptationSetArrayIndex","representationArrayIndex","relativePosition","targetArray","insert","insertNodes","updatedNodes","mInfoOne","mInfoTwo","voLocalPeriods","adaptationsForType","getBandwidthForRepresentation","eventBox","ID3_SCHEME_ID_URI","id3Data","frames","frameData","getId3Frames","getIndexForRepresentation","findRepresentationIndex","getIsTextTrack","patchLocations","getPeriodById","getRealAdaptation","getRealPeriodByIndex","maxStreamsInfo","manifestId","patchManifestId","manifestPublishTime","patchPublishTime","originalManifestPublishTime","newManifest","Round10","round10","_decimalAdjust","TcpList","HttpList","RepSwitchList","BufferLevel","BufferState","DroppedFrames","SchedulingInfo","DVRInfo","ManifestUpdate","RequestsQueue","DVBErrors","requestTime","fetchTime","ManifestUpdateStreamInfo","ManifestUpdateRepresentationInfo","MetricsModel","streamMetrics","metricsChanged","METRICS_CHANGED","metricChanged","METRIC_CHANGED","metricUpdated","metricType","METRIC_UPDATED","metricAdded","getMetricsFor","readOnly","MetricsList","pushMetrics","pushAndNotify","metricObject","addDVBErrors","actualurl","tcpid","responsecode","_stream","_mediaduration","_quality","_responseHeaders","_serviceLocation","_fileLoaderType","_resourceTimingValues","HTTPRequestTrace","interval","appendHttpTrace","manifestUpdate","TrackSwitch","clearCurrentMetricsForType","updatedFields","DashMetrics","playListTraceMetricsClosed","playListTraceMetrics","playListMetrics","metricsModel","httpList","httpListLastIndex","currentHttpList","getHttpRequests","getCurrent","metricName","getCurrentRepresentationSwitch","getCurrentDroppedFrames","getLatestFragmentRequestHeaderValueByID","httpRequestList","responseUrl","responseStatus","speed","traceToUpdate","endTime","TimelineConverter","timelineAnchorAvailabilityOffset","clientServerTimeShift","setClientTimeOffset","_calcAvailabilityTimeFromPresentationTime","calculateAvailabilityEndTime","availabilityTime","wallTime","_calcTimeShiftBufferWindowForDynamicTimelineManifest","periodRange","segmentTime","hasValidSegmentTime","enhancedSegmentTime","_calcRangeForTimeline","currentVoPeriod","adjustedEndTime","_adjustTimeBasedOnPeriodRanges","_adjustTimelineAnchorAvailabilityOffset","isEndOfDvrWindow","_onUpdateTimeSyncOffset","mpdRelativeTime","displayStartTime","_calcTimeshiftBufferForStaticManifest","timelineRefData","_calcTimeShiftBufferWindowForDynamicManifest","T","encodeArray","ASCII","UTF8","encodeASCII","decodeASCII","captionData","defaultTrack","EmbeddedTextHtmlRender","captionId","checkIndent","getRegionProperties","y1","y2","createRGB","getStyle","videoElement","ltrim","rtrim","createHTMLCaptionsFromScreen","captionScreen","currRegion","existingRegion","lastRowHasText","lastRowIndentL","currP","spans","currentStyle","seenRegions","styleStates","prevPenState","rowIndent","contat","uc","currPenStateString","captionsArray","cueID","finalDiv","cueRegionProperties","cssText","bodyDiv","cueUniWrapper","ptag","lastSpanRow","brElement","sameRow","spanStyle","spanElement","cueHTMLElement","cellResolution","isFromCEA608","getSeiData","cursor","isCea608Sei","payloadType","payloadSize","isNonEmptyCCData","ccData1","ccData2","parseCta608DataFromSei","fieldData","ccCount","ccType","extractCta608DataFromSample","nalSize","nalType","TextSourceBuffer","vttParser","vttCustomRenderingParser","ttmlParser","initializationSegmentReceived","fragmentedTracks","firstFragmentedSubtitleStart","currFragmentedTrackIdx","embeddedTracks","embeddedTimescale","embeddedLastSequenceNumber","lastChunkEnd","embeddedCea608FieldParsers","embeddedTextHtmlRender","embeddedInitialized","_createTextTrackInfoFromMediaInfo","trackKindMap","textTrackInfo","TextTrackInfo","getIsDefault","STPP","TTML","_checkTtml","caption","_getKind","addTextTrackInfo","_onVideoChunkReceived","setCurrentFragmentedTrackIdx","codecType","samplesInfo","_getParser","sampleStart","_getTimestampOffset","ccContent","images","subOffset","inData","offsetTime","ttmlTimeIsRelative","addCaptions","_appendFragmentedSttp","captionArray","sampleBoxes","box1","box2","cue_text","stylings","getCaptionStyles","_appendFragmentedWebVtt","_appendFragmentedText","sequenceNumber","chunkStart","trunc","chunkEnd","trackIdx","getTrackIdxForId","_makeCueAdderForIndex","_setupCeaParser","_isDiscontinuityOfChunks","allCcData","splits","ccData","lastSampleTime","_extractCea608Data","fieldNr","fieldParser","_appendEmbeddedText","getCurrentTrackIdx","_appendText","trackIndex","VTT","onVideoBufferCleared","deleteCuesFromTrackIdx","addMediaInfos","mInfos","fModel","CustomTimeRanges","currFragTrack","resetMediaInfos","CC3","resetEmbedded","deleteAllTextTracks","getConfig","CUE_PROPS_TO_COMPARE","TextTracks","Cue","textTrackInfos","nativeTexttracks","currentTrackIdx","actualVideoLeft","actualVideoTop","actualVideoWidth","actualVideoHeight","captionContainer","vttCaptionContainer","videoSizeCheckInterval","fullscreenAttribute","displayCCOnTop","topZIndex","resizeObserver","hasRequestAnimationFrame","currentCaptionEventCue","_createNativeTextrackElement","getVideoVisibleVideoSize","viewWidth","viewHeight","use80Percent","videoPictureWidth","videoPictureHeight","videoPictureXAspect","videoPictureYAspect","videoPictureWidthAspect","videoPictureHeightAspect","checkVideoSize","forceDrawing","videoOffsetTop","videoOffsetLeft","realVideoSize","newVideoWidth","newVideoHeight","newVideoLeft","newVideoTop","containerStyle","CAPTION_CONTAINER_RESIZE","activeCues","scaleCue","_scaleCue","activeCue","replaceValue","valueFontSize","valueLineHeight","cellUnit","elementsSpan","getElementsByClassName","htmlCaptionDiv","getElementById","_renderCaption","_resolveImageSrc","imsc1ImgUrnTester","smpteImgUrnTester","imageId","embeddedImages","clearCaptionContainer","finalCue","CAPTION_RENDERED","captionDiv","_areCuesAdjacent","prevCue","_extendLastCue","cue1","cue2","_cuesContentAreEqual","_resolveImagesInContents","timeOffset","getTrackByIdx","currentItem","_handleCaptionEvents","_isHTMLCue","_handleHtmlCaption","_handleNonHtmlCaption","cueInTrack","manualCueList","onexit","TEXT_DISABLED","addCue","_deleteOutdatedTrackCues","_deleteTrackCues","_getCueInformation","onenter","_triggerCueExit","_triggerCueEnter","CUE_ENTER","CUE_EXIT","TEXT_SHOWING","requestAnimationFrame","divs","childNodes","align","snapToLines","_getCueInformationForHtml","_getCueInformationForNonHtml","_removeManualCue","_getManualActiveTracks","activeTracks","manualMode","setCurrentTrackIdx","setCueStyleOnTrack","renderingType","ResizeObserver","observe","setNativeCueStyle","removeNativeCueStyle","cueInRange","_isCueActive","removeCue","styleElement","stylesheet","sheet","insertRule","classList","textTrackInfoVO","defaultIndex","nativeTexttrack","default","textTrack","TEXT_TRACK_ADDED","onMetadataLoaded","videoTextTrack","TEXT_HIDDEN","unobserve","disableManualTracks","getCurrentTextTrackInfo","getTextTrackInfos","trackId","VTTCue","TextTrackCue","fullscreenElement","webkitIsFullScreen","msFullscreenElement","mozFullScreen","manualCueProcessing","WebVTT","processCues","setModeForTrackIdx","VTTParser","regExNewLine","regExToken","regExWhiteSpace","regExWhiteSpaceWordBoundary","convertCuePointTimes","timeArray","parseItemAttributes","vttCuePoints","cuePoints","styleObject","isPercentage","getSublines","lineCount","subline","lineData","lastStartTime","VttCustomRenderingParser","vttjs","oncue","Parser","TTMLParser","cueCounter","getCueID","startTimeSegment","endTimeSegment","errorMsg","currentImageId","accumulated_image_data","TTML_TO_PARSE","imsc1doc","TTML_PARSED","ttmlString","ttmlDoc","mediaTimeEvents","topLevelContents","DVBFonts","FONT_DOWNLOAD_STATUS","dvbFontList","_addFontFromTrack","asBaseUrl","dvbFontProps","isEssential","essentialTags","supplementalTags","OFF_MIMETYPE","WOFF_MIMETYPE","_hasMandatoryDvbFontAttributes","resolvedUrl","fontUrl","fontFace","FontFace","_updateFontStatus","newStatus","font","addFontsFromTracks","downloadFonts","fonts","DVB_FONT_DOWNLOAD_ADDED","DVB_FONT_DOWNLOAD_COMPLETE","DVB_FONT_DOWNLOAD_FAILED","getFonts","getFontsForTrackId","deleted","_cleanUpDvbCustomFonts","TextController","streamData","textSourceBuffers","allTracksAreDisabled","forceTextStreaming","textTracksAdded","disableTextBeforeTextTracksAdded","dvbFonts","_onFontDownloadFailure","_onFontDownloadSuccess","_onTextTracksAdded","currentTrack","lastEnabledIndex","TEXT_TRACKS_ADDED","_onMediaInfoUpdated","currentTextTrackInfo","suitableForcedSubtitleIndex","_getSuitableForceSubtitleTrackIndex","_isForcedSubtitleTrack","oldTrackIdx","currentNativeTrackInfo","currentFragTrack","_setFragmentedTextTrack","_setNonFragmentedTextTrack","forcedSubtitleTrackIndex","forcedSubtitleTracks","_indexToSelect","_getForcedSubtitleTracks","currentAudioTrack","suitableTrack","enableForcedTextStreaming","enable","enableText","getAllTracksAreDisabled","textSourceBuffer","ThroughputModel","throughputDict","latencyDict","ewmaThroughputDict","ewmaLatencyDict","ewmaHalfLife","_deriveThroughputFromNetworkApi","connection","downlink","_updateEwmaValues","ewmaObj","halfLife","fastAlpha","fast","fastEstimate","slowAlpha","slow","slowEstimate","addEntry","_createSettingsForMediaType","latencyInMs","_calculateThroughputValuesForFetch","deriveThroughputViaResourceTimingApi","referenceTimeInMs","_calculateThroughputValuesForXhr","_calculateThroughputValues","etp","cacheReferenceTime","decodedBodySize","_isCachedResponse","_cleanupDict","bandwidthHalfLife","latencyHalfLife","getThroughputDict","getEwmaThroughputDict","getEwmaLatencyDict","getEwmaHalfLife","getLatencyDict","ThroughputController","throughputModel","_onResourceTimingBufferFull","clearResourceTimings","_getAverage","throughputType","adjustedSampleSize","useMin","THROUGHPUT_TYPES","BANDWIDTH","LATENCY","_getAdjustedSampleSize","BYTE_SIZE_WEIGHTED_ARITHMETIC_MEAN","getByteSizeWeightedArithmeticMean","DATE_WEIGHTED_ARITHMETIC_MEAN","getDateWeightedArithmeticMean","HARMONIC_MEAN","getHarmonicMean","BYTE_SIZE_WEIGHTED_HARMONIC_MEAN","getByteSizeWeightedHarmonicMean","DATE_WEIGHTED_HARMONIC_MEAN","getDateWeightedHarmonicMean","getEwma","ZLEMA","getZlema","ratio","divideBy","dividend","zlema","getRawThroughputData","average","STREAMING_NOT_INITIALIZED_ERROR","PLAYBACK_NOT_INITIALIZED_ERROR","ELEMENT_NOT_ATTACHED_ERROR","SOURCE_NOT_ATTACHED_ERROR","MEDIA_PLAYER_NOT_INITIALIZED_ERROR","mediaPlayerInitialized","streamingInitialized","playbackInitialized","metricsReportingController","offlineController","gapController","catchupController","attachSource","attachView","isReady","getVersion","getDvrSeekOffset","_adjustSeekTimeBasedOnLiveDelay","seektime","getVideoElement","setAutoPlay","restoreDefaultUTCTimingSources","getDashMetrics","_detectProtection","detectedMetricsReporting","MetricsReporting","metricsReporting","createMetricsReporting","mediaElement","metricsConstants","_detectMetricsReporting","detectedMssHandler","MssHandler","initSegmentType","_detectMss","_resetPlaybackControllers","_initializePlayback","urlOrManifest","stop","_createManifestLoader","detectedProtection","Protection","createProtectionSystem","Capabilities","setProtectionController","_detectOffline","detectedOfflineController","OfflineController","resetRecords","_createPlaybackControllers","PLAYBACK_INITIALIZED","addABRCustomRule","rulename","addAbrCustomRule","addRequestInterceptor","interceptor","addResponseInterceptor","addUTCTimingSource","attachProtectionController","attachTTMLRenderingDiv","attachVttRenderingDiv","clearDefaultUTCTimingSources","convertToTimeCode","parentNameString","formatUTC","locales","hour12","withDate","toLocaleDateString","toLocaleTimeString","getABRCustomRules","getAvailableBaseUrls","getAvailableLocations","types","getCurrentTextTrackIndex","getDashAdapter","getDebug","getDvrWindow","startAsUtc","endAsUtc","getInitialMediaSettingsFor","getOfflineController","getProtectionController","getSettings","getStreamsFromManifest","getTargetLiveDelay","getTracksForTypeFromManifest","getVolume","volume","supportsMediaSource","isMuted","muted","provideThumbnail","registerCustomCapabilitiesFilter","registerLicenseRequestFilter","registerLicenseResponseFilter","removeABRCustomRule","removeAbrCustomRule","removeAllABRCustomRule","removeAllAbrCustomRule","removeRequestInterceptor","removeResponseInterceptor","removeUTCTimingSource","resetCustomInitialTrackSelectionFunction","resetSettings","retrieveManifest","BAD_ARGUMENT_ERROR","seekToPresentationTime","setCurrentTrack","setCustomInitialTrackSelectionFunction","customFunc","setInitialMediaSettingsFor","sanitizedValue","defaults","__sanitizeDescriptorType","_sanitizeSettings","setMute","setRepresentationForTypeById","setRepresentationForTypeByIndex","setVolume","setXHRWithCredentialsForType","timeAsUTC","utcValue","timeInDvrWindow","triggerSteeringRequest","unregisterCustomCapabilitiesFilter","unregisterLicenseRequestFilter","unregisterLicenseResponseFilter","updateSettings","updateSource","mediaPlayerEvents","WVTT","MOVING_AVERAGE_SLIDING_WINDOW","MOVING_AVERAGE_EWMA","INITIALIZE","XML","ARRAY_BUFFER","DVB_REPORTING_URL","DVB_PROBABILITY","AAST","CLEARKEY_KEYSTEM_STRING","WIDEVINE_KEYSTEM_STRING","PLAYREADY_KEYSTEM_STRING","PLAYREADY_RECOMMENDATION_KEYSTEM_STRING","WIDEVINE_UUID","PLAYREADY_UUID","CLEARKEY_UUID","W3C_CLEARKEY_UUID","INITIALIZATION_DATA_TYPE_CENC","INITIALIZATION_DATA_TYPE_KEYIDS","INITIALIZATION_DATA_TYPE_WEBM","ENCRYPTION_SCHEME_CENC","ENCRYPTION_SCHEME_CBCS","MEDIA_KEY_MESSAGE_TYPES","LICENSE_REQUEST","LICENSE_RENEWAL","LICENSE_RELEASE","INDIVIDUALIZATION_REQUEST","ROBUSTNESS_STRINGS","WIDEVINE","SW_SECURE_CRYPTO","SW_SECURE_DECODE","HW_SECURE_CRYPTO","HW_SECURE_DECODE","HW_SECURE_ALL","MEDIA_KEY_STATUSES","USABLE","EXPIRED","RELEASED","OUTPUT_RESTRICTED","OUTPUT_DOWNSCALED","STATUS_PENDING","INTERNAL_ERROR","mpdurl","errorcode","terror","ipaddress","servicelocation","SSL_CONNECTION_FAILED_PREFIX","DNS_RESOLUTION_FAILED","HOST_UNREACHABLE","CONNECTION_REFUSED","CONNECTION_ERROR","CORRUPT_MEDIA_ISOBMFF","CORRUPT_MEDIA_OTHER","BASE_URL_CHANGED","BECAME_REPORTER","DVBErrorsTranslator","onManifestUpdate","onServiceLocationChanged","onBecameReporter","onMetricEvent","onPlaybackError","MediaError","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","BECAME_REPORTING_PLAYER","RangeController","useWallClockTime","starttime","_useWallClockTime","isEnabled","numRanges","MetricSerialiser","serialise","pairs","isBuiltIn","toISOString","RNG","randomNumbers","crypto","msCrypto","ArrayType","Uint32Array","getRandomValues","DVBReporting","metricSerialiser","randomNumberGenerator","reportingPlayerStatusDecided","isReportingPlayer","reportingUrl","rangeController","pendingRequests","vos","successCB","failureCB","reqIndex","doGetRequest","rc","probability","dvbReportingUrl","dvbProbability","ReportingFactory","knownReportingSchemeIdUris","reporting","register","moduleName","unregister","ReportingController","reporters","reportingFactory","reporter","HandlerHelpers","reconstructFullMetricName","validateN","n_ms","BufferLevelHandler","reportingController","lastReportedTime","handlerHelpers","storedVOs","intervalCallback","getLowestBufferLevelVO","handleNewMetric","onInitialisationComplete","METRICS_INITIALISATION_COMPLETE","unused","HttpListHandler","storedVos","GenericMetricHandler","MetricsHandlerFactory","keyRegex","knownFactoryProducts","listType","MetricsHandlersController","metricsHandlerFactory","handle","midx","nextm","MetricsController","metricsHandlersController","metricsEntry","Range","Reporting","ManifestParsing","getMetrics","Metrics","metricEntry","rangeEntry","reportingStartTime","getMetricsRangeStartTime","reportingEntry","MetricsCollectionController","metricsControllers","controllersToRemove","resetMetricsControllers","dvbErrorsTranslator","getReportingFactory","getMetricsHandlerFactory","metricsReportingEvents","utcTimingSources","xhrWithCredentials","requestInterceptors","responseInterceptors","licenseRequestFilters","licenseResponseFilters","customAbrRules","_unregisterFilter","_findAbrCustomRuleIndex","getLicenseRequestFilters","getLicenseResponseFilters","useCreds","defaultUtcTimingSource","LICENSE_SERVER_MANIFEST_CONFIGURATIONS","prefixes","CommonEncryption","findMp4ProtectionElement","cpArray","retVal","ProtectionConstants","getPSSHData","getPSSHForKeySystem","keySystem","initData","psshList","parsePSSHList","uuid","parseInitDataFromContentProtection","cpData","byteCursor","nextBox","systemID","boxStart","getLicenseServerUrlFromMediaInfo","licenseServer","targetProtectionData","hexKidToBufferSource","hexKid","cleanedHexKid","audioCapabilities","videoCapabilities","distinctiveIdentifier","persistentState","sessionTypes","initDataTypes","messageType","sessionId","ProtectionController","protectionKeyController","applicationProvidedProtectionData","keyStatusMap","keySystemSelectionInProgress","licenseRequestRetryTimeout","licenseXhrRequest","pendingMediaTypesToHandle","robustnessLevel","selectedKeySystem","sessionType","protectionModel","needkeyRetries","_selectKeySystemOrUpdateKeySessions","supportedKeySystemsMetadata","fromManifest","_handlePendingMediaTypes","supportedKeySystems","keySystemConfigurationsToRequest","keySystemConfiguration","_getKeySystemConfiguration","configs","_getKeySystemConfigurations","ksA","ksB","systemString","keySystemAccess","requestKeySystemAccess","selectedSystemString","selectKeySystem","_onKeySystemAccessed","_getProtDataForKeySystem","serverCertificate","setServerCertificate","_onMediaKeysCreated","KEY_SYSTEM_ACCESS_DENIED_ERROR_CODE","KEY_SYSTEM_ACCESS_DENIED_ERROR_MESSAGE","_handleKeySystemSelectionError","_selectInitialKeySystem","ksIdx","keySystemMetadata","isClearKey","clearkeys","_handleClearkeySession","loadKeySession","createKeySession","keySystemData","audioRobustness","videoRobustness","ksSessionType","MediaCapability","KeySystemConfiguration","sessions","getSessionTokens","getKeyId","_doesSessionForKeyIdExists","initDataForKS","_isInitDataDuplicate","KEY_SESSION_CREATED_ERROR_CODE","KEY_SESSION_CREATED_ERROR_MESSAGE","keySystemString","currentInitData","getAllInitData","initDataEquals","NEED_KEY","_onNeedKey","_onKeyMessage","keyMessage","KEY_MESSAGE","sessionToken","licenseServerModelInstance","getLicenseServerModelInstance","eventData","getSessionId","_sendLicenseRequestCompleteEvent","processClearKeyLicenseRequest","keyPairs","updateKeySession","licenseServerData","serverURL","laURL","schemeIdURI","psshData","getLicenseServerURLFromInitData","getServerURLFromMessage","_getLicenseServerUrl","MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_CODE","MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_MESSAGE","reqHeaders","_updateHeaders","httpRequestHeaders","getRequestHeadersFromMessage","onLoad","licenseResponse","LicenseResponse","_applyFilters","licenseMessage","getLicenseMessage","_reportError","onAbort","MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE","MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE","onError","reqPayload","getLicenseRequestFromMessage","reqMethod","getHTTPMethod","getResponseType","httpTimeout","licenseRequest","LicenseRequest","_doLicenseRequest","_issueLicenseRequest","MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_CODE","MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_MESSAGE","retriesCount","cmcdParams","cmcdHeaders","_retryRequest","retryInterval","LICENSE_REQUEST_SENDING","_abortLicenseRequest","getErrorResponse","serverResponse","responseCode","responseText","param","retry","initDataType","abInitData","supportedKs","getSupportedKeySystemsFromSegmentPssh","_shouldCheckKeyStatusMap","sessionTokens","targetSessionTokens","normalizedKeyId","hasTriggeredKeyStatusMapUpdate","keyStatus","closeKeySession","getKeySystems","removeKeySession","INTERNAL_KEY_MESSAGE","retryTimeout","setKeySystems","keySystems","setRobustnessLevel","setSessionType","parsedKeyStatuses","isEdgeBrowser","part0","part1","part2","_handlePlayreadyKeyId","keyIdInHex","KEY_STATUSES_MAP_UPDATED","keyID","toJWK","numKeys","jwk","alg","jwkString","bView","KeySystemClearKey","getInitData","cencContentProtection","cencDefaultKidToBase64Representation","getCDMData","getClearKeysFromProtectionData","clearkeySet","jsonMsg","clearkeyID","clearkey","KeyPair","ClearKeyKeySet","KeySystemW3CClearKey","KeySystemWidevine","KeySystemPlayReady","messageFormat","PSSHBoxType","playreadySystemID","PROSize","PSSHSize","PSSHBoxBuffer","PSSHBox","PSSHData","uint8arraydecodedPROHeader","prheader","xmlDoc","DOMParser","dataview","Uint16Array","parseFromString","headerNameList","getElementsByTagName","headerValueList","nodeValue","Content","Challenge","numRecords","recordType","recordLength","recordData","record","laurl","luiurl","_cdmData","cdmData","cdmDataBytes","setPlayReadyMessageFormat","DRMToday","license","keySystemStr","PlayReady","soap","uintToString","encodedString","escape","parseServerResponse","stringResponse","envelope","getElementsByTagNameNS","parseErrorResponse","faultstring","statusCode","idStart","idEnd","fault","detail","exception","errorString","Widevine","ClearKey","keypair","keyid","ProtectionKeyController","clearkeyKeySystem","clearkeyW3CKeySystem","protDataSet","_getSessionId","_getSessionType","getKeySystemBySystemString","applicationSpecifiedProtectionData","cpIdx","supportedKS","mp4ProtectionElement","KeySystemMetadata","initData1","initData2","data1","data2","newKeySystems","protectionDataSet","defaultURL","ksConfiguration","nativeMediaKeySystemAccessObject","SYSTEM_STRING_PRIORITY","DefaultProtectionModel","mediaKeys","eventHandler","_requestKeySystemAccessInternal","requestMediaKeySystemAccess","KEY_SYSTEM_ACCESS_COMPLETE","protDataSystemStringPriority","systemStringPriority","currentKeySystem","systemStringsToApply","_checkAccessForSystemStrings","_checkAccessForKeySystem","configuration","getConfiguration","KeySystemAccess","errorMessage","mediaKeySystemAccess","_closeKeySessionInternal","session","removeSession","_createSessionToken","handleEvent","_onKeyStatusesChange","KEY_STATUSES_CHANGED","keyStatuses","_parseKeyStatus","KeyMessage","getSessionType","getExpirationTime","expiration","getKeyStatuses","getUsable","usable","KEY_SESSION_CLOSED","mediaKeySession","createSession","dataType","generateRequest","KEY_SESSION_REMOVED","numSessions","setMediaKeys","TEARDOWN_COMPLETE","createMediaKeys","mkeys","SERVER_CERTIFICATE_UPDATED_ERROR_CODE","SERVER_CERTIFICATE_UPDATED_ERROR_MESSAGE","MEDIA_KEYERR_CODE","NeedKey","ProtectionModel_3Feb2014","needkey","ready","release","boundDoSetKeys","doSetKeys","VIDEO_ELEMENT_SELECTED","ksConfigurations","supportedAudio","supportedVideo","configIdx","audios","videos","audioIdx","MediaKeys","isTypeSupported","videoIdx","ksConfig","ksAccess","ksInfo","keySession","errorStr","destinationURL","KEY_ADDED","createSessionToken","ProtectionModel_01b","pendingSessions","moreSessionsAllowed","cancelKeyRequest","findSessionByID","sessionArray","keyerror","keymessage","keyadded","canPlayType","newSession","generateKeyRequest","addKey","errorCode","MEDIA_KEYERR_UNKNOWN_CODE","MEDIA_KEYERR_UNKNOWN_MESSAGE","MEDIA_KEYERR_CLIENT_CODE","MEDIA_KEYERR_CLIENT_MESSAGE","MEDIA_KEYERR_SERVICE_CODE","MEDIA_KEYERR_SERVICE_MESSAGE","MEDIA_KEYERR_OUTPUT_CODE","MEDIA_KEYERR_OUTPUT_MESSAGE","MEDIA_KEYERR_HARDWARECHANGE_CODE","MEDIA_KEYERR_HARDWARECHANGE_MESSAGE","MEDIA_KEYERR_DOMAIN_CODE","MEDIA_KEYERR_DOMAIN_MESSAGE","systemCode","MEDIA_KEY_MESSAGE_ERROR_CODE","MEDIA_KEY_MESSAGE_ERROR_MESSAGE","APIS_ProtectionModel_01b","APIS_ProtectionModel_3Feb2014","_getAPI","apis","onencrypted","_getProtectionModel","setEncryptedMediaSupported","protectionEvents","protectionErrors","hasManagedMediaSource","testedCodecConfigurations","encryptedMediaSupported","_getEnhancedConfigurations","inputConfig","_getGenericMediaCapabilitiesVideoConfig","_getGenericMediaCapabilitiesAudioConfig","mediaSourceCodecString","genericConfiguration","_enhanceGenericConfigurationWithKeySystemConfiguration","_getTestedCodecConfiguration","audioEqual","_isConfigEqual","videoEqual","keySystemEqual","_addProperties","newProps","np","testedConfigurations","testedConfiguration","decodingInfo","_isConfigSupported","previousStreamInfo","configurationsToTest","mediaCapabilities","_canUseMediaCapabilitiesApi","_checkSingleConfigurationWithMediaCapabilities","_checkCodecWithMediaCapabilities","configurationToTest","_checkCodecWithMse","SourceBuffer","supportedEssentialProps","customTimeRangeArray","mergeRanges","rangeIndex1","rangeIndex2","range1","range2","obj1","obj2","deepEqual","parameter","DVB_REPORTING_TYPE","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","definition","g","globalThis","loadInterval","SUPPORTED_MIME_TYPE","_dashjs_player","player","videoID","querySelectorAll","findVideo","createAll","aPlayers","sources","MediaPlayerFactory","skipAutoCreate","loadHandler"],"sourceRoot":""}