
    i_U                       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Zd dlZd dlZddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z& d	d
l'm(Z( d	dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d	dlOmPZPmQZQmRZR dZSdZTdZUdZVdZWdZXdZYdZZ G d de      Z[y)    N   )	INNERTUBE_CLIENTS	BadgeTypeGvsPoTokenPolicyPlayerPoTokenPolicyStreamingProtocolYoutubeBaseInfoExtractor_PoTokenContext_split_innertube_clientshort_client_name)_EJS_WIKI_URL)initialize_jsc_director)JsChallengeRequestJsChallengeTypeNChallengeInputSigChallengeInput)initialize_pot_director)PoTokenContextPoTokenRequest   )	HTTPError)%
NO_DEFAULTExtractorErrorLazyListbug_reports_message
clean_htmldatetime_from_strfilesize_from_tbrfloat_or_noneformat_field	get_firstint_or_nonejoin_nonemptymimetype2ext
orderedSetparse_codecsparse_countparse_durationparse_iso8601parse_qs	qualities
remove_endremove_startsmuggle_urlstr_or_none
str_to_intstrftime_or_nonetraverse_objtry_calltry_getunescapeHTMLunified_strdateunsmuggle_url
update_urlupdate_url_queryurl_or_noneurljoinvariadic)clean_headersclean_proxiesselect_proxy__yt_dlp_client__yt_dlp_fetch_subs_po_token__yt_dlp_fetch_gvs_po_token__yt_dlp_player_token_provided__yt_dlp_innertube_context__yt_dlp_is_premium_subscriber__yt_dlp_available_at_timestampz4https://github.com/yt-dlp/yt-dlp/wiki/PO-Token-Guidec                   %   e Zd ZdZdj	                  dj                  ej                              ZddgZ	dZ
dZd	Zd
ZdZdZdZdZdZdZg di ddddddddddddgddd ed!d"d#d$d%ed&d'd(d)d*d+d,d-d.ed/d0d1d2d3d4d5d6dd7d8ed9
d:d;d<d=d>dd?d@dAdBdCdDdEdFdGi ddddddddddddgddd ed!d"d#d$d%ed&d'd(d)d,d-d.ed/d0dHd1d3d4d5d6dd7d8edId:dEdJdKi ddLddMddNddddddgddOd ed!dPd#dQd%ed&dRd(dSd.ed/d0dTddHd1dUd4dVd6dOdWdXedIdYd1d1dZd[d\d]i dd^ddMdd_dddddd`gddad ed!dbdcd1d#ddd%ed&ded(dfd,d-d.ed/d0dd1dgd4dhdidadjdkedl
dmd1d1dZdndodpi ddqddddrdd@ddsddtgddud ed!dvdcd1d#dwd%ed&dxd(dyd,d-d.ed/d0dd1dzd4d{d|dud}d~edl
dd1idd\ddi ddddddddddddgddd ed!ddcd1d#dd%ed&dd(dd,d-d.ed/d0dd1dd4dddddedl
dd1idddi dddddddd@ddsddgddd ed!dd#dd%ed&dd(dd.ed/d0dTddHd1dd4dddddedIddEddi dddddddddddd`gddd ed!dd#dd&dd(dd.ed/d0dTddHdddd4dddddeddddd1ddi dddddddddddd`gddd ed!ddcd1d#dd%ed&dd(dd,d-d.ed/d0dd1dd4dddddedl
dgdd1iddi ddddddddddddgddÓd ed!dēdcd1d#dœd&dƓd(dǓd.ed/dȓdTdɓdHd1dddd4dddddedќ
dd1idndi ddӓddddԓddddՓddgddדd ed!dؓd#dٓd%ed&dړd(dۓd.ed/d0dTddHd1ddd4ddddded	dd1idndd1ddi ddddddddddddgddd ed!dd#dd&dd(dd.ed/d0dTddHd1ddd4dddddeddd1idndi ddddddddddՓddgddd ed!dd#dd%ed&dd(dd.ed/dȓdTdɓdHd1dddd4ddddd edќ
dd1d1dZdndd1ddd1ddd1ddd1ddi dddddddddddd	gdd
d ed!dd#dd%ed&dd(dd.ed/d0dTddHd1dd4ddd
ddedIdd1idndd1dddddddddd;dd1ddi dddddddddddd gdd!d ed!d"d#d#d$d%d&d&d(d'd(d)d.ed/d0dTdd1d*d4d+d,d!d-d.ed/	dd1idnd0i dd1dddd2dddddd3gdd4d ed!d5dcd1d#d6d$dd%ed&d7d(d8d,d-d(d)ed0dd1dd4d9d:d4d;d<ed=dd1idnd>d1dd?d1dd@dAddBdCdDdEdFdGd;dHi ddIddddJddddddgddKd ed!dLdcd1d#dMd%ed&dNd(dOd,d-d.ed/d0dd1dd4dPdQdKdRdSedl
dTgdd1iddUdVddWdXdYdZd[d\d;d]d1dd^d1dd_d1dd`d1ddad1ddbd1ddcd1dddi ddeddddfdddgdhdidfdjdkgdddd`gddkd ed!dldcd1d#dmd%edndkgd&dodpd-ed0dd1dqdd4drdfdsdkedtdd1idndud1ddvdwddxdydzd{d|d}d~d:d;di ddddddddddddgddd ed!dd#dd&dRd(dd.ed/d0dTddHd1dg d4dddddeddd1idndi dddddddddddd gddd ed!ddcd1d#dd$d%d%ed&dd(dd,d-d.ed0dd1dd4dddddeddd1idndd1ddd1ddi dddddddddgddiddjdgdddd`gddd ed!ddcd1d#dd%edndgd&ddd-ed0dd1ddd*d4ddddeddd1idndd1ddi dddddddd@ddsdd3gddd ed!ddcd1d#dd%ed&dd(dd.ed/d0dTdd1dd4ddddded/	dd;di ddddddddddddgddd ed!dd#dd&dd(dd/d0dTddHd1dddd4dddddeddd1idndd1ddd1ddd1ddi ddƓddǓddȓddddddgddɓd ed!dʓdcd1d#d˓d$d%d%ed&d̓d(d͓d,d-d.ed0dd1dd4dϐdАdɐdѐdedddӐdgiidd1d֜dאd؜ddd1dddڐdgiiidܜdd1ddސdi dddddddddddd gddd ed!ddcd1d#dd$dd%ed&dd(dd,d-d.ed0dd1dd4dddddeddd1dddi ddddddddddddtgddd ed!dd#dd%ed&dd(dd,d-d.ed/d0dTdd1dd4ddddded/	dd1idndi ddddddddddddgddd ed!ddcd1d#dd%ed&d d(dd,d-d.ed/d0dd1dddd4dddddeddd1idndi dddddedddddd`gdd	d ed!d
dcd1d#dded&dd.ed/ddTdɓdHd1dddd4ddd	ddedќ
dd1idndi ddddddddddՓdd`gddd ed!dd#dd&dRd(dd.ed/d0dTddHd1dg d4ddddd eddd1idnd!i dd"dddd#ddddՓddgdd$d!d%d#d&d&dRd(d'd.ed/d0dTddHd1dg dd4d(d)d$d*d+eddd1idnd,i dd-dddd.ddddddgdd$d!d%d#d&d&d/d(d'd.ed/d0dTddHd1dg dd4d0d1d$d*d+eddd2d3giid1d4d5gd6d7d8d1dd9d:i dd;dddd<ddddddgdd=d ed!d>dcd1d#d?d%ed&d@d(dAd,d-d.ed/d0dd1g d4dBdCd=dDdEedl
ddӐdFgiidGd1d֜dHd\dIdJi ddddKdddd@ddsddgddd ed!dd#dd%ed&dd(dd.ed/d0dTddHd1dd4dddddedIdLd1ddd\dMdNi ddOddddPddddddgddQd ed!dRdcd1d#dSd$dd%ed&dTd(dUd,d-d.eddd1dVdWdd4dXdVdQdYdZed[dd1idd\i dd]ddKdd^dddd_d ed!d`dcd1d#dad$dd%ed&dbd(dcd,d-d.ed/d0dTdd1dUd4ddded_dfdged/	ddFgdhgdiid1d4dHd؜dji ddkddddlddddddgddmd ed!dnd#dod&dRd(dpd.ed/d0dTddHd1dg d4dqdrdmdsdteddd1idndui ddvddddwdjdxgdydwdgdzd{d|d}d~didwd&ddTdddddd!dd#ddcd1d eeeedddd-d`gg ddxgddd1dd0ddd1idndi ddddddd&ddTdddddddddd!dd#dd%eded.eddd(ddddgg dddgddd1dd0ddd1idndi ddddddd&ddTdddddddddd!dd#dd%eded.eddd(dddd`gg g dddddd1dd0d
dd1idndi ddddddd&dRdTddd$dd*dd+dd$d!d%d#d&d eded.eddd(d'dddgg ddddd1dd0dddd1d1ddndi ddddddd&dRdTdddddddddd!dd#dded.eddd(dddddgg ddd1dd0d+ddÜd1d1ddnZdi ddœddddƓdǐdȓd&dɓddddUd!dʓdHd1dd4d.ed%edd˓d/d0d#d̓ddd(d͓edgedːdΐdd-dddќ	dd1idndi ddӓddddԓddddddgddՓd ed!d֓d#dדd%ed&dؓd(dٓd.ed/d0dTddHd1dd4dڐdېdՐdܐdedIdd1idndi ddߓdddddddddd`gddd ed!dd#dd%ed&dRd(dd.ed/d0dddTdd1dd4ddddded/	dd1idndi ddddddddddddgddd ed!dd#dd&dd(dd.ed/d0dTddHd1ddd4dddddeddddgiid1d4dndddddd dd)dd1idgZdZdZddddd	d
ddddddZej7                         D  ci c]  \  }}||
 c}}} Zej<                  d        Zej<                  d        Z ej<                  d        Z!e"fd       Z#fdZ$fdZ%d Z&d Z'd Z(ddddZ)dddZ*dMdZ+d  Z,d! Z-e"d"        Z.dNd#Z/dd$d%Z0dd$d&Z1dOd'Z2d( Z3e"fd)       Z4e"d*        Z5d+ Z6d, Z7d- Z8dPd.Z9dPd/Z:dQd0Z;e<d1        Z=d2 Z>e<d3        Z?e"dRd4       Z@d5ed6eAfd7ZBd8eAj                  ddddddddf
d6eAfd9ZDd: ZEe<d;        ZFe<d<        ZGd= ZHd> ZId? ZJd@ ZKdA ZLdB ZMdPdCZNdD ZOdE ZPdF ZQdG ZRdPdHZSdI ZTdJ ZUdK ZVdL ZWxZXS c c}}} w (S  	YoutubeIEYouTubea
  (?x)^
                     (
                         (?:https?://|//)                                    # http(s):// or protocol-independent URL
                         (?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie|kids)?\.com|
                            (?:www\.)?deturl\.com/www\.youtube\.com|
                            (?:www\.)?pwnyoutube\.com|
                            (?:www\.)?hooktube\.com|
                            (?:www\.)?yourepeat\.com|
                            tube\.majestyc\.net|
                            {invidious}|
                            youtube\.googleapis\.com)/                        # the various hostnames, with wildcard subdomains
                         (?:.*?\#/)?                                          # handle anchor (#/) redirect urls
                         (?:                                                  # the various things that can precede the ID:
                             (?:(?:v|embed|e|shorts|live)/(?!videoseries|live_stream))  # v/ or embed/ or e/ or shorts/
                             |(?:                                             # or the v= param in all its forms
                                 (?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)?  # preceding watch(_popup|.php) or nothing (like /?v=xxxx)
                                 (?:\?|\#!?)                                  # the params delimiter ? or # or #!
                                 (?:.*?[&;])??                                # any other preceding param (like /?s=tuff&v=xxxx or ?s=tuff&amp;v=V36LpHqtcDY)
                                 v=
                             )
                         ))
                         |(?:
                            youtu\.be|                                        # just youtu.be/xxxx
                            vid\.plus|                                        # or vid.plus/xxxx
                            zwearz\.com/watch|                                # or zwearz.com/watch/xxxx
                            {invidious}
                         )/
                         |(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
                         )
                     )?                                                       # all until now is optional -> you can pass the naked ID
                     (?P<id>[0-9A-Za-z_-]{{11}})                              # here is it! the YouTube video ID
                     (?(1).+)?                                                # if we found the ID, everything can follow
                     (?:\#|$)|)	invidiousa  (?x)
            (?:
                <(?:[0-9A-Za-z-]+?)?iframe[^>]+?src=|
                data-video-url=|
                <embed[^>]+?src=|
                embedSWF\(?:\s*|
                <object[^>]+data=|
                new\s+SWFObject\(
            )
            (["\'])
                (?P<url>(?:https?:)?//(?:www\.)?youtube(?:-nocookie)?\.com/
                (?:embed|v|p)/[0-9A-Za-z_-]{11}.*?)
            \1z(?xs)
            <a\s[^>]*\bhref="(?P<url>https://www\.youtube\.com/watch\?v=[0-9A-Za-z_-]{11})"
            \s[^>]*\bclass="[^"]*\blazy-load-youtubevideo)json3srv1srv2srv3ttmlsrtvtt)
android_vr
web_safari)rT   )tv_downgradedrU   )rV   web_creatorwebrU   rU   Fyoutubez6https://www.youtube.com/watch?v=BaW_jenozKc&t=1s&end=9idBaW_jenozKcextmp4titleu#   youtube-dl test video "'/\ä↭𝕐	age_limitr   availabilitypublic
categorieszScience & TechnologychannelzPhilipp Hagemeisterchannel_follower_count
channel_idUCLqxVugv74EIW3VWh2NOa3Qchannel_urlz8https://www.youtube.com/channel/UCLqxVugv74EIW3VWh2NOa3Qcomment_countdescriptionz$md5:8fb536f4877b8a7455c2ec23794dbc22duration
   end_time	   heatmapz	count:100
like_countlive_statusnot_liveTr   zcount:1zre:https?://i\.ytimg\.com/.+i!kP20121002z@PhilippHagemeisterz+https://www.youtube.com/@PhilippHagemeister)
playable_in_embed
start_timetags	thumbnail	timestampupload_dateuploaderuploader_iduploader_url
view_countzVideo unavailable)url	info_dictskipzEmbed-only video (#1746)z%//www.YouTube.com/watch?v=yZIXLfi8CZQyZIXLfi8CZQzCPrincipal Sexually Assaults A Teacher - Episode 117 - 8th June 2012   z$md5:09b78bd971f1e3e289601dfba15ca4f720120608)r[   r]   r_   r`   rj   ry   zPrivate video)noter~   r   r   z!Use the first video ID in the URLz9https://www.youtube.com/watch?v=BaW_jenozKc&v=yZIXLfi8CZQrt   )rv   rw   rx   ry   rz   r{   r|   r}   z.256k DASH audio (format 141) via DASH manifestz+https://www.youtube.com/watch?v=a9LDPn-MO4Iza9LDPn-MO4Im4azUHDTV TEST 8K VIDEO.mp48KVIDEOzUC8cn-cnCZ2FnxmjfkoLGpsQz8https://www.youtube.com/channel/UC8cn-cnCZ2FnxmjfkoLGpsQ <   
media_typezcount:8ijPz@8KVIDEOz https://www.youtube.com/@8KVIDEO141)formatskip_downloadyoutube_include_dash_manifestzformat 141 not served anymore)r   r~   r   paramsr   z+https://www.youtube.com/watch?v=IB3lcPjvWLAIB3lcPjvWLAzJAfrojack, Spree Wilson - The Spark (Official Music Video) ft. Spree WilsonMusicAfrojackUChuZAo1RKL85gev3Eal9_zgchannel_is_verifiedz8https://www.youtube.com/channel/UChuZAo1RKL85gev3Eal9_zgz$md5:8f5e2b82460520b619ccac1f509d43bf   zcount:19iTWR20131011z@AfrojackVEVOz%https://www.youtube.com/@AfrojackVEVO)
r   rt   rv   rw   rx   ry   rz   r{   r|   r}   z141/bestaudio[ext=m4a])r~   r   r   z6Embed allowed age-gated video; works with web_embeddedz'https://youtube.com/watch?v=HtVdAasjOgUHtVdAasjOgUz7The Witcher 3: Wild Hunt - The Sword Of Destiny Trailer
needs_authGamingzThe WitcherUCzybXLxv08IApdjdN0mJhEgz8https://www.youtube.com/channel/UCzybXLxv08IApdjdN0mJhEgz$md5:595a43060c51c2a8cb61dd33c18e5fbd   zcount:17iﱐS20140605z@thewitcherz#https://www.youtube.com/@thewitcherr   z'Age-restricted; requires authenticationz=Formerly an age-gated video with embed allowed in public sitez'https://youtube.com/watch?v=HsUATh_Nc2UHsUATh_Nc2UzGodzilla 2 (Official Video)EntertainmentFlyingKittyUCYQT13AtrJC0gsM1far_zJgz8https://www.youtube.com/channel/UCYQT13AtrJC0gsM1far_zJgz$md5:bf77e03fcae5529475e500129b05668a   zcount:2it^20200408z@FlyingKitty900z'https://www.youtube.com/@FlyingKitty900)r   r~   r   r   z6Age-gated video embedable only with clientScreen=EMBEDz'https://youtube.com/watch?v=Tq92D6wQ1mgTq92D6wQ1mgz#[MMD] Adios - EVERGLOW [+Motion DL]zProjekt MelodyzUC1yoRdFoFJaCY-AGfD9W0wQz8https://www.youtube.com/channel/UC1yoRdFoFJaCY-AGfD9W0wQz$md5:17eccca93a786d51bc67646756894066j   zcount:5it^20191228z@ProjektMelodyz&https://www.youtube.com/@ProjektMelodyz"Non-age-gated non-embeddable videoz'https://youtube.com/watch?v=MeJVWBSsPAYMeJVWBSsPAYz%OOMPH! - Such Mich Find Mich (Lyrics)z
Herr LurikzUCdR3RSDPqub28LjZx0v9-aAz8https://www.youtube.com/channel/UCdR3RSDPqub28LjZx0v9-aAz$md5:205c1049102a4dffa61e4831c1f16851   rv   iQ20130730z
@HerrLurikz"https://www.youtube.com/@HerrLurik)rw   rx   ry   rz   r{   r|   r}   )r   r~   r   zNon-bypassable age-gated videoz'https://youtube.com/watch?v=Cr381pDsSsA)r   r~   only_matching__2ABJjxzNozDeadmau5 - Some Chords (HD)deadmau5zUCYEK6xds6eo-3tr4xRdflmQz8https://www.youtube.com/channel/UCYEK6xds6eo-3tr4xRdflmQz$md5:c27e1e9e095a3d9dd99de2f0f377ba06i
  zcount:14i<K20100430z	@deadmau5z!https://www.youtube.com/@deadmau5zDASH manifest missing)r~   r   expected_warningsr   lqQg6PlCWgIz5Hockey - Women -  GER-AUS - London 2012 Olympic GamesSportsOlympicsUCTl3QQTvqHFjurroKxexy2Qz8https://www.youtube.com/channel/UCTl3QQTvqHFjurroKxexy2Qz$md5:04bbbf3ccceb6795947572ca36f45904i  was_live
livestream20120731iDPzcount:10iZtU20150827z	@Olympicsz!https://www.youtube.com/@Olympics)
release_daterelease_timestamprv   rw   rx   ry   rz   r{   r|   r}   z+https://www.youtube.com/watch?v=_b-2C3KPAM0z_b-2C3KPAM0u8   [A-made] 變態妍字幕版 太妍 我就是這樣的人unlistedzPeople & Blogsu	   孫ᄋᄅzUCS-xxCmRaA6BFdmgDPA_BIwz8https://www.youtube.com/channel/UCS-xxCmRaA6BFdmgDPA_BIwz$md5:636f03cf211e7687daffe5bded88a94fU   gqq?zcount:11iyM20110310z
@AllenMeowz"https://www.youtube.com/@AllenMeow)	stretched_ratiorv   rw   rx   ry   rz   r{   r|   r}   qEJwOuvDf7I)r~   r   z+https://www.youtube.com/watch?v=FIl7x6_3R5YFIl7x6_3R5Yuc   [60fps] 150614  마마무 솔라 'Mr. 애매모호' 라이브 직캠 @대학로 게릴라 콘서트dorappi2000UCNlmrKRHLHcd2gq6LtPOTlQz8https://www.youtube.com/channel/UCNlmrKRHLHcd2gq6LtPOTlQz$md5:116377fd2963b81ec4ce64b542173306   zcount:12iU20150626z@dorappi2000z$https://www.youtube.com/@dorappi2000z)https://www.youtube.com/embed/CsmdDsKjzN8CsmdDsKjzN8u1   Retransmisión XVIII Media maratón Zaragoza 2015zAirtek | LED streamingUCzTzUmjXxxacNnL8I3m4LnQz8https://www.youtube.com/channel/UCzTzUmjXxxacNnL8I3m4LnQz$md5:fcac84e6c545114766f670236fc10196i*  20150510i3OUzcount:31iCU20150501z@airtekledstreaming7916z/https://www.youtube.com/@airtekledstreaming7916135z+https://www.youtube.com/watch?v=zaPI8MvL8pgz+https://www.youtube.com/watch?v=gVfLd0zydlozhttps://vid.plus/FlRa-iH7PGwz_https://zwearz.com/watch/9lWxNJF-ufM/electra-woman-dyna-girl-official-trailer-grace-helbig.htmlz+https://www.youtube.com/watch?v=lsguqyKfVQglsguqyKfVQgz4{dark walk}; Loki/AC/Dishonored; collab w/Elflover21zFilm & AnimationIronSoulElfUCTSRgz5jylBvFt_S7wnsqLQz8https://www.youtube.com/channel/UCTSRgz5jylBvFt_S7wnsqLQz$md5:8085699c11dc3f597ce0410b0dcbb34a   zcount:13iNV20151119z@IronSoulElfz$https://www.youtube.com/@IronSoulElfz+https://www.youtube.com/watch?v=Ms7iBXnlUO8z+https://www.youtube.com/watch?v=Q39EVAstoRMQ39EVAstoRMz+Clash Of Clans#14 Dicas De Ataque Para CV 4z$md5:ee18a25c350637c8faff806845bddee920151107)r[   r]   r_   rj   ry   zThis video does not exist.z+https://www.youtube.com/watch?v=FRhJzUSJbGIz+https://www.youtube.com/watch?v=M4gD1WSo5mAM4gD1WSo5mAz`William Fisher, CopyrightX: Lecture 3.2, The Subject Matter of Copyright: Drama and choreography	Educationz/The Berkman Klein Center for Internet & SocietyUCuLGmD72gJDBwmLw06X58SAz8https://www.youtube.com/channel/UCuLGmD72gJDBwmLw06X58SAchapterszcount:4z$md5:a677553cf0840649b731a3024aeff4cci  licensez4Creative Commons Attribution license (reuse allowed)zcount:3i<pT20150128z@BKCHarvardz#https://www.youtube.com/@BKCHarvard)	rt   rv   rw   rx   ry   rz   r{   r|   r}   z+https://www.youtube.com/watch?v=eQcmzGIKrzgeQcmzGIKrzgz8Democratic Socialism and Foreign Policy | Bernie SanderszNews & PoliticszBernie SandersUCH1dpzjCEiGAt8CXkryhkZgz8https://www.youtube.com/channel/UCH1dpzjCEiGAt8CXkryhkZgz$md5:13a2503d7b5904ef4b223aa101628f39i  iNV20151120z@BernieSandersz&https://www.youtube.com/@BernieSanders)rp   rq   r   rt   rv   rw   rx   ry   rz   r{   r|   r}   zKhttps://www.youtube.com/watch?feature=player_embedded&amp;amp;v=V36LpHqtcDYz+https://www.youtube.com/watch?v=i1Ko8UG-Tdoz+https://www.youtube.com/watch?v=yYr8q0y5JfguGpuVWrhIzEzPiku - Trailerz$md5:c36bd60c3fd6f1954086c083c72092eb20150811zStandard YouTube License)r[   r]   r_   rj   ry   r   zThis video is not available.z+https://www.youtube.com/watch?v=iqKdEhx-dD4ziqKdEhx-dD4zIsolation - Mind Field (Ep 1)VsaucezUC6nSFpj9HTCZ5t-N3Rm3-HAz8https://www.youtube.com/channel/UC6nSFpj9HTCZ5t-N3Rm3-HAz$md5:f540112edec5d09fc8cc752d3d4ba3cdi%  iקX20170118z@Vsaucezhttps://www.youtube.com/@VsaucezSkipping DASH manifestz+https://www.youtube.com/watch?v=6SJNVb0GnPI6SJNVb0GnPIz Race Differences in Intelligencez$md5:5d161533167390427a1f8ee89a1fc6f1i  20140124)r[   r]   r_   rj   rk   ry   zJThis video has been removed for violating YouTube's policy on hate speech.1t24XAntNCYzsJL6WA-aGkQz&https://invidio.us/watch?v=BaW_jenozKcz1https://redirect.invidious.io/watch?v=BaW_jenozKcz)https://redirect.invidious.io/Yh0AhrY9GjAz+https://www.youtube.com/watch?v=s7_qI6_mIXcz+https://www.youtube.com/watch?v=Z4Vy8R84T1Uz-https://music.youtube.com/watch?v=MgNrAu2pzNsMgNrAu2pzNszVoyeur Girlalbumz"it's too much love to know my dear	alt_titleartistsStephenzUC-pWHpBjdGG69N9mM2auIAAz8https://www.youtube.com/channel/UC-pWHpBjdGG69N9mM2auIAAcreatorsz$md5:7ae382a65843d6df2685993e90a8628f   20190313i\20190312)rk   ro   rp   rq   r   rt   r   rv   rw   rx   trackry   rz   r}   z/https://www.youtubekids.com/watch?v=3b8nCWDgZ6QDJztXj2GPflDJztXj2GPfkz9Panjabi MC - Mundian To Bach Ke (The Dictator Soundtrack)z$md5:bf577a41da97918e94fa9798d922882520090125z
Panjabi MCz@Beware of the Boys (Mundian to Bach Ke) - Motivo Hi-Lectro Remixz'Beware of the Boys (Mundian To Bach Ke))r[   r]   r_   rj   ry   artistr   r   z+https://www.youtube.com/watch?v=x41yOUIvK2kx41yOUIvK2kzIMG 3456zPets & Animalszl'Or Vert asblUCo03ZQPBW5U4UC3regpt1nwz8https://www.youtube.com/channel/UCo03ZQPBW5U4UC3regpt1nw   i?Y20170613z@ElevageOrVertz&https://www.youtube.com/@ElevageOrVertz+https://www.youtube.com/watch?v=CHqg6qOn4noCHqg6qOn4noz+Part 77   Sort a list of simple types in c#	kudvenkatUCCTVrRB5KpIiK6V2GGVsR1Qz8https://www.youtube.com/channel/UCCTVrRB5KpIiK6V2GGVsR1Qz$md5:b8746fa52e10cdbf47997903f13b20dci
  i@"R20130831z@Csharp-video-tutorialsBlogspotz7https://www.youtube.com/@Csharp-video-tutorialsBlogspot)rq   r   rt   rv   rw   rx   ry   rz   r{   r|   r}   z+https://www.youtube.com/watch?v=gVfgbahppCYz1https://www.youtube.com/watch_popup?v=63RmMXCd_bQOtqTfy26tG0zBurn Outz	Every DayzThe Cinematic OrchestraUCIzsJBIyo8hhpFm1NK0uLgwz8https://www.youtube.com/channel/UCIzsJBIyo8hhpFm1NK0uLgwz$md5:fee8b19b7ba433cc2957d1c7582067acif  20020513i  inT20141120)rk   ro   rp   rq   r   rt   r   release_yearrv   rw   rx   r   ry   rz   r}   z+https://www.youtube.com/watch?v=nGC3D_FkCmgz+https://www.youtube.com/watch?v=SZJvDhaSDncSZJvDhaSDnczESan Diego teen commits suicide after bullying over embarrassing videozCBS MorningszUC-SJ6nODDmufqBzPBwCvYvQz8https://www.youtube.com/channel/UC-SJ6nODDmufqBzPBwCvYvQz$md5:acde3a73d3f133fc97e837a9f76b53b7   i6oS20140716z@CBSMorningsz$https://www.youtube.com/@CBSMorningscBvYw8_A0vQu:   4K Ueno Okachimachi  Street  Scenes  上野御徒町歩きzTravel & EventszWalk around JapanUC3o_t8PzBmXf5S9b7GLx1Mwz8https://www.youtube.com/channel/UC3o_t8PzBmXf5S9b7GLx1Mwz$md5:ea770e474b7cd6722b4c95b833c03630i  rw   i ڷ_20201120z@walkaroundjapan7124z,https://www.youtube.com/@walkaroundjapan7124)rx   ry   rz   r{   r|   r}   WaOKSUlf4TMz-https://music.youtube.com/watch?v=XclachpHxisz+https://www.youtube.com/watch?v=wsQiKKfKxugz+https://www.youtube.com/watch?v=YOelRv7fMxYYOelRv7fMxY3gpzDIGGING A SECRET TUNNEL Part 1
colinfurzezUCp68_FLety0O-n9QU6phsgwz8https://www.youtube.com/channel/UCp68_FLety0O-n9QU6phsgwz$md5:5d5991195d599b56cd0c4148907eec50iT  zcount:6i`20210624z@colinfurzez#https://www.youtube.com/@colinfurzeplayer_clientandroid17)extractor_argsr   r   zAndroid client broken)r~   r   r   r   r  player_skipconfigs)r~   r   r   z*https://www.youtube.com/shorts/BGQWPY4IigYStoryboardsz+https://www.youtube.com/watch?v=5KLPxDtMqe85KLPxDtMqe8mhtmlzYour Brain is PlasticSciShowzUCZYTClx2T1of7BRZ86-8fowz8https://www.youtube.com/channel/UCZYTClx2T1of7BRZ86-8fowz$md5:89cd86034bdb5466cd87c6ba206cd2bc   iOx0S20140324z@SciShowz https://www.youtube.com/@SciShow)r   r   z+https://www.youtube.com/watch?v=2NUZ8W2llS42NUZ8W2llS4u,   The NP that test your phone performance 🙂zLeon NguyenUCRqNBSOHgilHfAczlUmlWHAz8https://www.youtube.com/channel/UCRqNBSOHgilHfAczlUmlWHAz$md5:144494b24d4f9dfacb97c1bbef5de84d   zcount:23iGa20220103z@LeonNguyenz#https://www.youtube.com/@LeonNguyenz+https://www.youtube.com/watch?v=mzZzzBU6lrMmzZzzBU6lrMz$I Met GeorgeNotFound In Real Life...QuackityUC_8NknAFiyhOUaZqHR3lq3Qz8https://www.youtube.com/channel/UC_8NknAFiyhOUaZqHR3lq3Qz$md5:42e72df3d4d5965903a2b9359c3ccd25i  iNazcount:26z	@Quackityz!https://www.youtube.com/@Quackity)r   rt   r   r   rv   rw   rx   ry   rz   r{   r|   r}   z+https://www.youtube.com/watch?v=jfKfPfyJRdkjfKfPfyJRdkz	Lofi GirlUCSJ4gkVC6NrvII8umztf0Owz8https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Owconcurrent_view_countz$md5:48841fcfc1be6131d729fa7b4a7784cbis_live20220712ibbzcount:32i-ebz	@LofiGirlz!https://www.youtube.com/@LofiGirlz+https://www.youtube.com/watch?v=tjjjtzRLHvAtjjjtzRLHvAu*   ハッシュタグ無し };if window.ytcsi
LesmiscoreUCdqltm_7iv1Vs6kp6Syke5Az8https://www.youtube.com/channel/UCdqltm_7iv1Vs6kp6Syke5A   shorti:b20220323z@lesmiscorez#https://www.youtube.com/@lesmiscorez+https://www.youtube.com/watch?v=el3E4MbxRqQel3E4MbxRqQz%dlp test video 2 - primary sv no desczcole-dlp-test-acczUCiu-3thuViMebBjw_5nWYrAz8https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA   iqc20220908z
@coletdjnzz"https://www.youtube.com/@coletdjnzz+https://www.youtube.com/watch?v=gHKT4uU8ZnggHKT4uU8Zngz$dlp test video title primary (en-GB)z$md5:e8c098ba19888e08554f960ffbf6f90eirb20220729langfr)r  r   z!Preferring "fr" translated fields)r~   r   r   r   z6 channel audioz+https://www.youtube.com/watch?v=zgdo7-RRjgoz#Multiple HLS formats with same itagz+https://www.youtube.com/watch?v=kX3nB4PpJkokX3nB4PpJkoz$Last To Take Hand Off Jet, Keeps It!MrBeastUCX6OQ3DkcsbYNE6H8uQQuVAz8https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVAz$md5:42731fced13eff2c48c099fbb5c1b3a0i  iP	pc20221112z@MrBeastz https://www.youtube.com/@MrBeastiosz233-1zPO Token Requiredz,Audio formats with Dynamic Range Compressionz+https://www.youtube.com/watch?v=Tq92D6wQ1mgwebmz251-drcz5Support /live/ URL + media type for post-live contentz(https://www.youtube.com/live/qVv6vCqciTMqVv6vCqciTMu   【 #インターネット女クリスマス 】3Dで歌ってはしゃぐインターネットの女たち【月ノ美兎/名取さな】u   さなちゃんねるUCIdEIHpS0TdkqRkHL5OkLtAz8https://www.youtube.com/channel/UCIdEIHpS0TdkqRkHL5OkLtAz$md5:6aebf95cc4a1d731aebc01ad6cc9806diV  20221223ici`cz@sana_natoriz$https://www.youtube.com/@sana_natori)rq   r   rt   r   r   rv   rw   rx   ry   rz   r{   r|   r}   z+https://www.youtube.com/watch?v=wSSmNUl9SnwwSSmNUl9Snwz&The Computer Hack That Saved Apollo 14zScott ManleyzUCxzC4EngIsMrPmbm6Nxvb-Az8https://www.youtube.com/channel/UCxzC4EngIsMrPmbm6Nxvb-Az$md5:f4bed7b200404b72a394c2f97b782c02i  i9@Y20170831z@scottmanleyz$https://www.youtube.com/@scottmanleywebpage)r  r  z*https://www.youtube.com/shorts/18NGQq7p3LY18NGQq7p3LYu8   아이브 이서 장원영 리즈 삐끼삐끼 챌린지u   ㅇㅇUCC25oTm2J7ZVoi5TngOHg9gz8https://www.youtube.com/channel/UCC25oTm2J7ZVoi5TngOHg9gr   if20240822u   @으아-v1ku#   https://www.youtube.com/@으아-v1kz-https://music.youtube.com/watch?v=DbCvuSGfR3YDbCvuSGfR3YBack Around   half·aliver   Conditions Of A Punkr   20221202r   i  z$md5:bfc0e2b3cc903a608d8a85a13cb50f95rz   u   half•aliveUCYQrYophdVI3nVDPOnXyIngz8https://www.youtube.com/channel/UCYQrYophdVI3nVDPOnXyIng   z:https://i.ytimg.com/vi_webp/DbCvuSGfR3Y/maxresdefault.webp)r9  r:  r8  i}c20221201)ri   r}   rp   r`   rk   rw   ro   rc   rv   r   rx   ry   rt   ra   rq   z+https://www.youtube.com/watch?v=brhfDfLdDZ8brhfDfLdDZ8z/This is the WORST Movie Science We've Ever Seenz$md5:8afd0a3cd69ec63438fc573580436f92
Open Saucer{   z@opensauceliver|   z&https://www.youtube.com/@opensauceliveUC2EiGVmCeD79l_vZ204DUSwz8https://www.youtube.com/channel/UC2EiGVmCeD79l_vZ204DUSwr}   i  z0https://i.ytimg.com/vi/brhfDfLdDZ8/hqdefault.jpg)MoonfallzBad Sciencer@  zSauce+zThe Backyard ScientistzWilliam Osmanz	Allen PanzWilliam Osman 2ih20251003)rc   rv   r   rx   ry   rt   ra   rq   z+https://www.youtube.com/watch?v=_A9KsMbWh4E_A9KsMbWh4Eu)   【MV】薫習 - LIVE UNION【RK Music】z$md5:9b3dc2b91103f303fcc0dac8617e7938RK Musicz@RKMusic_incz$https://www.youtube.com/@RKMusic_inczUCiLhMk-gmE2zgF7KGVyqvFwz8https://www.youtube.com/channel/UCiLhMk-gmE2zgF7KGVyqvFw   z:https://i.ytimg.com/vi_webp/_A9KsMbWh4E/maxresdefault.webp)rE  HACHIu   焔魔るり CH. / Ruri Enmau   瀬戸乃ととu   水瀬 凪/MINASE Nagiii20251031)
rc   rv   r   rx   ry   r   r   rt   ra   rq   z+https://www.youtube.com/watch?v=f6HNySwZV4cf6HNySwZV4cdlptestvideo2z4https://i.ytimg.com/vi/f6HNySwZV4c/maxresdefault.jpgiUe20240308   zcount:15)rc   rv   rx   ry   r   r   rt   ra   rq   ri   comments)r   getcommentsz+https://www.youtube.com/watch?v=3dHQb2Nhma03dHQb2Nhma0u   Tɪtleabcdefgz@abcdefg-d5t2cz&https://www.youtube.com/@abcdefg-d5t2cUCayEJzV8XSSJkPdA7OAsbewz8https://www.youtube.com/channel/UCayEJzV8XSSJkPdA7OAsbew   z4https://i.ytimg.com/vi/3dHQb2Nhma0/maxresdefault.jpgiTi20251231zcount:9)rv   rx   ry   rt   ra   rq   ri   rM  zehttp://www.improbable.com/2017/04/03/untrained-modern-youths-and-ancient-masters-in-selfie-portraits/zmsN87y-iEx0z!Feynman: Mirrors FUN TO IMAGINE 6ry   20080526z$md5:873c81d308b979f0e23ee7e620b312a3zUCCeo--lls1vna5YJABWAcVAzChristopher Sykesz8https://www.youtube.com/channel/UCCeo--lls1vna5YJABWAcVA   z6https://www.youtube.com/@ChristopherSykesDocumentariesz@ChristopherSykesDocumentariesi :H)	r}   rc   re   rz   r|   r{   ro   rx   r   z?https://badzine.de/news/als-marc-zwiebler-taufik-hidayat-schlugbSVcWOq397gzPTAUFIK TUNJUKKAN KELASNYA !!! : Taufik Hidayat VS Marc Zwiebler Canada Open 2011zBadminton Addict IdUCfCpKOwQGUe2FUJzYNadQcQz8https://www.youtube.com/channel/UCfCpKOwQGUe2FUJzYNadQcQz$md5:2c3737da9a575f301a8380b4d60592a8i  i`20210519z@badmintonaddictid8958z.https://www.youtube.com/@badmintonaddictid8958zMhttps://lothype.com/2025-chino-hills-hs-snare-quad-features-wgi2025-drumline/lC21AX_pCfAz=2025 Chino Hills HS Snare & Quad Features! #wgi2025 #drumline
DrumlineAVUCqdfUdyiQOZMvW5PcTTYikQz8https://www.youtube.com/channel/UCqdfUdyiQOZMvW5PcTTYikQ0   locationWESTMINSTERzcount:72ig20250218z@DrumlineAVz#https://www.youtube.com/@DrumlineAVzIhttps://rabota7.ru/%D0%91%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80DexR8_tTSsQu3   Работа бухгалтером в Москвеu:   Работа в Москве свежие вакансииUCG3qz_gefGaMiSBvmaxN5WQz8https://www.youtube.com/channel/UCG3qz_gefGaMiSBvmaxN5WQz$md5:b779d3d70af4efda26cf62b76808c0e3*   zcount:7i<1Y20170602u7   @РаботавМосквесвежиевакансииuO   https://www.youtube.com/@РаботавМосквесвежиевакансииgenericimpersonatechromezhttps://www.uca.ac.uk/z
www.uca.aczAUCA | Creative Arts Degrees UK | University for the Creative Artsz$md5:179c7a06ea1ed01b94ff5d56cb18d73bz8/media/uca-2020/hero-headers/2025-prospectus-all-2x2.jpg)r[   r_   r`   rj   rw   )r~   r   playlist_countr   actualmainzplayer_ias.vflset/en_US/base.jsz#player_ias_tcc.vflset/en_US/base.jsz#player_ias_tce.vflset/en_US/base.jszplayer_es5.vflset/en_US/base.jszplayer_es6.vflset/en_US/base.jsz#player_es6_tcc.vflset/en_US/base.jsz#player_es6_tce.vflset/en_US/base.jsz%tv-player-ias.vflset/tv-player-ias.jsz%tv-player-es6.vflset/tv-player-es6.jsz,player-plasma-ias-phone-en_US.vflset/base.jsz'house_brand_player.vflset/en_US/base.js)ri  tcctcees5es6es6_tcces6_tcetvtv_es6phonehousec                 J    | j                  dd g      d   xs | j                  S )Nplayer_js_versionr   )_configuration_arg_DEFAULT_PLAYER_JS_VERSIONselfs    R/var/www/files/kim/lib/python3.12/site-packages/yt_dlp/extractor/youtube/_video.py_player_js_versionzYoutubeIE._player_js_versiong  s(    &&':TFCAFi$JiJii    c                     | j                  d| j                  g      d   }|| j                  vr/| j                  d| d| j                   d       | j                  }|S )Nwebpage_clientr   zInvalid webpage_client "z" requested; falling back to T	only_once)rv  _DEFAULT_WEBPAGE_CLIENT_WEBPAGE_CLIENTSreport_warning)ry  r~  s     rz  _webpage_clientzYoutubeIE._webpage_clientk  s{    001ADD`D`Cabcde!6!66*>*: ;##'#?#?"@BMQ   S "99Nr|  c                 z    t        | j                  d            }| j                  dk7  r|j                  d       |S )Nwebpage_skiprh  player_response)setrv  r{  add)ry  skippeds     rz  _skipped_webpage_datazYoutubeIE._skipped_webpage_datau  s7    d--n=>""h.KK)*r|  c                 l    ddl m}  ||      }|j                  dd g      d   ryt        |   |      S )Nr   )r*   listF)yt_dlp.utilsr*   getsupersuitable)clsr~   r*   qs	__class__s       rz  r  zYoutubeIE.suitable}  s7    )c]66&4&!!$w$$r|  c                 N    t        |   |i | i | _        i | _        d | _        y N)r  __init___code_cache_player_cache_pot_director)ry  argskwargsr  s      rz  r  zYoutubeIE.__init__  s-    $)&)!r|  c                 b    t         |           t        |       | _        t	        |       | _        y r  )r  _real_initializer   r  r   _jsc_director)ry  r  s    rz  r  zYoutubeIE._real_initialize  s(     "4T:4T:r|  c                     t        j                         t        j                         D cg c]  }|j                  d      s| c} fd fd}	D ]i  }|d<   t	        j
                   j                  |d   |d   ||	 xr |j                               }
r|
|d<   d|d	<   St         |
i             |d<   |d= k y c c}w )
Nis_from_startc                 6   t        j                          |z   k  ry j                  j                        \  }}}}}}t        |dt              }t        |dt              }j                  ||||      \  }}	}|dk(  
t        j                          y )N.videoDetailsexpected_type.microformatplayerMicroformatRendererr  )time_initial_extractr  r2   dict_list_formats)itagclient_namedelay_prs
player_urlvideo_detailsmicroformatsrq   formatsr  ry  smuggled_dataru   r~   video_idwebpage_urls            rz  refetch_manifestzDYoutubeIE._prepare_live_from_start_formats.<locals>.refetch_manifest  s    yy{j500*.*?*?]K1E1Ex+Q'Aq!QZ(.CSWXM'F"$L *.););HlTacfhr)s&A{GQ!Y.GJr|  c                 ,    	j                  d      D ]p  }5    |       ddd       t         fdD        d      }|s"s
 d|_        nd  t                |_        R|j	                  d      s y|d   |d   fc S  y# 1 sw Y   exY w)	zZ
            @returns (manifest_url, manifest_stream_number, is_live) or None
            FfatalNc              3   v   K   | ]0  }|j                  d       k(  s|j                  d      k(  s-| 2 yw)_itag_clientNr  ).0fr  r  s     rz  	<genexpr>zOYoutubeIE._prepare_live_from_start_formats.<locals>.mpd_feed.<locals>.<genexpr>  s2     kg$0F155QZK[_jKj!ks   999z: Video is no longer livez*Cannot find refreshed manifest for format manifest_urlmanifest_stream_number)RetryManagernexterrorr   r  )r  r  r  retryr  r  r  lockr  ry  r  s   ``   rz  mpd_feedz<YoutubeIE._prepare_live_from_start_formats.<locals>.mpd_feed  s     ***7 O ?$T;>? kWkmqr")1
2K&L(RSWRXYlYnXo&p uu^,  (!,D*EwNN#O$ #? ?s   B

B	r  r  r  	fragmentshttp_dash_segments_generatorprotocol)		threadingLockr  r  	functoolspartial_live_dash_fragmentscopyr   )ry  r  r  live_start_timer~   r  r  r  r  r  genr  r  ru   s   ``` ````   @@@rz   _prepare_live_from_start_formatsz*YoutubeIE._prepare_live_from_start_formats  s    ~~YY[
%@)?1@	% 	%	 	0  		'A"AiL##D$=$=x7UVW`Ua$3X7{?WqvvxYC!$+ >*!)#b'!2+o&		'S As   CCc              #       K   d\  }}	d\  d}
j                  d      xs t        j                         }||xs |z
  |	kD  }|r j                  t        d      d       d}|
dd c}}d\   fd	} j	                  d
| d        r4t        j                         }dkD  ry |r.	  j                  |d ddd      }t        |d       dz  d }M |ddkD        \  }dz  |sd|kD  rd }ldz  |
dk  r
|dk  r|
z   }|r!t        |t        |	d   d   z        z
        }	 t        |      D ]6  } |dd      \  }}|s|dz
  }t        d      t        d|       }|d 8 |k(  rdz  nd}ry t        j                  t        d||z   t        j                         z
               r3y y # t        $ r d }Y w xY w# t        $ r Y Vw xY ww)N)r"  i )NNTr   startzStarting download from the last 120 hours of the live stream since YouTube does not have data before that. If you think this is wrong,Tr  NNc                     }
j                  dd       }|xs% |xr! t        |t              xr |j                  dk(  } 	|rdnd      xs df\  | s|rsdfS |k(  rdfS r}n9	 j	                  d ddd      \  }}|s	dz  dfS t        fd	|D              }|d
   |d   sJ t        t        j                  dd   d         j                  d            }d|fS # t
        $ r d }Y rw xY w)N
last_errori  r"  iPF  FTr   errnoter     c              3   4   K   | ]  }|d    k(  s|  yw)r  N )r  xstream_numbers     rz  r  zUYoutubeIE._live_dash_fragments.<locals>._extract_sequence_from_mpd.<locals>.<genexpr>  s     `a15M3NR_3_`s   r  fragment_base_urlz(?:/|^)sq/(\d+)pathr   )pop
isinstancer   status"_extract_mpd_formats_and_subtitlesr   r  intresearchgroup)refresh_sequence	immediateold_mpd_urlr  expire_fastfmt_infofmtsr  	_last_seqr  ctxr  r  r  r  last_seqmanifestless_orig_fmtr  mpd_urlno_fragment_scorery  r  s            rz  _extract_sequence_from_mpdzBYoutubeIE._live_dash_fragments.<locals>._extract_sequence_from_mpd  sZ    "Kt4J#v
(uz*i7X(u]g]n]nru]uK/7kP[1af/g 0R3:M52Q ,G]G#w (?* G+>)$0 "EEE5 F OGD! %*% (?*`4`` -I ()< =$$$BII&8)B-:OPVVWXYZI?" &  D s   1C/ /C=<C=[z"] Generating fragments for format    Fr  c                 2    t        | j                  d         S )NzX-Head-Seqnum)r"   headersr  s    rz  <lambda>z0YoutubeIE._live_dash_fragments.<locals>.<lambda>  s    ;qyy?Y3Z r|  r  rL  r   r  rk   zbreaking out of outer loopzsq/)r~   fragment_countr"  )r  r  r  r   write_debug_request_webpager   r4   maxr  ranger;   sleep)ry  r  r  r  r  r  r  r  
FETCH_SPANMAX_DURATIONbegin_indexdownload_start_timelack_early_segments	known_idxlast_segment_urlr  
fetch_timeurlhshould_continueidxr  r  r  r  r  r  r  r  s   ` `` ```             @@@@@@@rz  r  zYoutubeIE._live_dash_fragments  s    #, 
L*:'!ggg.=$))+1_5[H[\_kk 3V!Wbf   h #'9Da6	$&6'1$	$	# 	# 	#@ 	1XJ&HOPJ 2% 00($UEQV 1 XD #4)Z[#%*%'+$,FtM^acMc,d)!Q&!&8##' MHQ9q=${2	"	8c,)TV-XbJc:c6d+de	 H5 
C)CE5)Q&OQ*$'!G	,-IJJ'./@Cu+'N$/*2 
 (%*%()%$	 % JJs1j:5		CDEu  &  D R " sV   B4G>G A-G>AG. <G>G>G+'G>*G++G>.	G;7G>:G;;G>c                     | j                   dk(  ryt        j                  d| j                         s"| j                  d| j                    dd       y| j                   j	                  d      S )	Nrh  r  z[0-9]{5,}@[0-9a-f]{8,}zInvalid player JS version "z?" specified. It should be "actual" or in the format of STS@HASHTr  @)r{  r  	fullmatchr  splitrx  s    rz  _get_player_js_versionz YoutubeIE._get_player_js_version7  sv    ""h.||5t7N7NO-d.E.E-F GE FQU   W &&,,S11r|  N)	player_idr  c          	         |s	|sJ d       |s| j                  |      }d}| j                         d   }|r||k7  r
d| d| }|}| j                  ddg      d   xs | j                  }|g | j                  d	vr>| j                  d
| ddj                  | j                         d       | j                  }|s;|r| j                  |d       |d	k(  rd}t        dd| d| j                  |          S | j                  |      d   }|s|d	k(  s||k(  rt        d|      S |d	k(  r|r|}nd}| j                  t        |||k7  xr d| d| d| d      d       t        dd| d| j                  |          S )Nz>_construct_player_url must take one of player_id or player_urlFr   Forcing player z in place of player player_js_variantr   r   rh  z Invalid player JS variant name "z " requested. Valid choices are: , Tr  ri  https://www.youtube.com
/s/player//z	Forcing "z" player JS variant for player zoriginal url = z	
        delim)_extract_player_infor  rv  _DEFAULT_PLAYER_JS_VARIANT_PLAYER_JS_VARIANT_MAPr  joinr  r;   _get_player_id_variant_and_pathr#   )ry  r  r  force_player_idplayer_id_overridevariantactual_variants          rz  _construct_player_urlzYoutubeIE._construct_player_urlA  s   Jh(hh&11*=I!88:1="4	"A /0B/CCWXaWbcO*I))*=tDQGj4KjKjBD77BBB27) <&&*ii0K0K&L%MOZ^   ` 55G  D A(" 4
9+QtOjOjkrOsNt6uvv==jI!LGx$77n;T4jAAh( !~%iIgY>]^g]h*ij\*	  ,0	 	 	1 0Jyk4KfKfgnKoJp2qrrr|  r3  c                T    t        |dddt              }|sy | j                  |      S )N).PLAYER_JS_URL).WEB_PLAYER_CONTEXT_CONFIGS.jsUrlF)get_allr  )r  )r2   strr,  )ry  r3  ytcfgsr  s       rz  _extract_player_urlzYoutubeIE._extract_player_urln  s6    !*,].
 ))Z)@@r|  c                     | j                         d   x}r(| j                  d| d       | j                  |      S | j                  dd||      }|r*| j	                  d	|d
|      }|r| j                  |      S y y )Nr   r  Tr  )r  z"https://www.youtube.com/iframe_apizDownloading iframe API JS)r   r  retry_fatalzplayer\\?/([0-9a-fA-F]{8})\\?/zplayer versionr  )r  r  r,  _download_webpage_with_retries_search_regex)ry  r  r  r)  iframe_webpageplayer_versions         rz  _download_player_urlzYoutubeIE._download_player_urlv  s    !%!<!<!>q!AAA/A.BCtT--8J-KK<<0,5 = 2
 !//1>CS[` 0 bN11N1KK  r|  c                 b   | j                  |      }t        t        j                  j	                  |      j
                  d| d      | j                  j                        xs- t        fd| j                  j                         D        d       }|s| j                  d| d       ||fS )Nr  r   c              3      K   | ]B  \  }}t        j                  t        j                  |      j                  d d            r| D yw)en_USz[a-zA-Z0-9_]+N)r  r  escapereplace)r  kvplayer_paths      rz  r  z<YoutubeIE._get_player_id_variant_and_path.<locals>.<genexpr>  sE      P[!Q||BIIaL00:JK[Y P[s   AAz7Unable to determine player JS variant
        player = Tr  )r#  r-   urllibparseurlparser  _INVERSE_PLAYER_JS_VARIANT_MAPr  r  itemsr  ry  r  r  r*  rD  s       @rz  r'  z)YoutubeIE._get_player_id_variant_and_path  s    --j9	"6<<#8#8#D#I#IZXaWbbcKde5599+F b$ P[==CCEP[\`Kb $$.<1<@  B ';..r|  c                     | j                  |      \  }}}|s!t        j                  ddt        |d            }| d| S )Nz[^a-zA-Z0-9]r  z.js-)r'  r  subr,   rJ  s        rz  _player_js_cache_keyzYoutubeIE._player_js_cache_key  sF    *.*N*Nz*Z'	7Kff_c:k53QRGAgY''r|  c                 p    t        j                  d|      x}r|j                  d      S t        d|      )Nz"/s/player/(?P<id>[a-fA-F0-9]{8,})/r[   zCannot identify player )r  r  r  r   )r  r  ms      rz  r#  zYoutubeIE._extract_player_info  s:    		?LL1L774= 6znEFFr|  c           	          | j                  |      }|| j                  vr.| j                  |||d| d| d      }|r|| j                  |<   | j                  j                  |      S )NzDownloading player zDownload of z failed)r  r   r  )rN  r  _download_webpager  )ry  r  r  r  player_js_keycodes         rz  _load_playerzYoutubeIE._load_player  s~    11*= 0 00))HE*=/:&}oW= * ?D 26  /##M22r|  use_disk_cachec                
   d| | j                  |      gt        t        |      }|| j                  v r| j                  |   S |sy | j                  j                  |d   t        |dd   d      }|r|| j                  |<   |S )Nyoutube-r   r   z
2025.07.21)min_ver)rN  mapr/   r  cacheloadr#   )ry  namer  rW  
cache_keyscache_iddatas          rz  _load_player_data_from_cachez&YoutubeIE._load_player_data_from_cache  s    tf%t'@'@'LlsS^`jOklt)))%%h//zzx{M8AB<,HR^_+/Dx(r|  c                    d| | j                  |      gt        t        |      }|| j                  vr<|| j                  |<   |r*| j                  j                  |d   t        |dd   |       y y y )NrY  r   r   )rN  r[  r/   r  r\  storer#   )ry  ra  r^  r  rW  r_  r`  s          rz  _store_player_data_to_cachez%YoutubeIE._store_player_data_to_cache  s|    tf%t'@'@'LlsS^`jOkl4---+/Dx(

  !mXab\.JDQ  .r|  c           	      z   | j                         d   }|rt        |      S t        |dt        hf      }|r|S |s!d}|rt	        |      | j                  |       y| j                  d|      x}r|S | j                  |||      x}r4t        | j                  d|dd|	            }|r| j                  |d|       |S )
zr
        Extract signatureTimestamp (sts)
        Required to tell API what sig/player version is in use.
        r   STSz5Cannot extract signature timestamp without player urlNstsr  z2(?:signatureTimestamp|sts)\s*:\s*(?P<sts>[0-9]{5})zJS player signature timestamp)r  r  )
r  r  r2   r"   r   r  rb  rU  r9  re  )	ry  r  r  ytcfgr  player_sts_overriderh  	error_msgrT  s	            rz  _extract_signature_timestampz&YoutubeIE._extract_signature_timestamp  s     #99;A>*++55;-"89JOI$Y//	* 33E:FF3FJ$$Xz$GG4Gd00Et/uE 1 K LC 00eZH
r|  c           	         ddj                  fdt        d      D              }t        d      D ]F  \  }}|rdnd}t        |d|dft        	      }|s| j                  d
| d        y t        j                  j                  |      }t        j                  j                  |j                        }	t        t        |	j                  d      xs dgd         dz
        g}
|	j                  dg|g|
dd       |r|	j                  d|
d       t        j                  j                  |j!                  t        j                  j#                  |	d                  }| j%                  ||d| ddd       I y )Nz@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_r   c              3   V   K   | ]   }t        j                  d d      dz      " yw)r      ?   N)randomrandint)r  r  CPN_ALPHABETs     rz  r  z*YoutubeIE._mark_watched.<locals>.<genexpr>  s&     SAl6>>!S#9B#>?Ss   &)   )videostatsPlaybackUrlvideostatsWatchtimeUrlzfully playbackTrackingbaseUrlr  zUnable to mark watchedlenz1.5r   r   2
detailpage)vercpncmtel)stetT)queryzMarking zUnable to mark watchedFr  )r&  r  	enumerater!   r:   r  rE  rF  rG  r*   r  r3  floatr  update
urlunparse_replace	urlencoderR  )ry  r  player_responsesr~  is_fullkeylabelr~   
parsed_urlr  video_lengthrs  s              @rz  _mark_watchedzYoutubeIE._mark_watched  sy    ZggSrSS%&YZ !	7LGS 'HRE,/A3	.R*57C##oeWG$DE..s3J&&z'7'78B  rvve}'?&C Dq HIJLIIuu#"	   		& 
 ,,))##&,,*@*@T*J#KMC ""X%8( # 7?!	7r|  c              #     K   t        j                  d|      }|r/| j                  |j                  d      |        | j                  t
        |   ||      E d {    t        j                  d|      D ]   }| j                  t        |      | |       " t        j                  d|      D ]  }| j                  |d   | |d           y 7 tw)NzZ<link rel="alternate" href="(?P<url>https://www\.youtube\.com/watch\?v=[0-9A-Za-z_-]{11})"r~   z(class="lazyYT" data-youtube-id="([^"]+)"z(?x)<div[^>]+
                class=(?P<q1>[\'"])[^\'"]*\byvii_single_video_player\b[^\'"]*(?P=q1)[^>]+
                data-video_id=(?P<q2>[\'"])([^\'"]+)(?P=q2)r  )	r  r  
url_resultr  StopExtractionr  _extract_from_webpagefindallr5   )r  r~   r3  mobjid_rP  r  s         rz  r  zYoutubeIE._extract_from_webpage
	  s     
 yyi ..E!2C88$$$70g>>> ::I7S 	>C..c!2C==	>  ?@GI 	4A ..2QrU33	4 	?s   ACCA5Cc                 H    | j                  |      }|st        d|       |S )NzInvalid URL: )get_temp_idr   )r  r~   r  s      rz  
extract_idzYoutubeIE.extract_id"	  s*    ??3' =!677r|  c                 T    t        |dt              }| j                  |d d |      S )N)playerOverlaysplayerOverlayRendererdecoratedPlayerBarRendererr  	playerBarchapteredPlayerBarRendererr   r  c                 0    t        t        | d      d      S )N)chapterRenderertimeRangeStartMillis  scale)r   r2   chapters    rz  r  z7YoutubeIE._extract_chapters_from_json.<locals>.<lambda>2	  s    =W&QRZ^,` r|  c                 &    t        | dt              S )N)r  r_   
simpleTextr  )r2   r3  r  s    rz  r  z7YoutubeIE._extract_chapters_from_json.<locals>.<lambda>4	  s    <CSV,X r|  )start_functiontitle_functionrk   )r2   r  _extract_chapters_helper)ry  ra  rk   chapter_lists       rz  _extract_chapters_from_jsonz%YoutubeIE._extract_chapters_from_json)	  sE    #  "	# ,,`X -  	r|  c           	           t        |dt              } fd fdt        t        d  fd|D              g       S )N)engagementPanels."engagementPanelSectionListRenderercontentmacroMarkersListRenderercontentsr  c                 :    t        j                  | d            S )NtimeDescription)r(   	_get_textr  ry  s    rz  r  zCYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<lambda>=	  s    ~dnnWN_6`'a r|  c                 (    j                  | d      S )Nr_   )r  r  s    rz  r  zCYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<lambda>>	  s    w(H r|  c              3   Z   K   | ]"  }j                  t        |d              $ yw)).macroMarkersListItemRendererN)r  r2   )r  r  chapter_timechapter_titlerk   ry  s     rz  r  zDYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<genexpr>@	  s8      "*  )),xAf*g*6xQ"*s   (+)r2   r  r  filter)ry  ra  rk   content_listr  r  s   ` ` @@rz  '_extract_chapters_from_engagement_panelz1YoutubeIE._extract_chapters_from_engagement_panel8	  sM    #~  bHF4 "* )"* + -/0 	0r|  c                 l    t        |dddd ddddd	d
t        d      hfd hdt        hfdf
      xs d S )NframeworkUpdatesentityBatchUpdate	mutationsc                 $    |d   d   d   d   dk(  S )NpayloadmacroMarkersListEntitymarkersList
markerTypeMARKER_TYPE_HEATMAPr  r  rC  s     rz  r  z,YoutubeIE._extract_heatmap.<locals>.<lambda>H	  s     9&>?N|\`uu r|  r  r  r  markers.startMillisr  r  c                 B    t        | d         t        | d         z   dz  S )Nr  durationMillisr  )r  r  s    rz  r  z,YoutubeIE._extract_heatmap.<locals>.<lambda>K	  s&    Am,<(=AFVDW@X(X\`'` r|  intensityScoreNormalized)ru   rm   value)r2   r   )ry  ra  s     rz  _extract_heatmapzYoutubeIE._extract_heatmapE	  s]    D 3[u/	3,}4/H.IJ`a4}oFQ#   	r|  c                    t        |ddt        hf      }t        |ddt        hf      x}sy t        |ddt        hf      }t        |ddt        hf      xs d}||xs dd	t        |dd
d
t        hfddt        hfdd| j
                  hfddt        hfddt        hfddt        hfddt        hfddddt        d      hfdd      |d n|j                  d      dk(  || j                  |      dS )Nr  commentEntityPayload
properties	commentId#engagementToolbarStateEntityPayloadpublishedTimer   root)r[   parentr  toolbarlikeCountA11yauthor	channelIddisplayNameavatarThumbnailUrl	isCreator
isVerifiedchannelCommandinnertubeCommandbrowseEndpointcanonicalBaseUrlcommandMetadatawebCommandMetadatar~   r  )textrp   	author_idr  author_thumbnailauthor_is_uploaderauthor_is_verified
author_urlFr2  
heartStateTOOLBAR_HEART_STATE_HEARTED)is_favorited
_time_textrx   )r!   r  r2   r3  r'   ucid_or_noner:   boolr;   r  _parse_time_text)ry  entitiesr  comment_entity_payload
comment_idtoolbar_entity_payload	time_texts          rz  _extract_commentzYoutubeIE._extract_commentO	  sY   !*8iAWZ^Y_5`!a*+ALR]`c_dCeff
f!*8iAfimhn5o!p !7,Z]Y^9_`fdf	 &
 1%y)cUC(/K=I&d6G6G5HI#]SE:%-/Ck]$S'/tf&E'/v&F')9;M P56794 
 &<%CT377EIff#..y9%
 	
r|  c                    |j                  d      }|sy || j                  |d      | j                  |d      t        |ddd| j                  hf      | j                  |d      t        |dd	d
dt
        hf      |xs dd}| j                  |d      xs d}| j                  |      }|j                  ||d       t        dt        |dt        d            |d<   t        |d      }|||d<   t        |dt              }|d|v |d<   | j                  t        |d      g      }	| j                  |	t        j                        rd|d<   t        |d      }
|
rd|d <   |S )!Nr  contentText	voteCountauthorEndpointr  browseId
authorTextauthorThumbnail
thumbnailsr  r~   r  )r[   r  rp   r  r  r  r  publishedTimeTextr   )r  rx   r  )r  r  Fr  r2  r  authorIsChannelOwnerr  )actionButtonscommentActionButtonsRendererr  creatorHeartr  authorCommentBadgeTr  pinnedCommentBadge	is_pinned)r  r  
_get_countr2   r  r:   r  r  r;   r3  r  _extract_badges
_has_badger   VERIFIED)ry  comment_rendererr  r  infor  rx   r  comment_abrbadgesr  s              rz  _extract_comment_oldzYoutubeIE._extract_comment_oldl	  s   %))+6
 NN#3]C//*:KH%&69IK[]gjnj{j{i|8}~nn%5|D ,-=@QS_acejmxly?z {&
 NN#35HIOR	)))4	#"
 	 %%|4D Gk!5(23\
 **:<RS));D%&"O_ce"#1[#@D %%|4DFZ'[&\]??69#5#56)-D%& !13GH	 $Dr|  c           
   #      K    fd fd} f	dsdd dddt               t               dd  j                  d      dgd	z  z   D        ^}}	|k  ry  j                  |      }
d }d
}|d u }|r$|
s" j                   j	                              }
d}d}t        j                  d      D ]  }|
s n j                   j                  |            }dd    dd    d}|dk(  r|rd}n'dd   |fz  }ndj                  |rdnd|rdnd||      }d }|sd   dk(  rd   dk(  sg |d|rdndg}	  j                  d |
d|||      }d
}d }
t!        |d$d%d&dt"        hf      }t!        ||t$        g '      D ]E  }|r ||      }
d
}|
r  ||||      D ]  }|s   y |   j                  d(|i      }
|
sD    j'                  |d)d*+      }|r/|s,d   dk(  r# j                  d,| d-        j(                  y y y # t        $ rZ}dt        |      j                         v r9|r7 j                  d      d v r j                  d!       Y d }~ y t        d"d#       d }~ww xY ww).Nc                 0    j                  | dg      d   S )Nr   r   )rv  )cry  s    rz  r  z,YoutubeIE._comment_entries.<locals>.<lambda>	  s    $*A*A!bT*J1*M r|  c                    d }| D ]  }t        |d      }
j                  |dd      }||d<   
j                  d| d       t         	d      dk7        t	        |fd	t
              xs i }|j                  d
      xs i }
j                  |      xs 
j                  |      }|st        |j                  d            }|s	dk(  rdnd}
j                  d|j                                  |S  |S )NcommentsHeaderRenderer	countTextcommentsCount	est_totalzDownloading ~z	 commentscomment_sorttopc                      | d   d   d      S )NsortMenusortFilterSubMenuRenderersubMenuItemsr  )r  comment_sort_indexs    rz  r  zDYoutubeIE._comment_entries.<locals>.extract_header.<locals>.<lambda>	  s    a
m,GHXYkl r|  serviceEndpointr_   r   ztop commentsznewest firstzSorting comments by )r2   r  	to_screenr  r4   r  r  _extract_continuation_ep_data_extract_continuationr/   lower)r  _continuationr  comments_header_rendererexpected_comment_countsort_menu_itemsort_continuation_ep	sort_textr)  get_single_config_argry  trackers           @rz  extract_headerz2YoutubeIE._comment_entries.<locals>.extract_header	  s=    M# +7AY+Z()-,k?*L& *5+AGK(NN]3I2J)#TU%()>~)NRW)W%X"!(,lnr"t "zwy  (6'9'9:K'L'RPR$ $ B BCW X  !G\`\v\v  xF  ]G$'(:(:7(CD	 2D2I~I!5ioo6G5HIJ  10 ! r|  c              3     	K   |sdd<   |k  ry | D ])  }|sd   k\  rd  t        |d       }|s+t        ||fddggt        i       }j                  ||      }nzt	        |ddt        hf      xs t	        |dt        hf      }t	        |d	t
        hf      st	        |fd
      }	j                  |	|      }|rt	        |dt
        hf      d u|d<   |s|d   }
|j                  d      rd   j                  |
       |
d   v r9|
d   v r|j                  d      sj                  d|rdnd d       d   y d   j                  |
       dxx   dz  cc<   |rdndxx   dz  cc<   | t        |d t              }|st	        |ddt        hf      }t	        |d       x}r) |||
|dz         D ]	  }|s|  t	        |d       sˉdxx   dz  cc<   j                  ||
|dz         }t        j                  |t        t        dd   z
                    E d {    , y 7 w)Nr   current_page_threadtotal_parent_commentsc                     | d   S NcommentThreadRendererr  r  s    rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    QG^E_ r|  commentRenderer)commentr>  r  defaultcommentViewModel)
commentKeytoolbarStateKeyc                     |d   v S )N	entityKeyr  )r  rC  comment_keyss     rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    !K.\hJh r|  
pinnedTextr  r[   pinned_comment_idsseen_comment_idsz?Detected YouTube comments looping. Stopping comment extraction zfor this threadr   z$ as we probably cannot get any more.running_totalr   total_reply_commentsc                     | d   d   S )NrepliescommentRepliesRendererr  r  s    rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    q|D\7] r|  
subThreads.c                     |d   S r<  r  r  s     rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    JaHb r|  c                     |d   S )NcontinuationItemRendererr  r  s     rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>
  s    QGaEb r|  )r  r6  depth)r4   r!   r  r  r2   r3  r   r  r  r  _comment_entries	itertoolsisliceminr  )r  entity_payloadsthread_parentthread_depthr  comment_thread_rendererr  r?  
view_modelr  r  comment_replies_renderer
subthreadsthreadsentrycomment_entries_iterrG  extract_thread	max_depthmax_parentsmax_repliesmax_replies_per_threadry  r6  r  ri  s                   @rz  rc  z2YoutubeIE._comment_entries.<locals>.extract_thread	  s     12-.<'# Ih$1H)I[)X*1';_*`' ''00':>OQo=p<q&*B(8$ #778H-XG
 %%<?QSehlgm>no O'2Dtf1MN  $0
=^ad`e<f#gL' +O=hiH"33HmLG/;JX[W\H]/^fj/j,$T]
;;{+0155jA );!<<!W-A%BB7;;WbKc !''Y0=,2FFjlm ./33J?(A-(-.E\]abb] ,3+-]_c,e( ,!-.FWZ]a\bHc!dJ".z;b"ccwc%3G_jZfijZj%k ,E$&+,  ,J8bc %12a72+/+@+@0%)7,QRBR ,A ,T(  )//0Dc.A{WMcEd7d0eGg  h h hQIhPhs   FI6I
A/I9I:	Ir   )rK  r"  r9  r:  rL  rJ  rI  c              3   R   K   | ]  }t        |t        j                          ! yw)rA  N)r"   sysmaxsizer  ps     rz  r  z-YoutubeIE._comment_entries.<locals>.<genexpr>
  s'      Zm45K3;;//Zms   %'max_commentsr   r"  FT)onResponseReceivedEndpoints.)reloadContinuationItemsCommandappendContinuationItemsActioncontinuationItems)ri  visitor_data(rK  z/~r"  )z$Downloading comment section API JSONz3    Downloading comment API JSON reply thread %d %sr9  z+{}Downloading comment{} API JSON page {} {}z       z replies.r  )r=  rB  r>  r  )item_idr  epri  r   r   check_get_keyszincomplete dataignoreerrors)Tonly_downloadzReceived incomplete data for a comment reply thread and retrying did not help. Ignoring to let other comments be downloaded. Pass --no-ignore-errors to not ignore.zyIncomplete data received for comment reply thread. Pass --ignore-errors to ignore and allow rest of comments to download.expectedr  r  r  r@  r  )r  .messageRendererr  r   max_runszYoutube said: r  r  )r  rv  r-  _build_api_continuation_query_generate_comment_continuationrV  countgenerate_api_headers_extract_visitor_datar   _extract_responser   r3  r.  	get_paramr  r2   r  r  r  CommentsDisabled)ry  root_continuation_datari  r  r  r6  rT  r7  _max_commentsr  continuationresponseis_forced_continuationis_first_continuationcontinuation_items_pathpage_numr   comment_prog_strnote_prefixrx  er  continuation_itemsra  messagerc  r5  rd  re  rf  rg  s   ` `` `                   @@@@@@rz  rU  zYoutubeIE._comment_entries	  s     M	!8P	h P	hf !"!'()*()$'E&)eGZm9=9P9PQ_9`dfcgjkck9kZmV{K1GUV u112HI!& &$ 
  ==d>a>abj>klL%)"#J!* >	H//e$JdJdemJn/oG!"7?#;"<Bw{?S>TTUV1}("HK"W 568H[J #JK LRR!'IRv2.0 "N)7;3G13LQXYhQimnQn#N$; #NS #N0E,  LL#N "O11 UG+#1 2 3* &+"L$X0BDWYdfilpkq/rsI&28=Tdhrt&u "(#12D#EL,1)#+,>	6SXY  E K   $99:GY:Z[a>	@ ..!79epq.r6go&>!&C.	 :XY]^''' 'D67K " 
 %A66~~n59PP++st ,e%)+ + !s?   EJH&(A0JAJ&	J	/AJ0J6JJ		Jc                 v    d|  d|  d}t        j                  |j                               j                         S )zZ
        Generates initial comment section continuation token from given video id
        zz2'""z0 x0 Bcomments-section)base64	b64encodeencodedecode)r  tokens     rz  r  z(YoutubeIE._generate_comment_continuationu
  s:    
 !
*?zImn/6688r|  c                       fd}t         j                  ddg      d         }t        j                   ||      d|      S )zEntry for comment extractionc              3      K   t        d t        | di       D        d       }j                  |      E d {    y 7 w)Nc              3   H   K   | ]  }|j                  d       dk(  r|  yw)sectionIdentifiercomment-item-sectionNr  )r  items     rz  r  zIYoutubeIE._get_comments.<locals>._real_comment_extract.<locals>.<genexpr>
  s-      L88/04JJ Ls    ").itemSectionRendererri  )r  r2   rU  )r  rendererry  r  ri  s     rz  _real_comment_extractz6YoutubeIE._get_comments.<locals>._real_comment_extract
  sI      L!-h8T^`!aLMQSH ,,XuhGGGs   6A?Arn  r   r   )r"   rv  rV  rW  )ry  ri  r  r  r3  r  rn  s   ```    rz  _get_commentszYoutubeIE._get_comments}
  sE    	H #4#:#:>B4#PQR#ST 5h ?LQQr|  c                      dddS )NT)contentCheckOkracyCheckOkr  r  r|  rz  _get_checkok_paramszYoutubeIE._get_checkok_params
  s    "&t<<r|  c                 h    ddi}|||d<   |r||d<   d|i}|rddi|d<   d	|i| j                         S )
Nhtml5PreferenceHTML5_PREF_WANTSsignatureTimestampencryptedHostFlagscontentPlaybackContextpyvTadPlaybackContextplaybackContext)r  )r  rh  use_ad_playback_contextencrypted_contextcontextplayback_contexts         rz  _generate_player_contextz"YoutubeIE._generate_player_context
  s{     1
 ?,/G(),=G() %g
 #t501
 /
%%'
 	
r|  clientr  c           	         | j                  dg t        d      }|D ]   }|j                  d      \  }}}|s| j                  d| dd       3|j                  d      \  }}}	|j	                         |k7  r\|s1| j                  d	| d
d       t        j                  j                  }	|	j	                         |j                  k7  r	 t        j                  t        j                  t        j                  j                  |                  j                         c S  y # t         j"                  t$        f$ r | j                  d| d|	 dd       Y ;w xY w)Npo_tokenT)ie_key	casesense+zPInvalid po_token configuration format. Expected "CLIENT.CONTEXT+PO_TOKEN", got ""r  .zpo_token configuration for zo client is missing a context; assuming GVS. You can provide a context with the format "CLIENT.CONTEXT+PO_TOKEN"z#Invalid po_token configuration for z	 client: z/ PO Token should be a base64url-encoded string.)rv  rH   	partitionr  r.  r  r
   GVSr  r  urlsafe_b64encodeurlsafe_b64decoderE  rF  unquoter  binasciiError
ValueError)
ry  r  r  po_token_strs	token_strpo_token_metasepr  po_token_clientpo_token_contexts
             rz  _get_config_po_tokenzYoutubeIE._get_config_po_token
  s   //
By\`/a&  	I+4+>+>s+C(M3##@@I{!MX\ $ ^ 5B5L5LS5Q2OS"2$$&&0  1& :Z Z" ! $ $3#6#6#<#< %%'7==8//0H0HI]I]^fIg0hipprr5 	6 NNJ/ ##9&'((WY" $ $ s   
AD!!3EErY   c                 z   d}t        |dddt        j                  j                  hf      }dt        |d      v r| j	                  | d| dd	
       d	}|r;|t
        j                  k(  r(|s&| j                  s|s| j                  d| dd	
       y|t
        j                  k(  r|s| j                  d| d       y| j                  ||      }|r`|r8|t
        j                  k(  r%|s#| j                  r|s| j                  d| d       | j	                  | d|j                   d| d       |S |r9|t
        j                  k(  r&|s$| j                  r| j                  d| dd	
       y | j                  d||j                  |||||||	|
|d|}|r&| j	                  | d|j                   d| d       |S y)a  
        Fetch a PO Token for a given client and context. This function will validate required parameters for a given context and client.

        EXPERIMENTAL: This method is unstable and may change or be removed without notice.

        @param client: The client to fetch the PO Token for.
        @param context: The context in which the PO Token is used.
        @param ytcfg: The ytcfg for the client.
        @param visitor_data: visitor data.
        @param data_sync_id: data sync ID.
        @param session_index: session index.
        @param player_url: player URL.
        @param video_id: video ID.
        @param webpage: video webpage.
        @param required: Whether the PO Token is required (i.e. try to fetch unless policy is "never").
        @param kwargs: Additional arguments to pass down. May be more added in the future.
        @return: The fetched PO Token. None if it could not be fetched.
        Fr0  .serializedExperimentFlagstrue).html5_generate_content_po_tokenr  z;: Detected experiment to bind GVS PO Token to video ID for z clientTr  z!Unable to fetch GVS PO Token for zz client: Missing required Visitor Data. You may need to pass Visitor Data with --extractor-args "youtube:visitor_data=XXX"Nz$Unable to fetch Player PO Token for z" client: Missing required Video IDzGot a GVS PO Token for z client, but missing Data Sync ID for account. Formats may not work.You may need to pass a Data Sync ID with --extractor-args "youtube:data_sync_id=XXX"z: Retrieved a z PO Token for z client from configz client: Missing required Data Sync ID for account. You may need to pass a Data Sync ID with --extractor-args "youtube:data_sync_id=XXX")r  r  ri  rs  data_sync_idsession_indexr  r  video_webpagerequired_gvs_bind_to_video_idr  )r2   rE  rF  r*   r  r
   r  is_authenticatedr  PLAYERr  r  _fetch_po_token)ry  r  r  ri  rs  r  r  r  r  r3  r  r  gvs_bind_to_video_idexperimentsconfig_po_tokenr  s                   rz  fetch_po_tokenzYoutubeIE.fetch_po_token
  sG   2  %"5(#/JV\\MbMbLc+e f\+/[\\* ##)('3>B  D $( 
 7o&9&99 )>)>G[3F8 <e fqu   w o,,,X6vh>`ac33FGD w/*=*==$)>)>G[##-fX 6k lm znU[T\\opq"" '_%8%88RVRgRg3F8 <g hsw   y '4'' 
MM%%'!!"6
 
 znU[T\\cdeO r|  c           	         |j                  d      }| j                  ddgt              d   }|dvrd}|dk(  s|dk(  r|j                  d	d
      sy | j                  d      j	                         }| j
                  j                  j	                         }t        |       t        ||       | j                  d |      }t        d%i dt        |      dt        |d      d|d|d|j                  d      d|j                  d      d|j                  d      d| j                  d|j                  d      d|j                  d      d|j                  d      d| j
                  j                  d|j                  dd
      dt        d|      xs t        d| |      d|d| j                  d      d | j                  d!       d"| j                  d#      d$d
}| j                   j#                  |      S )&Nr  	fetch_potr   )r  r   )neverautoalwaysr  r  r  Fhttp_headers)default_clientinnertube_context)ri  INNERTUBE_CONTEXTinnertube_hostinternal_client_namer  r  r  r  rs  r  r  request_cookiejarr  request_proxyr  zhttps://request_headersrequest_timeoutsocket_timeoutrequest_verify_tlsnocheckcertificaterequest_source_addresssource_addressbypass_cacher  )r  rv  rH   r  r  _downloaderproxiesr=   r>   _select_api_hostnamer   r   r2   r  	cookiejarr?   r  get_po_token)	ry  r  r  r  fetch_pot_policyr   r  r  pot_requests	            rz  r  zYoutubeIE._fetch_po_token!  s<   **Y'  22;Y2WXYZ#>>%' F*

:u5 ..0557""**//1ggw'2242O$ 
"7+
*63QR
 *
 "(	

 !**_5
 zz,/
 !**_5
 "22
  N3
  N3
 ZZ
+
 #..88
 #)**-De"L
$ 6@ F(>*: ;WE'
* $+
, !NN+;<-
. $(>>2F#GG/
0 $(>>2B#C1
4 5
: !!..{;;r|  c                 b    t        | d      ryt        | d      d}t        fd|D              S )N)playabilityStatusdesktopLegacyAgeGateReasonT)r  )r  reason)zconfirm your agezage-restrictedinappropriateage_verification_requiredage_check_requiredc              3   4   K   | ]  }D ]  }||v  
  y wr  r  )r  r|  r  reasonss      rz  r  z)YoutubeIE._is_agegated.<locals>.<genexpr>a  s$     ](U\]68v%]%]s   )r2   any)r  AGE_GATE_REASONSr  s     @rz  _is_agegatedzYoutubeIE._is_agegatedW  s:    )\]0[\
 ]6F]]]r|  c                      t        | d      dk(  S )N)r  r  
UNPLAYABLEr2   )r  s    rz  _is_unplayablezYoutubeIE._is_unplayablec  s    O-LMQ]]]r|  c
                 <   | j                  |||| j                  ||      | j                  |      d   xs | j                  |||      | j                  |      d   xs | j	                  |||            }
d|i}t        t        t        |      d   dt        hf      }| j                  d|gd      d   x}r||d	<   |	rd
|	i|d<   |r| j                  |||d      nd }| j                  ddg      d   dk7  xr t        t        |dt        hf      }d }t        |      d   dk(  rt        |d      }|j                  | j                  |||             | j                  |d|||
d|dj                  |j!                  dd      j#                                     xs d S )Nr   r   )ri  r  rs  r  delegated_session_iduser_session_idvideoIdPLAYER_PARAMSplayer_paramsTr  r   poTokenserviceIntegrityDimensionsFr  r  falseSUPPORTS_AD_PLAYBACK_CONTEXTr  embedded)r0  ,WEB_PLAYER_CONTEXT_CONFIG_ID_EMBEDDED_PLAYERr  )rh  r  r  playerzDownloading {} player API JSONr   )rv  rw  r  ri  r   r  r  r   )r  _extract_session_index_parse_data_sync_id_extract_delegated_session_id_extract_user_session_idr2   r   r   r3  rv  rl  r  r  r  r  r   rA  strip)ry  r  r  webpage_ytcfgplayer_ytcfgr  
initial_prrs  r  r  r   yt_query
default_ppr  rh  r  r  s                    rz  _extract_player_responsez"YoutubeIE._extract_player_responseg  s   ++!%55m\R((6q9 _55mZQ]^ ((6q9 Z00
LY , 
  x
 " 7 ? BOVYUZ[]
 33Oj\]a3bcdee=e!.HX6?5JH12eod//*m[`/auy ##$=yI!LPWW b.9WZ^Y_0`a 	  !"6*1-; ,\ <t !u 	))(?"3 * 5	6 %%t!188S9Q9W9W9YZ	 & 
 
 	r|  c                 f   g }g }t        d | j                  j                  j                         D              }|r| j                  n1| j
                  r| j                  n|s| j                  n| j                  }t        d t        D        d d      }| j                  d      D ]  }	|	dk(  r|j                  |       |	dk(  r|j                  |       1|	j                  d	      r|j                  |	d
d         W|	|vr| j                  d|	 d       q|j                  |	        |s,|s*|| j                  k(  r| j                  dt          dd       |s|j                  |       |D ]  }
|
|v s|j#                  |
        |st%        dd      | j
                  r|j'                  d      s| j)                  |      rd|vr|j                  d       |D 	cg c]  }	t        |	   d   r|	 }}	|D ]*  }	| j                  d|	 dd       |j#                  |	       , t+        |      S c c}	w )Nc              3   <   K   | ]  }|j                           y wr  is_availablerl  s     rz  r  z3YoutubeIE._get_requested_clients.<locals>.<genexpr>  s     "c1>>#3"c   c              3   2   K   | ]  }|d d dk7  s|  y w)Nr   r  r  )r  r  s     rz  r  z3YoutubeIE._get_requested_clients.<locals>.<genexpr>  s     IvbqzS7HVIs   c                     t         |    d   S )Npriority)r   )r  s    rz  r  z2YoutubeIE._get_requested_clients.<locals>.<lambda>  s    08D r|  T)r  reverser  rA  allrL  r   zSkipping unsupported client "r  a  No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add  --js-runtimes RUNTIME[:PATH]  to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See  z  for details on installing oner  z%No player clients have been requestedr{  is_music_url	web_musicSUPPORTS_COOKIESzSkipping client "z#" since it does not support cookies)r  r  	providersvalues_DEFAULT_PREMIUM_CLIENTSr  _DEFAULT_AUTHED_CLIENTS_DEFAULT_JSLESS_CLIENTS_DEFAULT_CLIENTSsortedr   rv  extend
startswithappendr  r   remover   r  r/  r%   )ry  r~   r  is_premium_subscriberrequested_clientsexcluded_clientsjs_runtime_availabledefault_clientsallowed_clientsr  excluded_clientunsupported_clientss               rz  _get_requested_clientsz YoutubeIE._get_requested_clients  se   ""cT=O=O=Y=Y=`=`=b"cc-BD))151F1F--5I--&&	 	 !I"3IDdT --o> 
	1F"!((95!((9""3' ''qr
3.##&CF81$MN!((0
	1 "%5?dNjNj;j &&EG SW	   X !$$_5/ 	:O"33!((9	: ! !HSWXX  !!.1T5F5Fs5KQ\duQu!((5 &7#!>OPV>WXj>k# # . 1##&7x?b$cos#t!((01 +,,#s   H..H.c                 *    t        |d      x}|k7  r|S y )N)r  r  r	  )ry  prr  pr_ids       rz  _invalid_player_responsez"YoutubeIE._invalid_player_response  s$     ""&ABBExOL Pr|  c                 :  # d }|r#| j                  | j                  || d|d      }g }g }	|r)| j                  ||      s|j                  i |dd i       t	              #d d d   #fd}
d}d x}x}}i }rod}t        j                               \  }}}||k(  r|ni }d| j                  d      vr||k7  r| j                  ||      xs |}|xs | j                  |||	      }| j                  |      j                  d
      }d| j                  d      v rd}d }|s|s|r| j                  |      }d}d }||k(  rd| j                  vr|}|xs | j                  |||      }|xs | j                  |||      }|||| j                   r|nd |r|nd || j#                  ||      |xs | j                  |      d}| j                  |      d   }|rd n= | j$                  d,dt&        j(                  i|d|j*                  xs |j,                  i}t/        j0                  | j$                  fdt&        j2                  i|}t/        j0                  | j$                  fdt&        j4                  i|}	 |xs | j7                  |||xs |||||||	      }| j                  ||      x}r|||<   n|rt=        |xs | j                  |      d      }|j?                  di       }||t@        <   ||tB        <   tE        |      |tF        <   ||tH        <   ||tJ        <   ||tL        <   | jO                  |||      |tP        <   t=        |ddtR        hf      D ]/  } || t@        <   || tB        <   || tL        <   tE        |      | tF        <   1 |r|	j                  |       n|j                  |       |dk(  rS| jU                  |      rB|r@d|v r<tW        d | jX                  jZ                  j]                         D              r |
d       | j_                  |      r|dk7  r |
d|        | j_                  |      r.| j                   s"| ja                  | d| jb                   d       |dk(  xr | jU                  |      }!| j                   r1| j_                  |      s|!r| ja                  | dd        |
d       t=        |dd td        hf      }"|"d!vr| jg                  | d"| d#|"        ro|ji                  |	       |rc| j;                  d$d%jk                  |       d&d%jk                  t	        |j]                                      d'| d(       |st9        d)d*      ||fS |st9        d+      ||fS # t8        $ r}| j;                  |       Y d }~d }~ww xY w)-Nz client initial player responseFr  streamingDatar  c                      | D ]A  }t        |      d   }|t        v s|vsj                  |       j                  |        y y)z? Append the first client name that exists but not already used r   N)r   r   r;  r  )client_namesr  actual_clientall_clientsclientss      rz  append_clientz:YoutubeIE._extract_player_responses.<locals>.append_client  sM    +  7 DQ G $55$K7{3#6r|  r  r  r-  REQUIRE_JS_PLAYERjsTr  )r  rs  r  r  r  r3  r  ri  PLAYER_PO_TOKEN_POLICYr  r  )r  r   r  r!  rs  r  r  r  r  adaptiveFormats.rT   zmade for kidsc              3   <   K   | ]  }|j                           y wr  r'  rl  s     rz  r  z6YoutubeIE._extract_player_responses.<locals>.<genexpr>S  s     XQ(Xr)  web_embeddedzweb_embedded.zT: This video is age-restricted; some formats may be missing without authentication. r  zm: This video is age-restricted and YouTube is requiring account age-verification; some formats may be missingrW   r  r  )OKLIVE_STREAM_OFFLINEAGE_CHECK_REQUIREDAGE_VERIFICATION_REQUIRED: z% player response playability status: zSkipping player responses from r   z* clients (got player responses for video "z" instead of "z")zLAll player responses are invalid. Your IP is likely being blocked by Youtuber{  z%Failed to extract any player responser  )6_search_json_YT_INITIAL_PLAYER_RESPONSE_RErI  r;  r  r   r  rv  _download_ytcfgr5  _get_default_ytcfgr  r<  r  r  _extract_data_sync_idr  r  r  r
   r  r  recommendedr  r  r  SUBSr$  r   r  r2   
setdefaultSTREAMING_DATA_CLIENT_NAME!STREAMING_DATA_FETCH_GVS_PO_TOKENr  $STREAMING_DATA_PLAYER_TOKEN_PROVIDED STREAMING_DATA_INNERTUBE_CONTEXT"STREAMING_DATA_FETCH_SUBS_PO_TOKEN$STREAMING_DATA_IS_PREMIUM_SUBSCRIBER_get_available_at_timestamp%STREAMING_DATA_AVAILABLE_AT_TIMESTAMPr  r
  r  r  r2  r3  r  r+  _youtube_login_hintr3  r  r9  r&  )$ry  rP  r  r3  r~  r  r=  r!  r  deprioritized_prsrQ  tried_iframe_fallbackr  rs  r  skipped_clientsdeprioritize_prr  base_clientr*  r   require_js_playerrG  fetch_po_token_argsplayer_pot_policyplayer_po_tokenfetch_gvs_po_token_funcfetch_subs_po_token_funcr  rH  r  sdr  embedding_is_disabledr  rO  s$    `                                 @rz  _extract_player_responsesz#YoutubeIE._extract_player_responses  s   
**33W!""ABHTY + [J d;;JQ
 JJ<*<ot<='l$B$-	 !&377
7\L#O+B7;;=+Q(FK,2n,D="L 7 7 FF6UcKc#33FHEU#mt'?'?|el'?'mJ $ 7 7 ? C CDW Xt..}==$)!!
&;@Q!66x@
(,%B',=TE_E_,_'n4+E+EmU_am+nL'n4+E+EmU_am+nL ! ,$040E0E4,=j4"!%!<!<]L!Y%H)@)@)H	# 6:5L5LV5TUm5n&(d.Ad.A.A /V'../V2E/V*33T7H7T7T/VO '0&7&7##'Y-<-@-@'YDW'Y# (1'8'8##(Z-<-A-A(ZEX(Z$ .488H"."?-!-))!-!-, 9 . 55b(CCuC*/'$01`AXAXY_A`bu$v!]]?B717-.8O45;?;P787H349Q56;P78<@<\<\]_aikq<r89%b+I3QUPV*WX TA4:A01;RA78>SA:;>B?>SA:;	T
 #%,,R0JJrN ,&4+>+>r+B7 :X$2D2D2N2N2U2U2WXXn-   $N)Bk];<  $T-B-Bj !//3/G/G.HJUY  [ %,~$=$Y$BUBUVXBY!$$$*;*;B*?CXj !L LW[  ] m,!"':Hse&LMFmm  H:Rx7\]c\d!efe h 	

$%1#((?2K1L M447HHSAWAWAY=Z4[3\\jksjttvxy $bmqs s J  !HIIJM " ##A&s   9"U5 5	V>VVc                 R    |dk(  r| j                  d      s|dk(  r|xs ddkD  r|S y y )Nr  live_from_start	post_liver   i   )r  )ry  rq   rk   s      rz  _needs_live_processingz YoutubeIE._needs_live_processing{  s8    I%$..9J*K;.HMX3M 4N.r|  c           	          | d| d| d| dt          	}|g | j                  | j                  v r| j                  |d       y | j	                  |d       y )Nr]   client z formats require a GVS PO Token which was not provided. They will be skipped as they may yield HTTP Error 403. You can manually pass a GVS PO Token for this client with --extractor-args "youtube:po_token=z+.gvs+XXX". For more information, refer to  Tr  )PO_TOKEN_GUIDE_URLr7  r5  r  r  )ry  r  r  protomsgs        rz  _report_pot_format_skippedz$YoutubeIE._report_pot_format_skipped  s}    j;-xw 7llwkx y//A.BD 	 QD11QD4P4PQQSD1t4r|  c                 0   |xs | d| d| dt          }t        | j                  d      | j                  d      | j                  d      f      }|r|g | j                  | j                  v r| j                  |d       y | j                  |d       y )	Nz: Some z client subtitles require a PO Token which was not provided. They will be discarded since they are not downloadable as-is. You can manually pass a Subtitles PO Token for this client with --extractor-args "youtube:po_token=z-.subs+XXX" . For more information, refer to  writesubtitleswriteautomaticsublistsubtitlesTr  )r  r  r  r7  r5  r  r  )ry  r  r  r  subs_wanteds        rz  _report_pot_subtitles_skippedz'YoutubeIE._report_pot_subtitles_skipped  s     Ej} -2 3> ?//A.B	D 	 NN+,NN./NN?+- . k-dt/D/D-dtGcGc-ddSD1t4r|  c              #      #$%&'()*+,-./0123456789:;<=>?@K   d#d%d$%d $d i4t        j                  t              g c3?i dd ic29i }t        g d      8d j	                  d      v < j	                  d      +d	+v;d
+v & j	                  d      rd& j
                  j                  d       d 1d >#fd(d .i /$%4fd, fd}t               5t               :5: fd=t        |ddt        hf      D ]  }t        |ddt        hf      D ]  }	|	j                  d      }
d }|
sNt        j                  j                  |	j                  d            }t        |ddt        hf      }
t        |d      }|r:j                  t        |             t        |
t        hddf      x}s5j                  |        5j!                  t        |d|hf              |D ]  }t        |d      }|s|t"           *|t$           0|t&           6|j                  t(              )|t*           't        |d      @d -dB&),289 f	d 	7#&'()*+,-./01367 ;<=>?@fd!} |       E d {     j-                        }t         j	                  d"            }|d#k(  s|r;r|j                  d$       ;rd#k(  r|d#k7  r|j                  d%       $%&'23489 fd&}d$|vxr |j                  d'      }|rt        j                  j/                  |      j0                  }t3        j4                  d(|      x}r|j7                  d)d*      \  }}nd+}d} ||      }|r:<s8 =         j9                  d|      }|r|j;                  d,| d,|       }||v } j=                  )      d-   t>        j@                     } .|06      }/j                  ) *|xs |jB                  .            }|r |jE                  d/      d0| z   })/vr|/)<   |r)|s'd1 j	                  d      vr jG                  )d$       n|s|stI        || | 2      } jK                  |d3dd#k(  4      \  }}t        |ddt        hf      D ]  })|t(        <     jM                  ||      }|D ].  } ||d$) jO                  d5|d   d6d 7      |xr |       s+| 0 d%|vxr |j                  d8      } | st        j                  j/                  |       j0                  }d} ||       }|r:<s8 =         j9                  d|      }|r|j;                  d,| d,|       }||v } j=                  )      d-   t>        jP                     } .|06      }/j                  ) *|xs |jB                  .            }|r |jE                  d/      d0| z   })/vr|/)<   |r*|s(d1 j	                  d      vr jG                  )d%       *|s|r0tI        | |2      }  jS                  | d9      \  }!}t        |ddt        hf      D ]  })|t(        <     jM                  ||      }|!D ]e  }|d:   }" ||d%)|"|xr |       stU         jO                  d;|j                  d<      xs |d   d=d 7            |d><   |rd|d?<   |"|d@<   )|dA<   | g  | y 7 iw)CNi   rl   r"  r   )tinyaudio_quality_ultralowaudio_quality_lowaudio_quality_mediumaudio_quality_highsmallmediumlargehd720hd1080hd1440hd2160hd2880highresrS  r  r  
incomplete	duplicateinclude_duplicate_formatsTzv[youtube] include_duplicate_formats extractor argument is deprecated. Use formats=duplicate extractor argument insteadc           
      f    dt        | t        hddt        j                  j                  hddf      v S )N1xtags.sr)r2   r*   rE  rF  )f_urls    rz  is_super_resolutionzEYoutubeIE._extract_formats_and_subtitles.<locals>.is_super_resolution  s2    ,uz7C&,,J_J_I`bfhk.lmmmr|  c                 8     dj                   fd|D              S )Nr   c              3   (   K   | ]	  }|     y wr  r  )r  iss     rz  r  zNYoutubeIE._extract_formats_and_subtitles.<locals>.solve_sig.<locals>.<genexpr>  s     .A1Q4.s   )r&  )r  specs   ` rz  	solve_sigz;YoutubeIE._extract_formats_and_subtitles.<locals>.solve_sig  s    77....r|  c                 L     t         fdt        d d         D              S )Nc              3   t   K   | ]/  }d t        d    d| dt        |z   dz
  d          i      i 1 yw)r~   r  rL  r   filesizeN)r9   rX  )r  range_start
CHUNK_SIZEr  s     rz  r  zTYoutubeIE._extract_formats_and_subtitles.<locals>.build_fragments.<locals>.<genexpr>  s^      F  '%}Ac+
2JQ2NPQR\P].^-_`3  Fs   58r   r  )r   r  )r  r  s   `rz  build_fragmentszAYoutubeIE._extract_formats_and_subtitles.<locals>.build_fragments  s0     F "'q!J-!D	F F Fr|  c                 f    | j                   xr$ | j                  xr | xr | j                  xr | S r  )r  not_required_with_player_tokennot_required_for_premium)policyr=  has_player_tokens      rz  gvs_pot_requiredzBYoutubeIE._extract_formats_and_subtitles.<locals>.gvs_pot_required  s?     T>>SCSTT88R=RSUr|  c                    | j                  d      xs i }|j                  d      xs d}|j                  dd      j                  d      d   xs d }d|j                         v rt        |d      d	fS d
|j                         v r|rj                        s|<   |fS |j                  d      r|rj                        s|<   |fS |dfS )N
audioTrackr  r   r[   r  r   descriptivedescoriginalaudioIsDefaultr  )r  r  r.  r#   )
fmt_streamaudio_trackdisplay_namelanguage_codeDEFAULT_LANG_VALUEORIGINAL_LANG_VALUElanguage_maps       rz   get_language_code_and_preferencezRYoutubeIE._extract_formats_and_subtitles.<locals>.get_language_code_and_preference  s    $..6<"K&??=9?RL'OOD"5;;C@CKtM 2 2 44$]F;S@@\//11 )9)9:M)N8EL!45$&999/0 )9)9:L)M7DL!34$&888 "$$r|  c                     t        |       sy j                  dt        j                  j	                  |       j
                  dd       S )Nz/n/([^/]+)/zn challengeri  )r:   r9  rE  rF  rG  r  )r  ry  s    rz  get_manifest_n_challengezJYoutubeIE._extract_formats_and_subtitles.<locals>.get_manifest_n_challenge  sE    |,%% 5 5l C H Ht & - -r|  c                  *   g } 	r?| j                  t        t        j                  t	        t        	      
                   rt               }D ])  }j                  d
|d      s|j                  |       + j                  |       | j                  t        t        j                  t        D cg c]*  }dj                  t        t        t        |                  , c}
                   | rj                   j#                  |       D ]  \  }}|j$                  t        j                  k(  r{|j&                  j(                  j+                         D ]S  \  }}t-        |      }j/                  |D cg c]  }t1        |       c}d
|d       |v sCj3                  |       U |j$                  t        j                  k(  s|j&                  j(                  j+                         D ]/  \  }}j/                  |d
|       |	v s	j3                  |       1  dt4         }rj7                  d	| d
       	rj7                  d| d
       j9                          	j9                          y y c c}w c c}w )N)
challengesr  )typer  inputsigfuncsTrV  r   nzEnsure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to  z7Signature solving failed: Some formats may be missing. r  z9n challenge solving failed: Some formats may be missing. )r;  r   r   Nr   r  r  rb  r  difference_updateSIGr   r&  r[  chrr  r  
bulk_solver  outputresultsrI  rz  re  ordr<  r   r  clear)challenge_requestscached_sigfuncsspec_id_challenge_requestchallenge_response	challengeresultr  help_messagen_challengesr  s_challengesry  r  s            rz  solve_js_challengeszEYoutubeIE._extract_formats_and_subtitles.<locals>.solve_js_challenges  s   !#"))*<(**%)T,5GT^_+a b "%%+ 5G88ZQXim8n'++G45 ..?"))*<(,,%+Ua#b'BGGCU7^,D$E#b#-/+0 1 ">B>P>P>[>[\n>o ?:&(:)../2E2EE1C1J1J1R1R1X1X1Z =-Iv&))nG <<17 8AQ 8* *GD = J  ',6 , 3 3G <= ,00O4E4EE1C1J1J1R1R1X1X1Z ?-Iv <<VS*V_`(L8 , 3 3I >??&3 4A/C 
  ''QR^Q_`!)T ( ;  ''ST`Sab!)T ( ;
 ""$""$G " $c !9s   9/J J.rK  rU  r~   signatureCipherr  r   r  )hlsManifestUrldashManifestUrl)rU  .c                 p    t        | j                  d            t        | dd      | j                  d      fS )Nr  r  r[   isDrc)r/   r  r2   )r  s    rz  get_stream_idz?YoutubeIE._extract_formats_and_subtitles.<locals>.get_stream_idH  sC    ":>>&#9:LUacg<hjtjxjx  zA  kB  B  Br|  Fc                 L  	 t        | j                  d            }| j                  d      xs i }| j                  d      }t        | j                  d            }|dk(  s|s$| j                  dd      j                         xs |}|dk(  rd}|r|r||<   |r||<    |       \  }}	t	        | j                  d	            }
|
r8d
 d| d}dk(  r|j
                  rdnd dz  }j                  |d       t        | j                  d      xs | j                  d      d      }t        | dt        d      hf      t        fd      }|rj                  d
 d| dd       |r'dj                  d      vrj                  |       y | j                  d      xs |j                  dd      xs d}t        | j                  d            xs d}i d t        | j                  d!            d"t        | j                  d#            d$t        || j                  d%      rd&n|rd'nd       d(t        t        |j                  d)      |j                  d*      xr d+d,-      || j                  d%      xr d.|xr d/t        | d0       t        | d1       |xr d2|xr d3j                  d4      xs xr t!              d5-
      d6|d7k(  rd8nd9d:|v rd;ndz   d|d<kD  r|nd d=| j                  d>      d|d |      t	        | j                  d%            d?z  z
  d@|
dA|dBt#        |      dCt        | j                  dC            dD|dE|	dF|rdGn|dk(  rdHnd }t%        j&                  dI| j                  dJ      xs d      }|rFt)        |j+                  d<            |dK<   |j-                  t/        |j+                  d?                   dL|j                  dM      |j                  dN      fv }|r|j                  dK      r|dK   dOz   |dP<   |S )QNr  r  qualityheightr  audioQualityr   r  drmFamilieszSome r  z6 formats have been skipped as they are DRM protected. rp  Your accountThe current sessionz may have an experiment that applies DRM to all videos on the tv client. See  https://github.com/yt-dlp/yt-dlp/issues/12563  for more details.Tr  averageBitratebitrater  approxDurationMsr  c                       dz  k  S )Nr  r  )rk   format_durations   rz  r  zYYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream.<locals>.<lambda>p  s    oA.M r|  z9 formats are possibly damaged. They will be deprioritizedmissing_potr  qualityLabelaudio_quality_fpsr   asraudioSampleRater  contentLength	format_idr  drcr  format_noter  r  	(default)r  r!  DRCzAI-upscaledc                 H    | d   j                  dd      j                         S )NprojectionTypeRECTANGULARr   rA  r.  r  s    rz  r  zYYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream.<locals>.<lambda>  s$    a8H6I6Q6QR_ac6d6j6j6l r|  c                 H    | d   j                  dd      j                         S )NspatialAudioTypeSPATIAL_AUDIO_TYPE_r   r  r  s    rz  r  zYYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream.<locals>.<lambda>  s$    a8J6K6S6STikm6n6t6t6v r|  DAMAGEDMISSING POTverboser  source_preference22r  Premiumd   r   audio_channelsaudioChannelsr  has_drmtbrfilesize_approxwidthlanguagelanguage_preference
preferencer  z.((?:[^/]+)/(?:[^;]+))(?:;\s*codecs="([^"]+)")?mimeTyper]   noneacodecvcodec_dash	container)r/   r  r"   r.  r  r  r  r   r2   r3   rv  r  rA  r#   r4   r  r   r   r  matchr$   r  r  r&   )r  r  r  super_resolutionr  r  r  r  r  r  r  r  r  
is_damagedr^  r  dct	mime_mobjsingle_streamr  all_formatsr  rk   r  itag_qualitiesqres_qualitiesry  r  s                      @rz  process_format_streamzGYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_streamK  s   ":>>&#9:(nn\:@b$..3$Z^^H%=>f$G(nn^R@FFHSGG 4<$G/6t,07f-5UV`5a22z~~m<=!+hug=stC"d*151F1F~Lab cd e
 ''X'F#JNN3C$D$a
W`Hacgh".z<NQ^eiQjPk;l"m
 &&MN
''}HUG;tuw  LP ( Q =8O8OPY8Z#Z33Hk5Q!~~n5dIY[]9^dbd!*.."78=A;z~~6G'HIJNN?,K L  t!+!8%5T!"$ "=%koom&DkooVfFgFwlw  @C  DjnnW5?%AQAcVc
,lm
,vw"0y+2O-	2AkeGXYdGe"$$  (""PY]aPagh)i!" #'3t#$ %jnn_&E%& f'( qzD1H,IA,MM)* w+, 3-. &'8o'N/0 [)@A12 34 *+>58 !#tt|QU9< HHEz~~V`GaGgegi	!-iooa.@!ACJJJ|IOOA,>?@ &3778+<cggh>O*P P SWWU^'*5zG';C$
r|  c            	   3   h  K   d} g })D ]  }|j                  d      r$r|j                  d      dk(  rt        |j                  d            sG |      }s|(v rV#j                        d   t        j                     }|d   dvxr
  |       }j                        xs  |xs |j
                  	      }|r	vr|<   |j                  d
      }d\  }}	|s |       t        j                  j                  |j                  d            }	t        |	d
dt        hf      }t        |	d      }t        |	|%xs !|f      shd}
dv r(#j                  |
j                  * dd      d       n8d#j                  rdnd }#j                  |
j                  d|      *d        "|| |xr |  |            }|s|rW%r &        #j!                  d!t#        |      d      }|s|dj                  t        |	d      xs d '||            z  }t        |      }|j                  d      r8%r@|d   d   } &        #j!                  d!|      }|sft%        |d|i      }|rt%        |d|i      }||d
<   |d   r9|d      j'                  | |j                  d       f       (j)                  |       d!vr|d"<   |j)                  |        |D ]>  }sd#v r$|d$   ri |r|d%    d&n|d%   d' |      d( sd#vs4d)i|d*<   | @ y w)+NhttpstargetDurationSecr  FORMAT_STREAM_TYPE_OTFr  GVS_PO_TOKEN_POLICYr   )18r  r~   r  r  r  z{}Some {} client https formats have been skipped as they are missing a URL. {}. See  https://github.com/yt-dlp/yt-dlp/issues/12482  for more detailsrX   r]  z1YouTube is forcing SABR streaming for this clientTr  z@YouTube may have enabled the SABR-only streaming experiment for zyour accountzthe current sessionr   )r  r!  r  rV  z&{}={})spr  	signaturer  potr  r  r  available_atdashyr  r  z-dashyhttp_dash_segments)r  r  r  http_chunk_sizedownloader_options)r  r  ra  r   HTTPSrc  rE  rF  r*   r2   r:   r.  r  r   r  r  rb  rz  r9   r  r;  )+r  
https_fmtsr  	stream_id
pot_policyrequire_po_tokenr  fmt_urlencrypted_sigscmsg_tmplr  fmtr  r  n_challengen_resultr  r&  r6  r  r  fetch_po_token_funcformat_typesr  r  r  gvs_potsr=  r  itagsrq   player_token_providedr  r*  ry  skip_bad_formatsskip_player_jsr  r  
stream_idsstreaming_formatsr  s+                    rz  process_https_formatszGYoutubeIE._extract_formats_and_subtitles.<locals>.process_https_formats  s    
"3 a+J!~~&9:?O 
 "~~f-1IIRVWaWeWefsWtRu  -j 9I&$
2$373J3J;3WXm3n  pA  pG  pG  4HJ "!F2 g,Z9NPef %
 ![1 d.8H8bJLbLbc   &h64<H[1(nnU3G(2%M2" 9D#\\22:>>BS3TU".rE1{m3L"M(4R(B"B1M:}#]^!k %  +.CC $ 0 0'/jO[$W2Ydh !1 !j
 'g9=9N9N~Ti&j%l !$ !% 3 3HOOBUX4Y[cos 3 t$/"E7G7XPXL)<W)EGC   %)$+-#@@&
C4FW[  A  ]#$8??(Z8GK%mT:$< <
 %W-Eyy~)$&+Cjm+-#'#D#DS*Va#b'$"27S(O"L"27UH<M"N!(CJ |il+//
8K0LM")))4 #*BB.:N+%%c*Ca+F & 
"C#w,'>C
O!HSC,<+=V)DY\]hYi(<)8)=	  #g\&A5F
4S01!	
"s   L L2$L2r   r  hlsdashc                      j                  d      f}	s||   v rydvr
 d<    j                  d      d d<   |dk(  rdk(  rd	k7  r dxx   d
z  cc<   |r-t         j                  d      dd       d<    dxx   dz  cc<   |   j                  |       |r	r| d  d<   n)t        fd|   D              r| d  d<   n|r| d<    j                  d      }|r.|   k(  r&t         j                  d      dd       d<    d<   n/|r-|   k(  r%t         j                  d      dd       d<    d<   |dv r-t         j                  d      dd       d<    dxx   dz  cc<    j                  t	         d       d             d<    d   dk(  r- j                  d      r t         fd                d<   j                  d      s	r)t         j                  d      t        |      d       d<    j                  d       r d    d
k  r d = dk(  r# j                  d!      rd" d!<    dxx   d#z  cc<   y$)%Nr  Fr5  r6  r  r  rU   rQ  r  r   r  r	  r  r!     rL  r  c              3   .   K   | ]  \  }}|k7    y wr  r  )r  rm  r  r  s      rz  r  z\YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<genexpr><  s     <1e<s   z
(original)r  r  )616235r  r  c                 0    | d   j                  d      d   S )Nr  rL  r   )r  )r  s    rz  r  z[YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<lambda>M  s    ;I]I]^aIbcdIe r|  r  r  c                 &    t        | d   z
        S )Nr  )abs)r  r  s    rz  r  z[YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<lambda>O  s    TWXY\]^f\gXgTh r|  )r  r
  r  r  r  mayber"  T)r  r#   r  r  r4   rX  r  r   )r  r  r  r  r  r  	lang_coder  r  r&  r6  r'  rJ  r  rq   r(  r)  ry  s   ``     rz  process_manifest_formatzIYoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format$  s   aeeJ/0"seDk'9  &>>(4An%55,-5-/A)* ,.5E>kU^F^)*a/*'4QUU=5I=`c'dAm$)*b0*d$K(,vQug%6AkN<d<<(,vQug%6AkN%)AkNEE*-	l;N.O!O'4QUU=5I<_b'cAm$/BA+,9=O0P#P'4QUU=5I;^a'bAm$/AA+,>)'4QUU=5I9\_'`Am$)*c1* !3!3GA?e4fhj!kl)Y<2%!%%/#$]3}Jh3i%j#kAiL>>),'4m,.?.LTX(ZAm$55<AeHM%E>aeeI&6#*AiL)*a/*r|  r  z6(?P<path>.+)(?P<suffix>/(?:file|playlist)/index\.m3u8)r  suffixr   z/n/r/  r1  r   z/pot/r  )r  r^   )r  livez/itag/(\d+)r  ri  r  r  r  z/clen/(\d+)r  z	file sizer  r  r  r  F)+collectionsdefaultdictr  r+   rv  r  deprecated_featurer2   r  r  rE  rF  r*   r:   r  rz  r  rg  rk  rh  rf  rm  r  rG  r  r  r  r  rb  rA  ra  r   HLSrc  rstripr  r8   #_extract_m3u8_formats_and_subtitles_merge_subtitlesr9  DASHr  r"   )Ary  r  r  r  rq   rk   	subtitlesr  streaming_datar  r@  s_challengerB  rE  rG  rP  needs_live_processingskip_manifestsr]  hls_manifest_urlmanifest_pathrP  manifest_suffixsolved_nrF  r>  r?  r  r  subsrM  r  dash_manifest_urlr  r  r  r  r  r&  r6  r  r  rG  rH  r  r  r  rI  r=  r  r'  rJ  r  r  rK  r*  r(  r)  r  rL  rM  r  r  rN  rO  sA   `` ```                             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@rz  _extract_formats_and_subtitlesz(YoutubeIE._extract_formats_and_subtitles  s    
 
 (33C8"z(*QI%	 
  !8!8!GG..y9'|;!\1""#>?K// 1c d	n	/	F	U 	% 	- uu9	% 9	%x ++;c?UYTZ=[\ 	fN*><Z\_bfag;hi 2
$../"..z~~>O/PQB*2q;-/HIG".r8"<K $$S%56".w(S!8L"MM;M $$[12 !FIaHb c!e f#	f* # r	$B)"o>N!"01R"S$23W$X!$23W$X!(,,-GHK)*OPL ,^=b cBX Xtq" q" q" q"f -...$($?$?X$V! !8!8!@AN%2-2B""5)K9$<AVZcAc""6*5 5n  %N:c~?Q?QRb?c & 5 56F G L L%^`mnn1n56WWVX5N2M?&(O 67GH~')#@@jR]^H(5(=(=K=>QUXYaXbSc(d#+}#</3/F/F0!!6088I8M8M0O
#3J@UWl#m #<<5HRbR|fpf|f|5}~$1$8$8$=%z@R$RM"(208-#HdNeNefoNp9p33Hk5Q['12BM?[jZkIl'm$!%!I!I((E[\eMe "J "gJD$+D3dV2DE F ;F67F !% 5 5dI FI! $21e[$J\J\ .%&$ K] KPQaQrjrfrt"#G$
 !'n < fASASTeAf  & 5 56G H M M 67HI~')#@@jR]^H(5(=(=K=>QUXYaXbSc(d#+}#</3/F/F0!!6088I8N8N0P
#3J@UWl#m #<<5HRbR|fpf|f|5}~$1$8$8$=%z@R$RM"(208-#HdNeNefoNp9p33Hk6R[(23D=(Y%$($K$KL]_got$K$uMGT+D3dV2DE F ;F67F !% 5 5dI FI$ 
$$%kN	21fk9VfVwowkwx,78J8J .6I0J0VaPUhXcmq 9K 9s -tAjM459/ 2-6'
/:)"#G
$Qr	$f q /s5   F[-;C[-[*I#[-&[-D[- A3[-A[-c              #   b  K   t        |dd      j                  d      d d d   }t        t        d|j	                         xs d             }|sy t        |      dz
  }t        |      D ]<  \  }}|j                  d      }t        t        t        |d d	             }t        |      d
k7  st        |      s1| j                  d| ddj                  |       t                       ~|\  }	}
}}}|dd  \  }}|j                  dt        ||z
              j                  d|      d| z   }|||z  z  }||z  }d| ddddd||	|
||z  ||t!        t#        j$                  |            D cg c]0  }|j                  dt        |            t'        ||||z  z
        d2 c}d ? y c c}w w)N)storyboardsplayerStoryboardSpecRendererr  r   ri  rJ   r  zhttps://i.ytimg.com/r   #r"     zMalformed storyboard r]  r  z$Lz$Nz&sigh=sb
storyboardr  r  z$M)r~   rk   )r  r  r]   r  r  r  r~   r  r  r  rowscolumnsr  )r!   r  r:   r;   r  rz  r  r  r[  r"   r.  r  r&  r   rA  r3  r  mathceilrX  )ry  r  rk   r  base_urlLr  r  countsr  r  frame_countcolsr|  r  sighr~   r  fragment_durationjs                       rz  _extract_storyboardzYoutubeIE._extract_storyboard  s    U_acchchilcmnrprnrtw'=txxz?QTRSIM  	GAt::c?D#k4845F4yA~S[##&;A3b$@PQdQfPg$hi5;2E6;d12hGAt""4QU4<<T1E&QUPVWC(D4K8N (> 9!!X+#   "X- !>!:;=  ;;tSV4 #$5x1GXCX7Y Z = 	2=s   E(F/*5F*F/c                 "   d }|rd| j                  d      vrwddd}| j                  dd gd      d	   xs t        t        |d
t        hf      }|r||d<   | j	                  |||t        | j                  |      ddddt        hfi            }|S )Nr3  r  
9999999999r  )bpctrhas_verifiedr  Tr  r   r  ppz
User-Agentr  r  	userAgent)r  r   )rv  r2   r   r3  r8  ra  )ry  r  r~  r  r3  r  r  s          rz  _download_initial_webpagez#YoutubeIE._download_initial_webpage  s    9D,C,CM,RR*C@E''$4'PQRS ] 1NOVYUZ3[\   d99XU$T%<%<^%L #6+PSu"UO  : G
 r|  c                    t        j                          }d}t        |dd dddddd	d
t        hf
      D ]  }t        |dt        j                  j
                  hddt        hf      }|dnd| d}t        |dt        d      hf      }	|	|	dz  r|	n
t        |	      }	|d|	 dz  }|	}|w| j                  | d| d|        ||z  } |rt        j                  |      |z   S t        |      S )Nr   adSlotsc                     |d   d   d   dk(  S )NadSlotRendereradSlotMetadatatriggerEvent!SLOT_TRIGGER_EVENT_BEFORE_CONTENTr  r  s     rz  r  z7YoutubeIE._get_available_at_timestamp.<locals>.<lambda>  s$    A&6$78H$I.$Y  ^A  %A r|  r  fulfillmentContentfulfilledLayoutplayerBytesAdLayoutRendererrenderingContent)N)#playerBytesSequentialLayoutRenderersequentialLayouts.r  r  instreamVideoAdRenderer
playerVarslength_secondsr  zan adza zs adskipOffsetMillisecondsr  r  r   z skippable after r  z: Detected z for )r  r2   r  rE  rF  r*   r"   r   r  r  r~  r  )
ry  r  r  r  nowwait_secondsr  rk   ad	skip_times
             rz  rl  z%YoutubeIE._get_available_at_timestamp  s0   iik$_  A24EGdfx { )4&7
  	)H $H|fll>S>S=TVfhjmxly.z{H$,Bxj2EB$X0H=_cKdJe/fgI$)2QIC	N	))A66$#  H:[E&!JK('	)* 99S>L003xr|  c                 B   t        |d      }t        |d      }|t        |d      }t        |d      }	t        |d      }
t        |d      }|rdn|rdn|
rd	n|	rd
n	d||	fv rdnd }| j                  |||||      ^ }}t        d |D              r|D ]  }d|d<   	 ||||fS )N).liveBroadcastDetailsisLive	isLiveNowisLiveContent
isUpcomingisPostLiveDvrr  r  is_upcomingr   Frr   c              3   >   K   | ]  }|j                  d         yw)r  Nr  )r  r  s     rz  r  z*YoutubeIE._list_formats.<locals>.<genexpr>  s     1AquuY1s   Tr  )r2   r!   rt  r.  )ry  r  r  r  r  r  rk   live_broadcast_detailsr  live_contentr  r  rq   r  ri  r  s                   rz  r  zYoutubeIE._list_formats  s    !-l<Y!ZM84? 6DG @|<m_=	&/{)0I-8M*6J*/G\3J*JJ  	 #AA(L\^hjuw  A)111 $#)$ &{GYFFr|  c           
      2   d }|rAd| j                   vr3| j                  ||d      }t        |d      s| j                  d       d }|sOd| j	                  d      vr<d|i}|j                  | j                                | j                  |dd||dd	|
      }|S )Ninitial_dataFr  r  zIIncomplete data received in embedded initial data; re-fetching using API.r  r  r  z!Downloading initial data API JSON)rv  rw  r  ri  r  rx  r   r  )r  extract_yt_initial_datar2   r  rv  r  r  r  )ry  r  r3  r~  r  r  r  s          rz  _download_initial_dataz YoutubeIE._download_initial_data  s    ~T-G-GG77'QV7WLj9##$op#d6M6Mm6\ \)ELL113411 V5#58 2 YL r|  c                     | j                   r|syt        |d      }t        |d      dk(  xs& d| j                  |d      xs dj                         v S )NF)topbardesktopTopbarRendererlogotopbarLogoRenderer)	iconImageiconTypeYOUTUBE_PREMIUM_LOGOpremiumtooltipTextr   )r  r2   r  r.  )ry  r  tlrs      rz  _is_premium_subscriberz YoutubeIE._is_premium_subscriber-  s`    $$L[] 78<RR OT^^C?E2LLNN	
r|  c                 F   | j                  |||      }| j                  ||      xs | j                  |      }| j                  ||||      }| j	                  |      }	|	r| j                  d       | j                  | j                  |||	      |||||	      \  }
}||||	|
|fS )Nz%Detected YouTube Premium subscription)r  extract_ytcfgra  r  r  r  r|  rE  )ry  r~   r  r  r~  r  r3  r  r  r=  r  r  s               rz  r  zYoutubeIE._initial_extract8  s    00nhW**8W=hAXAXYgAh228WnVcd $ ; ;L I DE'+'E'E'']<QRg~}>S(U$* |5JL\^hhhr|  c                 -    t        |i       \  }} j                  |       j                         dz   }|dz   z   } j                  ||| j                        \  }}}}}	t        |dt              }
t        |
dt              }|r! j                  | j                         |      S r fdnd }t        |dt              }t        |d	t              }t        |d
ddddt        ht        f      }t        |dddddt        ht        f      }t        |dddt        ht        f      xs i }t        |ddddt        hf      xs i } j                  |d      xs  j                  |d      } j                  |d      } j                  xr |xs t        |d      xs |xs
  |g d      }|s|r j                  d       |} j                  |d      }t        |d      }| j                  xr |xs |n|}||}t        |dt              }|rB|j                  d      s0 j!                  d      r j#                  d  d!       ng }g }|j%                  d"      D ]  }t&        j(                  j+                  t&        j(                  j-                  |            fd#} |d$      }|sO |d      }|} |r	| d%| d&z  } |j/                  d'd(t1        d)j3                  |d$   d*         dd+i      | d,       |j/                  |         j#                  d-j3                  d.j5                  |                    j7                  |||      S t9        t        |d/            xs, t9        t        |d/            xs t;         |d0            xs d }! j=                  ||||	|!      \  }"}#t        |d1      }$d2k(  r j?                   d3       s j!                  d4      st        |$d5      r jA                         t        |
d6t              xs i }% j                  |%d7      xs t        |
d7      }&tC         j                  |%d8      xs d9      }'|'rX|'jE                  d:      r?t        |d;      }(|(s |d<      })|)r|)j%                  d"      nd }( jG                  |'|(d+=       |&d>|' z  }&|&rd?|&jI                         v r6tK        |&d@      }&tK        |&jM                         dA       d> jN                   }&nLt        |
dBdCt        hf      r|&dDz  }&n2dE|&v r.tK        |&jM                         dA       d> jP                  rdFndG dH}& jS                  |&d+I       t        |dJtT              xs g }*|*sLrJtW        jX                   j[                  dK            D +cg c]  }+t]        |+j_                  d             }*}+|*D ]z  },|,jE                  dL      stW        j`                  dM|,      }-|-s.dN |-jc                         D        \  }.}/|.d*kD  sN|/d*kD  sT|.|/z  }0D ]  }1|1j                  dO      dPk7  s|0|1dQ<     n  je                  ||fdR      }2 |dSdTg      }3|3r|2j/                  dU|3i       |2jg                         }4g dV}5ti        |5      }6|2jk                  fdW|5D               |2D ]5  tm        fdXto        |5      D        |6      }7dYdU   v rd*ndZd[|7z  z
  d\<   7  jq                  |2        jr                  ju                  |4       t        |d]      xs  |d^      }8 jw                  ty        t        |d_      xs t        |d`      xs  |d_                  }9t        |da      }:t{        t        |"db            };t{        t        |"dc            }<|!s	|<r|;r|<|;z
  }! j}                  |!      }=dOdd}>dev rnD ]i  }?|?j                  df      }@|@dgv }Ad2k(  rAr |>|?dhdij       +|=r|?j                  dk      r? |>|?       Hdlk(  sN@dmk(  r	 |>|?       \As_ |>|?dndoj       k |=r j                  |;|||dlk(         jk                   j                  ||!              j                  |:      }Bi d$d|dpdq|2drt        |4ds      dt|du|9dvt        |9d dwd x      d0|!dyt9        t        ||fdz      xs  |d{            d|t        t        |d}            d~t        |d      du s |d      dk(  s |d      dk(  rdnd*d|d|8r|8gnd d|*dt        |
d      dt        |d      rdnt        |d      rdnd|;dddddd j!                  dg       v rdndOddddf
d}Cd }D fd}Efd}Fi }Gt               }Ht        |ddddd f      D Ici c]  }I|Id    j                  |Id   d       }J}Id j                  d      vxr%  j!                  dd      xs  j!                  d      }Kt        |d       }Lt        |Ldddddt        hf      }M|MD Nch c]  }N|Nj                  d      dk7  s DN      ! }O}NMD Nch c](  }N|Nj                  d      dk(  rt         DN      d      * }P}NLD ]n  }Q|Qd   d   }R|Qd   t           }S|Qd   t           d   d   }T j                  |S      d   }U|Qd   t           }Vi }Wd}Xt        |Rdd f      D ]  }Y|Yd   }t+        |       D|Y      }Zt        fddD              xs Uj                  xr Uj                  xr | }[Xs0d+}X V[xs Uj                        x}\rWj                  \dTd       Ws([r&Hj                  S        j                  |S        n;j                  dd g      dZ   }] j                  Ydd      }^|Yj                  d      dk7  }_|_r#Zs EG|Z^SW       Yj                  d      sJj                         D ]g  \  }`}a|`s	`}b_r `dk7  rKs`dZ z  }`at        ^d d      z  }aZdb k(  r Fb        E|#|` da dÝSW        E|#|`aS]bk(  rWnd`iW       i t        Zd      }Z_sZrZ|#v rtK        ^dū      }^Yj                  d      r FZ        E|#||Z d^ dÝSW        E|#|Z^SW        Oj                  G       Pj                  |#       |OrkPro n HrPOsPrL j                  d+t         dƝOxr dd.j5                  O       dAPxr dti        P       dɝdʬ˫      ̫       |#Cd<   G|Cd<   t&        j(                  j                  |      }c|cj                  |cj                  fD ]c  }dt&        j(                  j+                  |d      }e|ej                         D ]/  \  }f}gdD ]%  \  }h}i|hdz  }h|hCvsfiv st;        gd*         Ch<   ' 1 e |xs d9jM                         j                  dѫ      rtW        j`                  d|      }-|-r|-j_                  dӫ      }j|-j_                  dԫ      }k|krkj                  dd9      }kjskd d }jCj                  |-j_                  djM                               |-j_                  d׫      x}lrlgn;|-j_                  dث      j%                  d٫      D lcg c]  }l|ljM                          c}l|-j_                  dګ      jM                         kt9        j      dۜ       d܊t        |dd
fdބddddf j                  d      Cd<   	 |d   d   d   d   d   d*   d   d    d뉎 dd퉋dv rdnddgCj                  di       d<   |rU j                  ||!      xs*  j                  ||!      xs  j                  ||!      xs d Cd<    j                  |      |Cd<   t        |dtT        g       }mt        |md      }n|nrnj                  d      }o|or j                  o      }ot        nd       dk(  roCd<   nltW        j`                  do      }-|-rTCj                  |-j_                  d      t        |-j_                  d[            t        |-j_                  d            d       t        nd tT              xs g D ]  }pt        t        |pd d            }q|qD ]  }rd dfd d gdffD ]y  \  }s}tt        r|st              xs i j                  d      }u|us.tW        j                  tu      }-|-sGt        |-j_                  d            C|-j_                  d	      d
z   <       t        nddddddddddddt        hfd      Cd<   t        |nd      }v|vrB j                  vd      }w|vj                  d      rwCd<   nCj                  dy      wCdy<   t        md      }x|xrt        xd      }yt        |ydddddd d!d"d#d$d%d&dd'ddt        hf      }zCj                   j                  |yd      xs	 zrzd*   nd  j                  yd(      zrznd d)       Bs( j                  t        yd*d+t        hfd            }Bt        xd, tT              xs g }{d}||{D ]  }}t        |}d-       d+u sd+}| n {D ]  }}|}j                  d.      xs i }~|~j                  d      }|s- j                  ~d      } j                  |~d/      }|d0k(  rCd1<   _|rbd2k(  rCd<   nd3k(  rrgnd Cd4<   d5k(  sCd<     j                  t        xd6            } j                  |t        j                        rd+Cd7<   Cj                  |Cj                  d8      Bt        |Bd d9d x      d:       t{        t        |d;      t        <      xs t{         |d;      t        <      }|rHt        j                  j                  t        j                  j                        j                  d=      n)t        t        |d;            xs t         |d;            }|rs4d>v r/t         j                   j                  nd?                  xs }Cd@<   |CdA<   |rndBvrit              j                  t        j                  j                  C      }|t        dD      k\  r&Cdp   D ]  }?|?j                  df      dEk(  sd+|?dF<     dGD ]  \  }}hCj                  |      }g|gsgCh<      j                  t        ndH            } j                  |t        j                        xs t        |dIt              } j                  t        j                        rdJn j                  |r&$ j                  t        j                        xs dnd |r&$ j                  t        j                        xs dnd Cd~   dk\  d n4 j                  t        j                        xs t        |dKt              L      CdM<    j                  |m      |CdN<    j                  |       |CS c c}+w c c}Iw c c}Nw c c}Nw c c}lw # t        t        t        f$ r Y Yw xY w(P  Nz//www.youtube.com/zwatch?v=).r  r  )errorScreen%playerLegacyDesktopYpcTrailerRenderertrailerVideoIdc                 ,    j                  | d       S )Nri  )_html_search_meta)r  ry  r3  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>^  s    $"8"8GT"8"R r|  c                      y r  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>_  s    r|  r  r  r  .r  r  $structuredDescriptionContentRendererrI  &expandableVideoDescriptionBodyRendererattributedDescriptionBodyTextvideoDescriptionHeaderRendererr  r  r  !playerOverlayVideoDetailsRendererr_   ).r_   )zog:titleztwitter:titler_   zoNo title found in player responses; falling back to title from initial data. Other metadata may also be missing).rj   shortDescription)multicameraplayerLegacyMulticameraRenderermetadataListforce_singlefeed
noplaylistzDownloading just video z because of --no-playlist,c                 .     t         fdt              S )Nc                     |    d   S )Nr   r  )r  r^  s    rz  r  z=YoutubeIE._real_extract.<locals>.feed_entry.<locals>.<lambda>  s    4 r|  )r4   r3  )r^  	feed_datas   `rz  
feed_entryz+YoutubeIE._real_extract.<locals>.feed_entry  s    &%';S B Br|  r[   z (ru  url_transparentYoutubez{}watch?v={}r   T)_typer  r~   r_   zNDownloading multifeed video ({}) - add --no-playlist to just download video {}r  lengthSecondsrk   ).rK  r  z): Video is in Post-Live Manifestless modeallow_unplayable_formats).licenseInfos)r  playerErrorMessageRendererr  	subreasonr   z>The uploader has not made this video available in your countryavailableCountriesregionsAllowed)metadata_availablez. zsign inz,This helps protect our community. Learn morer  r  playerCaptchaViewModelz:. YouTube is requiring a captcha challenge before playbackz-This content isn't available, try again laterr  r  a   has been rate-limited by YouTube for up to an hour. It is recommended to use `-t sleep` to add a delay between video requests to avoid exceeding the rate limit. For more information, refer to  https://github.com/yt-dlp/yt-dlp/wiki/Extractors#this-content-isnt-available-try-again-laterr{  keywordszog:video:tagzyt:stretch=z(\d+)\s*:\s*(\d+)c              3   2   K   | ]  }t        |        y wr  )r  )r  rC  s     rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>  s     <E!H<s   r  r  r   )..rw   zog:imageztwitter:imager~   )maxresdefaulthq720	sddefault	hqdefault0	mqdefaultrA  sd1sd2sd3hq1hq2hq3mq1mq2mq3r  r{  3c              3   x   K   | ]1  }d D ]*  }ddj                  |||dk(  rdnddk(  rdnd      i , 3 y	w)
)webpjpgr~   z:https://i.ytimg.com/vi{webp}/{video_id}/{name}{live}.{ext}r  _webpr   r  _live)r  r^  r]   r  r_  N)r   )r  r^  r]   rq   r  s      rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>  sn      B 	B +. OVV!# #vW2{V_G_Geg W i
 B 
 Bs   7:c              3   D   K   | ]  \  }}d  d | d   v s|  yw)r   r~   Nr  )r  r  tthumbr  s      rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>  s2     eDAqAhZqQRPSBTX]^cXdBdaes     z.webpr  r  r  categorygenrer  externalChannelIdownerProfileUrlstartTimestampendTimestampc                 z    | j                  d      xs d|z   | d<   t        | j                  d      |d      | d<   y )Nr  r  r  r  r!  )r  r#   )rD  note_suffixpref_adjustments      rz  adjust_incomplete_formatz9YoutubeIE._real_extract.<locals>.adjust_incomplete_format  s<    !$!6!<" OC!.sww}/E{Z]!^Cr|  r5  r  )Nhttpr,  z(ended)ix)r  r  r  r  r8  z(incomplete)ir  r  rw   )r  r~   rj   rf   rh   z"https://www.youtube.com/channel/%sri  r}   ).	viewCountinteractionCountaverage_ratingaverageRatingr`   isFamilySafeFisFamilyFriendlyr  zog:restrictions:agez18+r   r  rc   rv   rt   playableInEmbedrq   r  r   isShortsEligibler  rL   r  resr  zhdr:12sourcezprefer-vp9-sortcompat_optszvcodec:vp9.2channelsr  r&  r  )r   r   _format_sort_fieldsc                     t        | j                  d      xs dd      j                  dd      xs | j                  d      S )NvssIdr   r  rL  languageCode)r-   r  rA  )r   s    rz  get_lang_codez.YoutubeIE._real_extract.<locals>.get_lang_codec  s=     7!3!9r3?GGSQ 1yy02r|  c                     | j                  |g       }j                  D ]>  }i ||g d}|j                  d|dt        dt	        ||            d|ddt
        |i       @ y )N)rD  xosfr]   r~   r  r^  re  T)re  _SUBTITLE_FORMATSr;  r;   r9   rf  )	r  r  r\  sub_namer  r  	lang_subsrD  ry  s	           rz  process_languagez1YoutubeIE._real_extract.<locals>.process_languageg  sz    !,,Y;I-- 
 :59b9  37#<>NxY^>_`H!4." 	
r|  c                 l    D ].  }|j                  d      dk7  s|j                  d      r*| |d<   0 y )Nr  r  r  r  )r\  r  r  s     rz  "set_audio_lang_from_orig_subs_langzCYoutubeIE._real_extract.<locals>.set_audio_lang_from_orig_subs_langu  s6     .55?f,QUU:5F$-AjM.r|  captionsplayerCaptionsTracklistRenderertranslationLanguagesc                     |d   xr |d   S )Nr  languageNamer  r  s     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    Q~.D1^3D r|  r  r'  r   r~  translated_subsr   r  r  c                      |d   xr |d   d   S )NrK  r#  r$  r  r  s     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    ?+`*>_0` r|  captionTrackskindr  za-rK  r  
clientNameSUBS_PO_TOKEN_POLICYc                     |d   S )Nrx  r  r  s     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    STU^S_ r|  rx  c              3   :   K   | ]  }|t        d       v   yw))exp.Nr	  )r  r  r  s     rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>  s     T\"l;;Ts   )xpexpvr1  r  )r4  potcr  r^  isTranslatableundrL  z from %sz-origz (Original)tlangz (auto-generated)zL: There are missing subtitles languages because a PO token was not provided.z+Subtitles for these languages are missing: zAutomatic captions for z languages are missing.r  r!  )r  automatic_captionsri  ))r  )r  r  )end)r8  _timez
Auto-generated by YouTube.u  (?xs)
                    (?:\n|^)(?P<track>[^\n·]+)\ ·\ (?P<artist>[^\n]+)\n+
                    (?P<album>[^\n]+)\n+
                    (?:℗\s*(?P<release_year>\d{4}))?
                    (?:.+?\nReleased\ on\s*:\s*(?P<release_date>\d{4}-\d{2}-\d{2}))?
                    (?:.+?\nArtist\s*:\s*(?P<clean_artist>[^\n]+)\n)?
                    .+\nAuto-generated\ by\ YouTube\.\s*$
                r   r      r   clean_artistr   u    · r   )r   r   r   r   r   )r  z!engagement-panel-comments-section)r  twoColumnWatchNextResultsr  r  r  .r  r  . commentsEntryPointHeaderRenderercommentCountc                     |d   d   v S )Nr  panelIdentifierr  )r  rC  COMMENTS_SECTION_IDSs     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    Q/S-TUf-gk- r|  header"engagementPanelTitleHeaderRenderercontextualInfor
  ri   r  r<  conversationBarliveChatRenderercontinuationsreloadContinuationDatar  z https://www.youtube.com/watch?v=z &bpctr=9999999999&has_verified=1json)r  r  youtube_live_chatyoutube_live_chat_replay)r~   r  r]   r  	live_chatr   ro   )r  r<  r  r  r  r@  videoPrimaryInfoRenderersuperTitleLinkc                     | d   d   S )NsuperTitleIconr  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>A  s    !$4"5j"A r|  LOCATION_PINr]  u   (.+?)\s*S(\d+)\s*•?\s*E(\d+)r   )seriesseason_numberepisode_numberc                     | d   d   d   S )NvideoActionsmenuRenderertopLevelButtonsr  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>M  s    a/?@QR r|  )toggleButtonRenderer.)"segmentedLikeDislikeButtonRenderer.rY  c                     | d   d   d   S )NdefaultTextaccessibilityaccessibilityDatar  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>U  s    a&6&GH[&\ r|  z*(?P<count>[\d,]+)\s*(?P<type>(?:dis)?like)c                     | d   S )Nr]  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>W  s    !O*< r|  c                     | d   d   S )Nr^  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>X  s    !,?*@AT*U r|  zK(?P<type>(?:dis)?like) this video along with (?P<count>[\d,]+) other peopler  r  r  _countrV  rW  rX  #segmentedLikeDislikeButtonViewModellikeButtonViewModeltoggleButtonViewModeldefaultButtonViewModelbuttonViewModelaccessibilityTextr  rp   )r
  videoViewCountRendererr
  r  r  videoSecondaryInfoRenderer)ownervideoOwnerRendererattributedTitlecommandRunsonTapr  showDialogCommandpanelLoadingStrategyinlineContentdialogViewModelcustomContentlistViewModel	listItemslistItemViewModelsubscriberCountText)rd   re   r   )navigationEndpoint)r_   runs.rx  )r  r  c                     | d   d   d   S )NmetadataRowContainermetadataRowContainerRendererr|  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    !234RSTZ[ r|  c                     | d   d   S )NmetadataRowRendererhasDividerLiner  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    !,A*BCS*T r|  r~  )r  r   Licenser   AlbumArtistr   Song)rj  rk  r  r   rd   zhttps://www.youtube.com/%s)rz   r{   r|   
uploadDate)timezonez%Y%m%d)rr   NdateTextry   rx   )r  r  r  )tzinfoztoday-2daysm3u8_native__needs_testing))r   r   )r   r   r  	isPrivaterb   
isUnlisted)
is_privateneeds_premiumneeds_subscriptionr   is_unlistedra   __post_extractor)z(Last 2 hours)r  )r7   	_match_idhttp_schemer  r  r2   r  r!   r3  r  r  r  r  _preferred_langr  r  r  r+  r  rE  rF  r*   unquote_plusr;  r.   r   r&  playlist_resultr"   r(   r  r  
report_drmr   r:  raise_geo_restrictedr.  r,   r  rn  r  raise_no_formatsr  r  finditer_meta_regexr5   r  r  groups_extract_thumbnailsr  rz  r9  r  r  _remove_duplicate_formatsr  _sort_thumbnailsr  r/   r)   r  r  r  handle_from_urlr    r   r  rv  r-   rf  ri  ra  rj  r  r  rc  r  r  r  rI  r  r#   rG  fragmentr  endswithrA  r  re  KeyError
IndexError	TypeErrorr  r  "_extract_chapters_from_descriptionr  r4   r  r<   r   r0   r'   r  r  r   r  r   dtdatetimefromtimestampr  utcstrftimer6   r1   r  r   AVAILABILITY_PRIVATEr  AVAILABILITY_PUBLIC_availabilityAVAILABILITY_PREMIUMAVAILABILITY_SUBSCRIPTIONAVAILABILITY_UNLISTEDextract_commentsmark_watched)ry  r~   r  r  r  r  r  r=  r  r  playability_statusestrailer_video_idsearch_metar  r  initial_sdcrinitial_descriptioninitial_vdhrinitial_video_details_rendererinitial_titletranslated_titlevideo_titletranslated_descriptionoriginal_descriptionvideo_descriptionmultifeed_metadata_listentriesfeed_idsfeedr  feed_id
feed_titler_   rk   r  r7  rj  pemrr  r  	countriesregions_allowedr  rP  keywordr  whratior  r  thumbnail_urloriginal_thumbnailsthumbnail_namesn_thumbnail_namesr  r  rf   owner_profile_urlr  live_end_timerl  r  rD  r  is_adaptivechannel_handler  r  r   r"  ri  skipped_subs_clientsr&  translation_languagesget_translated_subsr  all_captionsrM  need_subs_langsneed_caps_langsrG  pctrr  innertube_client_namer>  ry  
pot_paramsalready_fetched_potcaption_trackr\  requires_potsubs_po_token	orig_lang	lang_nameis_manual_subs
trans_code
trans_nameorig_trans_coder  	componentr  rB  rC  d_ks_ksr   r   ar  vpirstltlbtbrsr  getterregexr  vcrvcvsirvorcollaboratorsr|  multiple_songsrowmrr	mrr_titlemrr_contents_textowner_badgesrx   ry   upload_datetimes_kr  r  rA  r  r  rq   r  r  r  r3  s   `                                                                                                                                       @@@@@@@@rz  _real_extractzYoutubeIE._real_extractI  s   *33]>>#&##%(<<+h6dhdydyT-A-A8eMa.CEUWa  ,8 N % V ?? $++-1AC C " S(6 	 %%57L\`a#O 
 $L%I=vs3L M +<SB+Ys:D E $LS:TFC3I J PMO 	)5l5~/$E9 *: *@=? 	' NN<1 G~~<gF 	  >>,G,,A1A N#M7;N*N &&LM 	 }56 (K!%>R!S(8JK
 (<'G !!<&< $ $Mc	 	
 $ 3"+N# #=+<+<=O+P~~l+!8
B[\]399#> -D !' 5 511$7!9IB ).G" !+G!4J'E!2j\!33NN!2"+**11(IdOA<NO/6 8 "'$  OOG,5-6 dkk		(+X78 ++X{4EG G  	- IJ G"9\?#KLG%k*&=>GBF 	
 x}FVXbdlm 	IW6H%&68NO+%z)RST>>"<=,~_tBu)$=TS YVX  ^^D(3`yAUW_7`F"4>>$#D#JKI''(hi ),8L MI$*56F*GBQO$9$9#$>W[	--iW[-\Byk**.'0^_F *6<<>3 ?@4C[C[B\]F3mE]`d_e5fgZZFDN%fllnc:;2PTPePen  lA  >B Bw x  %%ft%<]JdKQrG T%5%5n%EwOQ QWWY/0QH Q   	G!!-0yy!5w?<dkkm<DAq1uQ !A!( =A uuX&87<"3 4= 	 --}l.KMde
#Z$AB}  )oo/

  0 B &	B 	B
   	SEeIo$>egxyA(/5<(?1RAPQE"RE,	S 	&&z2))*=>\:6N+g:N&&{m[1 (':;(;'() *
 &l4EF'	2HJZ([\%i0F&WXMo$6H $ ; ;K R	_
 22 g77:.&*AA+-+ -SiY^_*77?305 I-#7705$0.bef)g, !11?CmU`dmUmo 	t//0@(KL--.?@"
("
["
 w"
 *	"
 &9;G"
 ,"
 *"
 <
D:^hlm"
 "
 +=,79KL 3124"
 mIm_,UV"
  ,75@12g=45>  FG'"
( ;)"
* 8*d+"
, H-"
.  +?AR!S/"
0 ;1"
4 !*- I ),8J KW!05%8"3t~~mUW7X"X^fHfg$7="
H	2		.
 	"u
 %%5Z!BDZD8F G!
  $..n1EPQ."RR!
 !
 0t7N7Nv7VV [NN.6Y$..:Y 	 +`c#C>QTW[V\*^ _9Eb#QW\aIa=-bb $Aswwv%'? s+T2A A  T	Bj>"CDD_-.HIK$&$78X$YZb$cdp$q!+/+B+B;+OPf+gJ')/':;]'^$J"'!-d_F_4`!a Da(3h')-8	 T^TT u"++sZ5X5X5r]r0s 
 +*.'(@,JpZdZpZp(qq}q"))#0$'!6+  "l(,,[966xMFF6D6226	 NN=&1NM	!.!2!26!:e!C!$ $!8Y	;PZ\(,,-=> .C.I.I.K m*J
% &0O%**=2$")o5
"l9dJ&OO
 b(9$:::?K ).ZL:N)l+6ZQ %*Hj*k&/?&B
R\Hk`jHkm%m0 )D9	!iCU6U&y2EF	 $$%566yA$*H56I$+[1;
L !&)YU_aGDaN --i8--.@A#iT	l  _..x=*hio&QRVR[R[\kRlQmmn$ok&=c/>R=SSj$k	D.  &8!"%[\\**3/
$--z/?/?@ 	9ILL)))4E 91!O 9IC7NC$19$21Q4$8S	99	9 #**,556TU99 '(D #zz.9#zz.9#/#7#7R#@L''3BQ'7!ZZ8-1ZZ-G(G(G9=H9M9S9STZ9[%\Aaggi%\!ZZ0668$0$/$=   ] ,\ <
  0(<`br
 %!9_	$%@ABSTUghixyz{|  ~V  W  Xf  g :(Ccd$4?C]4]0"<> =DOOK,[9 00xH ??hW::;LhW 	  #33LADOe, #=>((+,CnnS)ACFTU (+D$99%FLD&*jjm-0A-?.1$**Q-.@% 
  R    &   :[]^   &C\I+K != UN  nMo*p & ")fd!;!Ar F Fw O #%88E5#9D#FPQUQ[Q[\cQdFeTZZ%7(%B C %&&&, ".d0A357LNc')@BZ!#6	5G QV	"WD t%LMC__S+6778$46D01XXl+3)+D&#?@t%DEC(!=#w@RTg&9JO]lS"5w	C5/R SM KK>>#w7hP]M!<Lcg*.//#?T*U-:M  "!%!5!5 \r' )./"0 [    #N 3 TUY]]%)N  :gg34:GGG,	  NN38	$(NN3$H!	)&7DO' G+(9W"h.AR+<*=X\Y"f,(9W:   //TCl0mnL|Y-?-?@.2*++)(?[eij
 	 )L,?*U M[6L 	
 YbBKK%%iAJJ8T	, EF >";|#<=	 	 9@R1R*%%dnnT:&FGI XLW  *]%[;.UU/<DDBKKOOD\O"3M"BB	? 6Cwwz*m;15-.6 J 	HCAS		
 %%l4&BCoofi.L.LM S"=+TR 	 	0M0MNH##% !-1G OOFI,J,JK T !-1G OOFI,O,OP T,2$.$6DOOFI,K,KL Q |4P $ S 	^ $(#8#8RZ\c#d ($45IQz!
 cAD &]" *i0 		sA   ,!AZ+-!AZ02AZ5
AZ5-AZ:AZ?
A[ [A[[A[r`  )T)NFr  )NNr   )NFN)Y__name__
__module____qualname__IE_DESCr   r&  r	   _INVIDIOUS_SITES
_VALID_URL_EMBED_REGEX_RETURN_TYPEr  r7  r6  r5  r4  r  r  _GEO_BYPASSIE_NAMEr  r3  _TESTS_WEBPAGE_TESTSrw  r$  r%  rI  rH  r  cached_propertyr{  r  r  classmethodr  r  r  r  r  r  r,  r5  r<  r'  rN  r#  rU  rb  re  rl  r  r  r  r  r  r  r   r  rU  staticmethodr  r  r  r  r
   r  r  r  r  r  r
  r$  rE  rI  r|  r  r  r  rt  r  r  rl  r  r  r  r  r  __classcell__)r  rB  rC  r  s   000@rz  rH   rH   T   s7   G !@ "(((3DDE "( "A H		8L& LO3-=?,*KGhG
-
5
 <
 	

 H
 12
 ,
 %c
 4
 U
 S
 A
 
 
 {
  #!
" :#
$ "&8#%-0I7
: $?  hB +6ZA%
  AhZ 4J
-
5
 <
 	

 H
 12
 ,
 %c
 4
 U
 S
 A
 
 {
 #
  :!
"  #
$ 8#%-0I3
6 $=YhX A<
-
5
 .
 	

 H
 12
 y
 %c
 4
 U
 S
 2
 
 #
 :
  '!
"  #
$ 8#%!%>3
8 !-1

 0G$Whb =
-
5
 a
 	

 H
 7)
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%"*C7
< /!-1
A%_hn I8
-
5
 N
 	

 L
 8*
 }
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%%(A7
: #D)9G$ihr P8
-
5
 2
 	

 H
 ?+
 }
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%%,E7
: #D)A!qht I8
-
5
 :
 	

 L
 ?+
 '
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%(+D3
6 :=shr 58
-
5
 <
 	

 H
 7)
 |
 %c
 4
 U
 A
 
 #
 :
 '
   !
" I#
$ 9#%$'@1
qhl 18khz 
-
5
 2
 	

 H
 7)
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%"&?7
: 66"D)G$sh~	 
-
5
 L
 	

 H
 8*
 z
 %c
 4
 "4
 U
 A
 
 #
 :
  ,!
"  #
$ '!+8#%"&?7
: #D)A!{	h@ =
-
5
 O
 	

 J
 +,
 {
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$  '8#%#'@5
8 #D)? }
hD }hN =
-
5
 |
 	

 H
 +,
 }
 %c
 4
 U
 A
 
 #
 :
 '
   !
" J#
$ 9#%%)B1
4 #D)=IhL ;
-
5
 H
 	

 J
 8*
 /
 %c
 4
 U
 S
 A
 
 #
 :
  ,!
"  #
$ '!+8#%04M7
< !-1
C&GhX =	Shb =	]hh .ghn qmh~ =
-
5
 K
 	

 H
 -.
 }
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%%)B3
6 #D)E#sh~ =	yhF =BA%
 -Ch\ =Yhd =
-
5
 w
 	

 H
 ;-
 H
 %c
 4
 U
 	
 A
 
 M
 #
  :!
" '#
$ "&8#%I(A5
8 #D)? ahd =
-
5
 O
 	

 H
 ,-
 '
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" M#
$ %!!%8#%(+D;
> #D)E#ahh ]ghr =	mh| =%A%1
 /whT =
-
5
 4
 	

 H
 ?+
 x
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#% $=7
: 77"D)C"QhZ =7A%
 ^Uhr ohz wh@ 8hF CEhN ;KhV =Sh` =	[hl ? 
- 
5 
 ] 
 	 

 : 
  
 	{ 
 H 
 7) 
 y 
 %c 
 4 
 "4 
 U 
 S 
  ! 
" A# 
$ "%!!%&8#"%!? 
B #D)M'eht Ash~ PA%"W>	
 $yh\ =
-
5
 Z
 	

 H
 +,
 (
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#%)+D1
4 #D)=Wh^ =
-
5
 B
 	

 H
 ;-
 {
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%#<U9
< #D)I%Uhb =_hh Cghp !
-!
5!
 Z!
 	!

 [!
 !
 12!
 H!
 7)!
 0!
 %c!
 4!
 "4!
 U!
 S!
  23!!
" A#!
$ "%!!%& 8#%1A!
D #D)K&mh| =yhD =
-
5
 \
 	

 L
 ,-
 ~
 %c
 4
 "4
 U
 S
 A
 
 #
  :!
" '#
$ "&8#%&)B5
8 :? AhF 
-
5
 Q
 	

 H
 ,-
 *
 %c
 4
 U
 A
 
 :
 '
  
  I!
" 8#
$ $%+1J/
2 #D);Ah@ }hH ?EhP =MhX =
-
5
 5
 	

 H
 ?+
 |
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%$(A9
>  )?YK*HI!

 (M'Uhf ?#i-)1M%NO	chp <mhv <
-
7
 ,
 	

 H
 ;-
 y
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%!%>9
> !
C%uhB  =
-
5
 C
 	

 H
 8*
 }
 %c
 4
 U
 S
 A
 
 {
 #
  :!
" '#
$ "&8#%%(A5
8 #D)? hB! =
-
5
 ;
 	

 H
 ?+
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%&!+8#%"&?;
> #D)E# hJ" =
-
5
 S
 	

 H
 7)
 {
 %c
 4
 "4
 U
 $S
 A
 #
 9
  ,!
"  #
$ '!+8#%#&?7
: #D)C"E"hJ# =
-
5
 A
 	

 J
 7)
 |
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#%$(A1
4 #D)9I#hH$ =
-
5
 <
 	

 J
 +,
 *
 4
 U
 2
 
 #
 :
 '
  
  B!
" 8#
$ $%+'@/
2 #D);C$hB% =
-
5
 ;
 	

 H
 +,
 *
 4
 U
 A
 
 #
 :
 '
  
  B!
" 8#
$ $%+'@/
4  )6D6*:;!
 CCA!$hB& "<A&hJ& 6<
-
5
 ;
 	

 H
 ?+
 y
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%!%>7
<  )?UG*DE!

 $K&I&hV' ?<
-
6
 :
 	

 L
 ?+
 '
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%(+D3
8  !
 :E#U'h\( H9
-
5
   b
 	

 H
 ?+
 .
 %c
 4
 "4
 U
 

 S
 A
 
  {!
" ##
$ &&!%&!+8#%/)B=
@ #D)G$[(hf) =
-
6
 =
 	
 ~
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ :%
& ''
( "&8#%&)B9
>  )"' ){+  "
 $Q)c)hz* <
-
5
 O
 	

 H
 +,
 x
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#% (A1
4 #D)=u*hv+ ?!
-!
5!
 ]!
 	!

 ]!
 +!
 J!
 D!
 !
 A!
 '!
 !
 ~!
 4!
 U!
  "4!!
" %c#!
$ !U"")J&#%!%$%A!
F T
K(s+hF- =
-
5
 G
 A	

 '
 
 +
 D
 |
 4
 U
 S
 #
 #
 
  !
" K#
$ ++%'89#%!%$%3
6 #D)=C-hD. =
-
5
 @
 A	

 '
 

 >
 B
 z
 4
 U
 S
 #
 #
 
  !
" U#
$ #)z#%!+&!%$%7
: #D)A!A.hF/ =
-
5
 _
 2	

 '
 +
 <
 @
 *
 4
 U
 %c
 #
 #
 
  !
" O#
$ ,,#%!+&!%$%"9
> "
C%C/hP0 =
-
5
 X
 2	

 '
 	
 +
 D
 y
 4
 U
 #
 #
 
 
  O!
" +,#
$ #%!%&%!3
8 "
="M0hFX1 w
-
5
 8
 :	

 A
 
 I
 4
  
 8
 #
 S
 *
 :
 U
  H!
" #
$ 12&)+T;"#!5
8 #D)A!H Q
-
5
 g
 	

 H
 8*
 ,
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%-3L3
6 #D)? F _
-
5
 T
 	

 H
 7)
 |
 %c
 4
 U
 S
 2
 
 #
 :
  !
" '#
$ "&8#%$(A5
8 #D)A!H [
-
5
 J
 	

 H
 +,
 S
 %c
 4
 U
 A
 
 #
 :
 '
   !
" I#
$ 9#%TTm1
6  )=8**EF!
="J (XAS
 "D)IQNf "*!'144008859?: 8N7S7S7U%V%Vtq!ad%V"j j     % %";
5'nmF^2 26$ +sZ 48 AL 
/( G G
	3 Z_  _d R!F'7R 4 4.  0
:/bV(p 9 9	R = = 
 
,"3 " "H %*oFYFYaetx$(X\fj %XO Xt4<l 	^ 	^ ^ ^5n3-j`D
55&Pd$L"<G, 	
i"\
I? &Ws   C%AI?rH   )\r  r  ra  r  r  r  rV  r~  rq  r  rj  r  r  urllib.parserE  _baser   r   r   r   r   r	   r
   r   r   jsc._builtin.ejsr   jsc._directorr   jsc.providerr   r   r   r   pot._directorr   pot.providerr   r   networking.exceptionsr   utilsr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   utils.networkingr=   r>   r?   rf  rj  rg  rh  ri  rk  rm  r  rH   r  r|  rz  <module>r     s            	 
   
 
 
 , 2 a a 2 8 .& & & & & & & & & &N K J. %C "$A !'G $#?  'G $(I %K QF( QFr|  