├── Crunchyroll_Premium ├── background.js ├── content.css ├── content.js ├── icon.png ├── interceptor.js ├── logo.png ├── manifest.json ├── popup.html └── popup.js ├── README.md ├── assets ├── css │ ├── download_dialog.css │ └── player.css ├── font │ ├── SFProDisplay-Regular.eot │ ├── SFProDisplay-Regular.svg │ ├── SFProDisplay-Regular.ttf │ ├── SFProDisplay-Regular.woff │ ├── SFProDisplay-Regular.woff2 │ ├── SFProDisplay-Semibold.eot │ ├── SFProDisplay-Semibold.svg │ ├── SFProDisplay-Semibold.ttf │ ├── SFProDisplay-Semibold.woff │ └── SFProDisplay-Semibold.woff2 ├── icon │ ├── download_icon.svg │ ├── fetching-icon.svg │ ├── forward-30s.svg │ ├── loading-icon.svg │ ├── replay-10s.svg │ ├── update_icon.svg │ └── webvideocaster_icon.png └── js │ ├── jwplayer.js │ ├── player.js │ └── search.js └── index.html /Crunchyroll_Premium/background.js: -------------------------------------------------------------------------------- 1 | browser.webRequest.onHeadersReceived.addListener( 2 | function(acso) { 3 | var responseHeaders = acso.responseHeaders.concat([{name: 'Access-Control-Allow-Origin', value: '*'}]); 4 | return { responseHeaders }; 5 | }, 6 | { 7 | urls: ["*://rgern100.github.io/*", "*://*.crunchyroll.com/*", "*://localhost/*", "*://*.vrv.co/*"], 8 | types : ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"] 9 | }, 10 | ["blocking","responseHeaders"] 11 | ); 12 | browser.webRequest.onHeadersReceived.addListener( 13 | function(csp) { 14 | var responseHeaders = csp.responseHeaders.concat([{name: 'content-security-policy', value: "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.betrad.com 8f2bfa24-f12a-458a-89ac-391b91f711e3.redfastlabs.com accounts.crunchyroll.com api-manga.crunchyroll.com api.amplitude.com api.crunchyroll.com api.segment.io bam.nr-data.net beta-api.crunchyroll.com beta.crunchyroll.com boards-api.greenhouse.io cdimg1.crunchyroll.com cdimg2.crunchyroll.com cdimg3.crunchyroll.com cdn.amplitude.com cdn.cookielaw.org cdn.segment.com cdn.segment.io cdn.shopify.com cdnjs.cloudflare.com cms.crunchyroll.com conduit.redfast.com cr-eec.etp-prod.com crunchyroll.com crunchyroll.surveymonkey.com crunchyroll.zendesk.com customer.iad-03.braze.com eec.crunchyroll.com ekr.zdassets.com fy.v.vrv.co geolocation.onetrust.com img1.ak.crunchyroll.com img1.cdn.crunchyroll.com img1.crunchyroll.com img1.lln.crunchyroll.com img2.ak.crunchyroll.com img2.cdn.crunchyroll.com img2.lln.crunchyroll.com img3.ak.crunchyroll.com img3.cdn.crunchyroll.com img3.lln.crunchyroll.com js-agent.newrelic.com ll.v.vrv.co pl.crunchyroll.com privacyportal-eu.onetrust.com sa.crunchyroll.com sa.etp-prod.com sa.etp-proto0.com secure.crunchyroll.com static.ak.crunchyroll.com static.crunchyroll.com static.cx-proto0.com static.vrv.co static.zdassets.com store.crunchyroll.com v.vrv.co widget.surveymonkey.com wiki.crunchyroll.com www.crunchyroll.com www.google.com www.gstatic.com www.riddle.com www.surveymonkey.com www.zendesk.com *.deviantart.com *.fanpop.com *.fastpic.ru *.fls.doubleclick.net *.gfycat.com *.giphy.com *.imageshack.us *.imgbox.com *.imgflip.com *.imgur.com *.narvii.com *.photobucket.com *.photomania.com *.pinimg.com *.servimg.com *.static.flickr.com *.tenor.com *.tinypic.com *.tumblr.com *.twimg.com *.wikia.nocookie.net 1f2e7.v.fwmrm.net 5fd74.v.fwmrm.net 965432598.privacysandbox.googleadservices.com 982007020.privacysandbox.googleadservices.com ad.doubleclick.net ads.stickyadstv.com ads.yahoo.com ag.gbc.criteo.com ams01-event.spotxchange.com ams01-search.spotxchange.com analytics.tiktok.com analytics.twitter.com api.realytics.io apiservices.krxd.net bea4.v.fwmrm.net beacon.krxd.net bid.g.doubleclick.net cdn-eu.realytics.net cdn.krxd.net cdn.polyfill.io cl.qualaroo.com cm.g.doubleclick.net connect.facebook.net consumer.krxd.net crfeaturesbiz.wpcomstaging.com criteo-partners.tremorhub.com csm.da.us.criteo.net csm.va.us.criteo.net dntcl.qualaroo.com eq97f.publishers.tremorhub.com event.spotxchange.com fonts.googleapis.com fonts.gstatic.com gem.gbc.criteo.com googleads.g.doubleclick.net googleads4.g.doubleclick.net graph.instagram.com gum.criteo.com i.cdn.turner.com i.realytics.io iad02-event.spotxchange.com iad02-search.spotxchange.com insight.adsrvr.org instagram.com js.adsrvr.org jslog.krxd.net mssl.fwmrm.net pixel.advertising.com platform.twitter.com player.vimeo.com quiz.tryinteract.com r.casalemedia.com sb.scorecardresearch.com search.spotxchange.com sp.analytics.yahoo.com ssl.google-analytics.com sslwidget.criteo.com static.ads-twitter.com static.criteo.net static.doubleclick.net stats.g.doubleclick.net sync.search.spotxchange.com syndication.twitter.com t.co tp.realytics.io ups.analytics.yahoo.com usermatch.krxd.net vimeo.com widget.us.criteo.com www.facebook.com www.google-analytics.com www.googleadservices.com www.googletagmanager.com www.instagram.com www.youtube.com wvc-x-callback:"}]); 15 | return { responseHeaders }; 16 | }, 17 | { 18 | urls: ["*://*.crunchyroll.com/*"], 19 | types : ["main_frame", "sub_frame"] 20 | }, 21 | ["blocking","responseHeaders"] 22 | ) -------------------------------------------------------------------------------- /Crunchyroll_Premium/content.css: -------------------------------------------------------------------------------- 1 | #showmedia_video_player{ 2 | display: none; 3 | } -------------------------------------------------------------------------------- /Crunchyroll_Premium/content.js: -------------------------------------------------------------------------------- 1 | const query = qry => document.body.querySelector(qry) 2 | var preservedState = null 3 | 4 | //function que pega algo dentro dentro do html. 5 | function pegaString(str, first_character, last_character) { 6 | if (str.match(first_character + "(.*)" + last_character) == null) { 7 | return null; 8 | } else { 9 | new_str = str.match(first_character + "(.*)" + last_character)[1].trim() 10 | return new_str; 11 | } 12 | } 13 | 14 | //function para remover elementos da página 15 | function remove(element, name, untilRemoved = false, callback = () => { }) { 16 | let tries = 0; 17 | if (untilRemoved) { 18 | const finishRemove = setInterval(() => { 19 | if (query(element) != null) { 20 | clearInterval(finishRemove) 21 | console.log(`[CR Premium] Removendo ${name}...`); 22 | const closeBtn = query(element + ' > .close-button') 23 | if (closeBtn) closeBtn.click() 24 | else query(element).style.display = 'none'; 25 | 26 | callback() 27 | } 28 | else if (tries > 250) clearInterval(finishRemove) 29 | else tries++ 30 | }, 20) 31 | } else if (query(element) != null) { 32 | console.log(`[CR Premium] Removendo ${name}...`); 33 | query(element).style.display = 'none'; 34 | } 35 | } 36 | 37 | //function que mudar o player para um mais simples. 38 | function importPlayer() { 39 | var HTML = document.documentElement.innerHTML; 40 | console.log("[CR Old] Removendo player da Crunchyroll..."); 41 | var elem = document.getElementById('showmedia_video_player'); 42 | elem.parentNode.removeChild(elem); 43 | 44 | console.log("[CR Old] Pegando dados da stream..."); 45 | var video_config_media = JSON.parse(pegaString(HTML, "vilos.config.media = ", ";")); 46 | 47 | //Remove Nota do topo sobre experimentar o premium 48 | //Remove avisos q o video nn pode ser visto 49 | //Remove sugestão de inscrever-se para o trial gratuito 50 | remove(".freetrial-note", "Free Trial Note") 51 | remove(".showmedia-trailer-notice", "Trailer Notice") 52 | remove("#showmedia_free_trial_signup", "Free Trial Signup") 53 | 54 | // Simular interação do usuário para deixar em fullscreen automaticamente 55 | // var element = document.getElementById("template_scroller"); 56 | // if (element) element.click(); 57 | 58 | const appendTo = query("#showmedia_video_box") || query("#showmedia_video_box_wide") 59 | const series = document.querySelector('meta[property="og:title"]'); 60 | const up_next = document.querySelector('link[rel=next]'); 61 | 62 | var message = { 63 | 'video_config_media': [JSON.stringify(video_config_media)], 64 | 'lang': [pegaString(HTML, 'LOCALE = "', '",')], 65 | 'series': series ? series.content : undefined, 66 | 'up_next': up_next ? up_next.href : undefined, 67 | } 68 | 69 | console.log("[CR Old] Adicionando o jwplayer..."); 70 | addPlayer(appendTo, message) 71 | } 72 | 73 | //renderiza player na versão beta 74 | function importBetaPlayer(ready = false) { 75 | var videoPlayer = query('.video-player') || query('#frame'); 76 | if (!ready) { 77 | setTimeout(() => importBetaPlayer(!!videoPlayer), 100); 78 | return; 79 | } 80 | 81 | var lastWatchedPlayer = query('#frame'); 82 | if (query('.video-player') && lastWatchedPlayer) 83 | lastWatchedPlayer.parentNode.removeChild(lastWatchedPlayer); 84 | 85 | var titleLink = query('.show-title-link') 86 | if (titleLink) titleLink.style.zIndex = "2"; 87 | 88 | console.log("[CR Beta] Removendo player da Crunchyroll..."); 89 | remove('.video-player-placeholder', 'Video Placeholder'); 90 | remove('.video-player', 'Video Player', true); 91 | remove('.blocked-stream-overlay', 'Blocked Overlay', true); 92 | videoPlayer.src = ''; 93 | const appendTo = videoPlayer.parentNode; 94 | 95 | console.log("[CR Beta] Pegando dados da stream..."); 96 | var external_lang = preservedState.localization.locale.toLowerCase() 97 | var ep_lang = preservedState.localization.locale.replace('-', '') 98 | var ep_id = preservedState.watch.id 99 | var ep = preservedState.content.media.byId[ep_id] 100 | if (!ep) { window.location.reload(); return; } 101 | var series_slug = ep.parentSlug 102 | var external_id = getExternalId(ep.id).substr(4) 103 | var old_url = `https://www.crunchyroll.com/${external_lang}/${series_slug}/episode-${external_id}` 104 | var up_next = document.querySelector('[data-t="next-episode"] > a') 105 | var playback = ep.playback 106 | var series = document.querySelector('.show-title-link > h4')?.innerText; 107 | 108 | var message = { 109 | 'playback': playback, 110 | 'old_url': old_url, 111 | 'lang': ep_lang, 112 | 'up_next': up_next ? up_next.href : undefined, 113 | 'series': series ? series : undefined, 114 | } 115 | 116 | console.log("[CR Beta] Adicionando o jwplayer..."); 117 | console.log("[CR Beta] Antiga URL:", old_url); 118 | addPlayer(appendTo, message, true) 119 | } 120 | 121 | function addPlayer(element, playerInfo, beta = false) { 122 | console.log("[CR Premium] Adicionando o jwplayer..."); 123 | var ifrm = document.createElement("iframe"); 124 | ifrm.setAttribute("id", "frame"); 125 | ifrm.setAttribute("src", "https://rgern100.github.io/crp-iframe-player-Firefox/"); 126 | ifrm.setAttribute("width", "100%"); 127 | ifrm.setAttribute("height", "100%"); 128 | ifrm.setAttribute("frameborder", "0"); 129 | ifrm.setAttribute("scrolling", "no"); 130 | ifrm.setAttribute("allowfullscreen", "allowfullscreen"); 131 | ifrm.setAttribute("allow", "autoplay; encrypted-media *"); 132 | 133 | element.appendChild(ifrm) 134 | 135 | browser.storage.sync.get(['forcemp4', 'aseguir', 'cooldown', 'webvideocaster'], function (items) { 136 | ifrm.onload = function () { 137 | playerInfo['webvideocaster'] = items.webvideocaster === undefined ? false : items.webvideocaster; 138 | playerInfo['up_next_cooldown'] = items.cooldown === undefined ? 5 : items.cooldown; 139 | playerInfo['up_next_enable'] = items.aseguir === undefined ? true : items.aseguir; 140 | playerInfo['force_mp4'] = items.forcemp4 === undefined ? false : items.forcemp4; 141 | playerInfo['version'] = '1.3.0a'; 142 | playerInfo['noproxy'] = true; 143 | playerInfo['beta'] = beta; 144 | ifrm.contentWindow.postMessage(playerInfo, "*"); 145 | }; 146 | }); 147 | } 148 | 149 | //function ao carregar pagina. 150 | function onloadfunction() { 151 | var HTML = document.documentElement.innerHTML; 152 | if (pegaString(HTML, "vilos.config.media = ", ";") != null) { 153 | importPlayer(); // old CR 154 | } else if (preservedState != null) { 155 | importBetaPlayer(); // beta CR 156 | remove(".erc-modal-portal > .overlay > .content-wrapper", "Free Trial Modal", true, () => document.body.classList = []) 157 | remove(".erc-watch-premium-upsell", "Premium Sidebar", true) 158 | registerChangeEpisode(); 159 | } 160 | } 161 | 162 | // function pra atualizar pagina quando mudar de episodio pela UI beta 163 | var currentURL = window.location.href; 164 | 165 | function registerChangeEpisode() { 166 | setInterval(async () => { 167 | if (currentURL !== window.location.href) { 168 | 169 | currentURL = window.location.href 170 | if (currentURL.includes("/watch/")) { 171 | remove(".erc-watch-premium-upsell", "New Premium Sidebar", true) 172 | const HTML = await fetch(currentURL) 173 | console.log("[CR Beta] Searching for new INITIAL_STATE") 174 | preservedState = JSON.parse(pegaString(HTML, "__INITIAL_STATE__ = ", ";")) 175 | importBetaPlayer(false) 176 | } 177 | } 178 | 179 | }, 50) 180 | } 181 | 182 | document.addEventListener("DOMContentLoaded", onloadfunction, false); 183 | document.onreadystatechange = function () { 184 | if (document.readyState === "interactive") { 185 | console.log("[CR Beta] Searching for INITIAL_STATE") 186 | const HTML = document.documentElement.innerHTML 187 | preservedState = JSON.parse(pegaString(HTML, "__INITIAL_STATE__ = ", ";")) 188 | } 189 | 190 | const crBetaStyle = document.createElement('style'); 191 | crBetaStyle.innerHTML = `.video-player-wrapper { 192 | margin-top: 2rem; 193 | margin-bottom: calc(-3vh - 7vw); 194 | height: 57.25vw !important; 195 | max-height: 82vh !important; 196 | }`; 197 | document.head.appendChild(crBetaStyle); 198 | } 199 | 200 | function fetch(url) { 201 | return new Promise(async (resolve, reject) => { 202 | var xhr = new XMLHttpRequest(); 203 | xhr.open('GET', url, true); 204 | xhr.withCredentials = true; 205 | xhr.onreadystatechange = () => { 206 | if (xhr.readyState == 4) 207 | if (xhr.status == 200) resolve(xhr.responseText) 208 | else reject(xhr.statusText) 209 | } 210 | xhr.send(); 211 | }) 212 | } 213 | 214 | function getExternalId(id) { 215 | return JSON.parse(localStorage.getItem('externalIds'))[id]; 216 | } 217 | 218 | var s = document.createElement('script'); 219 | s.src = browser.runtime.getURL('interceptor.js'); 220 | s.onload = function () { this.remove(); }; 221 | (document.head || document.documentElement).appendChild(s); -------------------------------------------------------------------------------- /Crunchyroll_Premium/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/Crunchyroll_Premium/icon.png -------------------------------------------------------------------------------- /Crunchyroll_Premium/interceptor.js: -------------------------------------------------------------------------------- 1 | window.evidon_dg = {} 2 | 3 | Object.defineProperty(window.evidon_dg, "evidonCriticalDomains", { 4 | get: function () { return ['wvc-x-callback:']; }, 5 | }); 6 | Object.defineProperty(window.evidon_dg, "productNames", { 7 | get: function () { return {}; }, 8 | }); 9 | Object.defineProperty(window.evidon_dg, "loadedProducts", { 10 | get: function () { return []; }, 11 | }); 12 | Object.defineProperty(window.evidon_dg, "productIds", { 13 | get: function () { return []; }, 14 | }); 15 | 16 | console.log("[CR XHR] Configurando interceptor...") 17 | var rawOpen = XMLHttpRequest.prototype.open; 18 | 19 | XMLHttpRequest.prototype.open = function () { 20 | if (!this._hooked) { 21 | this._hooked = true; 22 | setupHook(this); 23 | } 24 | rawOpen.apply(this, arguments); 25 | } 26 | 27 | function setupHook(xhr) { 28 | let toggle = false; 29 | function getter() { 30 | delete xhr.responseText; 31 | var ret = xhr.responseText; 32 | try { 33 | if (toggle = !toggle) handleIntercept(JSON.parse(ret)); 34 | } catch (e) { } 35 | setup(); 36 | return ret; 37 | } 38 | 39 | function setup() { 40 | Object.defineProperty(xhr, 'responseText', { 41 | get: getter, 42 | configurable: true 43 | }); 44 | } 45 | setup(); 46 | } 47 | 48 | const verbose = false; 49 | // Intercepta response das requests (network) 50 | function handleIntercept(jsonResponse) { 51 | if (verbose) console.log("[CR XHR]", jsonResponse); 52 | 53 | // Salva IDs externos dos panels no localStorage 54 | if (jsonResponse.items) jsonResponse.items.forEach(item => { 55 | if (item.id && item.external_id) { 56 | console.log("[CR XHR] Panel found:", item); 57 | storeExternalId(item.id, item.external_id) 58 | } 59 | }) 60 | } 61 | 62 | function storeExternalId(id, external_id) { 63 | let externalIds = localStorage.getItem('externalIds'); 64 | if (externalIds) externalIds = JSON.parse(externalIds) 65 | else externalIds = {}; 66 | externalIds[id] = external_id; 67 | localStorage.setItem('externalIds', JSON.stringify(externalIds)); 68 | } 69 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/Crunchyroll_Premium/logo.png -------------------------------------------------------------------------------- /Crunchyroll_Premium/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Crunchyroll iFrame Player", 3 | "version": "1.3.0a", 4 | "description": "Permite ver todos os vídeos do crunchyroll gratuitamente.", 5 | "author": "itallolegal", 6 | "icons": { 7 | "48": "icon.png" 8 | }, 9 | "browser_action": { 10 | "default_title": "Crunchyroll iFrame Player", 11 | "default_popup": "popup.html", 12 | "default_icon": "icon.png" 13 | }, 14 | "browser_specific_settings": { 15 | "gecko": { 16 | "id": "asdhawuodhcauowchauohwoaduji9hfjdaopi@gmail.com" 17 | } 18 | }, 19 | "permissions": ["webRequest", "webRequestBlocking", "storage", "*://*.crunchyroll.com/*", "*://localhost/*", "*://rgern100.github.io/*", "*://*.vrv.co/*"], 20 | "content_scripts": [{ 21 | "matches": ["*://*.crunchyroll.com/*"], 22 | "css": ["content.css"], 23 | "js": ["content.js"], 24 | "run_at": "document_start" 25 | } 26 | ], 27 | "background": { 28 | "scripts": ["background.js"] 29 | }, 30 | "web_accessible_resources": [ 31 | "interceptor.js" 32 | ], 33 | "manifest_version": 2 34 | } 35 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Crunchyroll iFrame Player 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 | 15 |
16 |

Crunchyroll
iFrame Player

17 |

Projeto open-source, sinta-se livre para consultar o código fonte.

18 |
19 | 20 | 21 |
22 | 23 | 24 |
25 | 26 | 27 |
28 |
29 | 30 | 31 | 32 | Exibir faltando segundos. 33 |

34 | Baixe o WebVideoCaster aqui. 35 | 36 | 37 | 43 | 46 | 49 | 50 |
38 |

Itallolegal 40 |
Criador 41 |

42 |
44 |

Hyper-Tx
Contribuidor

45 |
47 |

Mateus7G
Mantedor

48 |
51 | 52 |
    53 |
  • 55 |
  • 57 |
58 |
59 |
60 |
61 | 62 | 63 | 64 | 65 | 199 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/popup.js: -------------------------------------------------------------------------------- 1 | const globalDefault = { 'webvideocaster': false, 'cooldown': 5, 'aseguir': true, 'forcemp4': false } 2 | const globalVariables = Object.keys(globalDefault) 3 | 4 | chrome.storage.sync.get(globalVariables, function (items) { 5 | globalVariables.forEach(popupElement => { 6 | const value = items[popupElement] === undefined ? globalDefault[popupElement] : items[popupElement] 7 | setValue(popupElement, value) 8 | }) 9 | }) 10 | 11 | globalVariables.forEach(popupElement => { 12 | document.getElementById(popupElement).addEventListener("input", () => { 13 | let syncValue = {} 14 | syncValue[popupElement] = getValue(popupElement) 15 | 16 | chrome.storage.sync.set(syncValue); 17 | }) 18 | }) 19 | 20 | function getValue(id) { 21 | const element = document.getElementById(id) 22 | if (element.type === 'checkbox') return element.checked 23 | else return element.value 24 | } 25 | 26 | function setValue(id, value) { 27 | const element = document.getElementById(id) 28 | if (element.type === 'checkbox') element.checked = value 29 | else element.value = value 30 | } 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Crunchyroll iFrame Player [![Built with love](https://img.shields.io/badge/made%20with-javascript-yellow?style=for-the-badge)](https://github.com/Rgern100/crp-iframe-player-Firefox/releases/latest) [![Downloads](https://img.shields.io/github/downloads/Rgern100/crp-iframe-player-Firefox/total.svg?color=orange&style=for-the-badge)](https://github.com/Rgern100/crp-iframe-player-Firefox/releases/latest) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/Rgern100/crp-iframe-player-Firefox?color=red&style=for-the-badge)](https://github.com/Rgern100/crp-iframe-player-Firefox/releases/latest) 2 | 3 | Essa é uma extensão da comunidade que permite assistir todo conteúdo da Crunchyroll. 4 | Originalmente criada por [itallolegal](https://github.com/itallolegal) (desativado) e [Hyper1025](https://github.com/Hyper1025), atualmente mantida por [Mateus7G](https://github.com/Mateus7G). 5 | Um agradecimento especial a todos os colaboradores. 6 | 7 | Obrigado por utilizar. :) 8 | 9 | ## Download 10 | Você pode encontrar a última versão fazendo download do diretório ou em [releases.](https://github.com/Rgern100/crp-iframe-player-Firefox/releases/latest) 11 | 12 | Deve ter bastante bugs, não sou o melhor com essas coisas, mas em testes está funcionando maior parte. 13 | 14 | Fique a vontade para melhorar o código. 15 | 16 | 17 |


18 | 19 | ## 📝 Aviso Crunchyroll Beta 20 | O novo site do Crunchyroll **quebra completamente** a extensão: [26#issuecomment-1006569041](https://github.com/Mateus7G/crp-iframe-player/issues/26#issuecomment-1006569041) 21 | 22 | As novas versões (v1.1.0+) **ainda** são compatível pois ao acessar o novo site, seu navegador puxa os dados do vídeo do site antigo. 23 | Isso quer dizer que, se a versão antiga do Crunchyroll for **completamente substituída** a extensão irá parar de funcionar permanentemente. 24 | -------------------------------------------------------------------------------- /assets/css/download_dialog.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "SFProDisplay-Regular"; 2 | src: url("../../assets/font/SFProDisplay-Regular.eot"); /* IE9*/ 3 | src: url("../../assets/font/SFProDisplay-Regular.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ 4 | url("../../assets/font/SFProDisplay-Regular.woff2") format("woff2"), /* chrome firefox */ 5 | url("../../assets/font/SFProDisplay-Regular.woff") format("woff"), /* chrome firefox */ 6 | url("../../assets/font/SFProDisplay-Regular.ttf") format("truetype"), /* chrome firefox opera Safari, Android, iOS 4.2+*/ 7 | url("../../assets/font/SFProDisplay-Regular.svg#SFProDisplay-Regular") format("svg"); /* iOS 4.1- */ 8 | } 9 | @font-face {font-family: "SFProDisplay-Semibold"; 10 | src: url("../../assets/font/SFProDisplay-Semibold.eot"); /* IE9*/ 11 | src: url("../../assets/font/SFProDisplay-Semibold.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ 12 | url("../../assets/font/SFProDisplay-Semibold.woff2") format("woff2"), /* chrome firefox */ 13 | url("../../assets/font/SFProDisplay-Semibold.woff") format("woff"), /* chrome firefox */ 14 | url("../../assets/font/SFProDisplay-Semibold.ttf") format("truetype"), /* chrome firefox opera Safari, Android, iOS 4.2+*/ 15 | url("../../assets/font/SFProDisplay-Semibold.svg#SFProDisplay-Semibold") format("svg"); /* iOS 4.1- */ 16 | } 17 | 18 | .modal::-webkit-scrollbar { 19 | width: 8px!important; 20 | } 21 | .modal::-webkit-scrollbar-thumb { 22 | background: #888!important; 23 | } 24 | .modal::-webkit-scrollbar-track { 25 | background: #a7a7a7!important; 26 | } 27 | .modal { 28 | background: #3f3f3f; 29 | text-align: center; 30 | width: 230px; 31 | height: 270px; 32 | z-index: 2147483647; 33 | position: absolute; 34 | top: 0; 35 | left: 0; 36 | bottom: 0; 37 | right: 0; 38 | border-radius: 3px; 39 | margin: auto; 40 | padding: 20px; 41 | -webkit-transform: translate3d(0, -900%, 0); 42 | transform: translate3d(0, -900%, 0); 43 | } 44 | .close-modal { 45 | background: none; 46 | border: none; 47 | position: absolute; 48 | font-size: 20px; 49 | cursor: pointer; 50 | right: 10px; 51 | top: 10px; 52 | color: #eee; 53 | outline: none; 54 | } 55 | .download-item { 56 | display: table; 57 | vertical-align: middle; 58 | height: 55px; 59 | width: 100%; 60 | } 61 | .partdditem { 62 | display: table-cell; 63 | vertical-align: middle; 64 | margin: 6%; 65 | } 66 | .not-copyable { 67 | -webkit-touch-callout: none; 68 | -webkit-user-select: none; 69 | -khtml-user-select: none; 70 | -moz-user-select: none; 71 | -ms-user-select: none; 72 | user-select: none; 73 | } 74 | 75 | .size { 76 | color: #eee; 77 | font-family: SFProDisplay-Regular; 78 | font-size: 15px; 79 | text-align: left; 80 | width: 14%; 81 | opacity: .7; 82 | } 83 | 84 | .size > img { 85 | position: relative; 86 | top: 4px; 87 | min-width: 15px; 88 | width: 15px; 89 | max-width: 15px; 90 | } 91 | 92 | .quality { 93 | color: #eee; 94 | font-family: SFProDisplay-Semibold; 95 | font-size: 15px; 96 | width: 13%; 97 | text-align: left; 98 | padding-left: 20px; 99 | } 100 | 101 | .quality > sup { 102 | font-family: 'Roboto', sans-serif; 103 | color: rgb(244, 117, 33); 104 | font-size: 10px; 105 | } 106 | .down-icon { 107 | transition: filter 0.08s ease; 108 | -moz-transition: filter 0.08s ease; 109 | -ms-transition: filter 0.08s ease; 110 | -o-transition: filter 0.08s ease; 111 | -webkit-transition: filter 0.08s ease; 112 | background-image: url(https://fonts.gstatic.com/s/i/materialicons/get_app/v5/24px.svg?download=true); 113 | -webkit-filter: invert(98%) sepia(1%) saturate(99%) hue-rotate(314deg) brightness(117%) contrast(87%); 114 | filter: invert(98%) sepia(1%) saturate(99%) hue-rotate(314deg) brightness(117%) contrast(87%); 115 | cursor: pointer; 116 | width: 12%; 117 | background-position: center; 118 | background-repeat: no-repeat; 119 | } 120 | .down-icon:hover { 121 | -webkit-filter: invert(49%) sepia(98%) saturate(1501%) hue-rotate(348deg) brightness(99%) contrast(92%);; 122 | filter: invert(49%) sepia(98%) saturate(1501%) hue-rotate(348deg) brightness(99%) contrast(92%); 123 | } 124 | -------------------------------------------------------------------------------- /assets/css/player.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0px; 3 | padding: 0; 4 | width: 100%; 5 | height: 100%; 6 | border: none; 7 | } 8 | 9 | video { 10 | outline: none; 11 | } 12 | 13 | #player_div { 14 | height: 100%!important; 15 | } 16 | 17 | #player_div.beta-layout { 18 | height: 80vh !important; 19 | } 20 | 21 | #player_div .jw-button-color.jw-toggle:not(.jw-icon-cast), 22 | #player_div .jw-button-color:hover:not(.jw-icon-cast), 23 | #player_div .jw-button-color:focus:not(.jw-icon-cast), 24 | #player_div .jw-button-color.jw-toggle.jw-off:hover:not(.jw-icon-cast) { 25 | color: rgb(244, 117, 33)!important; 26 | } 27 | 28 | #player_div .jw-option.jw-active-option, 29 | #player_div .jw-option:not(.jw-active-option):hover, 30 | #player_div .jw-option:not(.jw-active-option):focus, 31 | #player_div .jw-settings-content-item:hover, 32 | #player_div .jw-nextup-tooltip:hover, 33 | #player_div .jw-nextup-tooltip:focus, 34 | #player_div .jw-nextup-close:hover { 35 | color: rgb(244, 117, 33)!important; 36 | } 37 | 38 | .jw-progress { 39 | background-color: rgb(244, 117, 33)!important; 40 | } 41 | 42 | .loading_container { 43 | background-color: #000; 44 | border-radius: 2px; 45 | -webkit-border-radius: 2px; 46 | -moz-border-radius: 2px; 47 | display: flex; 48 | flex-direction: row; 49 | -webkit-flex-direction: row; 50 | -moz-flex-direction: row; 51 | align-items: stretch; 52 | -webkit-align-items: stretch; 53 | padding: 20px; 54 | top: 50%; 55 | left: 50%; 56 | position: absolute; 57 | transform: translate(-50%, -50%); 58 | -webkit-transform: translate(-50%, -50%); 59 | -ms-transform: translate(-50%, -50%); 60 | -moz-transform: translate(-50%, -50%); 61 | -o-transform: translate(-50%, -50%); 62 | } 63 | 64 | .loading_icon { 65 | height: 30px; 66 | width: 30px; 67 | margin-right: 20px; 68 | flex: 0 0 auto; 69 | -webkit-flex: 0 0 auto; 70 | -ms-flex: 0 0 auto; 71 | -moz-flex: 0 0 auto; 72 | align-self: center; 73 | -webkit-align-self: center; 74 | } 75 | 76 | .loading_text_container { 77 | display: flex; 78 | flex: 1 1 auto; 79 | flex-flow: column; 80 | margin: 0; 81 | overflow-y: auto; 82 | padding: 0; 83 | } 84 | 85 | .loading_text { 86 | text-align: start; 87 | color: #FFF; 88 | font: 14px/1.35 Arial, Helvetica, sans-serif; 89 | } 90 | 91 | .corta_linha { 92 | display: block; 93 | } 94 | 95 | .creator-message span { 96 | font-size: 13px; 97 | color: white; 98 | } 99 | 100 | .creator-message { 101 | display: none; 102 | font-family: 'Roboto', sans-serif; 103 | background-color: #323232; 104 | padding: 12px 12px; 105 | align-items: center; 106 | -webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); 107 | box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); 108 | } 109 | 110 | .jw-button-color:hover:not(.jw-icon-cast) .jw-button-image { 111 | filter: brightness(0) saturate(100%) invert(65%) sepia(69%) saturate(4314%) hue-rotate(348deg) brightness(100%) contrast(129%); 112 | } 113 | 114 | [button="webvideocaster-video-button"] .jw-button-image { 115 | filter: saturate(0%) !important; 116 | } 117 | 118 | [button="webvideocaster-video-button"]:hover .jw-button-image { 119 | filter: none !important; 120 | } 121 | -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Regular.eot -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Regular.ttf -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Regular.woff -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Regular.woff2 -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Semibold.eot -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Semibold.ttf -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Semibold.woff -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/font/SFProDisplay-Semibold.woff2 -------------------------------------------------------------------------------- /assets/icon/download_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/icon/fetching-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /assets/icon/forward-30s.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icon/loading-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icon/replay-10s.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icon/update_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | crunchyroll 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icon/webvideocaster_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rgern100/crp-iframe-player-Firefox/9e00fbe24f97dd16edcd2f6985ebcf451174714d/assets/icon/webvideocaster_icon.png -------------------------------------------------------------------------------- /assets/js/jwplayer.js: -------------------------------------------------------------------------------- 1 | window.jwplayer=function(t){function e(e){for(var n,i,o=e[0],u=e[1],a=0,s=[];a2;if(null==t&&(t=[]),p&&t.reduce===p)return r&&(e=$(e,r)),i?t.reduce(e,n):t.reduce(e);if(k(t,function(t,o,u){i?n=e.call(r,n,t,o,u):(n=t,i=!0)}),!i)throw new TypeError("Reduce of empty array with no initial value");return n},T=S,E=S,A=function(t,e,n){var r;return N(t,function(t,i,o){if(e.call(n,t,i,o))return r=t,!0}),r},_=A,F=function(t,e,n){var r=[];return null==t?r:v&&t.filter===v?t.filter(e,n):(k(t,function(t,i,o){e.call(n,t,i,o)&&r.push(t)}),r)},I=F,M=function(t,e,n){e||(e=Ct);var r=!0;return null==t?r:g&&t.every===g?t.every(e,n):(k(t,function(t,o,u){if(!(r=r&&e.call(n,t,o,u)))return i}),!!r)},L=M,N=function(t,e,n){e||(e=Ct);var r=!1;return null==t?r:m&&t.some===m?t.some(e,n):(k(t,function(t,o,u){if(r||(r=e.call(n,t,o,u)))return i}),!!r)},R=N,D=function(t){return null==t?0:t.length===+t.length?t.length:ot(t).length},B=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},z=function(t){return null==t?Ct:gt(t)?t:Pt(t)},q=function(t){return function(e,n,r){var i={};return n=z(n),k(e,function(o,u){var a=n.call(r,o,u,e);t(i,a,o)}),i}},V=q(function(t,e,n){kt(t,e)?t[e].push(n):t[e]=[n]}),H=q(function(t,e,n){t[e]=n}),Q=function(t,e,n,r){for(var i=(n=z(n)).call(r,e),o=0,u=t.length;o>>1;n.call(r,t[a])=0)},U=W,X=function(t,e){return F(t,St(e))},Y=function(t,e){return A(t,St(e))},J=function(t){var e=s.apply(o,c.call(arguments,1));return F(t,function(t){return!W(e,t)})},K=function(t,e,n){if(null==t)return-1;var r=0,i=t.length;if(n){if("number"!=typeof n)return t[r=Q(t,e)]===e?r:-1;r=n<0?Math.max(0,i+n):n}if(b&&t.indexOf===b)return t.indexOf(e,n);for(;ri&&(r=t,i=a)}),r},memoize:et,now:Tt,omit:function(t){var e={},n=s.apply(o,c.call(arguments,1));for(var r in t)W(n,r)||(e[r]=t[r]);return e},once:tt,partial:G,pick:lt,pluck:function(t,e){return x(t,Pt(e))},property:Pt,propertyOf:function(t){return null==t?function(){}:function(e){return t[e]}},reduce:S,reject:function(t,e,n){return F(t,function(t,r,i){return!e.call(n,t,r,i)},n)},result:function(t,e){if(null!=t){var n=t[e];return gt(n)?n.call(t):n}},select:I,size:D,some:R,sortedIndex:Q,throttle:it,where:X,without:function(t){return J(t,c.call(arguments,1))}}},function(t,e,n){"use strict";n.d(e,"y",function(){return i}),n.d(e,"x",function(){return o}),n.d(e,"w",function(){return u}),n.d(e,"t",function(){return a}),n.d(e,"u",function(){return c}),n.d(e,"a",function(){return s}),n.d(e,"c",function(){return l}),n.d(e,"v",function(){return f}),n.d(e,"d",function(){return d}),n.d(e,"h",function(){return p}),n.d(e,"e",function(){return h}),n.d(e,"k",function(){return v}),n.d(e,"i",function(){return g}),n.d(e,"j",function(){return m}),n.d(e,"b",function(){return b}),n.d(e,"f",function(){return y}),n.d(e,"g",function(){return j}),n.d(e,"o",function(){return w}),n.d(e,"l",function(){return O}),n.d(e,"m",function(){return k}),n.d(e,"n",function(){return C}),n.d(e,"p",function(){return x}),n.d(e,"q",function(){return P}),n.d(e,"r",function(){return S}),n.d(e,"s",function(){return T}),n.d(e,"A",function(){return E}),n.d(e,"z",function(){return A}),n.d(e,"B",function(){return _});var r=n(0),i=1e5,o=100001,u=100002,a=101e3,c=102e3,s=200001,l=202e3,f=104e3,d=203e3,p=203640,h=204e3,v=210001,g=21e4,m=214e3,b=306e3,y=308e3,j=308640,w="cantPlayVideo",O="badConnection",k="cantLoadPlayer",C="cantPlayInBrowser",x="liveStreamDown",P="protectedContent",S="technicalError",T=function(){function t(t,e,n){this.code=Object(r.z)(e)?e:0,this.sourceError=n||null,t&&(this.key=t)}return t.logMessage=function(t){var e=t%1e3,n=Math.floor((t-e)/1e3),r=t.toString();return e>=400&&e<600&&(r=n+"400-"+n+"599"),"JW Player "+(t>299999&&t<4e5?"Warning":"Error")+" "+t+". For more information see https://developer.jwplayer.com/jw-player/docs/developer-guide/api/errors-reference#"+r},t}();function E(t,e,n){return n instanceof T&&n.code?n:new T(t,e,n)}function A(t,e){var n=E(S,e,t);return n.code=(t&&t instanceof T&&t.code||0)+e,n}function _(t){var e=t.name,n=t.message;switch(e){case"AbortError":return/pause/.test(n)?303213:/load/.test(n)?303212:303210;case"NotAllowedError":return 303220;case"NotSupportedError":return 303230;default:return 303200}}},function(t,e,n){"use strict";n.d(e,"i",function(){return o}),n.d(e,"e",function(){return u}),n.d(e,"j",function(){return a}),n.d(e,"a",function(){return c}),n.d(e,"b",function(){return s}),n.d(e,"g",function(){return l}),n.d(e,"d",function(){return f}),n.d(e,"f",function(){return d}),n.d(e,"h",function(){return p}),n.d(e,"c",function(){return h});var r=n(0),i=window.parseFloat;function o(t){return t.replace(/^\s+|\s+$/g,"")}function u(t,e,n){for(t=""+t,n=n||"0";t.length-1?t.substr(t.lastIndexOf(".")+1,t.length).toLowerCase():""}function s(t){var e=(t/60|0)%60,n=t%60;return u((t/3600|0).toString(),2)+":"+u(e.toString(),2)+":"+u(n.toFixed(3),6)}function l(t,e){if(!t)return 0;if(Object(r.z)(t))return t;var n=t.replace(",","."),o=n.slice(-1),u=n.split(":"),a=u.length,c=0;if("s"===o)c=i(n);else if("m"===o)c=60*i(n);else if("h"===o)c=3600*i(n);else if(a>1){var s=a-1;4===a&&(e&&(c=i(u[s])/e),s-=1),c+=i(u[s]),c+=60*i(u[s-1]),a>=3&&(c+=3600*i(u[s-2]))}else c=i(n);return Object(r.z)(c)?c:0}function f(t,e,n){if(Object(r.x)(t)&&"%"===t.slice(-1)){var o=i(t);return e&&Object(r.z)(e)&&Object(r.z)(o)?e*o/100:null}return l(t,n)}function d(t,e){return t.map(function(t){return e+t})}function p(t,e){return t.map(function(t){return t+e})}function h(t){return!!t&&Object(r.x)(t)&&"%"===t.slice(-1)}},function(t,e,n){"use strict";n.d(e,"kb",function(){return r}),n.d(e,"nb",function(){return i}),n.d(e,"lb",function(){return o}),n.d(e,"pb",function(){return u}),n.d(e,"qb",function(){return a}),n.d(e,"mb",function(){return c}),n.d(e,"ob",function(){return s}),n.d(e,"rb",function(){return l}),n.d(e,"s",function(){return f}),n.d(e,"u",function(){return d}),n.d(e,"t",function(){return p}),n.d(e,"n",function(){return h}),n.d(e,"q",function(){return v}),n.d(e,"sb",function(){return g}),n.d(e,"r",function(){return m}),n.d(e,"Z",function(){return b}),n.d(e,"W",function(){return y}),n.d(e,"v",function(){return j}),n.d(e,"Y",function(){return w}),n.d(e,"w",function(){return O}),n.d(e,"ub",function(){return k}),n.d(e,"a",function(){return C}),n.d(e,"b",function(){return x}),n.d(e,"c",function(){return P}),n.d(e,"d",function(){return S}),n.d(e,"e",function(){return T}),n.d(e,"h",function(){return E}),n.d(e,"F",function(){return A}),n.d(e,"hb",function(){return _}),n.d(e,"Q",function(){return F}),n.d(e,"C",function(){return I}),n.d(e,"B",function(){return M}),n.d(e,"E",function(){return L}),n.d(e,"p",function(){return N}),n.d(e,"cb",function(){return R}),n.d(e,"m",function(){return D}),n.d(e,"G",function(){return B}),n.d(e,"H",function(){return z}),n.d(e,"N",function(){return q}),n.d(e,"O",function(){return V}),n.d(e,"R",function(){return H}),n.d(e,"jb",function(){return Q}),n.d(e,"bb",function(){return W}),n.d(e,"D",function(){return U}),n.d(e,"S",function(){return X}),n.d(e,"P",function(){return Y}),n.d(e,"T",function(){return J}),n.d(e,"V",function(){return K}),n.d(e,"M",function(){return Z}),n.d(e,"L",function(){return $}),n.d(e,"K",function(){return G}),n.d(e,"I",function(){return tt}),n.d(e,"J",function(){return et}),n.d(e,"U",function(){return nt}),n.d(e,"o",function(){return rt}),n.d(e,"y",function(){return it}),n.d(e,"ib",function(){return ot}),n.d(e,"db",function(){return ut}),n.d(e,"eb",function(){return at}),n.d(e,"f",function(){return ct}),n.d(e,"g",function(){return st}),n.d(e,"ab",function(){return lt}),n.d(e,"A",function(){return ft}),n.d(e,"l",function(){return dt}),n.d(e,"k",function(){return pt}),n.d(e,"fb",function(){return ht}),n.d(e,"gb",function(){return vt}),n.d(e,"tb",function(){return gt}),n.d(e,"z",function(){return mt}),n.d(e,"j",function(){return bt}),n.d(e,"X",function(){return yt}),n.d(e,"i",function(){return jt}),n.d(e,"x",function(){return wt});var r="buffering",i="idle",o="complete",u="paused",a="playing",c="error",s="loading",l="stalled",f="drag",d="dragStart",p="dragEnd",h="click",v="doubleClick",g="tap",m="doubleTap",b="over",y="move",j="enter",w="out",O=c,k="warning",C="adClick",x="adPause",P="adPlay",S="adSkipped",T="adTime",E="autostartNotAllowed",A=o,_="ready",F="seek",I="beforePlay",M="beforeComplete",L="bufferFull",N="displayClick",R="playlistComplete",D="cast",B="mediaError",z="firstFrame",q="playAttempt",V="playAttemptFailed",H="seeked",Q="setupError",W="state",U="bufferChange",X="time",Y="ratechange",J="mediaType",K="volume",Z="mute",$="metadataCueParsed",G="meta",tt="levels",et="levelsChanged",nt="visualQuality",rt="controls",it="fullscreen",ot="resize",ut="playlistItem",at="playlist",ct="audioTracks",st="audioTrackChanged",lt="playbackRateChanged",ft="logoClick",dt="captionsList",pt="captionsChanged",ht="providerChanged",vt="providerFirstFrame",gt="userAction",mt="instreamClick",bt="breakpoint",yt="fullscreenchange",jt="bandwidthEstimate",wt="float"},function(t,e,n){"use strict";n.d(e,"b",function(){return i}),n.d(e,"d",function(){return o}),n.d(e,"a",function(){return u}),n.d(e,"c",function(){return a});var r=n(2);function i(t){var e="";return t&&(t.localName?e=t.localName:t.baseName&&(e=t.baseName)),e}function o(t){var e="";return t&&(t.textContent?e=Object(r.i)(t.textContent):t.text&&(e=Object(r.i)(t.text))),e}function u(t,e){return t.childNodes[e]}function a(t){return t.childNodes?t.childNodes.length:0}},function(t,e,n){"use strict";n.r(e);var r=n(7);function i(t,e){var n;return t&&t.length>e&&(n=t[e]),n}var o=n(0);n.d(e,"Browser",function(){return c}),n.d(e,"OS",function(){return s}),n.d(e,"Features",function(){return l});var u=navigator.userAgent,a=function(){},c={},s={},l={};Object.defineProperties(c,{androidNative:{get:Object(o.C)(r.c),enumerable:!0},chrome:{get:Object(o.C)(r.d),enumerable:!0},edge:{get:Object(o.C)(r.e),enumerable:!0},facebook:{get:Object(o.C)(r.g),enumerable:!0},firefox:{get:Object(o.C)(r.f),enumerable:!0},ie:{get:Object(o.C)(r.i),enumerable:!0},msie:{get:Object(o.C)(r.n),enumerable:!0},safari:{get:Object(o.C)(r.q),enumerable:!0},version:{get:Object(o.C)(function(t,e){var n,r,i,o;return t.chrome?n=-1!==e.indexOf("Chrome")?e.substring(e.indexOf("Chrome")+7):e.substring(e.indexOf("CriOS")+6):t.safari?n=e.substring(e.indexOf("Version")+8):t.firefox?n=e.substring(e.indexOf("Firefox")+8):t.edge?n=e.substring(e.indexOf("Edge")+5):t.ie&&(-1!==e.indexOf("rv:")?n=e.substring(e.indexOf("rv:")+3):-1!==e.indexOf("MSIE")&&(n=e.substring(e.indexOf("MSIE")+5))),n&&(-1!==(o=n.indexOf(";"))&&(n=n.substring(0,o)),-1!==(o=n.indexOf(" "))&&(n=n.substring(0,o)),-1!==(o=n.indexOf(")"))&&(n=n.substring(0,o)),r=parseInt(n,10),i=parseInt(n.split(".")[1],10)),{version:n,major:r,minor:i}}.bind(void 0,c,u)),enumerable:!0}}),Object.defineProperties(s,{android:{get:Object(o.C)(r.b),enumerable:!0},iOS:{get:Object(o.C)(r.j),enumerable:!0},mobile:{get:Object(o.C)(r.o),enumerable:!0},mac:{get:Object(o.C)(r.p),enumerable:!0},iPad:{get:Object(o.C)(r.k),enumerable:!0},iPhone:{get:Object(o.C)(r.l),enumerable:!0},windows:{get:Object(o.C)(function(){return u.indexOf("Windows")>-1}),enumerable:!0},tizen:{get:Object(o.C)(r.r),enumerable:!0},version:{get:Object(o.C)(function(t,e){var n,r,o;if(t.windows)switch(n=i(/Windows(?: NT|)? ([._\d]+)/.exec(e),1)){case"6.1":n="7.0";break;case"6.2":n="8.0";break;case"6.3":n="8.1"}else t.android?n=i(/Android ([._\d]+)/.exec(e),1):t.iOS?n=i(/OS ([._\d]+)/.exec(e),1):t.mac?n=i(/Mac OS X (10[._\d]+)/.exec(e),1):t.tizen&&(n=i(/Tizen ([._\d]+)/.exec(e),1));if(n){r=parseInt(n,10);var u=n.split(/[._]/);u&&(o=parseInt(u[1],10))}return{version:n,major:r,minor:o}}.bind(void 0,s,u)),enumerable:!0}}),Object.defineProperties(l,{flash:{get:Object(o.C)(r.h),enumerable:!0},flashVersion:{get:Object(o.C)(r.a),enumerable:!0},iframe:{get:Object(o.C)(r.m),enumerable:!0},passiveEvents:{get:Object(o.C)(function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){return t=!0}});window.addEventListener("testPassive",a,e),window.removeEventListener("testPassive",a,e)}catch(t){}return t}),enumerable:!0},backgroundLoading:{get:Object(o.C)(function(){return!(s.iOS||c.safari||s.tizen)}),enumerable:!0}})},function(t,e,n){"use strict";n.d(e,"i",function(){return s}),n.d(e,"e",function(){return l}),n.d(e,"q",function(){return f}),n.d(e,"j",function(){return d}),n.d(e,"s",function(){return p}),n.d(e,"r",function(){return h}),n.d(e,"u",function(){return v}),n.d(e,"d",function(){return b}),n.d(e,"a",function(){return y}),n.d(e,"o",function(){return j}),n.d(e,"p",function(){return w}),n.d(e,"v",function(){return O}),n.d(e,"t",function(){return k}),n.d(e,"h",function(){return C}),n.d(e,"b",function(){return x}),n.d(e,"g",function(){return P}),n.d(e,"c",function(){return S}),n.d(e,"m",function(){return T}),n.d(e,"k",function(){return E}),n.d(e,"n",function(){return A}),n.d(e,"l",function(){return _}),n.d(e,"f",function(){return F});var r,i=n(0),o=n(2),u=n(5),a=window.DOMParser,c=!0;function s(t,e){return t.classList.contains(e)}function l(t){return d(t).firstChild}function f(t,e){C(t),function(t,e){if(e){for(var n=document.createDocumentFragment(),r=d(e).childNodes,i=0;i-1?e.documentElement.innerHTML=t:e.body.innerHTML=t,e.body}(t);p(e);for(var n=e.querySelectorAll("*"),i=n.length;i--;)h(n[i]);return e}function p(t){for(var e=t.querySelectorAll("script,object,iframe"),n=e.length;n--;){var r=e[n];r.parentNode.removeChild(r)}return t}function h(t){for(var e=t.attributes,n=e.length;n--;){var r=e[n].name;if(/^on/.test(r)&&t.removeAttribute(r),/href/.test(r)){var i=e[n].value;/javascript:|javascript:/.test(i)&&t.removeAttribute(r)}}return t}function v(t){return t+(t.toString().indexOf("%")>0?"":"px")}function g(t){return Object(i.x)(t.className)?t.className.split(" "):[]}function m(t,e){e=Object(o.i)(e),t.className!==e&&(t.className=e)}function b(t){return t.classList?t.classList:g(t)}function y(t,e){var n=g(t);(Array.isArray(e)?e:e.split(" ")).forEach(function(t){Object(i.e)(n,t)||n.push(t)}),m(t,n.join(" "))}function j(t,e){var n=g(t),r=Array.isArray(e)?e:e.split(" ");m(t,Object(i.h)(n,r).join(" "))}function w(t,e,n){var r=t.className||"";e.test(r)?r=r.replace(e,n):n&&(r+=" "+n),m(t,r)}function O(t,e,n){var r=s(t,e);(n=Object(i.r)(n)?n:!r)!==r&&(n?y(t,e):j(t,e))}function k(t,e,n){t.setAttribute(e,n)}function C(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function x(t){var e=document.createElement("link");e.rel="stylesheet",e.href=t,document.getElementsByTagName("head")[0].appendChild(e)}function P(t){t&&C(t)}function S(t){var e={left:0,right:0,width:0,height:0,top:0,bottom:0};if(!t||!document.body.contains(t))return e;var n=t.getBoundingClientRect(),r=window.pageYOffset,i=window.pageXOffset;return n.width||n.height||n.left||n.top?(e.left=n.left+i,e.right=n.right+i,e.top=n.top+r,e.bottom=n.bottom+r,e.width=n.right-n.left,e.height=n.bottom-n.top,e):e}function T(t,e){t.insertBefore(e,t.firstChild)}function E(t){return t.nextElementSibling}function A(t){return t.previousElementSibling}function _(t,e,n){void 0===n&&(n={});var r=document.createElement("a");r.href=t,r.target=e,r=Object(i.j)(r,n),u.Browser.firefox?r.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})):r.click()}function F(){var t=window.screen.orientation;return!!t&&("landscape-primary"===t.type||"landscape-secondary"===t.type)||90===window.orientation||-90===window.orientation}},function(t,e,n){"use strict";n.d(e,"h",function(){return u}),n.d(e,"f",function(){return c}),n.d(e,"l",function(){return l}),n.d(e,"k",function(){return f}),n.d(e,"p",function(){return d}),n.d(e,"g",function(){return p}),n.d(e,"e",function(){return h}),n.d(e,"n",function(){return v}),n.d(e,"r",function(){return g}),n.d(e,"d",function(){return m}),n.d(e,"i",function(){return b}),n.d(e,"q",function(){return y}),n.d(e,"j",function(){return j}),n.d(e,"c",function(){return w}),n.d(e,"b",function(){return O}),n.d(e,"o",function(){return k}),n.d(e,"m",function(){return C}),n.d(e,"a",function(){return x});var r=navigator.userAgent;function i(t){return null!==r.match(t)}function o(t){return function(){return i(t)}}function u(){var t=x();return!!(t&&t>=18)}var a=function(){return"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1},c=o(/gecko\//i),s=o(/trident\/.+rv:\s*11/i),l=o(/iP(hone|od)/i),f=function(){return i(/iPad/i)||a()},d=function(){return i(/Macintosh/i)&&!a()},p=o(/FBAV/i);function h(){return i(/\sEdge\/\d+/i)}function v(){return i(/msie/i)}function g(){return i(/SMART-TV/)}function m(){return i(/\s(?:(?:Headless)?Chrome|CriOS)\//i)&&!h()&&!i(/UCBrowser/i)&&!g()}function b(){return h()||s()||v()}function y(){return i(/safari/i)&&!i(/(?:Chrome|CriOS|chromium|android|phantom)/i)||g()}function j(){return i(/iP(hone|ad|od)/i)||a()}function w(){return!(i(/chrome\/[123456789]/i)&&!i(/chrome\/18/i)&&!c())&&O()}function O(){return i(/Android/i)&&!i(/Windows Phone/i)}function k(){return j()||O()||i(/Windows Phone/i)}function C(){try{return window.self!==window.top}catch(t){return!0}}function x(){if(O())return 0;var t,e=navigator.plugins;if(e&&(t=e.namedItem("Shockwave Flash"))&&t.description)return parseFloat(t.description.replace(/\D+(\d+\.?\d*).*/,"$1"));if(void 0!==window.ActiveXObject){try{if(t=new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash"))return parseFloat(t.GetVariable("$version").split(" ")[1].replace(/\s*,\s*/,"."))}catch(t){return 0}return t}return 0}},function(t,e,n){"use strict";n.r(e),n.d(e,"exists",function(){return i}),n.d(e,"isHTTPS",function(){return o}),n.d(e,"isFileProtocol",function(){return u}),n.d(e,"isRtmp",function(){return a}),n.d(e,"isYouTube",function(){return c}),n.d(e,"typeOf",function(){return s}),n.d(e,"isDeepKeyCompliant",function(){return l});var r=window.location.protocol;function i(t){switch(typeof t){case"string":return t.length>0;case"object":return null!==t;case"undefined":return!1;default:return!0}}function o(){return"https:"===r}function u(){return"file:"===r}function a(t,e){return 0===t.indexOf("rtmp:")||"rtmp"===e}function c(t,e){return"youtube"===e||/^(http|\/\/).*(youtube\.com|youtu\.be)\/.+/.test(t)}function s(t){if(null===t)return"null";var e=typeof t;return"object"===e&&Array.isArray(t)?"array":e}function l(t,e,n){var r=Object.keys(t);return Object.keys(e).length>=r.length&&r.every(function(r){var i=t[r],o=e[r];return i&&"object"==typeof i?!(!o||"object"!=typeof o)&&l(i,o,n):n(r,t)})}},function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n.d(e,"c",function(){return i}),n.d(e,"d",function(){return o}),n.d(e,"b",function(){return u}),n.d(e,"e",function(){return a}),n.d(e,"f",function(){return c});var r=function(){function t(){}var e=t.prototype;return e.on=function(t,e,n){if(!l(this,"on",t,[e,n])||!e)return this;var r=this._events||(this._events={});return(r[t]||(r[t]=[])).push({callback:e,context:n}),this},e.once=function(t,e,n){if(!l(this,"once",t,[e,n])||!e)return this;var r=0,i=this,o=function n(){r++||(i.off(t,n),e.apply(this,arguments))};return o._callback=e,this.on(t,o,n)},e.off=function(t,e,n){if(!this._events||!l(this,"off",t,[e,n]))return this;if(!t&&!e&&!n)return delete this._events,this;for(var r=t?[t]:Object.keys(this._events),i=0,o=r.length;i1?e-1:0),r=1;r1?e-1:0),r=1;r-1?t:parseInt(t.replace("px",""),10)}function l(t,e){if(Object(i.u)(t)&&(t=parseInt(t.toString())),Object(i.u)(t)||!isFinite(t)||t<=0&&!e)return"00:00";var n=t<0?"-":"";t=Math.abs(t);var r=Math.floor(t/3600),o=Math.floor((t-3600*r)/60),u=Math.floor(t%60);return n+(r?r+":":"")+(o<10?"0":"")+o+":"+(u<10?"0":"")+u}},function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n(33),i=n(17),o=n(60),u=n(0);function a(t){var e=t.getName().name;if(!r.a[e]){if(!Object(u.l)(i.a,Object(u.B)({name:e}))){if(!Object(u.t)(t.supports))throw new Error("Tried to register a provider with an invalid object");i.a.unshift({name:e,supports:t.supports})}Object(u.g)(t.prototype,o.a),r.a[e]=t}}},function(t,e,n){"use strict";n.d(e,"j",function(){return p}),n.d(e,"d",function(){return h}),n.d(e,"b",function(){return v}),n.d(e,"e",function(){return m}),n.d(e,"g",function(){return y}),n.d(e,"h",function(){return j}),n.d(e,"c",function(){return w}),n.d(e,"f",function(){return k}),n.d(e,"i",function(){return C}),n.d(e,"a",function(){return x});var r=n(0),i=n(7),o=n(29),u=n(8),a=n(42),c={},s={zh:"Chinese",nl:"Dutch",en:"English",fr:"French",de:"German",it:"Italian",ja:"Japanese",pt:"Portuguese",ru:"Russian",es:"Spanish",el:"Greek",fi:"Finnish",id:"Indonesian",ko:"Korean",th:"Thai",vi:"Vietnamese"},l=Object(r.q)(s);function f(t){var e=d(t),n=e.indexOf("_");return-1===n?e:e.substring(0,n)}function d(t){return t.toLowerCase().replace("-","_")}function p(t){return t?Object.keys(t).reduce(function(e,n){return e[d(n)]=t[n],e},{}):{}}function h(t){if(t)return 3===t.length?t:s[f(t)]||t}function v(t){return l[t]||""}function g(t){var e=t.querySelector("html");return e?e.getAttribute("lang"):null}function m(){var t=g(document);if(!t&&Object(i.m)())try{t=g(window.top.document)}catch(t){}return t||navigator.language||"en"}var b=["ar","da","de","el","es","fi","fr","he","id","it","ja","ko","nl","no","oc","pt","ro","ru","sl","sv","th","tr","vi","zh"];function y(t){return 8207===t.charCodeAt(0)||/^[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/.test(t)}function j(t){return b.indexOf(f(t))>=0}function w(t,e,n){return Object(r.j)({},function(t){var e=t.advertising,n=t.related,i=t.sharing,o=t.abouttext,u=Object(r.j)({},t.localization);e&&(u.advertising=u.advertising||{},O(u.advertising,e,"admessage"),O(u.advertising,e,"cuetext"),O(u.advertising,e,"loadingAd"),O(u.advertising,e,"podmessage"),O(u.advertising,e,"skipmessage"),O(u.advertising,e,"skiptext")),"string"==typeof u.related?u.related={heading:u.related}:u.related=u.related||{},n&&O(u.related,n,"autoplaymessage"),i&&(u.sharing=u.sharing||{},O(u.sharing,i,"heading"),O(u.sharing,i,"copied")),o&&O(u,t,"abouttext");var a=u.close||u.nextUpClose;return a&&(u.close=a),u}(t),e[f(n)],e[d(n)])}function O(t,e,n){var r=t[n]||e[n];r&&(t[n]=r)}function k(t){return Object(u.isDeepKeyCompliant)(a.a,t,function(t,e){return"string"==typeof e[t]})}function C(t,e){var n=c[e];if(!n){var r=t+"translations/"+f(e)+".json";c[e]=n=new Promise(function(t,n){Object(o.b)({url:r,oncomplete:t,onerror:function(t,r,i,o){c[e]=null,n(o)},responseType:"json"})})}return n}function x(t,e){var n=Object(r.j)({},t,e);return P(n,"errors",t,e),P(n,"related",t,e),P(n,"sharing",t,e),P(n,"advertising",t,e),P(n,"shortcuts",t,e),P(n,"captionsStyles",t,e),n}function P(t,e,n,i){t[e]=Object(r.j)({},n[e],i[e])}},function(t,e,n){"use strict";e.a=[]},function(t,e,n){"use strict";e.a={debug:!1}},function(t,e,n){"use strict";var r=n(28),i=n(5),o=n(23),u=n(0),a=n(8),c=n(36),s=Object(u.l)(r.a,Object(u.B)({name:"html5"})),l=s.supports;function f(t){var e=window.MediaSource;return Object(u.a)(t,function(t){return!!e&&!!e.isTypeSupported&&e.isTypeSupported(t)})}function d(t){if(t.drm)return!1;var e=t.file.indexOf(".m3u8")>-1,n="hls"===t.type||"m3u8"===t.type;if(!e&&!n)return!1;var r=i.Browser.chrome||i.Browser.firefox||i.Browser.edge||i.Browser.ie&&11===i.Browser.version.major,o=i.OS.android&&!1===t.hlsjsdefault,u=i.Browser.safari&&!!t.safarihlsjs;return f(t.mediaTypes||['video/mp4;codecs="avc1.4d400d,mp4a.40.2"'])&&(r||u)&&!o}s.supports=function(t,e){var n=l.apply(this,arguments);if(n&&t.drm&&"hls"===t.type){var r=Object(o.a)(e)("drm");if(r&&t.drm.fairplay){var i=window.WebKitMediaKeys;return i&&i.isTypeSupported&&i.isTypeSupported("com.apple.fps.1_0","video/mp4")}return r}return n},r.a.push({name:"shaka",supports:function(t){return!(t.drm&&!Object(c.a)(t.drm))&&!(!window.HTMLVideoElement||!window.MediaSource)&&f(t.mediaTypes)&&("dash"===t.type||"mpd"===t.type||(t.file||"").indexOf("mpd-time-csf")>-1)}}),r.a.unshift({name:"hlsjs",supports:function(t){return d(t)}}),r.a.unshift({name:"hlsjsProgressive",supports:function(t){return t._hlsjsProgressive&&d(t)}}),r.a.push({name:"flash",supports:function(t){if(!i.Features.flash||t.drm)return!1;var e=t.type;return"hls"===e||"m3u8"===e||!Object(a.isRtmp)(t.file,e)&&["flv","f4v","mov","m4a","m4v","mp4","aac","f4a","mp3","mpeg","smil"].indexOf(e)>-1}}),e.a=r.a},function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=Date.now||function(){return(new Date).getTime()}},function(t,e,n){"use strict";n.r(e),n.d(e,"getScriptPath",function(){return o}),n.d(e,"repo",function(){return u}),n.d(e,"versionCheck",function(){return a}),n.d(e,"loadFrom",function(){return c});var r=n(31),i=n(8),o=function(t){for(var e=document.getElementsByTagName("script"),n=0;n=0)return r.substr(0,i+1)}}return""},u=function(){return(Object(i.isFileProtocol)()?"https:":"")+"//ssl.p.jwpcdn.com/player/v/8.15.1/"},a=function(t){var e=("0"+t).split(/\W/),n=r.a.split(/\W/),i=parseFloat(e[0]),o=parseFloat(n[0]);return!(i>o||i===o&&parseFloat("0"+e[1])>parseFloat(n[1]))},c=function(){return u()}},function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"c",function(){return o}),n.d(e,"b",function(){return u});var r=n(39),i=r.a,o=r.c;function u(t){var e=Object(r.b)(t);if(!t)return e;switch(Object(r.c)(t)){case"jwpsrv":e=305001;break;case"googima":e=305002;break;case"vast":e=305003;break;case"freewheel":e=305004;break;case"dai":e=305005;break;case"gapro":e=305006;break;case"bidding":e=305007}return e}},,,function(t,e,n){"use strict";function r(t){var e={setup:["free","starter","business","premium","enterprise","developer","ads","unlimited","trial","platinum"],drm:["enterprise","developer","ads","unlimited","trial"],ads:["ads","unlimited","trial","platinum","enterprise","developer","business"],jwpsrv:["free","starter","business","premium","enterprise","developer","ads","trial","platinum","invalid"],discovery:["ads","enterprise","developer","trial","unlimited"]};return function(n){return e[n]&&e[n].indexOf(t)>-1}}n.d(e,"a",function(){return r})},function(t,e,n){"use strict";var r=n(0),i={none:!0,metadata:!0,auto:!0};function o(t,e){return i[t]?t:i[e]?e:"metadata"}var u=n(30),a=n(34),c=n(44),s=n(1);function l(t,e,n){var i=Object(r.j)({},n);return delete i.playlist,t.map(function(t){return d(e,t,i)}).filter(function(t){return!!t})}function f(t){if(!Array.isArray(t)||0===t.length)throw new s.s(s.o,630)}function d(t,e,n){var i=t.getProviders(),u=t.get("preload"),a=Object(r.j)({},e);if(a.preload=o(e.preload,u),a.allSources=v(e,t),a.sources=g(a.allSources,i),a.sources.length)return a.file=a.sources[0].file,a.feedData=n,function(t){var e=t.sources[0].liveSyncDuration;return t.dvrSeekLimit=t.liveSyncDuration=e,t}(a)}function p(t,e){var n=(parseInt(t,10)||0)%e;return n<0&&(n+=e),n}n.d(e,"b",function(){return l}),n.d(e,"e",function(){return f}),n.d(e,"d",function(){return d}),n.d(e,"f",function(){return p}),n.d(e,"c",function(){return h});var h=function(t,e){return g(v(t,e),e.getProviders())};function v(t,e){var n=e.attributes,r=t.sources,i=t.allSources,u=t.preload,c=t.drm,s=m(t.withCredentials,n.withCredentials);return(i||r).map(function(e){if(e!==Object(e))return null;b(e,n,"androidhls"),b(e,n,"hlsjsdefault"),b(e,n,"safarihlsjs"),function(t,e,n){t.liveSyncDuration||b(t,e.liveSyncDuration?e:n,"liveSyncDuration")}(e,t,n),b(e,n,"_hlsjsProgressive"),e.preload=o(e.preload,u);var r=e.drm||c||n.drm;r&&(e.drm=r);var i=m(e.withCredentials,s);return void 0!==i&&(e.withCredentials=i),Object(a.a)(e)}).filter(function(t){return!!t})}function g(t,e){e&&e.choose||(e=new c.a);var n=function(t,e){for(var n=0;n2){n=a[1];var c=parseInt(a[2]);c>0&&(u=new Date).setTime(c)}}catch(t){e="invalid"}this.edition=function(){return e},this.token=function(){return n},this.expiration=function(){return u},this.duration=function(){return u?u.getTime()-(new Date).getTime():0},this.error=function(){}}},function(t,e,n){"use strict";n.d(e,"b",function(){return c});var r=n(68),i=n(8),o=n(41),u={aac:"audio/mp4",mp4:"video/mp4",f4v:"video/mp4",m4v:"video/mp4",mov:"video/mp4",mp3:"audio/mpeg",mpeg:"audio/mpeg",ogv:"video/ogg",ogg:"video/ogg",oga:"video/ogg",vorbis:"video/ogg",webm:"video/webm",f4a:"video/aac",m3u8:"application/vnd.apple.mpegurl",m3u:"application/vnd.apple.mpegurl",hls:"application/vnd.apple.mpegurl"},a=[{name:"html5",supports:c}];function c(t){if(!1===Object(r.a)(t))return!1;if(!o.a.canPlayType)return!1;var e=t.file,n=t.type;if(Object(i.isRtmp)(e,n))return!1;var a=t.mimeType||u[n];if(!a)return!1;var c=t.mediaTypes;return c&&c.length&&(a=[a].concat(c.slice()).join("; ")),!!o.a.canPlayType(a)}e.a=a},function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"a",function(){return s});var r=n(0),i=n(12),o=n(8),u=n(1),a=function(){};function c(t,e,n,d){var p;t===Object(t)&&(t=(d=t).url);var h=Object(r.j)({xhr:null,url:t,withCredentials:!1,retryWithoutCredentials:!1,timeout:6e4,timeoutId:-1,oncomplete:e||a,onerror:n||a,mimeType:d&&!d.responseType?"text/xml":"",requireValidXML:!1,responseType:d&&d.plainText?"text":"",useDomParser:!1,requestFilter:null},d),v=function(t,e){return function(t,n){var i=t.currentTarget||e.xhr;if(clearTimeout(e.timeoutId),e.retryWithoutCredentials&&e.xhr.withCredentials)return s(i),void c(Object(r.j)({},e,{xhr:null,withCredentials:!1,retryWithoutCredentials:!1}));!n&&i.status>=400&&i.status<600&&(n=i.status),l(e,n?u.o:u.r,n||6,t)}}(0,h);if("XMLHttpRequest"in window){if(p=h.xhr=h.xhr||new window.XMLHttpRequest,"function"==typeof h.requestFilter){var g;try{g=h.requestFilter({url:t,xhr:p})}catch(t){return v(t,5),p}g&&"open"in g&&"send"in g&&(p=h.xhr=g)}p.onreadystatechange=function(t){return function(e){var n=e.currentTarget||t.xhr;if(4===n.readyState){clearTimeout(t.timeoutId);var a=n.status;if(a>=400)return void l(t,u.o,a<600?a:6);if(200===a)return function(t){return function(e){var n=e.currentTarget||t.xhr;if(clearTimeout(t.timeoutId),t.responseType){if("json"===t.responseType)return function(t,e){if(!t.response||"string"==typeof t.response&&'"'!==t.responseText.substr(1))try{t=Object(r.j)({},t,{response:JSON.parse(t.responseText)})}catch(t){return void l(e,u.o,611,t)}return e.oncomplete(t)}(n,t)}else{var o,a=n.responseXML;if(a)try{o=a.firstChild}catch(t){}if(a&&o)return f(n,a,t);if(t.useDomParser&&n.responseText&&!a&&(a=Object(i.parseXML)(n.responseText))&&a.firstChild)return f(n,a,t);if(t.requireValidXML)return void l(t,u.o,602)}t.oncomplete(n)}}(t)(e);0===a&&Object(o.isFileProtocol)()&&!/^[a-z][a-z0-9+.-]*:/.test(t.url)&&l(t,u.o,7)}}}(h),p.onerror=v,"overrideMimeType"in p?h.mimeType&&p.overrideMimeType(h.mimeType):h.useDomParser=!0;try{t=t.replace(/#.*$/,""),p.open("GET",t,!0)}catch(t){return v(t,3),p}if(h.responseType)try{p.responseType=h.responseType}catch(t){}h.timeout&&(h.timeoutId=setTimeout(function(){s(p),l(h,u.r,1)},h.timeout),p.onabort=function(){clearTimeout(h.timeoutId)});try{h.withCredentials&&"withCredentials"in p&&(p.withCredentials=!0),p.send()}catch(t){v(t,4)}return p}l(h,u.r,2)}function s(t){t.onload=null,t.onprogress=null,t.onreadystatechange=null,t.onerror=null,"abort"in t&&t.abort()}function l(t,e,n,r){t.onerror(e,t.url,t.xhr,new u.s(e,n,r))}function f(t,e,n){var i=e.documentElement;if(!n.requireValidXML||"parsererror"!==i.nodeName&&!i.getElementsByTagName("parsererror").length)return t.responseXML||(t=Object(r.j)({},t,{responseXML:e})),n.oncomplete(t);l(n,u.o,601)}},function(t,e,n){"use strict";var r=n(0),i=n(34),o=["captions","metadata","thumbnails","chapters"],u=function(t){if(t&&t.file){var e,n=Object(r.j)({},{kind:"captions",default:!1},t);return n.kind=(e=n.kind,-1!==o.indexOf(e)?n.kind:"captions"),n.default=!!n.default,n}},a=Array.isArray;e.a=function(t){a((t=t||{}).tracks)||delete t.tracks;var e=Object(r.j)({},{sources:[],tracks:[],minDvrWindow:120,dvrSeekLimit:25},t);e.sources!==Object(e.sources)||a(e.sources)||(e.sources=[Object(i.a)(e.sources)]),a(e.sources)&&0!==e.sources.length||(t.levels?e.sources=t.levels:e.sources=[Object(i.a)(t)]);for(var n=0;n36&&(x(t,u.u,e),t.dragged=!0,x(t,u.s,e))}n||"touchmove"!==e.type||S(e)},h=function(n){if(clearTimeout(r),t.el)if(k(t),O(t,"window"),t.dragged)t.dragged=!1,x(t,u.t,n);else if(-1===n.type.indexOf("cancel")&&e.contains(n.target)){if(Object(c.a)()-t.lastStart>500)return;var i="pointerup"===n.type||"pointercancel"===n.type,o="mouseup"===n.type||i&&"mouse"===n.pointerType;!function(t,e,n){if(t.enableDoubleTap)if(Object(c.a)()-t.lastClick<300){x(t,n?u.q:u.r,e),t.lastClick=0}else t.lastClick=Object(c.a)()}(t,n,o),o?x(t,u.n,n):(x(t,u.sb,n),"touchend"!==n.type||p||S(n))}};f?w(t,"init","pointerdown",a,o):(d&&w(t,"init","mousedown",a,o),w(t,"init","touchstart",a,o)),i||(i=new v(document).on("interaction")),w(t,"init","blur",function(){Object(s.o)(e,"jw-tab-focus")}),w(t,"init","focus",function(){i.event&&"keydown"===i.event.type&&Object(s.a)(e,"jw-tab-focus")})}}var y={drag:function(t){b(t)},dragStart:function(t){b(t)},dragEnd:function(t){b(t)},click:function(t){b(t)},tap:function(t){if(o.OS.iOS&&o.OS.version.major<11){var e=document.body;e&&(e.ontouchstart=e.ontouchstart||function(){})}b(t)},doubleTap:function(t){t.enableDoubleTap=!0,b(t)},doubleClick:function(t){t.enableDoubleTap=!0,b(t)},longPress:function(t){if(o.OS.iOS){var e=function(){clearTimeout(r)};w(t,"longPress","touchstart",function(n){e(),r=setTimeout(function(){x(t,"longPress",n)},500)}),w(t,"longPress","touchmove",e),w(t,"longPress","touchcancel",e),w(t,"longPress","touchend",e)}else t.el.oncontextmenu=function(e){return x(t,"longPress",e),!1}},focus:function(t){w(t,"focus","focus",function(e){C(t,"focus",e)})},blur:function(t){w(t,"blur","blur",function(e){C(t,"blur",e)})},over:function(t){(f||d)&&w(t,u.Z,f?"pointerover":"mouseover",function(e){"touch"!==e.pointerType&&x(t,u.Z,e)})},out:function(t){if(f){var e=t.el;w(t,u.Y,"pointerout",function(n){if("touch"!==n.pointerType&&"x"in n){var r=document.elementFromPoint(n.x,n.y);e.contains(r)||x(t,u.Y,n)}})}else d&&w(t,u.Y,"mouseout",function(e){x(t,u.Y,e)})},move:function(t){(f||d)&&w(t,u.W,f?"pointermove":"mousemove",function(e){"touch"!==e.pointerType&&x(t,u.W,e)})},enter:function(t){w(t,u.v,"keydown",function(e){"Enter"!==e.key&&13!==e.keyCode||(e.stopPropagation(),C(t,u.v,e))})},keydown:function(t){w(t,"keydown","keydown",function(e){C(t,"keydown",e)},!1)},gesture:function(t){var e=function(e){return x(t,"gesture",e)};w(t,"gesture","click",e),w(t,"gesture","keydown",e)},interaction:function(t){var e=function(e){t.event=e};w(t,"interaction","mousedown",e,!0),w(t,"interaction","keydown",e,!0)}};function j(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}function w(t,e,n,r,i){void 0===i&&(i=h);var o=t.handlers[e],u=t.options[e];if(o||(o=t.handlers[e]={},u=t.options[e]={}),o[n])throw new Error(e+" "+n+" already registered");o[n]=r,u[n]=i;var a=t.el;("window"===e?j(a):a).addEventListener(n,r,i)}function O(t,e){var n=t.el,r=t.handlers,i=t.options,o="window"===e?j(n):n,u=r[e],a=i[e];u&&(Object.keys(u).forEach(function(t){var e=a[t];"boolean"==typeof e?o.removeEventListener(t,u[t],e):o.removeEventListener(t,u[t])}),r[e]=null,i[e]=null)}function k(t){var e=t.el;null!==t.pointerId&&(e.releasePointerCapture(t.pointerId),t.pointerId=null)}function C(t,e,n){var r=t.el,i=n.target;t.trigger(e,{type:e,sourceEvent:n,currentTarget:r,target:i})}function x(t,e,n){var r=function(t,e,n){var r,i=e.target,o=e.touches,u=e.changedTouches,a=e.pointerType;o||u?(r=o&&o.length?o[0]:u[0],a=a||"touch"):(r=e,a=a||"mouse");var c=r;return{type:t,pointerType:a,pageX:c.pageX,pageY:c.pageY,sourceEvent:e,currentTarget:n,target:i}}(e,n,t.el);t.trigger(e,r)}function P(t){return 0===t.type.indexOf("touch")?(t.originalEvent||t).changedTouches[0]:t}function S(t){t.preventDefault&&t.preventDefault()}},function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"d",function(){return s}),n.d(e,"c",function(){return l}),n.d(e,"a",function(){return f});var r,i=n(23),o=[{configName:"clearkey",keyName:"org.w3.clearkey"},{configName:"widevine",keyName:"com.widevine.alpha"},{configName:"playready",keyName:"com.microsoft.playready"}],u=[],a={};function c(t){return t.some(function(t){return!!t.drm||t.sources.some(function(t){return!!t.drm})})}function s(t){return r||((navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||window.MSMediaKeys)&&Object(i.a)(t)("drm")?(o.forEach(function(t){var e,n,r=(e=t.keyName,n=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.4d401e"'}],audioCapabilities:[{contentType:'audio/mp4;codecs="mp4a.40.2"'}]}],navigator.requestMediaKeySystemAccess?navigator.requestMediaKeySystemAccess(e,n):new Promise(function(t,n){var r;try{r=new window.MSMediaKeys(e)}catch(t){return void n(t)}t(r)})).then(function(){a[t.configName]=!0}).catch(function(){a[t.configName]=!1});u.push(r)}),r=Promise.all(u)):Promise.resolve())}function l(t){return a[t]}function f(t){if(r)return Object.keys(t).some(function(t){return l(t)})}},,function(t,e,n){"use strict";var r=n(0),i=n(19),o=n(8),u=n(12),a=n(2),c=n(32),s=n(16);function l(t,e){this.name=t,this.message=e.message||e.toString(),this.error=e}var f=n(7),d=n(6),p=n(11),h=n(29),v=n(55),g=n(49),m=n(56),b=Object(r.j)({},u,o,i,{addClass:d.a,hasClass:d.i,removeClass:d.o,replaceClass:d.p,toggleClass:d.v,classList:d.d,styleDimension:d.u,createElement:d.e,emptyElement:d.h,addStyleSheet:d.b,bounds:d.c,openLink:d.l,replaceInnerHtml:d.q,css:p.b,clearCss:p.a,style:p.d,transform:p.e,getRgba:p.c,ajax:h.b,crossdomain:function(t){var e=document.createElement("a"),n=document.createElement("a");e.href=location.href;try{return n.href=t,n.href=n.href,e.protocol+"//"+e.host!=n.protocol+"//"+n.host}catch(t){}return!0},tryCatch:function(t,e,n){if(void 0===n&&(n=[]),s.a.debug)return t.apply(e||this,n);try{return t.apply(e||this,n)}catch(e){return new l(t.name,e)}},Error:l,Timer:c.a,log:g.a,genId:m.b,between:v.a,foreach:function(t,e){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])},flashVersion:f.a,isIframe:f.m,indexOf:r.p,trim:a.i,pad:a.e,extension:a.a,hms:a.b,seconds:a.g,prefix:a.f,suffix:a.h,noop:function(){}});e.a=b},function(t,e,n){"use strict";n.d(e,"c",function(){return i}),n.d(e,"b",function(){return o}),n.d(e,"a",function(){return u});var r=n(0),i=function(t){return t.replace(/^(.*\/)?([^-]*)-?.*\.(js)$/,"$2")};function o(t){return 305e3}function u(t,e,n){var i=t.name,o=document.createElement("div");o.id=n.id+"_"+i,o.className="jw-plugin jw-reset";var u=Object(r.j)({},e),a=t.getNewInstance(n,u,o);return n.addPlugin(i,a),a}},function(t,e,n){"use strict";n.d(e,"a",function(){return o}),n.d(e,"b",function(){return u});var r=n(10),i=null,o={};function u(){return i||(i=n.e(2).then(function(t){var e=n(21).default;return o.controls=e,e}.bind(null,n)).catch(function(){i=null,Object(r.c)(301130)()})),i}},function(t,e,n){"use strict";var r=document.createElement("video");e.a=r},function(t,e,n){"use strict";e.a={advertising:{admessage:"This ad will end in xx",cuetext:"Advertisement",displayHeading:"Advertisement",loadingAd:"Loading ad",podmessage:"Ad __AD_POD_CURRENT__ of __AD_POD_LENGTH__.",skipmessage:"Skip ad in xx",skiptext:"Skip"},airplay:"AirPlay",audioTracks:"Audio Tracks",auto:"Auto",buffer:"Loading",cast:"Chromecast",cc:"Closed Captions",close:"Close",errors:{badConnection:"This video cannot be played because of a problem with your internet connection.",cantLoadPlayer:"Sorry, the video player failed to load.",cantPlayInBrowser:"The video cannot be played in this browser.",cantPlayVideo:"This video file cannot be played.",errorCode:"Error Code",liveStreamDown:"The live stream is either down or has ended.",protectedContent:"There was a problem providing access to protected content.",technicalError:"This video cannot be played because of a technical error."},exitFullscreen:"Exit Fullscreen",fullscreen:"Fullscreen",hd:"Quality",liveBroadcast:"Live",logo:"Logo",mute:"Mute",next:"Next",nextUp:"Next Up",notLive:"Not Live",off:"Off",pause:"Pause",play:"Play",playback:"Play",playbackRates:"Playback Rates",player:"Video Player",poweredBy:"Powered by",prev:"Previous",related:{autoplaymessage:"Next up in xx",heading:"More Videos"},replay:"Replay",rewind:"Rewind 10 Seconds",settings:"Settings",sharing:{copied:"Copied",email:"Email",embed:"Embed",heading:"Share",link:"Link"},slider:"Seek",stop:"Stop",unmute:"Unmute",videoInfo:"About This Video",volume:"Volume",volumeSlider:"Volume",shortcuts:{playPause:"Play/Pause",volumeToggle:"Mute/Unmute",fullscreenToggle:"Fullscreen/Exit Fullscreen",seekPercent:"Seek %",keyboardShortcuts:"Keyboard Shortcuts",increaseVolume:"Increase Volume",decreaseVolume:"Decrease Volume",seekForward:"Seek Forward",seekBackward:"Seek Backward",spacebar:"SPACE",captionsToggle:"Captions On/Off"},captionsStyles:{subtitleSettings:"Subtitle Settings",color:"Font Color",fontOpacity:"Font Opacity",userFontScale:"Font Size",fontFamily:"Font Family",edgeStyle:"Character Edge",backgroundColor:"Background Color",backgroundOpacity:"Background Opacity",windowColor:"Window Color",windowOpacity:"Window Opacity",white:"White",black:"Black",red:"Red",green:"Green",blue:"Blue",yellow:"Yellow",magenta:"Magenta",cyan:"Cyan",none:"None",raised:"Raised",depressed:"Depressed",uniform:"Uniform",dropShadow:"Drop Shadow"},disabled:"Disabled",enabled:"Enabled",reset:"Reset"}},function(t,e){var n,r,i={},o={},u=(n=function(){return document.head||document.getElementsByTagName("head")[0]},function(){return void 0===r&&(r=n.apply(this,arguments)),r});function a(t){var e=document.createElement("style");return e.type="text/css",e.setAttribute("data-jwplayer-id",t),function(t){u().appendChild(t)}(e),e}function c(t,e){var n,r,i,u=o[t];u||(u=o[t]={element:a(t),counter:0});var c=u.counter++;return n=u.element,i=function(){f(n,c,"")},(r=function(t){f(n,c,t)})(e.css),function(t){if(t){if(t.css===e.css&&t.media===e.media)return;r((e=t).css)}else i()}}t.exports={style:function(t,e){!function(t,e){for(var n=0;n
'+(e||"")+''+(r?("("+n+": "+r+")").replace(/\s+/g," "):"")+"
"}(t.get("id"),n,t.get("localization").errors.errorCode,o.toString()),a=t.get("width"),c=t.get("height"),s=Object(r.e)(u);return Object(i.d)(s,{width:a.toString().indexOf("%")>0?a:a+"px",height:c.toString().indexOf("%")>0?c:c+"px"}),s}n.d(e,"a",function(){return o})},function(t,e,n){"use strict";function r(t){return t.slice&&"px"===t.slice(-2)&&(t=t.slice(0,-2)),t}function i(t,e){if(-1===e.toString().indexOf("%"))return 0;if("string"!=typeof t||!t)return 0;if(/^\d*\.?\d+%$/.test(t))return t;var n=t.indexOf(":");if(-1===n)return 0;var r=parseFloat(t.substr(0,n)),i=parseFloat(t.substr(n+1));return r<=0||i<=0?0:i/r*100+"%"}n.d(e,"b",function(){return r}),n.d(e,"a",function(){return i})},function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=window.atob},function(t,e,n){"use strict";var r=n(4),i=n(2);function o(t){var e={zh:"Chinese",nl:"Dutch",en:"English",fr:"French",de:"German",it:"Italian",ja:"Japanese",pt:"Portuguese",ru:"Russian",es:"Spanish"};return e[t]?e[t]:t}function u(t){for(var e=[],n=0;n0&&(n=t(s,n));break;case"title":n.title=Object(r.d)(s);break;case"description":n.description=Object(r.d)(s);break;case"guid":n.mediaid=Object(r.d)(s);break;case"thumbnail":n.image||(n.image=Object(i.j)(s,"url"));break;case"group":t(s,n);break;case"subtitle":var d={file:Object(i.j)(s,"url"),kind:"captions"};Object(i.j)(s,"lang").length>0&&(d.label=o(Object(i.j)(s,"lang"))),a.push(d)}}}n.tracks||(n.tracks=[]);for(var p=0;p0&&(d[n]="true"===o[f][n],d.label||delete d.label,e.sources.push(d))}}if(u.length){e.tracks=[];for(var p=0;p0&&(h[n]="true"===u[p][n],h.kind=u[p].kind.length?u[p].kind:"captions",h.label||delete h.label,e.tracks.push(h))}}return e},l=n(30);function f(t){var e=[];e.feedData={};for(var n=0;n>>2&3;for(var p=s-1;p>=0;p--)o=((l=a[p>0?p-1:s-1])>>>5^f<<2)+(f>>>3^l<<4)^(d^f)+(c[3&p^u]^l),f=a[p]-=o;d-=2654435769}return function(t){try{return decodeURIComponent(escape(t))}catch(e){return t}}(function(t){for(var e=new Array(t.length),n=0;n>>8&255,t[n]>>>16&255,t[n]>>>24&255);return e.join("")}(a).replace(/\0+$/,""))}},function(t,e,n){"use strict";n.d(e,"b",function(){return r}),n.d(e,"a",function(){return i});var r=window.requestAnimationFrame||function(t){return setTimeout(t,17)},i=window.cancelAnimationFrame||clearTimeout},function(t,e,n){"use strict";n.d(e,"b",function(){return r}),n.d(e,"a",function(){return i});var r={audioMode:!1,flashBlocked:!1,itemMeta:{},playbackRate:1,playRejected:!1,state:n(3).nb,itemReady:!1,controlsEnabled:!1},i={position:0,duration:0,buffer:0,currentTime:0}},,function(t,e,n){"use strict";n.d(e,"a",function(){return l}),n.d(e,"c",function(){return f});var r=n(0),i=n(46),o=n(19),u=n(12),a=n(5),c=n(42),s=n(14),l={autoPause:{viewability:!1,pauseAds:!1},autostart:!1,bandwidthEstimate:null,bitrateSelection:null,castAvailable:!1,controls:!0,cues:[],defaultPlaybackRate:1,displaydescription:!0,displaytitle:!0,displayPlaybackLabel:!1,enableShortcuts:!0,height:360,intl:{},item:0,language:"en",liveTimeout:null,localization:c.a,mute:!1,nextUpDisplay:!0,playbackRateControls:!1,playbackRates:[.5,1,1.25,1.5,2],renderCaptionsNatively:!1,repeat:!1,stretching:"uniform",volume:90,width:640};function f(t){return t?t<5?5:t>30?30:t:25}e.b=function(t,e){var d=Object(r.j)({},(window.jwplayer||{}).defaults,e,t);!function(t){Object.keys(t).forEach(function(e){"id"!==e&&(t[e]=Object(u.serialize)(t[e]))})}(d);var p=d.forceLocalizationDefaults?l.language:Object(s.e)(),h=Object(s.j)(d.intl);d.localization=Object(s.a)(c.a,Object(s.c)(d,h,p));var v=Object(r.j)({},l,d);"."===v.base&&(v.base=Object(o.getScriptPath)("jwplayer.js")),v.base=(v.base||Object(o.loadFrom)()).replace(/\/?$/,"/"),n.p=v.base,v.width=Object(i.b)(v.width),v.height=Object(i.b)(v.height),v.aspectratio=Object(i.a)(v.aspectratio,v.width),v.volume=Object(r.z)(v.volume)?Math.min(Math.max(0,v.volume),100):l.volume,v.mute=!!v.mute,v.language=p,v.intl=h;var g=v.playlistIndex;g&&(v.item=g),Object(r.v)(v.item)||(v.item=0);var m=d.autoPause;m&&(v.autoPause.viewability=!("viewability"in m&&!m.viewability));var b=v.playbackRateControls;if(b){var y=v.playbackRates;Array.isArray(b)&&(y=b),(y=y.filter(function(t){return Object(r.v)(t)&&t>=.25&&t<=4}).map(function(t){return Math.round(100*t)/100})).indexOf(1)<0&&y.push(1),y.sort(),v.playbackRateControls=!0,v.playbackRates=y}(!v.playbackRateControls||v.playbackRates.indexOf(v.defaultPlaybackRate)<0)&&(v.defaultPlaybackRate=1),v.playbackRate=v.defaultPlaybackRate,v.aspectratio||delete v.aspectratio;var j=v.playlist;if(j)Array.isArray(j.playlist)&&(v.feedData=j,v.playlist=j.playlist);else{var w=Object(r.D)(v,["title","description","type","mediaid","image","images","file","sources","tracks","preload","duration"]);v.playlist=[w]}v.qualityLabels=v.qualityLabels||v.hlslabels,delete v.duration;var O=v.liveTimeout;null!==O&&(Object(r.z)(O)?0!==O&&(O=Math.max(30,O)):O=null,v.liveTimeout=O);var k,C,x=parseFloat(v.bandwidthEstimate),P=parseFloat(v.bitrateSelection);return v.bandwidthEstimate=Object(r.z)(x)?x:(k=v.defaultBandwidthEstimate,C=parseFloat(k),Object(r.z)(C)?Math.max(C,1):l.bandwidthEstimate),v.bitrateSelection=Object(r.z)(P)?P:l.bitrateSelection,v.liveSyncDuration=f(v.liveSyncDuration),v.backgroundLoading=Object(r.r)(v.backgroundLoading)?v.backgroundLoading:a.Features.backgroundLoading,v}},function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(t,e,n){return Math.max(Math.min(t,n),e)}},function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n.d(e,"b",function(){return o});var r=12;function i(){try{var t=window.crypto||window.msCrypto;if(t&&t.getRandomValues)return t.getRandomValues(new Uint32Array(1))[0].toString(36)}catch(t){}return Math.random().toString(36).slice(2,9)}function o(t){for(var e="";e.length0;){var e=r.shift(),n=e.command,o=e.args;(i[n]||t[n]).apply(t,o)}}e.forEach(function(e){var u=t[e];i[e]=u,t[e]=function(){for(var t=arguments.length,i=new Array(t),a=0;a0)return 0;var n=t.indexOf("/"),r=Object(u.a)(t);return!(e<0&&n<0)||r&&isNaN(r)?1:2}},l=function(t){this.url=t,this.promise_=null};Object.defineProperties(l.prototype,{promise:{get:function(){return this.promise_||this.load()},set:function(){}}}),Object(r.j)(l.prototype,{load:function(){var t=this,e=this.promise_;if(!e){if(2===s(this.url))e=Promise.resolve(this);else{var n=new i.a(function(t){switch(s(t)){case 0:return t;case 1:return Object(o.getAbsolutePath)(t,window.location.href)}}(this.url));this.loader=n,e=n.load().then(function(){return t})}this.promise_=e}return e},registerPlugin:function(t,e,n){this.name=t,this.target=e,this.js=n},getNewInstance:function(t,e,n){var r=this.js;if("function"!=typeof r)throw new a.s(null,Object(c.b)(this.url)+100);var i=new r(t,e,n);return i.addToPlayer=function(){var e=t.getContainer().querySelector(".jw-overlays");e&&(n.left=e.style.left,n.top=e.style.top,e.appendChild(n),i.displayArea=e)},i.resizeHandler=function(){var t=i.displayArea;t&&i.resize(t.clientWidth,t.clientHeight)},i}}),e.a=l},function(t,e,n){"use strict";var r=n(0),i=n(3),o=n(4),u=n(48),a=n(29),c=n(9),s=n(1);e.a=function(){var t=Object(r.j)(this,c.a);function e(e){try{var a,c=e.responseXML?e.responseXML.childNodes:null,l=null;if(c){for(var f=0;f-1&&(y.playlist=function(t,e){var n=(t.querySelector("title")||{}).textContent,r=l(t,'meta[property="og:title"]'),i=encodeURIComponent(r||n||""),o=l(t,'meta[property="og:description"]')||l(t,'meta[name="description"]');return o&&(i+="&page_description="+encodeURIComponent(o)),e.replace("__CONTEXTUAL__",i)}(document,y.playlist),y.contextual=!0),Object(a.isFileProtocol)()){var C=y,x=C.playlist,P=C.related;h(x)&&(y.playlist=v(x)),P&&h(P.file)&&(P.file=v(P.file))}return y.__abSendDomainToFeeds&&(b=y.playlist,/\.jwplatform.com|\.jwplayer.com/.test(b))&&(y.playlist=(f=y.playlist,f+=(-1!==f.indexOf("?")?"&":"?")+"page_domain="+encodeURIComponent(Object(p.a)()))),y},y=n(10),j=n(26),w=n(3),O=n(62),k=n(24),C=n(25),x=n(1),P=n(14);function S(t){var e=t.get("playlist");return new Promise(function(n,r){if("string"!=typeof e){var i=t.get("feedData")||{};return T(t,e,i),n()}var o=new O.a;o.on(w.eb,function(e){var r=e.playlist;delete e.playlist,T(t,r,e),n()}),o.on(w.w,function(e){T(t,[],{}),r(Object(x.z)(e,x.u))}),o.load(e)})}function T(t,e,n){var r=t.attributes;r.playlist=Object(k.a)(e),r.feedData=n}function E(t){return t.attributes._destroyed}var A=n(36),_=function(t,e){return/isAMP/.test(document.location.search)?n.e(1).then(function(r){var i=new(0,n(167).default)(e);return t.attributes.ampController=i,Promise.resolve()}.bind(null,n)).catch(Object(y.b)(x.t+130)):Promise.resolve()};function F(t){return L(t)?Promise.resolve():S(t).then(function(){if(t.get("drm")||Object(A.b)(t.get("playlist")))return Object(A.d)(t.get("edition"))}).then(function(){return S(e=t).then(function(){if(!E(e)){var t=Object(k.b)(e.get("playlist"),e);e.attributes.playlist=t;try{Object(k.e)(t)}catch(t){throw t.code+=x.u,t}var n=e.getProviders(),r=Object(k.f)(e.get("item"),t.length),i=n.choose(t[r].sources[0]),o=i.provider,u=i.name;return"function"==typeof o?o:y.a.html5&&"html5"===u?y.a.html5:n.load(u).catch(function(t){throw Object(x.z)(t,x.v)})}});var e})}function I(t,e){var n=[M(t),_(t,e)];return L(t)||n.push(Promise.resolve()),Promise.all(n)}function M(t){var e=t.attributes,n=e.error;if(n&&n.code===c.a){var r=e.pid,i=e.ph,o=new c.b(e.key);if(i>0&&i<4&&r&&o.duration()>-7776e6)return new C.a("//content.jwplatform.com/libraries/"+r+".js").load().then(function(){var t=window.jwplayer.defaults.key,n=new c.b(t);n.error()||n.token()!==o.token()||(e.key=t,e.edition=n.edition(),e.error=n.error())}).catch(function(){})}return Promise.resolve()}function L(t){var e=t.get("advertising");return!(!e||!e.outstream)}var N=function(t){var e=t.get("skin")?t.get("skin").url:void 0;return"string"!=typeof e||function(t){for(var e=document.styleSheets,n=0,r=e.length;n=4.4:null}},function(t,e,n){"use strict";function r(){var t,e,n=window.location.host;if(window.top!==window.self){n=(document.referrer?(t=document.referrer,(e=document.createElement("a")).href=t,e):{}).host;try{n=n||window.top.location.host}catch(t){}}return n}n.d(e,"a",function(){return r})},function(t,e){t.exports=''},function(t,e,n){"use strict";var r,i=n(65),o=n(5),u=n(6),a=[],c=[],s=[],l={},f="screen"in window&&"orientation"in window.screen,d=o.OS.android&&o.Browser.chrome,p=!1;function h(t,e){for(var n=e.length;n--;){var r=e[n];if(t.target===r.getContainer()){r.setIntersection(t);break}}}function v(){a.forEach(function(t){var e=t.model;if(!(e.get("audioMode")||!e.get("controls")||e.get("visibility")<.75)){var n=e.get("state"),r=Object(u.f)();!r&&"paused"===n&&t.api.getFullscreen()?t.api.setFullscreen(!1):"playing"===n&&t.api.setFullscreen(r)}})}function g(){a.forEach(function(t){t.model.set("activeTab",Object(i.a)())})}function m(t,e){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}function b(t){s.forEach(function(e){e(t)})}document.addEventListener("visibilitychange",g),document.addEventListener("webkitvisibilitychange",g),d&&f&&window.screen.orientation.addEventListener("change",v),window.addEventListener("beforeunload",function(){document.removeEventListener("visibilitychange",g),document.removeEventListener("webkitvisibilitychange",g),window.removeEventListener("scroll",b),d&&f&&window.screen.orientation.removeEventListener("change",v)}),e.a={add:function(t){a.push(t)},remove:function(t){m(t,a)},addScrollHandler:function(t){p||(p=!0,window.addEventListener("scroll",b)),s.push(t)},removeScrollHandler:function(t){var e=s.indexOf(t);-1!==e&&s.splice(e,1)},addWidget:function(t){c.push(t)},removeWidget:function(t){m(t,c)},size:function(){return a.length},observe:function(t){var e;e=window.IntersectionObserver,r||(r=new e(function(t){if(t&&t.length)for(var e=t.length;e--;){var n=t[e];h(n,a),h(n,c)}},{threshold:[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1]})),l[t.id]||(l[t.id]=!0,r.observe(t))},unobserve:function(t){r&&l[t.id]&&(delete l[t.id],r.unobserve(t))}}},function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n(0),i=n(51),o=n(6),u=n(11),a=[],c=-1;function s(){Object(i.a)(c),c=Object(i.b)(function(){a.forEach(function(t){t.view.updateBounds();var e=t.view.model.get("containerWidth");t.resized=t.width!==e,t.width=e}),a.forEach(function(t){t.contractElement.scrollLeft=2*t.width}),a.forEach(function(t){Object(u.d)(t.expandChild,{width:t.width+1}),t.resized&&t.view.model.get("visibility")&&t.view.updateStyles()}),a.forEach(function(t){t.expandElement.scrollLeft=t.width+1}),a.forEach(function(t){t.resized&&t.view.checkResized()})})}var l=function(){function t(t,e,n){var i={display:"block",position:"absolute",top:0,left:0},c={width:"100%",height:"100%"},l=Object(o.e)('
'),f=l.firstChild,d=f.firstChild,p=f.nextSibling;Object(u.d)([f,p],Object(r.j)({overflow:"auto"},i,c)),Object(u.d)(l,Object(r.j)({},i,c)),this.expandElement=f,this.expandChild=d,this.contractElement=p,this.hiddenElement=l,this.element=t,this.view=e,this.model=n,this.width=0,this.resized=!1,t.firstChild?t.insertBefore(l,t.firstChild):t.appendChild(l),t.addEventListener("scroll",s,!0),a.push(this),s()}return t.prototype.destroy=function(){if(this.view){var t=a.indexOf(this);-1!==t&&a.splice(t,1),this.element.removeEventListener("scroll",s,!0),this.element.removeChild(this.hiddenElement),this.view=this.model=null}},t}()},function(t,e,n){"use strict";n.r(e);var r=n(0),i=setTimeout;function o(){}function u(t){if(!(this instanceof u))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],d(t,this)}function a(t,e){for(;3===t._state;)t=t._value;0!==t._state?(t._handled=!0,u._immediateFn(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null!==n){var r;try{r=n(t._value)}catch(t){return void s(e.promise,t)}c(e.promise,r)}else(1===t._state?c:s)(e.promise,t._value)})):t._deferreds.push(e)}function c(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof u)return t._state=3,t._value=e,void l(t);if("function"==typeof n)return void d((r=n,i=e,function(){r.apply(i,arguments)}),t)}t._state=1,t._value=e,l(t)}catch(e){s(t,e)}var r,i}function s(t,e){t._state=2,t._value=e,l(t)}function l(t){2===t._state&&0===t._deferreds.length&&u._immediateFn(function(){t._handled||u._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e-1)return K(r),e;if(["createInstream","setCurrentAudioTrack","setCurrentCaptions","setCurrentQuality"].indexOf(r)>-1)return K(r),null}if(l||c.push([r,a]),s)return Z(n,c),n[r].apply(e,u);!function(t,e){var n={reason:Object(U.a)()?"interaction":"external"};switch(t){case"play":case"pause":case"playToggle":case"playlistNext":case"playlistPrev":case"next":e[0]=n;break;case"seek":case"playlistItem":e[1]=n}}(r,u);var f=n[r].apply(n,u);return"remove"===r?n.off.call(e):"setup"===r&&(n.off.call(e),n.off(a.events,null,n),n.on.call(e,a.events,null,e),n.on("all",function(r,u){if("ready"===r){var a=Object.keys(n).filter(function(t){return"_"!==t[0]&&-1===i.indexOf(t)&&"function"==typeof n[t]}),s=i.concat(a);a.forEach(function(r){e[r]=t(e,n,r,s,o)})}n.trigger.call(e,r,u),Z(n,c)})),Z(n,c),f===n?e:f}}(t,e,o,i,r):"_events"===o?t._events={}:Object.defineProperty(t,o,{enumerable:!0,get:function(){return n[o]}})})}function K(t){console.warn("The API method jwplayer()."+t+"() is disabled in the free edition of JW Player.")}function Z(t,e){if(e.length){var n=t.getPlugin("jwpsrv");n&&n.trackExternalAPIUsage&&(e.forEach(function(t){!function(t,e,n){try{var r=function(t,e){switch(t){case"setup":return!!e;case"getSafeRegion":case"pauseAd":case"setControls":case"setFullscreen":case"setMute":return!!e===e?e:void 0;case"setPlaylistItem":case"getPlaylistItem":return(0|e)===e?e:void 0;case"setPlaybackRate":case"setVolume":return Number(e);case"setConfig":return Object.keys(Object(e)).join(",");case"on":case"once":case"off":case"trigger":case"getPlugin":case"addPlugin":case"registerPlugin":return""+e}return null}(e,n);t.trackExternalAPIUsage(e,r)}catch(t){O.a.debug&&console.warn(t)}}(n,t[0],t[1])}),e.length=0)}}var $=window;Object(r.j)(N,W);var G=function(t){var e=N(t);return e.uniqueId?e._publicApi||(e._publicApi=new Y(e)):e};Object(r.j)(G,W),L(G),"function"==typeof $.define&&$.define.amd&&$.define([],function(){return G});var tt=G;$.jwplayer&&(tt=$.jwplayer),e.default=tt}]).default;var jwDefaults={aspectratio:"16:9",autostart:!1,cast:{appid:"00000000"},controls:!0,displaydescription:!0,displaytitle:!0,flashplayer:"//ssl.p.jwpcdn.com/player/v/8.15.1/jwplayer.flash.swf",height:"100%",key:"",mute:!1,ph:1,pid:"",playbackRateControls:!1,preload:"metadata",repeat:!1,stagevideo:!1,stretching:"uniform",width:"100%"};jwplayer.defaults=jwDefaults; 2 | -------------------------------------------------------------------------------- /assets/js/player.js: -------------------------------------------------------------------------------- 1 | window.addEventListener("message", async e => { 2 | // Meta para testar o player APENAS em localhost 3 | const href = window.location.href 4 | if (href.startsWith("http://127.0.0.1") || href.startsWith("http://localhost")) { 5 | let meta = document.createElement('meta'); 6 | meta.httpEquiv = "Content-Security-Policy"; 7 | meta.content = "upgrade-insecure-requests"; 8 | document.getElementsByTagName('head')[0].appendChild(meta); 9 | } 10 | 11 | console.log('[CR Premium] Player encontrado!') 12 | 13 | // Variáveis principais 14 | const r = { 0: '720', 1: '1080', 2: '480', 3: '360', 4: '240' }; 15 | const lgLangs = { "ptBR": "Português (BR)", "enUS": "English (US)", "enGB": "English (UK)", "esLA": "Español (LA)", "esES": "Español (ES)", "ptPT": "Português (PT)", "frFR": "Français (FR)", "deDE": "Deutsch (DE)", "arME": "(ME) عربي", "itIT": "Italiano (IT)", "ruRU": "Русский (RU)" } 16 | const epLangs = { "ptBR": "Episódio", "enUS": "Episode", "enGB": "Episode", "esLA": "Episodio", "esES": "Episodio", "ptPT": "Episódio", "frFR": "Épisode", "deDE": "Folge", "arME": "الحلقة", "itIT": "Episodio", "ruRU": "Серия" }; 17 | const fnLangs = { "ptBR": "FINAL", "enUS": "FINAL", "enGB": "FINAL", "esLA": "FINAL", "esES": "FINAL", "ptPT": "FINAL", "frFR": "FINALE", "deDE": "FINALE", "arME": "نهائي", "itIT": "FINALE", "ruRU": "ФИНАЛЬНЫЙ" }; 18 | 19 | let is_beta = e.data.beta; 20 | let force_mp4 = e.data.force_mp4; 21 | let tampermonkey = e.data.tampermonkey; 22 | let webvideocaster = e.data.webvideocaster; 23 | let tampermonkey_proxy = "https://crp-proxy.herokuapp.com/get?url="; 24 | let streamrgx = /_,(\d+.mp4),(\d+.mp4),(\d+.mp4),(?:(\d+.mp4),(\d+.mp4),)?.*?m3u8/; 25 | let video_config_media = await getConfigMedia(e.data.video_config_media, e.data.old_url); 26 | let video_id = video_config_media['metadata']['id']; 27 | let up_next_cooldown = e.data.up_next_cooldown; 28 | let up_next_enable = e.data.up_next_enable; 29 | let up_next = (e.data.up_next && !video_config_media['metadata']['up_next']) ? false : e.data.up_next; 30 | let thumbs = up_next ? video_config_media['metadata']['up_next']['thumbnails'] : []; 31 | let version = e.data.version; 32 | let user_lang = e.data.lang; 33 | let series = e.data.series; 34 | let video_stream_url = ""; 35 | let stream_languages = []; 36 | let video_m3u8_array = {}; 37 | let video_mp4_array = {}; 38 | let rows_number = {}; 39 | let tracks = {}; 40 | let dlSize = []; 41 | let dlUrl = []; 42 | for (let idx in r) { 43 | dlSize[idx] = document.getElementById(r[idx] + "_down_size"); 44 | dlUrl[idx] = document.getElementById(r[idx] + "_down_url"); 45 | } 46 | 47 | if (force_mp4) console.log("[CR Premium] Forçando MP4 (chromecast workaround)") 48 | 49 | // Obter streams 50 | const streamlist = video_config_media['streams']; 51 | const sourceLocale = getSourceLocale() 52 | 53 | for (let stream of streamlist) { 54 | const streamLang = stream.hardsub_lang ? stream.hardsub_lang : 'off'; 55 | if (!video_mp4_array[streamLang]) { stream_languages.push(streamLang); tracks[streamLang] = []; video_mp4_array[streamLang] = []; rows_number[streamLang] = -1 } 56 | 57 | // Padrão 58 | if (stream.format == 'adaptive_hls') { 59 | video_stream_url = stream.url; 60 | video_m3u8_array[streamLang] = force_mp4 ? mp4ListFromStream(video_stream_url) : m3u8ListFromStream(video_stream_url); 61 | video_mp4_array[streamLang] = mp4ListFromStream(video_stream_url); 62 | } 63 | // Premium 64 | else if (stream.format == 'trailer_hls') 65 | if (++rows_number[streamLang] <= 4) { 66 | // TODO: video_m3u8_array.push(await getDirectStream(stream.url, rows_number[streamLang])); 67 | const arr_idx = (rows_number[streamLang] === 0 ? 2 : (rows_number[streamLang] === 2 ? 0 : rows_number[streamLang])); 68 | video_mp4_array[streamLang][arr_idx] = getDirectFile(stream.url); 69 | video_m3u8_array[streamLang] = video_mp4_array[streamLang]; 70 | } 71 | } 72 | 73 | // Popular tracks e carregar player 74 | stream_languages.forEach(lang => { 75 | if (Array.isArray(video_m3u8_array[lang])) 76 | for (let idx of [1, 0, 2, 3, 4]) 77 | tracks[lang].push({ file: video_m3u8_array[lang][idx], label: toResolution(r[idx]) }); 78 | else 79 | tracks[lang] = { file: video_m3u8_array[lang], type: "m3u" } 80 | }); 81 | 82 | (() => { 83 | // Inicia o player 84 | let playerInstance = jwplayer("player_div") 85 | playerInstance.setup({ 86 | "playlist": [ 87 | { 88 | "title": getLocalEpisodeTitle(), 89 | "description": video_config_media['metadata']['title'], 90 | "image": video_config_media['thumbnail']['url'], 91 | "sources": tracks[sourceLocale] || tracks["off"], 92 | "tracks": buildTracks(tracks) 93 | }, 94 | up_next_enable && up_next ? { 95 | "autoplaytimer": 0, 96 | "title": video_config_media['metadata']['up_next']['display_episode_number'] + ' - ' + video_config_media['metadata']['up_next']['series_title'], 97 | "file": "https://i.imgur.com/8wEeX0R.mp4", 98 | "repeat": true, 99 | "image": thumbs[thumbs.length - 1].url 100 | } : {} 101 | ], 102 | "related": { displayMode: 'none' }, 103 | "nextupoffset": -up_next_cooldown, 104 | "width": "100%", 105 | "height": "100%", 106 | "autostart": false, 107 | "displayPlaybackLabel": true, 108 | "primary": "html5", 109 | "cast": {}, 110 | "playbackRateControls": [0.5, 0.75, 1, 1.25, 1.5, 2] 111 | }).on('playlistItem', e => { 112 | // tocar próximo ep 113 | if (e.index > 0 && up_next_enable && up_next) { 114 | jwplayer().setControls(false); 115 | jwplayer().setConfig({ 116 | repeat: true 117 | }); 118 | jwplayer().play(); 119 | localStorage.setItem("next_up", true); 120 | localStorage.setItem("next_up_fullscreen", jwplayer().getFullscreen()); 121 | window.top.location.href = up_next; 122 | } 123 | }).on("captionsChanged", el => { 124 | const { tracks: captions, track: captionIndex } = el 125 | const position = jwplayer().getPosition() 126 | playlist = jwplayer().getPlaylist() 127 | trackId = captions[captionIndex].id 128 | track = trackId === "off" ? tracks["off"] : (trackId === "default" ? tracks[locale] || tracks["off"] : trackId) 129 | playlist[0].file = undefined 130 | playlist[0].allSources = undefined 131 | playlist[0].sources = track 132 | playlist[0].tracks = buildTracks(tracks) 133 | jwplayer().load(playlist) 134 | jwplayer().play() 135 | const seek = setInterval(el => { 136 | if (jwplayer().getState() === 'playing') { 137 | jwplayer().seek(position) 138 | clearInterval(seek) 139 | } 140 | }, 5); 141 | updateWebVideoCasterAnchor() 142 | }) 143 | 144 | // Variaveis para os botões. 145 | let update_iconPath = "assets/icon/update_icon.svg"; 146 | let update_id = "update-video-button"; 147 | let update_tooltipText = "Atualização Disponível"; 148 | 149 | let rewind_iconPath = "assets/icon/replay-10s.svg"; 150 | let rewind_id = "rewind-video-button"; 151 | let rewind_tooltipText = "Voltar 10s"; 152 | 153 | let forward_iconPath = "assets/icon/forward-30s.svg"; 154 | let forward_id = "forward-video-button"; 155 | let forward_tooltipText = "Avançar 30s"; 156 | 157 | let webvideocaster_iconPath = "assets/icon/webvideocaster_icon.png"; 158 | let webvideocaster_id = "webvideocaster-video-button"; 159 | let webvideocaster_tooltipText = "Abrir no WebVideoCaster"; 160 | 161 | let download_iconPath = "assets/icon/download_icon.svg"; 162 | let download_id = "download-video-button"; 163 | let download_tooltipText = "Download"; 164 | let didDownload = false; 165 | 166 | const downloadModal = document.querySelectorAll(".modal")[0]; 167 | const updateModal = document.querySelectorAll(".modal")[1]; 168 | document.querySelectorAll("button.close-modal")[0].onclick = () => downloadModal.style.visibility = "hidden"; 169 | document.querySelectorAll("button.close-modal")[1].onclick = () => updateModal.style.visibility = "hidden"; 170 | 171 | const rewind_ButtonClickAction = () => jwplayer().seek(jwplayer().getPosition() - 10) 172 | const forward_ButtonClickAction = () => jwplayer().seek(jwplayer().getPosition() + 30) 173 | 174 | function download_ButtonClickAction() { 175 | if (jwplayer().getEnvironment().OS.mobile == true) { 176 | downloadModal.style.height = "170px"; 177 | downloadModal.style.overflow = "auto"; 178 | } 179 | downloadModal.style.visibility = downloadModal.style.visibility === "hidden" ? "visible" : "hidden"; 180 | if (!didDownload) { 181 | didDownload = true; 182 | console.log('[CR Premium] Baixando sources:') 183 | for (let id of [1, 0, 2, 3, 4]) 184 | linkDownload(id); 185 | } 186 | } 187 | 188 | function update_ButtonClickAction() { 189 | if (jwplayer().getEnvironment().OS.mobile == true) { 190 | updateModal.style.height = "170px"; 191 | updateModal.style.overflow = "auto"; 192 | } 193 | updateModal.style.visibility = updateModal.style.visibility === "hidden" ? "visible" : "hidden"; 194 | } 195 | 196 | const forwardBtn = [forward_iconPath, forward_tooltipText, forward_ButtonClickAction, forward_id] 197 | const rewindBtn = [rewind_iconPath, rewind_tooltipText, rewind_ButtonClickAction, rewind_id] 198 | const webvideocasterBtn = [webvideocaster_iconPath, webvideocaster_tooltipText, () => { }, webvideocaster_id] 199 | const downloadBtn = [download_iconPath, download_tooltipText, download_ButtonClickAction, download_id] 200 | const updateBtn = [update_iconPath, update_tooltipText, update_ButtonClickAction, update_id] 201 | 202 | playerInstance.addButton(...forwardBtn) 203 | playerInstance.addButton(...rewindBtn) 204 | if (webvideocaster) 205 | playerInstance.addButton(...webvideocasterBtn); 206 | else 207 | playerInstance.addButton(...downloadBtn); 208 | if (!tampermonkey && version !== "1.3.0a") 209 | playerInstance.addButton(...updateBtn); 210 | 211 | // Definir URL e Tamanho na lista de download 212 | for (let id of [1, 0, 2, 3, 4]) { 213 | const sourceLang = getSourceLocale() 214 | dlUrl[id].href = video_mp4_array[sourceLang][id]; 215 | dlUrl[id].download = video_config_media['metadata']['title']; 216 | } 217 | 218 | // Funções para o player 219 | jwplayer().on('ready', () => { 220 | // Seta o tempo do video pro salvo no localStorage 221 | if (localStorage.getItem(video_id) != null) { 222 | const t = localStorage.getItem(video_id); 223 | document.getElementsByTagName("video")[0].currentTime = t >= 5 ? t - 5 : t; 224 | } 225 | // Mantem fullscreen + autoplay caso tenha sido redirecionado usando a função "A seguir"/"Next up" 226 | if (localStorage.getItem("next_up") === "true") { 227 | localStorage.setItem("next_up", false) 228 | // jwplayer().setFullscreen(localStorage.getItem("next_up_fullscreen")); <- problemas com fullscreen automatico 229 | jwplayer().play(); 230 | } 231 | 232 | document.body.querySelector(".loading_container").style.display = "none"; 233 | }).on('viewable', () => { 234 | updateWebVideoCasterAnchor() 235 | const old = document.querySelector('.jw-button-container > .jw-icon-rewind') 236 | if (!old) return 237 | const btn = query => document.querySelector(`div[button="${query}"]`) 238 | const btnContainer = old.parentElement 239 | if (btn(rewind_id)) { 240 | btnContainer.insertBefore(btn(rewind_id), old) 241 | btnContainer.insertBefore(btn(forward_id), old) 242 | btnContainer.removeChild(old) 243 | } 244 | if (is_beta && document.getElementById('player_div')) 245 | document.getElementById('player_div').classList.add('beta-layout') 246 | }).on('error', e => { 247 | displayError(`Mais informações no Console.\n${linkIssue(`Código: ${e.code}`)}`) 248 | console.error(e) 249 | }) 250 | .on('audioTrackChanged', () => updateWebVideoCasterAnchor()) 251 | .on('levelsChanged', () => updateWebVideoCasterAnchor()) 252 | .on('visualQuality', () => updateWebVideoCasterAnchor()); 253 | 254 | // Salva o tempo do video a cada 7 segundos. 255 | setInterval(() => { 256 | if (jwplayer().getState() == "playing") 257 | localStorage.setItem(video_id, jwplayer().getPosition()); 258 | }, 7000); 259 | })() 260 | 261 | /* ~~~~~~~~~~ FUNÇÕES ~~~~~~~~~~ */ 262 | // MP4 (download) - Premium: Obtem o link direto pelo trailer 263 | function getDirectFile(url) { 264 | return url.replace(/\/clipFrom.*?index.m3u8/, '').replace('_,', '_').replace(url.split("/")[2], "fy.v.vrv.co"); 265 | } 266 | 267 | // MP4 (download) - Grátis: Obtem o link direto pelo padrão 268 | function mp4ListFromStream(url) { 269 | const cleanUrl = url.replace('evs1', 'evs').replace(url.split("/")[2], "fy.v.vrv.co"); 270 | const res = streamrgx.exec(cleanUrl).slice(1).map(streamfile => streamfile && cleanUrl.replace(streamrgx, `_${streamfile}`)).filter(el => el !== undefined); 271 | 272 | if (res.length === 3) { 273 | const [el1, el2, ...tail] = res 274 | return [el2, el1, ...tail] 275 | } 276 | return res; 277 | } 278 | 279 | // M3U8 (assistir) - Premium: Obtem o link direto pelo trailer 280 | function getDirectStream(url, idx) { 281 | // TODO: assistir premium pelo m3u8 (por enquanto usamos o mp4) 282 | } 283 | 284 | // M3U8 (assistir) - Grátis: Obtem o link direto pelo padrão 285 | function m3u8ListFromStream(url) { 286 | return url; 287 | } 288 | 289 | // Checa se o URL do video_mp4_array[lang][id] existe e calcula o tamanho p/ download 290 | function linkDownload(id, tentativas = 0) { 291 | const sourceLang = getSourceLocale() 292 | console.log(' - Baixando (' + sourceLang + '): ', r[id]) 293 | let video_mp4_url = video_mp4_array[sourceLang][id]; 294 | if (!video_mp4_url) return disableDownload(id) 295 | 296 | let fileSize = ""; 297 | let http = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")); 298 | http.onreadystatechange = () => { 299 | if (http.readyState == 4 && http.status == 200) { 300 | fileSize = http.getResponseHeader('content-length'); 301 | if (!fileSize) 302 | return setTimeout(() => linkDownload(id), 5000); 303 | else { 304 | let sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; 305 | if (fileSize == 0) return console.log('addSource#fileSize == 0'); 306 | let i = parseInt(Math.floor(Math.log(fileSize) / Math.log(1024))); 307 | if (i == 0) return console.log('addSource#i == 0'); 308 | let return_fileSize = (fileSize / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i]; 309 | dlSize[id].innerText = return_fileSize; 310 | return console.log(`[CR Premium] Source adicionado: ${r[id]} (${return_fileSize})`); 311 | } 312 | } else if (http.readyState == 4 && tentativas < 3) 313 | return setTimeout(() => linkDownload(id, tentativas + 1), 5000); 314 | else if (http.readyState == 4) 315 | return disableDownload(id) 316 | 317 | } 318 | http.open("HEAD", video_mp4_url, true); 319 | http.send(null); 320 | } 321 | 322 | function getLocalEpisodeTitle() { 323 | const episode_translate = `${epLangs[user_lang[0]] ? epLangs[user_lang[0]] : "Episode"} `; 324 | const final_translate = ` (${fnLangs[user_lang[0]] ? fnLangs[user_lang[0]] : "FINAL"})`; 325 | 326 | if (series) { 327 | return series + ' - ' + episode_translate + video_config_media['metadata']['display_episode_number']; 328 | } else if (video_config_media['metadata']['up_next']) { 329 | let prox_ep_number = video_config_media['metadata']['up_next']['display_episode_number']; 330 | return video_config_media['metadata']['up_next']['series_title'] + ' - ' + prox_ep_number.replace(/\d+|OVA/g, '') + video_config_media['metadata']['display_episode_number']; 331 | } else 332 | return episode_translate + video_config_media['metadata']['display_episode_number'] + final_translate; 333 | } 334 | 335 | function fetch(url) { 336 | return new Promise(async (resolve, reject) => { 337 | await $.ajax({ 338 | async: true, 339 | type: "GET", 340 | url: tampermonkey ? tampermonkey_proxy + encodeURIComponent(url) : url, 341 | responseType: 'json' 342 | }) 343 | .then(res => { 344 | resolve(res.contents ?? res) 345 | }) 346 | .catch(err => reject(err)); 347 | }) 348 | } 349 | 350 | async function getConfigMedia(video_config_media, old_url) { 351 | if (video_config_media) 352 | return JSON.parse(video_config_media) 353 | else if (old_url) { 354 | const localelessUrl = old_url.split('/').length == 6 ? old_url.replace(/\.com\/[^/]*?\//, '.com/') : old_url 355 | const normalizedUrl = localelessUrl.replaceAll("--", "-") 356 | console.log("[CR Beta] URL universal:", normalizedUrl) 357 | const media_content = await getVilosMedia(normalizedUrl + '?skip_wall=1') 358 | return JSON.parse(media_content) 359 | } 360 | else return {} 361 | } 362 | 363 | async function getVilosMedia(url) { 364 | const htmlPage = await fetch(url) 365 | if (!htmlPage) return '{}' 366 | 367 | const startIndex = htmlPage.indexOf('config.media =') 368 | const initialConfig = htmlPage.substr(startIndex + 15) 369 | 370 | const endIndex = initialConfig.indexOf('\n\n') 371 | const config = initialConfig.substr(0, endIndex - 1) 372 | return config || '{}' 373 | } 374 | 375 | function toResolution(resolution) { 376 | return parseInt(resolution) >= 720 ? `${resolution}pHD` : `${resolution}p` 377 | } 378 | 379 | function disableDownload(id) { 380 | dlUrl[id].style.pointerEvents = "none"; 381 | dlUrl[id].style.cursor = "default"; 382 | dlUrl[id].style.filter = "invert(49%)" 383 | dlSize[id].innerText = "🚫" 384 | } 385 | 386 | function buildTracks(tracks) { 387 | return Object.entries(tracks).map(entry => { 388 | const [lang, track] = entry 389 | return { 390 | "kind": "captions", 391 | "file": track, 392 | "label": lgLangs[lang] || lang, 393 | "language": lang 394 | } 395 | }).filter(track => track["language"] !== "off") 396 | } 397 | 398 | function updateWebVideoCasterAnchor() { 399 | const playerInstance = jwplayer(); 400 | const castBtn = document.querySelector('[button="webvideocaster-video-button"]'); 401 | if (!castBtn) return; 402 | const locale = getSourceLocale(); 403 | let quality = playerInstance.getCurrentQuality() - 1; 404 | quality = quality === 0 ? 1 : (quality === 1 ? 0 : quality); 405 | console.log(`[CR Premium] Definido o WVC na qualidade de ${r[quality]}p`); 406 | let urlToCast = video_mp4_array[locale][quality]; 407 | if (!urlToCast) urlToCast = video_mp4_array[locale][1]; 408 | if (!urlToCast) urlToCast = video_mp4_array[locale][0]; 409 | urlToCast = "wvc-x-callback://open?url=" + encodeURIComponent(urlToCast) 410 | 411 | if (navigator.userAgent.includes("Android")) { 412 | let anchor = document.getElementById('jw-webvideocaster') 413 | if (!anchor) { 414 | anchor = document.createElement('a'); 415 | anchor.id = 'jw-webvideocaster'; 416 | anchor.href = urlToCast; 417 | castBtn.parentNode.insertBefore(anchor, castBtn); 418 | anchor.appendChild(castBtn) 419 | } else { 420 | anchor.href = urlToCast; 421 | } 422 | } else 423 | castBtn.onclick = () => window.top.location = urlToCast 424 | } 425 | 426 | function getSourceLocale() { 427 | try { 428 | const jwplayerLocale = Object.keys(lgLangs).find(el => lgLangs[el] === localStorage.getItem("jwplayer.captionLabel")); 429 | if (!jwplayerLocale) localStorage.setItem("jwplayer.captionLabel", lgLangs[user_lang]); 430 | const sourceLocale = jwplayerLocale ? jwplayerLocale : user_lang; 431 | const hasUserLang = streamlist.find(stream => stream.hardsub_lang == sourceLocale); 432 | return hasUserLang ? sourceLocale : 'off'; 433 | } catch (err) { 434 | displayError(`Os cookies ${linkIssue("estão desativados", "51#issuecomment-1190684190")}!`); 435 | throw err; 436 | } 437 | } 438 | 439 | function linkIssue(text, issue = "") { 440 | return `${text}` 441 | } 442 | 443 | function displayError(info) { 444 | const msg = "Erro ao carregar o vídeo! (>﹏<)\n" + info; 445 | const loadingIcon = document.getElementById('player-loading'); 446 | const errorIcon = document.getElementById('player-error'); 447 | const loadingText = document.getElementById('loading-text'); 448 | const jwErrorText = document.querySelector('.jw-error-text'); 449 | loadingIcon.style = 'display: none;'; 450 | errorIcon.style = 'display: block;'; 451 | loadingText.innerHTML = msg.replaceAll('\n', ''); 452 | if (jwErrorText) jwErrorText.innerHTML = msg.replaceAll('\n', ''); 453 | } 454 | }); 455 | 456 | -------------------------------------------------------------------------------- /assets/js/search.js: -------------------------------------------------------------------------------- 1 | // ignore esse arquivo, é só para pesquisar se cair dnv 2 | 3 | const axios = require('axios'); 4 | const atob = require('atob'); 5 | const btoa = require('btoa'); 6 | 7 | const fs = require('fs'); 8 | 9 | streams = [{"format":"adaptive_dash","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LC51cmxzZXQvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2ODQyNDY1fX19XX0_&Signature=kReipApB2aYaaoSKtpr0uhK4PJ9VW3M52L8z-KA48QqUCizk6IxCtn65an3YsOWubT0lY0NrJ0glO1pp6a2E3UkWhgs-SxhKZrD~wryh0u5UO1j5wDX5D1b9JUZYQJQ6lSQyy2Z7HNuJRzx9oCi726GnzCKSQp-JmQyMYMo7BcXc8L6PmAOppcmWyzV0xc7kbfmzAbnhk0VwxvEel0xpyW4uZUbZsq7yuxG57fgrDVyMg2dvNCLBasfgbzb892Q-7yBAquhiYP8xlmb2O6KQ-jmN2331-o59~qMIyF9oV8N~uxhBVQ~5PHO0BCodMnzIdGn8LjRp8D6EewKz5Hqwog__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"adaptive_hls","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LC51cmxzZXQvbWFzdGVyLm0zdTgiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY4NDI0NjV9fX1dfQ__&Signature=tK2x5JjCbHdpe2nFmkVOffBs~UddPD2B46oS5SqNWskLQowP9kC0~djKTKlDvQetc8yMmQ7Dd2Mo3kXY4TWzyHEUt1mxpYi3SRC~2F0w5cIAyisPm1DdYgNW7ah1rCF~KoP6I~pkwCNaF5rzkT4Bywq1bc5LdvC1WJ-uZ2hagQc7BYosj4fGsTl3g7w2wtVZkC39Q773EQrL4QDY5WemDFZFlQkJKckE6TmscpC6OtrieHApfT~GmCXRYPgV94aMtY6qrTx-K1AQWJ92bD2yizJM7kALpMLD-0lMd-jaAdvcEYALyVVPRrQuUquy-94Rvgjyw0y8yd0lkexzpKv85Q__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"drm_adaptive_dash","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY4NDI0NjV9fX1dfQ__&Signature=iRVQ3xk4m7xKHbXAX04hTBf6A9D2lDtRFzMOphgfLoxYRER6qN3WE9NPCXG6IVfHRxCmWFZJ5eTCexoEsZB~aIgEeJI4ZAsVW4mUGHQi36yqsGCBWMnNRC44YyAZcEegsnN6frBTmNzli8K5GUE8iBuyVN6yTtiCOoNQDaovzvTlgSAwIA6AO-p0N-nz1~zf8GMgCXVZ3eyMVCAToJixB8Ea0ogISX-4b0caGsBvW6b7EthNa4A16zL1t9UIpMy1XAlPE0aAZUspqZzHsqP6TEZ7bP3aK1aKH1E9tvR8zuR2zqOnqlGwrU8C5f9x~whmaoMbo26tH2m5B3YGd~h6mg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"drm_adaptive_hls","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjg0MjQ2NX19fV19&Signature=Ac96MTl7Ch703zVXoxb~FIv9Ciq6GTV5uoyqCZXbsur2eAEZz4JtnQ-65-LxqeYS3MgSi6-AS6oQ60lSoMi0yryN4HxIBq6Gbg151fRAq-ZB9pua3PveDpAxIJkr3dHWcbGQ3~fGBJz37rdnuvG1eKeUEv6~dsyAVssO7o3GcvphaVScZVjKHiXlBENJqDHkA0Bcm2-j-jm3yMMON6kMP728FhWHAOm26JEiCyt2VhsYgUtKZOaSvNtXRE0oE0gtKw1A0fb6FX3sHFJ6tZJ0oGCvLCN0YyHyI6BzNS6I7lITl6uEx8LQ0D6m2yecOxxUflcHJB6HR5KK6dZUTIymQA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"drm_multitrack_adaptive_hls_v2","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,243319.txt,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsMjQzMzE5LnR4dCwudXJsc2V0L21hc3Rlci5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2ODQyNDY1fX19XX0_&Signature=mPWW6OgLzvKEUVQ2nOeiuX3l87bQk2I81fyjU0uS~1jurt3J1M5Pdayzg~CBKJ2cFDGedW7np0fBJy3Ye-enkSPKxdapIyeTj3ygkJVJ-fwl6G5tR-cpGglvDUAqfQHwlMF-kM~UHFe-FiVaylrwxJgg41952IDYkNdxX-4Mf8RIJmUSWunMv7ep4Wm0gkQ04r~k8okG14NbnwYRL~V-I4Q4CePNP-Ku0cLKpTJLx91YeMEieTzSSbKH~megJu80lHFQuDUx~8dM0CaEWVMD-48H867WCkirpabHm8fSYnt9K9tgHNsgMdITK0~F~TbmQJggO78q~tfkV7RTbZhoAw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"multitrack_adaptive_hls_v2","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,243319.txt,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LDI0MzMxOS50eHQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjg0MjQ2NX19fV19&Signature=UXs2p7SYHEedDzTFBeE-1zbp~kRvIiPamQaRoNJjLF~3FdVRTCEAfCd9ugr2RJLowZDaWgDtLSxag6R0nPfyKXove8nycmSyp7DYok32rnfeNBC0sXwsAep~V65GLT6NoyPnB3BN7wPFQQjnO9i8jrYxeDEGOltjITvXz2S3Vx5eF5wlGw-bvgWDIV8IWDFAy6eQuOQ9lRnfSjU0SFRMRzR-FTNC1wQDDsLPKmcYZW-Tzjb3-pvbDP47Ek2Ev-TyzRit7a2NYHyBZ4q-oB46ba5jKaKTnvDyWhyxFEoNBhQHqTeAUpxfmiBA5og5dlqJzaXEsyKNwPhWLLEkbal2PA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"vo_adaptive_dash","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://v.vrv.co/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2RiNGMyNmNmZWU0NDlhZDdmMDg1OThjOGJiZjJlYWM0L2Fzc2V0cy84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY4NDI0NjV9fX1dfQ__&Signature=d0d-ZNvubALDubvRYlg1uO7xLfBVpcW~Wo0cwsqtROomh9VAH559ux~AuiegsaSuh9WOOSzxa0zx7caLjovuBDbsgzcyFfA~QNl2qhud8klbeKvF2JgwgfEndEGllaZOGwvNOb5gEk~8NicKItn7WCmpQD2dTwo6PzmCzAaBSf0g1Vrgb4UTud6mMNkT3CkLURw5ctjPNxSKEQ9nTShp-wtw33KOjN4F3aAUuWDumHU0Fdi84LjPFYpjnDjuVdsKpnK6TJn89M~ANkfXi~L5OMGwJGsHssAGjgckg4z0BXgONUp6RJZWsLPyaUk7x-1xomNxxqwNJnGu5~nGa345yQ__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"vo_adaptive_hls","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://v.vrv.co/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2RiNGMyNmNmZWU0NDlhZDdmMDg1OThjOGJiZjJlYWM0L2Fzc2V0cy84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjg0MjQ2NX19fV19&Signature=cB~oVHUIAv~sDp3TwjKZ0pTAtl6Pkyx9i2h0co~QSrXmS3GRZkanFyUxP2TfDSvKJcadynUY3Ttt3wL07tEBlxkvOk82K7LbiYCjV8tpLhll7bcm791~esofXIKZs~RNt0ndZmhohqJlx2FYBTaXiQQWL30V~C4PjtobSxXIHKQb-ZHL7gsWRKZBKhd~YasFFU7rnCujjoQlHMmYN5ALuCySFIVlW9Ap6K4avAI2EHTXsmJB3AlwkdPrPBxeDyAGSRCdVwtAvkQABR6dsl5sjdZMEnKPAOhYOVCXDMnf3XcCqHX5GUDjf88RMyhDtxax46RNINQleNTVMCeDJGCfYg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"vo_drm_adaptive_dash","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://v.vrv.co/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2NmYzdmYjAxNWZkNTA3ZDNmZGZhZDUzYzEwODQzNzEzL2Fzc2V0cy9wLzg4NGMzNjM5NWQzNDYwNjJlNjY0ZDI4NWVjNGFhNmVhXyw0MDAzNzkyLm1wNCw0MDAzNzk2Lm1wNCw0MDAzNzg4Lm1wNCw0MDAzNzgwLm1wNCw0MDAzNzg0Lm1wNCwudXJsc2V0L21hbmlmZXN0Lm1wZCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjg0MjQ2NX19fV19&Signature=GDa~vIjfXP8tLHqOOslYWKczsDncx9j5G5RYJq1H4wpXZx2y~ezPWkLA7lU-SHbpVANFSZAVySpm~hX1vzLu9I1j9Z3tGHhcNPIL7YCkblit~lbMoc1qxFmJKiOWGEqDmy9CBREi5QYNiZyz45CmuX9YkgsiL8lS52Ebr8pwfqw4c9i2mY9ORHHvcEVdh8UCecQyUZmCkEbJK29O2SVldaMMHOr2t3zuV3XqxW~x5ipE3KY91NsOomjX3hv2Shc6IzvhCHiJ9G4-NMY64zxcmWlwPhA-5EJcbNCMVrp3g6L~NQZ9ZLHR7YHkQSCBddbUgz2IQH~2QVNKJsd6WB6n-A__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"},{"format":"vo_drm_adaptive_hls","audio_lang":"jaJP","hardsub_lang":"ptBR","url":"https://v.vrv.co/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2NmYzdmYjAxNWZkNTA3ZDNmZGZhZDUzYzEwODQzNzEzL2Fzc2V0cy9wLzg4NGMzNjM5NWQzNDYwNjJlNjY0ZDI4NWVjNGFhNmVhXyw0MDAzNzkyLm1wNCw0MDAzNzk2Lm1wNCw0MDAzNzg4Lm1wNCw0MDAzNzgwLm1wNCw0MDAzNzg0Lm1wNCwudXJsc2V0L21hc3Rlci5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2ODQyNDY1fX19XX0_&Signature=hRUjc3hhujXzfky4XQfSo8Fa~JbiQzLgP2tr54sxv3F~iWCU3~DofEqB2nN8gtrq9JVt806ezMWjaHChLKKAge9boywKBE8zSplQDhlE5DvhcczCqSQQ9mddxV8D75qx8Y5J~~QkZsUwfSrXzSQa~pr1C1y4FHHXt3AZMSGqn6mXvZQDBReMzj8JYSeyOrpwYMkGay72F--wo3CgHMJyNwO2Lq5acjRJ539i9HwGqd~ZCwLv5WJpoXfDGo~F2BtHDkJKtKmrcvXz2u0D7zV3ELCXvv3yhu2lkJWAxfG3ublOiTlBGwwJtOuamJXXaZJroRqApYdJNEyRQUNFqByxBw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA","resolution":"adaptive"}] 10 | 11 | // str=`https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LC51cmxzZXQvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2NzE4MzgxfX19XX0_&Signature=Me9A1hTatQC-Z6MjkldrwqDThwgdnGAKp72auK1Qju1d-gAwPflihXZ3mLynCnxlV8bH6DgvkMZaMeaRBkoETAwvgjpDoarM~HOenEuERkmlICCq4UbwBtyTeDGrGsMTNiSo~-ia0z3nk~EmAxV0tSNfL6h-~NWvkeNBjK9TTkYw-6Led4f2lNRYCeQMAWTYVMYuxKHqCGitecd4Xn4DgepHnmH6qIyQk-Srt7oTj4Q4OTm5RAland42f8-6hpl18Ma9bGnA63wgRar23QXB3uvlLpewVLfI08CD1rYHjP6s62yELVTJMLRhQidIZ0MZfaMm3V80NtA4H9uW4RZsQw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 12 | // https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LC51cmxzZXQvbWFzdGVyLm0zdTgiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=WnHn5dl-VpQa64hD58bRKGielQImaXhQlV2RS-L6N07C7cSWUlbhSaWpImS7VnEZbt1hKMdTyBbAOVCoHsZ4-V-0KZ~9ms5PdSgrQHgxKlc5S4pLfFyaU6fAXkc7QzasN1Icu9oBpkdzs83TJi1jAi220b3ZL6a1PSH-rUQafXiKx89RtFcRwwy0mI71hSMvvbtYw2GGapK-6sti5EV6qpYhhZDltEsPvAmCQ~Z~~NHKxD1FL~7q66KTW301RVzzDAAaCKmsEX-lROKtdJLg~eGiCo9Lg6taemSYFr~T4k7OjyPC~qY5a5IOYyhxb46tIXHnKi-QoZbgb-5ka7k9sA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 13 | // https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=iV~LmCD09qB8Y2atJJIseCjX1VPPoMWG0KCZl~CcxJazIKIrkSNuZK8DyDIxi5bn1iO9d0iVERotBkV0BHY1S2q2hUKr05glajKPRYCg4yt6YV7~xn2eIY83iqu3PUpW4imzatKmKdrrtV8yoRMyIVfz2xmos8gT-aYjaFFI7ddu7nL9UEJ3h2lAte3zOPBL0cRuiF~znTLK4BujvKO2NQr4PMCDak5ikWccPaOBvirzuvg6DAqtzqI1h3N5WYtbPCR1SfKPP-jVs214ZX6iMAoSxVV1XbUBPr13tHQB4Xbu6f~72oR-~~UQFhdXVGJgvkGLmm8CZfW-zM7LcYFSvg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 14 | // https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=cdT1tFBH9BudyeZ~Cx9EgwyuETw-fCHpjuGLEtNXvcgjAAh0A8sCFondK00m~JgcZC2bH44AoJ7zwS0XVozd01wJK7WWqGDXeaqeJiA1xi7M2Q5iOHQE7K767CAPDEGWReV2f2OViWK2jAZM95ZJwhEEuPMvtEBXtEVbJ9ot9iz-fkf5RXkY0w3S4keObdluQ9gzs6dtBULM1ZxEoUqpbTWa4jTyMp04ytCM15kEWNlBwKhbIEnRzvSC0lJVts5x~V1aaRUGcHWwrxS5Q85QSbs2HEYGgCkXC2j9yDrPnLvdw6zAL69XCb9izlcmSqTVWXNPo7Cz1jI2o4dWFq9mQg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 15 | // https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,243319.txt,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsMjQzMzE5LnR4dCwudXJsc2V0L21hc3Rlci5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2NzE4MzgxfX19XX0_&Signature=EOL6E8bH5BnX4~740OyVLPwsVL6CDM3y1W39ByWukP48qyyAxAC4OSLlbQDXxGZebgkgzDCbY0Qw8Mh5qsQTg-uuGQ7l-6cQlBQs7eXu0GPwKOjD7f2sUE3dpDufQh2lQo2gDsMC6Stgf5c2h8-HXhJMZPqOrAevoQj6xQCbgxuEODiLI7bcjPOqulXmANbMN21cN80Yo2dEqYFQUAZ-kCa5kZramn5rZSPeH5HTVfvITDnwdYMqTCRcdSJ5CeTLlqGDBgVg9kBlx6sv4IkPZsYqvDCbtagRmoHdfRPEgFmKanFX4tzD8f0GlF-nBhYDFayr8pCN5K4SlIai~MBMUw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 16 | // https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,243319.txt,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LDI0MzMxOS50eHQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=C0tjTCjl5E4xb1lpKzOZAbBbgMgifArEAUgdA1Jam-3d11qBs5TFnXporUgK5YVOV-mIT3xRmysjl7thHfMSXwlejWCSKxaJMe4A80NJIJ65NedPyCYEdr7J7662ffZ02opkEXMrrz9oWcT7b~orkh6H7oF7RfMlHxJ5z71473Pz~WARsdS5dhdyyw4lln7QvyDOebxBp0aaumXW2w6oD2y9GT~~egyMRYIU6Sh1i0c9jyKXtZJAXQBIDv6~R1~RPhxrxtyPVYfYV2DfqxNeZ18Llma-VxJvC1w~mi34b6OqWQQyv9~KxbPrabJPsuQZvo7VjRfFGd3~5hm5-2CODQ__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 17 | // https://v.vrv.co/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2RiNGMyNmNmZWU0NDlhZDdmMDg1OThjOGJiZjJlYWM0L2Fzc2V0cy84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=DH6Kd9fIos44dxBj-FXvNwXHer5Qtnv-QH4kt5Oml2EhOM7XAQtoMZoOOhzKMX2r7eZheHgFLsUXuQroI6aEENpoJZYeFCRqYUiJZVb1UDOLFUM4JTr8hwFPU8rdGMQ5ggLAj0IzgLpAQsWnOcrn-rTSysWPN~ZPQaHyFCL~eOmD05tz79y0M2-TpX9C6mEWUMeEOVXlZnHRTK1Q8LhcvNKnQ450XmHGV~708R5-P4xfvzccG~5gdzPJLbSS-qQedJlZ888nXypRok~Kz7SNGsV~KaeeAUBBXamKp0PPTJ0ik-jS3kavfKj-gqhRVUAlyRudoCqLDuYWSYFbMgbmXA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 18 | // https://v.vrv.co/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2RiNGMyNmNmZWU0NDlhZDdmMDg1OThjOGJiZjJlYWM0L2Fzc2V0cy84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=NnTOStyuce-dVPWc6monjxjWYBhlFoemHjGc8s3q1snIhi5qveF4tfqT~XZ3b7H93~KFQeDftuXhg8KFbWJUsjefMBiTyJcjayorj6lIBgMiNCuTtT2i-qSHYLENfffK3TFYrC51CmZTOkI6ngfvlKD~ajWr7L1N0sh8Nj4hH~pnpmpyg4SEheaJ~xUw87exysl42owVe1yiFj2ozUDh9b0O90xdIZhvgjkPxEC6EOedDb7ANWLu8eQ4q0Y-N-gWPATLo0Dht-pNTp0NMGpjGn6vNlmuuoX5uQJP02bPrb4HIXuuuu4OgkJJE~SwvZiqjuZ5BC7gCCsJs1NFjGcnow__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 19 | // https://v.vrv.co/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2NmYzdmYjAxNWZkNTA3ZDNmZGZhZDUzYzEwODQzNzEzL2Fzc2V0cy9wLzg4NGMzNjM5NWQzNDYwNjJlNjY0ZDI4NWVjNGFhNmVhXyw0MDAzNzkyLm1wNCw0MDAzNzk2Lm1wNCw0MDAzNzg4Lm1wNCw0MDAzNzgwLm1wNCw0MDAzNzg0Lm1wNCwudXJsc2V0L21hbmlmZXN0Lm1wZCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=ofK5Lo6oBgV5MT0Z35DbrWH49iAW6SwOn0IqF0Vty4uhpOO3XgL49WImIUw-iD3Noq9b1EduSyY3qCZJStiXsctlG-pkKB0jv3gtFWbwzwZ4cKBEivhlafC5Qn-ZHmkb5rLj1aVWONEe4tDnayOxTFOXBJTDq~mnjtds52N5jK2mftpsFs~ky2JdrUU-LmEWIA-Gys809Poi7reVu2b9hqevOoyg35TgmatrSYzD3EpbpDGWeDJK6FfFod84jLebbj5CzFoiwCSQsdkbe633ZiIPDxp3Ahe-K0aQSJF87atYUqeJxiuPUVyJ2mBLY00SoXo8ME3qoQYPIN7s0UyKzg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 20 | // https://v.vrv.co/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2NmYzdmYjAxNWZkNTA3ZDNmZGZhZDUzYzEwODQzNzEzL2Fzc2V0cy9wLzg4NGMzNjM5NWQzNDYwNjJlNjY0ZDI4NWVjNGFhNmVhXyw0MDAzNzkyLm1wNCw0MDAzNzk2Lm1wNCw0MDAzNzg4Lm1wNCw0MDAzNzgwLm1wNCw0MDAzNzg0Lm1wNCwudXJsc2V0L21hc3Rlci5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2NzE4MzgxfX19XX0_&Signature=ItMbS6Iy1TZz~T3rOIbzBCxY6SQv~NR9WHs3bv1l9rukspAKmDXUP9t8kYMbRwglzbf4xAEFPxvt0m9mQs8uWnaQSatYYqajc1E8GCT9C6wjVhJzYZRRBnW-meqbivpelx-Un~sU9QOcLrCoXjIJfAM6zTmf5uPSHpuzL5NezAkrnzqq41v1z201shju19N9KT68pcAWODz4rrLjIUw5UFk5hFTRR6cmXokVDJ1VkDeaTihZXuIrnc3z-v946Bw~A9hlkUpEQcOGdWgcAqBxVGh6YQ7wDXE88QIaVBDkXpbzrzShT0J7pfZNXfKM0s-m5LYtYiOxHMUGsiygYZTifA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA`; 21 | 22 | // works=`https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003435.mp4,4003436.mp4,4003434.mp4,4003432.mp4,4003433.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzQzNS5tcDQsNDAwMzQzNi5tcDQsNDAwMzQzNC5tcDQsNDAwMzQzMi5tcDQsNDAwMzQzMy5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=L39YqmXEJKfKwowvSTtiYhLLkbGCJBxjPwK8AtK1gbosPUCm0Xa8PLoFvkROFZIKv0q~O12e4ajWOePEVcXjzkhMZXNo2z7HWKYjq7XpmCw3EAAILEguuMQ-T8w1wKVeFfBiGzDR1yKl7ivORSxTC8zarFaMKNl5yY--WDqiyobsEeCA-drKp4pqC9LX1YDI8fhKYazBSnM4GSobnetwUje6Xo2GJgoki8KWjaO1VxpmYZzYnwadZNnuhx1CMu9fLyWYzR3I7hpUf2haSL9mCt6PIxWIVLwBiWiLWblMqfp6UaO2KYfMj1Pw41c0388YZNUuzf9mI1e6S6gbVprddA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA` 23 | // urls = str.split('\n'); 24 | 25 | // drm_adaptive_dash || drm_adaptive_hls 26 | for (let s of streams) 27 | if (s.format !== 'erm_adaptive_dash$$$$$$') { 28 | let manifest = s.url 29 | .replace("v.vrv.co", "dl.v.vrv.co") 30 | .replace("pl.crunchyroll.com", "dl.v.vrv.co") 31 | .replace("dl.v.vrv.co", "v.vrv.co") 32 | .replace("master.m3u8", "manifest.mpd") 33 | .replace("evs1", "evs") 34 | .replace('assets/8', 'assets/p/8') 35 | manifest = remakeUrl(s.url) 36 | .replace("master.m3u8", "manifest.mpd") 37 | //.replace('assets/p/', 'assets/') 38 | // AAA.replace("master.m3u8", "manifest.mpd").replace(AAA.split("/")[2], "dl.v.vrv.co").replace("evs1", "evs"); 39 | mafinest = s.url 40 | .replace("v.vrv.co", "dl.v.vrv.co") 41 | .replace("master.m3u8", "manifest.mpd") 42 | .replace("evs1", "evs") 43 | 44 | //lookup(s.url); 45 | } 46 | lookup('https://pl.crunchyroll.com/evs/6b243432d3d162b08e3e3c256910a358/assets/6b243432d3d162b08e3e3c256910a358_4015612.mp4/clipFrom/0000/clipTo/120000/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzLzZiMjQzNDMyZDNkMTYyYjA4ZTNlM2MyNTY5MTBhMzU4L2Fzc2V0cy82YjI0MzQzMmQzZDE2MmIwOGUzZTNjMjU2OTEwYTM1OF80MDE1NjEyLm1wNC9jbGlwRnJvbS8wMDAwL2NsaXBUby8xMjAwMDAvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2OTQ3MDU0fX19XX0_&Signature=WkqyfbEuAxDdnD4cKSf8xRZV2gDXmgmbitdauqz8l6QdXrt3Aq9GOohJbIqhRltJa~VSy~wmKwlmheJNSdy8HBais0wMOl~dOWHX3QqbhouU2Liet9RB0V7bhN-0VbyBDY06Cx1f22gbalf9GWsA1lDqvA419SvPLr8NQXqB45YujNbnrNKRtkQYJjvuwW-uJbPdvdTgQUtxm3EqBvzIRKK9ij6dClf20AOgBMXNAEk0YL-mOegp6t9btQBMe~KRc~lN3u-JoZ~0ghYvkM3U-tc2b0xf5RHUE7hq-GvAHJX6j8HHYAdSqOcl4cjCCP8xU5bKZP-X9n4EzrmUyvEvsg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA'); 47 | 48 | 49 | works = [1, 3, 8, 9]; 50 | works = [1, 6, 7, 8] 51 | //lookup(streams[1].url) 52 | 53 | const r = { 0: '720p', 1: '1080p', 2: '480p', 3: '360p', 4: '240p' }; 54 | 55 | let curfs = 0; 56 | function lookup(current_url) { 57 | video_dash_playlist_url_old = current_url//.replace('pl.crunchyroll.com', 'v.vrv.co'); 58 | video_dash_playlist_url = current_url 59 | 60 | axios.get(video_dash_playlist_url_old).then(result => { 61 | const data = result.data; 62 | fs.writeFileSync('./fs' + (curfs++) + '.xml', data) 63 | 64 | const auth = pegaString(data, '\\.(?:mp4|m4s)\\?', '"', 0); 65 | let params_download_link = htmlDecode('?'+auth); 66 | params_download_link = params_download_link.replace(/&t=.*$/, ''); 67 | params_download_link = params_download_link.replace(/(&|\?)Expires=\d+&/, '$1') 68 | if (!params_download_link) return; 69 | 70 | function linkDownload(id) { 71 | let video_code = video_dash_playlist_url.split(",")[id+2]; 72 | let video_mp4_url = video_dash_playlist_url.split(/_(?:,|\*)/)[0] + "_" + video_code + params_download_link; 73 | let links = []; 74 | 75 | // ALTERNATE 76 | video_mp4_url = fixPolicy(video_mp4_url, '1769000').replace('120000', '1769000') 77 | //video_mp4_url = fixPolicy('https://pl.crunchyroll.com/evs/6b243432d3d162b08e3e3c256910a358/assets/6b243432d3d162b08e3e3c256910a358_4015612.mp4/clipFrom/0000/clipTo/1769000/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzLzZiMjQzNDMyZDNkMTYyYjA4ZTNlM2MyNTY5MTBhMzU4L2Fzc2V0cy82YjI0MzQzMmQzZDE2MmIwOGUzZTNjMjU2OTEwYTM1OF80MDE1NjEyLm1wNC9jbGlwRnJvbS8wMDAwL2NsaXBUby8xMjAwMDAvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2OTQ3MDU0fX19XX0_&Signature=WkqyfbEuAxDdnD4cKSf8xRZV2gDXmgmbitdauqz8l6QdXrt3Aq9GOohJbIqhRltJa~VSy~wmKwlmheJNSdy8HBais0wMOl~dOWHX3QqbhouU2Liet9RB0V7bhN-0VbyBDY06Cx1f22gbalf9GWsA1lDqvA419SvPLr8NQXqB45YujNbnrNKRtkQYJjvuwW-uJbPdvdTgQUtxm3EqBvzIRKK9ij6dClf20AOgBMXNAEk0YL-mOegp6t9btQBMe~KRc~lN3u-JoZ~0ghYvkM3U-tc2b0xf5RHUE7hq-GvAHJX6j8HHYAdSqOcl4cjCCP8xU5bKZP-X9n4EzrmUyvEvsg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA', '1769000'); 78 | //video_dash_url = 'https://pl.crunchyroll.com/evs/6b243432d3d162b08e3e3c256910a358/assets/6b243432d3d162b08e3e3c256910a358_4015612.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzLzZiMjQzNDMyZDNkMTYyYjA4ZTNlM2MyNTY5MTBhMzU4L2Fzc2V0cy82YjI0MzQzMmQzZDE2MmIwOGUzZTNjMjU2OTEwYTM1OF80MDE1NjEyLm1wNC9jbGlwRnJvbS8wMDAwL2NsaXBUby8xMjAwMDAvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2OTQ3MDU0fX19XX0_&Signature=WkqyfbEuAxDdnD4cKSf8xRZV2gDXmgmbitdauqz8l6QdXrt3Aq9GOohJbIqhRltJa~VSy~wmKwlmheJNSdy8HBais0wMOl~dOWHX3QqbhouU2Liet9RB0V7bhN-0VbyBDY06Cx1f22gbalf9GWsA1lDqvA419SvPLr8NQXqB45YujNbnrNKRtkQYJjvuwW-uJbPdvdTgQUtxm3EqBvzIRKK9ij6dClf20AOgBMXNAEk0YL-mOegp6t9btQBMe~KRc~lN3u-JoZ~0ghYvkM3U-tc2b0xf5RHUE7hq-GvAHJX6j8HHYAdSqOcl4cjCCP8xU5bKZP-X9n4EzrmUyvEvsg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA'; 79 | //video_dash_url = video_dash_url.replace(video_dash_url.split("_")[0] + "_", video_dash_url.split("_")[0] + "_,"); 80 | //video_mp4_url = video_dash_url 81 | 82 | links.push(video_mp4_url); 83 | links.push(normalize(video_mp4_url)); 84 | links.push(useEvs1(video_mp4_url, true)); 85 | links.push(useEvs1(video_mp4_url, false)); 86 | links.push(useEvs1(normalize(video_mp4_url), true)); 87 | links.push(useEvs1(normalize(video_mp4_url), false)); 88 | links.push(useP(video_mp4_url, false)); 89 | links.push(useP(normalize(video_mp4_url), false)); 90 | links.push(useP(useEvs1(video_mp4_url, true), false)); 91 | links.push(useP(useEvs1(video_mp4_url, false), false)); 92 | links.push(useP(useEvs1(normalize(video_mp4_url), true), false)); 93 | links.push(useP(useEvs1(normalize(video_mp4_url), false), false)); 94 | links.push(useP(video_mp4_url, true)); 95 | links.push(useP(normalize(video_mp4_url), true)); 96 | links.push(useP(useEvs1(video_mp4_url, true), true)); 97 | links.push(useP(useEvs1(video_mp4_url, false), true)); 98 | links.push(useP(useEvs1(normalize(video_mp4_url), true), true)); 99 | links.push(useP(useEvs1(normalize(video_mp4_url), false), true)); 100 | 101 | // DIRECT 102 | links.push(video_mp4_url); 103 | links.push(useP(useEvs1(normalize(video_mp4_url), true), false)); 104 | links.push(useP(useEvs1(video_mp4_url, true), false)); 105 | links.push(remakeUrl(video_mp4_url)) 106 | 107 | if (!isValid(video_mp4_url) && false) { 108 | console.log('---------------- BAD POLICY ----------------') 109 | console.log('url: ', getClean(video_mp4_url)) 110 | console.log('policy:', getPolicy(video_mp4_url)) 111 | console.log('p: ', getPolicy(video_mp4_url, 4) === getClean(video_mp4_url, 4)) 112 | return; 113 | } 114 | 115 | let i = 0; 116 | for (link of links) { 117 | const staticlink = link.replace('http*', 'https')//.replace('/120000/', '/1769000/'); 118 | setTimeout(() => { 119 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'v.vrv.co')), 0) 120 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'pl.crunchyroll.com')), 500) 121 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'dl.v.vrv.co')), 1000) 122 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'a-vrv.akamaized.net')), 1500) 123 | }, i * 2000); 124 | i++; 125 | } 126 | } 127 | 128 | //for (id in r) 129 | linkDownload(1); 130 | }).catch(err => { 131 | console.log('---------------- EXCEPTION ----------------') 132 | console.log('isValid:', isValid(video_dash_playlist_url_old)) 133 | console.log('url: ', video_dash_playlist_url_old) 134 | console.log('throws: ', err) 135 | }); 136 | } 137 | 138 | function search(manifest, video) { 139 | axios.get(video).then(r => { 140 | console.log('-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-! FOUND !-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-') 141 | console.log(video) 142 | }).catch(err => { 143 | console.log('---------------- NOT FOUND ----------------') 144 | //console.log(video); 145 | console.log('playlist:', getClean(manifest)) 146 | console.log('to: ', getClean(video)) 147 | console.log('code: ', err.response?.status ?? 0) 148 | }) 149 | } 150 | 151 | function isManifest(url) { 152 | return url.includes('manifest.mpd'); 153 | } 154 | 155 | function useP(url, condition) { 156 | if (condition) return url.replace('/assets/p/', '/assets/') 157 | else return url.replace('/p/', '/') 158 | } 159 | 160 | function useEvs1(url, condition) { 161 | if (condition) return url.replace('/evs/', '/evs1/') 162 | else return url.replace('/evs1/', '/evs/') 163 | } 164 | 165 | function normalize(url) { 166 | return url.replace(getClean(url, 4), getPolicy(url, 4)); 167 | } 168 | 169 | function isValid(url) { 170 | try { 171 | const policystr = getPolicy(url).slice(0, -1); 172 | return getClean(url).startsWith(policystr); 173 | } catch (err) { 174 | return false; 175 | } 176 | } 177 | 178 | function getClean(url, slashPos) { 179 | const resource = pegaString(url, '^', '\\?') 180 | if (slashPos) 181 | return resource.split('/')[slashPos]; 182 | return resource; 183 | } 184 | 185 | function getPolicy(url, slashPos) { 186 | const str = atob(pegaString(url, 'Policy=', '_*&')).replace('http*', 'https').trim(); 187 | const stt = JSON.parse(str) 188 | const resource = stt.Statement[0].Resource 189 | if (slashPos) 190 | return resource.split('/')[slashPos]; 191 | return resource; 192 | } 193 | 194 | function fixPolicy(url, toClip) { 195 | const policy = pegaString(url, 'Policy=', '_*&'); 196 | const str = atob(policy).replace('/120000/', '/'+toClip+'/').trim(); 197 | const newPolicy = 'Policy=' + btoa(str).replaceAll('=','_') + '&'; 198 | return url.replace(policy, newPolicy); 199 | } 200 | 201 | function remakeUrl(url) { 202 | const policy = getPolicy(url); 203 | return policy + '?' + url.replace(/^.*\?/, '') 204 | } 205 | 206 | function htmlDecode(input) { 207 | const decoded = input.replaceAll('&', '&'); 208 | return decoded; 209 | } 210 | 211 | function pegaString(str, first_character, last_character, pos = 0) { 212 | if (str.match(first_character + "(.*?)" + last_character) == null) { 213 | return ''; 214 | } else { 215 | matches = str.matchAll(first_character + "(.*?)" + last_character); 216 | while (pos --> 0) 217 | matches.next() 218 | new_str = matches.next().value[1].trim() 219 | return (new_str) 220 | } 221 | } 222 | 223 | function getPolicy(url, slashPos) { 224 | const token = pegaString(url, 'Policy=', '_*&'); 225 | console.log(token) 226 | const str = atob(token).trim(); 227 | const stt = JSON.parse(str) 228 | const resource = stt.Statement[0].Resource 229 | if (slashPos) 230 | return resource.split('/')[slashPos]; 231 | return resource; 232 | } 233 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Crunchyroll Player 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 20 | 21 | 22 |
23 |
24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |
Seu video iniciara em instantes (^-^)Aguardando dados da stream..
32 |
33 |
34 | 62 | 79 |
80 | 81 | 82 | 83 | --------------------------------------------------------------------------------