Ë
    Îu¡jI×  ã                   óæ  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mc mZ ddlmZmZ ddlmZmZmZmZmZ ddlmZmZmZmZ ddlZddlZddlZ	 ddlmZ  dZ!ddlZdd	l#m$Z$m%Z%m&Z& ejN                  d
k(  r;	 ejP                  jS                  dd¬«       ejT                  jS                  dd¬«       dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4ejj                  jm                  ejj                  jo                  e8«      «      Z9ejj                  ju                  e9d«      Z;ejj                  ju                  e9d«      Z<ejj                  ju                  e9d«      Z=ejj                  ju                  e9d«      Z>ejj                  ju                  e9d«      Z?ejj                  ju                  e9d«      Z@ejj                  ju                  e9d«      ZAejj                  ju                  e9d«      ZBdaCdUdeDd eEd!eFfd"„ZGdVdeDd!dfd#„ZHdWd$„ZI ej”                  eI«       d%ZKd&ZLeMj�                  d'«      ZOi aPeeEef   eQd(<   e4fd)eEd*eEd!dfd+„ZRdWd,„ZS G d-„ d.«      ZT eTe?«      ZUd!eeEef   fd/„ZVd0eeEef   d!dfd1„ZWdWd2„ZXdWd3„ZYd4eEd!eeEef   fd5„ZZd4eEd!eeFeDeeEef   f   fd6„Z[ddl\Z\ddl]Z]dXd7eEd8eEd9eeeEeEf      d!eeEeeE   f   fd:„Z^dXd;eeEef   d<eeE   d!eEfd=„Z_dYd9eeeEeEf      d>eEd!efd?„Z`d@eEd!eFfdA„ZadBeEd!eeeE   eeE   f   fdC„ZbdDeeEef   d;eeEef   dEeEd!eEfdF„ZcdGeEd4eEd;eeEef   d9eeeEeEf      d!eeeeEef      eeE   f   f
dH„ZddZd@eEdIeEdJeEd;eeEef   dKeeEef   dLeeE   d9eeeEeEf      d!eeeE   eeE   f   fdM„ZedDeeEef   d;eeEef   d4eEdKeeEef   d!eeEef   f
dN„ZfdXd<eeE   d!eeEef   fdO„Zgdahdaid!eeeEef      fdP„Zjd[dQeDd<eeE   d!dfdR„ZkdS„ ZlemdTk(  r el«        yy# e"$ r
 ddlZ dZ!Y �Œ{w xY w# e+$ r Y �Œ/w xY w)\a&  
====================================================================
 DAZN - Manager & DRM Extractor (Widevine WVD)
 Auto-Extractor: Live & Linear Streams (DAZN 1, Plus, ecc.)
 Output: dazn_channels.json & dazn_playlist.m3u
====================================================================
é    N)ÚdatetimeÚ	timedelta)ÚDictÚListÚOptionalÚTupleÚAny)ÚurlparseÚparse_qsÚ	urlencodeÚ
urlunparse)ÚrequestsTF)ÚPSSHÚCdmÚDeviceÚwin32úutf-8Úreplace©ÚencodingÚerrorsz[32mz[33mz[31mz[36mz[34mz[35mz[1mz[2mz[0mzdazn_config.jsonzdazn_tokens.jsonzpssh_cache.jsonzWVD.wvdz	proxy.txtzdazn_channels.jsonzdazn_playlist.m3uzdazn_proxy.pyÚportÚhostÚreturnc                 ó   — 	 t        j                   t         j                  t         j                  «      5 }|j                  d«       |j	                  || f«      dk(  cd d d «       S # 1 sw Y   y xY w# t
        $ r Y yw xY w)Ng      à?r   F)ÚsocketÚAF_INETÚSOCK_STREAMÚ
settimeoutÚ
connect_exÚ	Exception)r   r   Úss      ú3C:\Users\Claud\Documents\ScriptNowTest\dazn\dazn.pyÚis_port_openr$   F   sa   € ðÜ�]‰]œ6Ÿ>™>¬6×+=Ñ+=Ô>À!Ø�L‰L˜ÔØ—<‘<  t Ó-°Ñ2÷ ?×>Ò>ûô ò Ùðús.   ‚2A1 ´'A%Á	A1 Á%A.Á*A1 Á.A1 Á1	A=Á<A=c                 óØ  — t        | «      rt        d| › d�t        «       y t        j                  j                  t        «      st        dt        › �t        «       y t        d| › d�t        «       	 t        j                  t        j                  t        gt        ¬«      at        dt        j                  › d�t        «       y # t         $ r}t        d	|› �t"        «       Y d }~y d }~ww xY w)
Nu5   ðŸ“¡ DAZN Proxy giÃ  attivo e in ascolto sulla porta Ú.u#   âš ï¸� Script proxy non trovato in u3   ðŸš€ Avvio automatico DAZN HTTPS Proxy sulla porta ú...)Úcwdu+   âœ… DAZN Proxy avviato in background (PID: Ú)u'   â�Œ Impossibile avviare dazn_proxy.py: )r$   ÚlogÚGREENÚosÚpathÚexistsÚPROXY_SCRIPT_FILEÚYELLOWÚCYANÚ
subprocessÚPopenÚsysÚ
executableÚ
SCRIPT_DIRÚ_PROXY_PROCESSÚpidr!   ÚRED)r   Úes     r#   Úensure_proxy_runningr;   N   sÈ   € ä�DÔÜÐCÀDÀ6ÈÐKÌUÔSØä�7‰7�>‰>Ô+Ô,ÜÐ1Ô2CÐ1DÐEÄvÔNØäÐ
=¸d¸VÀ3ÐGÌÔNð@Ü#×)Ñ)Ü�^‰^Ô.Ð/Üô
ˆô 	Ð9¼.×:LÑ:LÐ9MÈQÐOÔQVÕWøÜò @ÜÐ5°a°SÐ9¼3×?Ñ?ûð@ús   Á1AC Ã	C)ÃC$Ã$C)c                  ó  — t         rQt         j                  «       €<t        dt        «       	 t         j	                  «        t         j                  d¬«       y y y # t        $ r( 	 t         j                  «        Y y # t        $ r Y Y y w xY ww xY w)Nu   ðŸ›‘ Arresto DAZN Proxy...é   )Útimeout)r7   Úpollr*   r0   Ú	terminateÚwaitr!   Úkill© ó    r#   Ú
stop_proxyrE   b   s{   € åœ.×-Ñ-Ó/Ð7ÜÐ(¬&Ô1ð	Ü×$Ñ$Ô&Ü×Ñ¨ÐÕ*ð	 8€~øô
 ò 	ðÜ×#Ñ#Ö%øÜò Úðúð	ús)   ¬*A Á	B
Á#A9Á9	BÂB
ÂBÂB
é0*  z$edef8ba9-79d6-4ace-a3c8-27dcd51d21edÚ edef8ba979d64acea3c827dcd51d21edÚ
pssh_cacheÚmsgÚcolorc                 ó|   — t        |› dt        j                  «       j                  d«      › d| › t        › �d¬«       y )NÚ[z%H:%M:%Sú] T)Úflush)Úprintr   ÚnowÚstrftimeÚRESET)rI   rJ   s     r#   r*   r*   {   s4   € Ü	ˆUˆG�1”X—\‘\“^×,Ñ,¨ZÓ8Ð9¸¸C¸5ÄÀÐ
HÐPTÖUrD   c                  ó‚   — t         › dt        › d› t        › dt        › dt        › dt        › d› t        › �} t	        | «       y )Nzž
  ____     _     ______  _   _ 
 |  _ \   / \   |__  / \| \ | |
 | | | | / _ \    / /|  \|  \| |
 | |_| |/ ___ \  / /_| |\ \  |
 |____//_/   \_\/____|_| \_|
õÒ   â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�Ú
u=     â—† DAZN Auto-Manager Â· Widevine Extractor & Decryptor â—†)r0   ÚBLUErR   r1   rO   )Úbanners    r#   Úprint_bannerrX   ~   sO   € Ü�ð ô €€z€l”5�'ð Ü€ÐCÄEÀ7ð KÜ€€z€l”5�'ð€Fô 
ˆ&…MrD   c                   ó¼   — e Zd ZdZefdefd„Zdedee   fd„Zde	ddfd	„Z
dd
e	ddfd„Zdeeeef      fd„Zdeeeef      fd„Zdefd„Zdeeeeeef      fd„Zy)ÚProxyManagerzKCarica, analizza, valida e ruota i proxy da proxy.txt o da dazn_config.jsonÚfilepathc                 ó\   — || _         g | _        d | _        d| _        | j	                  «        y )Nr   )r[   ÚproxiesÚconfig_proxyÚcurrent_idxÚload)Úselfr[   s     r#   Ú__init__zProxyManager.__init__�   s)   € Ø ˆŒØ"$ˆŒØ6:ˆÔØˆÔØ�	‰	�rD   Úliner   c                 ó$  — |j                  «       }|r|j                  d«      ry |j                  d«      r|S |j                  d«      }t        |«      dk(  r|\  }}}}d|› d|› d|› d|› �S t        |«      dk(  rd|d   › d|d	   › �S d|v rd|› �S y )
NÚ#)úhttp://zhttps://z	socks5://z
socks5h://Ú:é   rf   Ú@r=   r   é   )ÚstripÚ
startswithÚsplitÚlen)ra   rc   Úpartsr   r   ÚuserÚpwds          r#   Úparse_proxy_linezProxyManager.parse_proxy_line”   s²   € Ø�z‰z‹|ˆÙ�t—‘ sÔ+Øà�?‰?ÐMÔNØˆKà—
‘
˜3“ˆÜˆu‹:˜Š?Ø$)Ñ!ˆD�$˜˜cØ˜T˜F ! C 5¨¨$¨¨q°°Ð7Ð7Ü�‹Z˜1Š_Ø˜U 1™X˜J a¨¨a© zÐ2Ð2Ø�D‰[Ø˜T˜FÐ#Ð#àrD   Ú
proxy_confNc                 ó’  — t        |t        «      rZ|j                  d«      xs |j                  d«      }|j                  d«      xs |j                  d«      }|r||xs |dœ| _        y y t        |t        «      rM|j                  «       r<| j                  |j                  «       «      xs |j                  «       }||dœ| _        y y y )NÚhttpÚhttps©ru   rv   )Ú
isinstanceÚdictÚgetr^   Ústrrk   rr   )ra   rs   Úhttp_pÚhttps_pÚparseds        r#   Úset_config_proxyzProxyManager.set_config_proxy§   s°   € Ü�j¤$Ô'Ø—^‘^ FÓ+ÒF¨z¯~©~¸gÓ/FˆFØ —n‘n WÓ-ÒG°·±ÀÓ1GˆGÙØ-3¸gÒ>OÈÑ$P�Õ!ð ä˜
¤CÔ(¨Z×-=Ñ-=Ô-?Ø×*Ñ*¨:×+;Ñ+;Ó+=Ó>ÒTÀ*×BRÑBRÓBTˆFØ)/¸&Ñ AˆDÕð .@Ð(rD   r^   c                 ó¾  — g | _         |�| j                  |«       t        j                  j	                  | j
                  «      rq	 t        | j
                  ddd¬«      5 }|D ]@  }| j                  |«      }|sŒ|| j                   vsŒ&| j                   j                  |«       ŒB 	 d d d «       d| _
        y d| _
        y # 1 sw Y   ŒxY w# t        $ r
 Y d| _
        y w xY w)NÚrr   Úignorer   r   )r]   r   r,   r-   r.   r[   Úopenrr   Úappendr!   r_   )ra   r^   Úfrc   r~   s        r#   r`   zProxyManager.load±   sÁ   € ØˆŒØÐ#Ø×!Ñ! ,Ô/ä�7‰7�>‰>˜$Ÿ-™-Ô(ðÜ˜$Ÿ-™-¨°wÀxÕPÐTUÛ !˜Ø!%×!6Ñ!6°tÓ!<˜Ú! f°D·L±LÒ&@Ø ŸL™L×/Ñ/°Õ7ñ !"÷ Qð ˆÕ˜1ˆÕ÷ QÐPûô
 ò ØàˆÕðús6   ÁC	 ÁB=Á8B=ÂB=Â%C	 Â=CÃC	 Ã		CÃCc                 ó´   — | j                   r4| j                   | j                  t        | j                   «      z     }||dœS | j                  r| j                  S y )Nrw   )r]   r_   rn   r^   )ra   Ú	proxy_urls     r#   Úget_dictzProxyManager.get_dictÂ   sN   € Ø�<Š<ØŸ™ T×%5Ñ%5¼¸D¿L¹LÓ8IÑ%IÑJˆIØ%°	Ñ:Ð:Ø×ÒØ×$Ñ$Ð$ØrD   c                 óŽ   — | j                   r*| j                  dz   t        | j                   «      z  | _        | j                  «       S )Nrj   )r]   r_   rn   rˆ   ©ra   s    r#   ÚrotatezProxyManager.rotateÊ   s6   € Ø�<Š<Ø $× 0Ñ 0°1Ñ 4¼¸D¿L¹LÓ8IÑIˆDÔØ�}‰}‹ÐrD   c                 ód   — | j                   rt        | j                   «      S | j                  rdS dS )Nrj   r   )r]   rn   r^   rŠ   s    r#   ÚcountzProxyManager.countÏ   s*   € Ø$(§L¢LŒs�4—<‘<Ó ÐU¸D×<MÒ<M°qÐUÐSTÐUrD   c           	      óÆ  — g }t        | j                  «      }|s*| j                  r|j                  | j                  d   «       |D ]¼  }||dœ}t	        j                  «       }	 t        j                  d|d¬«      }t        t	        j                  «       |z
  dz  d«      }|j                  r6|j                  «       j                  dd	«      }|j                  |d
||f«       n"|j                  |dd|j                  › �|f«       Œ¾ |S # t        $ rP}	t        t	        j                  «       |z
  dz  d«      }|j                  |dt        |	«      d d |f«       Y d }	~	�Œd }	~	ww xY w)Nru   rw   z!https://api.ipify.org?format=jsoné
   )r]   r>   éè  rj   ÚipÚOKTFúHTTP é   )Úlistr]   r^   r„   Útimer   rz   ÚroundÚokÚjsonÚstatus_coder!   r{   )
ra   ÚresultsÚlist_to_testÚpÚproxies_dictÚt0r�   Údurr‘   r:   s
             r#   Útest_allzProxyManager.test_allÒ   s7  € ØˆÜ˜DŸL™LÓ)ˆÙ × 1Ò 1Ø×Ñ × 1Ñ 1°&Ñ 9Ô:ãˆAØ$%°Ñ2ˆLÜ—‘“ˆBð
=Ü—L‘LÐ!DÈlÐdfÔg�ÜœTŸY™Y›[¨2Ñ-°Ñ5°qÓ9�Ø—4’4ØŸ™›Ÿ™ d¨DÓ1�BØ—N‘N A t¨R°Ð#5Õ6à—N‘N A u°°a·m±m°_Ð.EÀsÐ#KÔLøð ð ˆøô ò =ÜœTŸY™Y›[¨2Ñ-°Ñ5°qÓ9�Ø—‘  5¬#¨a«&°°"¨+°sÐ;×<Ò<ûð=ús   Á#B DÄ	E ÄAEÅE ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
PROXY_FILEr{   rb   r   rr   r	   r   r`   r   rˆ   r‹   Úintr�   r   r   ÚboolÚfloatr¡   rC   rD   r#   rZ   rZ   ‹   s³   „ ÙUØ'1ñ  ó ð Sð ¨X°c©]ó ð&B¨3ð B°4ó Bñ ð °ó ð"˜( 4¨¨S¨¡>Ñ2ó ð˜  c¨3 h¡Ñ0ó ð
V�só Vð˜$˜u S¨$°°UÐ%:Ñ;Ñ<ô rD   rZ   c                  ó(  — dddddddddddœdd	d
ddddœddd	d
ddddœddddœgdœddidœ} t         j                  j                  t        «      s7t	        t        dd¬«      5 }t        j                  | |dd¬«       d d d «       | }n=	 t	        t        dd¬«      5 }t        j                  |«      }d d d «       dvr| d   |d<   d|v r"d |d   v rt        j                  |d   d    «       |S # 1 sw Y   ŒqxY w# 1 sw Y   ŒIxY w# t        $ r | }Y ŒMw xY w)!NÚ ú$57b6a530-70a4-4d65-b412-46a1a5c22b38ú$66125bf7-0b92-47fc-b618-93cfea67f55cú0.147.8ú@dazn/peng-html5-core/web/webÚitrw   úhttps://www.dazn.com/úA"Chromium";v="152", "Not?A_Brand";v="24", "Google Chrome";v="152"ú?0ú	"Windows"úoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36ÚDAZN)Úrefererú	sec-ch-uaúsec-ch-ua-mobileúsec-ch-ua-platformú
user-agentúx-brandúapplication/octet-stream)úcontent-typer¸   r¹   rº   r»   r¼   r½   Ú4hqcjx5zv91f1bdx71io4bnrlzDAZN 1©ÚidÚnameÚplayback_url)ÚtokenÚemailÚpasswordÚ	device_idÚdaznidÚapp_versionÚ	player_idÚlanguageÚproxyÚheadersÚlicense_headersÚchannelsÚrefresh_interval_hoursé   )ÚdaznÚloopÚwr   ©r   r=   F©ÚindentÚensure_asciir�   rÓ   rÍ   )r,   r-   r.   ÚCONFIG_FILErƒ   r™   Údumpr`   r!   Úproxy_managerr   )Údefault_configr…   Úcfgs      r#   Úload_configrß   ë   s`  € ð ØØØ?Ø<Ø$Ø8ØàØñð
 3Ø`Ø$(Ø&1ð PØ!ñð !;Ø2Ø`Ø$(Ø&1ð PØ!ñ ð 6Ø$Ø$&ñðñ=%
ðN % að
ñO*€NôX �7‰7�>‰>œ+Ô&Ü”+˜s¨WÕ5¸Ü�I‰I�n a°ÀÕF÷ 6à‰ð	!Ü”k 3°Õ9¸QÜ—i‘i “l�÷ :à˜SÑ Ø,¨VÑ4��F‘ð ��}˜ C¨¡KÑ/Ü×&Ñ& s¨6¡{°7Ñ';Ô<à€J÷ 6Ð5ú÷
 :Ð9ûô ò 	!Ø ŠCð	!ús6   Á!C+ÂD ÂC7Â/D Ã+C4Ã7D Ã<D ÄDÄDrÞ   c                 ó¼  — 	 i }t         j                  j                  t        «      r0t	        t        dd¬«      5 }t        j                  |«      }d d d «       |j                  | «       t	        t        dd¬«      5 }t        j                  ||dd¬«       d d d «       y # 1 sw Y   ŒOxY w# 1 sw Y   y xY w# t        $ r}t        d|› �t        «       Y d }~y d }~ww xY w)	Nr�   r   rÖ   rÕ   r=   Fr×   zErrore salvataggio config: )r,   r-   r.   rÚ   rƒ   r™   r`   ÚupdaterÛ   r!   r*   r9   )rÞ   Úcurrentr…   r:   s       r#   Úsave_configrã   *  s¦   € ð	4ØˆÜ�7‰7�>‰>œ+Ô&Ü”k 3°Õ9¸QÜŸ)™) A›,�÷ :à�‰�sÔÜ”+˜s¨WÕ5¸Ü�I‰I�g˜q¨¸Õ?÷ 6Ð5÷ :Ð9ú÷ 6Ð5ûäò 4ÜÐ)¨!¨Ð-¬s×3Ñ3ûð4úsL   ‚7B5 ¹BÁ+B5 Á:B)ÂB5 ÂB&Â"B5 Â)B2Â.B5 Â2B5 Â5	CÂ>CÃCc                  óè   — t         j                  j                  t        «      r2	 t	        t        dd¬«      5 } t        j                  | «      ad d d «       y y # 1 sw Y   y xY w# t        $ r i aY y w xY w)Nr�   r   rÖ   )	r,   r-   r.   Ú
CACHE_FILErƒ   r™   r`   rH   r!   ©r…   s    r#   Ú
load_cacherç   6  sY   € ä	‡w�w‡~�~”jÔ!ð	Ü”j #°Õ8¸AÜ!ŸY™Y q›\�
÷ 9Ð8ð "ç8Ð8ûäò 	ØŠJð	ús.   ¥A# ·AÁA# ÁA ÁA# Á A# Á#A1Á0A1c                  óŒ   — t        t        dd¬«      5 } t        j                  t        | dd¬«       d d d «       y # 1 sw Y   y xY w)NrÕ   r   rÖ   r=   Fr×   )rƒ   rå   r™   rÛ   rH   ræ   s    r#   Ú
save_cacheré   ?  s.   € Ü	Œj˜#¨Õ	0°AÜ�	‰	”*˜a¨¸Õ>÷ 
1×	0Ñ	0ús	   “:ºArÅ   c                 ó<  — 	 | j                  «       j                  d«      }t        |«      dk7  ri S |d   }t        |«      dz  }|dkD  r|dd|z
  z  z  }t        j                  |«      }t        j                  |j                  d«      «      S # t        $ r i cY S w xY w)zFDecodifica il payload di un JWT DAZN senza richiedere librerie esterner&   rÒ   rj   rh   r   Ú=r   )	rk   rm   rn   Úbase64Úurlsafe_b64decoder™   ÚloadsÚdecoder!   )rÅ   ro   Úpayload_b64ÚremÚdecodeds        r#   Údecode_jwt_payloadró   D  sš   € ðØ—‘“×#Ñ# CÓ(ˆÜˆu‹:˜Š?ØˆIØ˜A‘hˆÜ�+Ó Ñ"ˆØ�Š7Ø˜3 ! c¡'™?Ñ*ˆKÜ×*Ñ*¨;Ó7ˆÜ�z‰z˜'Ÿ.™.¨Ó1Ó2Ð2øÜò ØŠ	ðús   ‚.B ±AB ÂBÂBc                 ó¢   — t        | «      }|sddi fS |j                  dd«      }t        t        j                  «       «      }||z
  }|dkD  }|||fS )u*   Verifica validitÃ  e scadenza del JWT DAZNFr   Úexpé<   )ró   rz   r¨   r–   )rÅ   Úpayloadrõ   rP   Ú	remainingÚis_valids         r#   Úcheck_token_statusrú   S  sZ   € ä  Ó'€GÙØ�a˜ˆ|ÐØ
�+‰+�e˜QÓ
€CÜ
Œd�i‰i‹kÓ
€CØ�c‘	€IØ˜2‰~€HØ�Y Ð'Ð'rD   rÆ   rÇ   Ú
proxy_dictc                 ó(  — d}dj                  t        j                  t        j                  d¬«      «      }dj                  t        j                  t        j                  d¬«      «      }| |dd|› d�d	|› d
�dœ}dddddddddddddddœ}t        d| › d�t        «       	 t        |d¬«      }|j                  |||d¬ «      }	|	j                  }
t        d!| › d"|	j                  › d#|
d$d% › �t        «       d&|
v sd'|
v s|	j                  d(k(  rt        d)t        «       y*d+|
v sd,|
v ry-d.|
v sd/|
v ry*d0|
v sd1|
v rX	 |	j                  «       j                  d1«      xs/ |	j                  «       j                  d2i «      j                  d1«      }|rd3|fS 	 |	j                   rY	 |	j                  «       j                  d1«      xs/ |	j                  «       j                  d2i «      j                  d1«      }|rd3|fS 	 y-y-# t        $ r Y Œqw xY w# t        $ r Y y-w xY w# t        $ ru}t#        |«      }d4|v sd5|v sd6|v rAt        d7t$        «       t        d8t        «       t        d9t        «       t        d:t        «       nt        d;|› �t$        «       Y d$}~y*d$}~ww xY w)<zSEffettua il login su DAZN e restituisce lo stato (SUCCESS, RETRY, FAIL) e il token.z3https://authentication-prod.ar.indazn.com/v5/SignInr¬   rh   )ÚkrÒ   ÚwebÚ0Úe5edÚ2bdz6s9kÚydg5ujkhink9)ÚEmailÚPasswordÚPlatformÚDeviceIdÚProfilingSessionIdz*/*z#it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7zno-cachezapplication/jsonúhttps://www.dazn.comr²   ú@"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"r´   rµ   ÚemptyÚcorsz
cross-siteúoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z£Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 signin/undefined hyper/0.14.0 (web; production; it))Úacceptzaccept-languagezcache-controlr¿   Úoriginr¸   r¹   rº   r»   zsec-fetch-destzsec-fetch-modezsec-fetch-siter¼   z	x-dazn-uau%   ðŸ”‘ Tentativo di Login in corso per r'   Ú	chrome120©Úimpersonateé   )r™   rÎ   r>   u   ðŸ”� DEBUG Risposta Login per z: HTTP z - Ni,  zRequest blockedÚ
CloudFronti“  u8   ðŸ›‘ CloudFront WAF ha bloccato la richiesta! Riprovo...)ÚRETRYNÚInvalidPasswordÚAccountBlocked)ÚFAILNz)Request limiting policy has been breachedz!Security policy has been breachedÚSignedInÚTokenÚ	AuthTokenÚSUCCESSÚSSL_ERROR_SYSCALLzConnection closed abruptlyz(35)uE   ðŸ›‘ DAZN CloudFront WAF ha terminato bruscamente la connessione TLS!uW      Motivo: L'IP del server (VPS/Datacenter o estero) Ã¨ bloccato dall'anti-bot di DAZN.zP   Soluzione 1: Copia 'dazn_tokens.json' (generato da Windows) sul server Linux.zH   Soluzione 2: Inserisci un proxy italiano (residenziale) in proxy.txt.u    â�Œ Eccezione durante il Login: )ÚjoinÚrandomÚchoicesÚstringÚdigitsr*   r1   Úcreate_sessionÚpostÚtextrš   ÚDIMr0   r™   rz   r!   r˜   r{   r9   )rÆ   rÇ   rû   ÚurlÚs_valÚk_valr÷   rÎ   r"   r�   r$  rÅ   r:   Úerr_msgs                 r#   Ú
dazn_loginr*  a  s¼  € à
?€Cà�G‰G”F—N‘N¤6§=¡=°AÔ6Ó7€EØ�G‰G”F—N‘N¤6§=¡=°AÔ6Ó7€Eð ØØØ˜�w˜d�OØ (¨¨¨|Ð<ñ€Gð Ø@Ø#Ø*Ø(Ø*ØWØ Ø)Ø!Ø Ø&ð Hð {ñ€Gô" Ð
/°¨w°cÐ:¼DÔAð+ä˜:°;Ô?ˆØ�F‰F�3˜W¨g¸rˆFÓBˆØ�v‰vˆäÐ,¨U¨G°7¸1¿=¹=¸/ÈÈTÐRVÐSVÈZÈLÐYÔ[^Ô_ð  Ñ$¨¸Ñ(<ÀÇÁÐQTÒ@TÜÐJÌFÔSØ à Ñ$Ð(8¸DÑ(@ØØ6¸$Ñ>ÐBeÐimÑBmØ Ø˜Ñ ¨D¡ðØŸ™›Ÿ™ WÓ-Ò[°·±³·±¸kÈ2Ó1N×1RÑ1RÐSZÓ1[�ÙØ$ eÐ+Ð+ð ð �4Š4ðØŸ™›Ÿ™ WÓ-Ò[°·±³·±¸kÈ2Ó1N×1RÑ1RÐSZÓ1[�Ù ¨EÐ!1Ð1�5ñ øô ò Ùðûô ò Øàðûô ò 	Ü�a“&ˆØ 'Ñ)Ð-IÈWÑ-TÐX^ÐbiÑXiÜÐWÔZ]Ô^ÜÐiÔlrÔsÜÐbÔekÔlÜÐZÔ]cÕdäÐ2°1°#Ð6¼Ô<Üûð	úsp   Â!A;H ÄH Ä&H Ä/H Ä8AG5 ÆH ÆAH Ç5	HÇ>H È HÈH È	HÈH ÈHÈH È	JÈA+JÊJÚconfigÚ	cli_tokenc                 ó‚
  — |}|s�t         j                  j                  t        «      rj	 t	        j
                  t        t        dd¬«      «      }|j                  dd«      }|r0t        |«      \  }}}|r|}nt        dt        › d| › d�t        «       |s"| j                  d	i «      j                  dd«      }|rt        |«      \  }}}|sd}|�s~t         j                  j                  t         j                  j                  t        «      d
«      }	t         j                  j                  |	«      �rwt        d|	› d�t        «       	 t        |	dd¬«      5 }
|
D �cg c])  }d|v sŒ|j                  d«      rŒ|j!                  «       ‘Œ+ }}ddd«       D ]ÿ  }|j#                  dd«      \  }}d}|dkD  rÝt$        j'                  «       }t)        |||«      \  }}|dk(  rK|rI|}t        dt*        «       	 t        t        dd¬«      5 }
t	        j,                  d|i|
d¬«       ddd«       ni|dk(  rIt        d|› d|dz
  › d�t        «       t$        j/                  «        |dz  }t1        j2                  d«       nt        d|› d�t4        «       n|dkD  rŒÝ|sŒÿ n |s·t        dt4        «       n¦| j                  d	i «      j                  dd«      }| j                  d	i «      j                  d d«      }|r`|r^t$        j'                  «       }t)        |||«      \  }}|r8|}	 t        t        dd¬«      5 }
t	        j,                  d|i|
d¬«       ddd«       |�rDt        |«      \  }}}|�r
|d!z  }|d!z  }t        d"|› d#|d!z  › d$|j                  d%d&«      › d'�t*        «       ||j                  d%d«      |j                  d(d«      |j                  d)d«      |j                  d*d+«      |j                  d,d«      |j                  d-d«      |j                  d.d«      t7        j8                  «       j;                  «       d/œ	}	 t        t        dd¬«      5 }
t	        j,                  ||
dd0¬1«       ddd«       |S t        d5t4        «       t        d6t<        › d7�t        «       |S # t        $ r Y �Œw xY wc c}w # 1 sw Y   �Œ%xY w# t        $ r g }Y �Œ6w xY w# 1 sw Y   �Œ°xY w# t        $ r Y �Œ¿w xY w# 1 sw Y   �Œ¤xY w# t        $ r Y �Œ³w xY w# 1 sw Y   Œ£xY w# t        $ r&}t        d2t        › d3|› d4�t        «       Y d}~|S d}~ww xY w)8z]Recupera il token attivo dal file tokens, dalla config, oppure esegue il login se configurator�   r   rÖ   rÅ   r¬   u   âš ï¸� Token salvato in u    Ã¨ scaduto (scaduto da zs)rÓ   zaccounts.txtu;   â�³ Nessun token valido trovato, avvio Login automatico da r'   rg   re   Nrj   rÒ   r   r  u9   âœ… Login completato con successo! Nuovo token acquisito.rÕ   r=   )rØ   r  u   âš ï¸� Rate limit o errore per z, cambio proxy e riprovo... (z tentativi rimasti)u   â�Œ Account z4 fallito (Invalid o Blocked), passo al successivo...uE   â�Œ Nessun account in accounts.txt Ã¨ risultato valido o funzionante.rÆ   rÇ   rö   u'   ðŸ”‘ Token DAZN valido Â· Scadenza tra zh zm (ViewerID: ÚviewerIdúN/Ar)   rp   ÚdeviceIdÚcountryr±   Ú
userstatusÚissuedrõ   )	rÅ   Ú	viewer_idrÉ   rÈ   r1  Úuser_statusr3  rõ   Ú
updated_atFr×   u   âš ï¸� Impossibile aggiornare ú (z#). Procedo con il token in memoria.u<   âš ï¸� ATTENZIONE: Il token fornito Ã¨ SCADUTO o NON VALIDO!zAggiorna il token in z o usa --token <nuovo_token>)r,   r-   r.   Ú
TOKEN_FILEr™   r`   rƒ   rz   rú   r*   r0   r!   r  ÚdirnameÚ__file__rl   rk   rm   rÜ   rˆ   r*  r+   rÛ   r‹   r–   Úsleepr9   r   rP   Ú	isoformatrÚ   )r+  r,  rÅ   Út_dataÚt_candÚvalrñ   Ú_r÷   Úaccounts_filer…   ÚlÚlinesrc   rÆ   rÇ   Úretriesrû   ÚstatusÚ	new_tokenÚstÚtkÚminsÚhrsÚt_infoÚ	write_errs                             r#   Ú	get_tokenrM  ¯  s  € à€EÙ”R—W‘W—^‘^¤JÔ/ð
	Ü—Y‘Yœt¤J°¸gÔFÓGˆFØ—Z‘Z ¨Ó,ˆFÙÜ0°Ó8‘��S˜!ÙØ"‘EäÐ2´:°,Ð>VÐX[ÐW[ÐV\Ð\^Ð_ÔagÔhñ Ø—
‘
˜6 2Ó&×*Ñ*¨7°BÓ7ˆáÜ.¨uÓ5ÑˆˆS�'ÙØˆEò ÜŸ™Ÿ™¤R§W¡W§_¡_´XÓ%>ÀÓOˆÜ�7‰7�>‰>˜-Õ(ÜÐMÈmÈ_Ð\_Ð`ÔbhÔiðÜ˜-¨°wÕ?À1Ù01ÓX±¨1°S¸A²XÀaÇlÁlÐSVÕFW˜QŸW™W�Y°�EÐX÷ @ó
 �Ø"&§*¡*¨S°!Ó"4‘��xà�Ø ’kÜ!.×!7Ñ!7Ó!9�JÜ(2°5¸(ÀJÓ(OÑ%�F˜Ià Ò*©yØ )˜ÜÐWÔY^Ô_ð!Ü!%¤j°#ÀÕ!HÈAÜ $§	¡	¨7°EÐ*:¸AÀaÕ H÷ "Ið Ø 7Ò*ÜÐ=¸e¸WÐDaÐbiÐjkÑbkÐalÐlð  Aô  CIô  JÜ%×,Ñ,Ô.Ø 1™˜ÜŸ
™
 1�ä˜l¨5¨'Ð1eÐfÔhkÔlØð)  “kò, Ùð7 ñ: ÜÐ[Ô]`Õað —J‘J˜v rÓ*×.Ñ.¨w¸Ó;ˆEØ—z‘z &¨"Ó-×1Ñ1°*¸bÓAˆHÙ™Ü*×3Ñ3Ó5�
Ü# E¨8°ZÓ@‘��BÙØ�EðÜ!¤*¨c¸GÕDÈÜ ŸI™I w°Ð&6¸À!ÕD÷ Eò
 Ü.¨uÓ5ÑˆˆS�'ÚØ˜"‘9ˆDØ˜"‘*ˆCÜÐ9¸#¸¸bÀÈÁÀÈ=ÐY`×YdÑYdÐeoÐqvÓYwÐXxÐxyÐzô  }Bô  Cð Ø$Ÿ[™[¨°RÓ8Ø!Ÿ+™+ f¨bÓ1Ø$Ÿ[™[¨°RÓ8Ø"Ÿ;™; y°$Ó7Ø&Ÿ{™{¨<¸Ó<Ø!Ÿ+™+ h°Ó2Ø—{‘{ 5¨!Ó,Ü&Ÿl™l›n×6Ñ6Ó8ñ
ˆFð{Üœ* c°GÕ<ÀÜ—I‘I˜f a°ÀÕF÷ =ð €Lô ÐNÔQTÔUÜÐ'¬ }Ð4PÐQÔSYÔZà€Løô ò 	Úð	üò$ Y÷ @Ñ?ûäò Ø“ðú÷ "IÑ!Hûä(ò !Ú ð!ú÷6 EÑDûä$ò Úðú÷, =Ð<ûäò {ÜÐ4´Z°LÀÀ9À+ÐMpÐqÔsy×zÐzð
 €Lûð{úsÞ   ©A)R ÅR7 ÅR*Å	R%Å!R%Å3R%ÆR*ÆR7 Ç.SÈ S	ÈSÌS3 Ì)S&ÍS3 Ð5T ÑTÑ!T Ò	R"Ò!R"Ò%R*Ò*R4Ò/R7 Ò7SÓSÓ	S	ÓSÓ	S#Ó"S#Ó&S0Ó+S3 Ó3	T Ó?T ÔTÔT Ô	T>ÔT9Ô9T>r  c                 óÆ   — t         r	 t        j                  |¬«      }nt	        j                  «       }| r| |_        |S # t        $ r t        j                  d¬«      }Y Œ,w xY w)zUCrea una sessione HTTP ottimizzata con impersonazione Chrome per bypassare CloudFrontr  Úchrome)ÚHAS_CURL_CFFIÚcffi_requestsÚSessionr!   r   r]   )rû   r  r"   s      r#   r"  r"    sZ   € åð	<Ü×%Ñ%°+Ô>‰Aô ×ÑÓˆÙØˆŒ	Ø€Høô ò 	<Ü×%Ñ%°(Ô;ŠAð	<ús   ˆ> ¾A ÁA Úpssh_b64c                 óì   — 	 t        j                  | «      }t        |«      dk\  r|dd t        k(  ryt	        | «      }t        |j                  «      j                  «       t        k(  S # t        $ r Y yw xY w)z9Verifica se una stringa PSSH Base64 appartiene a Widevineé   é   TF)
rì   Ú	b64decodern   ÚWIDEVINE_SYSTEM_ID_BYTESr   r{   Ú	system_idÚlowerÚWIDEVINE_SYSTEM_IDr!   )rS  Úrawr�   s      r#   Úis_widevine_psshr]  ,  sl   € ðÜ×Ñ˜xÓ(ˆÜˆs‹8�rŠ>˜c " R˜jÔ,DÒDØÜ�‹NˆÜ�1—;‘;Ó×%Ñ%Ó'Ô+=Ñ=Ð=øÜò Ùðús   ‚/A' ²4A' Á'	A3Á2A3Úmpd_contentc           	      óî  — 	 t        j                  | «      }g }|j                  «       D �cg c]   }|j                  j                  d«      sŒ|‘Œ" }}|s|g}|D �]M  }|j                  j                  d«      xs |j                  j                  d«      xs dj                  «       }d|v xs d	|v }|j                  «       D �cg c]   }|j                  j                  d
«      sŒ|‘Œ" }	}|	D ]¸  }
|
j                  j                  dd«      j                  «       }t        |v }|
j                  «       D �cg c]   }|j                  j                  d«      sŒ|‘Œ" }}|D ]F  }|j                  xs dj                  «       }|sŒ$|st        |«      sŒ2|j                  |||dœ«       ŒH Œº �ŒP |s”|j                  «       D ]�  }|j                  j                  d«      sŒ|j                  sŒ,|j                  j                  «       sŒG|j                  j                  «       }t        |«      sŒm|j                  |dddœ«       Œƒ |sy|j!                  d„ d¬«       |d   d   }d}	 t#        |«      }|j$                  r°|j$                  d   }t'        |d«      r&t)        t+        |d«      «      r|j-                  «       }not'        |d«      r't/        |j,                  t0        «      r|j,                  }n<t/        |t2        «      r|j-                  «       }nt1        |«      j5                  dd«      }||fS # t        $ r}t        d|› �t        «       Y d}~yd}~ww xY wc c}w c c}w c c}w # t        $ r Y ||fS w xY w)zGEstrae il blocco PSSH Widevine e il relativo KID dal manifesto DASH MPDz'Errore parsing XML del manifesto DASH: N©NNÚAdaptationSetÚmimeTypeÚcontentTyper¬   ÚvideoÚmp4ÚContentProtectionÚschemeIdUriÚpssh)rh  Úis_videoÚis_wv_schemeTc                 ó   — | d   | d   fS )Nri  rj  rC   )Úcs    r#   Ú<lambda>z'extract_widevine_pssh.<locals>.<lambda>g  s   €  1 Z¡=°!°NÑ2CÑ"DrD   )ÚkeyÚreverser   ÚhexÚ-)ÚETÚ
fromstringr!   r*   r9   ÚiterÚtagÚendswithÚattribrz   rZ  r[  r$  rk   r]  r„   Úsortr   Úkey_idsÚhasattrÚcallableÚgetattrrp  rx   r{   Úbytesr   )r^  Úrootr:   Ú
candidatesÚelemÚadaptation_setsÚasetÚmimeri  ÚcpsÚcpÚ	scheme_idrj  Ú
pssh_nodesÚnoder$  Ú	best_psshÚexpected_kidr�   Ú	first_kids                       r#   Úextract_widevine_psshrŒ  7  s  € ðÜ�}‰}˜[Ó)ˆð
 €JØ(,¯	©	¬ÓZ© °t·x±x×7HÑ7HÈÕ7Y’t¨€OÐZÙØ˜&ˆäˆØ—‘—‘ 
Ó+ÒS¨t¯{©{¯©¸}Ó/MÒSÐQS×ZÑZÓ\ˆØ˜d�?Ò3 e¨t mˆà $§	¡	¤ÓV¡˜¨t¯x©x×/@Ñ/@ÐATÕ/UŠt ˆÐVÛˆBØŸ	™	Ÿ™ m°RÓ8×>Ñ>Ó@ˆIÜ-°Ð:ˆLà+-¯7©7¬9ÓR©9 4¸¿¹×8IÑ8IÈ&Õ8Qš$¨9ˆJÐRÛ"�ØŸ	™	š R×.Ñ.Ó0�ÙØÙÔ#3°DÕ#9Ø×%Ñ%Ø $Ø$,Ø(4ñ'õ ñ #ò ð  ñ* Ø—I‘I–KˆDØ�x‰x× Ñ  Õ(¨T¯Y«Y¸4¿9¹9¿?¹?Õ;LØ—y‘y—‘Ó(�Ü# DÕ)Ø×%Ñ%Ø $Ø$(Ø(,ñ'õ ð	  ñ Øà‡O�OÑDÈd€OÔSØ˜1‘˜fÑ%€Ià€LðÜ�‹OˆØ�9Š9ØŸ	™	 !™ˆIÜ�y %Ô(¬X´g¸iÈÓ6OÔ-PØ(Ÿ}™}›‘Ü˜ EÔ*¬z¸)¿-¹-ÌÔ/MØ(Ÿ}™}‘Ü˜I¤uÔ-Ø(Ÿ}™}›‘ä" 9›~×5Ñ5°c¸2Ó>�ð �lÐ"Ð"øô ò ÜÐ5°a°SÐ9¼3Ô?Üûðüò
 [ùò Wùò
 SøôT ò Øà�lÐ"Ð"ðúsM   ‚L- « MÁMÃ MÃ$MÄ3 M ÅM É"CM% Ì-	MÌ6MÍMÍ%	M4Í3M4Úchannelr4  c                 óô  — | j                  d«      �r| d   }t        |«      }t        |j                  «      }| j                  d«      xs |j                  ddg«      d   }t	        t        j
                  «       dz  «      }t        j                  «       j                  dd j                  «       }|xs d	}	|› d
|	› d
|› d
|› �g|d<   d|v rdg|d<   t        |j                  |j                  |j                  |j                  t        |d¬«      |j                   f«      S |j                  di «      }
| j                  dd«      }|
j                  dd«      }|
j                  dd«      }|
j                  dd«      }|xs d	}	t	        t        j
                  «       dz  «      }t        j                  «       j                  dd j                  «       }|› d
|	› d
|› d
|› �}|dd|dd	dddd|d||dœ}dt        |«      › �S ) zMCostruisce o normalizza l'endpoint Playback con SessionId e timestamp freschirÄ   rÂ   ÚAssetIdr¬   r   r�   Né   Úunknownrq  Ú	SessionIdÚMtaLanguageCodeT)ÚdoseqrÓ   rÀ   rÊ   r¯   rË   r°   rÌ   r±   ÚWIDEVINEz	MPEG-DASHrþ   ÚtrueÚ	microsoftÚfalsezhcst,mta)Ú
AppVersionÚDrmTypeÚFormatÚPlayerIdr  ÚModelÚSecureÚManufacturerÚPlayReadyInitiatorÚCapabilitiesr�  r“  ÚLanguageCoder’  z,https://api.playback.indazn.com/v5/Playback?)rz   r
   r   Úqueryr¨   r–   ÚuuidÚuuid4rp  Úupperr   ÚschemeÚnetlocr-   Úparamsr   Úfragment)r�  r+  r4  Úbase_urlr�   ÚqÚasset_idÚtsÚrnd_hexÚv_idÚdazn_cfgrÊ   rË   ÚlangÚ
session_idr©  s                   r#   Úbuild_playback_urlr´  |  sú  € à‡{�{�>Õ"Ø˜>Ñ*ˆä�XÓˆÜ�Q—W‘WÓˆØ—;‘;˜tÓ$ÒC¨¯©¨y¸2¸$Ó)?ÀÑ)BˆÜ”—‘“˜tÑ#Ó$ˆÜ—*‘*“,×"Ñ" 2 AÐ&×,Ñ,Ó.ˆØÒ%˜IˆØ˜D  $  q¨¨
°!°G°9Ð=Ð>ˆˆ+‰Ø Ñ!Ø$& 4ˆAÐÑ Ü˜1Ÿ8™8 Q§X¡X¨q¯v©v°q·x±xÄÈ1ÐTXÔAYÐ[\×[eÑ[eÐfÓgÐgà�z‰z˜& "Ó%€HØ�{‰{˜4Ð!<Ó=€HØ—,‘,˜}¨iÓ8€KØ—‘˜[Ð*IÓJ€IØ�<‰<˜
 DÓ)€DØÒ!˜	€DÜ	ŒT�Y‰Y‹[˜4ÑÓ	 €BÜ�j‰j‹l×Ñ˜r Ð"×(Ñ(Ó*€GØ�4�q˜˜˜a ˜z¨¨7¨)Ð4€Jð "ØØØØØØØ#Ø%Ø"ØØØØñ€Fð  :¼)ÀFÓ:KÐ9LÐMÐMrD   rÄ   c                 óZ  — |j                  di «      }|j                  di «      j                  dd«      }t        |«      }|r	d|v r|d   }d|› �dd|j                  di «      j                  d	d
«      dd|j                  di «      j                  dd«      dt        t        j                  «       «      |j                  dd«      |dœ}t        |«      }	 |j                  | |d¬«      }	|	j                  sg	 |	j                  «       }
|
j                  di «      j                  di «      j                  d«      xs |	j                  dd }dd|	j                  › d|› �fS |	j                  «       dfS # t        $ r |	j                  dd }Y Œ@w xY w# t        $ r}dt        |«      fcY d}~S d}~ww xY w)zWEffettua la chiamata all'endpoint Playback DAZN con headers personalizzati e bypass WAFrÓ   rÉ   r®   rp   zBearer r  r²   rÎ   r¹   r³   r´   rµ   r¼   r¶   r·   rÈ   r­   )ÚAuthorizationÚOriginÚRefererr¹   rº   r»   r¼   r½   úx-correlation-idzx-dazn-deviceúx-daznidé   ©rÎ   r>   zodata.errorÚmessageÚvalueNéÈ   r“   z: )rz   ró   r{   r¤  r¥  r"  r˜   r™   r$  r!   rš   )rÄ   rÅ   r+  rû   r±  Úuser_idr÷   rÎ   r"   r�   Úerr_jsonrI   r:   s                r#   Úrequest_playback_inforÂ  ¨  s»  € à�z‰z˜& "Ó%€HØ�j‰j˜ Ó$×(Ñ(¨Ð3YÓZ€Gä  Ó'€GÙ�6˜WÑ$Ø˜&‘/ˆð # 5 'Ð*Ø(Ø*Ø—\‘\ )¨RÓ0×4Ñ4°[ð  CFó  GØ Ø)Ø—l‘l 9¨bÓ1×5Ñ5°lð  Evó  wØÜ¤§
¡
£Ó-Ø!Ÿ™ kÐ3YÓZØñ€Gô 	�zÓ"€AðØ�E‰E�,¨¸ˆEÓ<ˆØ�tŠtð#ØŸ6™6›8�Ø—l‘l =°"Ó5×9Ñ9¸)ÀRÓH×LÑLÈWÓUÒeÐYZ×Y_ÑY_Ð`dÐadÐYe�ð ˜5 §¡ ¨r°#°Ð7Ð7Ð7à�v‰v‹x˜ˆ~Ðøô	 ò #Ø—f‘f˜T˜c�l’ð#ûô
 ò Ø”S˜“Vˆ|ÕûðúsI   Ã F
 Ã4AE, ÅF
 ÅF
 Å,FÆF
 ÆFÆF
 Æ
	F*ÆF%ÆF*Æ%F*r­  Úla_urlÚtokens_payloadrŠ  c                 ó´  — |r|› d|j                  «       › �}n9|› dt        j                  | j                  «       «      j	                  «       dd › �}|t
        v r+t
        |   }|j                  d«      |j                  d«      fS t        j                  j                  t        «      st        dt        › d�t        «       y	 t        j                  t        «      }	t        j                   |	«      }
|
j#                  «       }|
j%                  |t'        | «      «      }|j                  d	i «      }|j                  d
«      xs |j                  dd«      }ddd|j                  di «      j                  dd«      dd|j                  di «      j                  dd«      dt)        t+        j,                  «       «      |dœ
}t/        |«      }|j1                  |||d¬«      }|j2                  s?t        d|j4                  › d|j6                  dd › �t        «       |
j9                  |«       y|
j;                  ||j<                  «       g }|
j?                  |«      D �]K  }|j@                  dk7  sŒtC        |jD                  d«      r:tG        |jD                  jH                  t(        «      r|jD                  jH                  nTtC        |jD                  d«      r|jD                  jI                  «       n$t)        |jD                  «      jK                  d d!«      }tM        tO        |jP                  dd«      «      r|jP                  jI                  «       n)tO        |jP                  dt)        |jP                  «      «      }|jS                  |j                  «       |j                  «       f«       �ŒN |
j9                  |«       |st        d"t        «       yd\  }}|r#|D ]  \  }}||j                  «       k(  sŒ||}} n |s
|r|d#   \  }}|r.|r,||d$œt
        |<   tU        «        t        d%|› d|› �tV        «       ||fS # tX        $ r}t        d&|› �t        «       Y d}~yd}~ww xY w)'zSDecifra la chiave di contenuto Widevine usando WVD.wvd e l'endpoint di Licenza DAZNrg   Né   Úkidrn  zERRORE: File CDM z non trovato!r`  rÓ   rp   rÉ   r®   r¾   r  r²   rÏ   r¹   r³   r´   rµ   r¼   r¶   r·   )
zContent-Typer·  r¸  r¹   rº   r»   r¼   r½   r¹  rº  r”   )rÎ   Údatar>   zChiamata License fallita (HTTP z): r¿  ÚSIGNINGrp  rq  r¬   z5Nessuna chiave di contenuto trovata nella licenza DRMr   )rÇ  rn  z"Chiave DRM estratta con successo: zErrore licenza DRM Widevine: )-rZ  ÚhashlibÚsha256ÚencodeÚ	hexdigestrH   rz   r,   r-   r.   ÚWVD_FILEr*   r9   r   r`   r   Úfrom_devicerƒ   Úget_license_challenger   r{   r¤  r¥  r"  r#  r˜   rš   r$  ÚcloseÚparse_licenseÚcontentÚget_keysÚtyperz  rÇ  rx   rp  r   r{  r|  rn  r„   ré   r+   r!   )rS  r­  rÃ  r+  rÄ  rŠ  rû   Ú	cache_keyÚcachedÚdeviceÚcdmÚsessionÚ	challenger±  rÀ  Úlic_headersr"   r�   Úcontent_keysrý   Úk_kidÚk_keyrÇ  rn  Úc_kidÚc_keyr:   s                              r#   Úget_keys_wvdrâ  Î  sò  € ñ Ø�j  ,×"4Ñ"4Ó"6Ð!7Ð8‰	à�j ¤'§.¡.°·±Ó1BÓ"C×"MÑ"MÓ"OÐPSÐQSÐ"TÐ!UÐVˆ	à”JÑÜ˜IÑ&ˆØ�z‰z˜%Ó  &§*¡*¨UÓ"3Ð3Ð3ä�7‰7�>‰>œ(Ô#ÜÐ¤˜z¨Ð7¼Ô=Øð<Ü—‘œXÓ&ˆÜ�o‰o˜fÓ%ˆØ—(‘(“*ˆØ×-Ñ-¨g´t¸H³~ÓFˆ	à—:‘:˜f bÓ)ˆØ ×$Ñ$ VÓ,Òn°·±¸XÐGmÓ0nˆð 7Ø,Ø.Ø!Ÿ™Ð&7¸Ó<×@Ñ@Àð  ORó  SØ $Ø"-Ø"Ÿ,™,Ð'8¸"Ó=×AÑAÀ,ð  QBó  CØÜ #¤D§J¡J£LÓ 1Øñ
ˆô ˜:Ó&ˆØ�F‰F�6 ;°YÈˆFÓKˆØ�tŠtÜÐ1°!·-±-°ÀÀAÇFÁFÈ4ÈCÀLÀ>ÐRÔTWÔXØ�I‰I�gÔØà×Ñ˜' 1§9¡9Ô-à.0ˆØ—‘˜g×&ˆAØ�v‰v˜Ó"Ü%,¨Q¯U©U°EÔ%:¼zÈ!Ï%É%Ï)É)ÔUXÔ?Y˜Ÿ™Ÿ	š	ÔovÐwx×w|Ñw|ð  Dô  pEÐ`a×`eÑ`e×`iÑ`iÔ`kô  KNð  OP÷  OTñ  OTó  KU÷  K]ñ  K]ð  ^að  ceó  Kf�Ü'/´¸¿¹¸uÀdÓ0KÔ'L˜Ÿ™Ÿ	™	œÔRYÐZ[×Z_ÑZ_ÐafÔhkÐlm×lqÑlqÓhrÓRs�Ø×#Ñ# U§[¡[£]°E·K±K³MÐ$BÖCð	 'ð
 	�	‰	�'ÔáÜÐGÌÔMØà‰ˆˆSÙÛ ,‘��uØ˜L×.Ñ.Ó0Ó0Ø$ e˜�CÙð !-ñ
 ‘|Ø# A‘‰HˆC�á‘3Ø,/¸Ñ$<ŒJ�yÑ!ÜŒLÜÐ4°S°E¸¸3¸%Ð@Ä%ÔHØ�CˆxˆøÜò ÜÐ+¨A¨3Ð/´Ô5Üûðús4   ÃE"P1 È%AP1 É(EP1 Ï"P1 Ï*AP1 Ð1	QÐ:QÑQc           
      ó¸  — t         j                  «       }|j                  dd«      }t        | ||«      }t	        d| j                  dd«      › d�t
        «       t        ||||«      \  }}|s|s9t	        d|› �t        «       | j                  d«      | j                  dd	«      d
|dœS |j                  di «      }	|	j                  d«      xs | j                  d«      xs d}
|j                  dg «      }|s&t	        dt        «       | j                  d«      |
dddœS |d   }dD ]7  }d}|D ]*  }||j                  dd«      j                  «       v sŒ&|}d} n |sŒ7 n |j                  dd«      }|j                  dd«      }|j                  di «      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|r|rd|v rd nd}|› |› |› d!|› �}n|}t        |«      }|j                  d"i «      j                  d#i «      }|j                  d$d%«      }d&d'||j                  d(d)«      |j                  d*d+«      |j                  d,d-«      d.œ}|r|r
|› d!|› �|d/<   	 |j                  ||d0¬1«      }|j                  r|j                  nd}d4\  } }!d5}"d}#|�r�	 t        j                  |«      }$|$j                  d6«      D ]î  }%|%j                  d7«      d8k(  sŒd}&d0}'|%j                  d9«      D ]«  }(|(j                  d:«      })|(j                  d;«      }*|(j                  d<«      }+|)rF|)j!                  «       r6t#        |)«      |&k\  r(t#        |)«      }&|*r|*j!                  «       rt#        |*«      }'|+sŒ�|+j!                  «       sŒ’t#        |+«      |#kD  sŒ¡t#        |+«      }#Œ­ |&dkD  r|&› d=|'d0kD  r|'nd› �}" n |#r	d>|#d?z  › d@�nd},t	        dA|"› |,› dB|j%                  «       › dC�dD|"v rt&        nt(        «       t+        |«      \  }-}.|-r7|r5t-        |-| j                  d|	j                  dEd«      «      ||||.|¬F«      \  } }!|r	|r|› d!|› �nd}/dG|› dH|› dI�}0|/r	|0dJ|/› dI�z  }0| r,|!r*|0dK| › dL|!› dI�z  }0dM|› dI�}1|/r	|1dN|/› dI�z  }1|1dO|!› dP|› dI�z  }1ndM|› dI�}1|/r	|1dN|/› dI�z  }1|1dP|› dI�z  }1i d| j                  d|	j                  dE«      «      “d|
“dQdR| j                  d|	j                  dE«      «      › dS�“dT| r	|!r| › dL|!› �nd3“dU| j                  dU«      “dV|	j                  dWd«      “dX| r|!rdYn|rdZnd
“d[|“d\|“d]|“d^|“d_|"“d`|“da|“db| “dc|!“dd| r	|!r| › dL|!› �nd3“|/rde|/› �nd3|0|1t/        j0                  «       j3                  «       dfœ¥}2|2S # t        $ r }t	        d2|› �t        «       d}Y d3}~�Œd3}~ww xY w# t        $ r Y �Œw xY w)gz7Esegue l'estrazione completa per un singolo canale DAZNr.  r¬   zRichiesta Playback per 'rÃ   zDAZN Channelz'...zErrore Playback: rÂ   r·   ÚERROR)rÂ   rÃ   rE  ÚerrorÚAssetÚTitleÚPlaybackDetailsz1Nessun PlaybackDetails disponibile nella rispostaÚ
NO_STREAMSzNessun PlaybackDetails trovator   )zdct-fs-livezdcs-fs-livezdct-ak-livezdcs-ak-liveÚfsÚakFÚCdnNameTÚManifestUrlÚLaUrlÚCdnTokenÚ
ResolutionÚfhdÚNamez
dazn-tokenÚValueÚ?Ú&rë   rÓ   rÎ   r¼   r¶   r  r²   r¹   r³   rº   r´   r»   rµ   ©r·  r¸  z
User-Agentr¹   rº   r»   ÚCookier»  r¼  zErrore download manifesto MPD: Nr`  r‘  z/.//{urn:mpeg:dash:schema:mpd:2011}AdaptationSetrc  rd  z-{urn:mpeg:dash:schema:mpd:2011}RepresentationÚheightÚ	frameRateÚ	bandwidthr�   z @ r�   z kbpszRisoluzione stream: z (Profilo API: r)   Ú1080ÚId)rS  r­  rÃ  r+  rÄ  rŠ  rû   zmpv "z" --user-agent="Ú"z --http-header-fields="Cookie: z" --demuxer-lavf-o="decryption_key=rg   zffplay -user_agent "z -headers "Cookie: z -cenc_decryption_key z "Úproxy_manifestz+https://addictedbytheproject.nl:10443/play/z/stream.mpdÚ	clear_keyÚepgÚevent_idÚEventIdrE  r’   ÚMANIFEST_ONLYÚmanifest_urlÚbase_manifest_urlÚcdn_nameÚ
resolutionÚactual_resolutionÚ	cdn_tokenÚlicense_urlrÇ  rn  Ú
key_stringzCookie: )Úcookie_headerÚmpv_commandÚffplay_commandÚextracted_at)rÜ   rˆ   rz   r´  r*   r1   rÂ  r9   rZ  r"  r˜   r$  r!   rr  rs  ÚfindallÚisdigitr¨   r¦  r+   r0   rŒ  râ  r   rP   r<  )3r�  r+  rÅ   rÄ  rû   r4  rÄ   Úplayback_dataÚerrÚassetÚchannel_nameÚdetails_listÚchosen_detailÚprefÚ	found_cdnÚdÚraw_manifest_urlrÃ  r	  r  r  Ú
token_nameÚ	token_valÚsepÚcomposed_manifest_urlr"   Údazn_headersÚuaÚmpd_headersÚr_mpdÚmpd_textr:   rÇ  rn  r  Úmax_bandwidthr~  r‚  Úmax_hÚmax_fpsÚrepÚhÚfpsÚbwÚbw_strrS  rŠ  Ú
cookie_hdrÚmpv_cmdÚ
ffplay_cmdÚresult_entrys3                                                      r#   Úextract_channelr1    sR  € ô ×'Ñ'Ó)€JØ×"Ñ" :¨rÓ2€IÜ% g¨v°yÓA€LäÐ
" 7§;¡;¨v°~Ó#FÐ"GÀtÐLÌdÔSÜ.¨|¸UÀFÈJÓWÑ€M�3Ù
‘-ÜÐ ˜uÐ%¤sÔ+à—+‘+˜dÓ#Ø—K‘K ¨Ó/ØØñ	
ð 	
ð ×Ñ˜g rÓ*€EØ—9‘9˜WÓ%ÒN¨¯©°VÓ)<ÒNÀ€LØ ×$Ñ$Ð%6¸Ó;€LáÜÐ?Ä#ÔFà—+‘+˜dÓ#Ø Ø"Ø5ñ	
ð 	
ð ! ‘O€MÛXˆØˆ	ÛˆAØ�q—u‘u˜Y¨Ó+×1Ñ1Ó3Ò3Ø !�Ø �	Ùð	 ò
 Ùð Yð %×(Ñ(¨¸Ó;ÐØ×Ñ˜w¨Ó+€FØ×!Ñ! *¨bÓ1€IØ×"Ñ" <°Ó7€JØ× Ñ  ¨BÓ/€Hð —‘˜v |Ó4€JØ—‘˜g rÓ*€IÙ‘iØÐ,Ñ,‰c°#ˆØ#3Ð"4°S°E¸*¸ÀQÀyÀkÐ RÑà 0Ðô 	�zÓ"€AØ—:‘:˜f bÓ)×-Ñ-¨i¸Ó<€LØ	×	Ñ	˜,ð  )Zó  
[€Bà(Ø*ØØ!×%Ñ% kÐ3vÓwØ(×,Ñ,Ð-?ÀÓFØ*×.Ñ.Ð/CÀ[ÓQñ€Kñ ‘iØ#- ,¨a°	¨{Ð ;ˆ�HÑðØ—‘Ð+°[È"�ÓMˆØ!&§¢�5—:’:¨rˆð
 �H€CˆØ!ÐØ€MÚð	Ü—=‘= Ó*ˆDØŸ™Ð%VÖW�Ø—8‘8˜MÓ*¨gÓ5Ø�EØ �GØ#Ÿ|™|Ð,[Ö\˜ØŸG™G HÓ-˜Ø!Ÿg™g kÓ2˜Ø ŸW™W [Ó1˜Ù §¡¤Ü" 1›v¨šÜ(+¨A« Ù#&¨3¯;©;¬=Ü.1°#«h GÚ "§*¡*¥,´3°r³7¸]Ó3JÜ,/°«G™Mð  ]ð ˜q’yØ/4¨g°QÀ'ÈBÂ,±wÐTVÐ6WÐ,XÐ)Ùð# Xñ* 8E�3�}¨Ñ,Ð-¨UÑ3È"ˆÜÐ"Ð#4Ð"5°f°X¸_ÈZ×M]ÑM]ÓM_ÐL`Ð`aÐbÐmsð  xIñ  nIÕdiô  OUô  	Vä!6°xÓ!@Ñˆ�,Ù™Ü#Ø!Ø Ÿ™ T¨5¯9©9°T¸2Ó+>Ó?ØØØ-Ø)Ø%ô‰HˆC�ñ 2<Á	�J�<˜q  Ñ,ÐPR€JØÐ+Ð,Ð,<¸R¸DÀÐB€GÙØÐ4°Z°LÀÐBÑBˆÙ
‰sØÐ7¸°u¸A¸c¸UÀ!ÐDÑDˆØ+¨B¨4¨qÐ1ˆ
ÙØÐ/°
¨|¸1Ð=Ñ=ˆJØÐ.¨s¨e°2Ð6KÐ5LÈAÐNÑN‰
à+¨B¨4¨qÐ1ˆ
ÙØÐ/°
¨|¸1Ð=Ñ=ˆJØ˜Ð0Ð1°Ð3Ñ3ˆ
ðØˆg�k‰k˜$ §	¡	¨$£Ó0ðà�ðð 	ÐGÈÏÉÐTXÐZ_×ZcÑZcÐdhÓZiÓHjÐGkÐkvÐwðð 	©±˜�u˜A˜c˜U‘^¸$ð	ð
 	ˆw�{‰{˜5Ó!ðð 	�E—I‘I˜i¨Ó,ðð 	™3¡3‘$ÑAV©oÐ\cðð 	Ð-ðð 	Ð-ðð 	�Hðð 	�jðð 	Ð.ðð 	�Yðð 	�vðð 	ˆsðð  	ˆsð!ð" 	©±˜˜˜Q˜s˜e‘n¸4ð#ñ$ 5?˜8 J <Ñ0ÀDØØ$Ü Ÿ™›×0Ñ0Ó2ò+€Lð. Ðøôm ò ÜÐ-¨a¨SÐ1´3Ô7ØŽûðûô8 ò 	Úð	úsC   É:.V  Ê5=W Ë3BW Î	W ÎW Î)#W Ö 	W	Ö)W×W	×	W×Wc                 óB  — t        «       }t        «        t        j                  |j	                  di «      j	                  d«      ¬«       t        || «      }|st        dt        «       i S t        |«      \  }}}|j	                  di «      j	                  dg «      }|st        dt        «       i S t        dt        |«      › d�t        «       g }d	g}d
}d}	d}
t        |d«      D �]²  \  }}|j	                  d|j	                  dd|› �«      «      }t        d|d›dt        |«      › d|d›�dd¬«       t        ||||«      }|j                  |«       |j	                  d«      dk(  �rp|j	                  dd«      }|j	                  dd«      }|j	                  dd«      }|j	                  di «      j	                  di «      j	                  dd«      }|	s"|j	                  d «      }	|j	                  d!«      }
|j                  d"|j	                  d«      › d#|j	                  d«      › d$|j	                  d«      › �«       |j                  d%«       |j                  d&«       |j                  d'«       |j                  d(|› d)|› �«       |r|j                  d*|› d+�«       |j                  |«       t        t         › d,|dd- › d.|dd- › d/t"        › �«       |dz  }�Œò|j	                  d«      d0k(  r‚|j                  d"|j	                  d«      › d#|j	                  d«      › d$|j	                  d«      › �«       |j                  |j	                  dd«      «       t        t        › d1t"        › �«       �Œˆt        t        › d2|j	                  d3d4«      › d5t"        › �«       �Œµ t%        j&                  «       j)                  «       t        |«      |t        j+                  «       |d6œ}t-        t.        d7d8¬9«      5 }t1        j2                  ||d:d;¬<«       ddd«       t-        t4        d7d8¬9«      5 }|j7                  d=j9                  |«      d=z   «       ddd«       |	rPt:        j<                  j9                  t>        d>«      }t-        |d7d8¬9«      5 }|j7                  d?|	› d@�«       ddd«       |
rPt:        j<                  j9                  t>        dA«      }t-        |d7d8¬9«      5 }|j7                  d?|
› d@�«       ddd«       t        dBt@        › t.        › t"        › dC|› dt        |«      › dD�	t         «       t        dEt@        › t4        › t"        › �t         «       |	r#t        dFt        «       t        dG|	› �t        «       |S # 1 sw Y   �ŒixY w# 1 sw Y   �Œ8xY w# 1 sw Y   ŒòxY w# 1 sw Y   Œ¬xY w)HzNEstrae tutti i canali configurati, risolve le chiavi DRM e aggiorna JSON & M3UrÓ   rÍ   ©r^   zNERRORE CRITICO: Nessun token DAZN disponibile! Configuralo in dazn_config.jsonrÐ   z-Nessun canale configurato in dazn_config.jsonu   ðŸš€ Avvio estrazione di z canali DAZN...z#EXTM3U x-tvg-url=""r   Nrj   rÃ   rÂ   zCanale z  [Ú2dÚ/rM   z<25Ú T)ÚendrN   rE  r’   rÇ  r¬   rn  r  rÎ   r¼   r  r  z#EXTINF:-1 tvg-id="z" tvg-name="z" group-title="DAZN",z*#KODIPROP:inputstream=inputstream.adaptivez0#KODIPROP:inputstream.adaptive.manifest_type=mpdz>#KODIPROP:inputstream.adaptive.license_type=com.widevine.alphaz+#KODIPROP:inputstream.adaptive.license_key=rg   z9#KODIPROP:inputstream.adaptive.stream_headers=User-Agent=z&Referer=https://www.dazn.com/u   âœ… OK (é   z...:z...)r  u   âš ï¸�  Solo Manifestu   â�Œ Errore (rå  r/  r)   )r6  Útotal_channelsÚ
keys_foundÚ
proxy_usedrÐ   rÕ   r   rÖ   r=   Fr×   rU   zplay_ffplay.batz
@echo off
z
pause
zplay_mpv.batu   ðŸ’¾ Salvato con successo in: r7  z canali)u!   ðŸ“‹ Playlist M3U aggiornata in: u6   ðŸŽ¬ Launcher generati: play_ffplay.bat e play_mpv.batu   â–¶ï¸�  Comando FFplay:
)!rß   rç   rÜ   r`   rz   rM  r*   r9   rú   r0   rn   r1   Ú	enumeraterO   r1  r„   r+   rR   r   rP   r<  rˆ   rƒ   ÚOUTPUT_JSON_FILEr™   rÛ   ÚPLAYLIST_FILEÚwriter  r,   r-   r6   ÚBOLD)r,  r+  rÅ   r@  rÄ  rÐ   r›   Ú	m3u_linesÚfoundÚfirst_ffplay_cmdÚfirst_mpv_cmdÚiÚchrÃ   ÚresrÇ  rn  Úmanifestr!  Úoutput_datar…   Ú
ffplay_batÚmpv_bats                          r#   Úextract_and_save_allrL  Â  s<  € ä‹]€FÜ„LÜ×Ñ F§J¡J¨v°rÓ$:×$>Ñ$>¸wÓ$GÐÔHä�f˜iÓ(€EÙÜÐ\Ô^aÔbØˆ	ä-¨eÓ4Ñ€A€qˆ.Ø�z‰z˜& "Ó%×)Ñ)¨*°bÓ9€HÙÜÐ;¼VÔDØˆ	äÐ
#¤C¨£M ?°/ÐBÄDÔIØ€GØ)Ð*€IØ€EàÐØ€Mä˜8 Q×'‰ˆˆ2Ø�v‰v�f˜bŸf™f T¨W°Q°C¨=Ó9Ó:ˆÜ��A�b�6˜œ3˜x›=˜/¨¨D°¨:Ð6¸CÀtÕLä˜b &¨%°Ó@ˆØ�‰�sÔà�7‰7�8Ó Ó$Ø—'‘'˜% Ó$ˆCØ—'‘'˜% Ó$ˆCØ—w‘w˜~¨rÓ2ˆHØ—‘˜F BÓ'×+Ñ+¨I°rÓ:×>Ñ>¸|ÈRÓPˆBá#Ø#&§7¡7Ð+;Ó#<Ð Ø #§¡¨Ó 6�ð ×ÑÐ2°3·7±7¸4³=°/ÀÈcÏgÉgÐV\ËoÐM^Ð^sÐtw×t{Ñt{ð  }Có  uDð  tEð  Fô  GØ×ÑÐIÔJØ×ÑÐOÔPØ×ÑÐ]Ô^Ø×ÑÐJÈ3È%ÈqÐQTÐPUÐVÔWÙØ× Ñ Ð#\Ð]_Ð\`Ð`~Ð!ô  AØ×Ñ˜XÔ&ä”U�G˜8 C¨¨ G 9¨D°°R°a°°	¸¼e¸WÐEÔFØ�Q‰JŠEØ�W‰W�XÓ /Ò1Ø×ÑÐ2°3·7±7¸4³=°/ÀÈcÏgÉgÐV\ËoÐM^Ð^sÐtw×t{Ñt{ð  }Có  uDð  tEð  Fô  GØ×Ñ˜SŸW™W ^°RÓ8Ô9Ü”V�HÐ1´%°Ð9Ö:ä”S�E˜ c§g¡g¨g°uÓ&=Ð%>¸aÄ¸wÐGÖHðE (ôJ —l‘l“n×.Ñ.Ó0Ü˜h›-ØÜ#×,Ñ,Ó.Øñ€Kô 
Ô ¨gÕ	6¸!Ü�	‰	�+˜q¨¸Õ?÷ 
7ô 
Œm˜S¨7Õ	3°qØ	�‰�—	‘	˜)Ó$ tÑ+Ô,÷ 
4ñ Ü—W‘W—\‘\¤*Ð.?Ó@ˆ
Ü�*˜c¨GÕ4¸Ø�G‰G�kÐ"2Ð!3°9Ð=Ô>÷ 5ñ Ü—'‘'—,‘,œz¨>Ó:ˆÜ�'˜3¨Õ1°QØ�G‰G�k - °	Ð:Ô;÷ 2ô Ð
(¬¨Ô/?Ð.@ÄÀÀrÈ%ÈÐPQÔRUÐV^ÓR_ÐQ`Ð`hÐiÔkpÔqÜÐ
+¬D¨6´-°ÄÀÐHÌ%ÔPÙÜÐDÄtÔLÜÐ'Ð(8Ð'9Ð:¼FÔCØÐ÷/ 
7Ñ	6ú÷ 
4Ñ	3ú÷ 5Ð4ú÷
 2Ð1ús0   Ï.U/Ð"$U<ÒV	ÓVÕ/U9Õ<VÖ	VÖVc            	      óü  — ddl m}  d}t        j                  | j                  «      j	                  d¬«      }|j                  d«      }|t        d¬«      z   j                  d«      }d	d	d
dd||dœ}g }t        r%t        j                  «       t        z
  dk  rt        }nŸt        j                  «       }	 t        |«      }	dddddddœ}
|	j                  |||
d¬«      }|j                  st        d|j                   › �t"        «       g S |j%                  «       }|at        j                  «       a	t        dt&        «       |j                  dg «      }|}d}|D �]A  }|j                  d«      dk(  sŒ|j                  dd«      }|j                  d d«      }|sŒ@|sŒC	 t        j*                  |j	                  d!d«      j-                  d"«      d   d#«      }t        j*                  |j	                  d!d«      j-                  d"«      d   d#«      }|t        d$¬%«      z
  |cxk  r|k  rvn ns|j                  d&«      }|j                  d'd(|› �«      }|j.                  d)k\  r�Œ|r:|dz  }|j1                  ||d|j3                  «       |j3                  «       d*œd+œ«       �ŒD t        d,t5        |«      › d-|› d.�t6        «       |S # t(        $ r}t        d|› �t"        «       g cY d}~S d}~ww xY w# t(        $ r}Y d}~�Œ¡d}~ww xY w)/zbScarica l'EPG ufficiale DAZN e restituisce una lista di canali degli eventi attualmente in direttar   )Útimezonez8https://epg.discovery.indazn.com/eu/v5/epgWithDatesRangeN)Útzinfoz%Y-%m-%drj   )Údaysr±   r–  Ú120rÓ   )r1  ÚlanguageCodeÚ
openBrowseÚtimeZoneOffsetÚbrandÚ	startDateÚendDatei@8  r  r²   r  r	  r´   rµ   rö  r  )r©  rÎ   r>   zErrore download EPG DAZN: HTTP uC   ðŸ“¥ EPG scaricato con successo dal server DAZN (valido per 4 ore).zErrore eccezione EPG: ÚTilesÚTypeÚLiveÚStartr¬   ÚEndÚZr&   z%Y-%m-%dT%H:%M:%Sé   )Úminutesr�  rç  zEvent i4  )Ústartr7  )rÂ   rÃ   rÄ   r   u   ðŸ”Ž EPG Check: z" programmi in palinsesto. Trovati z eventi speciali LIVE attivi.)r   rN  rP   Úutcr   rQ   r   Ú_epg_cache_datar–   Ú_epg_cache_timerÜ   rˆ   r"  rz   r˜   r*   rš   r9   r™   r+   r!   Ústrptimerm   Úyearr„   r<  rn   r%  )rN  r&  Útarget_dateÚdate_strÚend_date_strr©  Úlive_channelsrÈ  rû   r"   Úepg_headersr�   r:   ÚtilesÚnow_utcÚ
live_countÚtileÚ	start_strÚend_strÚstart_dtÚend_dtr­  ÚtitleÚparse_es                           r#   Úfetch_live_events_from_epgru  %  sï  € õ "Ø
D€CÜ—,‘,˜xŸ|™|Ó,×4Ñ4¸DÐ4ÓA€KØ×#Ñ# JÓ/€HØ¤)°Ô"3Ñ3×=Ñ=¸jÓI€Lð ØØØØØØñ€Fð €MåœDŸI™I›K¬/Ñ9¸UÒBÜ‰ä"×+Ñ+Ó-ˆ
ð	Ü˜zÓ*ˆAà0Ø2ð PØ_Ø$(Ø&1ñˆKð —‘�c &°+Àr�ÓJˆAØ—4’4ÜÐ5°a·m±m°_ÐEÄsÔKØ�	Ø—6‘6“8ˆDØ"ˆOÜ"Ÿi™i›kˆOÜÐUÔX]Ô^ð
 �H‰H�W˜bÓ!€EØ€Gà€JÜˆØ�8‰8�FÓ˜vÓ%ØŸ™ ¨"Ó-ˆIØ—h‘h˜u bÓ)ˆGÚšWðÜ'×0Ñ0°×1BÑ1BÀ3ÈÓ1K×1QÑ1QÐRUÓ1VÐWXÑ1YÐ[nÓo�HÜ%×.Ñ.¨w¯©¸sÀBÓ/G×/MÑ/MÈcÓ/RÐSTÑ/UÐWjÓk�Fð !¤9°QÔ#7Ñ7¸GÔMÀvÕMØ#'§8¡8¨IÓ#6˜Ø $§¡¨°F¸8¸*Ð2EÓ F˜ð "Ÿ;™;¨$Ò.Ù$á#Ø&¨!™O˜JØ)×0Ñ0Ø&.Ø(-Ø02à-5×-?Ñ-?Ó-AØ+1×+;Ñ+;Ó+=ñ("ñ	2ô ùð) ô@ Ð
œ3˜u›:˜,Ð&HÈÈÐTqÐrÔtwÔxØÐøôS ò 	ÜÐ(¨¨Ð,¬cÔ2Ø�Iûð	ûôJ !ò Ýûðús>   Â3AJ< Ä6J< ÆC K'É<K'Ê<	K$ËKËK$ËK$Ë'	K;Ë6K;Úinterval_hoursc                 ó¸  — t        «        t        «       }t        j                  |j	                  di «      j	                  d«      ¬«       d}|j	                  di «      j	                  dg «      j                  «       }t        «       }d}t        d¬«       	 	 t        «       }|D �ch c]  }|d	   ’Œ	 }	}|	|k7  r¥t        |	«      t        |«      kD  r)t        d
t        |	«      t        |«      z
  › d�t        «       |j                  «       }
|D �ch c]  }|j	                  d	«      ’Œ }}|D ]  }|d	   |vsŒ|
j                  |«       Œ |
|d   d<   t        |«       |	}d}d}t        j                  j!                  t"        «      r¡	 t%        t"        dd¬«      5 }t'        j                  |«      }|j	                  dg «      D ]Z  }|j	                  di «      }|j	                  d«      }|sŒ)t)        |t*        t,        f«      sŒ@|dkD  sŒFt/        |t+        |«      «      }Œ\ 	 ddd«       |dk  rt        d|› d�t2        «       d}|rÌt5        dt6        › d› t8        › �«       t        dt:        «       t5        t6        › d› t8        › �«       t=        |¬«      }d}|rbd|v r^|d   D ]V  }|j	                  di «      }|j	                  d«      }|sŒ)t)        |t*        t,        f«      sŒ@|dkD  sŒF||k  sŒLt+        |«      }ŒX t        d|› d�t>        «       d}nt        dt@        «       tC        d«      st        d¬«       tE        jF                  |«       �Œ´c c}w c c}w # 1 sw Y   �Œ;xY w# t0        $ r Y �ŒJw xY w# tH        $ r' t5        d t2        › d!t8        › d�«       tK        «        Y yt0        $ r2}t        d"|› �tL        «       tE        jF                  d#«       Y d}~Œ�d}~ww xY w)$z5Esegue l'estrazione all'avvio e ripete periodicamenterÓ   rÍ   r3  rö   rÐ   TéË(  )r   rÂ   u   ðŸš¨ Trovati z NUOVI EVENTI LIVE nell'EPG!i?B r�   r   rÖ   r	  ÚExpirySecondsr   NéP   u   âš ï¸� CdnToken in scadenza (zs). Richiedo rinnovo chiavi.rU   rT   u;   ðŸ”„ CICLO DI ESTRAZIONE CHIAVI & MANIFEST (Live + Lineari)©r,  rF   u6   âœ¨ Estrazione completata! Il token scadrÃ  tra circa zs.Fu4   ðŸ’¤ Nessun nuovo evento live e token valido (>80s).z

u   ðŸ›‘ Bot arrestato dall'utente.zErrore durante il ciclo: r”   )'rX   rß   rÜ   r`   rz   ÚcopyÚsetr;   ru  rn   r*   ÚMAGENTAr„   rã   r,   r-   r.   r=  rƒ   r™   rx   r¨   rª   Úminr!   r0   rO   rV   rR   r1   rL  r+   r%  r$   r–   r;  ÚKeyboardInterruptrE   r9   )rv  r,  r+  Úcheck_intervalÚbase_channelsÚlast_known_live_idsÚforce_extractionÚlive_eventsÚevÚcurrent_live_idsÚnew_channel_listrF  Úbase_idsÚ
min_expiryr…   Úold_outÚcdn_tokrõ   rI  Únew_min_expiryr:   s                        r#   Úrun_auto_looprŽ  |  sŸ  € ä„NÜ‹]€FÜ×Ñ F§J¡J¨v°rÓ$:×$>Ñ$>¸wÓ$GÐÔHð €Nð —J‘J˜v rÓ*×.Ñ.¨z¸2Ó>×CÑCÓE€MÜ›%ÐØÐô ˜eÕ$à
ðN	ä4Ó6ˆKÙ3>Ó?±;¨R  4£°;ÐÐ?ð  Ð#6Ò6ÜÐ'Ó(¬3Ð/BÓ+CÒCÜ˜-¬Ð,<Ó(=ÄÐDWÓ@XÑ(XÐ'YÐYuÐvÔxô  Að $1×#5Ñ#5Ó#7Ð á3@ÓA±=¨R˜BŸF™F 4�L°=�ÐAÛ%�BØ˜$‘x xÒ/Ø(×/Ñ/°Õ3ð &ð .>��v‘˜zÑ*Ü˜FÔ#Ø&6Ð#Ø#'Ð ð  ˆJÜ�w‰w�~‰~Ô.Ô/ð	ÜÔ.°¸gÕFÈ!Ü"&§)¡)¨A£,˜Ø")§+¡+¨j¸"Ö"=˜BØ&(§f¡f¨[¸"Ó&=˜GØ")§+¡+¨oÓ">˜CÚ"¤z°#¼¼U°|Õ'DÈÈqËÜ-0°¼SÀ»XÓ-F¡
ñ	 #>÷ Gð ˜BŠÜÐ3°J°<Ð?[Ð\Ô^dÔeØ#'Ð ñ  Ü˜œ4˜&  ¬U¨GÐ4Ô5ÜÐQÔSWÔXÜœ˜˜z˜l¬5¨'Ð2Ô3ä2¸YÔG�ð "*�Ù :°Ñ#<Ø)¨*Ô5˜Ø"$§&¡&¨°bÓ"9˜Ø%Ÿk™k¨/Ó:˜Ú¤:¨c´C¼°<Õ#@ÀSÈ1ÃWØ" ^Ó3Ü14°S³¡ð 6ô ÐLÈ^ÐL\Ð\^Ð_ÔafÔgØ#(Ñ äÐJÌSÔQô   Ô&Ü$¨%Õ0ô �J‰J�~Ô&ñO ùò  @ùò B÷ GÑFûô !ò ÚðûôL !ò 	Ü�Dœ˜Ð ?Ä¸wÀbÐIÔJÜŒLÙÜò 	ÜÐ+¨A¨3Ð/´Ô5Ü�J‰J�r�N‰Nûð	ús­   ÂM0 Â$M	Â0AM0 ÄMÄ#M0 Ä2AM0 ÆM  ÆAMÇ%MÇ<MÈMÈM  È"B!M0 ËM0 ËM0 Ë!M0 Ë'A M0 Í	
M0 ÍMÍM  Í 	M-Í)M0 Í,M-Í-M0 Í0-OÎOÎ'(OÏOc                  ó¦  — t        j                  d¬«      } | j                  ddd¬«       | j                  ddd¬«       | j                  d	t        d d
¬«       | j                  dt        d d¬«       | j                  dt        d d¬«       | j                  ddd¬«       | j                  ddd¬«       | j	                  «       }|j
                  rMt        j                  j                  t        «      r)t        j                  t        «       t        dt        «       y |j                  r±t        «       }t        j!                  |j#                  di «      j#                  d«      ¬«       t        dt        j%                  «       › d�t&        «       t        j)                  «       }|D ]2  \  }}}}|rt        nt*        }t        d|› d|› |› t,        › d|› d�	«       Œ4 y |j.                  s|j0                  rŸt3        «        t        «       }t5        ||j6                  «      }	t9        |	«      \  }
}
}|j.                  xs dd|j.                  xs d › �|j0                  xs d!d"œ}t;        |||	|«      }t=        d#t?        j@                  |d$d%¬&«      z   «       y |jB                  r!t3        «        tE        |j6                  ¬'«       y tG        |j6                  ¬'«       y )(Nz*DAZN - DRM Widevine Stream & Key Extractor)Údescriptionz--onceÚ
store_truezEsegui una sola volta ed esci)ÚactionÚhelpz--loopz2Esegui in loop continuo con intervallo programmatoz--tokenz(Specifica o aggiorna il JWT Bearer Token)rÕ  Údefaultr“  z--assetz!Estrai solo uno specifico AssetIdz--urlz-Usa uno specifico URL Playback personalizzatoz--test-proxyz'Testa tutti i proxy configurati ed esciz--clear-cachez.Cancella la cache delle chiavi pssh_cache.jsonz-Cache pssh_cache.json eliminata con successo!rÓ   rÍ   r3  zTest di z proxy in corso...z  z -> r7  zms)Úcustom_assetzAsset ÚCustomr¬   rÁ   rU   r=   Fr×   r{  )$ÚargparseÚArgumentParserÚadd_argumentr{   Ú
parse_argsÚclear_cacher,   r-   r.   rå   Úremover*   r+   Ú
test_proxyrß   rÜ   r`   rz   r�   r1   r¡   r9   rR   r  r&  rX   rM  rÅ   rú   r1  rO   r™   ÚdumpsÚoncerL  rŽ  )ÚparserÚargsrÞ   r›   r�   r˜   Úip_msgr    ÚcolrÅ   r@  rÄ  Ú	target_chrG  s                 r#   Úmainr¥  ß  s_  € Ü×$Ñ$Ð1]Ô^€FØ
×Ñ˜¨Ð<[ÐÔ\Ø
×Ñ˜¨Ð<pÐÔqØ
×Ñ˜	¬°TÐ@jÐÔkØ
×Ñ˜	¬°TÐ@cÐÔdØ
×Ñ˜¤c°4Ð>mÐÔnØ
×Ñ˜¨|ÐBkÐÔlØ
×Ñ˜°ÐCsÐÔtØ×ÑÓ€Dà×ÒÜ�7‰7�>‰>œ*Ô%Ü�I‰I”jÔ!ÜÐ?ÄÔGØà‡‚Ü‹mˆÜ×Ñ¨¯©°¸Ó(;×(?Ñ(?ÀÓ(HÐÔIÜˆh”}×*Ñ*Ó,Ð-Ð-?Ð@Ä$ÔGÜ×(Ñ(Ó*ˆÛ")ÑˆAˆr�6˜3Ù•%¤3ˆCÜ�"�Q�C�t˜C˜5  ¬¨¨r°#°°cÐ:Õ;ð #*ð 	à‡z‚z�T—X’XÜŒÜ‹mˆÜ˜#˜tŸz™zÓ*ˆÜ1°%Ó8Ñˆˆ1ˆnà—*‘*Ò. Ø˜TŸZ™ZÒ3¨8Ð4Ð5Ø ŸH™HšN¨ñ
ˆ	ô
 ˜i¨¨e°^ÓDˆÜˆd”T—Z‘Z ¨A¸EÔBÑBÔCØà‡y‚yÜŒÜ t§z¡zÕ2Øô ˜DŸJ™JÖ'rD   Ú__main__)z	127.0.0.1)rx  )r   Nr¢   )Nr  r`  )rÒ   N)nr¦   r,   r4   Úrer™   r–   rì   r¤  rÊ  r—  Úxml.etree.ElementTreeÚetreeÚElementTreerr  r   r   Útypingr   r   r   r   r	   Úurllib.parser
   r   r   r   r   r2   ÚatexitÚ	curl_cffir   rQ  rP  ÚImportErrorÚ
pywideviner   r   r   ÚplatformÚstdoutÚreconfigureÚstderrr!   r+   r0   r9   r1   rV   r~  r@  r%  rR   r-   r9  Úabspathr:  r6   r  rÚ   r8  rå   rÎ  r§   r=  r>  r/   r7   r¨   r{   r©   r$   r;   rE   ÚregisterÚDEFAULT_REFRESH_SECONDSr[  r}  ÚfromhexrX  rH   Ú__annotations__r*   rX   rZ   rÜ   rß   rã   rç   ré   ró   rú   r  r   r*  rM  r"  r]  rŒ  r´  rÂ  râ  r1  rL  rb  rc  ru  rŽ  r¥  r£   rC   rD   r#   Ú<module>rº     su  ðòó 
Û 
Û 	Û Û Û Û Û Û ß "Ð "ß (ß 3Õ 3ß BÓ BÛ Û Û ðÝ3Ø€Mó
 ß (Ñ (ð ‡<�<�7ÒðØ�
‰
×Ñ¨¸	ÐÔBØ�
‰
×Ñ¨¸	ÐÔBð
 €Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€ð —7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=€
Ø—7‘7—<‘< 
Ð,>Ó?€Ø—7‘7—<‘< 
Ð,>Ó?€
Ø—7‘7—<‘< 
Ð,=Ó>€
Ø—7‘7—<‘< 
¨IÓ6€Ø—7‘7—<‘< 
¨KÓ8€
Ø—7‘7—<‘< 
Ð,@ÓAÐ Ø—7‘7—<‘< 
Ð,?Ó@€Ø—7‘7—<‘< 
¨OÓ<Ð ð €ñ�sð  #ð ¸ó ñ@˜sð @¨tó @ó(ð €‡��
Ô ð #Ð ð <Ð Ø Ÿ=™=Ð)KÓLÐ à€
ˆD��c�‰NÓ ð  %ñ VˆSð V˜ð V¨ó Vó
÷[ñ [ñz ˜ZÓ(€ð=�T˜#˜s˜(‘^ó =ð~
4�T˜#˜s˜(‘^ð 
4¨ó 
4óó?ð
˜cð  d¨3°¨8¡nó ð	(˜cð 	( e¨D°#°t¸CÀ¸H±~Ð,EÑ&Fó 	(ó Û ñL�cð L Sð L°h¸tÀCÈÀH¹~Ñ6Nð LÐZ_Ð`cÐemÐnqÑerÐ`rÑZsó Lñ\l�d˜3 ˜8‘nð l°¸#±ð lÈ#ó lñ^˜x¨¨S°#¨X©Ñ7ð ÈSð Ðcfó ð	˜sð 	 tó 	ðC# sð C#¨u°X¸c±]ÀHÈSÁMÐ5QÑ/Ró C#ðJ*N  S¨# X¡ð *N¸¸SÀ#¸X¹ð *NÐSVð *NÐ[^ó *NðX$¨ð $°Cð $ÀÀcÈ3ÀhÁð $Ð]eÐfjÐknÐpsÐksÑftÑ]uð $Ðzð  AIð  JNð  ORð  TWð  OWñ  JXñ  AYð  [cð  dgñ  [hð  Ahñ  {ió $ñLM˜3ð M¨#ð M°sð MÀDÈÈcÈÁNð MÐdhÐilÐnqÐiqÑdrð Mð  CKð  LOñ  CPð Mð  emð  nrð  svð  x{ð  s{ñ  n|ñ  e}ð Mð  INð  OWð  X[ñ  O\ð  ^fð  gjñ  ^kð  Okñ  Iló Mð^b˜T # s (™^ð b°T¸#¸s¸(±^ð bÈCð bÐaeÐfiÐknÐfnÑaoð bÐtxÐy|ð  Bð  zBñ  uCó bñJ] H¨S¡Mð ]¸TÀ#ÀsÀ(¹^ó ]ð@ €Ø€ðT D¨¨c°3¨h©Ñ$8ó Tñn` #ð `°h¸s±mð `Ètó `òF/(ðb ˆzÒÙ…Fð øðe' ò Û$ØƒMðûð ò Úðús$   Á O Â:O' ÏO$Ï#O$Ï'O0Ï/O0