test: improve fetch fixture handling

This commit is contained in:
WebStreamr 2025-05-10 19:27:52 +00:00
parent d7422746ce
commit 05c0163874
No known key found for this signature in database
27 changed files with 332 additions and 333 deletions

1
.gitattributes vendored Normal file
View file

@ -0,0 +1 @@
/fixtures/** linguist-generated

View file

@ -19,10 +19,10 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap" rel="stylesheet">
<link href="https://dropload.io/assets2/css/style.css?v=2" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src="https://dropload.io/assets2/js/bootstrap.bundle.min.js" type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src="https://dropload.io/assets2/js/xupload.js?v=13" type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src="https://dropload.io/assets2/js/app.js" type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<script src="https://dropload.io/assets2/js/bootstrap.bundle.min.js" type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<script src="https://dropload.io/assets2/js/xupload.js?v=13" type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<script src="https://dropload.io/assets2/js/app.js" type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
</head>
<body>
@ -91,11 +91,11 @@
<main>
<script src="https://dropload.io/js/jquery.cookie.js" type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src="https://dropload.io/js/jquery.cookie.js" type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<script type="9b8fc36527c5f13e36cf0814-text/javascript">
<script type="2587f5592f7bd3ccc009ca31-text/javascript">
$.cookie('file_id', '35986', { expires: 10 });
$.cookie('aff', '2', { expires: 10 });
@ -137,8 +137,8 @@ $.cookie('aff', '2', { expires: 10 });
</div> -->
<script type="9b8fc36527c5f13e36cf0814-text/javascript" src='https://dropload.io/player/jw8/jwplayer.js'></script>
<script type="9b8fc36527c5f13e36cf0814-text/javascript">jwplayer.key="";</script>
<script type="2587f5592f7bd3ccc009ca31-text/javascript" src='https://dropload.io/player/jw8/jwplayer.js'></script>
<script type="2587f5592f7bd3ccc009ca31-text/javascript">jwplayer.key="";</script>
<style>
.jw-text-track-cue {
text-shadow: 1px 1px 2px transparent !important;
@ -148,7 +148,7 @@ $.cookie('aff', '2', { expires: 10 });
padding-bottom: 0.2em !important;
border-radius: 6px;
}
</style><script src="/js/localstorage-slim.js" type="9b8fc36527c5f13e36cf0814-text/javascript"></script><script src="https://dropload.io/js/dnsads.js?dfp=1&ad_code=2&adsrc=3" type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
</style><script src="/js/localstorage-slim.js" type="2587f5592f7bd3ccc009ca31-text/javascript"></script><script src="https://dropload.io/js/dnsads.js?dfp=1&ad_code=2&adsrc=3" type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<div id='vplayer' style="width:100%;height:100%;text-align:center;"><img src='/images/back2.jpg' style='width:100%;height:100%;'></div>
</div>
@ -205,13 +205,13 @@ $.cookie('aff', '2', { expires: 10 });
</div>
</div>
<div class="col-auto">
<button class="btn btn-like border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=jvjwrkpijr0f&v=up')" title="Like" data-cf-modified-9b8fc36527c5f13e36cf0814-="">
<button class="btn btn-like border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=jvjwrkpijr0f&v=up')" title="Like" data-cf-modified-2587f5592f7bd3ccc009ca31-="">
<i class="icon icon-like icon-size-16 me-2"></i>
<span id="likes_num">0</span>
</button>
</div>
<div class="col-auto">
<button class="btn btn-dislike border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=jvjwrkpijr0f&v=down')" title="Don&#39;t Like" data-cf-modified-9b8fc36527c5f13e36cf0814-="">
<button class="btn btn-dislike border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=jvjwrkpijr0f&v=down')" title="Don&#39;t Like" data-cf-modified-2587f5592f7bd3ccc009ca31-="">
<i class="icon icon-dislike icon-size-16 me-2"></i>
<span id="dislikes_num">0</span>
</button>
@ -270,7 +270,7 @@ $.cookie('aff', '2', { expires: 10 });
</div>
</div>
<script type="9b8fc36527c5f13e36cf0814-text/javascript">
<script type="2587f5592f7bd3ccc009ca31-text/javascript">
$(function(){
var a = $('.dropdown-menu a:first-child .download-size');
$('#size').append(a);
@ -283,7 +283,7 @@ $.cookie('aff', '2', { expires: 10 });
<div class="col-12 col-lg-7 mb-3">
<div class="copybox">
<textarea class="form-control copy-source" rows="6"><IFRAME SRC="https://dropload.io/e/jvjwrkpijr0f" FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=640 HEIGHT=360 allowfullscreen></IFRAME></textarea>
<button class="btn btn-primary" onclick="if (!window.__cfRLUnblockHandlers) return false; copy(this);" data-cf-modified-9b8fc36527c5f13e36cf0814-="">Copy</button>
<button class="btn btn-primary" onclick="if (!window.__cfRLUnblockHandlers) return false; copy(this);" data-cf-modified-2587f5592f7bd3ccc009ca31-="">Copy</button>
</div>
</div>
@ -305,7 +305,7 @@ $.cookie('aff', '2', { expires: 10 });
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body pt-0">
<form method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); } );return false;" data-cf-modified-9b8fc36527c5f13e36cf0814-="">
<form method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); } );return false;" data-cf-modified-2587f5592f7bd3ccc009ca31-="">
<input type="hidden" name="op" value="report_file">
<input type="hidden" name="file_code" value="jvjwrkpijr0f">
<div class="mb-3">
@ -370,7 +370,7 @@ $.cookie('aff', '2', { expires: 10 });
<script type="9b8fc36527c5f13e36cf0814-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('1e("5v").5u({5t:{2k:"/5s/2n/2m-p.2n?v=3",r:"2m-p"},5r:[{2l:"14://5q.p.13/5p/5o/5n/5m/5l.5k?t=5j-8&s=21&e=5i&f=26&i=0.0&5h=0&5g=23.22.5f.5e"}],5d:"1l%",5c:"1l%",5b:"5a",59:"58.1i",57:\'56\',55:"z",b:[{2l:"/29?28=54&l=53&2k=14://2j.p.13/52.2i",51:"50"}],1u:{4z:1,2h:\'#4y\',4x:\'#4w\',4v:"4u",4t:30,4s:\'1l\',},\'4r\':{"4q":"4p"},4o:"4n",4m:"14://p.13/",4l:{},4k:z,1t:[1,1.25,1.5,2],4j:\'14://2j.p.13/27.2i\'}).h(\'1v\',9(){g o=2f.4i("12");o.4h="o";o.2g(\'4g\',\'4-1k 4-1k-4f 4-2e-2h 4-4e 4-1k-4d\');o.2g(\'4c\',\'6.1d(6.4b()+10)\');2f.4a(\'.4-2e-49\').48(o)});g 1h,1j;g 47=0,46=0;g 6=1e();g 2d=0,45=0,44=0,k=0;$.43({42:{\'41-40\':\'3z-3y\'}});6.h(\'3x\',9(x){a(5>0&&x.q>=5&&1j!=1){1j=1;$(\'12.3w\').3v(\'3u\')}a(x.q>=k+5||x.q<k){k=x.q;1g.3t(\'1f\',3s.3r(k),{3q:1i*1i*24*7})}});6.h(\'1d\',9(x){2d=x.q});6.h(\'3p\',9(x){2c(x)});6.h(\'3o\',9(){$(\'12.2b\').3n();1g.3m(\'1f\')});6.h(\'3l\',9(x){});9 2c(x){$(\'12.2b\').2a();$(\'#3k\').2a();a(1h)16;1h=1;11=0;a(3j.3i===3h){11=1}$.1z(\'/29?28=3g&3f=27&3e=26-23-22-21-3d&3c=&11=\'+11,9(20){$(\'#3b\').3a(20)});g k=1g.1z(\'1f\');a(k>0){1e().1d(k)}}9 39(){g b=6.17(1y);1x.1w(b);a(b.l>1){1o(i=0;i<b.l;i++){a(b[i].r==1y){1x.1w(\'!!=\'+i);6.1m(i)}}}}6.h(\'1v\',9(){});6.h("j",9(u){g b=6.17();a(b.l<2)16;$(\'.4-d-38-37\').36(9(){$(\'#4-d-c-j\').1a(\'4-d-c-w\');$(\'.4-c-j\').n(\'m-1b\',\'y\')});6.35("/34/33.32","31 2z",9(){$(\'.4-1s\').2y(\'4-d-1r\');$(\'.4-d-1u, .4-d-1t\').n(\'m-1c\',\'y\');a($(\'.4-1s\').2x(\'4-d-1r\')){$(\'.4-c-j\').n(\'m-1c\',\'z\');$(\'.4-c-j\').n(\'m-1b\',\'z\');$(\'.4-d-c-2w\').1a(\'4-d-c-w\');$(\'.4-d-c-j\').2v(\'4-d-c-w\')}2u{$(\'.4-c-j\').n(\'m-1c\',\'y\');$(\'.4-c-j\').n(\'m-1b\',\'y\');$(\'.4-d-c-j\').1a(\'4-d-c-w\')}},"2t");6.h("2s",9(u){19.2r(\'18\',u.b[u.2q].r)});a(19.1q(\'18\')){2p("1p(19.1q(\'18\'));",2o)}});g 15;9 1p(1n){g b=6.17();a(b.l>1){1o(i=0;i<b.l;i++){a(b[i].r==1n){a(i==15){16}15=i;6.1m(i)}}}}',36,212,'||||jw||player|||function|if|tracks|submenu|settings|||var|on||audioTracks|lastt|length|aria|attr|newButton|dropload|position|name|||event||active||false|true||adb|div|io|https|current_audio|return|getAudioTracks|default_audio|localStorage|removeClass|expanded|checked|seek|jwplayer|ttjvjwrkpijr0f|ls|vvplay|60|vvad|icon|100|setCurrentAudioTrack|audio_name|for|audio_set|getItem|open|controls|playbackRates|captions|ready|log|console|track_name|get|data|1746646911|61|130|||35986|jvjwrkpijr0f|op|dl|hide|video_ad|doPlay|prevt|button|document|setAttribute|color|jpg|img|url|file|jw8|css|300|setTimeout|currentTrack|setItem|audioTrackChanged|dualSound|else|addClass|quality|hasClass|toggleClass|Track||Audio|svg|dualy|images|addButton|mousedown|buttons|topbar|set_audio_track|html|fviews|embed|a54b12bc8796bbc90ce5acb25f6ce1f5|hash|file_code|view|undefined|cRAds|window|over_player_msg|pause|remove|show|complete|play|ttl|round|Math|set|slow|fadeIn|video_ad_fadein|time|cache|no|Cache|Content|headers|ajaxSetup|v2done|tott|vastdone2|vastdone1|appendChild|container|querySelector|getPosition|onclick|forward|reset|inline|class|id|createElement|image|playbackRateControls|cast|aboutlink|DropLoad|abouttext|HD|1313|qualityLabels|fontOpacity|backgroundOpacity|Tahoma|fontFamily|303030|backgroundColor|FFFFFF|userFontScale|thumbnails|kind|jvjwrkpijr0f0000|4445|get_slides|androidhls|metadata|preload|4444|duration|uniform|stretching|height|width|204|236|ii|sp|14400|i3MocvatkrgMvC0SWVHbsllbwbn_plZsTKscZ1FiV|m3u8|master|jvjwrkpijr0f_h|00007|01|hls2|srv27|sources|assets2|skin|setup|vplayer'.split('|')))
<script type="2587f5592f7bd3ccc009ca31-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('1d("5y").5x({5w:{2k:"/5v/2n/2m-o.2n?v=3",q:"2m-o"},5u:[{2l:"13://5t.o.12/5s/5r/5q/5p/5o.5n?t=5m&s=21&e=5l&f=26&5k=1l&i=0.0&5j=0&5i=23.22.5h.5g&5f=1l&5e=1l"}],5d:"1k%",5c:"1k%",5b:"5a",59:"58.1h",57:\'56\',55:"y",a:[{2l:"/29?28=54&k=53&2k=13://2j.o.12/52.2i",51:"50"}],1u:{4z:1,2h:\'#4y\',4x:\'#4w\',4v:"4u",4t:30,4s:\'1k\',},\'4r\':{"4q":"4p"},4o:"4n",4m:"13://o.12/",4l:{},4k:y,1t:[1,1.25,1.5,2],4j:\'13://2j.o.12/27.2i\'}).g(\'1v\',8(){d n=2f.4i("11");n.4h="n";n.2g(\'4g\',\'4-1j 4-1j-4f 4-2e-2h 4-4e 4-1j-4d\');n.2g(\'4c\',\'6.1c(6.4b()+10)\');2f.4a(\'.4-2e-49\').48(n)});d 1g,1i;d 47=0,46=0;d 6=1d();d 2d=0,45=0,44=0,j=0;$.43({42:{\'41-40\':\'3z-3y\'}});6.g(\'3x\',8(x){9(5>0&&x.p>=5&&1i!=1){1i=1;$(\'11.3w\').3v(\'3u\')}9(x.p>=j+5||x.p<j){j=x.p;1f.3t(\'1e\',3s.3r(j),{3q:1h*1h*24*7})}});6.g(\'1c\',8(x){2d=x.p});6.g(\'3p\',8(x){2c(x)});6.g(\'3o\',8(){$(\'11.2b\').3n();1f.3m(\'1e\')});6.g(\'3l\',8(x){});8 2c(x){$(\'11.2b\').2a();$(\'#3k\').2a();9(1g)15;1g=1;z=0;9(3j.3i===3h){z=1}$.1z(\'/29?28=3g&3f=27&3e=26-23-22-21-3d&3c=&z=\'+z,8(20){$(\'#3b\').3a(20)});d j=1f.1z(\'1e\');9(j>0){1d().1c(j)}}8 39(){d a=6.16(1y);1x.1w(a);9(a.k>1){1o(i=0;i<a.k;i++){9(a[i].q==1y){1x.1w(\'!!=\'+i);6.1m(i)}}}}6.g(\'1v\',8(){});6.g("h",8(r){d a=6.16();9(a.k<2)15;$(\'.4-c-38-37\').36(8(){$(\'#4-c-b-h\').19(\'4-c-b-u\');$(\'.4-b-h\').m(\'l-1a\',\'w\')});6.35("/34/33.32","31 2z",8(){$(\'.4-1s\').2y(\'4-c-1r\');$(\'.4-c-1u, .4-c-1t\').m(\'l-1b\',\'w\');9($(\'.4-1s\').2x(\'4-c-1r\')){$(\'.4-b-h\').m(\'l-1b\',\'y\');$(\'.4-b-h\').m(\'l-1a\',\'y\');$(\'.4-c-b-2w\').19(\'4-c-b-u\');$(\'.4-c-b-h\').2v(\'4-c-b-u\')}2u{$(\'.4-b-h\').m(\'l-1b\',\'w\');$(\'.4-b-h\').m(\'l-1a\',\'w\');$(\'.4-c-b-h\').19(\'4-c-b-u\')}},"2t");6.g("2s",8(r){18.2r(\'17\',r.a[r.2q].q)});9(18.1q(\'17\')){2p("1p(18.1q(\'17\'));",2o)}});d 14;8 1p(1n){d a=6.16();9(a.k>1){1o(i=0;i<a.k;i++){9(a[i].q==1n){9(i==14){15}14=i;6.1m(i)}}}}',36,215,'||||jw||player||function|if|tracks|submenu|settings|var|||on|audioTracks||lastt|length|aria|attr|newButton|dropload|position|name|event|||active||false||true|adb||div|io|https|current_audio|return|getAudioTracks|default_audio|localStorage|removeClass|expanded|checked|seek|jwplayer|ttjvjwrkpijr0f|ls|vvplay|60|vvad|icon|100|srv27|setCurrentAudioTrack|audio_name|for|audio_set|getItem|open|controls|playbackRates|captions|ready|log|console|track_name|get|data|1746903685|61|130|||35986|jvjwrkpijr0f|op|dl|hide|video_ad|doPlay|prevt|button|document|setAttribute|color|jpg|img|url|file|jw8|css|300|setTimeout|currentTrack|setItem|audioTrackChanged|dualSound|else|addClass|quality|hasClass|toggleClass|Track||Audio|svg|dualy|images|addButton|mousedown|buttons|topbar|set_audio_track|html|fviews|embed|9081cc1d97162ec631518574213f1522|hash|file_code|view|undefined|cRAds|window|over_player_msg|pause|remove|show|complete|play|ttl|round|Math|set|slow|fadeIn|video_ad_fadein|time|cache|no|Cache|Content|headers|ajaxSetup|v2done|tott|vastdone2|vastdone1|appendChild|container|querySelector|getPosition|onclick|forward|reset|inline|class|id|createElement|image|playbackRateControls|cast|aboutlink|DropLoad|abouttext|HD|1313|qualityLabels|fontOpacity|backgroundOpacity|Tahoma|fontFamily|303030|backgroundColor|FFFFFF|userFontScale|thumbnails|kind|jvjwrkpijr0f0000|4445|get_slides|androidhls|metadata|preload|4444|duration|uniform|stretching|height|width|p2|p1|204|236|ii|sp|srv|14400|9B5k5sYgDD2kS_549tQ4WYh1o74hO1QR9zzyXrVRqv4|m3u8|master|jvjwrkpijr0f_h|00007|01|hls2|srv34|sources|assets2|skin|setup|vplayer'.split('|')))
</script>
<style media="screen">
@ -411,13 +411,13 @@ $.cookie('aff', '2', { expires: 10 });
}
</style>
<script type="9b8fc36527c5f13e36cf0814-text/javascript">
<script type="2587f5592f7bd3ccc009ca31-text/javascript">
$('.lightdown').on('click', function(){
$('body').toggleClass('body-lightdown');
})
</script>
<Script type="9b8fc36527c5f13e36cf0814-text/javascript">
<Script type="2587f5592f7bd3ccc009ca31-text/javascript">
$("#embed_div textarea").focus(function (){ $(this).select(); })
var tab_cookie='tab_down';
@ -440,17 +440,17 @@ $.cookie('aff', '2', { expires: 10 });
</Script>
<script src="https://dropload.io/js/tabber.js" type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src="https://dropload.io/js/tabber.js" type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<Script type="9b8fc36527c5f13e36cf0814-text/javascript">
<Script type="2587f5592f7bd3ccc009ca31-text/javascript">
$(function() {
});
</Script>
<script data-cfasync="false" async type="text/javascript" src="//sx.impubicpuddly.com/rO7FQr7AANJdtg/111561"></script>
<script src='https://dropload.io/tag2.js' type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src='https://dropload.io/tag1.js' type="9b8fc36527c5f13e36cf0814-text/javascript"></script>
<script src='https://dropload.io/tag2.js' type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<script src='https://dropload.io/tag1.js' type="2587f5592f7bd3ccc009ca31-text/javascript"></script>
<!-- Javascript Alt Ads code start -->
@ -495,7 +495,7 @@ $.cookie('aff', '2', { expires: 10 });
</footer>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="9b8fc36527c5f13e36cf0814-|49" defer></script></body>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="2587f5592f7bd3ccc009ca31-|49" defer></script></body>
</html>

View file

@ -19,10 +19,10 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap" rel="stylesheet">
<link href="https://dropload.io/assets2/css/style.css?v=2" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src="https://dropload.io/assets2/js/bootstrap.bundle.min.js" type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src="https://dropload.io/assets2/js/xupload.js?v=13" type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src="https://dropload.io/assets2/js/app.js" type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<script src="https://dropload.io/assets2/js/bootstrap.bundle.min.js" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<script src="https://dropload.io/assets2/js/xupload.js?v=13" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<script src="https://dropload.io/assets2/js/app.js" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
</head>
<body>
@ -91,11 +91,11 @@
<main>
<script src="https://dropload.io/js/jquery.cookie.js" type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src="https://dropload.io/js/jquery.cookie.js" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<script type="b402dc6aa066e52050d893f1-text/javascript">
<script type="fb4dc13d1285d9e23d3f1de2-text/javascript">
$.cookie('file_id', '987607', { expires: 10 });
$.cookie('aff', '4', { expires: 10 });
@ -137,8 +137,8 @@ $.cookie('aff', '4', { expires: 10 });
</div> -->
<script type="b402dc6aa066e52050d893f1-text/javascript" src='https://dropload.io/player/jw8/jwplayer.js'></script>
<script type="b402dc6aa066e52050d893f1-text/javascript">jwplayer.key="";</script>
<script type="fb4dc13d1285d9e23d3f1de2-text/javascript" src='https://dropload.io/player/jw8/jwplayer.js'></script>
<script type="fb4dc13d1285d9e23d3f1de2-text/javascript">jwplayer.key="";</script>
<style>
.jw-text-track-cue {
text-shadow: 1px 1px 2px transparent !important;
@ -148,7 +148,7 @@ $.cookie('aff', '4', { expires: 10 });
padding-bottom: 0.2em !important;
border-radius: 6px;
}
</style><script src="/js/localstorage-slim.js" type="b402dc6aa066e52050d893f1-text/javascript"></script><script src="https://dropload.io/js/dnsads.js?dfp=1&ad_code=2&adsrc=3" type="b402dc6aa066e52050d893f1-text/javascript"></script>
</style><script src="/js/localstorage-slim.js" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script><script src="https://dropload.io/js/dnsads.js?dfp=1&ad_code=2&adsrc=3" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<div id='vplayer' style="width:100%;height:100%;text-align:center;"><img src='/images/back2.jpg' style='width:100%;height:100%;'></div>
</div>
@ -205,13 +205,13 @@ $.cookie('aff', '4', { expires: 10 });
</div>
</div>
<div class="col-auto">
<button class="btn btn-like border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=lyo2h1snpe5c&v=up')" title="Like" data-cf-modified-b402dc6aa066e52050d893f1-="">
<button class="btn btn-like border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=lyo2h1snpe5c&v=up')" title="Like" data-cf-modified-fb4dc13d1285d9e23d3f1de2-="">
<i class="icon icon-like icon-size-16 me-2"></i>
<span id="likes_num">0</span>
</button>
</div>
<div class="col-auto">
<button class="btn btn-dislike border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=lyo2h1snpe5c&v=down')" title="Don&#39;t Like" data-cf-modified-b402dc6aa066e52050d893f1-="">
<button class="btn btn-dislike border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=lyo2h1snpe5c&v=down')" title="Don&#39;t Like" data-cf-modified-fb4dc13d1285d9e23d3f1de2-="">
<i class="icon icon-dislike icon-size-16 me-2"></i>
<span id="dislikes_num">0</span>
</button>
@ -270,7 +270,7 @@ $.cookie('aff', '4', { expires: 10 });
</div>
</div>
<script type="b402dc6aa066e52050d893f1-text/javascript">
<script type="fb4dc13d1285d9e23d3f1de2-text/javascript">
$(function(){
var a = $('.dropdown-menu a:first-child .download-size');
$('#size').append(a);
@ -283,7 +283,7 @@ $.cookie('aff', '4', { expires: 10 });
<div class="col-12 col-lg-7 mb-3">
<div class="copybox">
<textarea class="form-control copy-source" rows="6"><IFRAME SRC="https://dropload.io/e/lyo2h1snpe5c" FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=640 HEIGHT=360 allowfullscreen></IFRAME></textarea>
<button class="btn btn-primary" onclick="if (!window.__cfRLUnblockHandlers) return false; copy(this);" data-cf-modified-b402dc6aa066e52050d893f1-="">Copy</button>
<button class="btn btn-primary" onclick="if (!window.__cfRLUnblockHandlers) return false; copy(this);" data-cf-modified-fb4dc13d1285d9e23d3f1de2-="">Copy</button>
</div>
</div>
@ -305,7 +305,7 @@ $.cookie('aff', '4', { expires: 10 });
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body pt-0">
<form method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); } );return false;" data-cf-modified-b402dc6aa066e52050d893f1-="">
<form method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); } );return false;" data-cf-modified-fb4dc13d1285d9e23d3f1de2-="">
<input type="hidden" name="op" value="report_file">
<input type="hidden" name="file_code" value="lyo2h1snpe5c">
<div class="mb-3">
@ -370,7 +370,7 @@ $.cookie('aff', '4', { expires: 10 });
<script type="b402dc6aa066e52050d893f1-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('1d("5w").5v({5u:{2i:"/5t/2l/2k-o.2l?v=3",q:"2k-o"},5s:[{2j:"13://5r.o.12/5q/5p/5o/5n/5m.5l?t=5k&s=1z&e=5j&f=22&i=0.0&5i=0&5h=21.20.5g.5f"}],5e:"1j%",5d:"1j%",5c:"5b",5a:"59.56",58:\'57\',55:"y",a:[{2j:"/26?23=54&k=53&2i=13://2h.o.12/52.2g",51:"50"}],1s:{4z:1,2f:\'#4y\',4x:\'#4w\',4v:"4u",4t:30,4s:\'1j\',},\'4r\':{"4q":"4p"},4o:"4n",4m:"13://o.12/",4l:{},4k:y,1r:[1,1.25,1.5,2],4j:\'13://2h.o.12/4i.2g\'}).g(\'1t\',8(){d n=2d.4h("11");n.4g="n";n.2e(\'4f\',\'4-1i 4-1i-4e 4-2c-2f 4-4d 4-1i-4c\');n.2e(\'4b\',\'6.1c(6.4a()+10)\');2d.49(\'.4-2c-48\').47(n)});d 1g,1h;d 46=0,45=0;d 6=1d();d 2a=0,44=0,43=0,j=0;$.42({41:{\'40-3z\':\'3y-3x\'}});6.g(\'3w\',8(x){9(5>0&&x.p>=5&&1h!=1){1h=1;$(\'11.3v\').3u(\'3t\')}9(x.p>=j+5||x.p<j){j=x.p;1f.3s(\'1e\',3r.3q(j),{3p:2b*2b*24*7})}});6.g(\'1c\',8(x){2a=x.p});6.g(\'3o\',8(x){29(x)});6.g(\'3n\',8(){$(\'11.28\').3m();1f.3l(\'1e\')});6.g(\'3k\',8(x){});8 29(x){$(\'11.28\').27();$(\'#3j\').27();9(1g)15;1g=1;z=0;9(3i.3h===3g){z=1}$.1x(\'/26?23=3f&3e=3d&3c=22-21-20-1z-3b&3a=&z=\'+z,8(1y){$(\'#39\').38(1y)});d j=1f.1x(\'1e\');9(j>0){1d().1c(j)}}8 37(){d a=6.16(1w);1v.1u(a);9(a.k>1){1m(i=0;i<a.k;i++){9(a[i].q==1w){1v.1u(\'!!=\'+i);6.1k(i)}}}}6.g(\'1t\',8(){});6.g("h",8(r){d a=6.16();9(a.k<2)15;$(\'.4-c-36-35\').34(8(){$(\'#4-c-b-h\').19(\'4-c-b-u\');$(\'.4-b-h\').m(\'l-1a\',\'w\')});6.33("/32/31.2z","2y 2x",8(){$(\'.4-1q\').2w(\'4-c-1p\');$(\'.4-c-1s, .4-c-1r\').m(\'l-1b\',\'w\');9($(\'.4-1q\').2v(\'4-c-1p\')){$(\'.4-b-h\').m(\'l-1b\',\'y\');$(\'.4-b-h\').m(\'l-1a\',\'y\');$(\'.4-c-b-2u\').19(\'4-c-b-u\');$(\'.4-c-b-h\').2t(\'4-c-b-u\')}2s{$(\'.4-b-h\').m(\'l-1b\',\'w\');$(\'.4-b-h\').m(\'l-1a\',\'w\');$(\'.4-c-b-h\').19(\'4-c-b-u\')}},"2r");6.g("2q",8(r){18.2p(\'17\',r.a[r.2o].q)});9(18.1o(\'17\')){2n("1n(18.1o(\'17\'));",2m)}});d 14;8 1n(1l){d a=6.16();9(a.k>1){1m(i=0;i<a.k;i++){9(a[i].q==1l){9(i==14){15}14=i;6.1k(i)}}}}',36,213,'||||jw||player||function|if|tracks|submenu|settings|var|||on|audioTracks||lastt|length|aria|attr|newButton|dropload|position|name|event|||active||false||true|adb||div|io|https|current_audio|return|getAudioTracks|default_audio|localStorage|removeClass|expanded|checked|seek|jwplayer|ttlyo2h1snpe5c|ls|vvplay|vvad|icon|100|setCurrentAudioTrack|audio_name|for|audio_set|getItem|open|controls|playbackRates|captions|ready|log|console|track_name|get|data|1746644167|61|130|987607|op|||dl|hide|video_ad|doPlay|prevt|60|button|document|setAttribute|color|jpg|img|url|file|jw8|css|300|setTimeout|currentTrack|setItem|audioTrackChanged|dualSound|else|addClass|quality|hasClass|toggleClass|Track|Audio|svg||dualy|images|addButton|mousedown|buttons|topbar|set_audio_track|html|fviews|embed|dfd8c020bb0d74e1c9d98c1a09212cef|hash|lyo2h1snpe5c|file_code|view|undefined|cRAds|window|over_player_msg|pause|remove|show|complete|play|ttl|round|Math|set|slow|fadeIn|video_ad_fadein|time|cache|no|Cache|Content|headers|ajaxSetup|v2done|tott|vastdone2|vastdone1|appendChild|container|querySelector|getPosition|onclick|forward|reset|inline|class|id|createElement|lyo2h1snpe5c_xt|image|playbackRateControls|cast|aboutlink|DropLoad|abouttext|HD|1557|qualityLabels|fontOpacity|backgroundOpacity|Tahoma|fontFamily|303030|backgroundColor|FFFFFF|userFontScale|thumbnails|kind|lyo2h1snpe5c0000|7259|get_slides|androidhls||metadata|preload|7258|duration|uniform|stretching|height|width|204|236|ii|sp|14400|EIGVExKNGKfXGRFbZEiW12CdAXoqbqvCxk4p2qLrRdQ|m3u8|master|lyo2h1snpe5c_h|00197|01|hls2|srv27|sources|assets2|skin|setup|vplayer'.split('|')))
<script type="fb4dc13d1285d9e23d3f1de2-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('1d("5w").5v({5u:{2i:"/5t/2l/2k-o.2l?v=3",q:"2k-o"},5s:[{2j:"13://5r.o.12/5q/5p/5o/5n/5m.5l?t=5k&s=1z&e=5j&f=22&i=0.0&5i=0&5h=21.20.5g.5f"}],5e:"1j%",5d:"1j%",5c:"5b",5a:"59.56",58:\'57\',55:"y",a:[{2j:"/26?23=54&k=53&2i=13://2h.o.12/52.2g",51:"50"}],1s:{4z:1,2f:\'#4y\',4x:\'#4w\',4v:"4u",4t:30,4s:\'1j\',},\'4r\':{"4q":"4p"},4o:"4n",4m:"13://o.12/",4l:{},4k:y,1r:[1,1.25,1.5,2],4j:\'13://2h.o.12/4i.2g\'}).g(\'1t\',8(){d n=2d.4h("11");n.4g="n";n.2e(\'4f\',\'4-1i 4-1i-4e 4-2c-2f 4-4d 4-1i-4c\');n.2e(\'4b\',\'6.1c(6.4a()+10)\');2d.49(\'.4-2c-48\').47(n)});d 1g,1h;d 46=0,45=0;d 6=1d();d 2a=0,44=0,43=0,j=0;$.42({41:{\'40-3z\':\'3y-3x\'}});6.g(\'3w\',8(x){9(5>0&&x.p>=5&&1h!=1){1h=1;$(\'11.3v\').3u(\'3t\')}9(x.p>=j+5||x.p<j){j=x.p;1f.3s(\'1e\',3r.3q(j),{3p:2b*2b*24*7})}});6.g(\'1c\',8(x){2a=x.p});6.g(\'3o\',8(x){29(x)});6.g(\'3n\',8(){$(\'11.28\').3m();1f.3l(\'1e\')});6.g(\'3k\',8(x){});8 29(x){$(\'11.28\').27();$(\'#3j\').27();9(1g)15;1g=1;z=0;9(3i.3h===3g){z=1}$.1x(\'/26?23=3f&3e=3d&3c=22-21-20-1z-3b&3a=&z=\'+z,8(1y){$(\'#39\').38(1y)});d j=1f.1x(\'1e\');9(j>0){1d().1c(j)}}8 37(){d a=6.16(1w);1v.1u(a);9(a.k>1){1m(i=0;i<a.k;i++){9(a[i].q==1w){1v.1u(\'!!=\'+i);6.1k(i)}}}}6.g(\'1t\',8(){});6.g("h",8(r){d a=6.16();9(a.k<2)15;$(\'.4-c-36-35\').34(8(){$(\'#4-c-b-h\').19(\'4-c-b-u\');$(\'.4-b-h\').m(\'l-1a\',\'w\')});6.33("/32/31.2z","2y 2x",8(){$(\'.4-1q\').2w(\'4-c-1p\');$(\'.4-c-1s, .4-c-1r\').m(\'l-1b\',\'w\');9($(\'.4-1q\').2v(\'4-c-1p\')){$(\'.4-b-h\').m(\'l-1b\',\'y\');$(\'.4-b-h\').m(\'l-1a\',\'y\');$(\'.4-c-b-2u\').19(\'4-c-b-u\');$(\'.4-c-b-h\').2t(\'4-c-b-u\')}2s{$(\'.4-b-h\').m(\'l-1b\',\'w\');$(\'.4-b-h\').m(\'l-1a\',\'w\');$(\'.4-c-b-h\').19(\'4-c-b-u\')}},"2r");6.g("2q",8(r){18.2p(\'17\',r.a[r.2o].q)});9(18.1o(\'17\')){2n("1n(18.1o(\'17\'));",2m)}});d 14;8 1n(1l){d a=6.16();9(a.k>1){1m(i=0;i<a.k;i++){9(a[i].q==1l){9(i==14){15}14=i;6.1k(i)}}}}',36,213,'||||jw||player||function|if|tracks|submenu|settings|var|||on|audioTracks||lastt|length|aria|attr|newButton|dropload|position|name|event|||active||false||true|adb||div|io|https|current_audio|return|getAudioTracks|default_audio|localStorage|removeClass|expanded|checked|seek|jwplayer|ttlyo2h1snpe5c|ls|vvplay|vvad|icon|100|setCurrentAudioTrack|audio_name|for|audio_set|getItem|open|controls|playbackRates|captions|ready|log|console|track_name|get|data|1746903744|61|130|987607|op|||dl|hide|video_ad|doPlay|prevt|60|button|document|setAttribute|color|jpg|img|url|file|jw8|css|300|setTimeout|currentTrack|setItem|audioTrackChanged|dualSound|else|addClass|quality|hasClass|toggleClass|Track|Audio|svg||dualy|images|addButton|mousedown|buttons|topbar|set_audio_track|html|fviews|embed|4d087dfd416ea7ee8d382d34d700a2b9|hash|lyo2h1snpe5c|file_code|view|undefined|cRAds|window|over_player_msg|pause|remove|show|complete|play|ttl|round|Math|set|slow|fadeIn|video_ad_fadein|time|cache|no|Cache|Content|headers|ajaxSetup|v2done|tott|vastdone2|vastdone1|appendChild|container|querySelector|getPosition|onclick|forward|reset|inline|class|id|createElement|lyo2h1snpe5c_xt|image|playbackRateControls|cast|aboutlink|DropLoad|abouttext|HD|1557|qualityLabels|fontOpacity|backgroundOpacity|Tahoma|fontFamily|303030|backgroundColor|FFFFFF|userFontScale|thumbnails|kind|lyo2h1snpe5c0000|7259|get_slides|androidhls||metadata|preload|7258|duration|uniform|stretching|height|width|204|236|ii|sp|14400|qTZsRGIMnUjXsQ4o2LRLlsT4tGG1AdJrRBRDGttNLPM|m3u8|master|lyo2h1snpe5c_h|00197|01|hls2|srv27|sources|assets2|skin|setup|vplayer'.split('|')))
</script>
<style media="screen">
@ -411,13 +411,13 @@ $.cookie('aff', '4', { expires: 10 });
}
</style>
<script type="b402dc6aa066e52050d893f1-text/javascript">
<script type="fb4dc13d1285d9e23d3f1de2-text/javascript">
$('.lightdown').on('click', function(){
$('body').toggleClass('body-lightdown');
})
</script>
<Script type="b402dc6aa066e52050d893f1-text/javascript">
<Script type="fb4dc13d1285d9e23d3f1de2-text/javascript">
$("#embed_div textarea").focus(function (){ $(this).select(); })
var tab_cookie='tab_down';
@ -440,17 +440,17 @@ $.cookie('aff', '4', { expires: 10 });
</Script>
<script src="https://dropload.io/js/tabber.js" type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src="https://dropload.io/js/tabber.js" type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<Script type="b402dc6aa066e52050d893f1-text/javascript">
<Script type="fb4dc13d1285d9e23d3f1de2-text/javascript">
$(function() {
});
</Script>
<script data-cfasync="false" async type="text/javascript" src="//sx.impubicpuddly.com/rO7FQr7AANJdtg/111561"></script>
<script src='https://dropload.io/tag2.js' type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src='https://dropload.io/tag1.js' type="b402dc6aa066e52050d893f1-text/javascript"></script>
<script src='https://dropload.io/tag2.js' type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<script src='https://dropload.io/tag1.js' type="fb4dc13d1285d9e23d3f1de2-text/javascript"></script>
<!-- Javascript Alt Ads code start -->
@ -495,7 +495,7 @@ $.cookie('aff', '4', { expires: 10 });
</footer>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="b402dc6aa066e52050d893f1-|49" defer></script></body>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="fb4dc13d1285d9e23d3f1de2-|49" defer></script></body>
</html>

View file

@ -56,24 +56,24 @@
<span>120:43</span>
</div>
<div class="_player-btns">
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-439eff7a0cccd973bece8aa1-="">
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-0f3750606b637881c3eadcfb-="">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="14" viewBox="0 0 13 14">
<path d="M12.3 8.1L2 13.9c-.9.5-2-.1-2-1.1V1.3C0 .3 1.1-.3 2 .2L12.3 6c.7.3.9 1 .5 1.6-.1.2-.2.4-.5.5z" fill="#00c6ff" /></svg>
</a>
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-439eff7a0cccd973bece8aa1-="">
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-0f3750606b637881c3eadcfb-="">
<svg xmlns="http://www.w3.org/2000/svg" width="17.9" height="16" viewBox="0 0 17.9 16">
<path
d="M12.5 4l-1.3 1.3c.6.7 1 1.7 1 2.7s-.4 2-1.1 2.7l1.3 1.3c1-1 1.7-2.4 1.7-4s-.6-3-1.6-4zm2.6-2.7l-1.3 1.3C15.2 4 16 5.9 16 8s-.8 4-2.2 5.3l1.3 1.3c1.7-1.7 2.8-4.1 2.8-6.7s-1.1-4.8-2.8-6.6zM2.4 5.2H0v5.6h2.4L7.5 16h1.9V0H7.5L2.4 5.2zm5.1 8.1L3.1 8.9H1.9V7.1h1.3l4.4-4.4v10.6z"
fill="#fff" /></svg>
</a>
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-439eff7a0cccd973bece8aa1-="">
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-0f3750606b637881c3eadcfb-="">
<svg xmlns="http://www.w3.org/2000/svg" width="34.3" height="14" viewBox="0 0 34.3 14">
<path
d="M7 0C3.1 0 0 3.1 0 7s3.1 7 7 7c2.6 0 4.8-1.4 6-3.5l-1.4-.8c-.9 1.6-2.6 2.7-4.6 2.7-3 0-5.4-2.4-5.4-5.4C1.6 4 4 1.6 7 1.6c1.5 0 2.8.6 3.8 1.6L9 5h4.6V.3L11.9 2C10.6.8 8.9 0 7 0zm14.2 5.1h-1.3V7h-1.8v1.3h1.8v2h1.3v-2H23V7h-1.8V5.1zm2.9-.2V6l1.7-.5V11h1.4V3.9H27l-2.9 1zm9.5-.3c-.4-.5-1-.8-1.8-.8s-1.4.3-1.8.8c-.4.5-.6 1.3-.6 2.3v1.3c0 1 .2 1.7.6 2.2.4.5 1 .8 1.8.8s1.4-.3 1.8-.8c.4-.5.6-1.3.6-2.3V6.8c.1-1-.1-1.7-.6-2.2zm-.7 3.7c0 .6-.1 1-.2 1.2-.2.3-.4.4-.7.4-.3 0-.6-.1-.8-.4-.2-.3-.2-.7-.2-1.3V6.5c0-.5.1-.9.3-1.2.2-.3.4-.4.7-.4.3 0 .6.1.8.4.2.3.2.7.2 1.3v1.7z"
fill="#fff" /></svg>
</a>
<div class="space"></div>
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-439eff7a0cccd973bece8aa1-="">
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; return false" data-cf-modified-0f3750606b637881c3eadcfb-="">
<svg xmlns="http://www.w3.org/2000/svg" width="20.5" height="16" viewBox="0 0 20.5 16">
<path
d="M2.2 12.2c.5 0 1-.4 1-1V4.8c0-.4-.2-.7-.6-.9-.4-.1-.8-.1-1 .2L.3 5.4c-.4.4-.4 1 0 1.4.3.2.6.3 1 .2v4.2c0 .5.4 1 .9 1zm3.7-8.4c-1 0-1.8.8-1.8 1.8v4.8c0 1 .8 1.8 1.8 1.8h1.3c1 0 1.8-.8 1.8-1.8V5.6c0-1-.8-1.8-1.8-1.8H5.9zM7 10.2H6V5.8h1v4.4zm4.7-6.4c-1 0-1.8.8-1.8 1.8v4.8c0 1 .8 1.8 1.8 1.8H13c1 0 1.8-.8 1.8-1.8V5.6c0-1-.8-1.8-1.8-1.8h-1.3zm1.1 6.4h-1V9h1v1.2zm0-3.2h-1V5.8h1V7zm5.9-3.2h-1.3c-1 0-1.8.8-1.8 1.8v4.8c0 1 .8 1.8 1.8 1.8h1.3c1 0 1.8-.8 1.8-1.8V5.6c0-1-.8-1.8-1.8-1.8zm-.2 6.4h-1V5.8h1v4.4zM1 1.9h18.5c.5 0 1-.4 1-1 0-.5-.4-1-1-1H1C.4 0 0 .4 0 1c0 .5.4.9 1 .9zm18.5 12.2H1c-.5 0-1 .4-1 1s.4 1 1 1h18.5c.5 0 1-.4 1-1s-.5-1-1-1z"
@ -94,16 +94,16 @@
</div>
</div>
</div>
<img src="https://m.media-amazon.com/images/M/MV5BMDRjNGJlNTQtYjU5Yy00OWEzLTk3MGMtYmNjZDYwYjJkZWI5XkEyXkFqcGc@._V1_QL75_UX820_.jpg" class="_player-cover" alt="">
<img src="https://m.media-amazon.com/images/M/MV5BM2Y0Yjg1NDYtZTdlZS00ZGQ1LTk0YTEtNjA4MGUxYjlkNTQ4XkEyXkFqcGc@._V1_QL75_UX820_.jpg" class="_player-cover" alt="">
<iframe id="_player" style="" allowfullscreen="" src="" scrolling="no" style="background-color:#fff"></iframe>
<div class="spinner-container" style="display:none"><div class="spinner-border"></div></div>
</div>
<script src="/static/js/jquery.min.js" type="439eff7a0cccd973bece8aa1-text/javascript"></script>
<script src="/static/js/bootstrap.bundle.min.js" type="439eff7a0cccd973bece8aa1-text/javascript"></script>
<script src="/static/js/main.js?v=12" type="439eff7a0cccd973bece8aa1-text/javascript"></script>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="439eff7a0cccd973bece8aa1-|49" defer></script></body>
<script src="/static/js/jquery.min.js" type="0f3750606b637881c3eadcfb-text/javascript"></script>
<script src="/static/js/bootstrap.bundle.min.js" type="0f3750606b637881c3eadcfb-text/javascript"></script>
<script src="/static/js/main.js?v=12" type="0f3750606b637881c3eadcfb-text/javascript"></script>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="0f3750606b637881c3eadcfb-|49" defer></script></body>
</html>

View file

@ -15,9 +15,9 @@
<link rel="stylesheet" href="https://supervideo.cc/assets/css/style.css?v=130">
<!-- jsdata -->
<script src="https://supervideo.cc/assets/js/libs.min.js?v=2" type="42cae66dfbde55b74a18efcc-text/javascript"></script>
<script src="https://supervideo.cc/assets/js/common.js?v=2" type="42cae66dfbde55b74a18efcc-text/javascript"></script>
<script src="https://supervideo.cc/js/xupload.js?v=4" type="42cae66dfbde55b74a18efcc-text/javascript"></script>
<script src="https://supervideo.cc/assets/js/libs.min.js?v=2" type="2b0d82ffb81a8be8a3dd04a1-text/javascript"></script>
<script src="https://supervideo.cc/assets/js/common.js?v=2" type="2b0d82ffb81a8be8a3dd04a1-text/javascript"></script>
<script src="https://supervideo.cc/js/xupload.js?v=4" type="2b0d82ffb81a8be8a3dd04a1-text/javascript"></script>
<!-- favicon -->
<link rel="apple-touch-icon" href="https://supervideo.cc/assets/images/favicon/apple-touch-icon.png" sizes="180x180">
<link rel="icon" href="https://supervideo.cc/assets/images/favicon/favicon-32x32.png" sizes="32x32">
@ -113,16 +113,16 @@
<!--25% ads-->
<script src="/9271593.js" type="42cae66dfbde55b74a18efcc-text/javascript"></script>
<script src="/9271609.js" type="42cae66dfbde55b74a18efcc-text/javascript"></script>
<script src="/9271593.js" type="2b0d82ffb81a8be8a3dd04a1-text/javascript"></script>
<script src="/9271609.js" type="2b0d82ffb81a8be8a3dd04a1-text/javascript"></script>
<script data-cfasync="false" async type="text/javascript" src="//zm.nostocbark.com/rljPIWhbr4xr/115547"></script>
<script language="JavaScript" type="42cae66dfbde55b74a18efcc-text/javascript" CHARSET="UTF-8" src="https://supervideo.cc/js/jquery.cookie.js"></script>
<script type="42cae66dfbde55b74a18efcc-text/javascript">
<script language="JavaScript" type="2b0d82ffb81a8be8a3dd04a1-text/javascript" CHARSET="UTF-8" src="https://supervideo.cc/js/jquery.cookie.js"></script>
<script type="2b0d82ffb81a8be8a3dd04a1-text/javascript">
$.cookie('file_id', '1396174', { expires: 10 });
$.cookie('aff', '14532', { expires: 10 });
@ -144,10 +144,10 @@ $.cookie('aff', '14532', { expires: 10 });
<div class="download__player">
<div class="overlay " >
<script type="42cae66dfbde55b74a18efcc-text/javascript" src='https://supervideo.cc/player8/jwplayer.js'></script>
<script type="42cae66dfbde55b74a18efcc-text/javascript">jwplayer.key="9dOyFG96QFb9AWbR+FhhislXHfV1gIhrkaxLYfLydfiYyC0s";</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-46849459-36" type="42cae66dfbde55b74a18efcc-text/javascript"></script>
<script type="42cae66dfbde55b74a18efcc-text/javascript">
<script type="2b0d82ffb81a8be8a3dd04a1-text/javascript" src='https://supervideo.cc/player8/jwplayer.js'></script>
<script type="2b0d82ffb81a8be8a3dd04a1-text/javascript">jwplayer.key="9dOyFG96QFb9AWbR+FhhislXHfV1gIhrkaxLYfLydfiYyC0s";</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-46849459-36" type="2b0d82ffb81a8be8a3dd04a1-text/javascript"></script>
<script type="2b0d82ffb81a8be8a3dd04a1-text/javascript">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
@ -167,7 +167,7 @@ $.cookie('aff', '14532', { expires: 10 });
<link rel="stylesheet" type="text/css" href="https://supervideo.cc/assets/player/myskinfile.css?v=11">
<script src="https://supervideo.cc/js/pop.js" type="42cae66dfbde55b74a18efcc-text/javascript"></script>
<script src="https://supervideo.cc/js/pop.js" type="2b0d82ffb81a8be8a3dd04a1-text/javascript"></script>
<div id='vplayer' style="width:100%;height:100%;text-align:center;"><img src="https://i.serversicuro.cc/22go50mon0ke_xt.jpg" style="width:100%;height:100%;"></div>
</div>
</div>
@ -186,7 +186,7 @@ $.cookie('aff', '14532', { expires: 10 });
germanserien
</a></li>
<li><i class="icon icon_eye icon_align_left"></i>
623 views
624 views
</li>
<li><button type="button" class="btn download__flag" data-toggle="modal" data-target="#vid-flag"><i class="icon icon_flag"></i></button>
<div class="modal fade" id="vid-flag" tabindex="-1" role="dialog" aria-labelledby="modal-title" aria-hidden="true">
@ -199,7 +199,7 @@ $.cookie('aff', '14532', { expires: 10 });
</button>
</div>
<div class="modal-body" id="id_flag">
<form class="form" method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); $('#id_flag').wrapInner('<span></span>').addClass('alert alert-success'); } );return false;" data-cf-modified-42cae66dfbde55b74a18efcc-="">
<form class="form" method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); $('#id_flag').wrapInner('<span></span>').addClass('alert alert-success'); } );return false;" data-cf-modified-2b0d82ffb81a8be8a3dd04a1-="">
<input type="hidden" name="op" value="report_file">
<input type="hidden" name="file_code" value="22go50mon0ke">
<div class="form__group">
@ -236,18 +236,18 @@ $.cookie('aff', '14532', { expires: 10 });
</div>
<div class="col-sm-auto">
<ul class="download-social">
<li><a class="download-social__item download-social__item_facebook" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Facebook', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://www.facebook.com/sharer/sharer.php?u=/22go50mon0ke" data-cf-modified-42cae66dfbde55b74a18efcc-=""><i class="icon icon_facebook"></i></a></li>
<li><a class="download-social__item download-social__item_twitter" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Twitter', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://twitter.com/intent/tweet?text=Black Mirror 2x4" data-cf-modified-42cae66dfbde55b74a18efcc-=""><i class="icon icon_twitter"></i></a></li>
<li><a class="download-social__item download-social__item_facebook" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Facebook', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://www.facebook.com/sharer/sharer.php?u=/22go50mon0ke" data-cf-modified-2b0d82ffb81a8be8a3dd04a1-=""><i class="icon icon_facebook"></i></a></li>
<li><a class="download-social__item download-social__item_twitter" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Twitter', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://twitter.com/intent/tweet?text=Black Mirror 2x4" data-cf-modified-2b0d82ffb81a8be8a3dd04a1-=""><i class="icon icon_twitter"></i></a></li>
</ul>
</div>
<div class="col-auto">
<div class="dowonload-rating" id="vote">
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_plus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=22go50mon0ke&v=up')" title="Like" data-cf-modified-42cae66dfbde55b74a18efcc-=""><i
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_plus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=22go50mon0ke&v=up')" title="Like" data-cf-modified-2b0d82ffb81a8be8a3dd04a1-=""><i
class="icon icon_like icon_align_left icon-size_20 dowonload-rating__icon"></i><span id="likes_num">
0
</span></button>
<span class="dowonload-rating__divider"></span>
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_minus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=22go50mon0ke&v=down')" title="Don&#39;t Like" data-cf-modified-42cae66dfbde55b74a18efcc-=""><i
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_minus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=22go50mon0ke&v=down')" title="Don&#39;t Like" data-cf-modified-2b0d82ffb81a8be8a3dd04a1-=""><i
class="icon icon_dislike icon_align_left icon-size_20 dowonload-rating__icon"></i><span id="dislikes_num">
0
</span></button>
@ -264,7 +264,7 @@ $.cookie('aff', '14532', { expires: 10 });
<ul class="dropdown-menu downloadbox__dropdown-menu">
<li>
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; download_video('22go50mon0ke','n','1396174-130-61-1746646836-0284dd84d32b999da0164b49232f21fe')" data-cf-modified-42cae66dfbde55b74a18efcc-=""><i
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; download_video('22go50mon0ke','n','1396174-130-61-1746903686-88e9c56541498dffbe90f4b9e084a8dd')" data-cf-modified-2b0d82ffb81a8be8a3dd04a1-=""><i
class="icon icon_download icon_size_18 icon_align_left"></i><b class="downloadbox__quality">
Normal quality
</b><span class="downloadbox__size">
@ -349,9 +349,9 @@ $.cookie('aff', '14532', { expires: 10 });
</div>
</div>
<script type="42cae66dfbde55b74a18efcc-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('e("3m").3l({3k:[{m:"6://3j.n.4/3i/,3h,.3g/3f.3e"}],3d:"6://i.n.4/3c.10",3b:"14%",3a:"14%",39:"38",37:"13.11",36:\'35\',34:"l",33:"l",32:"31",30:"2z",2y:[0.25,0.5,0.2x,1,1.25,1.5,2],2w:{2v:"2u"},2t:[{m:"/2s?t=2r&2q=13.11&2p=6://i.n.4/2o.10",2n:"2m"}],2l:{2k:\'#2j\',2i:12,2h:"2g",2f:0,2e:\'2d\',2c:2b},2a:"29",28:"",27:{m:"6://d.4/r/26.q",24:"6://d.4/c",8:"o-23",22:"5",u:l},21:{}});k f,j,h=0;k 20=0,1z=0;k 7=e();7.9(\'1y\',3(x){b(5>0&&x.8>=5&&j!=1){j=1;$(\'g.1x\').1w(\'1v\')}b(h==0&&x.8>=z&&x.8<=(z+2)){h=x.8}});7.9(\'1u\',3(x){y(x)});7.9(\'1t\',3(){$(\'g.w\').1s()});3 y(x){$(\'g.w\').u();b(f)1r;f=1;a=0;b(p.1q===1p){a=1}$.1o(\'/1n?t=1m&1l=c&1k=1j-1i-1h-1g-1f&1e=&a=\'+a,3(s){$(\'#1d\').1c(s)})}7.9(\'1b\',3(){});e().1a("6://d.4/r/19.q","18",3(){p.o.17.16=\'/v/c\'},"15");',36,131,'|||function|cc||https|player|position|on|adb|if|22go50mon0ke|supervideo|jwplayer|vvplay|div|x2ok||vvad|var|true|file|serversicuro|top|window|png|images|data|op|hide||video_ad||doPlay|1111|jpg|60||4444|100|download11|href|location|Download|download2|addButton|ready|html|fviews|embed|49962ceb3bba76bd843b7b7aeef61c46|1746646835|61|130|1396174|hash|file_code|view|dl|get|undefined|cRAds|return|show|complete|play|slow|fadeIn|video_ad_fadein|time|vastdone2|vastdone1|cast|margin|right|link||logo_p|logo|aboutlink|xvs|abouttext|90|fontOpacity|none|edgeStyle|backgroundOpacity|Verdana|fontFamily|fontSize|FFFFFF|color|captions|thumbnails|kind|22go50mon0ke0000|url|length|get_slides|dlf|tracks|myskin|name|skin|75|playbackRateControls|start|startparam|html5|primary|hlshtml|androidhls|metadata|preload|duration|uniform|stretching|height|width|22go50mon0ke_xt|image|m3u8|master|urlset|dnzpervt3xg4a3gyvdix52ttsqpj5jgxs7keazdmhvru2uyin5gujtxe5u4a|hls|hfs279|sources|setup|vplayer'.split('|')))
<script type="2b0d82ffb81a8be8a3dd04a1-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('e("3m").3l({3k:[{m:"6://3j.n.4/3i/,3h,.3g/3f.3e"}],3d:"6://i.n.4/3c.10",3b:"14%",3a:"14%",39:"38",37:"13.11",36:\'35\',34:"l",33:"l",32:"31",30:"2z",2y:[0.25,0.5,0.2x,1,1.25,1.5,2],2w:{2v:"2u"},2t:[{m:"/2s?t=2r&2q=13.11&2p=6://i.n.4/2o.10",2n:"2m"}],2l:{2k:\'#2j\',2i:12,2h:"2g",2f:0,2e:\'2d\',2c:2b},2a:"29",28:"",27:{m:"6://d.4/r/26.q",24:"6://d.4/c",8:"o-23",22:"5",u:l},21:{}});k f,j,h=0;k 20=0,1z=0;k 7=e();7.9(\'1y\',3(x){b(5>0&&x.8>=5&&j!=1){j=1;$(\'g.1x\').1w(\'1v\')}b(h==0&&x.8>=z&&x.8<=(z+2)){h=x.8}});7.9(\'1u\',3(x){y(x)});7.9(\'1t\',3(){$(\'g.w\').1s()});3 y(x){$(\'g.w\').u();b(f)1r;f=1;a=0;b(p.1q===1p){a=1}$.1o(\'/1n?t=1m&1l=c&1k=1j-1i-1h-1g-1f&1e=&a=\'+a,3(s){$(\'#1d\').1c(s)})}7.9(\'1b\',3(){});e().1a("6://d.4/r/19.q","18",3(){p.o.17.16=\'/v/c\'},"15");',36,131,'|||function|cc||https|player|position|on|adb|if|22go50mon0ke|supervideo|jwplayer|vvplay|div|x2ok||vvad|var|true|file|serversicuro|top|window|png|images|data|op|hide||video_ad||doPlay|1111|jpg|60||4444|100|download11|href|location|Download|download2|addButton|ready|html|fviews|embed|79ae1783a18f09a22b00d441b919acf4|1746903685|61|130|1396174|hash|file_code|view|dl|get|undefined|cRAds|return|show|complete|play|slow|fadeIn|video_ad_fadein|time|vastdone2|vastdone1|cast|margin|right|link||logo_p|logo|aboutlink|xvs|abouttext|90|fontOpacity|none|edgeStyle|backgroundOpacity|Verdana|fontFamily|fontSize|FFFFFF|color|captions|thumbnails|kind|22go50mon0ke0000|url|length|get_slides|dlf|tracks|myskin|name|skin|75|playbackRateControls|start|startparam|html5|primary|hlshtml|androidhls|metadata|preload|duration|uniform|stretching|height|width|22go50mon0ke_xt|image|m3u8|master|urlset|dnzpervt3xg4a3gyvdix52ttsqpj5jgxs7keazdmhvru2uyin5g7f67a5u4a|hls|hfs279|sources|setup|vplayer'.split('|')))
</script>
<script type="42cae66dfbde55b74a18efcc-text/javascript">
<script type="2b0d82ffb81a8be8a3dd04a1-text/javascript">
</script>
@ -397,5 +397,5 @@ $.cookie('aff', '14532', { expires: 10 });
</div>
</div>
</footer>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="42cae66dfbde55b74a18efcc-|49" defer></script></body>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="2b0d82ffb81a8be8a3dd04a1-|49" defer></script></body>
</html>

View file

@ -15,9 +15,9 @@
<link rel="stylesheet" href="https://supervideo.cc/assets/css/style.css?v=130">
<!-- jsdata -->
<script src="https://supervideo.cc/assets/js/libs.min.js?v=2" type="984fd910af585e6bd302d264-text/javascript"></script>
<script src="https://supervideo.cc/assets/js/common.js?v=2" type="984fd910af585e6bd302d264-text/javascript"></script>
<script src="https://supervideo.cc/js/xupload.js?v=4" type="984fd910af585e6bd302d264-text/javascript"></script>
<script src="https://supervideo.cc/assets/js/libs.min.js?v=2" type="e152b60ced1d55f4994d258c-text/javascript"></script>
<script src="https://supervideo.cc/assets/js/common.js?v=2" type="e152b60ced1d55f4994d258c-text/javascript"></script>
<script src="https://supervideo.cc/js/xupload.js?v=4" type="e152b60ced1d55f4994d258c-text/javascript"></script>
<!-- favicon -->
<link rel="apple-touch-icon" href="https://supervideo.cc/assets/images/favicon/apple-touch-icon.png" sizes="180x180">
<link rel="icon" href="https://supervideo.cc/assets/images/favicon/favicon-32x32.png" sizes="32x32">
@ -107,8 +107,8 @@
<!--100% ads-->
<script src="/9271593.js" type="984fd910af585e6bd302d264-text/javascript"></script>
<script src="/9271609.js" type="984fd910af585e6bd302d264-text/javascript"></script>
<script src="/9271593.js" type="e152b60ced1d55f4994d258c-text/javascript"></script>
<script src="/9271609.js" type="e152b60ced1d55f4994d258c-text/javascript"></script>
<script data-cfasync="false" async type="text/javascript" src="//zm.nostocbark.com/rljPIWhbr4xr/115547"></script>
@ -121,8 +121,8 @@
<script language="JavaScript" type="984fd910af585e6bd302d264-text/javascript" CHARSET="UTF-8" src="https://supervideo.cc/js/jquery.cookie.js"></script>
<script type="984fd910af585e6bd302d264-text/javascript">
<script language="JavaScript" type="e152b60ced1d55f4994d258c-text/javascript" CHARSET="UTF-8" src="https://supervideo.cc/js/jquery.cookie.js"></script>
<script type="e152b60ced1d55f4994d258c-text/javascript">
$.cookie('file_id', '2071851', { expires: 10 });
$.cookie('aff', '11057', { expires: 10 });
@ -144,10 +144,10 @@ $.cookie('aff', '11057', { expires: 10 });
<div class="download__player">
<div class="overlay " >
<script type="984fd910af585e6bd302d264-text/javascript" src='https://supervideo.cc/player8/jwplayer.js'></script>
<script type="984fd910af585e6bd302d264-text/javascript">jwplayer.key="9dOyFG96QFb9AWbR+FhhislXHfV1gIhrkaxLYfLydfiYyC0s";</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-46849459-36" type="984fd910af585e6bd302d264-text/javascript"></script>
<script type="984fd910af585e6bd302d264-text/javascript">
<script type="e152b60ced1d55f4994d258c-text/javascript" src='https://supervideo.cc/player8/jwplayer.js'></script>
<script type="e152b60ced1d55f4994d258c-text/javascript">jwplayer.key="9dOyFG96QFb9AWbR+FhhislXHfV1gIhrkaxLYfLydfiYyC0s";</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-46849459-36" type="e152b60ced1d55f4994d258c-text/javascript"></script>
<script type="e152b60ced1d55f4994d258c-text/javascript">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
@ -167,7 +167,7 @@ $.cookie('aff', '11057', { expires: 10 });
<link rel="stylesheet" type="text/css" href="https://supervideo.cc/assets/player/myskinfile.css?v=11">
<script src="https://supervideo.cc/js/pop.js" type="984fd910af585e6bd302d264-text/javascript"></script>
<script src="https://supervideo.cc/js/pop.js" type="e152b60ced1d55f4994d258c-text/javascript"></script>
<div id='vplayer' style="width:100%;height:100%;text-align:center;"><img src="https://i.serversicuro.cc/q7i0sw1oytw3_xt.jpg" style="width:100%;height:100%;"></div>
</div>
</div>
@ -186,7 +186,7 @@ $.cookie('aff', '11057', { expires: 10 });
germancloud123
</a></li>
<li><i class="icon icon_eye icon_align_left"></i>
1830 views
1833 views
</li>
<li><button type="button" class="btn download__flag" data-toggle="modal" data-target="#vid-flag"><i class="icon icon_flag"></i></button>
<div class="modal fade" id="vid-flag" tabindex="-1" role="dialog" aria-labelledby="modal-title" aria-hidden="true">
@ -199,7 +199,7 @@ $.cookie('aff', '11057', { expires: 10 });
</button>
</div>
<div class="modal-body" id="id_flag">
<form class="form" method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); $('#id_flag').wrapInner('<span></span>').addClass('alert alert-success'); } );return false;" data-cf-modified-984fd910af585e6bd302d264-="">
<form class="form" method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); $('#id_flag').wrapInner('<span></span>').addClass('alert alert-success'); } );return false;" data-cf-modified-e152b60ced1d55f4994d258c-="">
<input type="hidden" name="op" value="report_file">
<input type="hidden" name="file_code" value="q7i0sw1oytw3">
<div class="form__group">
@ -236,18 +236,18 @@ $.cookie('aff', '11057', { expires: 10 });
</div>
<div class="col-sm-auto">
<ul class="download-social">
<li><a class="download-social__item download-social__item_facebook" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Facebook', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://www.facebook.com/sharer/sharer.php?u=/q7i0sw1oytw3" data-cf-modified-984fd910af585e6bd302d264-=""><i class="icon icon_facebook"></i></a></li>
<li><a class="download-social__item download-social__item_twitter" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Twitter', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://twitter.com/intent/tweet?text=des-teufels-bad-2024" data-cf-modified-984fd910af585e6bd302d264-=""><i class="icon icon_twitter"></i></a></li>
<li><a class="download-social__item download-social__item_facebook" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Facebook', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://www.facebook.com/sharer/sharer.php?u=/q7i0sw1oytw3" data-cf-modified-e152b60ced1d55f4994d258c-=""><i class="icon icon_facebook"></i></a></li>
<li><a class="download-social__item download-social__item_twitter" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Twitter', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://twitter.com/intent/tweet?text=des-teufels-bad-2024" data-cf-modified-e152b60ced1d55f4994d258c-=""><i class="icon icon_twitter"></i></a></li>
</ul>
</div>
<div class="col-auto">
<div class="dowonload-rating" id="vote">
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_plus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=q7i0sw1oytw3&v=up')" title="Like" data-cf-modified-984fd910af585e6bd302d264-=""><i
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_plus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=q7i0sw1oytw3&v=up')" title="Like" data-cf-modified-e152b60ced1d55f4994d258c-=""><i
class="icon icon_like icon_align_left icon-size_20 dowonload-rating__icon"></i><span id="likes_num">
0
</span></button>
<span class="dowonload-rating__divider"></span>
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_minus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=q7i0sw1oytw3&v=down')" title="Don&#39;t Like" data-cf-modified-984fd910af585e6bd302d264-=""><i
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_minus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=q7i0sw1oytw3&v=down')" title="Don&#39;t Like" data-cf-modified-e152b60ced1d55f4994d258c-=""><i
class="icon icon_dislike icon_align_left icon-size_20 dowonload-rating__icon"></i><span id="dislikes_num">
0
</span></button>
@ -264,7 +264,7 @@ $.cookie('aff', '11057', { expires: 10 });
<ul class="dropdown-menu downloadbox__dropdown-menu">
<li>
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; download_video('q7i0sw1oytw3','n','2071851-130-61-1746643877-522918f4433ccf39599ad14f728e96bf')" data-cf-modified-984fd910af585e6bd302d264-=""><i
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; download_video('q7i0sw1oytw3','n','2071851-130-61-1746903745-e8be3229426947800bfdcef2f350092d')" data-cf-modified-e152b60ced1d55f4994d258c-=""><i
class="icon icon_download icon_size_18 icon_align_left"></i><b class="downloadbox__quality">
Normal quality
</b><span class="downloadbox__size">
@ -349,9 +349,9 @@ $.cookie('aff', '11057', { expires: 10 });
</div>
</div>
<script type="984fd910af585e6bd302d264-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('e("3l").3k({3j:[{m:"6://3i.n.4/3h/,3g,.3f/3e.3d"}],3c:"6://i.n.4/3b.11",3a:"15%",39:"15%",38:"10",37:"14.13",36:\'35\',34:"l",33:"l",32:"31",30:"2z",2y:[0.25,0.5,0.2x,1,1.25,1.5,2],2w:{2v:"2u"},2t:[{m:"/2s?t=2r&2q=14.13&2p=6://i.n.4/2o.11",2n:"2m"}],2l:{2k:\'#2j\',2i:12,2h:"2g",2f:0,2e:\'10\',2d:2c},2b:"2a",29:"",28:{m:"6://d.4/r/27.q",26:"6://d.4/c",8:"o-24",23:"5",u:l},22:{}});k f,j,h=0;k 21=0,20=0;k 7=e();7.9(\'1z\',3(x){b(5>0&&x.8>=5&&j!=1){j=1;$(\'g.1y\').1x(\'1w\')}b(h==0&&x.8>=z&&x.8<=(z+2)){h=x.8}});7.9(\'1v\',3(x){y(x)});7.9(\'1u\',3(){$(\'g.w\').1t()});3 y(x){$(\'g.w\').u();b(f)1s;f=1;a=0;b(p.1r===1q){a=1}$.1p(\'/1o?t=1n&1m=c&1l=1k-1j-1i-1h-1g&1f=&a=\'+a,3(s){$(\'#1e\').1d(s)})}7.9(\'1c\',3(){});e().1b("6://d.4/r/1a.q","19",3(){p.o.18.17=\'/v/c\'},"16");',36,130,'|||function|cc||https|player|position|on|adb|if|q7i0sw1oytw3|supervideo|jwplayer|vvplay|div|x2ok||vvad|var|true|file|serversicuro|top|window|png|images|data|op|hide||video_ad||doPlay|1814|uniform|jpg||58|7258|100|download11|href|location|Download|download2|addButton|ready|html|fviews|embed|9b2d39efe6d0590778523b0549bd11ed|1746643876|61|130|2071851|hash|file_code|view|dl|get|undefined|cRAds|return|show|complete|play|slow|fadeIn|video_ad_fadein|time|vastdone2|vastdone1|cast|margin|right||link|logo_p|logo|aboutlink|xvs|abouttext|90|fontOpacity|edgeStyle|backgroundOpacity|Verdana|fontFamily|fontSize|FFFFFF|color|captions|thumbnails|kind|q7i0sw1oytw30000|url|length|get_slides|dlf|tracks|myskin|name|skin|75|playbackRateControls|start|startparam|html5|primary|hlshtml|androidhls|metadata|preload|duration|stretching|height|width|q7i0sw1oytw3_xt|image|m3u8|master|urlset|dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p56thhyquqzo3klbfa|hls|hfs290|sources|setup|vplayer'.split('|')))
<script type="e152b60ced1d55f4994d258c-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('e("3l").3k({3j:[{m:"6://3i.n.4/3h/,3g,.3f/3e.3d"}],3c:"6://i.n.4/3b.11",3a:"15%",39:"15%",38:"10",37:"14.13",36:\'35\',34:"l",33:"l",32:"31",30:"2z",2y:[0.25,0.5,0.2x,1,1.25,1.5,2],2w:{2v:"2u"},2t:[{m:"/2s?t=2r&2q=14.13&2p=6://i.n.4/2o.11",2n:"2m"}],2l:{2k:\'#2j\',2i:12,2h:"2g",2f:0,2e:\'10\',2d:2c},2b:"2a",29:"",28:{m:"6://d.4/r/27.q",26:"6://d.4/c",8:"o-24",23:"5",u:l},22:{}});k f,j,h=0;k 21=0,20=0;k 7=e();7.9(\'1z\',3(x){b(5>0&&x.8>=5&&j!=1){j=1;$(\'g.1y\').1x(\'1w\')}b(h==0&&x.8>=z&&x.8<=(z+2)){h=x.8}});7.9(\'1v\',3(x){y(x)});7.9(\'1u\',3(){$(\'g.w\').1t()});3 y(x){$(\'g.w\').u();b(f)1s;f=1;a=0;b(p.1r===1q){a=1}$.1p(\'/1o?t=1n&1m=c&1l=1k-1j-1i-1h-1g&1f=&a=\'+a,3(s){$(\'#1e\').1d(s)})}7.9(\'1c\',3(){});e().1b("6://d.4/r/1a.q","19",3(){p.o.18.17=\'/v/c\'},"16");',36,130,'|||function|cc||https|player|position|on|adb|if|q7i0sw1oytw3|supervideo|jwplayer|vvplay|div|x2ok||vvad|var|true|file|serversicuro|top|window|png|images|data|op|hide||video_ad||doPlay|1814|uniform|jpg||58|7258|100|download11|href|location|Download|download2|addButton|ready|html|fviews|embed|93ab40e175b6d83dbf807c5f0206299a|1746903744|61|130|2071851|hash|file_code|view|dl|get|undefined|cRAds|return|show|complete|play|slow|fadeIn|video_ad_fadein|time|vastdone2|vastdone1|cast|margin|right||link|logo_p|logo|aboutlink|xvs|abouttext|90|fontOpacity|edgeStyle|backgroundOpacity|Verdana|fontFamily|fontSize|FFFFFF|color|captions|thumbnails|kind|q7i0sw1oytw30000|url|length|get_slides|dlf|tracks|myskin|name|skin|75|playbackRateControls|start|startparam|html5|primary|hlshtml|androidhls|metadata|preload|duration|stretching|height|width|q7i0sw1oytw3_xt|image|m3u8|master|urlset|dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p56thhyqu6ra3olbfa|hls|hfs290|sources|setup|vplayer'.split('|')))
</script>
<script type="984fd910af585e6bd302d264-text/javascript">
<script type="e152b60ced1d55f4994d258c-text/javascript">
</script>
@ -397,5 +397,5 @@ $.cookie('aff', '11057', { expires: 10 });
</div>
</div>
</footer>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="984fd910af585e6bd302d264-|49" defer></script></body>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="e152b60ced1d55f4994d258c-|49" defer></script></body>
</html>

View file

@ -3,12 +3,12 @@ import type { Config } from 'jest';
const config: Config = {
collectCoverage: true,
collectCoverageFrom: [
'./src/**/*.ts',
'!./src/**/index.ts',
'!./src/**/types.ts',
'!./src/landingTemplate.ts',
'<rootDir>/src/**/*.ts',
'!<rootDir>/src/**/index.ts',
'!<rootDir>/src/**/types.ts',
'!<rootDir>/src/landingTemplate.ts',
],
coverageDirectory: 'coverage',
coverageDirectory: '<rootDir>/coverage',
coverageProvider: 'babel',
coverageThreshold: {
global: {
@ -18,7 +18,9 @@ const config: Config = {
statements: 100,
},
},
resetModules: true,
restoreMocks: true,
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
testEnvironment: 'node',
transform: {
'^.+.tsx?$': ['ts-jest', {}],

22
jest.setup.ts Normal file
View file

@ -0,0 +1,22 @@
import { cachedFetchText } from './src/utils/fetch';
import fs from 'node:fs';
import slugify from 'slugify';
// Mocks cachedFetchText and either returns existing fixtures or creates new ones
jest.mock('./src/utils/fetch', () => ({
cachedFetchText: jest.fn(),
}));
(cachedFetchText as jest.Mock).mockImplementation(
async (url: string) => {
const path = `${__dirname}/fixtures/cachedFetchText/${slugify(url)}`;
if (fs.existsSync(path)) {
return fs.readFileSync(path).toString();
} else {
const realFetchModule = jest.requireActual('./src/utils/fetch');
const text = await realFetchModule.cachedFetchText(url);
fs.writeFileSync(path, text);
return text;
}
},
);

View file

@ -0,0 +1,30 @@
import { EmbedExtractor } from './types';
import { cachedFetchText, extractUrlFromPacked, iso2ToFlag, scanFromResolution } from '../utils';
export class Dropload implements EmbedExtractor {
readonly id = 'dropload';
readonly label = 'Dropload';
readonly extract = async (url: string, language: string) => {
const normalizedUrl = url.replace('/e/', '').replace('/embed-', '/');
const html = await cachedFetchText(normalizedUrl);
const resolutionMatch = html.match(/(\d{3,}x\d{3,}),/);
const resolution = resolutionMatch && resolutionMatch[1] ? scanFromResolution(resolutionMatch[1]) : undefined;
const sizeMatch = html.match(/([\d.]+) ?([GM]B)/);
const size = sizeMatch && sizeMatch[1] && sizeMatch[2] ? `${sizeMatch[1]} ${sizeMatch[2]}` : undefined;
return {
url: await extractUrlFromPacked(html, [/sources:\[{file:"(.*?)"/]),
name: `WebStreamr ${resolution}`,
title: `${this.label} | 💾 ${size} | ${iso2ToFlag(language)}`,
behaviorHints: {
group: `webstreamr-${this.id}`,
},
resolution,
size,
};
};
}

View file

@ -0,0 +1,31 @@
import { EmbedExtractor } from './types';
import { cachedFetchText, extractUrlFromPacked, iso2ToFlag, scanFromResolution } from '../utils';
export class SuperVideo implements EmbedExtractor {
readonly id = 'supervideo';
readonly label = 'SuperVideo';
readonly extract = async (url: string, language: string) => {
const normalizedUrl = url.replace('/e/', '').replace('/embed-', '/');
const html = await cachedFetchText(normalizedUrl);
// TODO: resolution and size can be merged: <span class="downloadbox__size">1280x720, 699.8 MB</span>
const resolutionMatch = html.match(/(\d{3,}x\d{3,}),/);
const resolution = resolutionMatch && resolutionMatch[1] ? scanFromResolution(resolutionMatch[1]) : undefined;
const sizeMatch = html.match(/([\d.]+) ?([GM]B)/);
const size = sizeMatch && sizeMatch[1] && sizeMatch[2] ? `${sizeMatch[1]} ${sizeMatch[2]}` : undefined;
return {
url: await extractUrlFromPacked(html, [/sources:\[{file:"(.*?)"/]),
name: `WebStreamr ${resolution}`,
title: `${this.label} | 💾 ${size} | ${iso2ToFlag(language)}`,
behaviorHints: {
group: `webstreamr-${this.id}`,
},
resolution,
size,
};
};
}

View file

@ -0,0 +1,10 @@
import { Dropload } from './Dropload';
import { SuperVideo } from './SuperVideo';
import { EmbedExtractor } from './types';
type EmbedExtractorRegistryType = Record<string, EmbedExtractor>;
export const EmbedExtractorRegistry: EmbedExtractorRegistryType = {
dropload: new Dropload(),
supervideo: new SuperVideo(),
};

View file

@ -0,0 +1,9 @@
import { StreamWithMeta } from '../types';
export interface EmbedExtractor {
readonly id: string;
readonly label: string;
readonly extract: (embedUrl: string, language: string) => Promise<StreamWithMeta>;
}

View file

@ -1,17 +1,7 @@
import fs from 'node:fs';
import slugify from 'slugify';
import { KinoKiste } from './KinoKiste';
import { cachedFetchText } from '../utils';
const kinokiste = new KinoKiste();
jest.mock('./../utils/fetch', () => ({
cachedFetchText: jest.fn(),
}));
(cachedFetchText as jest.Mock).mockImplementation(
(url: string) => fs.readFileSync(`${__dirname}/fixtures/kinokiste/${slugify(url)}`).toString(),
);
describe('KinoKiste', () => {
test('does not handle non imdb series', async () => {
const streams = await kinokiste.handle('kitsu:123');
@ -31,22 +21,22 @@ describe('KinoKiste', () => {
expect(streams).toHaveLength(2);
expect(streams[0]).toStrictEqual({
behaviorHints: {
group: 'webstreamr-kinokiste-supervideo',
group: 'webstreamr-supervideo',
},
name: 'WebStreamr DE | 720p',
name: 'WebStreamr 720p',
resolution: '720p',
size: '699.8 MB',
title: 'KinoKiste - supervideo | 💾 699.8 MB | 🇩🇪',
title: 'SuperVideo | 💾 699.8 MB | 🇩🇪',
url: expect.stringMatching(/^https:\/\/.*?.m3u8/),
});
expect(streams[1]).toStrictEqual({
behaviorHints: {
group: 'webstreamr-kinokiste-dropload',
group: 'webstreamr-dropload',
},
name: 'WebStreamr DE | 720p',
name: 'WebStreamr 720p',
resolution: '720p',
size: '699.8 MB',
title: 'KinoKiste - dropload | 💾 699.8 MB | 🇩🇪',
title: 'Dropload | 💾 699.8 MB | 🇩🇪',
url: expect.stringMatching(/^https:\/\/.*?.m3u8/),
});
});

View file

@ -1,7 +1,8 @@
import * as cheerio from 'cheerio';
import slugify from 'slugify';
import { Handler } from './types';
import { ImdbId, cachedFetchText, fulfillAllPromises, parseImdbId, parsePackedEmbed } from '../utils';
import { ImdbId, cachedFetchText, fulfillAllPromises, parseImdbId } from '../utils';
import { EmbedExtractorRegistry } from '../embed-extractor';
export class KinoKiste implements Handler {
readonly id = 'kinokiste';
@ -24,23 +25,27 @@ export class KinoKiste implements Handler {
return Promise.resolve([]);
}
const streamsPromises = (await this.fetchStreamData(imdbId, seriesPageUrl))
.map(async ({ group, url }) => {
const { url: finalUrl, resolution, size } = await parsePackedEmbed(url);
const html = await cachedFetchText(seriesPageUrl);
return {
url: finalUrl,
name: `WebStreamr DE | ${resolution}`,
title: `${this.label} - ${group} | 💾 ${size} | 🇩🇪`,
behaviorHints: {
group: `webstreamr-${this.id}-${group}`,
},
resolution,
size,
};
});
const $ = cheerio.load(html);
return fulfillAllPromises(streamsPromises);
return fulfillAllPromises(
$(`[data-num="${imdbId.series}x${imdbId.episode}"]`).map((_i, urlWrapperElement) => {
return $(urlWrapperElement).siblings('.mirrors').children('[data-link]')
.map((_i, urlElement) => ({
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
embedId: slugify($(urlElement).attr('data-m')!),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
embedUrl: $(urlElement).attr('data-link')!
.replace(/^(https:)?\/\//, 'https://'),
}))
.toArray()
.filter(({ embedId }) => embedId.match(/^(dropload|supervideo)$/));
})
.toArray()
.map(({ embedId, embedUrl }) => EmbedExtractorRegistry[embedId]?.extract(embedUrl, 'de'))
.filter(stream => stream !== undefined),
);
};
private fetchSeriesPageUrl = async (imdbId: ImdbId): Promise<string | undefined> => {
@ -52,25 +57,4 @@ export class KinoKiste implements Handler {
.map((_i, el) => $(el).attr('href'))
.get(0);
};
private fetchStreamData = async (imdbId: ImdbId, seriesPageUrl: string): Promise<{ group: string; url: string }[]> => {
const html = await cachedFetchText(seriesPageUrl);
const $ = cheerio.load(html);
return $(`[data-num="${imdbId.series}x${imdbId.episode}"]`).map((_i, urlWrapperElement) => {
return $(urlWrapperElement).siblings('.mirrors').children('[data-link]')
.map((_i, urlElement) => ({
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
group: slugify($(urlElement).attr('data-m')!),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
url: $(urlElement).attr('data-link')!
.replace(/^(https:)?\/\//, 'https://')
.replace('/e/', '/')
.replace('/embed-', '/'),
}))
.toArray()
.filter(({ url }) => url.match(/dropload|supervideo/));
}).toArray();
};
}

View file

@ -1,17 +1,7 @@
import fs from 'node:fs';
import slugify from 'slugify';
import { MeineCloud } from './MeineCloud';
import { cachedFetchText } from '../utils';
const meinecloud = new MeineCloud();
jest.mock('./../utils/fetch', () => ({
cachedFetchText: jest.fn(),
}));
(cachedFetchText as jest.Mock).mockImplementation(
(url: string) => fs.readFileSync(`${__dirname}/fixtures/meinecloud/${slugify(url)}`).toString(),
);
describe('MeineCloud', () => {
test('does not handle non imdb movies', async () => {
const streams = await meinecloud.handle('kitsu:123');
@ -31,22 +21,22 @@ describe('MeineCloud', () => {
expect(streams).toHaveLength(2);
expect(streams[0]).toStrictEqual({
behaviorHints: {
group: 'webstreamr-meinecloud-supervideo',
group: 'webstreamr-supervideo',
},
name: 'WebStreamr DE | 720p',
name: 'WebStreamr 720p',
resolution: '720p',
size: '1.0 GB',
title: 'MeineCloud - supervideo | 💾 1.0 GB | 🇩🇪',
title: 'SuperVideo | 💾 1.0 GB | 🇩🇪',
url: expect.stringMatching(/^https:\/\/.*?.m3u8/),
});
expect(streams[1]).toStrictEqual({
behaviorHints: {
group: 'webstreamr-meinecloud-dropload',
group: 'webstreamr-dropload',
},
name: 'WebStreamr DE | 1080p',
name: 'WebStreamr 1080p',
resolution: '1080p',
size: '1.3 GB',
title: 'MeineCloud - dropload | 💾 1.3 GB | 🇩🇪',
title: 'Dropload | 💾 1.3 GB | 🇩🇪',
url: expect.stringMatching(/^https:\/\/.*?.m3u8/),
});
});

View file

@ -1,7 +1,8 @@
import * as cheerio from 'cheerio';
import slugify from 'slugify';
import { Handler } from './types';
import { cachedFetchText, fulfillAllPromises, parseImdbId, parsePackedEmbed } from '../utils';
import { cachedFetchText, fulfillAllPromises, parseImdbId } from '../utils';
import { EmbedExtractorRegistry } from '../embed-extractor';
export class MeineCloud implements Handler {
readonly id = 'meinecloud';
@ -20,32 +21,19 @@ export class MeineCloud implements Handler {
const html = await cachedFetchText(`https://meinecloud.click/movie/${parseImdbId(id).id}`);
const $ = cheerio.load(html);
const streamsPromises = $('[data-link!=""]')
.map((_i, el) => ({
group: slugify($(el).text()),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
url: $(el).attr('data-link')!
.replace(/^(https:)?\/\//, 'https://')
.replace('/e/', '/')
.replace('/embed-', '/'),
}))
.toArray()
.filter(({ url }) => url.match(/dropload|supervideo/))
.map(async ({ group, url }) => {
const { url: finalUrl, resolution, size } = await parsePackedEmbed(url);
return {
url: finalUrl,
name: `WebStreamr DE | ${resolution}`,
title: `${this.label} - ${group} | 💾 ${size} | 🇩🇪`,
behaviorHints: {
group: `webstreamr-${this.id}-${group}`,
},
resolution,
size,
};
});
return fulfillAllPromises(streamsPromises);
return fulfillAllPromises(
$('[data-link!=""]')
.map((_i, el) => ({
embedId: slugify($(el).text()),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
embedUrl: $(el).attr('data-link')!
.replace(/^(https:)?\/\//, 'https://'),
}))
.toArray()
.filter(({ embedId }) => embedId.match(/^(dropload|supervideo)$/))
.map(({ embedId, embedUrl }) => EmbedExtractorRegistry[embedId]?.extract(embedUrl, 'de'))
.filter(stream => stream !== undefined),
);
};
}

View file

@ -1,6 +1,4 @@
import { Stream } from 'stremio-addon-sdk';
export type HandlerStream = Stream & { resolution: string | undefined; size: string | undefined };
import { StreamWithMeta } from '../types';
export interface Handler {
readonly id: string;
@ -11,5 +9,5 @@ export interface Handler {
readonly languages: string[];
readonly handle: (id: string) => Promise<HandlerStream[]>;
readonly handle: (id: string) => Promise<StreamWithMeta[]>;
}

View file

@ -1,8 +1,8 @@
import express, { NextFunction, Request, Response } from 'express';
import { landingTemplate } from './landingTemplate';
import { Handler, HandlerStream, KinoKiste, MeineCloud } from './handler';
import { Handler, KinoKiste, MeineCloud } from './handler';
import { buildManifest, fulfillAllPromises, logInfo } from './utils';
import { Config } from './types';
import { Config, StreamWithMeta } from './types';
const addon = express();
@ -81,7 +81,7 @@ addon.get('/:config/stream/:type/:id.json', async function (req: Request, res: R
return;
}
const streams: HandlerStream[] = [];
const streams: StreamWithMeta[] = [];
const handlerPromises = selectedHandlers.map(async (handler) => {
if (!handler.contentTypes.includes(type)) {
return;

View file

@ -1,5 +1,7 @@
import { Manifest, ManifestConfig } from 'stremio-addon-sdk';
import { Manifest, ManifestConfig, Stream } from 'stremio-addon-sdk';
export type ManifestWithConfig = Manifest & { config: ManifestConfig[] };
export type Config = Record<string, string>;
export type StreamWithMeta = Stream & { resolution: string | undefined; size: string | undefined };

View file

@ -1,58 +1,28 @@
import { unpack } from 'unpacker';
import { cachedFetchText } from './fetch';
import { parsePackedEmbed } from './embed';
import { extractUrlFromPacked } from './embed';
jest.mock('unpacker', () => ({
unpack: jest.fn(),
}));
jest.mock('./fetch', () => ({
cachedFetchText: jest.fn(),
}));
describe('unpackEmbedUrl', () => {
test('throw if no embed was found', async () => {
(cachedFetchText as jest.Mock).mockReturnValue(
Promise.resolve('<html></html>'),
);
await expect(parsePackedEmbed('https://some-url.test')).rejects.toThrow('No p.a.c.k.e.d string found on https://some-url.test');
describe('extractUrlFromPacked', () => {
test('throw if no embed was found', () => {
expect(extractUrlFromPacked('', [/eval/])).rejects.toThrow('No p.a.c.k.e.d string found on https://some-url.test');
});
test('throw if no link was found', async () => {
test('throw if no link was found', () => {
(unpack as jest.Mock).mockReturnValue('some-unexpected-data');
(cachedFetchText as jest.Mock).mockReturnValue(
Promise.resolve('<html><script>(eval(function(p,a,c,k,e,d){...}))</script></html>'),
);
await expect(parsePackedEmbed('https://some-url.test')).rejects.toThrow('Could not find a stream link on https://some-url.test');
expect(extractUrlFromPacked('eval(function(p,a,c,k,e,d){...})', [/eval/])).rejects.toThrow('Could not find a stream link on https://some-url.test');
});
test('finds link with resolution and size', async () => {
test('finds link', async () => {
(unpack as jest.Mock).mockReturnValue('{sources:[{file:"https://streaming-url.mp4"}');
(cachedFetchText as jest.Mock).mockReturnValue(
Promise.resolve('<html><body>Something to stream;1280x720, 834.6 MB<script>(eval(function(p,a,c,k,e,d){...}))</script></body></html>'),
);
const parsePackedEmbedResult = await parsePackedEmbed('https://some-url.test');
expect(parsePackedEmbedResult).toStrictEqual({
url: 'https://streaming-url.mp4',
resolution: '720p',
size: '834.6 MB',
});
});
test('resolution and size return undefined if not found', async () => {
(unpack as jest.Mock).mockReturnValue('{sources:[{file:"https://streaming-url.mp4"}');
(cachedFetchText as jest.Mock).mockReturnValue(
Promise.resolve('<html><body>Something to stream<script>(eval(function(p,a,c,k,e,d){...}))</script></body></html>'),
);
const parsePackedEmbedResult = await parsePackedEmbed('https://some-url.test');
expect(parsePackedEmbedResult).toStrictEqual({
url: 'https://streaming-url.mp4',
resolution: undefined,
size: undefined,
});
expect(extractUrlFromPacked('eval(function(p,a,c,k,e,d){...})', [/eval/])).toBe('https://streaming-url.mp4');
});
});

View file

@ -1,49 +1,19 @@
import { unpack } from 'unpacker';
import { cachedFetchText } from './fetch';
import { scanFromResolution } from './resolution';
const LINK_REGEXPS = [
/sources:\[{file:"(.*?)"/, // dropload, supervideo
];
interface ParsePackedEmbedResult {
url: string;
resolution: string | undefined;
size: string | undefined;
}
const findResolution = (html: string): string | undefined => {
const match = html.match(/(\d{3,}x\d{3,}),/);
return match && match[1] ? scanFromResolution(match[1]) : undefined;
};
const findSize = (html: string): string | undefined => {
const sizeMatch = html.match(/([\d.]+) ?([GM]B)/);
return sizeMatch && sizeMatch[1] && sizeMatch[2] ? `${sizeMatch[1]} ${sizeMatch[2]}` : undefined;
};
export const parsePackedEmbed = async (url: string): Promise<ParsePackedEmbedResult> => {
const html = await cachedFetchText(url);
export const extractUrlFromPacked = (html: string, linkRegExps: RegExp[]): string => {
const evalMatch = html.match(/eval\(function\(p,a,c,k,e,d\).*\)\)/);
if (!evalMatch) {
throw new Error(`No p.a.c.k.e.d string found on ${url}`);
throw new Error(`No p.a.c.k.e.d string found`);
}
const unpacked = unpack(evalMatch[0]);
for (const linkRegexp of LINK_REGEXPS) {
for (const linkRegexp of linkRegExps) {
const linkMatch = unpacked.match(linkRegexp);
if (linkMatch && linkMatch[1]) {
return {
url: 'https://' + linkMatch[1].replace(/^(https:)?\/\//, ''),
resolution: findResolution(html),
size: findSize(html),
};
return 'https://' + linkMatch[1].replace(/^(https:)?\/\//, '');
}
}
throw new Error(`Could not find a stream link on ${url}`);
throw new Error(`Could not find a stream link in embed`);
};

View file

@ -1,4 +1,5 @@
import { cachedFetchText } from './fetch';
const realFetchModule = jest.requireActual('./fetch');
const cachedFetchText = realFetchModule.cachedFetchText;
global.console = {
...console,

View file

@ -5,3 +5,4 @@ export * from './language';
export * from './log';
export * from './manifest';
export * from './promise';
export * from './resolution';