Ë
    1~¥jw  ã                   óô  — 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ZddlmZ ddlmZmZmZmZmZ 	 ddlZddlmZ d
ZdZdZdZdZdZefdededdfd„Zej@                  jC                  ej@                  jE                  e#«      «      Z$e$ej@                  vrej@                  jK                  de$«       ej@                  jM                  e$d«      Z'ej@                  jM                  e$d«      Z(	 ddl)Z)i Z,da-d„ Z.i a/da0d„ Z1i a2eeeeeeef   f   f   e3d<   dee   fd„Z4d:dededeeeef      deee   eeef   f   fd„Z5ded ed!e6de6fd"„Z7d;ded#e8de8fd$„Z9d%ede:fd&„Z;da<eejz                     e3d'<   dejz                  fd(„Z>dede8fd)„Z?d*„ Z@d+„ ZAd,„ ZBd-„ ZCd.„ ZDd/„ ZEd0„ ZFeGd1k(  r¸d2ZH ed3eH› d4�e«        e.«         eC«       \  ZIZJdZKej@                  j™                  eI«      r]ej@                  j™                  eJ«      rB	  ejš                  ejœ                  jž                  «      ZKeKj¡                  eIeJ«        ed5e«       	  ej¢                   eF«       d7eHeKd¬8«       yy# e$ r   edd¬«        ej.                  d	«       Y �ŒDw xY w# e*$ rZ+dZ) ede+› �e«       Y dZ+[+�Œ®dZ+[+ww xY w# e*$ rZ+ ed6e+› �e«       dZKY dZ+[+Œ€dZ+[+ww xY w# eR$ r  ed9e«        ej.                  d«       Y yw xY w)<a5  
====================================================================
 DAZN - Local HTTPS Proxy (aiohttp)
 Proxy locale ad alte prestazioni:
 - Download continuo e polling dell'MPD in background ("sempre attivo")
 - Rinnovo automatico e dinamico del CDN e del token ogni 200 secondi
 - Sincronizzazione Live Edge (ultimi 4 segmenti ~7.6s, nessun ritardo di 1 minuto)
 - Patch automatica ClearKey per player standard (VLC, mpv, Kodi, TiviMate)
 - Auto-retry trasparente in caso di 401/403 dal CDN
====================================================================
é    N)Údatetime)ÚOptionalÚDictÚListÚTupleÚAny)Úwebu>   ERRORE: aiohttp non Ã¨ installato. Esegui: pip install aiohttpT©Úflushé   z[32mz[33mz[31mz[36mz[35mz[0mÚmsgÚcolorÚreturnc                 ó`   — t        |› dt        j                  d«      › d| › t        › �d¬«       y )NÚ[z%H:%M:%Sz
] [PROXY] Tr
   )ÚprintÚtimeÚstrftimeÚRESET)r   r   s     údazn_proxy.pyÚlogr   )   s+   € Ü	ˆUˆG�1”T—]‘] :Ó.Ð/¨z¸#¸¼u¸gÐ
FÈdÖSó    zdazn_proxy_data.jsonzdazn_config.jsonzAttenzione import dazn: c                  ó¬  — t         j                  j                  t        «      �rZ	 t         j                  j	                  t        «      } | t
        kD  �r&t        t        dd¬«      5 }t        j                  |«      }|j                  dg «      }|D �]Û  }|j                  d«      }|sŒ|t        v�r}|j                  d«      }d}|r;	 t        j                  |«      }t        j                  «       |z
  j                  «       }t         j"                  j%                  |j                  dd	«      «      }	|	j                  r|	j                  j'                  d
d«      d   nd	}
|	j(                  r|	j*                  › d|	j(                  › |
› d
�nd	}||j                  dd«      ||j                  dd	«      ||	j,                  |j                  di «      |j                  dd	«      |j                  dd	«      t/        j.                  «       t1        d|«      z
  d ddt3        j4                  «       dœt        |<   �Œžt        |   }|j                  d|d   «      |d<   |j                  d|d   «      |d<   ||d<   �ŒÞ 	 d d d «       | at        S t        S # t        $ r Y �Œ‘w xY w# 1 sw Y   Œ'xY w# t        $ r)}t7        dt        › d|› �t8        «       Y d }~t        S d }~ww xY w)NÚrúutf-8©ÚencodingÚchannelsÚidÚextracted_atg     8�@Úbase_manifest_urlÚ Ú/r   r   ú://ÚnamezDAZN ChannelÚ	cdn_tokenÚcdn_nameÚ
key_stringç        )r   r%   Úraw_channelr!   Úbase_cdn_urlÚ
base_queryr&   r'   r(   Úlast_cdn_refreshÚ
cached_mpdÚcached_mpd_timeÚlast_sync_logÚlockr*   zErrore lettura ú: )ÚosÚpathÚexistsÚCHANNELS_FILEÚgetmtimeÚ_channels_mtimeÚopenÚjsonÚloadÚgetÚCHANNEL_STATESr   ÚfromisoformatÚnowÚtotal_secondsÚ	ExceptionÚurllibÚparseÚurlparseÚrsplitÚnetlocÚschemeÚqueryr   ÚmaxÚasyncioÚLockr   ÚRED)ÚmtimeÚfÚdatar   ÚchÚcidÚext_atÚinitial_ageÚdtÚparsed_baseÚ	base_pathÚbase_cdnÚstateÚes                 r   Úload_channels_from_diskrZ   ?   sˆ  € ä	‡w�w‡~�~”mÕ$ð1	=Ü—G‘G×$Ñ$¤]Ó3ˆEØ”Ó&Üœ-¨°wÕ?À1ÜŸ9™9 Q›<�DØ#Ÿx™x¨
°BÓ7�HÜ&˜Ø Ÿf™f T›l˜Ù"Ø$Ø¤nÒ4à%'§V¡V¨NÓ%;˜FØ*/˜KÙ%ð!)Ü)1×)?Ñ)?ÀÓ)G BÜ3;·<±<³>ÀBÑ3F×2UÑ2UÓ2W Kô +1¯,©,×*?Ñ*?ÀÇÁÐGZÐ\^Ó@_Ó*`˜KØNY×N^ÒN^¨×(8Ñ(8×(?Ñ(?ÀÀQÓ(GÈÒ(JÐdf˜IØep×ewÒew¨+×*<Ñ*<Ð)=¸SÀ×ASÑASÐ@TÐU^ÐT_Ð_`Ñ'aÐ}˜Hð '*Ø(*¯©¨v°~Ó(FØ/1Ø57·V±VÐ<OÐQSÓ5TØ08Ø.9×.?Ñ.?Ø-/¯V©V°KÀÓ-DØ,.¯F©F°:¸rÓ,BØ.0¯f©f°\À2Ó.FÜ48·I±I³KÄ#ÀcÈ;ÓBWÑ4WØ.2Ø36Ø14Ü(/¯©«ñ3œN¨3Ó/ô$ %3°3Ñ$7˜EØ,.¯F©F°6¸5À¹=Ó,I˜E &™MØ24·&±&¸ÀuÈ\ÑGZÓ2[˜E ,Ñ/Ø35˜E -Ó0ñQ '÷ @ðX #(�ô ÐŒ>ÐøôA (1ò !)Ú$(ð!)ú÷ @Ð?ûôZ ò 	=Ü�/¤- °°1°#Ð6¼×<Ð<ÜÐûð	=úsU   ¦?J! Á%A JÃ:JÄ E.JÉ/
J! Ê	JÊJÊJÊJÊJÊJ! Ê!	KÊ*KËKc                  óî  — dddddddœ} t         j                  j                  t        «      r¡	 t         j                  j	                  t        «      }|t
        kD  rtt        t        dd	¬
«      5 }t        j                  |«      }|j                  di «      j                  di «      }|j                  «       D ]
  \  }}|| |<   Œ 	 d d d «       | a|at        rt        S | S # 1 sw Y   ŒxY w# t        $ r Y Œ%w xY w)Nzhttps://www.dazn.comzhttps://www.dazn.com/zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36zA"Chromium";v="152", "Not?A_Brand";v="24", "Google Chrome";v="152"z?0z	"Windows")ÚOriginÚRefererz
User-Agentz	sec-ch-uazsec-ch-ua-mobilezsec-ch-ua-platformr   r   r   ÚdaznÚheaders)r3   r4   r5   ÚCONFIG_FILEr7   Ú_headers_mtimer9   r:   r;   r<   ÚitemsÚ_headers_cacherA   )Údefault_headersrM   rN   ÚcfgÚhÚkÚvs          r   Úload_headersri   y   så   € ð )Ø*ð HØXØ Ø)ñ€Oô 
‡w�w‡~�~”kÔ"ð	Ü—G‘G×$Ñ$¤[Ó1ˆEØ”~Ò%Üœ+ s°WÕ=ÀÜŸ)™) A›,�CØŸ™ ¨Ó+×/Ñ/°	¸2Ó>�AØ !§¡¦	™˜˜1Ø-.˜¨Ò*ñ !*÷ >ð
 "1�Ø!&�õ ,Œ>Ð@°Ð@÷ >Ð=ûô ò 	Ùð	ús*   ®>C( Á,ACÃC( ÃC%Ã!C( Ã(	C4Ã3C4Ú_proxy_alt_tokensc                  ól  — t         j                  j                  t        d«      } t         j                  j	                  | «      rN	 t        | dd¬«      5 }|D �cg c])  }d|v sŒ|j                  d«      rŒ|j                  «       ‘Œ+ c}cd d d «       S g S c c}w # 1 sw Y   g S xY w# t        $ r Y g S w xY w)Nzaccounts.txtr   r   r   Ú:Ú#)	r3   r4   ÚjoinÚ
SCRIPT_DIRr5   r9   Ú
startswithÚstriprA   )Úaccounts_filerN   Úls      r   Ú_load_accountsrt   •   sœ   € Ü—G‘G—L‘L¤¨^Ó<€MÜ	‡w�w‡~�~�mÔ$ð	Ü�m S°7Õ;¸qÙ+,ÓS©1 a°°q²ÀÇÁÈcÕAR˜Ÿ™�	¨1ÑS÷ <Ñ;ð €Iùò T÷ <ð €Iûô ò 	ØØ€Ið	úsN   ÁB& ÁBÁ	BÁ"BÁ4BÂBÂ	B& ÂBÂB#ÂB& Â#B& Â&	B3Â2B3ÚemailÚpasswordÚ
proxy_dictc                 ó  — | t         v r-t         |    \  }}|rt        j                  |«      \  }}}|r||fS t        j                  | ||«      \  }}	|dk(  r*|	r(t        j                  |	«      \  }}}|	|ft         | <   |	|fS di fS )z[Restituisce il token per l'account specificato, riutilizzando la cache in memoria se validaÚSUCCESSN)rj   r^   Úcheck_token_statusÚ
dazn_login)
ru   rv   rw   ÚtokÚpayloadÚvalÚremÚ_ÚstatusÚ	new_tokens
             r   Ú_get_account_tokenrƒ   Ÿ   sœ   € ð Ô!Ñ!Ü(¨Ñ/‰ˆˆWÙÜ×1Ñ1°#Ó6‰KˆC��aÙØ˜G�|Ð#äŸ™¨¨x¸ÓDÑ€FˆIØ�Ò™yÜ×/Ñ/°	Ó:‰ˆˆ1ˆgØ$-¨wÐ#7Ô˜%Ñ Ø˜'Ð!Ð!Ø�ˆ8€Or   Ú
channel_idÚchannel_namer*   c           	      ó2  — t         st        d«      ‚t        j                  «       }t         j                  j	                  «       }t        «       }g }t        j                  |«      }|r)t        j                  |«      }|j                  d||f«       |D ]+  }	|	j                  dd«      \  }
}|j                  |
|df«       Œ- d}d}d}|D ]Å  \  }}}|�|}|}nt        |||«      \  }}|sŒ!|r|j                  dd	«      nd	}t        j                  |||«      }t        j                  ||||«      \  }}|rA|}d
t        |«      v rt        d|› d|› d�t         «       Œ’t        d|› d|› d|› �t         «       Œ¬|sŒ¯|j                  d«      sŒÁ|}|} n |st        d|› �«      ‚|j                  dg «      }|st        d«      ‚d}dD ]3  }|D ](  }||j                  dd	«      j#                  «       v sŒ&|} n |sŒ3 n |s|r|d   }|j                  dd	«      }|j                  di «      }|j                  dd	«      }t$        j&                  j)                  |«      }|j*                  j-                  dd«      d   } |j.                  › d|j0                  › | › d�}!	 t2        j*                  j5                  t6        «      �rt9        t6        dd¬«      5 }"t;        j<                  |"«      }#ddd«       d}$#j                  dg «      D ]ˆ  }%|%j                  d «      | k(  sŒ||%d!<   ||%d"<   ||%d#<   d$|v rd%nd$}&|j                  d&d'«      }'|j                  d(d	«      }(|› |&› |'› d)|(› �|%d*<   t?        j@                  «       jC                  «       |%d+<   d,}$ n |$r4t9        t6        d-d¬«      5 }"t;        jD                  |#|"d.d¬/«       ddd«       ||!|jH                  |||d1œS # 1 sw Y   ŒñxY w# 1 sw Y   Œ(xY w# tF        $ r$})t        d0t6        › d|)› �t         «       Y d})~)ŒSd})~)ww xY w)2zfEsegue la chiamata Playback alle API DAZN per ottenere il nuovo CDN e token con fallback multi-accountz*Modulo dazn non disponibile per il rinnovozAccount Principalerl   r   NzNessun account disponibilezN/AÚviewerIdr"   ÚConcurrencyu   â�³ [z] Concurrency su z, provo account successivo...õ   âš ï¸� [z] Errore Playback su r2   ÚPlaybackDetailszErrore Playback DAZN: z6Nessun PlaybackDetails disponibile nella risposta DAZN)zdct-fs-livezdcs-fs-livezdct-ac-liveÚfsÚaczdct-ak-livezdcs-ak-liveÚakÚCdnNamer   ÚManifestUrlÚCdnTokenr#   r$   r   r   r   Fr   r   r!   r&   r'   Ú?Ú&ÚNameú
dazn-tokenÚValueÚ=Úmanifest_urlr    TÚwé   )ÚindentÚensure_asciizAvviso salvataggio )r!   r+   r,   r&   r'   Úaccount_used)%r^   ÚRuntimeErrorÚload_configÚproxy_managerÚget_dictrt   Ú	get_tokenÚdecode_jwt_payloadÚappendÚsplitrƒ   r<   Úbuild_playback_urlÚrequest_playback_infoÚstrr   ÚYELLOWÚlowerrB   rC   rD   r4   rE   rG   rF   r3   r5   r6   r9   r:   r;   r   r?   Ú	isoformatÚdumprA   rH   )*r„   r…   r*   Úconfigrw   ÚaccountsÚ
candidatesÚ
main_tokenÚ	m_payloadÚ	acct_lineÚemÚpwÚplayback_dataÚlast_errrœ   ÚlabelÚtoken_or_pwÚpayload_candÚtokenÚtokens_payloadÚ	viewer_idÚplayback_urlÚp_dataÚerrÚdetails_listÚchosen_detailÚprefÚdÚraw_manifest_urlr&   r'   rU   rV   r+   rN   rO   ÚupdatedrP   ÚsepÚt_nameÚt_valrY   s*                                             r   Ú_refresh_cdn_syncrÈ   °   sC  € åÜÐGÓHÐHä×ÑÓ€FÜ×#Ñ#×,Ñ,Ó.€Jô Ó€HØ€JÜ—‘ Ó'€JÙÜ×+Ñ+¨JÓ7ˆ	Ø×ÑÐ/°¸YÐGÔHãˆ	Ø—‘  aÓ(‰ˆˆBØ×Ñ˜2˜r 4˜.Õ)ð ð €MØ+€HØ€Lã,6Ñ(ˆˆ{˜LØÐ#ØˆEØ)‰Nä$6°u¸kÈ:Ó$VÑ!ˆE�>ÙØá:H�N×&Ñ& z°2Ô6Èbˆ	Ü×.Ñ.¨{¸FÀIÓNˆÜ×0Ñ0°¸uÀfÈjÓY‰ˆ�áØˆHØ¤ C£Ñ(Ü�e˜L˜>Ð):¸5¸'ÐA^Ð_ÔagÔhØä�h˜|˜nÐ,AÀ%ÀÈÈ3È%ÐPÔRXÔYØâ�f—j‘jÐ!2Õ3Ø"ˆMØ ˆLÙð3 -7ñ6 ÜÐ3°H°:Ð>Ó?Ð?à ×$Ñ$Ð%6¸Ó;€LÙÜÐSÓTÐTð €MÛmˆÛˆAØ�q—u‘u˜Y¨Ó+×1Ñ1Ó3Ò3Ø !�Ùð ò Ùð nñ ™\Ø$ Q™ˆà$×(Ñ(¨¸Ó;ÐØ×!Ñ! *¨bÓ1€IØ× Ñ  ¨BÓ/€Hä—,‘,×'Ñ'Ð(8Ó9€KØ× Ñ ×'Ñ'¨¨QÓ/°Ñ2€IØ!×(Ñ(Ð)¨¨[×-?Ñ-?Ð,@ÀÀÈ1ÐM€Lð@Ü�7‰7�>‰>œ-Õ(Ü”m S°7Õ;¸qÜ—y‘y “|�÷ <àˆGØ—h‘h˜z¨2Ö.�Ø—6‘6˜$“< :Ó-Ø.>�BÐ*Ñ+Ø&/�B�{‘OØ%-�B�z‘NØ!$Ð(8Ñ!8™#¸c�CØ&Ÿ]™]¨6°<Ó@�FØ%ŸM™M¨'°2Ó6�EØ,<Ð+=¸c¸UÀ6À(È!ÈEÈ7Ð)S�B�~Ñ&Ü)1¯©«×)AÑ)AÓ)C�B�~Ñ&Ø"�GÙð /ñ Üœ-¨°wÕ?À1Ü—I‘I˜d A¨a¸eÕD÷ @ð .Ø$Ø!×'Ñ'ØØØ$ñð ÷+ <Ð;ú÷  @Ð?ûäò @ÜÐ!¤- °°1°#Ð6¼×?Ñ?ûð@úsO   Ê6O) ËOË!3O) ÌBO) ÎOÎ6O) ÏOÏO) ÏO&Ï"O) Ï)	PÏ2PÐPÚforcec           
   ƒ   óF  K  — t         j                  | «      }|sy|d   4 ƒd{  –—†  t        j                  «       |d   z
  }|s|dk  r	 ddd«      ƒd{  –—†  yt        d|d   › d	t	        |«      › d
�t
        «       	 t        j                  t        | |d   |j                  di «      «      ƒ d{  –—† }|d   |d<   |d   |d<   |d   |d<   |d   |d<   |d   |d<   t        j                  «       |d<   |j                  d«      rd|d   › �nd}t        d|d   › d|› d|d   › d�t        «       	 ddd«      ƒd{  –—†  y7 �Œ7 Œï7 Œ•7 Œ# t        $ r4}t        d|d   › d|› �t        «       Y d}~ddd«      ƒd{  –—†7   yd}~ww xY w# 1 ƒd{  –—†7  sw Y   yxY w­w)zJRinnova il CDN token per il canale se sono passati >= 200s o se force=TrueFr1   Nr-   ç      i@Tu   ðŸ”„ [r%   z*] Rinnovo CDN & Token in corso (trascorsi zs)...r*   r!   r+   r,   r&   r'   rœ   z via r"   u   ðŸ”‘ [z%] CDN & Token aggiornati con successoz! CDN: z (prossimo cambio tra 200s)u   â�Œ [z!] Errore durante il rinnovo CDN: )r=   r<   r   r   ÚintÚCYANrJ   Ú	to_threadrÈ   ÚGREENrA   rL   )r„   rÉ   rX   ÚelapsedÚresÚacct_strrY   s          r   Úrefresh_channel_cdnrÓ      sÃ  è ø€ ä×Ñ˜zÓ*€EÙØà�V�}‹}Ü—)‘)“+ Ð&8Ñ 9Ñ9ˆÙ˜ 5šØ÷ �}ˆ}ô
 	ˆf�U˜6‘]�OÐ#MÌcÐRYËlÈ^Ð[`ÐaÔcgÔhð	Ü×)Ñ)Ô*;¸ZÈÈvÉÐX]×XaÑXaÐboÐqsÓXtÓu×uˆCØ),Ð-@Ñ)AˆEÐ%Ñ&Ø$'¨Ñ$7ˆE�.Ñ!Ø"% lÑ"3ˆE�,ÑØ!$ [Ñ!1ˆE�+ÑØ # J¡ˆE�*ÑÜ(,¯	©	«ˆEÐ$Ñ%Ø8;¿¹ÀÔ8O˜˜s >Ñ2Ð3Ñ4ÐUWˆHÜ�&˜˜v™˜Ð'LÈXÈJÐV]Ð^aÐblÑ^mÐ]nð  oJð  Kô  MRô  SØ÷! �}‰}ùˆ}øð vøð ùô" ò 	Ü�%˜˜f™�Ð&GÈÀsÐKÌSÔQÛ÷' �}‰}ûð"	ú÷# �}‰}üs«   ‚"F!¤E¥F!¨#FÁF!ÁEÁF!Á#FÂ 2EÂ2EÂ3A>EÄ2F!Ä=E
Ä>F!ÅF!ÅEÅ
F!Å	F	ÅFÅ.FÅ2F!Å=F Å>F!ÆF	Æ	FÆFÆFÆFÆF!Úmpd_textc                 óþ  — t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  ¬«      } d}t        j                  dd|z   | «      } t        j                  d	d| t         j                  ¬«      } d
| v rt        j                  dd| «      } nt        j                  dd| d¬«      } | j                  d«      S )u  
    Rimuove Widevine/PlayReady, inietta ClearKey per player standard (VLC, mpv, Kodi, TiviMate),
    rimuove BaseURL per instradare i segmenti sul proxy locale e ottimizza i parametri di buffer
    per garantire fluiditÃ  assoluta senza lag nÃ© buffering.
    zo<ContentProtection[^>]*schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"[^>]*>.*?</ContentProtection>r"   )ÚflagszY<ContentProtection[^>]*schemeIdUri="urn:microsoft:playready"[^>]*>.*?</ContentProtection>zo<ContentProtection[^>]*schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"[^>]*>.*?</ContentProtection>zQ<ContentProtection schemeIdUri="urn:uuid:e2719d58-a985-b3c9-781a-214f90116bb0" />z,(<ContentProtection[^>]*value="cenc"[^>]*/>)z\1z<BaseURL>.*?</BaseURL>zsuggestedPresentationDelay=z$suggestedPresentationDelay="PT[^"]+"z#suggestedPresentationDelay="PT6.0S"z(<MPD\b[^>]*)z&\1 suggestedPresentationDelay="PT6.0S"r   )Úcountr   )ÚreÚsubÚDOTALLÚencode)rÔ   Úclearkey_cps     r   Úpatch_mpd_contentrÝ   <  s&  € ô �v‰vð  Ið  KMð  OWô  _a÷  _hñ  _hô  i€HÜ�v‰vÐrÐtvð  yAô  IK÷  IRñ  IRô  S€HÜ�v‰vð  Ið  KMð  OWô  _a÷  _hñ  _hô  i€Hàe€KÜ�v‰vÐEÀuÈ{ÑGZÐ\dÓe€Hô �v‰vÐ/°°XÄRÇYÁYÔO€Hð %¨Ñ0Ü—6‘6ÐAÐChÐjrÓs‰ä—6‘6Ð*Ð,UÐW_ÐghÔiˆð
 �?‰?˜7Ó#Ð#r   ÚHTTP_SESSIONc               ƒ   óÎ   K  — t         �t         j                  rFt        j                  ddd¬«      } t        j                  dd¬«      }t        j
                  | |¬«      a t         S ­w)	Néd   é<   T)ÚlimitÚkeepalive_timeoutÚenable_cleanup_closedé   é   )ÚtotalÚconnect©Ú	connectorÚtimeout)rÞ   ÚclosedÚaiohttpÚTCPConnectorÚClientTimeoutÚClientSessionré   s     r   Úget_http_sessionrñ   [  sS   è ø€ äÐœ|×2Ò2Ü×(Ñ(¨sÀbÐ`dÔeˆ	Ü×'Ñ'¨b¸!Ô<ˆÜ×,Ñ,°yÈ'ÔRˆÜÐùs   ‚A#A%c              ƒ   ó’  K  — t         j                  | «      }|syt        j                  «       }||d   z
  dk\  rt        | «      ƒ d{  –—†  |j                  d«      }|j                  di «      }|j                  dd«      }|j                  d	d
«      }|r|syd|v rdnd}|› |› |› d|› �}t	        «       j                  «       }	|› d|› �|	d<   d|	v r|	d= t        «       ƒ d{  –—† }
	 |
j                  ||	¬«      4 ƒd{  –—† }|j                  dv �rBt        d|d   › d|j                  › d�t        «       t        | d¬«      ƒ d{  –—† }|rõ|j                  di «      }|j                  dd«      }|j                  d	d
«      }d|d   v rdnd}|d   › |› |› d|› �}|› d|› �|	d<   |
j                  ||	¬«      4 ƒd{  –—† }|j                  dk(  ra|j                  d¬«      ƒ d{  –—† }t        |«      |d<   t        j                  «       |d<   	 ddd«      ƒd{  –—†  ddd«      ƒd{  –—†  yddd«      ƒd{  –—†  	 ddd«      ƒd{  –—†  y|j                  dk(  r©|j                  d¬«      ƒ d{  –—† }t        |«      |d<   t        j                  «       |d<   t        j                  «       |j                  dd«      z
  dkD  r.t        d |d   › d!�t        «       t        j                  «       |d<   	 ddd«      ƒd{  –—†  y|j                  d"d«      }t        j                  «       |z
  dkD  r:t        d#|j                  › d$|d   › �t        «       t        j                  «       |d"<   	 ddd«      ƒd{  –—†  y7 �Œ=7 �Œ¦7 �ŒŒ7 �ŒG7 �ŒÓ7 �Œ­7 �Œz7 �Œm7 �Œ_# 1 ƒd{  –—†7  sw Y   �ŒpxY w7 �Œg7 �Œ@7 Œ´7 Œ># 1 ƒd{  –—†7  sw Y   yxY w# t        $ rf}|j                  d"d«      }t        j                  «       |z
  dkD  r0t        d%|d   › d&|› �t        «       t        j                  «       |d"<   Y d}~yd}~ww xY w­w)'zJScarica il manifesto MPD on-demand dal CDN DAZN e lo salva in cache localeFr-   rË   Nr!   r&   r“   r”   r•   r"   r‘   r’   r–   ÚCookieÚHost©r_   ©i‘  i“  r‰   r%   z] CDN ha restituito z su MPD. Rinnovo token...T©rÉ   éÈ   Úignore)Úerrorsr.   r/   r0   r   ç      N@u   âš¡ [z6] Flusso proxato e sincronizzato in RAM (Live Edge OK)Úlast_err_logzAvviso CDN (z) scaricando MPD per zEccezione scaricando MPD per r2   )r=   r<   r   rÓ   ri   Úcopyrñ   r�   r   r¨   ÚtextrÝ   rÏ   rA   rL   )r„   rX   r?   r!   r&   rÆ   rÇ   rÅ   Ú
target_urlr_   ÚsessionÚrespÚokÚ
retry_respÚraw_textÚlast_err_timerY   s                    r   Údownload_and_cache_mpdr  c  s  è ø€ ä×Ñ˜zÓ*€EÙØä
�)‰)‹+€CØˆeÐ&Ñ'Ñ'¨EÒ1Ü! *Ó-×-Ð-àŸ	™	Ð"5Ó6ÐØ—	‘	˜+ rÓ*€IØ�]‰]˜6 <Ó0€FØ�M‰M˜' 2Ó&€Eá¡EØàÐ)Ñ)‰#¨s€CØ%Ð& s e¨F¨8°1°U°GÐ<€Jä‹n×!Ñ!Ó#€GØ!˜( ! E 7Ð+€GˆHÑØ�ÑØ�FˆOä$Ó&×&€Gð(Ø—;‘;˜z°7�;×;Ô;¸tØ�{‰{˜jÒ(Ü�h˜u V™}˜oÐ-AÀ$Ç+Á+ÀÐNgÐhÔjpÔqÜ.¨zÀÔF×F�ÙØ %§	¡	¨+°rÓ :�IØ&Ÿ]™]¨6°<Ó@�FØ%ŸM™M¨'°2Ó6�EØ!$¨Ð.AÑ(BÑ!B™#È�CØ$)Ð*=Ñ$>Ð#?À¸uÀVÀHÈAÈeÈWÐ!U�JØ+1¨(°!°E°7Ð(;�G˜HÑ%Ø&Ÿ{™{¨:¸w˜{×GÔGÈ:Ø%×,Ñ,°Ò3Ø-7¯_©_ÀH¨_Ó-M×'M˜HÜ2CÀHÓ2M˜E ,Ñ/Ü7;·y±y³{˜EÐ"3Ñ4Ø#'÷  H×G÷ <×;Ð;÷  H×Gð ÷# <×;Ð;ð& �{‰{˜cÒ!Ø!%§¡°( Ó!;×;�Ü&7¸Ó&A��lÑ#Ü+/¯9©9«;�Ð'Ñ(ä—I‘I“K %§)¡)¨O¸QÓ"?Ñ?À4ÒGÜ˜%  f¡˜Ð.dÐeÔglÔmÜ-1¯Y©Y«[�E˜/Ñ*Ø÷7 <×;Ð;ð: !&§	¡	¨.¸!Ó <�Ü—I‘I“K -Ñ/°4Ò7Ü˜, t§{¡{ mÐ3HÈÈvÉÈÐXÔZ`ÔaÜ,0¯I©I«K�E˜.Ñ)Ø÷C <×;Ð;ð) 	.ùð$ 'ùà;ùð Gùð  Hùà'Mùð  Hùð <ùð  Hù×G×GÒGúð <ùð( <ùð) <øÐ;ø×;×;Ñ;ûôD ò ØŸ	™	 .°!Ó4ˆÜ�I‰I‹K˜-Ñ'¨4Ò/ÜÐ/°°f±¨¸bÀÀÐDÄcÔJÜ$(§I¡I£KˆE�.Ñ!Üûðüs¤  ‚AQÁNÁ	BQÃ"NÃ#QÃ(O Ã?NÄ O ÄAO ÅNÅA6O Æ>NÆ?O Ç%N Ç'NÇ(*N ÈO ÈNÈO È"O È-NÈ.O È2QÈ3O È>NÈ?O ÉO ÉN6ÉO ÉQÉ$O É9N9É:BO Ë<O ÌN<ÌO ÌQÌA'O Í4O Í?N>Î O ÎQÎQÎO ÎO ÎO ÎN ÎO ÎO ÎO Î N3	Î&N)Î'N3	Î.O Î6O Î9O Î<O Î>O Ï OÏO	ÏOÏO ÏQÏO Ï	QÏAP?Ð:QÐ?QÑQc               ƒ   ó  K  — t        dt        «       t        j                  d«      ƒ d{  –—†  d} 	 	 t	        j                  «       }|| z
  dkD  rt        «        |} t        t        j                  «       «      D ]y  \  }}||j                  dd«      z
  dk  sŒ||j                  d	d«      z
  d
k\  rt        |«      ƒ d{  –—†  t        |«      ƒ d{  –—†  t        j                  d«      ƒ d{  –—†  Œ{ t        j                  d«      ƒ d{  –—†  Œà7 Œç7 ŒV7 ŒE7 Œ*7 Œ# t        j                  $ r t        dt        «       Y yt        $ r;}t        d|› �t        «       t        j                  d«      ƒ d{  –—†7   Y d}~Œnd}~ww xY w­w)aU  
    Loop continuo di proxying in memoria per i canali in riproduzione:
    - Sincronizza e mantiene caldi in RAM gli MPD solo per i canali richiesti negli ultimi 60s
    - Rigenera automaticamente i token CDN ogni 190 secondi per i flussi attivi
    - Canali inattivi (nessun player connesso): non effettuano chiamate Playback API DAZN
    uZ   ðŸš€ Avvio Poller di background on-demand (mantiene caldi e aggiornati i canali attivi)...r   Nr)   g      $@Úlast_requestedr   rû   r-   g     Àg@gš™™™™™©?g      @u$   ðŸ›‘ Poller di background arrestato.zErrore poller background: é   )r   rÍ   rJ   Úsleepr   rZ   Úlistr=   rb   r<   rÓ   r  ÚCancelledErrorr¨   rA   rL   )Úlast_disk_checkr?   rQ   rX   rY   s        r   Úbackground_pollerr  ©  sU  è ø€ ô ÐdÔfjÔkÜ
�-‰-˜Ó
×Ðà€OØ
ð	#Ü—)‘)“+ˆCØ�oÑ%¨Ò-Ü'Ô)Ø"%�ä"¤>×#7Ñ#7Ó#9Ö:‘
��Uà˜%Ÿ)™)Ð$4°aÓ8Ñ8¸TÓAà˜eŸi™iÐ(:¸AÓ>Ñ>À5ÒHÜ1°#Ó6×6Ð6ô 1°Ó5×5Ð5Ü!Ÿ-™-¨Ó-×-Ñ-ð ;ô —-‘- Ó$×$Ð$ð% ð øð 7øð 6øØ-øà$ùÜ×%Ñ%ò 	ÜÐ6¼Ô?ÙÜò 	#ÜÐ,¨Q¨CÐ0´#Ô6Ü—-‘- Ó"×"Ö"ûð	#üsŸ   ‚)F«D¬F´A#D Â&D Â>DÂ?D ÃDÃD Ã.DÃ/D ÄDÄD ÄFÄD ÄD ÄD ÄD Ä#FÅ FÅFÅ
+F Å5E8Å6F Å;FÆ FÆFc              ƒ   óì  K  — t        «        dg}| j                  }|sd}t        j                  «       D �]  \  }}|j	                  di «      }|j	                  d«      dk(  s|j	                  d«      sŒ?|j	                  dd«      }|rd	|› d
�nd}t        |j	                  d«      «      }|rdnd}	|j                  d|› d|d   › d
|› d|	› d|d   › �
«       |j                  d«       |j                  d«       |j                  d«       |j                  d|j	                  d«      › �«       |j                  d|› d|› d�«       �Œ dj                  |«      dz   }
t        j                  |
dddi¬«      S ­w)Nz#EXTM3U x-tvg-url=""zaddictedbytheproject.nl:10443r*   r�   ÚOKr(   Úlogor"   z tvg-logo="Ú"ÚepgzDAZN Eventi LivezDAZN Canaliz#EXTINF:-1 tvg-id="z" tvg-name="r%   z group-title="z",z*#KODIPROP:inputstream=inputstream.adaptivez0#KODIPROP:inputstream.adaptive.manifest_type=mpdz4#KODIPROP:inputstream.adaptive.license_type=clearkeyz+#KODIPROP:inputstream.adaptive.license_key=zhttps://z/play/z/stream.mpdÚ
zaudio/mpegurlúAccess-Control-Allow-OriginÚ*)rþ   Úcontent_typer_   )
rZ   Úhostr=   rb   r<   Úboolr£   rn   r	   ÚResponse)ÚrequestÚlinesr  rQ   rX   rP   r  Ú	logo_attrÚis_liveÚgroupÚbodys              r   Úhandle_playlistr!  Ï  s}  è ø€ ÜÔØ%Ð&€Eà�<‰<€DÙØ.ˆä$×*Ñ*×,‰
ˆˆUØ�Y‰Y�} bÓ)ˆØ�6‰6�(Ó˜tÒ# u§y¡y°Õ'>Ø—6‘6˜& "Ó%ˆDÙ15˜+ d V¨1Ñ-¸2ˆIÜ˜2Ÿ6™6 %›=Ó)ˆGÙ*1Ñ&°}ˆEØ�L‰LÐ.¨s¨e°<ÀÀfÁ¸ÈaÐPYÈ{ÐZhÐinÐhoÐoqÐrwÐx~Ñrð  rAð  Bô  CØ�L‰LÐEÔFØ�L‰LÐKÔLØ�L‰LÐOÔPØ�L‰LÐFÀuÇyÁyÐQ]ÓG^ÐF_Ð`ÔaØ�L‰L˜8 D 6¨°¨u°KÐ@ÖAð -ð �I‰I�eÓ˜tÑ#€DÜ�<‰<˜T°ÐJgÐilÐImÔnÐnùs   ‚A0E4Á3DE4c           
   ƒ   ó  K  — | j                   j                  d«      }| j                   j                  d«      }|r|st        j                  d¬«      ‚t        j                  |«      }|st        «        t        j                  |«      }|st        j                  d¬«      ‚t        j                  «       |d<   |j                  d«      }|r™|j                  d«      }|r*t        j                  «       |j                  d	d
«      z
  dkD  r$t        |«      ƒ d {  –—†  |j                  d«      }|st        j                  d¬«      ‚t        j                  |dddddddœ¬«      }|S t        j                  «       }||d   z
  dk\  rt        |«      ƒ d {  –—†  |j                  d«      }|j                  di «      }	|	j                  dd«      }
|	j                  dd«      }|r|st        j                  d¬«      ‚|j                  d«      d
   }|j                  dd«      }g }|r?|j                  d «      D ]+  }|sŒ|j                  |
› d!�«      rŒ|j                  |«       Œ- |j                  |
› d!|› �«       d j!                  |«      }|› |› d|› �}t#        «       j%                  «       }|
› d!|› �|d"<   d#|v r|d#= d$| j&                  v r| j&                  d$   |d$<   t)        «       ƒ d {  –—† }	 |j                  ||¬%«      4 ƒd {  –—† }|j*                  d&v �rÎt-        d'|d(   › d)|j*                  › d*|› d+�t.        «       t        |d,¬-«      ƒ d {  –—† }|�r�|j                  di «      }	|	j                  dd«      }
|	j                  dd«      }|D �cg c]  }|j                  |
› d!�«      rŒ|‘Œ }}|j                  |
› d!|› �«       |d   › |› dd j!                  |«      › �}|
› d!|› �|d"<   |j                  ||¬%«      4 ƒd {  –—† }|j*                  d.v rÀ|j1                  «       ƒ d {  –—† }d/di}d0|j&                  v r|j&                  d0   |d0<   d1|j&                  v r|j&                  d1   |d1<   d2|j&                  v r|j&                  d2   |d2<   t        j                  ||j*                  |¬3«      cd d d «      ƒd {  –—†  cd d d «      ƒd {  –—†  S d d d «      ƒd {  –—†  |j*                  d.vrCt-        d4|j*                  › d5|› �t2        «       t        j                  d6|j*                  › �¬«      ‚|j1                  «       ƒ d {  –—† }d/di}d0|j&                  v r|j&                  d0   |d0<   d1|j&                  v r|j&                  d1   |d1<   d2|j&                  v r|j&                  d2   |d2<   t        j                  ||j*                  |¬3«      cd d d «      ƒd {  –—†  S 7 �ŒÏ7 �ŒW7 �Œ7 �Œë7 �Œ£c c}w 7 �Œ÷7 �ŒÔ7 �ŒA7 �Œ37 �Œ%# 1 ƒd {  –—†7  sw Y   �Œ6xY w7 ŒÔ7 Œ@# 1 ƒd {  –—†7  sw Y   y xY w# t        j4                  $ r ‚ t6        $ r1}t-        d7|› d8|› �t2        «       t        j                  d9¬«      ‚d }~ww xY w­w):Nr   ÚfilenamezBad Request)rþ   zChannel Not Foundr  z
stream.mpdr.   r/   r   g      @z Impossibile ottenere MPD dal CDNrø   zapplication/dash+xmlr  z.no-cache, no-store, must-revalidate, max-age=0zno-cacheÚ0)r  zCache-ControlÚPragmaÚExpires)r   r�   r  r_   r-   rË   r+   r&   r“   r”   r•   r"   z Dati CDN del canale non completir‘   r,   r’   r–   ró   rô   ÚRangerõ   rö   r‰   r%   z] Errore CDN (z) per z. Rinnovo token...Tr÷   )rø   éÎ   r  zContent-TypezContent-LengthzContent-Range)r   r�   r_   zErrore CDN (z) per segmento zCDN Error: zProxy Error per r2   zInternal Proxy Error)Ú
match_infor<   r	   ÚHTTPBadRequestr=   rZ   ÚHTTPNotFoundr   rp   r  ÚHTTPBadGatewayr  rÓ   ÚHTTPInternalServerErrorr¤   r£   rn   ri   rý   r_   rñ   r�   r   r¨   ÚreadrL   ÚHTTPExceptionrA   )r  r„   r#  rX   Úis_mpdÚcached_bytesr  r?   r+   r&   rÆ   rÇ   Úclean_filenamer,   Úquery_partsÚqpÚqsrÿ   Úreq_headersr   Úcdn_respr  r  ÚcontentÚout_headersrY   s                             r   Úhandle_playr:  è  sQ  è ø€ Ø×#Ñ#×'Ñ'¨Ó-€JØ×!Ñ!×%Ñ% jÓ1€Há™XÜ× Ñ  mÔ4Ð4ä×Ñ˜zÓ*€EÙÜÔ!Ü×"Ñ" :Ó.ˆáÜ×ÑÐ$7Ô8Ð8ä"Ÿi™i›k€EÐ
ÑØ× Ñ  Ó.€Fñ Ø—y‘y Ó.ˆÙ¤§	¡	£¨e¯i©iÐ8IÈ1Ó.MÑ MÐQTÒTÜ(¨Ó4×4Ð4Ø Ÿ9™9 \Ó2ˆLáÜ×$Ñ$Ð*LÔMÐMä�|‰|ØØØ/à/2Ø!QØ$Øñ	ô	

ˆð ˆô �)‰)‹+€CØˆeÐ&Ñ'Ñ'¨EÒ1Ü! *Ó-×-Ð-à—9‘9˜^Ó,€LØ—	‘	˜+ rÓ*€IØ�]‰]˜6 <Ó0€FØ�M‰M˜' 2Ó&€Eá™uÜ×)Ñ)Ð/QÔRÐRà—^‘^ CÓ(¨Ñ+€NØ—‘˜<¨Ó,€Jà€KÙØ×"Ñ" 3Ö'ˆBÚ˜"Ÿ-™-¨6¨(°!¨Õ5Ø×"Ñ" 2Õ&ð (ð ×Ñ˜&˜  5 'Ð*Ô+Ø	�‰�+Ó	€Bà �> .Ð!1°°2°$Ð7€Jä“.×%Ñ%Ó'€KØ%˜h a¨ wÐ/€K�ÑØ�ÑØ˜ÐØ�'—/‘/Ñ!Ø&Ÿ™¨wÑ7ˆ�GÑä$Ó&×&€Gð-GØ—;‘;˜z°;�;×?Ô?À8à�‰ *Ò,Ü�h˜u V™}˜o¨^¸H¿O¹OÐ;LÈFÐSaÐRbÐbtÐuÔw}Ô~Ü.¨zÀÔF×F�ÚØ %§	¡	¨+°rÓ :�IØ&Ÿ]™]¨6°<Ó@�FØ%ŸM™M¨'°2Ó6�EÙ0;Ó"_±¨"À2Ç=Á=ÐTZÐS[Ð[\ÐQ]ÕC^¢2°�KÐ"_Ø×&Ñ&¨&¨°°5°'Ð':Ô;Ø$)¨.Ñ$9Ð#:¸>Ð:JÈ!ÈCÏHÉHÐU`ÓLaÐKbÐ!c�JØ/5¨h°a¸°wÐ,?�K Ñ)Ø&Ÿ{™{¨:¸{˜{×KÔKÈzØ%×,Ñ,°
Ñ:Ø,6¯O©OÓ,=×&=˜GØ+HÈ#Ð*N˜KØ-°×1CÑ1CÑCØ>H×>PÑ>PÐQ_Ñ>` ¨NÑ ;Ø/°:×3EÑ3EÑEØ@J×@RÑ@RÐScÑ@d Ð,<Ñ =Ø.°*×2DÑ2DÑDØ?I×?QÑ?QÐRaÑ?b ¨OÑ <Ü#&§<¡<°WÀZ×EVÑEVÐ`kÔ#l÷  L×KÐK÷ @×?Ñ?÷  L×Kð �‰ jÑ0Ü�l 8§?¡?Ð"3°?À>ÐBRÐSÔUXÔYÜ×(Ñ(°¸H¿O¹OÐ;LÐ.MÔNÐNà$ŸM™M›O×+ˆGØ8¸#Ð>ˆKØ ×!1Ñ!1Ñ1Ø.6×.>Ñ.>¸~Ñ.N�˜NÑ+Ø 8×#3Ñ#3Ñ3Ø08×0@Ñ0@ÐAQÑ0R�Ð,Ñ-Ø (×"2Ñ"2Ñ2Ø/7×/?Ñ/?ÀÑ/P�˜OÑ,ä—<‘< W°X·_±_ÈkÔZ÷M @×?Ñ?ðm 5ùð, 	.ùð< 'ùà?ùð Gûò
 #`ð  Lùà&=ùð  Lùð @ùð  Lù×K×KÒKúð  ,øð; @ø×?×?Ñ?ûôP ×Ñò ØÜò GÜÐ˜~Ð.¨b°°Ð4´cÔ:Ü×)Ñ)Ð/EÔFÐFûðGüsƒ  ‚DZÄW%ÄA:ZÆW(ÆB%ZÈ8ZÉBZË&W+Ë'ZË,X7 ÌW.ÌX7 ÌAX"ÍW1ÍAX"ÎW4Î*W4Î.AX"ÐW9ÐX"Ð"XÐ(W<Ð)B	XÒ2X"Ò>W?Ò?X"ÓX7 ÓXÓX7 ÓZÓX"Ó XÓ!A(X"Õ	XÕ
B	X"×X7 ×X × X7 ×$Z×(Z×+Z×.X7 ×1X"×4X"×<X×?X"ØX7 ØX"ØX	ØXØX	Ø	X"Ø X7 Ø"X4Ø(X+Ø)X4Ø0X7 Ø3ZØ4X7 Ø7ZÙ,Y?Ù?ZÚZc                  ó  — t         j                  j                  t        d«      } t         j                  j                  t        d«      }t         j                  j	                  | «      rt         j                  j	                  |«      sLt        dt        «       	 t        j                  dddddd	d
|d| ddddddgd¬«       t        dt        «       | |fS | |fS # t        $ r }t        d|› �t        «       Y d }~| |fS d }~ww xY w)Nzcert.pemzkey.pemzBGenerazione di un nuovo certificato SSL self-signed via OpenSSL...ÚopensslÚreqz-x509z-newkeyzrsa:2048z-nodesz-keyoutz-outz-daysÚ365z-subjz/CN=localhostz-addextz8subjectAltName=DNS:addictedbytheproject.nl,DNS:localhostT)Úcheckz&Certificato SSL generato con successo.z3Errore durante la generazione del certificato SSL: )r3   r4   rn   ro   r5   r   r¨   Ú
subprocessÚrunrÏ   rA   rL   )Ú	cert_pathÚkey_pathrY   s      r   Úgenerate_certrD  c  sî   € Ü—‘—‘œZ¨Ó4€IÜ�w‰w�|‰|œJ¨	Ó2€HÜ�7‰7�>‰>˜)Ô$¬B¯G©G¯N©N¸8Ô,DÜÐPÔRXÔYð	PÜ�N‰N˜I u¨g°yÀ*ÈhØ˜x¨°¸GÀUØ˜_ØÐYð[ð õ	 ô
 Ð8¼%Ô@ð �hÐÐˆ9�hÐÐøô ò 	PÜÐEÀaÀSÐIÌ3×OÐOØ�hÐÐûð	Pús   Â7C Ã	D Ã C;Ã;D c              ƒ   óx   K  — t         r.t         j                  st         j                  «       ƒ d {  –—†  y y y 7 Œ­w©N)rÞ   rì   Úclose©Úapps    r   Úcleanup_apprJ  s  s-   è ø€ åœL×/Ò/Ü× Ñ Ó"×"Ñ"ð 0€|Ø"ús   ‚.:°8±:c                óÎ   K  — t        j                  t        «       «      | d<   d ­–— | d   j                  «        	 | d   ƒ d {  –—†  y 7 Œ# t         j                  $ r Y y w xY w­w)NÚpoller)rJ   Úcreate_taskr  Úcancelr  rH  s    r   Ústart_background_tasksrO  x  sZ   è ø€ Ü×'Ñ'Ô(9Ó(;Ó<€Cˆ�MÜ	Øˆ�M×ÑÔðØ�(‰m×ÒùÜ×!Ñ!ò Ùðüs:   ‚9A%¼A ÁA
ÁA Á	A%Á
A ÁA"ÁA%Á!A"Á"A%c                  ój  — t        j                  «       } | j                  j                  t        «       | j
                  j                  dt        «       | j
                  j                  dt        «       | j
                  j                  dt        «       | j                  j                  t        «       | S )Nr#   z/playlist.m3uz/play/{id}/{filename:.*})r	   ÚApplicationÚcleanup_ctxr£   rO  ÚrouterÚadd_getr!  r:  Ú
on_cleanuprJ  rH  s    r   Úinit_apprV  �  su   € Ü
�/‰/Ó
€CØ‡O�O×ÑÔ1Ô2Ø‡J�J×Ñ�sœOÔ,Ø‡J�J×Ñ�¬Ô8Ø‡J�J×ÑÐ1´;Ô?Ø‡N�N×Ñœ+Ô&Ø€Jr   Ú__main__iË(  z*Avvio DAZN HTTPS Proxy Server sulla porta z...z)Contesto SSL inizializzato correttamente.zErrore inizializzazione SSL: z0.0.0.0)r  ÚportÚssl_contextr   z
Arresto Proxy Server...rF  )F)SÚ__doc__r3   Úsysr:   r   Úurllib.parserB   ÚsocketÚsslr@  rJ   rØ   r   Útypingr   r   r   r   r   rí   r	   ÚImportErrorr   ÚexitrÏ   r¨   rL   rÍ   ÚMAGENTAr   r§   r   r4   ÚdirnameÚabspathÚ__file__ro   Úinsertrn   r6   r`   r^   rA   rY   r=   r8   rZ   rc   ra   ri   rj   Ú__annotations__rt   rƒ   ÚdictrÈ   r  rÓ   ÚbytesrÝ   rÞ   rð   rñ   r  r  r!  r:  rD  rJ  rO  rV  Ú__name__rX  rB  rC  rY  r5   Úcreate_default_contextÚPurposeÚCLIENT_AUTHÚload_cert_chainÚrun_appÚKeyboardInterrupt© r   r   Ú<module>rr     sÍ  ðò
ó 
Û 
Û Û Û Û Û 
Û Û Û 	Ý ß 3Õ 3ðÛÝð €Ø
€Ø
€Ø
€Ø
€Ø
€à$ñ TˆSð T˜ð T¨ó Tð �W‰W�_‰_˜RŸW™WŸ_™_¨XÓ6Ó7€
Ø�S—X‘XÑØ‡H�H‡O�O�A�zÔ"à—‘—‘˜ZÐ)?Ó@€Ø—‘—‘˜ZÐ);Ó<€ð0Ûð €Ø€ò5ðn €Ø€òAð4 <>Ð �4˜˜U 3¨¨S°#¨X©Ð#6Ñ7Ð7Ñ8Ó =ð˜˜S™	ó ñ˜cð ¨Sð ¸hÀtÈCÐQTÈHÁ~Ñ>Vð ÐbgÐhpÐqtÑhuÐw{Ð|ð  BEð  }Eñ  xFð  iFñ  cGó ð"n #ð n°Sð nÀtð nÐPTó nñ`¨#ð °dð Àtó ð8$ ð $¨ó $ð: 15€ˆh�w×,Ñ,Ñ-Ó 4ð × 5Ñ 5ó ðC¨Sð C°Tó CòL##òLoò2xGòvò #ò
òð ˆzÒØ€DÙÐ
4°T°F¸#Ð>ÀÔEñ Ôá'›/Ñ€IˆxØ€KØ	‡w�w‡~�~�iÔ  R§W¡W§^¡^°HÔ%=ð	Ø4˜#×4Ñ4°S·[±[×5LÑ5LÓMˆKØ×'Ñ'¨	°8Ô<ÙÐ;¸UÔCð
Øˆ�‰‘H“J Y°TÀ{ÐZ^Ö_ð' øð[ ò Ù	Ð
JÐRVÕWØ€C‡H�HˆQ‡Kðûð2 ò 0Ø€DÙÐ
" 1 #Ð&¨×/Ò/ûð0ûðD ò 	ÙÐ/°¨sÐ3°SÔ9Ø�Kûð	ûð ò ÙÐ'¨Ô0Øˆ�‰�ŽðúsU   Á
I+ Ã:J ÈAJ4 ÉK É+!JÊJÊJ1ÊJ,Ê,J1Ê4KÊ9KËKË K7Ë6K7