
    V|hSr                        S SK r S SKrSSKJr  SSKJr  SSKJrJrJ	r	J
r
JrJr   " S S\5      rStS	 jr " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      r " S$ S%\5      r " S& S'\5      r " S( S)\5      r " S* S+\5      r " S, S-\5      r  " S. S/\ 5      r! " S0 S1\ 5      r" " S2 S3\ 5      r# " S4 S5\5      r$ " S6 S7\$5      r% " S8 S9\$5      r& " S: S;\$5      r' " S< S=\5      r( " S> S?\(5      r) " S@ SA\(5      r* " SB SC\(5      r+ " SD SE\5      r, " SF SG\,5      r- " SH SI\,5      r. " SJ SK\,5      r/ " SL SM\5      r0 " SN SO\05      r1 " SP SQ\05      r2 " SR SS\05      r3 " ST SU\5      r4 " SV SW\45      r5 " SX SY\45      r6 " SZ S[\45      r7 " S\ S]\5      r8 " S^ S_\85      r9 " S` Sa\85      r: " Sb Sc\85      r; " Sd Se\5      r< " Sf Sg\<5      r= " Sh Si\<5      r> " Sj Sk\<5      r? " Sl Sm\5      r@ " Sn So\@5      rA " Sp Sq\@5      rB " Sr Ss\@5      rCg)u    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_nonejoin_nonemptytry_geturl_or_noneurlencode_postdatac                   t    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSS jrSS jrS rS rS rS rSrg)ZattooPlatformBaseIE   Nc                 ^    S[        U S5      (       a  U R                  -  $ U R                  -  $ )Nz
https://%s	_API_HOST)hasattrr   _HOSTselfs    Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/zattoo.py	_host_urlZattooPlatformBaseIE._host_url   s,    {1K1Kt~~\\QUQ[Q[\\    c                 H    U R                   (       d  U R                  SSS9  g g )Nz)An account is needed to access this mediapassword)method)_power_guide_hashraise_login_requiredr   s    r   _real_initialize%ZattooPlatformBaseIE._real_initialize   s%    %%%%&QZd%e &r   c                 V    U R                  U R                  5        S3S S[        UUSS.5      U R                  5        S3SS.S9nUS   S   U l        g ! [         aI  n[	        UR
                  [        5      (       a$  UR
                  R                  S	:X  a
  [        S
SS9ee S nAff = f)Nz/zapi/v2/account/loginz
Logging intrue)loginr   rememberz/loginz0application/x-www-form-urlencoded; charset=UTF-8)RefererzContent-Type)dataheadersi  z3Unable to login: incorrect username and/or passwordT)expectedsessionpower_guide_hash)	_download_jsonr   r   r   
isinstancecauser   statusr   )r   usernamer   r&   es        r   _perform_login#ZattooPlatformBaseIE._perform_login   s    	&&>>#$$:;T<'% ( &) 
 #'.."2!36:$V ' 	D" "&i1C!D  	!''9--!''..C2G$I!# # 	s   AA 
B(AB##B(c                     U R                  U R                  5        S3S S5      S   nU R                  U R                  5        S3S S[        [	        [
        R                  " 5       5      SSSUS	.5      S
9  g )Nz/token.jsonzDownloading session tokensession_tokenz/zapi/v3/session/hellozOpening sessionenz1.8.2json)uuidlangapp_versionformatclient_app_token)r&   )r+   r   _request_webpager   strr7   uuid4)r   r4   s     r   _initialize_pre_login*ZattooPlatformBaseIE._initialize_pre_login/   s    ++~~ ,d4OQQ`b 	~~  67$6DJJL)& $18 % 	 	r   c                    ^ U R                  U R                  5        S3TS5      n [        U4S jUS    5       5      $ ! [        [        4 a    [        S5      ef = f)Nz/zapi/v2/playlistzDownloading playlistc              3      >#    U  HK  nUR                  S 5      (       d  M  [        UR                  S5      5      T:X  d  M;  [        US    5      v   MM     g7f)
program_ididN)getr=   ).0itemrecids     r   	<genexpr>HZattooPlatformBaseIE._extract_video_id_from_recording.<locals>.<genexpr>B   sN      L4JD88L) (.1$((4..AU.J (D&''4Js   AAA
recordingsz)Could not extract video id from recording)r+   r   nextStopIterationKeyErrorr   )r   rH   playlists    ` r    _extract_video_id_from_recording5ZattooPlatformBaseIE._extract_video_id_from_recording>   sy    &&~~  12E;QS	N L4<\4JL L L x( 	N !LMM	Ns	   ? Ac                   ^ U R                  U R                  5        SU R                   3USSS0S9S   n/ nU H  nUR                  US   5        M      [	        U4S jU 5       5      $ ! [
         a    [        S	5      ef = f)
Nz/zapi/v2/cached/channels/zDownloading channel listdetailsFquerychannel_groupschannelsc              3      >#    U  HN  nUR                  S 5      (       d  M  UR                  S5      T:X  d  UR                  S 5      T:X  d  MG  US    v   MP     g7f)ciddisplay_aliasN)rE   )rF   chanchannel_names     r   rI   4ZattooPlatformBaseIE._extract_cid.<locals>.<genexpr>Q   sN      9(488E? HH_-=xx,6 Us   A(AAzCould not extract channel id)r+   r   r   extendrL   rM   r   )r   video_idr\   rV   channel_listchgrps     `   r   _extract_cid!ZattooPlatformBaseIE._extract_cidH   s    ,,~~  9$:P:P9QR0e$ - & '78 #Ej 12 $	A 9(49 9 9
  	A !?@@	As   A+ +Bc                     U R                  U R                  5        SU R                   3USUSS.S9nUS   S   nUS   nUUR                  S	5      =(       d    US
   UR                  S5      UR                  S5      UR                  S5      UR                  S
5      [	        UR                  S5      5      [	        UR                  S5      5      [	        UR                  S5      5      [        US [        5      [        US [        5      S.nXE4$ )Nz&/zapi/v2/cached/program/power_details/zDownloading video informationT)program_idscompleterT   programsr   rY   tetdi_urlr\   e_nos_noyearc                     U S   $ )Nc xs    r   <lambda>BZattooPlatformBaseIE._extract_cid_and_video_info.<locals>.<lambda>p   s    qvr   c                     U S   $ )Ngrq   rr   s    r   rt   ru   q   s    3r   )rD   titledescription	thumbnailcreatorepisodeepisode_numberseason_numberrelease_year
categoriestags)r+   r   r   rE   r   r
   list)r   r_   r&   prY   	info_dicts         r   _extract_cid_and_video_info0ZattooPlatformBaseIE._extract_cid_and_video_infoY   s   ""~~  FtG]G]F^_+' 	 #  Qh UU3Z*1T755:wuu^,uuT{)!%%-8(v7'f6!!%5t<A/6
	 ~r   c                    U R                  U R                  5        SU 3US5      nUUR                  S5      UR                  S5      [        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      [	        US	 [
        5      S
.nUS   S   S   S   S   US   U4$ )z8
@returns    (ondemand_token, ondemand_type, info_dict)
z/zapi/vod/movies/z Downloading ondemand informationrx   ry   durationrn   r}   r~   c                     U S   $ )Nr   rq   rr   s    r   rt   =ZattooPlatformBaseIE._extract_ondemand_info.<locals>.<lambda>   s    !L/r   )rD   rx   ry   r   r   r}   r~   r   terms_catalogr   termstokentype)r+   r   rE   r   r
   r   )r   ondemand_idr&   r   s       r   _extract_ondemand_info+ZattooPlatformBaseIE._extract_ondemand_infov   s     ""~~  1+?;= XXg&88M2#DHHZ$89'(89)$((3C*DE(/)BC!$(A4H	
	 O$Q'03G<d6lIUUr   c                    SS0nU(       a)  UR                  SS05        U R                  5        SU 3n	OeU(       a  U R                  5        SU 3n	OHU(       a)  UR                  UUUS.5        U R                  5        S3n	OU R                  5        S	U S
U 3n	/ n
0 nS GH  nUR                  5       nXS'   U R                  XSUR	                  5        S3[        U5      SS9nU(       d  MN  [        US [        5      nU(       d  Mi  U GHB  n[        U[        5      (       d  M  [        UR                  S5      5      nU(       d  M>  UR                  S5      nUS:X  a  SOS n[        UUR                  S5      U5      nUR                  S5      (       a&  U R                  UUUSS9u  nnU R                  UUS9  OrUR                  S5      (       a(  U R!                  UUSSUSS9u  nnU R                  UUS9  O4US:X  a  U R#                  UUUSS9nOUS :X  a  U R%                  UUUSS!9nO eU H  nUUS"'   M
     U
R'                  U5        GME     GM     X4$ )#Nhttps_watch_urlsT	timeshifti0*  z/zapi/watch/live/z/zapi/watch/recording/)teasable_id
term_tokenteasable_typez/zapi/watch/vod/videoz/zapi/v3/watch/replay//)dashhls7stream_typezDownloading z formatsF)r&   fatalc                     U S   S   $ )Nstream
watch_urlsrq   rr   s    r   rt   7ZattooPlatformBaseIE._extract_formats.<locals>.<lambda>   s    (L 9r   urlaudio_channelAr   maxrater   )mpd_idr   )targethlsmp4m3u8_native)entry_protocolm3u8_idr   hds)f4m_idr   smooth_playready)ism_idr   quality)updater   copyr+   upperr   r
   r   r,   dictr   rE   r	   
startswith"_extract_mpd_formats_and_subtitles_merge_subtitles#_extract_m3u8_formats_and_subtitles_extract_f4m_formats_extract_ism_formatsr^   )r   rY   r_   	record_idr   ondemand_termtokenondemand_typeis_livepostdata_commonr   formats	subtitlesr   postdatar&   r   watch	watch_urlr   
preference	format_idthis_formatssubsthis_formats                           r   _extract_formats%ZattooPlatformBaseIE._extract_formats   s   
 ""K#78^^%&&7u=C^^%&&<YKHC""*0!.$ 
 ^^%&&;<C^^%&&<SE8*MC	+K&++-H&1]#&&k.?.?.A-B(K'1 ' @D  94AJ#!%..'		%(89	  %		/ :"/3"6QD
)+uyy7K][	))&11)-)P)P!8IU *Q *L&L$))$y)A ++E22)-)Q)Q!8U'4i# *R *%&L$ ))$y)A E)#'#<#<!8IU $= $LL $66#'#<#<!8IU $= $LL !5#/K-7K	* $0|,; $ ,Z !!r   c                 ^    U R                  U5      u  p4U R                  X1US9u  US'   US'   U$ N)r   r   r   )r   r   )r   r_   r   rY   r   s        r   _extract_video#ZattooPlatformBaseIE._extract_video   s?    99(C7;7L7LSfo7L7p4	)i4r   c                 X    U R                  X5      nU R                  X"SS9u  p4UUSUUS.$ )NT)r   )rD   rx   r   r   r   )rb   r   )r   r\   rY   r   r   s        r   _extract_live"ZattooPlatformBaseIE._extract_live   sC    ;!223T2J!"
 	
r   c                     U R                  U5      nU R                  U5      u  p4U R                  X2US9u  US'   US'   U$ r   )rP   r   r   )r   r   r_   rY   r   s        r   _extract_record$ZattooPlatformBaseIE._extract_record   sO    88C99(C7;7L7LSfo7L7p4	)i4r   c                 b    U R                  U5      u  p#nU R                  S XX#S9u  US'   US'   U$ )N)r   r   r   r   r   )r   r   )r   r   r   r   r   s        r   _extract_ondemand&ZattooPlatformBaseIE._extract_ondemand   sO    7;7R7RS^7_497;7L7L+1 8M 8P4	)i4 r   c                     U R                  U5      R                  5       u  p#[        U SU R                   35      " U=(       d    U5      $ )N	_extract_)_match_valid_urlgroupsgetattr_TYPE)r   r   r_   r   s       r   _real_extract"ZattooPlatformBaseIE._real_extract   s@    "33C8??Aty56x7L9MMr   )r   )NNNNFN)__name__
__module____qualname____firstlineno__r   r   r   r1   r?   rP   rb   r   r   r   r   r   r   r   r   __static_attributes__rq   r   r   r   r      sW    ]fE*NA":V&B"H
	
Nr   r   c           	      l    U(       a	  SU SU S3OSnS[         R                  " U 5       SU SU SU S	3	$ )
N|z
/(?P<vid1>)z
(?P<vid1>)z(?x)https?://(?:www\.)?z /(?:
        [^?#]+\?(?:[^#]+&)?z
=(?P<vid2>z
)
        z
    ))reescape)hostmatchqsbase_re
match_bases        r   _create_valid_urlr      sS    5<AgYjq1,J'		$'8 94z% 1		 	 	r   c                       \ rS rSrSrSrSrg)ZattooBaseIE   zattoo
zattoo.comrq   Nr   r   r   r   _NETRC_MACHINEr   r   rq   r   r   r   r          NEr   r   c                   z    \ rS rSr\" \R                  SSS5      rSrSSSS	S
SSSSSSS.
SS0S.SSS.SSS./r	Sr
g)ZattooIE   \d+program(?:program|watch)/[^/]+videoz(https://zattoo.com/program/zdf/250170418	250170418r   zMarkus Lanzz$md5:e41cb1257de008ca62a73bb876ffa7fcz5re:http://images.zattic.com/cms/.+/format_480x360.jpgzZDF HDi  z
Folge 1655zcount:1zcount:2)
rD   extrx   ry   rz   r{   r   r|   r   r   skip_downloadm3u8)r   r   paramsz-https://zattoo.com/program/daserste/210177916Tr   only_matchingz>https://zattoo.com/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r   r   
_VALID_URLr   _TESTSr   rq   r   r   r   r      su    "<#5#5vyJcdJE9"AP ##
 #F+  ? P%Fr   r   c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )ZattooLiveIEi  [^/?&#]+channellivez3https://zattoo.com/channels/german?channel=srf_zweiTr  zhttps://zattoo.com/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ NF)r   suitablesuperclsr   	__class__s     r   r  ZattooLiveIE.suitable"  (     ))#..uIEG4DS4IIr   rq   )r   r   r   r   r   r   r   r	  r   r
  classmethodr  r   __classcell__r  s   @r   r  r    S    "<#5#5{IvVJED .F J Jr   r  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)ZattooMoviesIEi'  z\w+movie_idz
vod/moviesondemandz"https://zattoo.com/vod/movies/7521Tr  zIhttps://zattoo.com/ondemand?movie_id=7521&term_token=9f00f43183269484edderq   Nr  rq   r   r   r  r  '  s=    "<#5#5vz<XJE3 [Fr   r  c                   @    \ rS rSr\" SSS5      rSrSSS.S	SS./rS
rg)ZattooRecordingsIEi3  r   r   	recordingrecordz1https://zattoo.com/recordings?recording=193615508Tr  zGhttps://zattoo.com/tc/ptc_recordings_all_recordings?recording=193615420rq   N)	r   r   r   r   r   r	  r   r
  r   rq   r   r   r"  r"  3  s5    "<EJEB YFr   r"  c                   &    \ rS rSrSrSrS\ 3rSrg)NetPlusTVBaseIEi?  netplusz
netplus.tvwww.rq   Nr   r   r   r   r   r   r   r   rq   r   r   r&  r&  ?  s    NEugIr   r&  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)NetPlusTVIEiE  r   r   r   r   z-https://netplus.tv/program/daserste/210177916Tr  z>https://netplus.tv/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r&  r   r	  r   r
  r   rq   r   r   r+  r+  E  s>    "?#8#8&)MfgJE> PFr   r+  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )NetPlusTVLiveIEiQ  r  r  r  z3https://netplus.tv/channels/german?channel=srf_zweiTr  zhttps://netplus.tv/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r+  r  r  r  s     r   r  NetPlusTVLiveIE.suitable\  (    #,,S11uLuw7G7LLr   rq   )r   r   r   r   r   r&  r   r	  r   r
  r  r  r   r  r  s   @r   r.  r.  Q  sT    "?#8#8+yRXYJED .F M Mr   r.  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)NetPlusTVRecordingsIEia  r   r#  r$  z1https://netplus.tv/recordings?recording=193615508Tr  zGhttps://netplus.tv/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr,  rq   r   r   r3  r3  a  s;    "?#8#8&+NJEB YFr   r3  c                       \ rS rSrSrSrSrg)MNetTVBaseIEim  mnettvztvplus.m-net.derq   Nr   rq   r   r   r5  r5  m  s    NEr   r5  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)MNetTVIEir  r   r   r   r   z2https://tvplus.m-net.de/program/daserste/210177916Tr  zChttps://tvplus.m-net.de/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r5  r   r	  r   r
  r   rq   r   r   r8  r8  r  s>    "<#5#5vyJcdJEC UFr   r8  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )MNetTVLiveIEi~  r  r  r  z8https://tvplus.m-net.de/channels/german?channel=srf_zweiTr  z!https://tvplus.m-net.de/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r8  r  r  r  s     r   r  MNetTVLiveIE.suitable  r  r   rq   )r   r   r   r   r   r5  r   r	  r   r
  r  r  r   r  r  s   @r   r;  r;  ~  sS    "<#5#5{IvVJEI 3F J Jr   r;  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)MNetTVRecordingsIEi  r   r#  r$  z6https://tvplus.m-net.de/recordings?recording=193615508Tr  zLhttps://tvplus.m-net.de/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr9  rq   r   r   r?  r?    s;    "<#5#5v{KJEG ^Fr   r?  c                       \ rS rSrSrSrSrg)WalyTVBaseIEi  walytvzplayer.waly.tvrq   Nr   rq   r   r   rA  rA    s    NEr   rA  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)WalyTVIEi  r   r   r   r   z1https://player.waly.tv/program/daserste/210177916Tr  zBhttps://player.waly.tv/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   rA  r   r	  r   r
  r   rq   r   r   rD  rD    s>    "<#5#5vyJcdJEB TFr   rD  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )WalyTVLiveIEi  r  r  r  z7https://player.waly.tv/channels/german?channel=srf_zweiTr  z https://player.waly.tv/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )rD  r  r  r  s     r   r  WalyTVLiveIE.suitable  r  r   rq   )r   r   r   r   r   rA  r   r	  r   r
  r  r  r   r  r  s   @r   rG  rG    sS    "<#5#5{IvVJEH 2F J Jr   rG  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)WalyTVRecordingsIEi  r   r#  r$  z5https://player.waly.tv/recordings?recording=193615508Tr  zKhttps://player.waly.tv/tc/ptc_recordings_all_recordings?recording=193615420rq   NrE  rq   r   r   rK  rK    s;    "<#5#5v{KJEF ]Fr   rK  c                   &    \ rS rSrSrSrS\ 3rSrg)BBVTVBaseIEi  bbvtvz
bbv-tv.netr(  rq   Nr)  rq   r   r   rM  rM    s    NEugIr   rM  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)BBVTVIEi  r   r   r   r   z-https://bbv-tv.net/program/daserste/210177916Tr  z>https://bbv-tv.net/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   rM  r   r	  r   r
  r   rq   r   r   rP  rP    s>    ";#4#4fiIbcJE> PFr   rP  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )BBVTVLiveIEi  r  r  r  z3https://bbv-tv.net/channels/german?channel=srf_zweiTr  zhttps://bbv-tv.net/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )rP  r  r  r  s     r   r  BBVTVLiveIE.suitable  (    ((--uH573CC3HHr   rq   )r   r   r   r   r   rM  r   r	  r   r
  r  r  r   r  r  s   @r   rS  rS    sS    ";#4#4k9fUJED .F I Ir   rS  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)BBVTVRecordingsIEi  r   r#  r$  z1https://bbv-tv.net/recordings?recording=193615508Tr  zGhttps://bbv-tv.net/tc/ptc_recordings_all_recordings?recording=193615420rq   NrQ  rq   r   r   rX  rX    s;    ";#4#4fkJJEB YFr   rX  c                   &    \ rS rSrSrSrS\ 3rSrg)VTXTVBaseIEi  vtxtvzvtxtv.chr(  rq   Nr)  rq   r   r   rZ  rZ        NEugIr   rZ  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)VTXTVIEi  r   r   r   r   z+https://vtxtv.ch/program/daserste/210177916Tr  z<https://vtxtv.ch/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   rZ  r   r	  r   r
  r   rq   r   r   r^  r^    >    ";#4#4fiIbcJE< NFr   r^  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )VTXTVLiveIEi  r  r  r  z1https://vtxtv.ch/channels/german?channel=srf_zweiTr  zhttps://vtxtv.ch/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r^  r  r  r  s     r   r  VTXTVLiveIE.suitable  rV  r   rq   )r   r   r   r   r   rZ  r   r	  r   r
  r  r  r   r  r  s   @r   rb  rb    S    ";#4#4k9fUJEB ,F I Ir   rb  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)VTXTVRecordingsIEi  r   r#  r$  z/https://vtxtv.ch/recordings?recording=193615508Tr  zEhttps://vtxtv.ch/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr_  rq   r   r   rg  rg    ;    ";#4#4fkJJE@ WFr   rg  c                       \ rS rSrSrSrSrg)GlattvisionTVBaseIEi#  glattvisiontvziptv.glattvision.chrq   Nr   rq   r   r   rj  rj  #  s    $N!Er   rj  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)GlattvisionTVIEi(  r   r   r   r   z6https://iptv.glattvision.ch/program/daserste/210177916Tr  zGhttps://iptv.glattvision.ch/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   rj  r   r	  r   r
  r   rq   r   r   rm  rm  (  s?    "#6#<#<fiQjkJEG YFr   rm  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )GlattvisionTVLiveIEi4  r  r  r  z<https://iptv.glattvision.ch/channels/german?channel=srf_zweiTr  z%https://iptv.glattvision.ch/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )rm  r  r  r  s     r   r  GlattvisionTVLiveIE.suitable?  (    '0055uP57;KC;PPr   rq   )r   r   r   r   r   rj  r   r	  r   r
  r  r  r   r  r  s   @r   rp  rp  4  sU    "#6#<#<k9V\]JEM 7F Q Qr   rp  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)GlattvisionTVRecordingsIEiD  r   r#  r$  z:https://iptv.glattvision.ch/recordings?recording=193615508Tr  zPhttps://iptv.glattvision.ch/tc/ptc_recordings_all_recordings?recording=193615420rq   Nrn  rq   r   r   ru  ru  D  s<    "#6#<#<fkRJEK bFr   ru  c                   &    \ rS rSrSrSrS\ 3rSrg)SAKTVBaseIEiP  saktvzsaktv.chr(  rq   Nr)  rq   r   r   rw  rw  P  r\  r   rw  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)SAKTVIEiV  r   r   r   r   z+https://saktv.ch/program/daserste/210177916Tr  z<https://saktv.ch/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   rw  r   r	  r   r
  r   rq   r   r   rz  rz  V  r`  r   rz  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )SAKTVLiveIEib  r  r  r  z1https://saktv.ch/channels/german?channel=srf_zweiTr  zhttps://saktv.ch/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )rz  r  r  r  s     r   r  SAKTVLiveIE.suitablem  rV  r   rq   )r   r   r   r   r   rw  r   r	  r   r
  r  r  r   r  r  s   @r   r}  r}  b  re  r   r}  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)SAKTVRecordingsIEir  r   r#  r$  z/https://saktv.ch/recordings?recording=193615508Tr  zEhttps://saktv.ch/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr{  rq   r   r   r  r  r  rh  r   r  c                       \ rS rSrSrSrSrg)EWETVBaseIEi~  ewetvztvonline.ewe.derq   Nr   rq   r   r   r  r  ~  s    NEr   r  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)EWETVIEi  r   r   r   r   z2https://tvonline.ewe.de/program/daserste/210177916Tr  zChttps://tvonline.ewe.de/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r  r   r	  r   r
  r   rq   r   r   r  r    s>    ";#4#4fiIbcJEC UFr   r  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )EWETVLiveIEi  r  r  r  z8https://tvonline.ewe.de/channels/german?channel=srf_zweiTr  z!https://tvonline.ewe.de/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r  r  r  r  s     r   r  EWETVLiveIE.suitable  rV  r   rq   )r   r   r   r   r   r  r   r	  r   r
  r  r  r   r  r  s   @r   r  r    sS    ";#4#4k9fUJEI 3F I Ir   r  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)EWETVRecordingsIEi  r   r#  r$  z6https://tvonline.ewe.de/recordings?recording=193615508Tr  zLhttps://tvonline.ewe.de/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr  rq   r   r   r  r    s;    ";#4#4fkJJEG ^Fr   r  c                   &    \ rS rSrSrSrS\ 3rSrg)QuantumTVBaseIEi  	quantumtvzquantum-tv.comr(  rq   Nr)  rq   r   r   r  r    s     NEugIr   r  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)QuantumTVIEi  r   r   r   r   z1https://quantum-tv.com/program/daserste/210177916Tr  zBhttps://quantum-tv.com/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r  r   r	  r   r
  r   rq   r   r   r  r    s>    "?#8#8&)MfgJEB TFr   r  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )QuantumTVLiveIEi  r  r  r  z7https://quantum-tv.com/channels/german?channel=srf_zweiTr  z https://quantum-tv.com/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r  r  r  r  s     r   r  QuantumTVLiveIE.suitable  r1  r   rq   )r   r   r   r   r   r  r   r	  r   r
  r  r  r   r  r  s   @r   r  r    sT    "?#8#8+yRXYJEH 2F M Mr   r  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)QuantumTVRecordingsIEi  r   r#  r$  z5https://quantum-tv.com/recordings?recording=193615508Tr  zKhttps://quantum-tv.com/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr  rq   r   r   r  r    s;    "?#8#8&+NJEF ]Fr   r  c                       \ rS rSrSrSrSrg)OsnatelTVBaseIEi  	osnateltvztvonline.osnatel.derq   Nr   rq   r   r   r  r    s     N!Er   r  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)OsnatelTVIEi  r   r   r   r   z6https://tvonline.osnatel.de/program/daserste/210177916Tr  zGhttps://tvonline.osnatel.de/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r  r   r	  r   r
  r   rq   r   r   r  r    s>    "?#8#8&)MfgJEG YFr   r  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )OsnatelTVLiveIEi  r  r  r  z<https://tvonline.osnatel.de/channels/german?channel=srf_zweiTr  z%https://tvonline.osnatel.de/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r  r  r  r  s     r   r  OsnatelTVLiveIE.suitable  r1  r   rq   )r   r   r   r   r   r  r   r	  r   r
  r  r  r   r  r  s   @r   r  r    sT    "?#8#8+yRXYJEM 7F M Mr   r  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)OsnatelTVRecordingsIEi  r   r#  r$  z:https://tvonline.osnatel.de/recordings?recording=193615508Tr  zPhttps://tvonline.osnatel.de/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr  rq   r   r   r  r    s;    "?#8#8&+NJEK bFr   r  c                   &    \ rS rSrSrSrS\ 3rSrg)EinsUndEinsTVBaseIEi  1und1tvz1und1.tvr(  rq   Nr)  rq   r   r   r  r    s    NEugIr   r  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)EinsUndEinsTVIEi  r   r   r   r   z+https://1und1.tv/program/daserste/210177916Tr  z<https://1und1.tv/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r  r   r	  r   r
  r   rq   r   r   r  r    s?    "#6#<#<fiQjkJE< NFr   r  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )EinsUndEinsTVLiveIEi  r  r  r  z1https://1und1.tv/channels/german?channel=srf_zweiTr  zhttps://1und1.tv/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r  r  r  r  s     r   r  EinsUndEinsTVLiveIE.suitable#  rs  r   rq   )r   r   r   r   r   r  r   r	  r   r
  r  r  r   r  r  s   @r   r  r    sU    "#6#<#<k9V\]JEB ,F Q Qr   r  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)EinsUndEinsTVRecordingsIEi(  r   r#  r$  z/https://1und1.tv/recordings?recording=193615508Tr  zEhttps://1und1.tv/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr  rq   r   r   r  r  (  s<    "#6#<#<fkRJE@ WFr   r  c                       \ rS rSrSrSrSrg)SaltTVBaseIEi4  salttvz
tv.salt.chrq   Nr   rq   r   r   r  r  4  r   r   r  c                   V    \ rS rSr\" \R                  SSS5      rSrSSS.S	SS./r	S
r
g)SaltTVIEi9  r   r   r   r   z-https://tv.salt.ch/program/daserste/210177916Tr  z>https://tv.salt.ch/guide/german?channel=srf1&program=169860555rq   Nr   r   r   r   r   r  r   r	  r   r
  r   rq   r   r   r  r  9  s>    "<#5#5vyJcdJE> PFr   r  c                   t   ^  \ rS rSr\" \R                  SSS5      rSrSSS.SSS./r	\
U 4S	 j5       rS
rU =r$ )SaltTVLiveIEiE  r  r  r  z3https://tv.salt.ch/channels/german?channel=srf_zweiTr  zhttps://tv.salt.ch/live/srf1c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ r  )r  r  r  r  s     r   r  SaltTVLiveIE.suitableP  r  r   rq   )r   r   r   r   r   r  r   r	  r   r
  r  r  r   r  r  s   @r   r  r  E  r  r   r  c                   T    \ rS rSr\" \R                  SS5      rSrSSS.SSS./r	S	r
g
)SaltTVRecordingsIEiU  r   r#  r$  z1https://tv.salt.ch/recordings?recording=193615508Tr  zGhttps://tv.salt.ch/tc/ptc_recordings_all_recordings?recording=193615420rq   Nr  rq   r   r   r  r  U  s;    "<#5#5v{KJEB YFr   r  r   )Dr   r7   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   r   r   r   r  r  r"  r&  r+  r.  r3  r5  r8  r;  r?  rA  rD  rG  rK  rM  rP  rS  rX  rZ  r^  rb  rg  rj  rm  rp  ru  rw  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rq   r   r   <module>r     s   	  ! - \N= \N~	' 
| 6J< J 	\ 		 	* 	/ 	Mo M 	O 	' 
	| 	J< J 	 	' 
	| 	J< J 	 	& 	k 	I+ I 	 	& 	k 	I+ I 	 	". "
	) 	Q- Q 	 3 	& 	k 	I+ I 	 	& 
	k 	I+ I 	 	* 	/ 	Mo M 	O 	"* "
	/ 	Mo M 	O 	. 	) 	Q- Q 	 3 	' 
	| 	J< J 	 	r   